@entur/dropdown 5.0.0-beta.0 → 5.0.0-beta.2
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/beta/MultiSelect.d.ts +11 -1
- package/dist/beta/components/FieldComponents.d.ts +3 -3
- package/dist/dropdown.cjs.development.js +87 -59
- 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 +87 -59
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +46 -7
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/DownshiftProvider.tsx","../src/DropdownList.tsx","../src/DropdownToggleButton.tsx","../src/DropdownLoadingDots.tsx","../src/BaseDropdown.tsx","../src/RegularDropdown.tsx","../src/SearchableDropdown.tsx","../src/DropdownInputGroup.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/beta/components/DropdownList.tsx","../src/beta/utils.ts","../src/beta/components/FieldComponents.tsx","../src/index.tsx","../src/beta/Dropdown.tsx","../src/beta/MultiSelect.tsx","../src/NativeDropdown.tsx","../src/beta/SearchableDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport Downshift, {\n ControllerStateAndHelpers,\n DownshiftState,\n StateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport classNames from 'classnames';\n\nconst DownshiftContext =\n React.createContext<ControllerStateAndHelpers<NormalizedDropdownItemType> | null>(\n null,\n );\n\nexport type DownshiftProviderProps = {\n onChange?: (\n selectedItem: NormalizedDropdownItemType,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => void;\n onInputValueChange?: (value: string) => void;\n inputValue?: string;\n initialSelectedItem?: NormalizedDropdownItemType;\n highlightFirstItemOnOpen?: boolean;\n className?: string;\n style?: React.CSSProperties;\n searchable?: boolean;\n [key: string]: any;\n};\nexport const DownshiftProvider: React.FC<DownshiftProviderProps> = ({\n children,\n onChange = () => undefined,\n onInputValueChange = () => undefined,\n highlightFirstItemOnOpen = false,\n className,\n style,\n searchable = false,\n ...rest\n}) => {\n const handleStateChange = (\n changes: any,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => {\n if (\n changes.type ===\n Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem\n ) {\n return;\n }\n if ('selectedItem' in changes) {\n onChange(changes.selectedItem, stateAndHelpers);\n } else if ('inputValue' in changes) {\n onInputValueChange(changes.inputValue);\n }\n };\n\n const stateReducer = (\n _: DownshiftState<NormalizedDropdownItemType>,\n changes: StateChangeOptions<NormalizedDropdownItemType>,\n ): Partial<StateChangeOptions<NormalizedDropdownItemType>> => {\n const highlightFirstOnOpen =\n highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;\n const highlightFirstItemIndex: Partial<\n StateChangeOptions<NormalizedDropdownItemType>\n > = highlightFirstOnOpen ? { highlightedIndex: 0 } : {};\n\n if (searchable) {\n const { type } = changes;\n\n switch (type) {\n case '__autocomplete_change_input__':\n return {\n // return normal changes.\n ...changes,\n ...highlightFirstItemIndex,\n };\n case '__autocomplete_click_item__':\n case '__autocomplete_keydown_enter__':\n case '__autocomplete_blur_input__':\n case '__autocomplete_mouseup__':\n return {\n ...changes,\n // if we had an item highlighted in the previous state.\n // we will reset input field value to blank\n inputValue: '',\n ...highlightFirstItemIndex,\n };\n default:\n return {\n ...changes,\n ...highlightFirstItemIndex,\n };\n }\n } else {\n return { ...changes, ...highlightFirstItemIndex };\n }\n };\n\n return (\n <Downshift\n itemToString={item => (item ? item.label : '')}\n onStateChange={handleStateChange}\n stateReducer={stateReducer}\n {...rest}\n >\n {args => (\n <div className={classNames('eds-input-group', className)} style={style}>\n {/* This div is required by Downshift */}\n <DownshiftContext.Provider value={args}>\n {children}\n </DownshiftContext.Provider>\n </div>\n )}\n </Downshift>\n );\n};\n\nexport const useDownshift: () => ControllerStateAndHelpers<NormalizedDropdownItemType> =\n () => {\n const context = React.useContext(DownshiftContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { CheckIcon } from '@entur/icons';\nimport './DropdownList.scss';\n\nexport type DropdownListProps = {\n items: NormalizedDropdownItemType[];\n [key: string]: any;\n};\n\nexport const DropdownList: React.FC<DropdownListProps> = ({\n items,\n ...rest\n}) => {\n const { highlightedIndex, isOpen, selectedItem, getItemProps, getMenuProps } =\n useDownshift();\n\n return (\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps()}\n {...rest}\n >\n {isOpen\n ? items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': selectedItem === item,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem === item && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useDownshift } from './DownshiftProvider';\nimport './DropdownToggleButton.scss';\n\nexport const DropdownToggleButton: () => JSX.Element = () => {\n const { getToggleButtonProps, isOpen } = useDownshift();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n })}\n tabIndex=\"-1\"\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { VisuallyHidden } from '@entur/a11y';\nimport { LoadingDots } from '@entur/loader';\nimport './InlineSpinner.scss';\n\nexport type InlineSpinnerType = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjermlesere */\n children: string;\n [key: string]: any;\n};\nexport const DropdownLoadingDots: React.FC<InlineSpinnerType> = ({\n className,\n children,\n ...rest\n}) => (\n <div className={classNames('eds-inline-spinner', className)} {...rest}>\n <LoadingDots />\n <VisuallyHidden>{children}</VisuallyHidden>\n </div>\n);\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { DropdownList } from './DropdownList';\nimport { DropdownToggleButton } from './DropdownToggleButton';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { CloseSmallIcon } from '@entur/icons';\nimport './BaseDropdown.scss';\nimport { useDownshift } from './DownshiftProvider';\nimport { space } from '@entur/tokens';\n\ntype BaseDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n style?: { [key: string]: any };\n listStyle?: { [key: string]: any };\n isFilled?: boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\nexport const BaseDropdown: React.FC<BaseDropdownProps> = ({\n children,\n className,\n items,\n loading = false,\n loadingText = 'Loading...',\n //eslint-disable-next-line\n placeholder,\n style,\n listStyle,\n clearable,\n label,\n isFilled = false,\n disableLabelAnimation,\n ...rest\n}) => {\n const { getLabelProps } = useDownshift();\n return (\n <div className=\"eds-dropdown-wrapper\" style={style}>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <BaseFormControl\n append={\n <Appendix\n clearable={clearable}\n loading={loading}\n loadingText={loadingText}\n readOnly={...rest.readOnly}\n />\n }\n className={className}\n label={label}\n isFilled={isFilled}\n labelProps={getLabelProps()}\n disableLabelAnimation={disableLabelAnimation}\n {...rest}\n >\n {children}\n </BaseFormControl>\n <DropdownList\n items={items}\n style={{\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n }}\n {...rest}\n />\n </div>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { clearSelection, selectedItem } = useDownshift();\n return (\n <>\n {selectedItem && (\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => clearSelection()}\n aria-label=\"Trykk for å fjerne valg\"\n {...props}\n >\n <CloseSmallIcon />\n </button>\n )}\n {selectedItem && <div className=\"eds-dropdown__divider\"></div>}\n </>\n );\n};\n\nconst Appendix: React.FC<{\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n}> = ({ clearable, loading, loadingText, readOnly }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return clearable ? (\n <>\n <ClearButton></ClearButton> <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { BaseDropdown } from './BaseDropdown';\n\ntype RegularDropdownProps = {\n items: NormalizedDropdownItemType[];\n disabled?: boolean;\n placeholder?: string;\n loading?: boolean;\n loadingText?: string;\n className?: string;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n disableLabelAnimation?: boolean;\n clearable?: boolean;\n [key: string]: any;\n};\nexport const RegularDropdown: React.FC<RegularDropdownProps> = React.forwardRef<\n HTMLButtonElement,\n RegularDropdownProps\n>(\n (\n {\n disabled,\n placeholder = 'Vennligst velg',\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n items,\n label,\n disableLabelAnimation,\n loading,\n loadingText,\n className,\n clearable,\n ...rest\n },\n ref,\n ) => {\n const {\n getToggleButtonProps,\n selectedItem,\n selectHighlightedItem,\n openMenu,\n isOpen,\n highlightedIndex,\n setHighlightedIndex,\n } = useDownshift();\n return (\n <BaseDropdown\n disabled={disabled}\n listStyle={listStyle}\n items={items}\n label={label}\n isFilled={selectedItem ? true : placeholder.length !== 0}\n disableLabelAnimation={disableLabelAnimation}\n loading={loading}\n loadingText={loadingText}\n className={className}\n clearable={clearable}\n {...rest}\n >\n <button\n {...getToggleButtonProps({\n className: 'eds-form-control eds-dropdown__selected-item',\n style: { textAlign: 'left' },\n disabled,\n type: 'button',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n\n if (isOpen) {\n const keyDownValue = e.key;\n const matchedItems = items\n .map((item, index) => ({ ...item, index }))\n .filter(item => {\n const firstCharacter = item.label\n .trim()\n .charAt(0)\n .toLowerCase();\n return firstCharacter === keyDownValue;\n });\n\n const nextHighlightItem = matchedItems.find(\n item => item.index > (highlightedIndex ?? 0),\n );\n\n if (nextHighlightItem) {\n setHighlightedIndex(nextHighlightItem.index);\n } else if (matchedItems.length > 0) {\n setHighlightedIndex(matchedItems[0].index);\n }\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n ref={ref}\n >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n },\n);\n","import React, { useRef, useState } from 'react';\nimport { mergeRefs } from '@entur/utils';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\nimport './SearchableDropdown.scss';\n\ntype SearchableDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n prepend?: React.ReactNode;\n readOnly?: boolean;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n clearable: boolean;\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nfunction LowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | null,\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 const SearchableDropdown: React.FC<SearchableDropdownProps> =\n React.forwardRef<HTMLInputElement, SearchableDropdownProps>(\n (\n {\n disabled = false,\n className,\n items,\n loading,\n loadingText,\n readOnly = false,\n prepend,\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n clearable,\n itemFilter = (\n item: NormalizedDropdownItemType,\n inputValue: string | null,\n ) => LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n placeholder,\n ...rest\n },\n ref,\n ) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n closeMenu,\n selectedItem,\n } = useDownshift();\n\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const filteredItems = React.useMemo(() => {\n return items.filter(item => itemFilter(item, inputValue));\n }, [inputValue, items, itemFilter]);\n\n return (\n <BaseDropdown\n items={filteredItems}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n loading={loading}\n loadingText={loadingText}\n prepend={prepend}\n listStyle={listStyle}\n clearable={clearable}\n label={label}\n isFilled={selectedItem ? true : false}\n disableLabelAnimation={disableLabelAnimation}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__searchable-selected-item__wrapper\">\n <span\n className=\"eds-dropdown__searchable-selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') selectHighlightedItem();\n },\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n placeholder: selectedItem ? selectedItem.label : placeholder,\n ...rest,\n })}\n onBlur={() => {\n setHideSelectedItem(false);\n closeMenu();\n }}\n ref={mergeRefs<HTMLInputElement>(ref, inputRef)}\n />\n </BaseDropdown>\n );\n },\n );\n","import { FeedbackText, VariantProvider, VariantType } from '@entur/form';\nimport React from 'react';\n\nexport type DropdownInputGroupProps = {\n feedback?: string;\n variant?: VariantType;\n className?: string;\n style?: { [key: string]: any };\n};\nexport const DropdownInputGroup: React.FC<DropdownInputGroupProps> = ({\n children,\n feedback,\n variant,\n className,\n style,\n}) => {\n return (\n <VariantProvider variant={variant}>\n <div className={className} style={style}>\n {children}\n {feedback && variant && (\n <FeedbackText variant={variant}>{feedback}</FeedbackText>\n )}\n </div>\n </VariantProvider>\n );\n};\n","import React from 'react';\nimport { debounce } from '@entur/utils';\nimport {\n DropdownItemType,\n NormalizedDropdownItemType,\n useNormalizedItems,\n} from './useNormalizedItems';\n\nconst useIsMounted = () => {\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n return isMountedRef.current;\n};\n\ntype AsyncDropdownItemType = (inputType: string) => Promise<DropdownItemType[]>;\ntype SyncDropdownItemType = (inputType: string) => DropdownItemType[];\nexport type PotentiallyAsyncDropdownItemType =\n | DropdownItemType[]\n | SyncDropdownItemType\n | AsyncDropdownItemType;\n\ntype ResolverState = {\n items: DropdownItemType[];\n loading: boolean;\n};\n\ntype ResolverAction =\n | {\n type: 'request results';\n }\n | {\n type: 'received results';\n payload: DropdownItemType[];\n };\n\nconst reducer = (_state: ResolverState, action: ResolverAction) => {\n switch (action.type) {\n case 'request results':\n return { items: [], loading: true };\n case 'received results':\n return { items: action.payload, loading: false };\n }\n};\n\nexport const useResolvedItems = (\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (arg: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType[];\n} => {\n const isItemsFunction = typeof itemsOrItemsResolver === 'function';\n\n // Here, 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 () =>\n isItemsFunction\n ? (itemsOrItemsResolver as AsyncDropdownItemType)\n : () => Promise.resolve(itemsOrItemsResolver as DropdownItemType[]),\n [itemsOrItemsResolver, isItemsFunction],\n );\n\n const [{ items, loading }, dispatch] = React.useReducer(reducer, {\n items: isItemsFunction ? [] : (itemsOrItemsResolver as DropdownItemType[]),\n loading: false,\n });\n\n // This is a way to check whether or not the dropdown is still in the\n // document. We use it below to make sure we're not updating the state of\n // an unmounted component.\n const isMounted = useIsMounted();\n\n // Next, let's create the fetching function. This should be called whenever\n // the input value changes\n const fetchItems = React.useCallback(\n async (inputValue: string) => {\n if (!isMounted) {\n return;\n }\n dispatch({ type: 'request results' });\n const resolvedItems = await itemsResolver(inputValue);\n if (isMounted) {\n dispatch({ type: 'received results', payload: resolvedItems });\n }\n },\n [itemsResolver, isMounted],\n );\n\n const normalizedItems = useNormalizedItems(items);\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (isItemsFunction) {\n fetchItems('');\n }\n }, [isItemsFunction]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n items: normalizedItems,\n loading: isItemsFunction ? loading : false,\n fetchItems: debounce(fetchItems, debounceTimeout),\n };\n};\n","import React from 'react';\n\n/** A dropdown item has a string label and a string value */\nexport type NormalizedDropdownItemType = {\n value: string;\n label: string;\n icons?: React.ComponentType<any>[];\n};\n\nexport type DropdownItemType =\n | { value?: string; label: string; icons?: React.ComponentType<any>[] }\n | string;\nexport const useNormalizedItems = (\n items: DropdownItemType[],\n): NormalizedDropdownItemType[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return { value: item, label: item };\n }\n\n if (!('value' in item)) {\n return { ...item, value: item.label };\n }\n return item as NormalizedDropdownItemType;\n }),\n [items],\n );\n","import React from 'react';\nimport { VariantType } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { RegularDropdown } from './RegularDropdown';\nimport { DownshiftProvider } from './DownshiftProvider';\nimport { SearchableDropdown } from './SearchableDropdown';\nimport { DropdownInputGroup } from './DropdownInputGroup';\nimport {\n useResolvedItems,\n PotentiallyAsyncDropdownItemType,\n} from './useResolvedItems';\n\nexport type DropdownProps = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i dropdownen */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n value?: string | null;\n /** Om man skal kunne søke i dropdownen eller ikke */\n searchable?: boolean;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tæbbe\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\nexport const Dropdown: React.FC<DropdownProps> = React.forwardRef<\n HTMLInputElement | HTMLButtonElement,\n DropdownProps\n>(\n (\n {\n highlightFirstItemOnOpen,\n debounceTimeout,\n disabled,\n feedback,\n items,\n label,\n loadingText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly,\n searchable,\n selectOnTab,\n openOnFocus,\n variant,\n value,\n clearable = false,\n className,\n style,\n listStyle,\n itemFilter,\n disableLabelAnimation,\n ...rest\n },\n ref,\n ) => {\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(items, debounceTimeout);\n\n const selectedItem =\n value === undefined\n ? undefined\n : normalizedItems.find(item => value === item.value) || null;\n\n const RenderedDropdown = searchable ? SearchableDropdown : RegularDropdown;\n const searchAbleProps = searchable\n ? { itemFilter: itemFilter, name: rest.name, 'data-cy': rest['data-cy'] }\n : { name: rest.name, 'data-cy': rest['data-cy'] };\n return (\n <DownshiftProvider\n selectedItem={selectedItem}\n onInputValueChange={fetchItems}\n onChange={onChange}\n value={value}\n highlightFirstItemOnOpen={highlightFirstItemOnOpen}\n className={className}\n style={style}\n searchable={searchable}\n {...rest}\n >\n <DropdownInputGroup feedback={feedback} variant={variant}>\n <RenderedDropdown\n label={label}\n items={normalizedItems}\n loading={loading}\n loadingText={loadingText}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n prepend={prepend}\n selectOnTab={selectOnTab}\n openOnFocus={openOnFocus}\n listStyle={listStyle}\n clearable={clearable}\n disableLabelAnimation={disableLabelAnimation}\n ref={ref}\n {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n },\n);\n","import React, { useState } from 'react';\nimport {\n useSelect,\n UseSelectProps,\n // StateChangeOptions,\n // UseSelectStateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { useRandomId } from '@entur/utils';\nimport classNames from 'classnames';\nimport { CloseIcon, DownArrowIcon } from '@entur/icons';\nimport { space } from '@entur/tokens';\nimport './MultiSelect.scss';\nimport './DropdownList.scss';\n\nconst MultiSelectContext = React.createContext<{\n isOpen: boolean;\n reset: () => void;\n getToggleButtonProps: any;\n openMenu: () => void;\n openOnFocus?: boolean;\n} | null>(null);\nconst useMultiSelectContext = () => {\n const context = React.useContext(MultiSelectContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n};\n\nfunction stateReducer(\n state: any, //StateChangeOptions<NormalizedDropdownItemType>,\n actionAndChanges: any, //UseSelectStateChangeOptions<NormalizedDropdownItemType>,\n) {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.MenuKeyDownEnter:\n case useSelect.stateChangeTypes.MenuKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep menu open after selection.\n highlightedIndex: state.highlightedIndex,\n };\n default:\n return changes;\n }\n}\ntype MultiSelectProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Tekst som vises i boksen når elementer er valgt */\n itemsSelectedLabel?: (\n selectedItems: NormalizedDropdownItemType[],\n numberOfItems?: number,\n ) => string;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (e: any) => void;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n initialSelectedItems?: NormalizedDropdownItemType[];\n} & Omit<\n UseSelectProps<NormalizedDropdownItemType>,\n 'initialSelectedItem' | 'items'\n>;\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n className,\n clearable = false,\n debounceTimeout,\n disabled,\n feedback,\n initialSelectedItems = [],\n items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n listStyle,\n loading = false,\n loadingText = '',\n onChange = () => undefined,\n openOnFocus = false,\n readOnly = false,\n style,\n variant,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] =\n useState<NormalizedDropdownItemType[]>(initialSelectedItems);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\n }, []);\n\n function isSelected(selectedCheckboxItem: NormalizedDropdownItemType) {\n return selectedItems.some(\n selected => selected.value === selectedCheckboxItem.value,\n );\n }\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n openMenu,\n } = useSelect<NormalizedDropdownItemType>({\n items,\n stateReducer,\n selectedItem: null,\n onSelectedItemChange: ({ selectedItem }) => {\n if (!selectedItem) {\n return;\n }\n const itemIsFound = isSelected(selectedItem);\n if (itemIsFound) {\n const slicedItemList = selectedItems.filter(\n item => item.value !== selectedItem.value,\n );\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else {\n const slicedItemList = [...selectedItems, selectedItem];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n }\n },\n ...rest,\n });\n const buttonText = selectedItems.length\n ? itemsSelectedLabel(selectedItems)\n : '';\n const multiSelectId = useRandomId('eds-multiselect');\n\n return (\n <MultiSelectContext.Provider\n value={{ isOpen, reset, getToggleButtonProps, openMenu, openOnFocus }}\n >\n <div\n className={classNames(\n 'eds-multiselect',\n 'eds-dropdown-wrapper',\n className,\n )}\n style={style}\n >\n <BaseFormControl\n label={label}\n labelId={multiSelectId}\n labelProps={...getLabelProps()}\n feedback={feedback}\n variant={variant}\n isFilled={selectedItems.length > 0 || isOpen}\n disabled={disabled}\n readOnly={readOnly}\n append={\n <Appendix\n hasSelected={clearable && selectedItems.length > 0}\n loading={loading}\n loadingText={loadingText}\n readOnly={readOnly}\n />\n }\n >\n <button\n {...getToggleButtonProps({\n style: {\n textAlign: 'left',\n },\n type: 'button',\n className: 'eds-form-control eds-multiselect__button',\n })}\n >\n {buttonText}\n </button>\n </BaseFormControl>\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps({\n style: {\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n },\n })}\n >\n {isOpen &&\n items.map((item, index) => (\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': isSelected(item),\n })}\n key={`${item.value}${index}`}\n {...getItemProps({\n item,\n index,\n })}\n style={{ display: 'flex' }}\n >\n <span style={{ display: 'flex' }}>\n <span\n className={classNames('eds-multiselect-checkbox', {\n 'eds-multiselect-checkbox--checked': isSelected(item),\n })}\n >\n <CheckboxIcon />\n </span>\n <span className=\"eds-multiselect__item-label\">\n {item.label}\n </span>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n </MultiSelectContext.Provider>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { reset } = useMultiSelectContext();\n return (\n <>\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => reset()}\n {...props}\n >\n <CloseIcon />\n </button>\n <div className=\"eds-dropdown__divider\"></div>\n </>\n );\n};\n\nconst Appendix: React.FC<{\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n hasSelected: boolean;\n}> = ({ loading, loadingText, readOnly, hasSelected }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return hasSelected ? (\n <>\n <ClearButton></ClearButton>\n <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n\nconst DropdownToggleButton = () => {\n const { getToggleButtonProps, isOpen, openMenu, openOnFocus } =\n useMultiSelectContext();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n onFocus: () => {\n if (openOnFocus) {\n openMenu();\n }\n },\n })}\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n\nconst CheckboxIcon: React.FC = () => {\n return (\n <svg\n className=\"eds-checkbox-icon\"\n width=\"11px\"\n height=\"9px\"\n viewBox=\"6 11 37 33\"\n >\n <path\n className=\"eds-checkbox-icon__path\"\n d=\"M14.1 27.2l7.1 7.2 14.6-14.8\"\n fill=\"none\"\n />\n </svg>\n );\n};\n\nfunction SelectedItemsLabel(items: NormalizedDropdownItemType[]) {\n return items.length < 3\n ? items.map(item => item.label).toString()\n : `${items.length} elementer valgt`;\n}\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetMenuPropsOptions,\n GetPropsCommonOptions,\n UseComboboxGetItemPropsOptions,\n} from 'downshift';\n\nimport { Checkbox } from '@entur/form';\nimport { VisuallyHidden } from '@entur/a11y';\n\nimport { NormalizedDropdownItemType } from '../../useNormalizedItems';\n\nimport './DropdownList.scss';\n\ntype DropdownListProps = {\n selectedItems: NormalizedDropdownItemType[];\n isOpen: boolean;\n listItems: NormalizedDropdownItemType[];\n highlightedIndex: number;\n listStyle: { [key: string]: any } | undefined;\n getMenuProps: (\n options?: UseComboboxGetMenuPropsOptions | undefined,\n otherOptions?: GetPropsCommonOptions | undefined,\n ) => any;\n getItemProps: (\n options: UseComboboxGetItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n selectAllCheckboxState?: () => boolean | 'indeterminate';\n noMatchesText?: string;\n loadingText?: string;\n selectedItemAriaLabel?: string;\n loading?: boolean;\n selectAllItem?: NormalizedDropdownItemType;\n [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItems,\n listItems,\n inputValue,\n isOpen,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n showSelectAllInList = false,\n loading = false,\n selectAllCheckboxState,\n selectAllItem,\n listStyle,\n noMatchesText = 'Ingen treff for søket',\n loadingText = 'Laster inn …',\n selectedItemAriaLabel = ', valgt element',\n ...rest\n}: DropdownListProps) => {\n const isMultiselect = selectAllItem !== undefined;\n const isNoMatches =\n !loading &&\n (listItems.length === 0 ||\n (listItems.length === 1 && listItems[0].value === selectAllItem?.value));\n const itemIsSelected = (item: NormalizedDropdownItemType) =>\n selectedItems.some(selectedItem => selectedItem.value === item.value);\n\n const selectAllListItemContent = () => (\n <>\n <Checkbox\n checked={selectAllCheckboxState?.()}\n aria-hidden=\"true\"\n onChange={() => {\n return;\n }}\n />\n <span className=\"eds-dropdown__list__item-text\">\n {selectAllItem?.label}\n </span>\n </>\n );\n\n const listItemContent = (item: NormalizedDropdownItemType) => {\n return (\n <>\n <Checkbox\n style={!isMultiselect ? { display: 'none' } : {}}\n checked={itemIsSelected(item)}\n aria-hidden=\"true\"\n onChange={() => {\n return;\n }}\n />\n\n <span className=\"eds-dropdown__list__item-text\">\n {item.label}\n <VisuallyHidden>{selectedItemAriaLabel}</VisuallyHidden>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown__list__item-icon\"\n />\n ))}\n </span>\n )}\n </>\n );\n };\n\n return (\n <ul\n {...getMenuProps()}\n className={classNames('eds-dropdown__list', {\n 'eds-dropdown__list--open': isOpen,\n })}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen &&\n listItems.length > 0 &&\n listItems.map((item, index) => {\n const itemIsSelectAll = item.value === selectAllItem?.value;\n if (itemIsSelectAll && listItems.length <= 2) return <></>;\n\n return (\n <li\n key={item.value}\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 && itemIsSelected(item),\n })}\n {...getItemProps({\n key: `${index}${item.value}`,\n item,\n index,\n })}\n >\n {itemIsSelectAll\n ? selectAllListItemContent()\n : listItemContent(item)}\n </li>\n );\n })}\n\n {isOpen && isNoMatches && (\n <li className=\"eds-dropdown__list__item\">{noMatchesText}</li>\n )}\n\n {isOpen && loading && (\n <li className=\"eds-dropdown__list__item\">{loadingText}</li>\n )}\n </ul>\n );\n};\n","import { NormalizedDropdownItemType } from '../useNormalizedItems';\n\nexport function lowerCaseFilterTest(\n item: NormalizedDropdownItemType,\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 const itemToString = (item: NormalizedDropdownItemType | null) =>\n item ? item.label : '';\n\ntype useMultiselectUtilsType = {\n selectedItems: NormalizedDropdownItemType[];\n listItems: NormalizedDropdownItemType[];\n selectAllValue: string;\n};\n\nexport const useMultiselectUtils = ({\n listItems,\n selectedItems,\n selectAllValue,\n}: useMultiselectUtilsType) => {\n const hasSelectedItems = selectedItems.length > 0;\n\n const listItemsWithoutSelectAll = listItems.filter(\n item => item.value !== selectAllValue,\n );\n\n const allListItemsAreSelected =\n listItemsWithoutSelectAll.filter(item => !selectedItems.includes(item))\n .length === 0;\n\n const someListItemsAreSelected = listItemsWithoutSelectAll.some(item =>\n selectedItems.includes(item),\n );\n\n const addClickedItemToSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n onChange: (value: NormalizedDropdownItemType[]) => void,\n ) => onChange([...selectedItems, clickedItem]);\n\n const clickedItemIsInSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n ) =>\n selectedItems.some(\n selectedItem => selectedItem.value === clickedItem.value,\n );\n\n const clickedItemIsSelectAll = (clickedItem: NormalizedDropdownItemType) =>\n clickedItem.value === selectAllValue;\n\n const removeClickedItemFromSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n onChange: (value: NormalizedDropdownItemType[]) => 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[]) => void,\n ) => {\n onChange([\n ...selectedItems,\n ...listItemsWithoutSelectAll.filter(\n item => !selectedItems.includes(item),\n ),\n ]);\n };\n\n const unselectAllListItems = (\n onChange: (value: NormalizedDropdownItemType[]) => void,\n ) => {\n onChange(\n selectedItems.filter(item => !listItemsWithoutSelectAll.includes(item)),\n );\n };\n\n return {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n hasSelectedItems,\n listItemsWithoutSelectAll,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n someListItemsAreSelected,\n unselectAllListItems,\n };\n};\n","import { IconButton } from '@entur/button';\nimport { TagChip } from '@entur/chip';\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { Tooltip } from '@entur/tooltip';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetToggleButtonPropsOptions,\n UseMultipleSelectionGetSelectedItemPropsOptions,\n} from 'downshift';\nimport { DropdownLoadingDots } from '../../DropdownLoadingDots';\nimport { NormalizedDropdownItemType } from '../../useNormalizedItems';\nimport React from 'react';\n\nimport './FieldComponents.scss';\n\nexport const SelectedElementsTag = ({\n getSelectedItemProps,\n removeSelectedItem,\n selectedItem,\n index,\n ariaLabelRemoveSelected,\n}: {\n getSelectedItemProps: (\n options: UseMultipleSelectionGetSelectedItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n removeSelectedItem: (item: NormalizedDropdownItemType) => void;\n selectedItem: NormalizedDropdownItemType;\n index: number;\n ariaLabelRemoveSelected: string;\n}) => {\n const { tabIndex: _, ...selectedItemProps } = getSelectedItemProps({\n selectedItem,\n index,\n });\n return (\n <TagChip\n className={classNames('eds-dropdown__selected-element-tag')}\n {...selectedItemProps}\n onClose={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n removeSelectedItem(selectedItem);\n }}\n closeButtonAriaLabel={`${selectedItem.label}, ${ariaLabelRemoveSelected} `}\n key={selectedItem.value}\n >\n <span aria-hidden=\"true\">{selectedItem.label}</span>\n </TagChip>\n );\n};\n\nexport const FieldAppend: React.FC<{\n selectedItems: (NormalizedDropdownItemType | null)[];\n isOpen: boolean;\n clearable: boolean;\n loading?: boolean;\n loadingText?: string;\n ariaLabelClearItems?: string;\n clearSelectedItemsLabel?: string;\n readOnly: boolean;\n focusable?: boolean;\n onClear: () => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItems,\n loading = false,\n loadingText = 'Laster resultater …',\n ariaLabelClearItems,\n clearSelectedItemsLabel,\n isOpen,\n onClear,\n focusable = false,\n}) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\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={focusable}\n clearSelectedItemsLabel={clearSelectedItemsLabel}\n ariaLabelClearItems={ariaLabelClearItems}\n />\n <div className=\"eds-dropdown-appendix__divider\" />\n </>\n )}\n <ToggleButton\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n focusable={focusable}\n />\n </div>\n );\n};\n\nconst ClearableButton = ({\n onClear,\n clearSelectedItemsLabel = 'Fjern valgte',\n ariaLabelClearItems = 'Fjern valgte',\n focusable = false,\n}: {\n onClear: () => void;\n clearSelectedItemsLabel?: string;\n focusable?: boolean;\n ariaLabelClearItems?: string;\n}) => {\n return (\n <Tooltip\n aria-hidden=\"true\"\n placement=\"right\"\n content={clearSelectedItemsLabel}\n >\n <IconButton\n className=\"eds-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={focusable ? 0 : 1}\n onClick={onClear}\n aria-label={ariaLabelClearItems}\n >\n <CloseSmallIcon aria-hidden=\"true\" />\n </IconButton>\n </Tooltip>\n );\n};\n\nconst ToggleButton = ({\n getToggleButtonProps,\n isOpen,\n closeAriaLabel = 'Lukk liste med valg',\n openAriaLabel = 'Åpne liste med valg',\n focusable = false,\n}: {\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n closeAriaLabel?: string;\n openAriaLabel?: 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 })}\n aria-label={isOpen ? closeAriaLabel : openAriaLabel}\n tabIndex={focusable ? 0 : 1}\n type=\"button\"\n >\n <DownArrowIcon aria-hidden=\"true\" />\n </IconButton>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './MultiSelect';\nexport * from './MultiSelect';\nexport * from './beta';\n","/* eslint-disable no-warning-comments */\nimport React from 'react';\nimport { useSelect } from 'downshift';\nimport classNames from 'classnames';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { DropdownList } from './components/DropdownList';\n\nimport { itemToString } from './utils';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport './Dropdown.scss';\n\nexport type DropdownBetaProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Setter dropdown-en i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\n\nexport const DropdownBeta = ({\n className,\n clearable = false,\n debounceTimeout,\n // disabled,\n // disableLabelAnimation,\n feedback,\n items: initialItems,\n label,\n listStyle,\n // loadingText,\n onChange,\n openOnFocus = false,\n placeholder,\n // prepend,\n readonly = false,\n // searchable,\n selectedItem,\n selectOnBlur = false,\n selectOnTab = false,\n // value,\n variant = 'info',\n ...rest\n}: DropdownBetaProps) => {\n const { items: normalizedItems, loading } = useResolvedItems(\n initialItems,\n debounceTimeout,\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n } = useSelect({\n items: normalizedItems,\n selectedItem,\n onStateChange({ type, selectedItem: clickedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useSelect.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useSelect.stateChangeTypes.MenuKeyDownEnter: // eslint-disable-line no-fallthrough\n case useSelect.stateChangeTypes.ItemClick:\n onChange?.(clickedItem !== undefined ? clickedItem : null);\n }\n },\n itemToString,\n });\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={[selectedItem]}\n isOpen={isOpen}\n clearable={true}\n loading={loading}\n loadingText={''}\n readOnly={readonly}\n onClear={() => {\n onChange?.(null);\n }}\n getToggleButtonProps={getToggleButtonProps}\n clearSelectedItemsLabel=\"Fjern valgt\"\n ariaLabelClearItems={`${selectedItem?.label} valgt, trykk for å fjerne valget`}\n focusable\n />\n }\n className={classNames('eds-dropdown', className, {\n 'eds-dropdown--not-filled': selectedItem === null,\n })}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n disableLabelAnimation\n isFilled={selectedItem !== null}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n {...rest}\n >\n <div\n className=\"eds-dropdown__selected-item-button\"\n {...getToggleButtonProps()}\n >\n {selectedItem?.label ?? ''}\n </div>\n </BaseFormControl>\n <DropdownList\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n isOpen={isOpen}\n listItems={normalizedItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n loading={loading}\n />\n </div>\n );\n};\n","import React, { useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n useMultipleSelection,\n useCombobox,\n UseComboboxStateChangeOptions,\n} from 'downshift';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { useRandomId } from '@entur/utils';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { FieldAppend, SelectedElementsTag } from './components/FieldComponents';\nimport { DropdownList } from './components/DropdownList';\nimport {\n itemToString,\n lowerCaseFilterTest,\n useMultiselectUtils,\n} from './utils';\n\nimport './Dropdown.scss';\n\nexport type MultiSelectBetaProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Elementer som er valgt blant 'items'.\n * Denne skal oppdateres av onChange.\n */\n selectedItems: NormalizedDropdownItemType[];\n /** Callback med alle valgte verdier.\n * Bruk denne til å oppdatere selectedItems-listen */\n onChange: (selectedItems: NormalizedDropdownItemType[]) => void;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Om dropdown-en er deaktivert */\n disabled?: boolean;\n /** Om dropdown-en er i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Skjuler «Velg alle» fra listen med valg\n * @default false\n */\n hideSelectAll?: boolean;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Velg alle\"\n */\n selectAllLabel?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjemleser på knapper for å fjerne valgt element\n * @default \"trykk for å fjerne valg\"\n */\n ariaLabelRemoveSelected?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Om en knapp for å fjerne alle valg skal vises\n * @default false\n */\n clearable?: boolean;\n selectOnBlur?: boolean;\n readonly?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n};\n\nexport const MultiSelectBeta = ({\n ariaLabelRemoveSelected = 'trykk for å fjerne valg',\n className,\n clearable = false,\n debounceTimeout,\n feedback,\n hideSelectAll = false,\n items: initialItems,\n label,\n listStyle,\n onChange,\n openOnFocus = false,\n placeholder,\n readonly = false,\n selectAllLabel = 'Velg alle',\n selectedItems,\n selectOnBlur = false,\n style,\n variant = 'info',\n ...rest\n}: MultiSelectBetaProps) => {\n const [lastHighlightedIndex, setLastHighlightedIndex] = React.useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems);\n\n const selectAll: NormalizedDropdownItemType = {\n value: useRandomId('select-all'),\n label: selectAllLabel,\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 => lowerCaseFilterTest(item, inputValue)),\n ]);\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n const {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n hasSelectedItems,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n unselectAllListItems,\n } = useMultiselectUtils({\n listItems,\n selectAllValue: selectAll.value,\n selectedItems,\n });\n\n const { getSelectedItemProps, getDropdownProps, removeSelectedItem } =\n useMultipleSelection({\n selectedItems,\n itemToString,\n onSelectedItemsChange(changes) {\n onChange(changes.selectedItems ?? []);\n },\n });\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n changes,\n type,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType>,\n ) => {\n if (changes?.highlightedIndex && changes?.highlightedIndex >= 0)\n setLastHighlightedIndex(changes?.highlightedIndex);\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep the menu open after selection.\n inputValue: inputRef?.current?.value ?? '', // don't reset input value on select\n };\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n inputValue: inputRef?.current?.value ?? '', // don't reset input value on select\n };\n case useCombobox.stateChangeTypes.InputChange:\n if (changes.inputValue?.match(/^\\s+/g)) {\n // remove leading whitespace if it exists\n return {\n ...changes,\n inputValue: changes.inputValue.replace(/^\\s+/g, '') ?? '',\n };\n }\n\n if (typeof initialItems === 'function')\n fetchItems(changes.inputValue ?? ''); // fetch items only if user provides a function as items\n\n filterListItems({ inputValue: changes.inputValue ?? '' });\n return changes;\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n inputValue: '',\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 getComboboxProps,\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 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 ...rest,\n });\n\n // role=combobox leads to strange VoiceOver behavior and is therefor omitted\n // const { role: _, ...comboboxProps } = getComboboxProps();\n const { ...comboboxProps } = getComboboxProps();\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={selectedItems}\n isOpen={isOpen}\n clearable={clearable}\n loading={loading}\n loadingText={''}\n readOnly={readonly}\n onClear={() => {\n onChange([]);\n setInputValue('');\n inputRef.current?.focus();\n if (typeof initialItems === 'function')\n fetchItems(inputValue ?? '');\n }}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-dropdown', className)}\n label={label}\n isFilled={hasSelectedItems || inputValue !== ''}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n style={style}\n labelProps={{\n 'aria-label': `${label}, multiselect, ${selectedItems.length} valgte elementer`,\n ...getLabelProps(),\n }}\n {...comboboxProps}\n {...rest}\n >\n <div\n className={classNames('eds-dropdown__selected-items-and-input', {\n 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems,\n })}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n >\n {selectedItems.map((selectedItem, index) => (\n <SelectedElementsTag\n index={index}\n key={selectedItem.value}\n getSelectedItemProps={getSelectedItemProps}\n selectedItem={selectedItem}\n removeSelectedItem={removeSelectedItem}\n ariaLabelRemoveSelected={ariaLabelRemoveSelected}\n />\n ))}\n <input\n placeholder={placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n role=\"combobox\" // eslint-disable-line jsx-a11y/role-has-required-aria-props\n {...getInputProps(\n getDropdownProps({\n preventKeyAction: isOpen,\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n },\n ref: inputRef,\n value: inputValue ?? '',\n }),\n )}\n />\n </div>\n </BaseFormControl>\n <DropdownList\n listItems={listItems}\n selectedItems={selectedItems}\n inputValue={inputValue}\n isOpen={isOpen}\n highlightedIndex={highlightedIndex}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n selectAllItem={selectAll}\n selectAllCheckboxState={selectAllCheckboxState}\n listStyle={listStyle}\n loading={loading}\n />\n </div>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = (\n <DownArrowIcon inline={true} aria-hidden=\"true\" />\n );\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = (\n <DropdownLoadingDots aria-hidden=\"true\">\n {loadingText}\n </DropdownLoadingDots>\n );\n }\n const nativeDropdownId = useRandomId('eds-native-dropdown');\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={rightSideIcon}\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 === 'error'}\n aria-labelledby={nativeDropdownId}\n aria-busy={loading}\n className=\"eds-form-control eds-dropdown\"\n disabled={disabled || readOnly}\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","/* eslint-disable no-warning-comments */\nimport React, { useRef, useState } from 'react';\nimport { UseComboboxStateChangeOptions, useCombobox } from 'downshift';\nimport classNames from 'classnames';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { DropdownList } from './components/DropdownList';\n\nimport { itemToString, lowerCaseFilterTest } from './utils';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport './Dropdown.scss';\n\nexport type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt element. Bruk null for ingen verdi.\n * Det er denne som skal oppdateres av onChange\n */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (\n item: NormalizedDropdownItemType,\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 false\n */\n clearable?: boolean;\n /** Vis listen med valg skal vises på fokus av inputfeltet\n * @default false\n */\n openOnFocus?: boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: boolean;\n selectOnBlur?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\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};\n\n// TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release\n// TODO Husk å generelt legge inn støtte for typeof value === string\n\nexport const SearchableDropdownBeta = ({\n className,\n clearable = false,\n debounceTimeout,\n // disabled = false,\n disableLabelAnimation = false,\n feedback,\n // highlightFirstItemOnOpen,\n itemFilter = lowerCaseFilterTest,\n items: initialItems,\n label,\n listStyle,\n // loadingText,\n onChange,\n openOnFocus = false,\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) => {\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\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] = React.useState(normalizedItems);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems(normalizedItems.filter(item => itemFilter(item, inputValue)));\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n type,\n changes,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType>,\n ) => {\n switch (type) {\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur:\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem: {\n filterListItems({ inputValue: '' });\n return {\n ...changes,\n inputValue: '', // reset input value to show placeholder on focus\n };\n }\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n if (changes.inputValue?.match(leadingWhitespaceTest))\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, ''),\n );\n else {\n fetchItems(changes.inputValue ?? '');\n filterListItems({ inputValue: changes.inputValue ?? '' });\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 getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n inputValue,\n setInputValue,\n } = useCombobox({\n items: listItems,\n selectedItem: value,\n itemToString,\n stateReducer,\n onStateChange({ type, selectedItem: clickedItem }) {\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 onChange(clickedItem ?? null);\n }\n },\n ...rest,\n });\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={[selectedItem]}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onClear={() => {\n onChange(null);\n setInputValue('');\n inputRef.current?.focus();\n if (typeof initialItems === 'function')\n fetchItems(inputValue ?? '');\n }}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n disableLabelAnimation={disableLabelAnimation}\n className={classNames('eds-dropdown', className)}\n label={label}\n isFilled={selectedItem || inputValue !== ''}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n labelProps={getLabelProps()}\n {...getComboboxProps()}\n {...rest}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-dropdown__selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n placeholder={selectedItem?.label ?? placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n {...getInputProps({\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n onBlur: () => {\n setHideSelectedItem(false);\n },\n ref: inputRef,\n })}\n />\n </BaseFormControl>\n <DropdownList\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n isOpen={isOpen}\n listItems={listItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n loading={loading}\n />\n </div>\n );\n};\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","_ref","children","_ref$onChange","onChange","_ref$onInputValueChan","onInputValueChange","_ref$highlightFirstIt","highlightFirstItemOnOpen","className","style","_ref$searchable","searchable","rest","_objectWithoutPropertiesLoose","_excluded","Downshift","_extends","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","highlightFirstItemIndex","isOpen","highlightedIndex","args","classNames","createElement","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","_useDownshift","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","_ref$loading","loading","_ref$loadingText","loadingText","listStyle","clearable","_ref$isFilled","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","_ref2","props","_objectDestructuringEmpty","_useDownshift2","clearSelection","Fragment","onClick","CloseSmallIcon","_ref3","RegularDropdown","forwardRef","ref","disabled","_ref$placeholder","placeholder","_ref$selectOnTab","selectOnTab","_ref$openOnFocus","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","_ref$disabled","_ref$readOnly","prepend","_ref$itemFilter","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","closeMenu","useState","hideSelectedItem","_useState","setHideSelectedItem","inputRef","useRef","filteredItems","useMemo","_inputRef$current","current","focus","onBlur","mergeRefs","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","_React$useReducer","useReducer","_React$useReducer$","dispatch","isMounted","useEffect","fetchItems","useCallback","_regeneratorRuntime","mark","resolvedItems","wrap","_context","prev","next","abrupt","sent","stop","_callee","_x","apply","this","arguments","normalizedItems","useNormalizedItems","debounce","Dropdown","_ref$clearable","_useResolvedItems","undefined","RenderedDropdown","searchAbleProps","name","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","reset","CloseIcon","_ref4","hasSelected","_useMultiSelectContex2","CheckboxIcon","width","height","viewBox","d","fill","selectedItems","listItems","selectAllCheckboxState","selectAllItem","_ref$noMatchesText","noMatchesText","_ref$selectedItemAria","selectedItemAriaLabel","isMultiselect","isNoMatches","itemIsSelected","some","itemIsSelectAll","Checkbox","checked","display","listItemContent","lowerCaseFilterTest","SelectedElementsTag","removeSelectedItem","ariaLabelRemoveSelected","selectedItemProps","getSelectedItemProps","TagChip","onClose","stopPropagation","closeButtonAriaLabel","FieldAppend","_ref2$loading","_ref2$loadingText","ariaLabelClearItems","clearSelectedItemsLabel","onClear","_ref2$focusable","focusable","ClearableButton","ToggleButton","_ref3$clearSelectedIt","_ref3$ariaLabelClearI","_ref3$focusable","Tooltip","placement","content","IconButton","_ref4$closeAriaLabel","closeAriaLabel","_ref4$openAriaLabel","openAriaLabel","_ref4$focusable","warnAboutMissingStyles","_selectedItem$label","initialItems","_ref$readonly","readonly","_ref$selectOnBlur","selectOnBlur","_ref$variant","_useSelect","clickedItem","InputBlur","labelId","id","_ref$initialSelectedI","initialSelectedItems","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","setSelectedItems","isSelected","selectedCheckboxItem","selected","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","_ref$ariaLabelRemoveS","_ref$hideSelectAll","hideSelectAll","_ref$selectAllLabel","selectAllLabel","_React$useState","lastHighlightedIndex","setLastHighlightedIndex","selectAll","setListItems","filterListItems","_useMultiselectUtils","selectAllValue","hasSelectedItems","listItemsWithoutSelectAll","allListItemsAreSelected","includes","someListItemsAreSelected","addClickedItemToSelectedItems","clickedItemIsInSelectedItems","clickedItemIsSelectAll","removeClickedItemFromSelectedItems","selectAllUnselectedItemsInListItems","unselectAllListItems","useMultiselectUtils","_useMultipleSelection","useMultipleSelection","onSelectedItemsChange","_changes$selectedItem","getDropdownProps","_inputRef$current$val","_inputRef$current$val2","_inputRef$current2","_changes$inputValue","_changes$inputValue2","_changes$inputValue3","useCombobox","InputKeyDownEnter","ControlledPropUpdatedSelectedItem","InputChange","_changes$inputValue$r","match","_useCombobox","defaultHighlightedIndex","setInputValue","_getComboboxProps","getComboboxProps","comboboxProps","_inputRef$current3","_inputRef$current4","target","currentTarget","role","preventKeyAction","rightSideIcon","nativeDropdownId","_ref$disableLabelAnim","leadingWhitespaceTest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/DownshiftProvider.tsx","../src/DropdownList.tsx","../src/DropdownToggleButton.tsx","../src/DropdownLoadingDots.tsx","../src/BaseDropdown.tsx","../src/RegularDropdown.tsx","../src/SearchableDropdown.tsx","../src/DropdownInputGroup.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/beta/components/DropdownList.tsx","../src/beta/utils.ts","../src/beta/components/FieldComponents.tsx","../src/index.tsx","../src/beta/Dropdown.tsx","../src/beta/MultiSelect.tsx","../src/NativeDropdown.tsx","../src/beta/SearchableDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport Downshift, {\n ControllerStateAndHelpers,\n DownshiftState,\n StateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport classNames from 'classnames';\n\nconst DownshiftContext =\n React.createContext<ControllerStateAndHelpers<NormalizedDropdownItemType> | null>(\n null,\n );\n\nexport type DownshiftProviderProps = {\n onChange?: (\n selectedItem: NormalizedDropdownItemType,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => void;\n onInputValueChange?: (value: string) => void;\n inputValue?: string;\n initialSelectedItem?: NormalizedDropdownItemType;\n highlightFirstItemOnOpen?: boolean;\n className?: string;\n style?: React.CSSProperties;\n searchable?: boolean;\n [key: string]: any;\n};\nexport const DownshiftProvider: React.FC<DownshiftProviderProps> = ({\n children,\n onChange = () => undefined,\n onInputValueChange = () => undefined,\n highlightFirstItemOnOpen = false,\n className,\n style,\n searchable = false,\n ...rest\n}) => {\n const handleStateChange = (\n changes: any,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => {\n if (\n changes.type ===\n Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem\n ) {\n return;\n }\n if ('selectedItem' in changes) {\n onChange(changes.selectedItem, stateAndHelpers);\n } else if ('inputValue' in changes) {\n onInputValueChange(changes.inputValue);\n }\n };\n\n const stateReducer = (\n _: DownshiftState<NormalizedDropdownItemType>,\n changes: StateChangeOptions<NormalizedDropdownItemType>,\n ): Partial<StateChangeOptions<NormalizedDropdownItemType>> => {\n const highlightFirstOnOpen =\n highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;\n const highlightFirstItemIndex: Partial<\n StateChangeOptions<NormalizedDropdownItemType>\n > = highlightFirstOnOpen ? { highlightedIndex: 0 } : {};\n\n if (searchable) {\n const { type } = changes;\n\n switch (type) {\n case '__autocomplete_change_input__':\n return {\n // return normal changes.\n ...changes,\n ...highlightFirstItemIndex,\n };\n case '__autocomplete_click_item__':\n case '__autocomplete_keydown_enter__':\n case '__autocomplete_blur_input__':\n case '__autocomplete_mouseup__':\n return {\n ...changes,\n // if we had an item highlighted in the previous state.\n // we will reset input field value to blank\n inputValue: '',\n ...highlightFirstItemIndex,\n };\n default:\n return {\n ...changes,\n ...highlightFirstItemIndex,\n };\n }\n } else {\n return { ...changes, ...highlightFirstItemIndex };\n }\n };\n\n return (\n <Downshift\n itemToString={item => (item ? item.label : '')}\n onStateChange={handleStateChange}\n stateReducer={stateReducer}\n {...rest}\n >\n {args => (\n <div className={classNames('eds-input-group', className)} style={style}>\n {/* This div is required by Downshift */}\n <DownshiftContext.Provider value={args}>\n {children}\n </DownshiftContext.Provider>\n </div>\n )}\n </Downshift>\n );\n};\n\nexport const useDownshift: () => ControllerStateAndHelpers<NormalizedDropdownItemType> =\n () => {\n const context = React.useContext(DownshiftContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { CheckIcon } from '@entur/icons';\nimport './DropdownList.scss';\n\nexport type DropdownListProps = {\n items: NormalizedDropdownItemType[];\n [key: string]: any;\n};\n\nexport const DropdownList: React.FC<DropdownListProps> = ({\n items,\n ...rest\n}) => {\n const { highlightedIndex, isOpen, selectedItem, getItemProps, getMenuProps } =\n useDownshift();\n\n return (\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps()}\n {...rest}\n >\n {isOpen\n ? items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': selectedItem === item,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem === item && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useDownshift } from './DownshiftProvider';\nimport './DropdownToggleButton.scss';\n\nexport const DropdownToggleButton: () => JSX.Element = () => {\n const { getToggleButtonProps, isOpen } = useDownshift();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n })}\n tabIndex=\"-1\"\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { VisuallyHidden } from '@entur/a11y';\nimport { LoadingDots } from '@entur/loader';\nimport './InlineSpinner.scss';\n\nexport type InlineSpinnerType = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjermlesere */\n children: string;\n [key: string]: any;\n};\nexport const DropdownLoadingDots: React.FC<InlineSpinnerType> = ({\n className,\n children,\n ...rest\n}) => (\n <div className={classNames('eds-inline-spinner', className)} {...rest}>\n <LoadingDots />\n <VisuallyHidden>{children}</VisuallyHidden>\n </div>\n);\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { DropdownList } from './DropdownList';\nimport { DropdownToggleButton } from './DropdownToggleButton';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { CloseSmallIcon } from '@entur/icons';\nimport './BaseDropdown.scss';\nimport { useDownshift } from './DownshiftProvider';\nimport { space } from '@entur/tokens';\n\ntype BaseDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n style?: { [key: string]: any };\n listStyle?: { [key: string]: any };\n isFilled?: boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\nexport const BaseDropdown: React.FC<BaseDropdownProps> = ({\n children,\n className,\n items,\n loading = false,\n loadingText = 'Loading...',\n //eslint-disable-next-line\n placeholder,\n style,\n listStyle,\n clearable,\n label,\n isFilled = false,\n disableLabelAnimation,\n ...rest\n}) => {\n const { getLabelProps } = useDownshift();\n return (\n <div className=\"eds-dropdown-wrapper\" style={style}>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <BaseFormControl\n append={\n <Appendix\n clearable={clearable}\n loading={loading}\n loadingText={loadingText}\n readOnly={...rest.readOnly}\n />\n }\n className={className}\n label={label}\n isFilled={isFilled}\n labelProps={getLabelProps()}\n disableLabelAnimation={disableLabelAnimation}\n {...rest}\n >\n {children}\n </BaseFormControl>\n <DropdownList\n items={items}\n style={{\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n }}\n {...rest}\n />\n </div>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { clearSelection, selectedItem } = useDownshift();\n return (\n <>\n {selectedItem && (\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => clearSelection()}\n aria-label=\"Trykk for å fjerne valg\"\n {...props}\n >\n <CloseSmallIcon />\n </button>\n )}\n {selectedItem && <div className=\"eds-dropdown__divider\"></div>}\n </>\n );\n};\n\nconst Appendix: React.FC<{\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n}> = ({ clearable, loading, loadingText, readOnly }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return clearable ? (\n <>\n <ClearButton></ClearButton> <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { BaseDropdown } from './BaseDropdown';\n\ntype RegularDropdownProps = {\n items: NormalizedDropdownItemType[];\n disabled?: boolean;\n placeholder?: string;\n loading?: boolean;\n loadingText?: string;\n className?: string;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n disableLabelAnimation?: boolean;\n clearable?: boolean;\n [key: string]: any;\n};\nexport const RegularDropdown: React.FC<RegularDropdownProps> = React.forwardRef<\n HTMLButtonElement,\n RegularDropdownProps\n>(\n (\n {\n disabled,\n placeholder = 'Vennligst velg',\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n items,\n label,\n disableLabelAnimation,\n loading,\n loadingText,\n className,\n clearable,\n ...rest\n },\n ref,\n ) => {\n const {\n getToggleButtonProps,\n selectedItem,\n selectHighlightedItem,\n openMenu,\n isOpen,\n highlightedIndex,\n setHighlightedIndex,\n } = useDownshift();\n return (\n <BaseDropdown\n disabled={disabled}\n listStyle={listStyle}\n items={items}\n label={label}\n isFilled={selectedItem ? true : placeholder.length !== 0}\n disableLabelAnimation={disableLabelAnimation}\n loading={loading}\n loadingText={loadingText}\n className={className}\n clearable={clearable}\n {...rest}\n >\n <button\n {...getToggleButtonProps({\n className: 'eds-form-control eds-dropdown__selected-item',\n style: { textAlign: 'left' },\n disabled,\n type: 'button',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n\n if (isOpen) {\n const keyDownValue = e.key;\n const matchedItems = items\n .map((item, index) => ({ ...item, index }))\n .filter(item => {\n const firstCharacter = item.label\n .trim()\n .charAt(0)\n .toLowerCase();\n return firstCharacter === keyDownValue;\n });\n\n const nextHighlightItem = matchedItems.find(\n item => item.index > (highlightedIndex ?? 0),\n );\n\n if (nextHighlightItem) {\n setHighlightedIndex(nextHighlightItem.index);\n } else if (matchedItems.length > 0) {\n setHighlightedIndex(matchedItems[0].index);\n }\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n ref={ref}\n >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n },\n);\n","import React, { useRef, useState } from 'react';\nimport { mergeRefs } from '@entur/utils';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\nimport './SearchableDropdown.scss';\n\ntype SearchableDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n prepend?: React.ReactNode;\n readOnly?: boolean;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n clearable: boolean;\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nfunction LowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | null,\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 const SearchableDropdown: React.FC<SearchableDropdownProps> =\n React.forwardRef<HTMLInputElement, SearchableDropdownProps>(\n (\n {\n disabled = false,\n className,\n items,\n loading,\n loadingText,\n readOnly = false,\n prepend,\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n clearable,\n itemFilter = (\n item: NormalizedDropdownItemType,\n inputValue: string | null,\n ) => LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n placeholder,\n ...rest\n },\n ref,\n ) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n closeMenu,\n selectedItem,\n } = useDownshift();\n\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const filteredItems = React.useMemo(() => {\n return items.filter(item => itemFilter(item, inputValue));\n }, [inputValue, items, itemFilter]);\n\n return (\n <BaseDropdown\n items={filteredItems}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n loading={loading}\n loadingText={loadingText}\n prepend={prepend}\n listStyle={listStyle}\n clearable={clearable}\n label={label}\n isFilled={selectedItem ? true : false}\n disableLabelAnimation={disableLabelAnimation}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__searchable-selected-item__wrapper\">\n <span\n className=\"eds-dropdown__searchable-selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') selectHighlightedItem();\n },\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n placeholder: selectedItem ? selectedItem.label : placeholder,\n ...rest,\n })}\n onBlur={() => {\n setHideSelectedItem(false);\n closeMenu();\n }}\n ref={mergeRefs<HTMLInputElement>(ref, inputRef)}\n />\n </BaseDropdown>\n );\n },\n );\n","import { FeedbackText, VariantProvider, VariantType } from '@entur/form';\nimport React from 'react';\n\nexport type DropdownInputGroupProps = {\n feedback?: string;\n variant?: VariantType;\n className?: string;\n style?: { [key: string]: any };\n};\nexport const DropdownInputGroup: React.FC<DropdownInputGroupProps> = ({\n children,\n feedback,\n variant,\n className,\n style,\n}) => {\n return (\n <VariantProvider variant={variant}>\n <div className={className} style={style}>\n {children}\n {feedback && variant && (\n <FeedbackText variant={variant}>{feedback}</FeedbackText>\n )}\n </div>\n </VariantProvider>\n );\n};\n","import React from 'react';\nimport { debounce } from '@entur/utils';\nimport {\n DropdownItemType,\n NormalizedDropdownItemType,\n useNormalizedItems,\n} from './useNormalizedItems';\n\nconst useIsMounted = () => {\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n return isMountedRef.current;\n};\n\ntype AsyncDropdownItemType = (inputType: string) => Promise<DropdownItemType[]>;\ntype SyncDropdownItemType = (inputType: string) => DropdownItemType[];\nexport type PotentiallyAsyncDropdownItemType =\n | DropdownItemType[]\n | SyncDropdownItemType\n | AsyncDropdownItemType;\n\ntype ResolverState = {\n items: DropdownItemType[];\n loading: boolean;\n};\n\ntype ResolverAction =\n | {\n type: 'request results';\n }\n | {\n type: 'received results';\n payload: DropdownItemType[];\n };\n\nconst reducer = (_state: ResolverState, action: ResolverAction) => {\n switch (action.type) {\n case 'request results':\n return { items: [], loading: true };\n case 'received results':\n return { items: action.payload, loading: false };\n }\n};\n\nexport const useResolvedItems = (\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (arg: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType[];\n} => {\n const isItemsFunction = typeof itemsOrItemsResolver === 'function';\n\n // Here, 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 () =>\n isItemsFunction\n ? (itemsOrItemsResolver as AsyncDropdownItemType)\n : () => Promise.resolve(itemsOrItemsResolver as DropdownItemType[]),\n [itemsOrItemsResolver, isItemsFunction],\n );\n\n const [{ items, loading }, dispatch] = React.useReducer(reducer, {\n items: isItemsFunction ? [] : (itemsOrItemsResolver as DropdownItemType[]),\n loading: false,\n });\n\n // This is a way to check whether or not the dropdown is still in the\n // document. We use it below to make sure we're not updating the state of\n // an unmounted component.\n const isMounted = useIsMounted();\n\n // Next, let's create the fetching function. This should be called whenever\n // the input value changes\n const fetchItems = React.useCallback(\n async (inputValue: string) => {\n if (!isMounted) {\n return;\n }\n dispatch({ type: 'request results' });\n const resolvedItems = await itemsResolver(inputValue);\n if (isMounted) {\n dispatch({ type: 'received results', payload: resolvedItems });\n }\n },\n [itemsResolver, isMounted],\n );\n\n const normalizedItems = useNormalizedItems(items);\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (isItemsFunction) {\n fetchItems('');\n }\n }, [isItemsFunction]); // eslint-disable-line react-hooks/exhaustive-deps\n\n return {\n items: normalizedItems,\n loading: isItemsFunction ? loading : false,\n fetchItems: debounce(fetchItems, debounceTimeout),\n };\n};\n","import React from 'react';\n\n/** A dropdown item has a string label and a string value */\nexport type NormalizedDropdownItemType = {\n value: string;\n label: string;\n icons?: React.ComponentType<any>[];\n};\n\nexport type DropdownItemType =\n | { value?: string; label: string; icons?: React.ComponentType<any>[] }\n | string;\nexport const useNormalizedItems = (\n items: DropdownItemType[],\n): NormalizedDropdownItemType[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return { value: item, label: item };\n }\n\n if (!('value' in item)) {\n return { ...item, value: item.label };\n }\n return item as NormalizedDropdownItemType;\n }),\n [items],\n );\n","import React from 'react';\nimport { VariantType } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { RegularDropdown } from './RegularDropdown';\nimport { DownshiftProvider } from './DownshiftProvider';\nimport { SearchableDropdown } from './SearchableDropdown';\nimport { DropdownInputGroup } from './DropdownInputGroup';\nimport {\n useResolvedItems,\n PotentiallyAsyncDropdownItemType,\n} from './useResolvedItems';\n\nexport type DropdownProps = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i dropdownen */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n value?: string | null;\n /** Om man skal kunne søke i dropdownen eller ikke */\n searchable?: boolean;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tæbbe\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\nexport const Dropdown: React.FC<DropdownProps> = React.forwardRef<\n HTMLInputElement | HTMLButtonElement,\n DropdownProps\n>(\n (\n {\n highlightFirstItemOnOpen,\n debounceTimeout,\n disabled,\n feedback,\n items,\n label,\n loadingText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly,\n searchable,\n selectOnTab,\n openOnFocus,\n variant,\n value,\n clearable = false,\n className,\n style,\n listStyle,\n itemFilter,\n disableLabelAnimation,\n ...rest\n },\n ref,\n ) => {\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(items, debounceTimeout);\n\n const selectedItem =\n value === undefined\n ? undefined\n : normalizedItems.find(item => value === item.value) || null;\n\n const RenderedDropdown = searchable ? SearchableDropdown : RegularDropdown;\n const searchAbleProps = searchable\n ? { itemFilter: itemFilter, name: rest.name, 'data-cy': rest['data-cy'] }\n : { name: rest.name, 'data-cy': rest['data-cy'] };\n return (\n <DownshiftProvider\n selectedItem={selectedItem}\n onInputValueChange={fetchItems}\n onChange={onChange}\n value={value}\n highlightFirstItemOnOpen={highlightFirstItemOnOpen}\n className={className}\n style={style}\n searchable={searchable}\n {...rest}\n >\n <DropdownInputGroup feedback={feedback} variant={variant}>\n <RenderedDropdown\n label={label}\n items={normalizedItems}\n loading={loading}\n loadingText={loadingText}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n prepend={prepend}\n selectOnTab={selectOnTab}\n openOnFocus={openOnFocus}\n listStyle={listStyle}\n clearable={clearable}\n disableLabelAnimation={disableLabelAnimation}\n ref={ref}\n {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n },\n);\n","import React, { useState } from 'react';\nimport {\n useSelect,\n UseSelectProps,\n // StateChangeOptions,\n // UseSelectStateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { useRandomId } from '@entur/utils';\nimport classNames from 'classnames';\nimport { CloseIcon, DownArrowIcon } from '@entur/icons';\nimport { space } from '@entur/tokens';\nimport './MultiSelect.scss';\nimport './DropdownList.scss';\n\nconst MultiSelectContext = React.createContext<{\n isOpen: boolean;\n reset: () => void;\n getToggleButtonProps: any;\n openMenu: () => void;\n openOnFocus?: boolean;\n} | null>(null);\nconst useMultiSelectContext = () => {\n const context = React.useContext(MultiSelectContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n};\n\nfunction stateReducer(\n state: any, //StateChangeOptions<NormalizedDropdownItemType>,\n actionAndChanges: any, //UseSelectStateChangeOptions<NormalizedDropdownItemType>,\n) {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.MenuKeyDownEnter:\n case useSelect.stateChangeTypes.MenuKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep menu open after selection.\n highlightedIndex: state.highlightedIndex,\n };\n default:\n return changes;\n }\n}\ntype MultiSelectProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Tekst som vises i boksen når elementer er valgt */\n itemsSelectedLabel?: (\n selectedItems: NormalizedDropdownItemType[],\n numberOfItems?: number,\n ) => string;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (e: any) => void;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n initialSelectedItems?: NormalizedDropdownItemType[];\n} & Omit<\n UseSelectProps<NormalizedDropdownItemType>,\n 'initialSelectedItem' | 'items'\n>;\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n className,\n clearable = false,\n debounceTimeout,\n disabled,\n feedback,\n initialSelectedItems = [],\n items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n listStyle,\n loading = false,\n loadingText = '',\n onChange = () => undefined,\n openOnFocus = false,\n readOnly = false,\n style,\n variant,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] =\n useState<NormalizedDropdownItemType[]>(initialSelectedItems);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\n }, []);\n\n function isSelected(selectedCheckboxItem: NormalizedDropdownItemType) {\n return selectedItems.some(\n selected => selected.value === selectedCheckboxItem.value,\n );\n }\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n openMenu,\n } = useSelect<NormalizedDropdownItemType>({\n items,\n stateReducer,\n selectedItem: null,\n onSelectedItemChange: ({ selectedItem }) => {\n if (!selectedItem) {\n return;\n }\n const itemIsFound = isSelected(selectedItem);\n if (itemIsFound) {\n const slicedItemList = selectedItems.filter(\n item => item.value !== selectedItem.value,\n );\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else {\n const slicedItemList = [...selectedItems, selectedItem];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n }\n },\n ...rest,\n });\n const buttonText = selectedItems.length\n ? itemsSelectedLabel(selectedItems)\n : '';\n const multiSelectId = useRandomId('eds-multiselect');\n\n return (\n <MultiSelectContext.Provider\n value={{ isOpen, reset, getToggleButtonProps, openMenu, openOnFocus }}\n >\n <div\n className={classNames(\n 'eds-multiselect',\n 'eds-dropdown-wrapper',\n className,\n )}\n style={style}\n >\n <BaseFormControl\n label={label}\n labelId={multiSelectId}\n labelProps={...getLabelProps()}\n feedback={feedback}\n variant={variant}\n isFilled={selectedItems.length > 0 || isOpen}\n disabled={disabled}\n readOnly={readOnly}\n append={\n <Appendix\n hasSelected={clearable && selectedItems.length > 0}\n loading={loading}\n loadingText={loadingText}\n readOnly={readOnly}\n />\n }\n >\n <button\n {...getToggleButtonProps({\n style: {\n textAlign: 'left',\n },\n type: 'button',\n className: 'eds-form-control eds-multiselect__button',\n })}\n >\n {buttonText}\n </button>\n </BaseFormControl>\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps({\n style: {\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n },\n })}\n >\n {isOpen &&\n items.map((item, index) => (\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': isSelected(item),\n })}\n key={`${item.value}${index}`}\n {...getItemProps({\n item,\n index,\n })}\n style={{ display: 'flex' }}\n >\n <span style={{ display: 'flex' }}>\n <span\n className={classNames('eds-multiselect-checkbox', {\n 'eds-multiselect-checkbox--checked': isSelected(item),\n })}\n >\n <CheckboxIcon />\n </span>\n <span className=\"eds-multiselect__item-label\">\n {item.label}\n </span>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n </MultiSelectContext.Provider>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { reset } = useMultiSelectContext();\n return (\n <>\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => reset()}\n {...props}\n >\n <CloseIcon />\n </button>\n <div className=\"eds-dropdown__divider\"></div>\n </>\n );\n};\n\nconst Appendix: React.FC<{\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n hasSelected: boolean;\n}> = ({ loading, loadingText, readOnly, hasSelected }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return hasSelected ? (\n <>\n <ClearButton></ClearButton>\n <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n\nconst DropdownToggleButton = () => {\n const { getToggleButtonProps, isOpen, openMenu, openOnFocus } =\n useMultiSelectContext();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n onFocus: () => {\n if (openOnFocus) {\n openMenu();\n }\n },\n })}\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n\nconst CheckboxIcon: React.FC = () => {\n return (\n <svg\n className=\"eds-checkbox-icon\"\n width=\"11px\"\n height=\"9px\"\n viewBox=\"6 11 37 33\"\n >\n <path\n className=\"eds-checkbox-icon__path\"\n d=\"M14.1 27.2l7.1 7.2 14.6-14.8\"\n fill=\"none\"\n />\n </svg>\n );\n};\n\nfunction SelectedItemsLabel(items: NormalizedDropdownItemType[]) {\n return items.length < 3\n ? items.map(item => item.label).toString()\n : `${items.length} elementer valgt`;\n}\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetMenuPropsOptions,\n GetPropsCommonOptions,\n UseComboboxGetItemPropsOptions,\n} from 'downshift';\n\nimport { Checkbox } from '@entur/form';\nimport { VisuallyHidden } from '@entur/a11y';\n\nimport { NormalizedDropdownItemType } from '../../useNormalizedItems';\n\nimport './DropdownList.scss';\n\ntype DropdownListProps = {\n selectedItems: NormalizedDropdownItemType[];\n isOpen: boolean;\n listItems: NormalizedDropdownItemType[];\n highlightedIndex: number;\n listStyle: { [key: string]: any } | undefined;\n getMenuProps: (\n options?: UseComboboxGetMenuPropsOptions | undefined,\n otherOptions?: GetPropsCommonOptions | undefined,\n ) => any;\n getItemProps: (\n options: UseComboboxGetItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n selectAllCheckboxState?: () => boolean | 'indeterminate';\n noMatchesText?: string;\n loadingText?: string;\n selectedItemAriaLabel?: string;\n loading?: boolean;\n selectAllItem?: NormalizedDropdownItemType;\n [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItems,\n listItems,\n inputValue,\n isOpen,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n showSelectAllInList = false,\n loading = false,\n selectAllCheckboxState,\n selectAllItem,\n listStyle,\n noMatchesText = 'Ingen treff for søket',\n loadingText = 'Laster inn …',\n selectedItemAriaLabel = ', valgt element',\n ...rest\n}: DropdownListProps) => {\n const isMultiselect = selectAllItem !== undefined;\n const isNoMatches =\n !loading &&\n (listItems.length === 0 ||\n (listItems.length === 1 && listItems[0].value === selectAllItem?.value));\n const itemIsSelected = (item: NormalizedDropdownItemType) =>\n selectedItems.some(selectedItem => selectedItem.value === item.value);\n\n const selectAllListItemContent = () => (\n <>\n <Checkbox\n className=\"eds-dropdown__list__item__checkbox\"\n checked={selectAllCheckboxState?.()}\n aria-hidden=\"true\"\n onChange={() => {\n return;\n }}\n />\n <span className=\"eds-dropdown__list__item__text\">\n {selectAllItem?.label}\n </span>\n </>\n );\n\n const listItemContent = (item: NormalizedDropdownItemType) => {\n return (\n <>\n <Checkbox\n style={!isMultiselect ? { display: 'none' } : {}}\n className=\"eds-dropdown__list__item__checkbox\"\n checked={itemIsSelected(item)}\n aria-hidden=\"true\"\n onChange={() => {\n return;\n }}\n />\n\n <span className=\"eds-dropdown__list__item__text\">\n {item.label}\n <VisuallyHidden>{selectedItemAriaLabel}</VisuallyHidden>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown__list__item__icon\"\n />\n ))}\n </span>\n )}\n </>\n );\n };\n\n return (\n <ul\n {...getMenuProps()}\n className={classNames('eds-dropdown__list', {\n 'eds-dropdown__list--open': isOpen,\n })}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen &&\n listItems.length > 0 &&\n listItems.map((item, index) => {\n const itemIsSelectAll = item.value === selectAllItem?.value;\n if (itemIsSelectAll && listItems.length <= 2) return <></>;\n\n return (\n <li\n key={item.value}\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 && itemIsSelected(item),\n })}\n {...getItemProps({\n key: `${index}${item.value}`,\n item,\n index,\n })}\n >\n {itemIsSelectAll\n ? selectAllListItemContent()\n : listItemContent(item)}\n </li>\n );\n })}\n\n {isOpen && isNoMatches && (\n <li className=\"eds-dropdown__list__item\">{noMatchesText}</li>\n )}\n\n {isOpen && loading && (\n <li className=\"eds-dropdown__list__item\">{loadingText}</li>\n )}\n </ul>\n );\n};\n","import { NormalizedDropdownItemType } from '../useNormalizedItems';\n\nexport function lowerCaseFilterTest(\n item: NormalizedDropdownItemType,\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 const itemToString = (item: NormalizedDropdownItemType | null) =>\n item ? item.label : '';\n\ntype useMultiselectUtilsType = {\n selectedItems: NormalizedDropdownItemType[];\n listItems: NormalizedDropdownItemType[];\n selectAllValue: string;\n};\n\nexport const useMultiselectUtils = ({\n listItems,\n selectedItems,\n selectAllValue,\n}: useMultiselectUtilsType) => {\n const hasSelectedItems = selectedItems.length > 0;\n\n const listItemsWithoutSelectAll = listItems.filter(\n item => item.value !== selectAllValue,\n );\n\n const allListItemsAreSelected =\n listItemsWithoutSelectAll.filter(item => !selectedItems.includes(item))\n .length === 0;\n\n const someListItemsAreSelected = listItemsWithoutSelectAll.some(item =>\n selectedItems.includes(item),\n );\n\n const addClickedItemToSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n onChange: (value: NormalizedDropdownItemType[]) => void,\n ) => onChange([...selectedItems, clickedItem]);\n\n const clickedItemIsInSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n ) =>\n selectedItems.some(\n selectedItem => selectedItem.value === clickedItem.value,\n );\n\n const clickedItemIsSelectAll = (clickedItem: NormalizedDropdownItemType) =>\n clickedItem.value === selectAllValue;\n\n const removeClickedItemFromSelectedItems = (\n clickedItem: NormalizedDropdownItemType,\n onChange: (value: NormalizedDropdownItemType[]) => 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[]) => void,\n ) => {\n onChange([\n ...selectedItems,\n ...listItemsWithoutSelectAll.filter(\n item => !selectedItems.includes(item),\n ),\n ]);\n };\n\n const unselectAllListItems = (\n onChange: (value: NormalizedDropdownItemType[]) => void,\n ) => {\n onChange(\n selectedItems.filter(item => !listItemsWithoutSelectAll.includes(item)),\n );\n };\n\n return {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n hasSelectedItems,\n listItemsWithoutSelectAll,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n someListItemsAreSelected,\n unselectAllListItems,\n };\n};\n","import { IconButton } from '@entur/button';\nimport { TagChip } from '@entur/chip';\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { Tooltip } from '@entur/tooltip';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetToggleButtonPropsOptions,\n UseMultipleSelectionGetSelectedItemPropsOptions,\n} from 'downshift';\nimport { DropdownLoadingDots } from '../../DropdownLoadingDots';\nimport { NormalizedDropdownItemType } from '../../useNormalizedItems';\nimport React from 'react';\n\nimport './FieldComponents.scss';\n\nexport const SelectedItemTag = ({\n getSelectedItemProps,\n removeSelectedItem,\n selectedItem,\n index,\n ariaLabelRemoveSelected,\n}: {\n getSelectedItemProps?: (\n options: UseMultipleSelectionGetSelectedItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n removeSelectedItem: (item: NormalizedDropdownItemType) => void;\n selectedItem: NormalizedDropdownItemType;\n index?: number;\n ariaLabelRemoveSelected: string;\n}) => {\n const { tabIndex: _, ...selectedItemProps } =\n getSelectedItemProps?.({\n selectedItem,\n index,\n }) ?? {};\n return (\n <TagChip\n className={classNames('eds-dropdown__selected-element-tag')}\n {...selectedItemProps}\n onClose={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n removeSelectedItem(selectedItem);\n }}\n closeButtonAriaLabel={`${selectedItem.label}, ${ariaLabelRemoveSelected} `}\n key={selectedItem.value}\n >\n <span aria-hidden=\"true\">{selectedItem.label}</span>\n </TagChip>\n );\n};\n\nexport const FieldAppend: React.FC<{\n selectedItems: (NormalizedDropdownItemType | null)[];\n isOpen: boolean;\n clearable: boolean;\n loading?: boolean;\n loadingText?: string;\n ariaLabelClearItems?: string;\n clearSelectedItemsLabel?: string;\n readOnly: boolean;\n focusable?: boolean;\n onClear: () => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItems,\n loading = false,\n loadingText = 'Laster resultater …',\n ariaLabelClearItems,\n clearSelectedItemsLabel,\n isOpen,\n onClear,\n focusable = false,\n}) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\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={focusable}\n clearSelectedItemsLabel={clearSelectedItemsLabel}\n ariaLabelClearItems={ariaLabelClearItems}\n />\n <div className=\"eds-dropdown-appendix__divider\" />\n </>\n )}\n <ToggleButton\n getToggleButtonProps={getToggleButtonProps}\n isOpen={isOpen}\n focusable={focusable}\n />\n </div>\n );\n};\n\nconst ClearableButton = ({\n onClear,\n clearSelectedItemsLabel = 'Fjern valgte',\n ariaLabelClearItems = 'Fjern valgte',\n focusable = false,\n}: {\n onClear: () => void;\n clearSelectedItemsLabel?: string;\n focusable?: boolean;\n ariaLabelClearItems?: string;\n}) => {\n return (\n <Tooltip\n aria-hidden=\"true\"\n placement=\"right\"\n content={clearSelectedItemsLabel}\n >\n <IconButton\n className=\"eds-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={focusable ? 0 : 1}\n onClick={onClear}\n aria-label={ariaLabelClearItems}\n >\n <CloseSmallIcon aria-hidden=\"true\" />\n </IconButton>\n </Tooltip>\n );\n};\n\nconst ToggleButton = ({\n getToggleButtonProps,\n isOpen,\n closeAriaLabel = 'Lukk liste med valg',\n openAriaLabel = 'Åpne liste med valg',\n focusable = false,\n}: {\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n isOpen: boolean;\n closeAriaLabel?: string;\n openAriaLabel?: 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 })}\n aria-label={isOpen ? closeAriaLabel : openAriaLabel}\n tabIndex={focusable ? 0 : 1}\n type=\"button\"\n >\n <DownArrowIcon aria-hidden=\"true\" />\n </IconButton>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './MultiSelect';\nexport * from './MultiSelect';\nexport * from './beta';\n","/* eslint-disable no-warning-comments */\nimport React from 'react';\nimport { useSelect } from 'downshift';\nimport classNames from 'classnames';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { DropdownList } from './components/DropdownList';\n\nimport { itemToString } from './utils';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport './Dropdown.scss';\n\nexport type DropdownBetaProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdown-en */\n prepend?: React.ReactNode;\n /** Deaktiver dropdown-en */\n disabled?: boolean;\n /** Setter dropdown-en i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tab-e\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha mulighet for å nullstille Dropdown-en\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\n\nexport const DropdownBeta = ({\n className,\n clearable = false,\n debounceTimeout,\n // disabled,\n // disableLabelAnimation,\n feedback,\n items: initialItems,\n label,\n listStyle,\n // loadingText,\n onChange,\n openOnFocus = false,\n placeholder,\n // prepend,\n readonly = false,\n // searchable,\n selectedItem,\n selectOnBlur = false,\n selectOnTab = false,\n // value,\n variant = 'info',\n ...rest\n}: DropdownBetaProps) => {\n const { items: normalizedItems, loading } = useResolvedItems(\n initialItems,\n debounceTimeout,\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n } = useSelect({\n items: normalizedItems,\n selectedItem,\n onStateChange({ type, selectedItem: clickedItem }) {\n switch (type) {\n // @ts-expect-error This falltrough is wanted\n case useSelect.stateChangeTypes.InputBlur:\n if (!selectOnBlur) break;\n case useSelect.stateChangeTypes.MenuKeyDownEnter: // eslint-disable-line no-fallthrough\n case useSelect.stateChangeTypes.ItemClick:\n onChange?.(clickedItem !== undefined ? clickedItem : null);\n }\n },\n itemToString,\n });\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={[selectedItem]}\n isOpen={isOpen}\n clearable={true}\n loading={loading}\n loadingText={''}\n readOnly={readonly}\n onClear={() => {\n onChange?.(null);\n }}\n getToggleButtonProps={getToggleButtonProps}\n clearSelectedItemsLabel=\"Fjern valgt\"\n ariaLabelClearItems={`${selectedItem?.label} valgt, trykk for å fjerne valget`}\n focusable\n />\n }\n className={classNames('eds-dropdown', className, {\n 'eds-dropdown--not-filled': selectedItem === null,\n })}\n label={label}\n labelId={getLabelProps().id}\n labelProps={getLabelProps()}\n disableLabelAnimation\n isFilled={selectedItem !== null}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n {...rest}\n >\n <div\n className=\"eds-dropdown__selected-item-button\"\n {...getToggleButtonProps()}\n >\n {selectedItem?.label ?? ''}\n </div>\n </BaseFormControl>\n <DropdownList\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n isOpen={isOpen}\n listItems={normalizedItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n loading={loading}\n />\n </div>\n );\n};\n","import React, { useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n useMultipleSelection,\n useCombobox,\n UseComboboxStateChangeOptions,\n} from 'downshift';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { useRandomId } from '@entur/utils';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { FieldAppend, SelectedItemTag } from './components/FieldComponents';\nimport { DropdownList } from './components/DropdownList';\nimport {\n itemToString,\n lowerCaseFilterTest,\n useMultiselectUtils,\n} from './utils';\n\nimport './Dropdown.scss';\n\nexport type MultiSelectBetaProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Elementer som er valgt blant 'items'.\n * Denne skal oppdateres av onChange.\n */\n selectedItems: NormalizedDropdownItemType[];\n /** Callback med alle valgte verdier.\n * Bruk denne til å oppdatere selectedItems-listen */\n onChange: (selectedItems: NormalizedDropdownItemType[]) => void;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Om dropdown-en er deaktivert */\n disabled?: boolean;\n /** Om dropdown-en er i read-only modus */\n readOnly?: 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 loadingText?: string;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Skjuler «Velg alle» fra listen med valg\n * @default false\n */\n hideSelectAll?: boolean;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Velg alle\"\n */\n selectAllLabel?: string;\n /** Teksten som vises for «Velg alle»-elementet i listen\n * @default \"Alle valgt\"\n */\n allItemsSelectedLabel?: string;\n /** Skjermleser-tekst som for å fjerne alle valg\n * @default \"Fjern valgte\"\n */\n removeAllItemsAriaLabel?: string;\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjemleser på knapper for å fjerne valgt element\n * @default \"trykk for å fjerne valg\"\n */\n ariaLabelRemoveSelected?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n maxTags?: number;\n /** Om en knapp for å fjerne alle valg skal vises\n * @default false\n */\n clearable?: boolean;\n clearInputOnSelect?: boolean;\n selectOnBlur?: boolean;\n readonly?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n};\n\nexport const MultiSelectBeta = ({\n allItemsSelectedLabel = 'Alle valgt',\n ariaLabelRemoveSelected = 'trykk for å fjerne valg',\n className,\n clearable = false,\n clearInputOnSelect = false,\n debounceTimeout,\n feedback,\n hideSelectAll = false,\n items: initialItems,\n label,\n listStyle,\n maxTags = 10,\n onChange,\n openOnFocus = false,\n placeholder,\n readonly = false,\n removeAllItemsAriaLabel = 'Fjern valgte',\n selectAllLabel = 'Velg alle',\n selectedItems,\n selectOnBlur = false,\n style,\n variant = 'info',\n ...rest\n}: MultiSelectBetaProps) => {\n const [lastHighlightedIndex, setLastHighlightedIndex] = React.useState(0);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(initialItems);\n\n const isAllNonAsyncItemsSelected =\n typeof initialItems !== 'function' &&\n selectedItems.length === normalizedItems.length;\n\n const selectAll: NormalizedDropdownItemType = {\n value: useRandomId('select-all'),\n label: selectAllLabel,\n };\n const summarySelectedItems: NormalizedDropdownItemType = React.useMemo(\n () => ({\n value: '',\n label: isAllNonAsyncItemsSelected\n ? allItemsSelectedLabel\n : selectedItems.length + ' valgte',\n }),\n [\n isAllNonAsyncItemsSelected,\n selectedItems,\n normalizedItems,\n allItemsSelectedLabel,\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 => lowerCaseFilterTest(item, inputValue)),\n ]);\n\n const updateListItems = (inputValue?: string) => {\n if (typeof initialItems === 'function') fetchItems(inputValue ?? ''); // fetch items only if user provides a function as items\n filterListItems({ inputValue: inputValue ?? '' });\n };\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n const {\n addClickedItemToSelectedItems,\n allListItemsAreSelected,\n clickedItemIsInSelectedItems,\n clickedItemIsSelectAll,\n hasSelectedItems,\n removeClickedItemFromSelectedItems,\n selectAllCheckboxState,\n selectAllUnselectedItemsInListItems,\n unselectAllListItems,\n } = useMultiselectUtils({\n listItems,\n selectAllValue: selectAll.value,\n selectedItems,\n });\n\n const { getSelectedItemProps, getDropdownProps, removeSelectedItem } =\n useMultipleSelection({\n selectedItems,\n itemToString,\n onSelectedItemsChange(changes) {\n onChange(changes.selectedItems ?? []);\n },\n });\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n changes,\n type,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType>,\n ) => {\n if (changes?.highlightedIndex && changes?.highlightedIndex >= 0)\n setLastHighlightedIndex(changes?.highlightedIndex);\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n if (clearInputOnSelect) {\n updateListItems('');\n }\n return {\n ...changes,\n isOpen: true, // keep the menu open after selection.\n inputValue: clearInputOnSelect\n ? ''\n : inputRef?.current?.value ?? '',\n };\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n inputValue: clearInputOnSelect\n ? ''\n : inputRef?.current?.value ?? '',\n };\n case useCombobox.stateChangeTypes.InputChange:\n if (changes.inputValue?.match(/^\\s+/g)) {\n // remove leading whitespace if it exists\n return {\n ...changes,\n inputValue: changes.inputValue.replace(/^\\s+/g, '') ?? '',\n };\n }\n\n updateListItems(changes.inputValue);\n\n return changes;\n case useCombobox.stateChangeTypes.InputBlur:\n return {\n ...changes,\n inputValue: '',\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 getComboboxProps,\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 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 ...rest,\n });\n\n const handleOnClear = () => {\n onChange([]);\n setInputValue('');\n inputRef.current?.focus();\n updateListItems(inputValue);\n };\n\n // role=combobox leads to strange VoiceOver behavior and is therefor omitted\n // const { role: _, ...comboboxProps } = getComboboxProps();\n const { ...comboboxProps } = getComboboxProps();\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={selectedItems}\n isOpen={isOpen}\n clearable={clearable}\n clearSelectedItemsLabel={removeAllItemsAriaLabel}\n loading={loading}\n loadingText={''}\n readOnly={readonly}\n onClear={handleOnClear}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-dropdown', className)}\n label={label}\n isFilled={hasSelectedItems || inputValue !== ''}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n style={style}\n labelProps={{\n 'aria-label': `${label}, multiselect, ${selectedItems.length} valgte elementer`,\n ...getLabelProps(),\n }}\n {...comboboxProps}\n {...rest}\n >\n <div\n className={classNames('eds-dropdown__selected-items-and-input', {\n 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems,\n })}\n onClick={(e: React.MouseEvent) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n }}\n >\n {selectedItems.length < maxTags ? (\n selectedItems.map((selectedItem, index) => (\n <SelectedItemTag\n index={index}\n key={selectedItem.value}\n getSelectedItemProps={getSelectedItemProps}\n selectedItem={selectedItem}\n removeSelectedItem={removeSelectedItem}\n ariaLabelRemoveSelected={ariaLabelRemoveSelected}\n />\n ))\n ) : (\n <SelectedItemTag\n selectedItem={summarySelectedItems}\n removeSelectedItem={handleOnClear}\n ariaLabelRemoveSelected={removeAllItemsAriaLabel}\n />\n )}\n <input\n placeholder={placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n role=\"combobox\" // eslint-disable-line jsx-a11y/role-has-required-aria-props\n {...getInputProps(\n getDropdownProps({\n preventKeyAction: isOpen,\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n },\n ref: inputRef,\n value: inputValue ?? '',\n }),\n )}\n />\n </div>\n </BaseFormControl>\n <DropdownList\n listItems={listItems}\n selectedItems={selectedItems}\n inputValue={inputValue}\n isOpen={isOpen}\n highlightedIndex={highlightedIndex}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n selectAllItem={selectAll}\n selectAllCheckboxState={selectAllCheckboxState}\n listStyle={listStyle}\n loading={loading}\n />\n </div>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = (\n <DownArrowIcon inline={true} aria-hidden=\"true\" />\n );\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = (\n <DropdownLoadingDots aria-hidden=\"true\">\n {loadingText}\n </DropdownLoadingDots>\n );\n }\n const nativeDropdownId = useRandomId('eds-native-dropdown');\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={rightSideIcon}\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 === 'error'}\n aria-labelledby={nativeDropdownId}\n aria-busy={loading}\n className=\"eds-form-control eds-dropdown\"\n disabled={disabled || readOnly}\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","/* eslint-disable no-warning-comments */\nimport React, { useRef, useState } from 'react';\nimport { UseComboboxStateChangeOptions, useCombobox } from 'downshift';\nimport classNames from 'classnames';\n\nimport { BaseFormControl, VariantType } from '@entur/form';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from '../useResolvedItems';\nimport { DropdownList } from './components/DropdownList';\n\nimport { itemToString, lowerCaseFilterTest } from './utils';\nimport { FieldAppend } from './components/FieldComponents';\n\nimport './Dropdown.scss';\n\nexport type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt element. Bruk null for ingen verdi.\n * Det er denne som skal oppdateres av onChange\n */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (\n item: NormalizedDropdownItemType,\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 false\n */\n clearable?: boolean;\n /** Vis listen med valg skal vises på fokus av inputfeltet\n * @default false\n */\n openOnFocus?: boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: boolean;\n selectOnBlur?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\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};\n\n// TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release\n// TODO Husk å generelt legge inn støtte for typeof value === string\n\nexport const SearchableDropdownBeta = ({\n className,\n clearable = false,\n debounceTimeout,\n // disabled = false,\n disableLabelAnimation = false,\n feedback,\n // highlightFirstItemOnOpen,\n itemFilter = lowerCaseFilterTest,\n items: initialItems,\n label,\n listStyle,\n // loadingText,\n onChange,\n openOnFocus = false,\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) => {\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\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] = React.useState(normalizedItems);\n\n const filterListItems = ({ inputValue }: { inputValue: string }) =>\n setListItems(normalizedItems.filter(item => itemFilter(item, inputValue)));\n\n React.useEffect(() => {\n filterListItems({ inputValue });\n }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const stateReducer = React.useCallback(\n (\n _,\n {\n type,\n changes,\n }: UseComboboxStateChangeOptions<NormalizedDropdownItemType>,\n ) => {\n switch (type) {\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur:\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem: {\n filterListItems({ inputValue: '' });\n return {\n ...changes,\n inputValue: '', // reset input value to show placeholder on focus\n };\n }\n case useCombobox.stateChangeTypes.InputChange: {\n const leadingWhitespaceTest = /^\\s+/g;\n if (changes.inputValue?.match(leadingWhitespaceTest))\n setInputValue(\n changes.inputValue.replace(leadingWhitespaceTest, ''),\n );\n else {\n fetchItems(changes.inputValue ?? '');\n filterListItems({ inputValue: changes.inputValue ?? '' });\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 getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n inputValue,\n setInputValue,\n } = useCombobox({\n items: listItems,\n selectedItem: value,\n itemToString,\n stateReducer,\n onStateChange({ type, selectedItem: clickedItem }) {\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 onChange(clickedItem ?? null);\n }\n },\n ...rest,\n });\n\n return (\n <div className=\"eds-dropdown__wrapper\">\n <BaseFormControl\n append={\n <FieldAppend\n selectedItems={[selectedItem]}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onClear={() => {\n onChange(null);\n setInputValue('');\n inputRef.current?.focus();\n if (typeof initialItems === 'function')\n fetchItems(inputValue ?? '');\n }}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n disableLabelAnimation={disableLabelAnimation}\n className={classNames('eds-dropdown', className)}\n label={label}\n isFilled={selectedItem || inputValue !== ''}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n labelProps={getLabelProps()}\n {...getComboboxProps()}\n {...rest}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-dropdown__selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n placeholder={selectedItem?.label ?? placeholder}\n className=\"eds-dropdown__input eds-form-control\"\n {...getInputProps({\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n onBlur: () => {\n setHideSelectedItem(false);\n },\n ref: inputRef,\n })}\n />\n </BaseFormControl>\n <DropdownList\n selectedItems={selectedItem !== null ? [selectedItem] : []}\n isOpen={isOpen}\n listItems={listItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n loading={loading}\n />\n </div>\n );\n};\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","_ref","children","_ref$onChange","onChange","_ref$onInputValueChan","onInputValueChange","_ref$highlightFirstIt","highlightFirstItemOnOpen","className","style","_ref$searchable","searchable","rest","_objectWithoutPropertiesLoose","_excluded","Downshift","_extends","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","highlightFirstItemIndex","isOpen","highlightedIndex","args","classNames","createElement","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","_useDownshift","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","_ref$loading","loading","_ref$loadingText","loadingText","listStyle","clearable","_ref$isFilled","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","_ref2","props","_objectDestructuringEmpty","_useDownshift2","clearSelection","Fragment","onClick","CloseSmallIcon","_ref3","RegularDropdown","forwardRef","ref","disabled","_ref$placeholder","placeholder","_ref$selectOnTab","selectOnTab","_ref$openOnFocus","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","_ref$disabled","_ref$readOnly","prepend","_ref$itemFilter","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","closeMenu","useState","hideSelectedItem","_useState","setHideSelectedItem","inputRef","useRef","filteredItems","useMemo","_inputRef$current","current","focus","onBlur","mergeRefs","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","_React$useReducer","useReducer","_React$useReducer$","dispatch","isMounted","useEffect","fetchItems","useCallback","_regeneratorRuntime","mark","resolvedItems","wrap","_context","prev","next","abrupt","sent","stop","_callee","_x","apply","this","arguments","normalizedItems","useNormalizedItems","debounce","Dropdown","_ref$clearable","_useResolvedItems","undefined","RenderedDropdown","searchAbleProps","name","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","reset","CloseIcon","_ref4","hasSelected","_useMultiSelectContex2","CheckboxIcon","width","height","viewBox","d","fill","selectedItems","listItems","selectAllCheckboxState","selectAllItem","_ref$noMatchesText","noMatchesText","_ref$selectedItemAria","selectedItemAriaLabel","isMultiselect","isNoMatches","itemIsSelected","some","itemIsSelectAll","Checkbox","checked","display","listItemContent","lowerCaseFilterTest","SelectedItemTag","_getSelectedItemProps","getSelectedItemProps","removeSelectedItem","ariaLabelRemoveSelected","selectedItemProps","TagChip","onClose","stopPropagation","closeButtonAriaLabel","FieldAppend","_ref3$loading","_ref3$loadingText","ariaLabelClearItems","clearSelectedItemsLabel","onClear","_ref3$focusable","focusable","ClearableButton","ToggleButton","_ref4$clearSelectedIt","_ref4$ariaLabelClearI","_ref4$focusable","Tooltip","placement","content","IconButton","_ref5","_ref5$closeAriaLabel","closeAriaLabel","_ref5$openAriaLabel","openAriaLabel","_ref5$focusable","warnAboutMissingStyles","_selectedItem$label","initialItems","_ref$readonly","readonly","_ref$selectOnBlur","selectOnBlur","_ref$variant","_useSelect","clickedItem","InputBlur","labelId","id","_ref$initialSelectedI","initialSelectedItems","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","setSelectedItems","isSelected","selectedCheckboxItem","selected","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","_ref$allItemsSelected","allItemsSelectedLabel","_ref$ariaLabelRemoveS","_ref$clearInputOnSele","clearInputOnSelect","_ref$hideSelectAll","hideSelectAll","_ref$maxTags","maxTags","_ref$removeAllItemsAr","removeAllItemsAriaLabel","_ref$selectAllLabel","selectAllLabel","_React$useState","lastHighlightedIndex","setLastHighlightedIndex","isAllNonAsyncItemsSelected","selectAll","summarySelectedItems","setListItems","filterListItems","updateListItems","_useMultiselectUtils","selectAllValue","hasSelectedItems","listItemsWithoutSelectAll","allListItemsAreSelected","includes","someListItemsAreSelected","addClickedItemToSelectedItems","clickedItemIsInSelectedItems","clickedItemIsSelectAll","removeClickedItemFromSelectedItems","selectAllUnselectedItemsInListItems","unselectAllListItems","useMultiselectUtils","_useMultipleSelection","useMultipleSelection","onSelectedItemsChange","_changes$selectedItem","getDropdownProps","_inputRef$current$val","_inputRef$current$val2","_inputRef$current2","_changes$inputValue","useCombobox","InputKeyDownEnter","ControlledPropUpdatedSelectedItem","InputChange","_changes$inputValue$r","match","_useCombobox","defaultHighlightedIndex","setInputValue","handleOnClear","_inputRef$current3","_getComboboxProps","getComboboxProps","comboboxProps","_inputRef$current4","target","currentTarget","role","preventKeyAction","rightSideIcon","nativeDropdownId","_ref$disableLabelAnim","_changes$inputValue2","_changes$inputValue3","leadingWhitespaceTest"],"mappings":"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"}
|