@entur/dropdown 3.0.36 → 4.0.0-RC.0
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.
|
@@ -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/DropdownList.tsx","../src/beta/SearchableDropdown.tsx","../src/index.tsx","../src/NativeDropdown.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 {...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, fetchItems]);\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<UseSelectProps<NormalizedDropdownItemType>, 'initialSelectedItem'>;\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n feedback,\n variant,\n disabled,\n readOnly = false,\n onChange = () => undefined,\n className,\n clearable = false,\n loading = false,\n loadingText = '',\n openOnFocus = false,\n style,\n listStyle,\n initialSelectedItems = [],\n debounceTimeout,\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 { CheckIcon } from '@entur/icons';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\n\ntype DropdownListProps = {\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n filteredItems: 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 [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItem,\n isOpen,\n getMenuProps,\n getItemProps,\n filteredItems,\n highlightedIndex,\n listStyle,\n ...rest\n}: DropdownListProps) => {\n return (\n <ul\n className={classNames('eds-searchable-dropdown__list', {\n 'eds-searchable-dropdown__list--open': isOpen,\n })}\n {...getMenuProps()}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen\n ? filteredItems.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-searchable-dropdown__list__item', {\n 'eds-searchable-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-searchable-dropdown__list__item--selected':\n selectedItem?.value === item.value,\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-searchable-dropdown__list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem?.value === item.value && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React, { useRef, useState } from 'react';\nimport { useCombobox, UseComboboxGetToggleButtonPropsOptions } from 'downshift';\nimport classNames from 'classnames';\n\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { IconButton } from '@entur/button';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport { DropdownList } from './DropdownList';\n\nimport './dropdown.scss';\n\nfunction 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 type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: NormalizedDropdownItemType[];\n /** Valgt element. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\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 /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: 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 [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 items,\n selectedItem: value,\n onChange,\n label,\n placeholder,\n clearable = false,\n openOnFocus = false,\n readonly = false,\n feedback,\n variant = 'info',\n className,\n listStyle,\n ...rest\n}: SearchableDropdownProps) => {\n const [filteredItems, setFilteredItems] = React.useState(items);\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const stateReducer = React.useCallback((_, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\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 return {\n ...changes,\n // reset input value to show placeholder on focus\n ...(changes.selectedItem && {\n inputValue: '',\n }),\n };\n default:\n return changes;\n }\n }, []);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n openMenu,\n inputValue,\n } = useCombobox({\n onInputValueChange({ inputValue }) {\n setFilteredItems(\n items.filter(item => lowerCaseFilterTest(item, inputValue)),\n );\n },\n items: filteredItems,\n itemToString(item) {\n if (item) return item.value;\n return '';\n },\n stateReducer,\n selectedItem: value,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) =>\n onChange(newSelectedItem ?? null),\n ...rest,\n });\n\n return (\n <div className=\"eds-searchable-dropdown__wrapper\">\n <BaseFormControl\n append={\n <Appendix\n selectedItem={selectedItem}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onChange={onChange}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-searchable-dropdown', className)}\n label={label}\n isFilled={selectedItem ? true : false}\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-searchable-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-searchable-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-searchable-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 selectedItem={selectedItem}\n isOpen={isOpen}\n filteredItems={filteredItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n />\n </div>\n );\n};\n\nconst Appendix: React.FC<{\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n onChange: (value: NormalizedDropdownItemType | null) => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItem,\n isOpen,\n onChange,\n}) => {\n // TODO implement loading / async\n // if (loading) {\n // return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n // }\n if (readOnly) {\n return null;\n }\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {clearable && selectedItem && (\n <>\n <IconButton\n className=\"eds-searchable-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => onChange(null)}\n >\n <CloseSmallIcon />\n </IconButton>\n <div className=\"eds-searchable-dropdown-appendix__divider\" />\n </>\n )}\n <IconButton\n {...getToggleButtonProps({\n className: classNames(\n 'eds-searchable-dropdown-appendix__toggle-button',\n {\n 'eds-searchable-dropdown-appendix__toggle-button--open': isOpen,\n },\n ),\n })}\n tabIndex={-1}\n type=\"button\"\n >\n <DownArrowIcon />\n </IconButton>\n </div>\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","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 = <DownArrowIcon inline={true} />;\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\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 variant={variant}\n feedback={feedback}\n labelId={nativeDropdownId}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'error'}\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"],"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","display","alignItems","IconButton","warnAboutMissingStyles","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","_ref$initialSelectedI","initialSelectedItems","selectedItems","setSelectedItems","isSelected","selectedCheckboxItem","some","selected","_useSelect","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","labelId","rightSideIcon","nativeDropdownId","_selectedItem$label","_ref$readonly","readonly","_ref$variant","_React$useState","setFilteredItems","useCombobox","InputKeyDownEnter","InputBlur","ControlledPropUpdatedSelectedItem","_useCombobox","lowerCaseFilterTest","newSelectedItem","getComboboxProps"],"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/DropdownList.tsx","../src/beta/SearchableDropdown.tsx","../src/index.tsx","../src/NativeDropdown.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 {...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, fetchItems]);\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 items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n feedback,\n variant,\n disabled,\n readOnly = false,\n onChange = () => undefined,\n className,\n clearable = false,\n loading = false,\n loadingText = '',\n openOnFocus = false,\n style,\n listStyle,\n initialSelectedItems = [],\n debounceTimeout,\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 { CheckIcon } from '@entur/icons';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\n\ntype DropdownListProps = {\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n filteredItems: 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 [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItem,\n isOpen,\n getMenuProps,\n getItemProps,\n filteredItems,\n highlightedIndex,\n listStyle,\n ...rest\n}: DropdownListProps) => {\n return (\n <ul\n className={classNames('eds-searchable-dropdown__list', {\n 'eds-searchable-dropdown__list--open': isOpen,\n })}\n {...getMenuProps()}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen\n ? filteredItems.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-searchable-dropdown__list__item', {\n 'eds-searchable-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-searchable-dropdown__list__item--selected':\n selectedItem?.value === item.value,\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-searchable-dropdown__list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem?.value === item.value && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React, { useRef, useState } from 'react';\nimport { useCombobox, UseComboboxGetToggleButtonPropsOptions } from 'downshift';\nimport classNames from 'classnames';\n\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { IconButton } from '@entur/button';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport { DropdownList } from './DropdownList';\n\nimport './dropdown.scss';\n\nfunction 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 type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: NormalizedDropdownItemType[];\n /** Valgt element. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\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 /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: 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 [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 items,\n selectedItem: value,\n onChange,\n label,\n placeholder,\n clearable = false,\n openOnFocus = false,\n readonly = false,\n feedback,\n variant = 'info',\n className,\n listStyle,\n ...rest\n}: SearchableDropdownProps) => {\n const [filteredItems, setFilteredItems] = React.useState(items);\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const stateReducer = React.useCallback((_, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\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 return {\n ...changes,\n // reset input value to show placeholder on focus\n ...(changes.selectedItem && {\n inputValue: '',\n }),\n };\n default:\n return changes;\n }\n }, []);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n openMenu,\n inputValue,\n } = useCombobox({\n onInputValueChange({ inputValue }) {\n setFilteredItems(\n items.filter(item => lowerCaseFilterTest(item, inputValue)),\n );\n },\n items: filteredItems,\n itemToString(item) {\n if (item) return item.value;\n return '';\n },\n stateReducer,\n selectedItem: value,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) =>\n onChange(newSelectedItem ?? null),\n ...rest,\n });\n\n return (\n <div className=\"eds-searchable-dropdown__wrapper\">\n <BaseFormControl\n append={\n <Appendix\n selectedItem={selectedItem}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onChange={onChange}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-searchable-dropdown', className)}\n label={label}\n isFilled={selectedItem ? true : false}\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-searchable-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-searchable-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-searchable-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 selectedItem={selectedItem}\n isOpen={isOpen}\n filteredItems={filteredItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n />\n </div>\n );\n};\n\nconst Appendix: React.FC<{\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n onChange: (value: NormalizedDropdownItemType | null) => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItem,\n isOpen,\n onChange,\n}) => {\n // TODO implement loading / async\n // if (loading) {\n // return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n // }\n if (readOnly) {\n return null;\n }\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {clearable && selectedItem && (\n <>\n <IconButton\n className=\"eds-searchable-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => onChange(null)}\n >\n <CloseSmallIcon />\n </IconButton>\n <div className=\"eds-searchable-dropdown-appendix__divider\" />\n </>\n )}\n <IconButton\n {...getToggleButtonProps({\n className: classNames(\n 'eds-searchable-dropdown-appendix__toggle-button',\n {\n 'eds-searchable-dropdown-appendix__toggle-button--open': isOpen,\n },\n ),\n })}\n tabIndex={-1}\n type=\"button\"\n >\n <DownArrowIcon />\n </IconButton>\n </div>\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","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 = <DownArrowIcon inline={true} />;\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\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 variant={variant}\n feedback={feedback}\n labelId={nativeDropdownId}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'error'}\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"],"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","display","alignItems","IconButton","warnAboutMissingStyles","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","_ref$initialSelectedI","initialSelectedItems","selectedItems","setSelectedItems","isSelected","selectedCheckboxItem","some","selected","_useSelect","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","labelId","rightSideIcon","nativeDropdownId","_selectedItem$label","_ref$readonly","readonly","_ref$variant","_React$useState","setFilteredItems","useCombobox","InputKeyDownEnter","InputBlur","ControlledPropUpdatedSelectedItem","_useCombobox","lowerCaseFilterTest","newSelectedItem","getComboboxProps"],"mappings":"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"}
|