@entur/dropdown 6.0.13-beta.0 → 6.0.13
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/dropdown.cjs.development.js +5 -1
- package/dist/dropdown.cjs.development.js.map +1 -1
- package/dist/dropdown.cjs.production.min.js +1 -1
- package/dist/dropdown.cjs.production.min.js.map +1 -1
- package/dist/dropdown.esm.js +5 -1
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +0 -3
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/components/DropdownList.tsx","../src/components/FieldComponents.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/utils.ts","../src/NativeDropdown.tsx","../src/index.tsx","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/SearchableDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { UseComboboxPropGetters, UseSelectPropGetters } from 'downshift';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { Checkbox } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../types';\n\nimport './DropdownList.scss';\n\ntype DropdownListProps<ValueType> = {\n ariaLabelChosenSingular?: string;\n ariaLabelSelectedItem?: string;\n getMenuProps:\n | UseComboboxPropGetters<ValueType>['getMenuProps']\n | UseSelectPropGetters<ValueType>['getMenuProps'];\n getItemProps:\n | UseComboboxPropGetters<ValueType>['getItemProps']\n | UseSelectPropGetters<ValueType>['getItemProps'];\n highlightedIndex: number;\n isOpen: boolean;\n listItems: NormalizedDropdownItemType<ValueType | string>[];\n floatingStyles: { [key: string]: any } | undefined;\n setListRef: (node: HTMLElement | null) => void;\n loading?: boolean;\n loadingText?: string;\n noMatchesText?: string;\n selectAllCheckboxState?: () => boolean | 'indeterminate';\n selectAllItem?: NormalizedDropdownItemType<string>;\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n [key: string]: any;\n};\n\nexport const DropdownList = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular = 'valgt',\n ariaLabelSelectedItem = ', valgt element, trykk for å fjerne',\n getItemProps,\n getMenuProps,\n inputValue,\n isOpen,\n highlightedIndex,\n listItems,\n floatingStyles,\n setListRef,\n loading = false,\n loadingText = 'Laster inn …',\n noMatchesText = 'Ingen treff for søket',\n selectAllCheckboxState,\n selectAllItem,\n selectedItems,\n showSelectAllInList = false,\n ...rest\n}: DropdownListProps<ValueType>) => {\n const isMultiselect = selectAllItem !== undefined;\n const isNoMatches =\n !loading &&\n (listItems.length === 0 ||\n (listItems?.length === 1 &&\n listItems?.[0]?.value === selectAllItem?.value));\n const isItemSelected = (\n item: NormalizedDropdownItemType<ValueType | string>,\n ) =>\n selectedItems.some(\n selectedItem =>\n selectedItem?.value === item?.value &&\n selectedItem?.label === item?.label,\n );\n\n const ariaValuesSelectAll = () => {\n switch (selectAllCheckboxState?.()) {\n case 'indeterminate': {\n return {\n label: `${selectAllItem?.label}, delvis valgt`,\n selected: false,\n };\n }\n case true: {\n return {\n label: `${selectAllItem?.label}, ${ariaLabelChosenSingular}`,\n selected: true,\n };\n }\n default: {\n return { label: `${selectAllItem?.label}`, selected: false };\n }\n }\n };\n\n const selectAllListItemContent = () => (\n <>\n <Checkbox\n aria-hidden=\"true\"\n checked={selectAllCheckboxState?.()}\n className=\"eds-dropdown__list__item__checkbox\"\n onChange={() => {\n return;\n }}\n tabIndex={-1}\n />\n <span\n className=\"eds-dropdown__list__item__text\"\n aria-label={ariaValuesSelectAll().label}\n >\n {selectAllItem?.label}\n </span>\n </>\n );\n\n const listItemContent = (item: NormalizedDropdownItemType<ValueType>) => {\n return (\n <>\n <Checkbox\n aria-hidden=\"true\"\n checked={isItemSelected(item)}\n className=\"eds-dropdown__list__item__checkbox\"\n onChange={() => {\n return;\n }}\n style={!isMultiselect ? { display: 'none' } : {}}\n tabIndex={-1}\n />\n\n <span className=\"eds-dropdown__list__item__text\">\n {item.label}\n <VisuallyHidden>\n {isItemSelected(item) ? ariaLabelSelectedItem : ''}\n </VisuallyHidden>\n </span>\n {item.icons && (\n <span>\n {item.icons.map(Icon => (\n <Icon\n key={\n item?.label + item?.value + (Icon?.displayName ?? Icon?.name)\n }\n inline\n className=\"eds-dropdown__list__item__icon\"\n />\n ))}\n </span>\n )}\n </>\n );\n };\n\n return (\n // use popover from @entur/tooltip when that package upgrades to floating-ui\n <div\n className=\"eds-dropdown__list__floating-container\"\n style={{\n display: isOpen ? undefined : 'none',\n ...floatingStyles,\n }}\n ref={setListRef}\n >\n <ul\n {...getMenuProps({\n 'aria-multiselectable': isMultiselect,\n })}\n className=\"eds-dropdown__list\"\n style={{ ...rest.style }}\n >\n {!loading &&\n listItems.length > 0 &&\n listItems.map((item, index) => {\n const itemIsSelectAll = item.value === selectAllItem?.value;\n if (itemIsSelectAll && listItems.length <= 2) return null;\n\n return (\n <li\n className={classNames('eds-dropdown__list__item', {\n 'eds-dropdown__list__item--select-all': itemIsSelectAll,\n 'eds-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown__list__item--selected':\n !isMultiselect && isItemSelected(item),\n })}\n key={item?.label + item?.value}\n {...getItemProps({\n // @ts-expect-error Since getItemProps expects the same item type\n // here as items, it throws error when selectAllItem is a string.\n // This does, however, not cause any functional issues.\n item,\n index,\n 'aria-selected': itemIsSelectAll\n ? ariaValuesSelectAll().selected\n : isItemSelected(item),\n })}\n >\n {itemIsSelectAll\n ? selectAllListItemContent()\n : listItemContent(\n item as NormalizedDropdownItemType<ValueType>,\n )}\n </li>\n );\n })}\n\n {isNoMatches && (\n <li key=\"dropdown-list-no-match\" className=\"eds-dropdown__list__item\">\n {noMatchesText}\n </li>\n )}\n {/* Known bug: the debounce of useResolvedItems makes noMatchesText show up before loadingText on fetch.\n To solve this, the dropdownList needs to account for the debounce */}\n {loading && (\n <li key=\"dropdown-list-loading\" className=\"eds-dropdown__list__item\">\n {loadingText}\n </li>\n )}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetToggleButtonPropsOptions,\n UseMultipleSelectionGetSelectedItemPropsOptions,\n} from 'downshift';\n\nimport { IconButton } from '@entur/button';\nimport { TagChip } from '@entur/chip';\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { LoadingDots } from '@entur/loader';\nimport { Tooltip } from '@entur/tooltip';\n\nimport { NormalizedDropdownItemType } from '../types';\n\nimport './FieldComponents.scss';\n\nexport const SelectedItemTag = <ValueType extends NonNullable<any>>({\n ariaLabelRemoveSelected,\n ariaLabelChosen = 'valgt',\n disabled,\n getSelectedItemProps,\n index,\n readOnly,\n removeSelectedItem,\n selectedItem,\n}: {\n ariaLabelRemoveSelected: string;\n ariaLabelChosen?: string;\n disabled?: boolean;\n getSelectedItemProps?: (\n options: UseMultipleSelectionGetSelectedItemPropsOptions<\n NormalizedDropdownItemType<ValueType>\n >,\n ) => any;\n index?: number;\n readOnly?: boolean;\n removeSelectedItem: (item: NormalizedDropdownItemType<ValueType>) => void;\n selectedItem: NormalizedDropdownItemType<ValueType>;\n}) => {\n const { tabIndex: _, ...selectedItemProps } =\n getSelectedItemProps?.({\n selectedItem,\n index,\n }) ?? {};\n return (\n <TagChip\n size=\"small\"\n className={classNames('eds-dropdown__selected-item-tag', {\n 'eds-dropdown__selected-item-tag--readonly': readOnly,\n 'eds-dropdown__selected-item-tag--disabled': disabled,\n })}\n {...selectedItemProps}\n onClose={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n removeSelectedItem(selectedItem);\n }}\n closeButtonAriaLabel={`${selectedItem.label} ${ariaLabelChosen}, ${ariaLabelRemoveSelected} `}\n key={selectedItem.value}\n aria-live=\"polite\"\n >\n <span\n aria-hidden=\"true\"\n className=\"eds-dropdown__selected-item-tag__text\"\n >\n {selectedItem.label}\n </span>\n </TagChip>\n );\n};\n\ntype FieldAppendProps<ValueType> = {\n ariaHiddenToggleButton?: boolean;\n ariaLabelCloseList?: string;\n ariaLabelOpenList?: string;\n clearable?: boolean;\n labelClearSelectedItems?: string;\n disabled?: boolean;\n focusable?: boolean;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n loading?: boolean;\n loadingText?: string;\n onClear: () => void;\n selectedItems: (NormalizedDropdownItemType<ValueType> | null)[];\n};\n\nexport const FieldAppend = <ValueType extends NonNullable<any>>({\n ariaHiddenToggleButton = false,\n ariaLabelCloseList,\n ariaLabelOpenList,\n clearable = false,\n labelClearSelectedItems,\n disabled = false,\n focusable = false,\n getToggleButtonProps,\n isOpen,\n loading = false,\n loadingText = 'Laster resultater …',\n onClear,\n selectedItems,\n}: FieldAppendProps<ValueType>) => {\n if (disabled) {\n return null;\n }\n return (\n <div className=\"eds-dropdown__appendix\">\n {clearable && selectedItems?.length > 0 && selectedItems[0] !== null && (\n <>\n <ClearableButton\n onClear={onClear}\n focusable={true}\n labelClearSelectedItems={labelClearSelectedItems}\n />\n <div className=\"eds-dropdown__appendix__divider\" />\n </>\n )}\n {!loading ? (\n <ToggleButton\n aria-hidden={ariaHiddenToggleButton}\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n focusable={focusable}\n />\n ) : (\n <div className={'eds-dropdown__appendix__toggle-button--loading-dots'}>\n <LoadingDots aria-label={loadingText} />\n </div>\n )}\n </div>\n );\n};\n\nconst ClearableButton = ({\n onClear,\n labelClearSelectedItems = 'Fjern valgte',\n focusable = false,\n}: {\n onClear: () => void;\n labelClearSelectedItems?: string;\n focusable?: boolean;\n ariaLabelClearItems?: string;\n}) => {\n return (\n <Tooltip\n aria-hidden=\"true\"\n placement=\"top\"\n content={labelClearSelectedItems}\n className=\"eds-dropdown__appendix__clear-button__tooltip\"\n >\n <IconButton\n className=\"eds-dropdown__appendix__clear-button\"\n type=\"button\"\n tabIndex={focusable ? 0 : 1}\n onClick={onClear}\n aria-label={labelClearSelectedItems}\n >\n <CloseSmallIcon aria-hidden=\"true\" />\n </IconButton>\n </Tooltip>\n );\n};\n\nconst ToggleButton = ({\n getToggleButtonProps,\n isOpen,\n 'aria-hidden': ariaHidden = false,\n ariaLabelCloseList = 'Lukk liste med valg',\n ariaLabelOpenList = 'Åpne liste med valg',\n focusable = false,\n}: {\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n 'aria-hidden'?: boolean;\n ariaLabelCloseList?: string;\n ariaLabelOpenList?: string;\n focusable?: boolean;\n}) => {\n return (\n <IconButton\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__appendix__toggle-button', {\n 'eds-dropdown__appendix__toggle-button--open': isOpen,\n }),\n 'aria-labelledby': undefined,\n })}\n aria-hidden={ariaHidden}\n aria-label={\n ariaHidden ? undefined : isOpen ? ariaLabelCloseList : ariaLabelOpenList\n }\n tabIndex={focusable ? 0 : -1}\n type=\"button\"\n >\n <DownArrowIcon aria-hidden=\"true\" />\n </IconButton>\n );\n};\n","import React from 'react';\n\nimport { useDebounce } from '@entur/utils';\n\nimport { useNormalizedItems } from './useNormalizedItems';\n\nimport {\n PotentiallyAsyncDropdownItemType,\n DropdownItemType,\n NormalizedDropdownItemType,\n AsyncDropdownItemType,\n} from './types';\n\nexport const useResolvedItems = <ValueType extends NonNullable<any>>(\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType<ValueType>,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (query?: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType<ValueType>[];\n} => {\n const itemsIsAFunction = typeof itemsOrItemsResolver === 'function';\n\n const [items, setItems] = React.useState<DropdownItemType<ValueType>[]>(\n itemsIsAFunction ? [] : itemsOrItemsResolver,\n );\n const [loading, setLoading] = React.useState(false);\n\n const abortControllerRef = React.useRef<AbortController>(\n new AbortController(),\n );\n\n // We normalize the itemsResolver argument to an async function, so we\n // can use it without thinking about the differences later\n const itemsResolver = React.useMemo(() => {\n if (itemsIsAFunction)\n return itemsOrItemsResolver as AsyncDropdownItemType<ValueType>;\n return () =>\n Promise.resolve(itemsOrItemsResolver as DropdownItemType<ValueType>[]);\n }, [itemsOrItemsResolver, itemsIsAFunction]);\n\n // This should be called whenever the input value changes\n const updateItems = async (inputValue?: string) => {\n // The abortController handles cleanup of the previous request and unmounting\n if (abortControllerRef?.current) abortControllerRef?.current?.abort();\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n setLoading(true);\n\n try {\n const resolvedItems = await itemsResolver(\n inputValue ?? '',\n abortControllerRef,\n );\n\n if (abortControllerRef?.current?.signal?.aborted) {\n console.warn(\n 'Avbryt den asynkrone funksjonen din med signalet fra AbortController-en for å for å unngå minnelekkasje.',\n 'Funksjonen bør kaste en DOMException med navnet \"AbortError\" når den avbrytes.',\n '',\n '\\n\\nSe eksempel her: https://design.entur.no/komponenter/skjemaelementer/dropdown#s%C3%B8kbar-dropdown-med-valg-fra-nettverkskall-bassert-p%C3%A5-tekstinput',\n '\\nLes mer om AbortController her: https://developer.mozilla.org/en-US/docs/Web/API/AbortController',\n );\n return;\n }\n\n setLoading(false);\n setItems(resolvedItems);\n } catch (error) {\n if (\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n error.name === 'AbortError'\n ) {\n // Stop execution if the request was aborted\n return;\n }\n console.warn(\n 'The following error was received but not handled inside Entur Designsystems useResolvedItems hook:',\n );\n throw error;\n }\n };\n\n const debouncedFetchItems = useDebounce(updateItems, debounceTimeout);\n const normalizedItems = useNormalizedItems(items);\n\n React.useEffect(() => {\n // send abort signal to previous request on unmount for cleanup\n return () => abortControllerRef?.current?.abort('Component unmounted');\n }, []);\n\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (itemsIsAFunction) {\n debouncedFetchItems('');\n }\n }, [itemsIsAFunction, itemsResolver]);\n\n return {\n items: normalizedItems,\n loading: itemsIsAFunction ? loading : false,\n fetchItems: debouncedFetchItems,\n };\n};\n","import React from 'react';\n\nimport { DropdownItemType, NormalizedDropdownItemType } from './types';\n\nexport const useNormalizedItems = <ValueType = string>(\n items: DropdownItemType<ValueType>[],\n): NormalizedDropdownItemType<ValueType>[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return {\n value: item as ValueType,\n label: item,\n };\n }\n\n if (item?.value === undefined) {\n return {\n ...item,\n value: item.label as ValueType,\n };\n }\n return { ...item, value: item.value };\n }),\n [items],\n );\n","import { UseComboboxState } from 'downshift';\nimport { NormalizedDropdownItemType } from './types';\n\n/* start general utils */\nexport const EMPTY_INPUT = '';\n\nexport function lowerCaseFilterTest(\n item: NormalizedDropdownItemType<any>,\n input: string | undefined,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport function noFilter<ValueType>(\n //@ts-expect-error only here to comply with dropdown filter API\n item: NormalizedDropdownItemType<ValueType>,\n //@ts-expect-error only here to comply with dropdown filter API\n input: string | undefined,\n) {\n return true;\n}\n\nexport const itemToString = (item: NormalizedDropdownItemType<any> | null) =>\n item ? item.label : '';\n\nexport const itemToKey = (item: NormalizedDropdownItemType<any> | null) =>\n item?.label + item?.value;\n\nexport const isFunctionWithQueryArgument = (object: any) =>\n typeof object === 'function' && object.length > 0;\n\n/* end general utils */\n/* start multiselect utils */\n\ntype useMultiselectUtilsType<ValueType> = {\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n listItems: NormalizedDropdownItemType<ValueType | string>[];\n selectAll: NormalizedDropdownItemType<string>;\n};\n\nexport const useMultiselectUtils = <ValueType>({\n listItems,\n selectedItems,\n selectAll,\n}: useMultiselectUtilsType<ValueType>) => {\n const hasSelectedItems = selectedItems.length > 0;\n\n const listItemsWithoutSelectAll = listItems.filter(\n item => item.value !== selectAll.value,\n ) as NormalizedDropdownItemType<ValueType>[];\n\n const unselectedItemsInListItems = listItemsWithoutSelectAll.filter(\n listItem =>\n !selectedItems.some(\n selectedItem => selectedItem.value === listItem.value,\n ),\n );\n\n const allListItemsAreSelected = !listItemsWithoutSelectAll.some(\n listItem =>\n !selectedItems.some(\n selectedItem => selectedItem.value === listItem.value,\n ),\n );\n\n const someListItemsAreSelected = listItemsWithoutSelectAll.some(listItem =>\n selectedItems.some(selectedItem => selectedItem.value === listItem.value),\n );\n\n const addClickedItemToSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => onChange([...selectedItems, clickedItem]);\n\n const clickedItemIsInSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n ) =>\n selectedItems.some(\n selectedItem => selectedItem.value === clickedItem.value,\n );\n\n const clickedItemIsSelectAll = (\n clickedItem: NormalizedDropdownItemType<string | ValueType>,\n ) => clickedItem.value === selectAll.value;\n\n const handleListItemClicked = ({\n clickedItem,\n onChange,\n }: {\n clickedItem: NormalizedDropdownItemType<any>;\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void;\n }) => {\n if (clickedItemIsSelectAll(clickedItem)) {\n if (allListItemsAreSelected) {\n return unselectAllListItems(onChange);\n }\n return selectAllUnselectedItemsInListItems(onChange);\n }\n\n if (clickedItemIsInSelectedItems(clickedItem)) {\n return removeClickedItemFromSelectedItems(clickedItem, onChange);\n }\n addClickedItemToSelectedItems(clickedItem, onChange);\n };\n\n const removeClickedItemFromSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) =>\n onChange(\n selectedItems.filter(\n selectedItem => selectedItem.value !== clickedItem.value,\n ),\n );\n\n const selectAllCheckboxState = () => {\n if (allListItemsAreSelected) return true;\n if (someListItemsAreSelected) return 'indeterminate';\n return false;\n };\n\n const selectAllUnselectedItemsInListItems = (\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => {\n onChange([...selectedItems, ...unselectedItemsInListItems]);\n };\n\n const unselectAllListItems = (\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => {\n const selectedItemsWithoutItemsInListItems = selectedItems.filter(\n selectedItem =>\n !listItemsWithoutSelectAll.some(\n listItem => listItem.value === selectedItem.value,\n ),\n );\n onChange(selectedItemsWithoutItemsInListItems);\n };\n\n return {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n handleListItemClicked,\n hasSelectedItems,\n listItemsWithoutSelectAll,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n someListItemsAreSelected,\n unselectAllListItems,\n };\n};\n\n/* end multiselect utils */\n/* start a11y utils */\n\n// called when the state changes:\n// selectedItem, highlightedIndex, inputValue or isOpen.\nexport function getA11yStatusMessage<ValueType>(\n options: UseComboboxState<NormalizedDropdownItemType<ValueType>> & {\n selectAllItemIncluded?: boolean;\n resultCount: number;\n },\n): string {\n const { isOpen, selectAllItemIncluded = false, resultCount } = options;\n\n if (!isOpen) {\n return '';\n }\n\n const resultCountWithoutSelectAll = selectAllItemIncluded\n ? resultCount - 1\n : resultCount;\n\n if (resultCountWithoutSelectAll === 0) {\n return 'Ingen resultater';\n }\n\n return `${resultCountWithoutSelectAll} resultat${\n resultCountWithoutSelectAll === 1 ? '' : 'er'\n } tilgjengelig, naviger med pil opp eller ned, velg elementer med Enter.`;\n}\n/* end a11y utils */\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { LoadingDots } from '@entur/loader';\nimport { useRandomId, VariantType } from '@entur/utils';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type NativeDropdownProps<ValueType> = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdow-nen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdown-en å ha */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value\n * Obs: merk at parameter her denne ikke er samme som i en HTML select.\n * Bruk { target } hvis du trenger info om select-elementet som ble trykket på\n */\n onChange?: ({\n value,\n selectedItem,\n target,\n }: {\n value: string;\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n target: EventTarget & HTMLSelectElement;\n }) => void;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /**\n * Setter dropdown-en i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien som NormalizedDropdownItemType\n * (Brukes når komponenten er 'controlled')\n */\n selectedItem?: NormalizedDropdownItemType<ValueType> | null;\n /** Den valgte verdien som sting\n * (Brukes når komponenten er 'controlled)\n */\n value?: string;\n /** Hvilken valideringsvariant som gjelder*/\n variant?: VariantType | typeof error | typeof info;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown = <ValueType extends string | number>({\n className,\n disabled = false,\n disableLabelAnimation,\n feedback,\n items,\n label,\n loadingText,\n onChange,\n prepend,\n readOnly = false,\n selectedItem,\n style,\n value,\n variant,\n ...rest\n}: NativeDropdownProps<ValueType>) => {\n const { items: normalizedItems, loading } =\n useResolvedItems<ValueType>(items);\n const nativeDropdownId = useRandomId('eds-dropdown-native');\n\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={\n <FieldAppend\n hidden={disabled || readOnly}\n loading={loading}\n loadingText={loadingText}\n />\n }\n className={className}\n style={style}\n label={label}\n labelId={nativeDropdownId}\n variant={variant}\n feedback={feedback}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'negative' || variant === error}\n aria-labelledby={nativeDropdownId}\n aria-busy={loading}\n className=\"eds-form-control eds-dropdown--native\"\n disabled={disabled || readOnly}\n onChange={event => {\n onChange?.({\n value: event.target.value,\n selectedItem:\n normalizedItems.find(item => item.value === event.target.value) ??\n null,\n target: event.target,\n });\n }}\n value={value ?? selectedItem?.value ?? undefined}\n {...rest}\n >\n {normalizedItems.map(item => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n </BaseFormControl>\n );\n};\n\nconst FieldAppend = ({\n loading,\n loadingText,\n hidden,\n}: {\n loading: boolean;\n loadingText?: string;\n hidden: boolean;\n}) => {\n if (loading) {\n return (\n <div className=\"eds-dropdown-native__loading-dots\">\n <LoadingDots aria-label={loadingText} />\n </div>\n );\n }\n if (hidden) {\n return <></>;\n }\n return <DownArrowIcon inline />;\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport type { NormalizedDropdownItemType, DropdownItemType } from './types';\n\nexport * from './SearchableDropdown';\nexport * from './MultiSelect';\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './types';\n","import React, { Dispatch, SetStateAction, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport { useSelect } from 'downshift';\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react-dom';\n\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType } from '@entur/utils';\n\nimport { DropdownList } from './components/DropdownList';\nimport { FieldAppend } from './components/FieldComponents';\nimport { useResolvedItems } from './useResolvedItems';\nimport { itemToString } from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type DropdownProps<ValueType> = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Valgt verdi. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n /** Callback ved valg som skal oppdatere selectedItem */\n onChange?: (\n selectedItem: NormalizedDropdownItemType<ValueType> | null,\n ) => void | Dispatch<\n SetStateAction<NormalizedDropdownItemType<ValueType> | null>\n >;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default false\n */\n clearable?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Setter dropdown-en i read-only modus */\n readOnly?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** En tekst som beskriver hva som skjer når man venter på items\n * @default 'Laster inn …'\n */\n loadingText?: string;\n /** Tekst som kommer opp når det ikke er noe elementer å vise\n * @default \"Ingen tilgjengelige valg …\"\n */\n noMatchesText?: string;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default \"fjern valgt\"\n */\n labelClearSelectedItem?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Styling for Dropdown-en */\n style?: { [key: string]: any };\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default 'valgt'\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default ', valgt element, trykk for å fjerne'\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const Dropdown = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular,\n ariaLabelCloseList,\n ariaLabelOpenList,\n ariaLabelSelectedItem,\n className,\n clearable = false,\n disabled = false,\n disableLabelAnimation,\n feedback,\n items: initialItems,\n label,\n labelClearSelectedItem = 'fjern valgt',\n labelTooltip,\n listStyle,\n loadingText,\n noMatchesText = 'Ingen tilgjengelige valg …',\n onChange,\n placeholder,\n prepend,\n readOnly = false,\n selectedItem,\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'information',\n ...rest\n}: DropdownProps<ValueType>) => {\n const { items: normalizedItems, loading } = useResolvedItems(initialItems);\n const toggleButtonRef = useRef<HTMLDivElement>(null);\n const isFilled = selectedItem !== null || placeholder !== undefined;\n\n const {\n isOpen,\n openMenu,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getToggleButtonProps,\n highlightedIndex,\n } = useSelect({\n items: normalizedItems,\n defaultHighlightedIndex: selectedItem ? undefined : 0,\n selectedItem,\n onStateChange({ type, selectedItem: newSelectedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (!selectOnBlur) break;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter: // eslint-disable-line no-fallthrough\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick: {\n if (newSelectedItem === undefined) return;\n onChange?.(newSelectedItem ?? null);\n }\n }\n },\n itemToString,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaHiddenToggleButton={true}\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n clearable={clearable}\n labelClearSelectedItems={labelClearSelectedItem}\n focusable={false}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n loading={loading}\n loadingText={loadingText}\n onClear={() => {\n onChange?.(null);\n toggleButtonRef.current?.focus();\n }}\n disabled={readOnly || disabled}\n selectedItems={[selectedItem]}\n />\n }\n className={classNames('eds-dropdown', className, {\n 'eds-dropdown--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={isFilled}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) openMenu();\n }}\n prepend={prepend}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <div\n className=\"eds-dropdown__selected-item\"\n {...getToggleButtonProps({\n id: undefined,\n onKeyDown: e => {\n if (selectOnTab && isOpen && e.key === 'Tab') {\n // we don't want to clear selection with tab\n const highlitedItem = normalizedItems[highlightedIndex];\n if (highlitedItem) {\n onChange?.(highlitedItem);\n }\n }\n },\n ref: toggleButtonRef,\n })}\n >\n {selectedItem?.label ?? (\n <div\n className={classNames(\n 'eds-dropdown__selected-item__placeholder',\n {\n 'eds-dropdown__selected-item__placeholder--readonly':\n readOnly,\n },\n )}\n >\n {placeholder}\n </div>\n ) ??\n ''}\n </div>\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n isOpen={isOpen}\n listItems={normalizedItems}\n noMatchesText={noMatchesText}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n />\n </BaseFormControl>\n );\n};\n","import React, {\n Dispatch,\n SetStateAction,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n useMultipleSelection,\n useCombobox,\n UseComboboxStateChangeOptions,\n} from 'downshift';\nimport { useFloating, autoUpdate, offset, flip } from '@floating-ui/react-dom';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType, useRandomId } from '@entur/utils';\n\nimport { FieldAppend, SelectedItemTag } from './components/FieldComponents';\nimport { DropdownList } from './components/DropdownList';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n EMPTY_INPUT,\n getA11yStatusMessage,\n isFunctionWithQueryArgument,\n itemToKey,\n itemToString,\n lowerCaseFilterTest,\n noFilter,\n useMultiselectUtils,\n} from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type MultiSelectProps<ValueType> = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Elementer som er valgt blant 'items'. Bruk tom liste for ingen valgte\n */\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n /** Callback med alle valgte verdier.\n * Bruk denne til å oppdatere selectedItems-listen */\n onChange?: (\n selectedItems: NormalizedDropdownItemType<ValueType>[],\n ) => void | Dispatch<SetStateAction<NormalizedDropdownItemType<ValueType>[]>>;\n /** Filtreringen som brukes når man skriver inn tekst i inputfeltet\n * @default Regex-test som sjekker om item.label inneholder input-teksten\n */\n itemFilter?: (\n item: NormalizedDropdownItemType<ValueType>,\n inputValue: string | undefined,\n ) => boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Om dropdown-en er deaktivert */\n disabled?: boolean;\n /** Om dropdown-en er i read-only modus */\n readOnly?: boolean;\n /** Om en knapp for å fjerne alle valg skal vises\n * @default true\n */\n clearable?: boolean;\n /** Plasserer ledeteksten statisk på toppen av inputfeltet */\n disableLabelAnimation?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items\n * @default \"Laster inn …\"\n */\n loadingText?: string;\n /** Tekst som kommer opp når det ikke er noe treff på filtreringsøket\n * @default \"Ingen treff for søket\"\n */\n noMatchesText?: string;\n /** Skjuler «Velg alle» fra listen med valg\n * @default false\n */\n hideSelectAll?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Maks antall individuelle valgt-element-tags i MultiSelect-en før de blir til en samle-tag\n * @default 10\n */\n maxChips?: number;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Resetter input etter at et element er valgt i listen\n * @default false\n */\n clearInputOnSelect?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n style?: React.CSSProperties;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Ekstra klassenavn */\n className?: string;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Velg alle\"\n */\n labelSelectAll?: string;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Alle valgt\"\n */\n labelAllItemsSelected?: string;\n /** Skjermleser-tekst som for å fjerne alle valg\n * @default \"Fjern valgte\"\n */\n labelClearAllItems?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Tekst for skjemleser på knapper for å fjerne valgt element\n * @default \"trykk for å fjerne valg\"\n */\n ariaLabelRemoveSelected?: string;\n /** Tekst for skjemleser for å indikere at et element er valgt\n * @default \"valgte\"\n */\n ariaLabelChosenPlural?: string;\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Tekst for skjemleser for å hoppe til input-feltet\n * @default `${selectedItems.length} valgte elementer, trykk for å hoppe til tekstfeltet`\n */\n ariaLabelJumpToInput?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default 'valgt'\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default ', valgt element, trykk for å fjerne'\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const MultiSelect = <ValueType extends NonNullable<any>>({\n className,\n clearable = true,\n clearInputOnSelect = false,\n debounceTimeout,\n disabled = false,\n disableLabelAnimation,\n feedback,\n hideSelectAll = false,\n items: initialItems,\n itemFilter = isFunctionWithQueryArgument(initialItems)\n ? noFilter\n : lowerCaseFilterTest,\n label,\n labelAllItemsSelected = 'Alle valgt',\n labelClearAllItems = 'Fjern valgte',\n labelSelectAll = 'Velg alle',\n labelTooltip,\n listStyle,\n loadingText,\n maxChips = 10,\n noMatchesText,\n onChange = () => undefined,\n placeholder,\n readOnly = false,\n selectedItems = [],\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'information',\n ariaLabelChosenSingular,\n ariaLabelChosenPlural = 'valgte',\n ariaLabelCloseList,\n ariaLabelJumpToInput = `${selectedItems.length} valgte elementer, trykk for å hoppe til tekstfeltet`,\n ariaLabelOpenList,\n ariaLabelRemoveSelected = 'trykk for å fjerne valg',\n ariaLabelSelectedItem,\n ...rest\n}: MultiSelectProps<ValueType>) => {\n const [lastHighlightedIndex, setLastHighlightedIndex] = React.useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n //@ts-expect-error this is done to aid developers debug wrong prop usage\n if (rest.selectedItem !== undefined)\n console.warn(\n \"Incorrect 'selectedItem' prop found, did you mean to use 'selectedItems?\",\n );\n //@ts-expect-error selectedItem should not actually exist in rest\n }, [rest.selectedItem]);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems, debounceTimeout);\n\n const isAllNonAsyncItemsSelected =\n typeof initialItems !== 'function' &&\n selectedItems.length === normalizedItems.length;\n\n // special 'item' used as Select All entry in the dropdown list\n const selectAll: NormalizedDropdownItemType<string> = {\n value: useRandomId('select-all'),\n label: labelSelectAll,\n };\n // special 'item' used as a replacement selected item tag for when\n // there are more selected element than maxChips\n const summarySelectedItems: NormalizedDropdownItemType<string> =\n React.useMemo(\n () => ({\n value: EMPTY_INPUT,\n label: isAllNonAsyncItemsSelected\n ? labelAllItemsSelected\n : selectedItems.length + ' ' + ariaLabelChosenPlural,\n }),\n [\n isAllNonAsyncItemsSelected,\n selectedItems,\n labelAllItemsSelected,\n ariaLabelChosenPlural,\n ],\n );\n\n const [listItems, setListItems] = useState([\n ...(!hideSelectAll ? [selectAll] : []),\n ...normalizedItems,\n ]);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems([\n ...(!hideSelectAll ? [selectAll] : []),\n ...normalizedItems.filter(item => itemFilter(item, inputValue)),\n ]);\n\n const updateListItems = ({ inputValue }: { inputValue?: string }) => {\n const shouldRefetchItems = isFunctionWithQueryArgument(initialItems);\n if (shouldRefetchItems) fetchItems(inputValue ?? EMPTY_INPUT);\n\n filterListItems({ inputValue: inputValue ?? EMPTY_INPUT });\n };\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { hasSelectedItems, handleListItemClicked, selectAllCheckboxState } =\n useMultiselectUtils<ValueType>({\n listItems,\n selectAll,\n selectedItems,\n });\n\n const { getSelectedItemProps, getDropdownProps } = useMultipleSelection({\n selectedItems,\n // @ts-expect-error prop missing from library types\n itemToString,\n itemToKey,\n onStateChange({ selectedItems: newSelectedItems, type }) {\n switch (type) {\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:\n case useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem: {\n if (newSelectedItems !== undefined) onChange(newSelectedItems);\n break;\n }\n default:\n break;\n }\n },\n });\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n changes,\n type,\n }: UseComboboxStateChangeOptions<\n NormalizedDropdownItemType<ValueType | string>\n >,\n ) => {\n if (\n changes.highlightedIndex !== undefined &&\n changes?.highlightedIndex >= 0\n ) {\n setLastHighlightedIndex(changes?.highlightedIndex);\n }\n\n switch (type) {\n // keep menu open and edit input value on item selection\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick: {\n if (clearInputOnSelect) {\n updateListItems({ inputValue: EMPTY_INPUT });\n }\n return {\n ...changes,\n isOpen: true,\n inputValue: clearInputOnSelect\n ? EMPTY_INPUT\n : inputRef?.current?.value ?? EMPTY_INPUT,\n };\n }\n // edit input value when selected items is updated outside component\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem: {\n return {\n ...changes,\n inputValue: inputRef?.current?.value ?? EMPTY_INPUT,\n };\n }\n // remove leading whitespace, select item with spacebar if input is empty and filter list items\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n const isSpacePressedOnEmptyInput = changes.inputValue === ' ';\n if (changes.inputValue?.match(leadingWhitespaceTest)) {\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT),\n );\n\n if (isSpacePressedOnEmptyInput) {\n openMenu();\n\n if (isOpen && changes.highlightedIndex !== undefined) {\n handleListItemClicked({\n clickedItem: listItems[changes.highlightedIndex],\n onChange,\n });\n }\n }\n } else {\n updateListItems({ inputValue: changes.inputValue });\n // set highlighted item to first item after search\n setLastHighlightedIndex(hideSelectAll ? 0 : 1);\n return { ...changes, highlightedIndex: hideSelectAll ? 0 : 1 };\n }\n\n return changes;\n }\n // reset input value when leaving input field\n case useCombobox.stateChangeTypes.InputBlur: {\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n }\n default:\n return changes;\n }\n },\n [hideSelectAll, normalizedItems, filterListItems, initialItems], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const {\n getInputProps,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getToggleButtonProps,\n highlightedIndex,\n inputValue,\n isOpen,\n openMenu,\n setInputValue,\n } = useCombobox({\n defaultHighlightedIndex: lastHighlightedIndex, // after selection, highlight previously selected item.\n items: listItems,\n itemToString,\n selectedItem: null,\n stateReducer,\n onStateChange({ type, selectedItem: clickedItem }) {\n // clickedItem means item chosen either via mouse or keyboard\n if (!clickedItem) return;\n\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useCombobox.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough\n case useCombobox.stateChangeTypes.ItemClick: {\n handleListItemClicked({\n clickedItem,\n onChange,\n });\n }\n }\n },\n // Accessibility\n getA11yStatusMessage: options =>\n getA11yStatusMessage({\n ...options,\n selectAllItemIncluded: !hideSelectAll,\n resultCount: listItems.length,\n }),\n ...rest,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n const handleOnClear = () => {\n onChange([]);\n setInputValue(EMPTY_INPUT);\n inputRef.current?.focus();\n updateListItems({ inputValue });\n };\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n selectedItems={selectedItems}\n isOpen={isOpen}\n clearable={clearable}\n labelClearSelectedItems={labelClearAllItems}\n focusable={false}\n loading={loading}\n loadingText={loadingText}\n disabled={readOnly || disabled}\n onClear={handleOnClear}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames(\n 'eds-dropdown',\n 'eds-dropdown--multiselect',\n className,\n { 'eds-dropdown--has-tooltip': labelTooltip !== undefined },\n )}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={hasSelectedItems || inputValue !== EMPTY_INPUT}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <div\n className={classNames(\n 'eds-dropdown--multiselect__selected-items-and-input',\n {\n 'eds-dropdown--multiselect__selected-items-and-input--filled':\n hasSelectedItems,\n },\n )}\n onClick={e => {\n if (e.target === e.currentTarget) openMenu();\n }}\n >\n {selectedItems.length <= maxChips ? (\n <>\n {selectedItems.length > 1 ? (\n <VisuallyHidden onClick={() => inputRef.current?.focus()}>\n {ariaLabelJumpToInput}\n </VisuallyHidden>\n ) : (\n <></>\n )}\n {selectedItems.map((selectedItem, index) => (\n <SelectedItemTag\n ariaLabelChosen={ariaLabelChosenSingular}\n ariaLabelRemoveSelected={ariaLabelRemoveSelected}\n disabled={disabled}\n getSelectedItemProps={getSelectedItemProps}\n index={index}\n key={\n selectedItem?.label +\n (typeof selectedItem?.value === 'string'\n ? selectedItem.value\n : '')\n }\n readOnly={readOnly}\n removeSelectedItem={() => {\n handleListItemClicked({\n clickedItem: selectedItem,\n onChange,\n });\n inputRef?.current?.focus();\n }}\n selectedItem={selectedItem}\n />\n ))}\n </>\n ) : (\n <SelectedItemTag\n ariaLabelRemoveSelected={labelClearAllItems}\n ariaLabelChosen=\"\"\n disabled={disabled}\n readOnly={readOnly}\n removeSelectedItem={handleOnClear}\n selectedItem={summarySelectedItems}\n />\n )}\n <input\n placeholder={placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n disabled={readOnly || disabled}\n {...getInputProps({\n onKeyDown: (e: React.KeyboardEvent) => {\n if (selectOnTab && isOpen && e.key === 'Tab') {\n const highlitedItem = listItems[highlightedIndex];\n // we don't want to clear selection with tab\n if (highlitedItem) {\n handleListItemClicked({\n clickedItem: highlitedItem,\n onChange,\n });\n }\n }\n },\n ...getDropdownProps({\n preventKeyAction: isOpen,\n value: inputValue ?? EMPTY_INPUT,\n ref: inputRef,\n }),\n })}\n />\n </div>\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n inputValue={inputValue}\n isOpen={isOpen}\n listItems={listItems}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n noMatchesText={noMatchesText}\n selectAllCheckboxState={selectAllCheckboxState}\n selectAllItem={selectAll}\n selectedItems={selectedItems}\n />\n </BaseFormControl>\n );\n};\n","/* eslint-disable no-warning-comments */\nimport React, {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { UseComboboxStateChangeOptions, useCombobox } from 'downshift';\nimport classNames from 'classnames';\nimport { useFloating, autoUpdate, offset, flip } from '@floating-ui/react-dom';\n\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType } from '@entur/utils';\n\nimport { DropdownList } from './components/DropdownList';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n EMPTY_INPUT,\n getA11yStatusMessage,\n isFunctionWithQueryArgument,\n itemToString,\n lowerCaseFilterTest,\n noFilter,\n} from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type SearchableDropdownProps<ValueType> = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Valgt element. Bruk null for ingen verdi */\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n /** Callback ved valg som skal brukes til å oppdatere selectedItem */\n onChange?: (\n selectedItem: NormalizedDropdownItemType<ValueType> | null,\n ) => void | Dispatch<\n SetStateAction<NormalizedDropdownItemType<ValueType> | null>\n >;\n /** Filtreringen som brukes når man skriver inn tekst i inputfeltet\n * @default Regex-test som sjekker om item.label inneholder input-teksten\n */\n itemFilter?: (\n item: NormalizedDropdownItemType<ValueType>,\n inputValue: string | undefined,\n ) => boolean;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Vis knapp for å nullstille Dropdown-en skal vises\n * @default true\n */\n clearable?: boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Antall millisekunder man venter etter tekstinput før det gjøres kall for å oppdatere items\n * Denne er kun relevant hvis du sender inn en funksjon som items.\n */\n debounceTimeout?: number;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n /** Tekst som kommer opp når det ikke er noe treff på filtreringsøket\n * @default \"Ingen treff for søket\"\n */\n noMatchesText?: string;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readOnly?: boolean;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Hvilken valideringsvariant som gjelder*/\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n className?: string;\n style?: { [key: string]: any };\n /** Style som kun påføres listeelementet */\n listStyle?: { [key: string]: any };\n /** Tekst som beskriver at man fjerner valget sitt\n * @default \"fjern valgt\"\n */\n labelClearSelectedItem?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default \"valgt\"\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default \", valgt element, trykk for å fjerne\"\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const SearchableDropdown = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular,\n ariaLabelCloseList,\n ariaLabelOpenList,\n ariaLabelSelectedItem,\n className,\n clearable = true,\n debounceTimeout,\n disabled = false,\n disableLabelAnimation = false,\n feedback,\n items: initialItems,\n itemFilter = isFunctionWithQueryArgument(initialItems)\n ? noFilter\n : lowerCaseFilterTest,\n label,\n labelClearSelectedItem = 'fjern valgt',\n labelTooltip,\n listStyle,\n loadingText,\n noMatchesText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly = false,\n selectedItem: value,\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'info',\n ...rest\n}: SearchableDropdownProps<ValueType>) => {\n const [showSelectedItem, setShowSelectedItem] = useState(value !== null);\n const [lastHighlightedIndex, setLastHighlightedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems, debounceTimeout);\n\n const [listItems, setListItems] = useState(normalizedItems);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems(normalizedItems.filter(item => itemFilter(item, inputValue)));\n\n const updateListItems = ({ inputValue }: { inputValue?: string }) => {\n const shouldRefetchItems = isFunctionWithQueryArgument(initialItems);\n if (shouldRefetchItems) fetchItems(inputValue ?? EMPTY_INPUT);\n\n filterListItems({ inputValue: inputValue ?? EMPTY_INPUT });\n };\n\n const inputHasFocus =\n typeof document !== 'undefined'\n ? inputRef?.current === document?.activeElement\n : false;\n\n useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // sync internal state on initial render\n if (selectedItem !== null && !inputHasFocus) {\n setShowSelectedItem(true);\n updateListItems({ inputValue: EMPTY_INPUT });\n setInputValue(EMPTY_INPUT);\n }\n }, []);\n\n const stateReducer = useCallback(\n (\n _,\n {\n type,\n changes,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType<ValueType>>,\n ) => {\n if (\n changes.highlightedIndex !== undefined &&\n changes?.highlightedIndex >= 0\n ) {\n setLastHighlightedIndex(changes?.highlightedIndex);\n }\n\n switch (type) {\n // empty input to show selected item and reset dropdown list on item selection\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur: {\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n }\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n if (changes.selectedItem !== null && !inputHasFocus)\n setShowSelectedItem(true);\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n // remove leading whitespace, select element with spacebar on empty input, and filter list based on input\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n const isSpacePressedOnEmptyInput = changes.inputValue === ' ';\n if (changes.inputValue?.match(leadingWhitespaceTest)) {\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT),\n );\n\n if (isSpacePressedOnEmptyInput) {\n openMenu();\n\n if (isOpen && changes.highlightedIndex !== undefined) {\n onChange(listItems[changes.highlightedIndex]);\n }\n }\n } else {\n updateListItems({ inputValue: changes.inputValue });\n setHighlightedIndex(0);\n setLastHighlightedIndex(0);\n }\n return changes;\n }\n default:\n return changes;\n }\n },\n [fetchItems, filterListItems], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const {\n isOpen,\n openMenu,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n highlightedIndex,\n setHighlightedIndex,\n getItemProps,\n selectedItem,\n inputValue,\n setInputValue,\n } = useCombobox({\n defaultHighlightedIndex: lastHighlightedIndex,\n items: listItems,\n itemToString,\n selectedItem: value,\n stateReducer,\n onStateChange({ type, selectedItem: newSelectedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useCombobox.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough\n case useCombobox.stateChangeTypes.ItemClick:\n if (newSelectedItem === undefined) return;\n onChange(newSelectedItem ?? null);\n }\n },\n // Accessibility\n getA11yStatusMessage: options =>\n getA11yStatusMessage({ ...options, resultCount: listItems.length }),\n ...rest,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n const handleOnClear = () => {\n onChange(null);\n setInputValue(EMPTY_INPUT);\n inputRef.current?.focus();\n updateListItems({ inputValue });\n setShowSelectedItem(false);\n };\n\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n clearable={clearable}\n labelClearSelectedItems={labelClearSelectedItem}\n disabled={readOnly || disabled}\n focusable={false}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n loading={loading}\n loadingText={loadingText}\n onClear={handleOnClear}\n selectedItems={[selectedItem]}\n />\n }\n className={classNames(\n 'eds-dropdown',\n 'eds-dropdown--searchable',\n className,\n {\n 'eds-dropdown--has-tooltip': labelTooltip !== undefined,\n },\n )}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={selectedItem !== null || inputValue !== EMPTY_INPUT}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n prepend={prepend}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <span\n className={classNames('eds-dropdown--searchable__selected-item', {\n 'eds-dropdown--searchable__selected-item--hidden': !showSelectedItem,\n })}\n aria-hidden=\"true\"\n onClick={() => {\n inputRef.current?.focus();\n openMenu();\n }}\n >\n {showSelectedItem ? selectedItem?.label : ''}\n </span>\n <input\n className={classNames('eds-dropdown__input eds-form-control', {\n 'eds-dropdown__input--hidden': showSelectedItem,\n })}\n disabled={readOnly || disabled}\n placeholder={selectedItem?.label ?? placeholder}\n {...getInputProps({\n onBlur: () => {\n if (selectedItem !== null) setShowSelectedItem(true);\n },\n onFocus: () => {\n setShowSelectedItem(false);\n },\n onKeyDown: e => {\n if (selectOnTab && isOpen && e.key === 'Tab')\n onChange?.(listItems[highlightedIndex]);\n },\n ref: inputRef,\n })}\n />\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n isOpen={isOpen}\n listItems={listItems}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n noMatchesText={noMatchesText}\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n />\n </BaseFormControl>\n );\n};\n"],"names":["DropdownList","_ref","_listItems$","_ref$ariaLabelChosenS","ariaLabelChosenSingular","_ref$ariaLabelSelecte","ariaLabelSelectedItem","getItemProps","getMenuProps","isOpen","highlightedIndex","listItems","floatingStyles","setListRef","_ref$loading","loading","_ref$loadingText","loadingText","_ref$noMatchesText","noMatchesText","selectAllCheckboxState","selectAllItem","selectedItems","rest","_objectWithoutPropertiesLoose","_excluded","isMultiselect","undefined","isNoMatches","length","value","isItemSelected","item","some","selectedItem","label","ariaValuesSelectAll","selected","React","createElement","className","style","_extends","display","ref","map","index","itemIsSelectAll","classNames","key","Fragment","Checkbox","checked","onChange","tabIndex","VisuallyHidden","icons","Icon","_Icon$displayName","displayName","name","inline","listItemContent","SelectedItemTag","_getSelectedItemProps","ariaLabelRemoveSelected","_ref$ariaLabelChosen","ariaLabelChosen","disabled","getSelectedItemProps","readOnly","removeSelectedItem","selectedItemProps","TagChip","size","onClose","e","stopPropagation","closeButtonAriaLabel","FieldAppend","_ref3","_ref3$ariaHiddenToggl","ariaHiddenToggleButton","ariaLabelCloseList","ariaLabelOpenList","_ref3$clearable","clearable","_ref3$disabled","_ref3$focusable","focusable","getToggleButtonProps","_ref3$loading","_ref3$loadingText","ClearableButton","onClear","labelClearSelectedItems","LoadingDots","ToggleButton","_ref4","_ref4$labelClearSelec","_ref4$focusable","Tooltip","placement","content","IconButton","type","onClick","CloseSmallIcon","_ref5","_ref5$ariaHidden","ariaHidden","_ref5$ariaLabelCloseL","_ref5$ariaLabelOpenLi","_ref5$focusable","DownArrowIcon","useResolvedItems","itemsOrItemsResolver","debounceTimeout","itemsIsAFunction","_React$useState","useState","items","setItems","_React$useState2","setLoading","abortControllerRef","useRef","AbortController","itemsResolver","useMemo","Promise","resolve","updateItems","_regeneratorRuntime","mark","_callee","inputValue","_abortControllerRef$c","abortController","_abortControllerRef$c2","resolvedItems","wrap","_context","prev","next","current","abort","sent","signal","aborted","console","warn","abrupt","t0","stop","_x","apply","this","arguments","debouncedFetchItems","useDebounce","normalizedItems","useNormalizedItems","useEffect","_abortControllerRef$c3","fetchItems","EMPTY_INPUT","lowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","RegExp","test","noFilter","itemToString","itemToKey","isFunctionWithQueryArgument","object","getA11yStatusMessage","options","_options$selectAllIte","selectAllItemIncluded","resultCount","resultCountWithoutSelectAll","hidden","warnAboutMissingStyles","_selectedItem$label","_ref$clearable","_ref$disabled","disableLabelAnimation","feedback","initialItems","_ref$labelClearSelect","labelClearSelectedItem","labelTooltip","listStyle","placeholder","prepend","_ref$readOnly","_ref$selectOnBlur","selectOnBlur","_ref$selectOnTab","selectOnTab","_ref$variant","variant","_useResolvedItems","toggleButtonRef","isFilled","_useSelect","useSelect","defaultHighlightedIndex","onStateChange","_ref2","newSelectedItem","stateChangeTypes","ToggleButtonBlur","ToggleButtonKeyDownEnter","ToggleButtonKeyDownSpaceButton","ItemClick","openMenu","getLabelProps","_useFloating","useFloating","open","middleware","offset","space","extraSmall2","flip","refs","elements","update","reference","floating","autoUpdate","BaseFormControl","append","_toggleButtonRef$curr","focus","labelId","id","labelProps","target","currentTarget","setReference","onKeyDown","highlitedItem","setFloating","_ref$clearInputOnSele","clearInputOnSelect","_ref$hideSelectAll","hideSelectAll","_ref$itemFilter","itemFilter","_ref$labelAllItemsSel","labelAllItemsSelected","_ref$labelClearAllIte","labelClearAllItems","_ref$labelSelectAll","labelSelectAll","_ref$maxChips","maxChips","_ref$onChange","_ref$selectedItems","_ref$ariaLabelChosenP","ariaLabelChosenPlural","_ref$ariaLabelJumpToI","ariaLabelJumpToInput","_ref$ariaLabelRemoveS","lastHighlightedIndex","setLastHighlightedIndex","inputRef","isAllNonAsyncItemsSelected","selectAll","useRandomId","summarySelectedItems","_useState","concat","setListItems","filterListItems","filter","updateListItems","_useMultiselectUtils","hasSelectedItems","listItemsWithoutSelectAll","unselectedItemsInListItems","listItem","allListItemsAreSelected","someListItemsAreSelected","addClickedItemToSelectedItems","clickedItem","clickedItemIsInSelectedItems","clickedItemIsSelectAll","removeClickedItemFromSelectedItems","selectAllUnselectedItemsInListItems","unselectAllListItems","handleListItemClicked","useMultiselectUtils","_useMultipleSelection","useMultipleSelection","newSelectedItems","SelectedItemKeyDownBackspace","SelectedItemKeyDownDelete","DropdownKeyDownBackspace","FunctionRemoveSelectedItem","getDropdownProps","stateReducer","useCallback","_","changes","useCombobox","InputKeyDownEnter","_inputRef$current$val","_inputRef$current","ControlledPropUpdatedSelectedItem","_inputRef$current$val2","_inputRef$current2","InputChange","_changes$inputValue","leadingWhitespaceTest","isSpacePressedOnEmptyInput","match","setInputValue","InputBlur","_useCombobox","_ref6","getInputProps","handleOnClear","_inputRef$current3","_inputRef$current4","_inputRef$current5","_inputRef$current6","preventKeyAction","nativeDropdownId","event","_normalizedItems$find","find","_document","_ref$disableLabelAnim","showSelectedItem","setShowSelectedItem","_useState2","_useState3","inputHasFocus","document","activeElement","setHighlightedIndex","onBlur","onFocus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/components/DropdownList.tsx","../src/components/FieldComponents.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/utils.ts","../src/NativeDropdown.tsx","../src/index.tsx","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/SearchableDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { UseComboboxPropGetters, UseSelectPropGetters } from 'downshift';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { Checkbox } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../types';\n\nimport './DropdownList.scss';\n\ntype DropdownListProps<ValueType> = {\n ariaLabelChosenSingular?: string;\n ariaLabelSelectedItem?: string;\n getMenuProps:\n | UseComboboxPropGetters<ValueType>['getMenuProps']\n | UseSelectPropGetters<ValueType>['getMenuProps'];\n getItemProps:\n | UseComboboxPropGetters<ValueType>['getItemProps']\n | UseSelectPropGetters<ValueType>['getItemProps'];\n highlightedIndex: number;\n isOpen: boolean;\n listItems: NormalizedDropdownItemType<ValueType | string>[];\n floatingStyles: { [key: string]: any } | undefined;\n setListRef: (node: HTMLElement | null) => void;\n loading?: boolean;\n loadingText?: string;\n noMatchesText?: string;\n selectAllCheckboxState?: () => boolean | 'indeterminate';\n selectAllItem?: NormalizedDropdownItemType<string>;\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n [key: string]: any;\n};\n\nexport const DropdownList = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular = 'valgt',\n ariaLabelSelectedItem = ', valgt element, trykk for å fjerne',\n getItemProps,\n getMenuProps,\n inputValue,\n isOpen,\n highlightedIndex,\n listItems,\n floatingStyles,\n setListRef,\n loading = false,\n loadingText = 'Laster inn …',\n noMatchesText = 'Ingen treff for søket',\n selectAllCheckboxState,\n selectAllItem,\n selectedItems,\n showSelectAllInList = false,\n ...rest\n}: DropdownListProps<ValueType>) => {\n const isMultiselect = selectAllItem !== undefined;\n const isNoMatches =\n !loading &&\n (listItems.length === 0 ||\n (listItems?.length === 1 &&\n listItems?.[0]?.value === selectAllItem?.value));\n const isItemSelected = (\n item: NormalizedDropdownItemType<ValueType | string>,\n ) =>\n selectedItems.some(\n selectedItem =>\n selectedItem?.value === item?.value &&\n selectedItem?.label === item?.label,\n );\n\n const ariaValuesSelectAll = () => {\n switch (selectAllCheckboxState?.()) {\n case 'indeterminate': {\n return {\n label: `${selectAllItem?.label}, delvis valgt`,\n selected: false,\n };\n }\n case true: {\n return {\n label: `${selectAllItem?.label}, ${ariaLabelChosenSingular}`,\n selected: true,\n };\n }\n default: {\n return { label: `${selectAllItem?.label}`, selected: false };\n }\n }\n };\n\n const selectAllListItemContent = () => (\n <>\n <Checkbox\n aria-hidden=\"true\"\n checked={selectAllCheckboxState?.()}\n className=\"eds-dropdown__list__item__checkbox\"\n onChange={() => {\n return;\n }}\n tabIndex={-1}\n />\n <span\n className=\"eds-dropdown__list__item__text\"\n aria-label={ariaValuesSelectAll().label}\n >\n {selectAllItem?.label}\n </span>\n </>\n );\n\n const listItemContent = (item: NormalizedDropdownItemType<ValueType>) => {\n return (\n <>\n <Checkbox\n aria-hidden=\"true\"\n checked={isItemSelected(item)}\n className=\"eds-dropdown__list__item__checkbox\"\n onChange={() => {\n return;\n }}\n style={!isMultiselect ? { display: 'none' } : {}}\n tabIndex={-1}\n />\n\n <span className=\"eds-dropdown__list__item__text\">\n {item.label}\n <VisuallyHidden>\n {isItemSelected(item) ? ariaLabelSelectedItem : ''}\n </VisuallyHidden>\n </span>\n {item.icons && (\n <span>\n {item.icons.map(Icon => (\n <Icon\n key={\n item?.label + item?.value + (Icon?.displayName ?? Icon?.name)\n }\n inline\n className=\"eds-dropdown__list__item__icon\"\n />\n ))}\n </span>\n )}\n </>\n );\n };\n\n return (\n // use popover from @entur/tooltip when that package upgrades to floating-ui\n <div\n className=\"eds-dropdown__list__floating-container\"\n style={{\n display: isOpen ? undefined : 'none',\n ...floatingStyles,\n }}\n ref={setListRef}\n >\n <ul\n {...getMenuProps({\n 'aria-multiselectable': isMultiselect,\n })}\n className=\"eds-dropdown__list\"\n style={{ ...rest.style }}\n >\n {!loading &&\n listItems.length > 0 &&\n listItems.map((item, index) => {\n const itemIsSelectAll = item.value === selectAllItem?.value;\n if (itemIsSelectAll && listItems.length <= 2) return null;\n\n return (\n <li\n className={classNames('eds-dropdown__list__item', {\n 'eds-dropdown__list__item--select-all': itemIsSelectAll,\n 'eds-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown__list__item--selected':\n !isMultiselect && isItemSelected(item),\n })}\n key={\n item?.label +\n item?.value +\n (\n item?.icons?.map(icon => icon.displayName ?? icon.name) ??\n ''\n ).toString()\n }\n {...getItemProps({\n // @ts-expect-error Since getItemProps expects the same item type\n // here as items, it throws error when selectAllItem is a string.\n // This does, however, not cause any functional issues.\n item,\n index,\n 'aria-selected': itemIsSelectAll\n ? ariaValuesSelectAll().selected\n : isItemSelected(item),\n })}\n >\n {itemIsSelectAll\n ? selectAllListItemContent()\n : listItemContent(\n item as NormalizedDropdownItemType<ValueType>,\n )}\n </li>\n );\n })}\n\n {isNoMatches && (\n <li key=\"dropdown-list-no-match\" className=\"eds-dropdown__list__item\">\n {noMatchesText}\n </li>\n )}\n {/* Known bug: the debounce of useResolvedItems makes noMatchesText show up before loadingText on fetch.\n To solve this, the dropdownList needs to account for the debounce */}\n {loading && (\n <li key=\"dropdown-list-loading\" className=\"eds-dropdown__list__item\">\n {loadingText}\n </li>\n )}\n </ul>\n </div>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetToggleButtonPropsOptions,\n UseMultipleSelectionGetSelectedItemPropsOptions,\n} from 'downshift';\n\nimport { IconButton } from '@entur/button';\nimport { TagChip } from '@entur/chip';\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { LoadingDots } from '@entur/loader';\nimport { Tooltip } from '@entur/tooltip';\n\nimport { NormalizedDropdownItemType } from '../types';\n\nimport './FieldComponents.scss';\n\nexport const SelectedItemTag = <ValueType extends NonNullable<any>>({\n ariaLabelRemoveSelected,\n ariaLabelChosen = 'valgt',\n disabled,\n getSelectedItemProps,\n index,\n readOnly,\n removeSelectedItem,\n selectedItem,\n}: {\n ariaLabelRemoveSelected: string;\n ariaLabelChosen?: string;\n disabled?: boolean;\n getSelectedItemProps?: (\n options: UseMultipleSelectionGetSelectedItemPropsOptions<\n NormalizedDropdownItemType<ValueType>\n >,\n ) => any;\n index?: number;\n readOnly?: boolean;\n removeSelectedItem: (item: NormalizedDropdownItemType<ValueType>) => void;\n selectedItem: NormalizedDropdownItemType<ValueType>;\n}) => {\n const { tabIndex: _, ...selectedItemProps } =\n getSelectedItemProps?.({\n selectedItem,\n index,\n }) ?? {};\n return (\n <TagChip\n size=\"small\"\n className={classNames('eds-dropdown__selected-item-tag', {\n 'eds-dropdown__selected-item-tag--readonly': readOnly,\n 'eds-dropdown__selected-item-tag--disabled': disabled,\n })}\n {...selectedItemProps}\n onClose={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n removeSelectedItem(selectedItem);\n }}\n closeButtonAriaLabel={`${selectedItem.label} ${ariaLabelChosen}, ${ariaLabelRemoveSelected} `}\n key={selectedItem.value}\n aria-live=\"polite\"\n >\n <span\n aria-hidden=\"true\"\n className=\"eds-dropdown__selected-item-tag__text\"\n >\n {selectedItem.label}\n </span>\n </TagChip>\n );\n};\n\ntype FieldAppendProps<ValueType> = {\n ariaHiddenToggleButton?: boolean;\n ariaLabelCloseList?: string;\n ariaLabelOpenList?: string;\n clearable?: boolean;\n labelClearSelectedItems?: string;\n disabled?: boolean;\n focusable?: boolean;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n loading?: boolean;\n loadingText?: string;\n onClear: () => void;\n selectedItems: (NormalizedDropdownItemType<ValueType> | null)[];\n};\n\nexport const FieldAppend = <ValueType extends NonNullable<any>>({\n ariaHiddenToggleButton = false,\n ariaLabelCloseList,\n ariaLabelOpenList,\n clearable = false,\n labelClearSelectedItems,\n disabled = false,\n focusable = false,\n getToggleButtonProps,\n isOpen,\n loading = false,\n loadingText = 'Laster resultater …',\n onClear,\n selectedItems,\n}: FieldAppendProps<ValueType>) => {\n if (disabled) {\n return null;\n }\n return (\n <div className=\"eds-dropdown__appendix\">\n {clearable && selectedItems?.length > 0 && selectedItems[0] !== null && (\n <>\n <ClearableButton\n onClear={onClear}\n focusable={true}\n labelClearSelectedItems={labelClearSelectedItems}\n />\n <div className=\"eds-dropdown__appendix__divider\" />\n </>\n )}\n {!loading ? (\n <ToggleButton\n aria-hidden={ariaHiddenToggleButton}\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n focusable={focusable}\n />\n ) : (\n <div className={'eds-dropdown__appendix__toggle-button--loading-dots'}>\n <LoadingDots aria-label={loadingText} />\n </div>\n )}\n </div>\n );\n};\n\nconst ClearableButton = ({\n onClear,\n labelClearSelectedItems = 'Fjern valgte',\n focusable = false,\n}: {\n onClear: () => void;\n labelClearSelectedItems?: string;\n focusable?: boolean;\n ariaLabelClearItems?: string;\n}) => {\n return (\n <Tooltip\n aria-hidden=\"true\"\n placement=\"top\"\n content={labelClearSelectedItems}\n className=\"eds-dropdown__appendix__clear-button__tooltip\"\n >\n <IconButton\n className=\"eds-dropdown__appendix__clear-button\"\n type=\"button\"\n tabIndex={focusable ? 0 : 1}\n onClick={onClear}\n aria-label={labelClearSelectedItems}\n >\n <CloseSmallIcon aria-hidden=\"true\" />\n </IconButton>\n </Tooltip>\n );\n};\n\nconst ToggleButton = ({\n getToggleButtonProps,\n isOpen,\n 'aria-hidden': ariaHidden = false,\n ariaLabelCloseList = 'Lukk liste med valg',\n ariaLabelOpenList = 'Åpne liste med valg',\n focusable = false,\n}: {\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n 'aria-hidden'?: boolean;\n ariaLabelCloseList?: string;\n ariaLabelOpenList?: string;\n focusable?: boolean;\n}) => {\n return (\n <IconButton\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__appendix__toggle-button', {\n 'eds-dropdown__appendix__toggle-button--open': isOpen,\n }),\n 'aria-labelledby': undefined,\n })}\n aria-hidden={ariaHidden}\n aria-label={\n ariaHidden ? undefined : isOpen ? ariaLabelCloseList : ariaLabelOpenList\n }\n tabIndex={focusable ? 0 : -1}\n type=\"button\"\n >\n <DownArrowIcon aria-hidden=\"true\" />\n </IconButton>\n );\n};\n","import React from 'react';\n\nimport { useDebounce } from '@entur/utils';\n\nimport { useNormalizedItems } from './useNormalizedItems';\n\nimport {\n PotentiallyAsyncDropdownItemType,\n DropdownItemType,\n NormalizedDropdownItemType,\n AsyncDropdownItemType,\n} from './types';\n\nexport const useResolvedItems = <ValueType extends NonNullable<any>>(\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType<ValueType>,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (query?: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType<ValueType>[];\n} => {\n const itemsIsAFunction = typeof itemsOrItemsResolver === 'function';\n\n const [items, setItems] = React.useState<DropdownItemType<ValueType>[]>(\n itemsIsAFunction ? [] : itemsOrItemsResolver,\n );\n const [loading, setLoading] = React.useState(false);\n\n const abortControllerRef = React.useRef<AbortController>(\n new AbortController(),\n );\n\n // We normalize the itemsResolver argument to an async function, so we\n // can use it without thinking about the differences later\n const itemsResolver = React.useMemo(() => {\n if (itemsIsAFunction)\n return itemsOrItemsResolver as AsyncDropdownItemType<ValueType>;\n return () =>\n Promise.resolve(itemsOrItemsResolver as DropdownItemType<ValueType>[]);\n }, [itemsOrItemsResolver, itemsIsAFunction]);\n\n // This should be called whenever the input value changes\n const updateItems = async (inputValue?: string) => {\n // The abortController handles cleanup of the previous request and unmounting\n if (abortControllerRef?.current) abortControllerRef?.current?.abort();\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n setLoading(true);\n\n try {\n const resolvedItems = await itemsResolver(\n inputValue ?? '',\n abortControllerRef,\n );\n\n if (abortControllerRef?.current?.signal?.aborted) {\n console.warn(\n 'Avbryt den asynkrone funksjonen din med signalet fra AbortController-en for å for å unngå minnelekkasje.',\n 'Funksjonen bør kaste en DOMException med navnet \"AbortError\" når den avbrytes.',\n '',\n '\\n\\nSe eksempel her: https://design.entur.no/komponenter/skjemaelementer/dropdown#s%C3%B8kbar-dropdown-med-valg-fra-nettverkskall-bassert-p%C3%A5-tekstinput',\n '\\nLes mer om AbortController her: https://developer.mozilla.org/en-US/docs/Web/API/AbortController',\n );\n return;\n }\n\n setLoading(false);\n setItems(resolvedItems);\n } catch (error) {\n if (\n error &&\n typeof error === 'object' &&\n 'name' in error &&\n error.name === 'AbortError'\n ) {\n // Stop execution if the request was aborted\n return;\n }\n console.warn(\n 'The following error was received but not handled inside Entur Designsystems useResolvedItems hook:',\n );\n throw error;\n }\n };\n\n const debouncedFetchItems = useDebounce(updateItems, debounceTimeout);\n const normalizedItems = useNormalizedItems(items);\n\n React.useEffect(() => {\n // send abort signal to previous request on unmount for cleanup\n return () => abortControllerRef?.current?.abort('Component unmounted');\n }, []);\n\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (itemsIsAFunction) {\n debouncedFetchItems('');\n }\n }, [itemsIsAFunction, itemsResolver]);\n\n return {\n items: normalizedItems,\n loading: itemsIsAFunction ? loading : false,\n fetchItems: debouncedFetchItems,\n };\n};\n","import React from 'react';\n\nimport { DropdownItemType, NormalizedDropdownItemType } from './types';\n\nexport const useNormalizedItems = <ValueType = string>(\n items: DropdownItemType<ValueType>[],\n): NormalizedDropdownItemType<ValueType>[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return {\n value: item as ValueType,\n label: item,\n };\n }\n\n if (item?.value === undefined) {\n return {\n ...item,\n value: item.label as ValueType,\n };\n }\n return { ...item, value: item.value };\n }),\n [items],\n );\n","import { UseComboboxState } from 'downshift';\nimport { NormalizedDropdownItemType } from './types';\n\n/* start general utils */\nexport const EMPTY_INPUT = '';\n\nexport function lowerCaseFilterTest(\n item: NormalizedDropdownItemType<any>,\n input: string | undefined,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport function noFilter<ValueType>(\n //@ts-expect-error only here to comply with dropdown filter API\n item: NormalizedDropdownItemType<ValueType>,\n //@ts-expect-error only here to comply with dropdown filter API\n input: string | undefined,\n) {\n return true;\n}\n\nexport const itemToString = (item: NormalizedDropdownItemType<any> | null) =>\n item ? item.label : '';\n\nexport const itemToKey = (item: NormalizedDropdownItemType<any> | null) =>\n item?.label + item?.value;\n\nexport const isFunctionWithQueryArgument = (object: any) =>\n typeof object === 'function' && object.length > 0;\n\n/* end general utils */\n/* start multiselect utils */\n\ntype useMultiselectUtilsType<ValueType> = {\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n listItems: NormalizedDropdownItemType<ValueType | string>[];\n selectAll: NormalizedDropdownItemType<string>;\n};\n\nexport const useMultiselectUtils = <ValueType>({\n listItems,\n selectedItems,\n selectAll,\n}: useMultiselectUtilsType<ValueType>) => {\n const hasSelectedItems = selectedItems.length > 0;\n\n const listItemsWithoutSelectAll = listItems.filter(\n item => item.value !== selectAll.value,\n ) as NormalizedDropdownItemType<ValueType>[];\n\n const unselectedItemsInListItems = listItemsWithoutSelectAll.filter(\n listItem =>\n !selectedItems.some(\n selectedItem => selectedItem.value === listItem.value,\n ),\n );\n\n const allListItemsAreSelected = !listItemsWithoutSelectAll.some(\n listItem =>\n !selectedItems.some(\n selectedItem => selectedItem.value === listItem.value,\n ),\n );\n\n const someListItemsAreSelected = listItemsWithoutSelectAll.some(listItem =>\n selectedItems.some(selectedItem => selectedItem.value === listItem.value),\n );\n\n const addClickedItemToSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => onChange([...selectedItems, clickedItem]);\n\n const clickedItemIsInSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n ) =>\n selectedItems.some(\n selectedItem => selectedItem.value === clickedItem.value,\n );\n\n const clickedItemIsSelectAll = (\n clickedItem: NormalizedDropdownItemType<string | ValueType>,\n ) => clickedItem.value === selectAll.value;\n\n const handleListItemClicked = ({\n clickedItem,\n onChange,\n }: {\n clickedItem: NormalizedDropdownItemType<any>;\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void;\n }) => {\n if (clickedItemIsSelectAll(clickedItem)) {\n if (allListItemsAreSelected) {\n return unselectAllListItems(onChange);\n }\n return selectAllUnselectedItemsInListItems(onChange);\n }\n\n if (clickedItemIsInSelectedItems(clickedItem)) {\n return removeClickedItemFromSelectedItems(clickedItem, onChange);\n }\n addClickedItemToSelectedItems(clickedItem, onChange);\n };\n\n const removeClickedItemFromSelectedItems = (\n clickedItem: NormalizedDropdownItemType<ValueType>,\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) =>\n onChange(\n selectedItems.filter(\n selectedItem => selectedItem.value !== clickedItem.value,\n ),\n );\n\n const selectAllCheckboxState = () => {\n if (allListItemsAreSelected) return true;\n if (someListItemsAreSelected) return 'indeterminate';\n return false;\n };\n\n const selectAllUnselectedItemsInListItems = (\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => {\n onChange([...selectedItems, ...unselectedItemsInListItems]);\n };\n\n const unselectAllListItems = (\n onChange: (value: NormalizedDropdownItemType<ValueType>[]) => void,\n ) => {\n const selectedItemsWithoutItemsInListItems = selectedItems.filter(\n selectedItem =>\n !listItemsWithoutSelectAll.some(\n listItem => listItem.value === selectedItem.value,\n ),\n );\n onChange(selectedItemsWithoutItemsInListItems);\n };\n\n return {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n handleListItemClicked,\n hasSelectedItems,\n listItemsWithoutSelectAll,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n someListItemsAreSelected,\n unselectAllListItems,\n };\n};\n\n/* end multiselect utils */\n/* start a11y utils */\n\n// called when the state changes:\n// selectedItem, highlightedIndex, inputValue or isOpen.\nexport function getA11yStatusMessage<ValueType>(\n options: UseComboboxState<NormalizedDropdownItemType<ValueType>> & {\n selectAllItemIncluded?: boolean;\n resultCount: number;\n },\n): string {\n const { isOpen, selectAllItemIncluded = false, resultCount } = options;\n\n if (!isOpen) {\n return '';\n }\n\n const resultCountWithoutSelectAll = selectAllItemIncluded\n ? resultCount - 1\n : resultCount;\n\n if (resultCountWithoutSelectAll === 0) {\n return 'Ingen resultater';\n }\n\n return `${resultCountWithoutSelectAll} resultat${\n resultCountWithoutSelectAll === 1 ? '' : 'er'\n } tilgjengelig, naviger med pil opp eller ned, velg elementer med Enter.`;\n}\n/* end a11y utils */\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { LoadingDots } from '@entur/loader';\nimport { useRandomId, VariantType } from '@entur/utils';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type NativeDropdownProps<ValueType> = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdow-nen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdown-en å ha */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value\n * Obs: merk at parameter her denne ikke er samme som i en HTML select.\n * Bruk { target } hvis du trenger info om select-elementet som ble trykket på\n */\n onChange?: ({\n value,\n selectedItem,\n target,\n }: {\n value: string;\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n target: EventTarget & HTMLSelectElement;\n }) => void;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /**\n * Setter dropdown-en i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien som NormalizedDropdownItemType\n * (Brukes når komponenten er 'controlled')\n */\n selectedItem?: NormalizedDropdownItemType<ValueType> | null;\n /** Den valgte verdien som sting\n * (Brukes når komponenten er 'controlled)\n */\n value?: string;\n /** Hvilken valideringsvariant som gjelder*/\n variant?: VariantType | typeof error | typeof info;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown = <ValueType extends string | number>({\n className,\n disabled = false,\n disableLabelAnimation,\n feedback,\n items,\n label,\n loadingText,\n onChange,\n prepend,\n readOnly = false,\n selectedItem,\n style,\n value,\n variant,\n ...rest\n}: NativeDropdownProps<ValueType>) => {\n const { items: normalizedItems, loading } =\n useResolvedItems<ValueType>(items);\n const nativeDropdownId = useRandomId('eds-dropdown-native');\n\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={\n <FieldAppend\n hidden={disabled || readOnly}\n loading={loading}\n loadingText={loadingText}\n />\n }\n className={className}\n style={style}\n label={label}\n labelId={nativeDropdownId}\n variant={variant}\n feedback={feedback}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'negative' || variant === error}\n aria-labelledby={nativeDropdownId}\n aria-busy={loading}\n className=\"eds-form-control eds-dropdown--native\"\n disabled={disabled || readOnly}\n onChange={event => {\n onChange?.({\n value: event.target.value,\n selectedItem:\n normalizedItems.find(item => item.value === event.target.value) ??\n null,\n target: event.target,\n });\n }}\n value={value ?? selectedItem?.value ?? undefined}\n {...rest}\n >\n {normalizedItems.map(item => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n </BaseFormControl>\n );\n};\n\nconst FieldAppend = ({\n loading,\n loadingText,\n hidden,\n}: {\n loading: boolean;\n loadingText?: string;\n hidden: boolean;\n}) => {\n if (loading) {\n return (\n <div className=\"eds-dropdown-native__loading-dots\">\n <LoadingDots aria-label={loadingText} />\n </div>\n );\n }\n if (hidden) {\n return <></>;\n }\n return <DownArrowIcon inline />;\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport type { NormalizedDropdownItemType, DropdownItemType } from './types';\n\nexport * from './SearchableDropdown';\nexport * from './MultiSelect';\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './types';\n","import React, { Dispatch, SetStateAction, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport { useSelect } from 'downshift';\nimport { autoUpdate, flip, offset, useFloating } from '@floating-ui/react-dom';\n\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType } from '@entur/utils';\n\nimport { DropdownList } from './components/DropdownList';\nimport { FieldAppend } from './components/FieldComponents';\nimport { useResolvedItems } from './useResolvedItems';\nimport { itemToString } from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type DropdownProps<ValueType> = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Valgt verdi. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n /** Callback ved valg som skal oppdatere selectedItem */\n onChange?: (\n selectedItem: NormalizedDropdownItemType<ValueType> | null,\n ) => void | Dispatch<\n SetStateAction<NormalizedDropdownItemType<ValueType> | null>\n >;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default false\n */\n clearable?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Setter dropdown-en i read-only modus */\n readOnly?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** En tekst som beskriver hva som skjer når man venter på items\n * @default 'Laster inn …'\n */\n loadingText?: string;\n /** Tekst som kommer opp når det ikke er noe elementer å vise\n * @default \"Ingen tilgjengelige valg …\"\n */\n noMatchesText?: string;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default \"fjern valgt\"\n */\n labelClearSelectedItem?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Styling for Dropdown-en */\n style?: { [key: string]: any };\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default 'valgt'\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default ', valgt element, trykk for å fjerne'\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const Dropdown = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular,\n ariaLabelCloseList,\n ariaLabelOpenList,\n ariaLabelSelectedItem,\n className,\n clearable = false,\n disabled = false,\n disableLabelAnimation,\n feedback,\n items: initialItems,\n label,\n labelClearSelectedItem = 'fjern valgt',\n labelTooltip,\n listStyle,\n loadingText,\n noMatchesText = 'Ingen tilgjengelige valg …',\n onChange,\n placeholder,\n prepend,\n readOnly = false,\n selectedItem,\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'information',\n ...rest\n}: DropdownProps<ValueType>) => {\n const { items: normalizedItems, loading } = useResolvedItems(initialItems);\n const toggleButtonRef = useRef<HTMLDivElement>(null);\n const isFilled = selectedItem !== null || placeholder !== undefined;\n\n const {\n isOpen,\n openMenu,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getToggleButtonProps,\n highlightedIndex,\n } = useSelect({\n items: normalizedItems,\n defaultHighlightedIndex: selectedItem ? undefined : 0,\n selectedItem,\n onStateChange({ type, selectedItem: newSelectedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (!selectOnBlur) break;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter: // eslint-disable-line no-fallthrough\n case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick: {\n if (newSelectedItem === undefined) return;\n onChange?.(newSelectedItem ?? null);\n }\n }\n },\n itemToString,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaHiddenToggleButton={true}\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n clearable={clearable}\n labelClearSelectedItems={labelClearSelectedItem}\n focusable={false}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n loading={loading}\n loadingText={loadingText}\n onClear={() => {\n onChange?.(null);\n toggleButtonRef.current?.focus();\n }}\n disabled={readOnly || disabled}\n selectedItems={[selectedItem]}\n />\n }\n className={classNames('eds-dropdown', className, {\n 'eds-dropdown--has-tooltip': labelTooltip !== undefined,\n })}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={isFilled}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) openMenu();\n }}\n prepend={prepend}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <div\n className=\"eds-dropdown__selected-item\"\n {...getToggleButtonProps({\n id: undefined,\n onKeyDown: e => {\n if (selectOnTab && isOpen && e.key === 'Tab') {\n // we don't want to clear selection with tab\n const highlitedItem = normalizedItems[highlightedIndex];\n if (highlitedItem) {\n onChange?.(highlitedItem);\n }\n }\n },\n ref: toggleButtonRef,\n })}\n >\n {selectedItem?.label ?? (\n <div\n className={classNames(\n 'eds-dropdown__selected-item__placeholder',\n {\n 'eds-dropdown__selected-item__placeholder--readonly':\n readOnly,\n },\n )}\n >\n {placeholder}\n </div>\n ) ??\n ''}\n </div>\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n isOpen={isOpen}\n listItems={normalizedItems}\n noMatchesText={noMatchesText}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n />\n </BaseFormControl>\n );\n};\n","import React, {\n Dispatch,\n SetStateAction,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport {\n useMultipleSelection,\n useCombobox,\n UseComboboxStateChangeOptions,\n} from 'downshift';\nimport { useFloating, autoUpdate, offset, flip } from '@floating-ui/react-dom';\n\nimport { VisuallyHidden } from '@entur/a11y';\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType, useRandomId } from '@entur/utils';\n\nimport { FieldAppend, SelectedItemTag } from './components/FieldComponents';\nimport { DropdownList } from './components/DropdownList';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n EMPTY_INPUT,\n getA11yStatusMessage,\n isFunctionWithQueryArgument,\n itemToKey,\n itemToString,\n lowerCaseFilterTest,\n noFilter,\n useMultiselectUtils,\n} from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type MultiSelectProps<ValueType> = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Elementer som er valgt blant 'items'. Bruk tom liste for ingen valgte\n */\n selectedItems: NormalizedDropdownItemType<ValueType>[];\n /** Callback med alle valgte verdier.\n * Bruk denne til å oppdatere selectedItems-listen */\n onChange?: (\n selectedItems: NormalizedDropdownItemType<ValueType>[],\n ) => void | Dispatch<SetStateAction<NormalizedDropdownItemType<ValueType>[]>>;\n /** Filtreringen som brukes når man skriver inn tekst i inputfeltet\n * @default Regex-test som sjekker om item.label inneholder input-teksten\n */\n itemFilter?: (\n item: NormalizedDropdownItemType<ValueType>,\n inputValue: string | undefined,\n ) => boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Om dropdown-en er deaktivert */\n disabled?: boolean;\n /** Om dropdown-en er i read-only modus */\n readOnly?: boolean;\n /** Om en knapp for å fjerne alle valg skal vises\n * @default true\n */\n clearable?: boolean;\n /** Plasserer ledeteksten statisk på toppen av inputfeltet */\n disableLabelAnimation?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items\n * @default \"Laster inn …\"\n */\n loadingText?: string;\n /** Tekst som kommer opp når det ikke er noe treff på filtreringsøket\n * @default \"Ingen treff for søket\"\n */\n noMatchesText?: string;\n /** Skjuler «Velg alle» fra listen med valg\n * @default false\n */\n hideSelectAll?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Maks antall individuelle valgt-element-tags i MultiSelect-en før de blir til en samle-tag\n * @default 10\n */\n maxChips?: number;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Resetter input etter at et element er valgt i listen\n * @default false\n */\n clearInputOnSelect?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n style?: React.CSSProperties;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Ekstra klassenavn */\n className?: string;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Velg alle\"\n */\n labelSelectAll?: string;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Alle valgt\"\n */\n labelAllItemsSelected?: string;\n /** Skjermleser-tekst som for å fjerne alle valg\n * @default \"Fjern valgte\"\n */\n labelClearAllItems?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Tekst for skjemleser på knapper for å fjerne valgt element\n * @default \"trykk for å fjerne valg\"\n */\n ariaLabelRemoveSelected?: string;\n /** Tekst for skjemleser for å indikere at et element er valgt\n * @default \"valgte\"\n */\n ariaLabelChosenPlural?: string;\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Tekst for skjemleser for å hoppe til input-feltet\n * @default `${selectedItems.length} valgte elementer, trykk for å hoppe til tekstfeltet`\n */\n ariaLabelJumpToInput?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default 'valgt'\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default ', valgt element, trykk for å fjerne'\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const MultiSelect = <ValueType extends NonNullable<any>>({\n className,\n clearable = true,\n clearInputOnSelect = false,\n debounceTimeout,\n disabled = false,\n disableLabelAnimation,\n feedback,\n hideSelectAll = false,\n items: initialItems,\n itemFilter = isFunctionWithQueryArgument(initialItems)\n ? noFilter\n : lowerCaseFilterTest,\n label,\n labelAllItemsSelected = 'Alle valgt',\n labelClearAllItems = 'Fjern valgte',\n labelSelectAll = 'Velg alle',\n labelTooltip,\n listStyle,\n loadingText,\n maxChips = 10,\n noMatchesText,\n onChange = () => undefined,\n placeholder,\n readOnly = false,\n selectedItems = [],\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'information',\n ariaLabelChosenSingular,\n ariaLabelChosenPlural = 'valgte',\n ariaLabelCloseList,\n ariaLabelJumpToInput = `${selectedItems.length} valgte elementer, trykk for å hoppe til tekstfeltet`,\n ariaLabelOpenList,\n ariaLabelRemoveSelected = 'trykk for å fjerne valg',\n ariaLabelSelectedItem,\n ...rest\n}: MultiSelectProps<ValueType>) => {\n const [lastHighlightedIndex, setLastHighlightedIndex] = React.useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n //@ts-expect-error this is done to aid developers debug wrong prop usage\n if (rest.selectedItem !== undefined)\n console.warn(\n \"Incorrect 'selectedItem' prop found, did you mean to use 'selectedItems?\",\n );\n //@ts-expect-error selectedItem should not actually exist in rest\n }, [rest.selectedItem]);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems, debounceTimeout);\n\n const isAllNonAsyncItemsSelected =\n typeof initialItems !== 'function' &&\n selectedItems.length === normalizedItems.length;\n\n // special 'item' used as Select All entry in the dropdown list\n const selectAll: NormalizedDropdownItemType<string> = {\n value: useRandomId('select-all'),\n label: labelSelectAll,\n };\n // special 'item' used as a replacement selected item tag for when\n // there are more selected element than maxChips\n const summarySelectedItems: NormalizedDropdownItemType<string> =\n React.useMemo(\n () => ({\n value: EMPTY_INPUT,\n label: isAllNonAsyncItemsSelected\n ? labelAllItemsSelected\n : selectedItems.length + ' ' + ariaLabelChosenPlural,\n }),\n [\n isAllNonAsyncItemsSelected,\n selectedItems,\n labelAllItemsSelected,\n ariaLabelChosenPlural,\n ],\n );\n\n const [listItems, setListItems] = useState([\n ...(!hideSelectAll ? [selectAll] : []),\n ...normalizedItems,\n ]);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems([\n ...(!hideSelectAll ? [selectAll] : []),\n ...normalizedItems.filter(item => itemFilter(item, inputValue)),\n ]);\n\n const updateListItems = ({ inputValue }: { inputValue?: string }) => {\n const shouldRefetchItems = isFunctionWithQueryArgument(initialItems);\n if (shouldRefetchItems) fetchItems(inputValue ?? EMPTY_INPUT);\n\n filterListItems({ inputValue: inputValue ?? EMPTY_INPUT });\n };\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { hasSelectedItems, handleListItemClicked, selectAllCheckboxState } =\n useMultiselectUtils<ValueType>({\n listItems,\n selectAll,\n selectedItems,\n });\n\n const { getSelectedItemProps, getDropdownProps } = useMultipleSelection({\n selectedItems,\n // @ts-expect-error prop missing from library types\n itemToString,\n itemToKey,\n onStateChange({ selectedItems: newSelectedItems, type }) {\n switch (type) {\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:\n case useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem: {\n if (newSelectedItems !== undefined) onChange(newSelectedItems);\n break;\n }\n default:\n break;\n }\n },\n });\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n changes,\n type,\n }: UseComboboxStateChangeOptions<\n NormalizedDropdownItemType<ValueType | string>\n >,\n ) => {\n if (\n changes.highlightedIndex !== undefined &&\n changes?.highlightedIndex >= 0\n ) {\n setLastHighlightedIndex(changes?.highlightedIndex);\n }\n\n switch (type) {\n // keep menu open and edit input value on item selection\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick: {\n if (clearInputOnSelect) {\n updateListItems({ inputValue: EMPTY_INPUT });\n }\n return {\n ...changes,\n isOpen: true,\n inputValue: clearInputOnSelect\n ? EMPTY_INPUT\n : inputRef?.current?.value ?? EMPTY_INPUT,\n };\n }\n // edit input value when selected items is updated outside component\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem: {\n return {\n ...changes,\n inputValue: inputRef?.current?.value ?? EMPTY_INPUT,\n };\n }\n // remove leading whitespace, select item with spacebar if input is empty and filter list items\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n const isSpacePressedOnEmptyInput = changes.inputValue === ' ';\n if (changes.inputValue?.match(leadingWhitespaceTest)) {\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT),\n );\n\n if (isSpacePressedOnEmptyInput) {\n openMenu();\n\n if (isOpen && changes.highlightedIndex !== undefined) {\n handleListItemClicked({\n clickedItem: listItems[changes.highlightedIndex],\n onChange,\n });\n }\n }\n } else {\n updateListItems({ inputValue: changes.inputValue });\n // set highlighted item to first item after search\n setLastHighlightedIndex(hideSelectAll ? 0 : 1);\n return { ...changes, highlightedIndex: hideSelectAll ? 0 : 1 };\n }\n\n return changes;\n }\n // reset input value when leaving input field\n case useCombobox.stateChangeTypes.InputBlur: {\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n }\n default:\n return changes;\n }\n },\n [hideSelectAll, normalizedItems, filterListItems, initialItems], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const {\n getInputProps,\n getItemProps,\n getLabelProps,\n getMenuProps,\n getToggleButtonProps,\n highlightedIndex,\n inputValue,\n isOpen,\n openMenu,\n setInputValue,\n } = useCombobox({\n defaultHighlightedIndex: lastHighlightedIndex, // after selection, highlight previously selected item.\n items: listItems,\n itemToString,\n selectedItem: null,\n stateReducer,\n onStateChange({ type, selectedItem: clickedItem }) {\n // clickedItem means item chosen either via mouse or keyboard\n if (!clickedItem) return;\n\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useCombobox.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough\n case useCombobox.stateChangeTypes.ItemClick: {\n handleListItemClicked({\n clickedItem,\n onChange,\n });\n }\n }\n },\n // Accessibility\n getA11yStatusMessage: options =>\n getA11yStatusMessage({\n ...options,\n selectAllItemIncluded: !hideSelectAll,\n resultCount: listItems.length,\n }),\n ...rest,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n const handleOnClear = () => {\n onChange([]);\n setInputValue(EMPTY_INPUT);\n inputRef.current?.focus();\n updateListItems({ inputValue });\n };\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n selectedItems={selectedItems}\n isOpen={isOpen}\n clearable={clearable}\n labelClearSelectedItems={labelClearAllItems}\n focusable={false}\n loading={loading}\n loadingText={loadingText}\n disabled={readOnly || disabled}\n onClear={handleOnClear}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames(\n 'eds-dropdown',\n 'eds-dropdown--multiselect',\n className,\n { 'eds-dropdown--has-tooltip': labelTooltip !== undefined },\n )}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={hasSelectedItems || inputValue !== EMPTY_INPUT}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <div\n className={classNames(\n 'eds-dropdown--multiselect__selected-items-and-input',\n {\n 'eds-dropdown--multiselect__selected-items-and-input--filled':\n hasSelectedItems,\n },\n )}\n onClick={e => {\n if (e.target === e.currentTarget) openMenu();\n }}\n >\n {selectedItems.length <= maxChips ? (\n <>\n {selectedItems.length > 1 ? (\n <VisuallyHidden onClick={() => inputRef.current?.focus()}>\n {ariaLabelJumpToInput}\n </VisuallyHidden>\n ) : (\n <></>\n )}\n {selectedItems.map((selectedItem, index) => (\n <SelectedItemTag\n ariaLabelChosen={ariaLabelChosenSingular}\n ariaLabelRemoveSelected={ariaLabelRemoveSelected}\n disabled={disabled}\n getSelectedItemProps={getSelectedItemProps}\n index={index}\n key={\n selectedItem?.label +\n (typeof selectedItem?.value === 'string'\n ? selectedItem.value\n : '')\n }\n readOnly={readOnly}\n removeSelectedItem={() => {\n handleListItemClicked({\n clickedItem: selectedItem,\n onChange,\n });\n inputRef?.current?.focus();\n }}\n selectedItem={selectedItem}\n />\n ))}\n </>\n ) : (\n <SelectedItemTag\n ariaLabelRemoveSelected={labelClearAllItems}\n ariaLabelChosen=\"\"\n disabled={disabled}\n readOnly={readOnly}\n removeSelectedItem={handleOnClear}\n selectedItem={summarySelectedItems}\n />\n )}\n <input\n placeholder={placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n disabled={readOnly || disabled}\n {...getInputProps({\n onKeyDown: (e: React.KeyboardEvent) => {\n if (selectOnTab && isOpen && e.key === 'Tab') {\n const highlitedItem = listItems[highlightedIndex];\n // we don't want to clear selection with tab\n if (highlitedItem) {\n handleListItemClicked({\n clickedItem: highlitedItem,\n onChange,\n });\n }\n }\n },\n ...getDropdownProps({\n preventKeyAction: isOpen,\n value: inputValue ?? EMPTY_INPUT,\n ref: inputRef,\n }),\n })}\n />\n </div>\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n inputValue={inputValue}\n isOpen={isOpen}\n listItems={listItems}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n noMatchesText={noMatchesText}\n selectAllCheckboxState={selectAllCheckboxState}\n selectAllItem={selectAll}\n selectedItems={selectedItems}\n />\n </BaseFormControl>\n );\n};\n","/* eslint-disable no-warning-comments */\nimport React, {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { UseComboboxStateChangeOptions, useCombobox } from 'downshift';\nimport classNames from 'classnames';\nimport { useFloating, autoUpdate, offset, flip } from '@floating-ui/react-dom';\n\nimport { BaseFormControl } from '@entur/form';\nimport { space } from '@entur/tokens';\nimport { VariantType } from '@entur/utils';\n\nimport { DropdownList } from './components/DropdownList';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport { useResolvedItems } from './useResolvedItems';\nimport {\n EMPTY_INPUT,\n getA11yStatusMessage,\n isFunctionWithQueryArgument,\n itemToString,\n lowerCaseFilterTest,\n noFilter,\n} from './utils';\n\nimport {\n NormalizedDropdownItemType,\n PotentiallyAsyncDropdownItemType,\n} from './types';\n\nimport './Dropdown.scss';\n\n/** @deprecated use variant=\"information\" instead */\nconst info = 'info';\n/** @deprecated use variant=\"negative\" instead */\nconst error = 'error';\n\nexport type SearchableDropdownProps<ValueType> = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType<ValueType>;\n /** Valgt element. Bruk null for ingen verdi */\n selectedItem: NormalizedDropdownItemType<ValueType> | null;\n /** Callback ved valg som skal brukes til å oppdatere selectedItem */\n onChange?: (\n selectedItem: NormalizedDropdownItemType<ValueType> | null,\n ) => void | Dispatch<\n SetStateAction<NormalizedDropdownItemType<ValueType> | null>\n >;\n /** Filtreringen som brukes når man skriver inn tekst i inputfeltet\n * @default Regex-test som sjekker om item.label inneholder input-teksten\n */\n itemFilter?: (\n item: NormalizedDropdownItemType<ValueType>,\n inputValue: string | undefined,\n ) => boolean;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Vis knapp for å nullstille Dropdown-en skal vises\n * @default true\n */\n clearable?: boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Antall millisekunder man venter etter tekstinput før det gjøres kall for å oppdatere items\n * Denne er kun relevant hvis du sender inn en funksjon som items.\n */\n debounceTimeout?: number;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /**\n * @deprecated\n * Bruk selectOnTab i stedet\n *\n * Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnBlur?: boolean;\n /** Tekst som kommer opp når det ikke er noe treff på filtreringsøket\n * @default \"Ingen treff for søket\"\n */\n noMatchesText?: string;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readOnly?: boolean;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Hvilken valideringsvariant som gjelder*/\n variant?: VariantType | typeof error | typeof info;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n className?: string;\n style?: { [key: string]: any };\n /** Style som kun påføres listeelementet */\n listStyle?: { [key: string]: any };\n /** Tekst som beskriver at man fjerner valget sitt\n * @default \"fjern valgt\"\n */\n labelClearSelectedItem?: string;\n /** En tooltip som gir ekstra info om inputfeltet */\n labelTooltip?: React.ReactNode;\n /** Tekst for skjemleser for knapp som lukker listen med valg\n * @default \"Lukk liste med valg\"\n */\n ariaLabelCloseList?: string;\n /** Tekst for skjemleser for knapp som åpner listen med valg\n * @default \"Åpne liste med valg\"\n */\n ariaLabelOpenList?: string;\n /** Ord for at et element er valgt i entall\n * eks. 'Element 1, _valgt_'\n * @default \"valgt\"\n */\n ariaLabelChosenSingular?: string;\n /** Tekst for skjermleser som beskriver statusen til et element som valgt\n * @default \", valgt element, trykk for å fjerne\"\n */\n ariaLabelSelectedItem?: string;\n};\n\nexport const SearchableDropdown = <ValueType extends NonNullable<any>>({\n ariaLabelChosenSingular,\n ariaLabelCloseList,\n ariaLabelOpenList,\n ariaLabelSelectedItem,\n className,\n clearable = true,\n debounceTimeout,\n disabled = false,\n disableLabelAnimation = false,\n feedback,\n items: initialItems,\n itemFilter = isFunctionWithQueryArgument(initialItems)\n ? noFilter\n : lowerCaseFilterTest,\n label,\n labelClearSelectedItem = 'fjern valgt',\n labelTooltip,\n listStyle,\n loadingText,\n noMatchesText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly = false,\n selectedItem: value,\n selectOnBlur = false,\n selectOnTab = false,\n style,\n variant = 'info',\n ...rest\n}: SearchableDropdownProps<ValueType>) => {\n const [showSelectedItem, setShowSelectedItem] = useState(value !== null);\n const [lastHighlightedIndex, setLastHighlightedIndex] = useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems, debounceTimeout);\n\n const [listItems, setListItems] = useState(normalizedItems);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems(normalizedItems.filter(item => itemFilter(item, inputValue)));\n\n const updateListItems = ({ inputValue }: { inputValue?: string }) => {\n const shouldRefetchItems = isFunctionWithQueryArgument(initialItems);\n if (shouldRefetchItems) fetchItems(inputValue ?? EMPTY_INPUT);\n\n filterListItems({ inputValue: inputValue ?? EMPTY_INPUT });\n };\n\n const inputHasFocus =\n typeof document !== 'undefined'\n ? inputRef?.current === document?.activeElement\n : false;\n\n useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // sync internal state on initial render\n if (selectedItem !== null && !inputHasFocus) {\n setShowSelectedItem(true);\n updateListItems({ inputValue: EMPTY_INPUT });\n setInputValue(EMPTY_INPUT);\n }\n }, []);\n\n const stateReducer = useCallback(\n (\n _,\n {\n type,\n changes,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType<ValueType>>,\n ) => {\n if (\n changes.highlightedIndex !== undefined &&\n changes?.highlightedIndex >= 0\n ) {\n setLastHighlightedIndex(changes?.highlightedIndex);\n }\n\n switch (type) {\n // empty input to show selected item and reset dropdown list on item selection\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur: {\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n }\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n if (changes.selectedItem !== null && !inputHasFocus)\n setShowSelectedItem(true);\n updateListItems({ inputValue: EMPTY_INPUT });\n return {\n ...changes,\n inputValue: EMPTY_INPUT,\n };\n // remove leading whitespace, select element with spacebar on empty input, and filter list based on input\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n const isSpacePressedOnEmptyInput = changes.inputValue === ' ';\n if (changes.inputValue?.match(leadingWhitespaceTest)) {\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT),\n );\n\n if (isSpacePressedOnEmptyInput) {\n openMenu();\n\n if (isOpen && changes.highlightedIndex !== undefined) {\n onChange(listItems[changes.highlightedIndex]);\n }\n }\n } else {\n updateListItems({ inputValue: changes.inputValue });\n setHighlightedIndex(0);\n setLastHighlightedIndex(0);\n }\n return changes;\n }\n default:\n return changes;\n }\n },\n [fetchItems, filterListItems], // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const {\n isOpen,\n openMenu,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n highlightedIndex,\n setHighlightedIndex,\n getItemProps,\n selectedItem,\n inputValue,\n setInputValue,\n } = useCombobox({\n defaultHighlightedIndex: lastHighlightedIndex,\n items: listItems,\n itemToString,\n selectedItem: value,\n stateReducer,\n onStateChange({ type, selectedItem: newSelectedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useCombobox.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough\n case useCombobox.stateChangeTypes.ItemClick:\n if (newSelectedItem === undefined) return;\n onChange(newSelectedItem ?? null);\n }\n },\n // Accessibility\n getA11yStatusMessage: options =>\n getA11yStatusMessage({ ...options, resultCount: listItems.length }),\n ...rest,\n });\n\n const { refs, floatingStyles, elements, update } = useFloating({\n placement: 'bottom-start',\n open: isOpen,\n middleware: [offset(space.extraSmall2), flip()],\n });\n\n // Since we use CSS instead of conditional rendering when hiding dropdownlist\n // we can't use the whileElementsMounted option and need to handle\n // cleanup ourselves. See https://floating-ui.com/docs/autoupdate\n useEffect(() => {\n if (isOpen && elements.reference && elements.floating) {\n const cleanup = autoUpdate(elements.reference, elements.floating, update);\n return cleanup;\n }\n }, [isOpen, elements, update]);\n\n const handleOnClear = () => {\n onChange(null);\n setInputValue(EMPTY_INPUT);\n inputRef.current?.focus();\n updateListItems({ inputValue });\n setShowSelectedItem(false);\n };\n\n return (\n <BaseFormControl\n append={\n <FieldAppend\n ariaLabelCloseList={ariaLabelCloseList}\n ariaLabelOpenList={ariaLabelOpenList}\n clearable={clearable}\n labelClearSelectedItems={labelClearSelectedItem}\n disabled={readOnly || disabled}\n focusable={false}\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n loading={loading}\n loadingText={loadingText}\n onClear={handleOnClear}\n selectedItems={[selectedItem]}\n />\n }\n className={classNames(\n 'eds-dropdown',\n 'eds-dropdown--searchable',\n className,\n {\n 'eds-dropdown--has-tooltip': labelTooltip !== undefined,\n },\n )}\n disabled={disabled}\n disableLabelAnimation={disableLabelAnimation}\n feedback={feedback}\n isFilled={selectedItem !== null || inputValue !== EMPTY_INPUT}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n labelTooltip={labelTooltip}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n prepend={prepend}\n readOnly={readOnly}\n ref={refs.setReference}\n style={style}\n variant={variant}\n {...rest}\n >\n <span\n className={classNames('eds-dropdown--searchable__selected-item', {\n 'eds-dropdown--searchable__selected-item--hidden': !showSelectedItem,\n })}\n aria-hidden=\"true\"\n onClick={() => {\n inputRef.current?.focus();\n openMenu();\n }}\n >\n {showSelectedItem ? selectedItem?.label : ''}\n </span>\n <input\n className={classNames('eds-dropdown__input eds-form-control', {\n 'eds-dropdown__input--hidden': showSelectedItem,\n })}\n disabled={readOnly || disabled}\n placeholder={selectedItem?.label ?? placeholder}\n {...getInputProps({\n onBlur: () => {\n if (selectedItem !== null) setShowSelectedItem(true);\n },\n onFocus: () => {\n setShowSelectedItem(false);\n },\n onKeyDown: e => {\n if (selectOnTab && isOpen && e.key === 'Tab')\n onChange?.(listItems[highlightedIndex]);\n },\n ref: inputRef,\n })}\n />\n <DropdownList\n ariaLabelChosenSingular={ariaLabelChosenSingular}\n ariaLabelSelectedItem={ariaLabelSelectedItem}\n floatingStyles={floatingStyles}\n getItemProps={getItemProps}\n getMenuProps={getMenuProps}\n highlightedIndex={highlightedIndex}\n isOpen={isOpen}\n listItems={listItems}\n style={listStyle}\n setListRef={refs.setFloating}\n loading={loading}\n loadingText={loadingText}\n noMatchesText={noMatchesText}\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n />\n </BaseFormControl>\n );\n};\n"],"names":["DropdownList","_ref","_listItems$","_ref$ariaLabelChosenS","ariaLabelChosenSingular","_ref$ariaLabelSelecte","ariaLabelSelectedItem","getItemProps","getMenuProps","isOpen","highlightedIndex","listItems","floatingStyles","setListRef","_ref$loading","loading","_ref$loadingText","loadingText","_ref$noMatchesText","noMatchesText","selectAllCheckboxState","selectAllItem","selectedItems","rest","_objectWithoutPropertiesLoose","_excluded","isMultiselect","undefined","isNoMatches","length","value","isItemSelected","item","some","selectedItem","label","ariaValuesSelectAll","selected","React","createElement","className","style","_extends","display","ref","map","index","_item$icons$map","_item$icons","itemIsSelectAll","classNames","key","icons","icon","_icon$displayName","displayName","name","toString","Fragment","Checkbox","checked","onChange","tabIndex","VisuallyHidden","Icon","_Icon$displayName","inline","listItemContent","SelectedItemTag","_getSelectedItemProps","ariaLabelRemoveSelected","_ref$ariaLabelChosen","ariaLabelChosen","disabled","getSelectedItemProps","readOnly","removeSelectedItem","selectedItemProps","TagChip","size","onClose","e","stopPropagation","closeButtonAriaLabel","FieldAppend","_ref3","_ref3$ariaHiddenToggl","ariaHiddenToggleButton","ariaLabelCloseList","ariaLabelOpenList","_ref3$clearable","clearable","_ref3$disabled","_ref3$focusable","focusable","getToggleButtonProps","_ref3$loading","_ref3$loadingText","ClearableButton","onClear","labelClearSelectedItems","LoadingDots","ToggleButton","_ref4","_ref4$labelClearSelec","_ref4$focusable","Tooltip","placement","content","IconButton","type","onClick","CloseSmallIcon","_ref5","_ref5$ariaHidden","ariaHidden","_ref5$ariaLabelCloseL","_ref5$ariaLabelOpenLi","_ref5$focusable","DownArrowIcon","useResolvedItems","itemsOrItemsResolver","debounceTimeout","itemsIsAFunction","_React$useState","useState","items","setItems","_React$useState2","setLoading","abortControllerRef","useRef","AbortController","itemsResolver","useMemo","Promise","resolve","updateItems","_regeneratorRuntime","mark","_callee","inputValue","_abortControllerRef$c","abortController","_abortControllerRef$c2","resolvedItems","wrap","_context","prev","next","current","abort","sent","signal","aborted","console","warn","abrupt","t0","stop","_x","apply","this","arguments","debouncedFetchItems","useDebounce","normalizedItems","useNormalizedItems","useEffect","_abortControllerRef$c3","fetchItems","EMPTY_INPUT","lowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","RegExp","test","noFilter","itemToString","itemToKey","isFunctionWithQueryArgument","object","getA11yStatusMessage","options","_options$selectAllIte","selectAllItemIncluded","resultCount","resultCountWithoutSelectAll","hidden","warnAboutMissingStyles","_selectedItem$label","_ref$clearable","_ref$disabled","disableLabelAnimation","feedback","initialItems","_ref$labelClearSelect","labelClearSelectedItem","labelTooltip","listStyle","placeholder","prepend","_ref$readOnly","_ref$selectOnBlur","selectOnBlur","_ref$selectOnTab","selectOnTab","_ref$variant","variant","_useResolvedItems","toggleButtonRef","isFilled","_useSelect","useSelect","defaultHighlightedIndex","onStateChange","_ref2","newSelectedItem","stateChangeTypes","ToggleButtonBlur","ToggleButtonKeyDownEnter","ToggleButtonKeyDownSpaceButton","ItemClick","openMenu","getLabelProps","_useFloating","useFloating","open","middleware","offset","space","extraSmall2","flip","refs","elements","update","reference","floating","autoUpdate","BaseFormControl","append","_toggleButtonRef$curr","focus","labelId","id","labelProps","target","currentTarget","setReference","onKeyDown","highlitedItem","setFloating","_ref$clearInputOnSele","clearInputOnSelect","_ref$hideSelectAll","hideSelectAll","_ref$itemFilter","itemFilter","_ref$labelAllItemsSel","labelAllItemsSelected","_ref$labelClearAllIte","labelClearAllItems","_ref$labelSelectAll","labelSelectAll","_ref$maxChips","maxChips","_ref$onChange","_ref$selectedItems","_ref$ariaLabelChosenP","ariaLabelChosenPlural","_ref$ariaLabelJumpToI","ariaLabelJumpToInput","_ref$ariaLabelRemoveS","lastHighlightedIndex","setLastHighlightedIndex","inputRef","isAllNonAsyncItemsSelected","selectAll","useRandomId","summarySelectedItems","_useState","concat","setListItems","filterListItems","filter","updateListItems","_useMultiselectUtils","hasSelectedItems","listItemsWithoutSelectAll","unselectedItemsInListItems","listItem","allListItemsAreSelected","someListItemsAreSelected","addClickedItemToSelectedItems","clickedItem","clickedItemIsInSelectedItems","clickedItemIsSelectAll","removeClickedItemFromSelectedItems","selectAllUnselectedItemsInListItems","unselectAllListItems","handleListItemClicked","useMultiselectUtils","_useMultipleSelection","useMultipleSelection","newSelectedItems","SelectedItemKeyDownBackspace","SelectedItemKeyDownDelete","DropdownKeyDownBackspace","FunctionRemoveSelectedItem","getDropdownProps","stateReducer","useCallback","_","changes","useCombobox","InputKeyDownEnter","_inputRef$current$val","_inputRef$current","ControlledPropUpdatedSelectedItem","_inputRef$current$val2","_inputRef$current2","InputChange","_changes$inputValue","leadingWhitespaceTest","isSpacePressedOnEmptyInput","match","setInputValue","InputBlur","_useCombobox","_ref6","getInputProps","handleOnClear","_inputRef$current3","_inputRef$current4","_inputRef$current5","_inputRef$current6","preventKeyAction","nativeDropdownId","event","_normalizedItems$find","find","_document","_ref$disableLabelAnim","showSelectedItem","setShowSelectedItem","_useState2","_useState3","inputHasFocus","document","activeElement","setHighlightedIndex","onBlur","onFocus"],"mappings":"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"}
|
package/dist/dropdown.esm.js
CHANGED
|
@@ -464,6 +464,7 @@ var DropdownList = function DropdownList(_ref) {
|
|
|
464
464
|
className: "eds-dropdown__list",
|
|
465
465
|
style: _extends({}, rest.style)
|
|
466
466
|
}), !loading && listItems.length > 0 && listItems.map(function (item, index) {
|
|
467
|
+
var _item$icons$map, _item$icons;
|
|
467
468
|
var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
|
|
468
469
|
if (itemIsSelectAll && listItems.length <= 2) return null;
|
|
469
470
|
return React.createElement("li", _extends({
|
|
@@ -472,7 +473,10 @@ var DropdownList = function DropdownList(_ref) {
|
|
|
472
473
|
'eds-dropdown__list__item--highlighted': highlightedIndex === index,
|
|
473
474
|
'eds-dropdown__list__item--selected': !isMultiselect && isItemSelected(item)
|
|
474
475
|
}),
|
|
475
|
-
key: (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value)
|
|
476
|
+
key: (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value) + ((_item$icons$map = item == null || (_item$icons = item.icons) == null ? void 0 : _item$icons.map(function (icon) {
|
|
477
|
+
var _icon$displayName;
|
|
478
|
+
return (_icon$displayName = icon.displayName) != null ? _icon$displayName : icon.name;
|
|
479
|
+
})) != null ? _item$icons$map : '').toString()
|
|
476
480
|
}, getItemProps({
|
|
477
481
|
// @ts-expect-error Since getItemProps expects the same item type
|
|
478
482
|
// here as items, it throws error when selectAllItem is a string.
|