@entur/dropdown 2.0.7 → 2.1.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.
- package/CHANGELOG.md +20 -0
- package/dist/MultiSelect.d.ts +2 -1
- package/dist/dropdown.cjs.development.js +5 -3
- package/dist/dropdown.cjs.development.js.map +1 -1
- package/dist/dropdown.cjs.production.min.js +1 -1
- package/dist/dropdown.cjs.production.min.js.map +1 -1
- package/dist/dropdown.esm.js +6 -4
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +3 -3
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [2.1.0](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.0.10...@entur/dropdown@2.1.0) (2021-10-25)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **multiselect:** add support for initialSelectedItems ([40f14d7](https://bitbucket.org/enturas/design-system/commits/40f14d7ccbba43d1da42834839246d294e289a7f))
|
|
11
|
+
|
|
12
|
+
## [2.0.10](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.0.9...@entur/dropdown@2.0.10) (2021-10-18)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @entur/dropdown
|
|
15
|
+
|
|
16
|
+
## [2.0.9](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.0.8...@entur/dropdown@2.0.9) (2021-09-23)
|
|
17
|
+
|
|
18
|
+
**Note:** Version bump only for package @entur/dropdown
|
|
19
|
+
|
|
20
|
+
## [2.0.8](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.0.7...@entur/dropdown@2.0.8) (2021-09-13)
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
- **dropdown:** change to close small icon if closeable ([96d6e11](https://bitbucket.org/enturas/design-system/commits/96d6e11bc27ed722f9bbb1623691de16612e432c))
|
|
25
|
+
|
|
6
26
|
## [2.0.7](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.0.6...@entur/dropdown@2.0.7) (2021-09-07)
|
|
7
27
|
|
|
8
28
|
### Bug Fixes
|
package/dist/MultiSelect.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ declare type MultiSelectProps = {
|
|
|
48
48
|
clearable?: boolean;
|
|
49
49
|
loading?: boolean;
|
|
50
50
|
style?: React.CSSProperties;
|
|
51
|
-
|
|
51
|
+
initialSelectedItems?: NormalizedDropdownItemType[];
|
|
52
|
+
} & Omit<UseSelectProps<NormalizedDropdownItemType>, 'initialSelectedItem'>;
|
|
52
53
|
export declare const MultiSelect: React.FC<MultiSelectProps>;
|
|
53
54
|
export {};
|
|
@@ -237,7 +237,7 @@ var ClearButton = function ClearButton(_ref2) {
|
|
|
237
237
|
onClick: function onClick() {
|
|
238
238
|
return clearSelection();
|
|
239
239
|
}
|
|
240
|
-
}, props), React__default.createElement(icons.
|
|
240
|
+
}, props), React__default.createElement(icons.CloseSmallIcon, null)), selectedItem && React__default.createElement("div", {
|
|
241
241
|
className: "eds-dropdown__divider"
|
|
242
242
|
}));
|
|
243
243
|
};
|
|
@@ -734,13 +734,15 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
734
734
|
openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
|
|
735
735
|
style = _ref.style,
|
|
736
736
|
listStyle = _ref.listStyle,
|
|
737
|
+
_ref$initialSelectedI = _ref.initialSelectedItems,
|
|
738
|
+
initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
|
|
737
739
|
debounceTimeout = _ref.debounceTimeout,
|
|
738
|
-
rest = _objectWithoutPropertiesLoose(_ref, ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "debounceTimeout"]);
|
|
740
|
+
rest = _objectWithoutPropertiesLoose(_ref, ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"]);
|
|
739
741
|
|
|
740
742
|
var _useResolvedItems = useResolvedItems(input, debounceTimeout),
|
|
741
743
|
items = _useResolvedItems.items;
|
|
742
744
|
|
|
743
|
-
var _useState = React.useState(
|
|
745
|
+
var _useState = React.useState(initialSelectedItems),
|
|
744
746
|
selectedItems = _useState[0],
|
|
745
747
|
setSelectedItems = _useState[1];
|
|
746
748
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.cjs.development.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/useNormalizedItems.ts","../src/useResolvedItems.ts","../src/Dropdown.tsx","../src/NativeDropdown.tsx","../src/MultiSelect.tsx","../src/index.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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 { CloseIcon } 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 <CloseIcon />\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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';\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 = (items: DropdownItemType[]) =>\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 { debounce } from '@entur/utils';\nimport { DropdownItemType, useNormalizedItems } 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: number = 250,\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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","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} & UseSelectProps<NormalizedDropdownItemType>;\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 debounceTimeout,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] = useState<\n NormalizedDropdownItemType[]\n >([]);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","children","onChange","undefined","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","handleStateChange","changes","stateAndHelpers","type","Downshift","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","wasJustOpened","isOpen","highlightedIndex","itemToString","item","label","onStateChange","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","firstCharacter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","LowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","inputRegex","RegExp","test","SearchableDropdown","prepend","itemFilter","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","useNormalizedItems","useIsMounted","isMountedRef","useRef","useEffect","current","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","fetchItems","useCallback","resolvedItems","normalizedItems","debounce","Dropdown","searchable","RenderedDropdown","searchAbleProps","name","NativeDropdown","rightSideIcon","nativeDropdownId","useRandomId","labelId","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","itemsSelectedLabel","SelectedItemsLabel","useState","selectedItems","setSelectedItems","reset","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","hasSelected","includes","display","CheckboxIcon","width","height","viewBox","d","fill","toString","warnAboutMissingStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.cjs.development.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/useNormalizedItems.ts","../src/useResolvedItems.ts","../src/Dropdown.tsx","../src/NativeDropdown.tsx","../src/MultiSelect.tsx","../src/index.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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';\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 = (items: DropdownItemType[]) =>\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 { debounce } from '@entur/utils';\nimport { DropdownItemType, useNormalizedItems } 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: number = 250,\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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","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 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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","children","onChange","undefined","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","handleStateChange","changes","stateAndHelpers","type","Downshift","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","wasJustOpened","isOpen","highlightedIndex","itemToString","item","label","onStateChange","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseSmallIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","firstCharacter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","LowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","inputRegex","RegExp","test","SearchableDropdown","prepend","itemFilter","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","useNormalizedItems","useIsMounted","isMountedRef","useRef","useEffect","current","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","fetchItems","useCallback","resolvedItems","normalizedItems","debounce","Dropdown","searchable","RenderedDropdown","searchAbleProps","name","NativeDropdown","rightSideIcon","nativeDropdownId","useRandomId","labelId","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","itemsSelectedLabel","SelectedItemsLabel","initialSelectedItems","useState","selectedItems","setSelectedItems","reset","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","hasSelected","includes","display","CheckboxIcon","CloseIcon","width","height","viewBox","d","fill","toString","warnAboutMissingStyles"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@entur/utils"),n=require("react"),l=e(n),a=require("downshift"),i=e(a),r=e(require("classnames")),s=require("@entur/form"),o=require("@entur/icons"),c=require("@entur/a11y"),d=require("@entur/loader"),u=require("@entur/tokens");function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e}).apply(this,arguments)}function p(e,t){if(null==e)return{};var n,l,a={},i=Object.keys(e);for(l=0;l<i.length;l++)t.indexOf(n=i[l])>=0||(a[n]=e[n]);return a}var b=l.createContext(null),g=function(e){var t=e.children,n=e.onChange,a=void 0===n?function(){}:n,s=e.onInputValueChange,o=void 0===s?function(){}:s,c=e.highlightFirstItemOnOpen,d=void 0!==c&&c,u=e.className,g=e.style,f=p(e,["children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style"]);return l.createElement(i,Object.assign({itemToString:function(e){return e?e.label:""},onStateChange:function(e,t){e.type!==i.stateChangeTypes.controlledPropUpdatedSelectedItem&&("selectedItem"in e?a(e.selectedItem,t):"inputValue"in e&&o(e.inputValue))},stateReducer:function(e,t){return d&&"isOpen"in t&&t.isOpen?m({},t,{highlightedIndex:0}):t}},f),(function(e){return l.createElement("div",{className:r("eds-input-group",u),style:g},l.createElement(b.Provider,{value:e},t))}))},f=function(){var e=l.useContext(b);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e},v=function(e){var t=e.items,n=p(e,["items"]),a=f(),i=a.highlightedIndex,s=a.isOpen,c=a.selectedItem,d=a.getItemProps,u=a.getMenuProps;return l.createElement("ul",Object.assign({className:r("eds-dropdown-list",{"eds-dropdown-list--open":s})},u(),n),s?t.map((function(e,t){return l.createElement("li",Object.assign({className:r("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":i===t,"eds-dropdown-list__item--selected":c===e})},d({key:""+t+e.value,item:e,index:t})),l.createElement("span",null,e.label),e.icons&&l.createElement("span",null,e.icons.map((function(e,t){return l.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))),c===e&&l.createElement(o.CheckIcon,null))})):null)},h=function(){var e=f();return l.createElement("button",Object.assign({},(0,e.getToggleButtonProps)({className:r("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen})}),{tabIndex:"-1",type:"button"}),l.createElement(o.DownArrowIcon,null))},y=function(e){var t=e.className,n=e.children,a=p(e,["className","children"]);return l.createElement("div",Object.assign({className:r("eds-inline-spinner",t)},a),l.createElement(d.LoadingDots,null),l.createElement(c.VisuallyHidden,null,n))},O=function(e){var t=e.children,n=e.className,a=e.items,i=e.loading,r=void 0!==i&&i,o=e.loadingText,c=void 0===o?"Loading...":o,d=e.style,b=e.listStyle,g=e.clearable,h=e.label,y=e.isFilled,O=void 0!==y&&y,E=e.disableLabelAnimation,w=p(e,["children","className","items","loading","loadingText","placeholder","style","listStyle","clearable","label","isFilled","disableLabelAnimation"]),N=f().getLabelProps;return l.createElement("div",{className:"eds-dropdown-wrapper",style:d},l.createElement(s.BaseFormControl,Object.assign({append:l.createElement(x,{clearable:g,loading:r,loadingText:c,readOnly:w.readOnly}),className:n,label:h,isFilled:O,labelProps:N(),disableLabelAnimation:E},w),t),l.createElement(v,Object.assign({items:a,style:m({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},b)},w)))},E=function(e){var t=m({},e),n=f(),a=n.clearSelection,i=n.selectedItem;return l.createElement(l.Fragment,null,i&&l.createElement("button",Object.assign({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return a()}},t),l.createElement(o.CloseIcon,null)),i&&l.createElement("div",{className:"eds-dropdown__divider"}))},x=function(e){var t=e.clearable,n=e.readOnly;return e.loading?l.createElement(y,null,e.loadingText):n?null:t?l.createElement(l.Fragment,null,l.createElement(E,null)," ",l.createElement(h,null)):l.createElement(h,null)},w=function(e){var t=e.disabled,n=e.placeholder,a=void 0===n?"Vennligst velg":n,i=e.selectOnTab,r=void 0!==i&&i,s=e.openOnFocus,o=void 0!==s&&s,c=e.listStyle,d=e.items,u=e.label,b=e.disableLabelAnimation,g=e.loading,v=e.loadingText,h=e.className,y=e.clearable,E=p(e,["disabled","placeholder","selectOnTab","openOnFocus","listStyle","items","label","disableLabelAnimation","loading","loadingText","className","clearable"]),x=f(),w=x.getToggleButtonProps,N=x.selectedItem,I=x.selectHighlightedItem,_=x.openMenu,T=x.isOpen,F=x.highlightedIndex,S=x.setHighlightedIndex;return l.createElement(O,Object.assign({disabled:t,listStyle:c,items:d,label:u,isFilled:!!N||0!==a.length,disableLabelAnimation:b,loading:g,loadingText:v,className:h,clearable:y},E),l.createElement("button",Object.assign({},w(m({className:"eds-form-control eds-dropdown__selected-item",style:{textAlign:"left"},disabled:t,type:"button",onKeyDown:function(e){if(r&&"Tab"===e.key&&I(),T){var t=e.key,n=d.map((function(e,t){return m({},e,{index:t})})).filter((function(e){return e.label.trim().charAt(0).toLowerCase()===t})),l=n.find((function(e){return e.index>(null!=F?F:0)}));l?S(l.index):n.length>0&&S(n[0].index)}},onFocus:function(){o&&!T&&_()}},E))),N?N.label:a))},N=function(e){var t=e.disabled,n=void 0!==t&&t,a=e.className,i=e.items,r=e.loading,s=e.loadingText,o=e.readOnly,c=void 0!==o&&o,d=e.prepend,u=e.selectOnTab,b=void 0!==u&&u,g=e.openOnFocus,v=void 0!==g&&g,h=e.listStyle,y=e.clearable,E=e.itemFilter,x=void 0===E?function(e,t){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)}:E,w=e.label,N=e.disableLabelAnimation,I=p(e,["disabled","className","items","loading","loadingText","readOnly","prepend","selectOnTab","openOnFocus","listStyle","clearable","itemFilter","label","disableLabelAnimation"]),_=f(),T=_.getInputProps,F=_.inputValue,S=_.selectHighlightedItem,k=_.isOpen,C=_.openMenu,P=_.selectedItem,j=l.useMemo((function(){return i.filter((function(e){return x(e,F)}))}),[F,i,x]);return l.createElement(O,{items:j,disabled:n,readOnly:c,className:a,loading:r,loadingText:s,prepend:d,listStyle:h,clearable:y,label:w,isFilled:!!P,disableLabelAnimation:N},l.createElement("input",Object.assign({},T(m({disabled:n,readOnly:c,className:"eds-form-control eds-dropdown__input",onKeyDown:function(e){b&&"Tab"===e.key&&S()},onFocus:function(){v&&!k&&C()}},I)))))},I=function(e){var t=e.feedback,n=e.variant;return l.createElement(s.VariantProvider,{variant:n},l.createElement("div",{className:e.className,style:e.style},e.children,t&&n&&l.createElement(s.FeedbackText,{variant:n},t)))},_=function(e,t){switch(t.type){case"request results":return{items:[],loading:!0};case"received results":return{items:t.payload,loading:!1}}},T=function(e,n){void 0===n&&(n=250);var a,i="function"==typeof e,r=l.useMemo((function(){return i?e:function(){return Promise.resolve(e)}}),[e,i]),s=l.useReducer(_,{items:i?[]:e,loading:!1}),o=s[0],c=o.items,d=o.loading,u=s[1],p=(a=l.useRef(!0),l.useEffect((function(){return function(){a.current=!1}}),[]),a.current),b=l.useCallback((function(e){try{return p?(u({type:"request results"}),Promise.resolve(r(e)).then((function(e){p&&u({type:"received results",payload:e})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[r,p]),g=function(e){return l.useMemo((function(){return e.map((function(e){return"string"==typeof e?{value:e,label:e}:"value"in e?e:m({},e,{value:e.label})}))}),[e])}(c);return l.useEffect((function(){i&&b("")}),[i,b]),{items:g,loading:!!i&&d,fetchItems:t.debounce(b,n)}},F=l.createContext(null),S=function(){var e=l.useContext(F);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e};function k(e,t){var n=t.changes;switch(t.type){case a.useSelect.stateChangeTypes.MenuKeyDownEnter:case a.useSelect.stateChangeTypes.MenuKeyDownSpaceButton:case a.useSelect.stateChangeTypes.ItemClick:return m({},n,{isOpen:!0,highlightedIndex:e.highlightedIndex});default:return n}}var C=function(e){var t=m({},e),n=S().reset;return l.createElement(l.Fragment,null,l.createElement("button",Object.assign({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return n()}},t),l.createElement(o.CloseIcon,null)),l.createElement("div",{className:"eds-dropdown__divider"}))},P=function(e){var t=e.readOnly,n=e.hasSelected;return e.loading?l.createElement(y,null,e.loadingText):t?null:n?l.createElement(l.Fragment,null,l.createElement(C,null),l.createElement(j,null)):l.createElement(j,null)},j=function(){var e=S(),t=e.openMenu,n=e.openOnFocus;return l.createElement("button",Object.assign({},(0,e.getToggleButtonProps)({className:r("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen}),onFocus:function(){n&&t()}}),{type:"button"}),l.createElement(o.DownArrowIcon,null))},L=function(){return l.createElement("svg",{className:"eds-checkbox-icon",width:"11px",height:"9px",viewBox:"6 11 37 33"},l.createElement("path",{className:"eds-checkbox-icon__path",d:"M14.1 27.2l7.1 7.2 14.6-14.8",fill:"none"}))};t.warnAboutMissingStyles("dropdown","form","a11y","chip"),exports.Dropdown=function(e){var t=e.highlightFirstItemOnOpen,n=e.debounceTimeout,a=e.disabled,i=e.feedback,r=e.items,s=e.label,o=e.loadingText,c=e.onChange,d=void 0===c?function(){}:c,u=e.placeholder,m=e.prepend,b=e.readOnly,f=e.searchable,v=e.selectOnTab,h=e.openOnFocus,y=e.variant,O=e.value,E=e.clearable,x=void 0!==E&&E,_=e.className,F=e.style,S=e.listStyle,k=e.itemFilter,C=e.disableLabelAnimation,P=p(e,["highlightFirstItemOnOpen","debounceTimeout","disabled","feedback","items","label","loadingText","onChange","placeholder","prepend","readOnly","searchable","selectOnTab","openOnFocus","variant","value","clearable","className","style","listStyle","itemFilter","disableLabelAnimation"]),j=T(r,n),L=j.items,A=j.loading,M=j.fetchItems,D=void 0===O?void 0:L.find((function(e){return O===e.value}))||null,q=f?N:w,B=f?{itemFilter:k,name:P.name,"data-cy":P["data-cy"]}:{name:P.name,"data-cy":P["data-cy"]};return l.createElement(g,Object.assign({selectedItem:D,onInputValueChange:M,onChange:d,value:O,highlightFirstItemOnOpen:t,className:_,style:F},P),l.createElement(I,{feedback:i,variant:y},l.createElement(q,Object.assign({label:s,items:L,loading:A,loadingText:o,disabled:a,readOnly:b,placeholder:u,prepend:m,selectOnTab:v,openOnFocus:h,listStyle:S,clearable:x,disableLabelAnimation:C},B))))},exports.MultiSelect=function(e){var i=e.items,o=e.itemsSelectedLabel,c=void 0===o?function(e){return function(e){return e.length<3?e.map((function(e){return e.label})).toString():e.length+" elementer valgt"}(e)}:o,d=e.label,b=e.feedback,g=e.variant,f=e.disabled,v=e.readOnly,h=void 0!==v&&v,y=e.onChange,O=void 0===y?function(){}:y,E=e.className,x=e.clearable,w=void 0!==x&&x,N=e.loading,I=void 0!==N&&N,_=e.loadingText,S=void 0===_?"":_,C=e.openOnFocus,j=void 0!==C&&C,A=e.style,M=e.listStyle,D=e.debounceTimeout,q=p(e,["items","itemsSelectedLabel","label","feedback","variant","disabled","readOnly","onChange","className","clearable","loading","loadingText","openOnFocus","style","listStyle","debounceTimeout"]),B=T(i,D).items,V=n.useState([]),R=V[0],H=V[1],K=l.useCallback((function(){H([])}),[]),Y=a.useSelect(m({items:B,stateReducer:k,selectedItem:null,onSelectedItemChange:function(e){var t=e.selectedItem;if(t){var n=R.indexOf(t);if(n>0){var l=[].concat(R.slice(0,n),R.slice(n+1));H(l),O(l)}else if(0===n){var a=[].concat(R.slice(1));H(a),O(a)}else{var i=[].concat(R,[t]);H(i),O(i)}}}},q)),$=Y.isOpen,U=Y.getToggleButtonProps,z=Y.getLabelProps,G=Y.getMenuProps,J=Y.highlightedIndex,Q=Y.getItemProps,W=Y.openMenu,X=R.length?c(R):"",Z=t.useRandomId("eds-multiselect");return l.createElement(F.Provider,{value:{isOpen:$,reset:K,getToggleButtonProps:U,openMenu:W,openOnFocus:j}},l.createElement("div",{className:r("eds-multiselect","eds-dropdown-wrapper",E),style:A},l.createElement(s.BaseFormControl,{label:d,labelId:Z,labelProps:z(),feedback:b,variant:g,isFilled:R.length>0||$,disabled:f,readOnly:h,append:l.createElement(P,{hasSelected:w&&R.length>0,loading:I,loadingText:S,readOnly:h})},l.createElement("button",Object.assign({},U({style:{textAlign:"left"},type:"button",className:"eds-form-control eds-multiselect__button"})),X)),l.createElement("ul",Object.assign({className:r("eds-dropdown-list",{"eds-dropdown-list--open":$})},G({style:m({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},M)})),$&&B.map((function(e,t){return l.createElement("li",Object.assign({className:r("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":J===t,"eds-dropdown-list__item--selected":R.includes(e)}),key:""+e+t},Q({item:e,index:t}),{style:{display:"flex"}}),l.createElement("span",{style:{display:"flex"}},l.createElement("span",{className:r("eds-multiselect-checkbox",{"eds-multiselect-checkbox--checked":R.includes(e)})},l.createElement(L,null)),l.createElement("span",{className:"eds-multiselect__item-label"},e.label)),e.icons&&l.createElement("span",null,e.icons.map((function(e,t){return l.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))))})))))},exports.NativeDropdown=function(e){var n=e.className,a=e.disabled,i=void 0!==a&&a,r=e.readOnly,c=void 0!==r&&r,d=e.items,u=e.loadingText,m=e.prepend,b=e.style,g=e.label,f=e.variant,v=e.feedback,h=e.disableLabelAnimation,O=p(e,["className","disabled","readOnly","items","loadingText","prepend","style","label","variant","feedback","disableLabelAnimation"]),E=T(d),x=E.items,w=E.loading,N=l.createElement(o.DownArrowIcon,{inline:!0});i||c?N=null:w&&(N=l.createElement(y,null,u));var I=t.useRandomId("eds-native-dropdown");return l.createElement(s.BaseFormControl,{disabled:i,readOnly:c,prepend:m,append:N,className:n,style:b,label:g,variant:f,feedback:v,labelId:I,disableLabelAnimation:h,isFilled:!0},l.createElement("select",Object.assign({"aria-invalid":"error"===f,className:"eds-form-control eds-dropdown",disabled:i||c},O),x.map((function(e){return l.createElement("option",{key:e.value,value:e.value},e.label)}))))};
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@entur/utils"),n=require("react"),l=e(n),a=require("downshift"),i=e(a),r=e(require("classnames")),s=require("@entur/form"),o=require("@entur/icons"),c=require("@entur/a11y"),d=require("@entur/loader"),u=require("@entur/tokens");function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e}).apply(this,arguments)}function p(e,t){if(null==e)return{};var n,l,a={},i=Object.keys(e);for(l=0;l<i.length;l++)t.indexOf(n=i[l])>=0||(a[n]=e[n]);return a}var b=l.createContext(null),g=function(e){var t=e.children,n=e.onChange,a=void 0===n?function(){}:n,s=e.onInputValueChange,o=void 0===s?function(){}:s,c=e.highlightFirstItemOnOpen,d=void 0!==c&&c,u=e.className,g=e.style,f=p(e,["children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style"]);return l.createElement(i,Object.assign({itemToString:function(e){return e?e.label:""},onStateChange:function(e,t){e.type!==i.stateChangeTypes.controlledPropUpdatedSelectedItem&&("selectedItem"in e?a(e.selectedItem,t):"inputValue"in e&&o(e.inputValue))},stateReducer:function(e,t){return d&&"isOpen"in t&&t.isOpen?m({},t,{highlightedIndex:0}):t}},f),(function(e){return l.createElement("div",{className:r("eds-input-group",u),style:g},l.createElement(b.Provider,{value:e},t))}))},f=function(){var e=l.useContext(b);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e},v=function(e){var t=e.items,n=p(e,["items"]),a=f(),i=a.highlightedIndex,s=a.isOpen,c=a.selectedItem,d=a.getItemProps,u=a.getMenuProps;return l.createElement("ul",Object.assign({className:r("eds-dropdown-list",{"eds-dropdown-list--open":s})},u(),n),s?t.map((function(e,t){return l.createElement("li",Object.assign({className:r("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":i===t,"eds-dropdown-list__item--selected":c===e})},d({key:""+t+e.value,item:e,index:t})),l.createElement("span",null,e.label),e.icons&&l.createElement("span",null,e.icons.map((function(e,t){return l.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))),c===e&&l.createElement(o.CheckIcon,null))})):null)},h=function(){var e=f();return l.createElement("button",Object.assign({},(0,e.getToggleButtonProps)({className:r("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen})}),{tabIndex:"-1",type:"button"}),l.createElement(o.DownArrowIcon,null))},y=function(e){var t=e.className,n=e.children,a=p(e,["className","children"]);return l.createElement("div",Object.assign({className:r("eds-inline-spinner",t)},a),l.createElement(d.LoadingDots,null),l.createElement(c.VisuallyHidden,null,n))},O=function(e){var t=e.children,n=e.className,a=e.items,i=e.loading,r=void 0!==i&&i,o=e.loadingText,c=void 0===o?"Loading...":o,d=e.style,b=e.listStyle,g=e.clearable,h=e.label,y=e.isFilled,O=void 0!==y&&y,E=e.disableLabelAnimation,w=p(e,["children","className","items","loading","loadingText","placeholder","style","listStyle","clearable","label","isFilled","disableLabelAnimation"]),I=f().getLabelProps;return l.createElement("div",{className:"eds-dropdown-wrapper",style:d},l.createElement(s.BaseFormControl,Object.assign({append:l.createElement(x,{clearable:g,loading:r,loadingText:c,readOnly:w.readOnly}),className:n,label:h,isFilled:O,labelProps:I(),disableLabelAnimation:E},w),t),l.createElement(v,Object.assign({items:a,style:m({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},b)},w)))},E=function(e){var t=m({},e),n=f(),a=n.clearSelection,i=n.selectedItem;return l.createElement(l.Fragment,null,i&&l.createElement("button",Object.assign({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return a()}},t),l.createElement(o.CloseSmallIcon,null)),i&&l.createElement("div",{className:"eds-dropdown__divider"}))},x=function(e){var t=e.clearable,n=e.readOnly;return e.loading?l.createElement(y,null,e.loadingText):n?null:t?l.createElement(l.Fragment,null,l.createElement(E,null)," ",l.createElement(h,null)):l.createElement(h,null)},w=function(e){var t=e.disabled,n=e.placeholder,a=void 0===n?"Vennligst velg":n,i=e.selectOnTab,r=void 0!==i&&i,s=e.openOnFocus,o=void 0!==s&&s,c=e.listStyle,d=e.items,u=e.label,b=e.disableLabelAnimation,g=e.loading,v=e.loadingText,h=e.className,y=e.clearable,E=p(e,["disabled","placeholder","selectOnTab","openOnFocus","listStyle","items","label","disableLabelAnimation","loading","loadingText","className","clearable"]),x=f(),w=x.getToggleButtonProps,I=x.selectedItem,N=x.selectHighlightedItem,_=x.openMenu,T=x.isOpen,F=x.highlightedIndex,S=x.setHighlightedIndex;return l.createElement(O,Object.assign({disabled:t,listStyle:c,items:d,label:u,isFilled:!!I||0!==a.length,disableLabelAnimation:b,loading:g,loadingText:v,className:h,clearable:y},E),l.createElement("button",Object.assign({},w(m({className:"eds-form-control eds-dropdown__selected-item",style:{textAlign:"left"},disabled:t,type:"button",onKeyDown:function(e){if(r&&"Tab"===e.key&&N(),T){var t=e.key,n=d.map((function(e,t){return m({},e,{index:t})})).filter((function(e){return e.label.trim().charAt(0).toLowerCase()===t})),l=n.find((function(e){return e.index>(null!=F?F:0)}));l?S(l.index):n.length>0&&S(n[0].index)}},onFocus:function(){o&&!T&&_()}},E))),I?I.label:a))},I=function(e){var t=e.disabled,n=void 0!==t&&t,a=e.className,i=e.items,r=e.loading,s=e.loadingText,o=e.readOnly,c=void 0!==o&&o,d=e.prepend,u=e.selectOnTab,b=void 0!==u&&u,g=e.openOnFocus,v=void 0!==g&&g,h=e.listStyle,y=e.clearable,E=e.itemFilter,x=void 0===E?function(e,t){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)}:E,w=e.label,I=e.disableLabelAnimation,N=p(e,["disabled","className","items","loading","loadingText","readOnly","prepend","selectOnTab","openOnFocus","listStyle","clearable","itemFilter","label","disableLabelAnimation"]),_=f(),T=_.getInputProps,F=_.inputValue,S=_.selectHighlightedItem,k=_.isOpen,C=_.openMenu,P=_.selectedItem,j=l.useMemo((function(){return i.filter((function(e){return x(e,F)}))}),[F,i,x]);return l.createElement(O,{items:j,disabled:n,readOnly:c,className:a,loading:r,loadingText:s,prepend:d,listStyle:h,clearable:y,label:w,isFilled:!!P,disableLabelAnimation:I},l.createElement("input",Object.assign({},T(m({disabled:n,readOnly:c,className:"eds-form-control eds-dropdown__input",onKeyDown:function(e){b&&"Tab"===e.key&&S()},onFocus:function(){v&&!k&&C()}},N)))))},N=function(e){var t=e.feedback,n=e.variant;return l.createElement(s.VariantProvider,{variant:n},l.createElement("div",{className:e.className,style:e.style},e.children,t&&n&&l.createElement(s.FeedbackText,{variant:n},t)))},_=function(e,t){switch(t.type){case"request results":return{items:[],loading:!0};case"received results":return{items:t.payload,loading:!1}}},T=function(e,n){void 0===n&&(n=250);var a,i="function"==typeof e,r=l.useMemo((function(){return i?e:function(){return Promise.resolve(e)}}),[e,i]),s=l.useReducer(_,{items:i?[]:e,loading:!1}),o=s[0],c=o.items,d=o.loading,u=s[1],p=(a=l.useRef(!0),l.useEffect((function(){return function(){a.current=!1}}),[]),a.current),b=l.useCallback((function(e){try{return p?(u({type:"request results"}),Promise.resolve(r(e)).then((function(e){p&&u({type:"received results",payload:e})}))):Promise.resolve()}catch(e){return Promise.reject(e)}}),[r,p]),g=function(e){return l.useMemo((function(){return e.map((function(e){return"string"==typeof e?{value:e,label:e}:"value"in e?e:m({},e,{value:e.label})}))}),[e])}(c);return l.useEffect((function(){i&&b("")}),[i,b]),{items:g,loading:!!i&&d,fetchItems:t.debounce(b,n)}},F=l.createContext(null),S=function(){var e=l.useContext(F);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e};function k(e,t){var n=t.changes;switch(t.type){case a.useSelect.stateChangeTypes.MenuKeyDownEnter:case a.useSelect.stateChangeTypes.MenuKeyDownSpaceButton:case a.useSelect.stateChangeTypes.ItemClick:return m({},n,{isOpen:!0,highlightedIndex:e.highlightedIndex});default:return n}}var C=function(e){var t=m({},e),n=S().reset;return l.createElement(l.Fragment,null,l.createElement("button",Object.assign({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return n()}},t),l.createElement(o.CloseIcon,null)),l.createElement("div",{className:"eds-dropdown__divider"}))},P=function(e){var t=e.readOnly,n=e.hasSelected;return e.loading?l.createElement(y,null,e.loadingText):t?null:n?l.createElement(l.Fragment,null,l.createElement(C,null),l.createElement(j,null)):l.createElement(j,null)},j=function(){var e=S(),t=e.openMenu,n=e.openOnFocus;return l.createElement("button",Object.assign({},(0,e.getToggleButtonProps)({className:r("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen}),onFocus:function(){n&&t()}}),{type:"button"}),l.createElement(o.DownArrowIcon,null))},L=function(){return l.createElement("svg",{className:"eds-checkbox-icon",width:"11px",height:"9px",viewBox:"6 11 37 33"},l.createElement("path",{className:"eds-checkbox-icon__path",d:"M14.1 27.2l7.1 7.2 14.6-14.8",fill:"none"}))};t.warnAboutMissingStyles("dropdown","form","a11y","chip"),exports.Dropdown=function(e){var t=e.highlightFirstItemOnOpen,n=e.debounceTimeout,a=e.disabled,i=e.feedback,r=e.items,s=e.label,o=e.loadingText,c=e.onChange,d=void 0===c?function(){}:c,u=e.placeholder,m=e.prepend,b=e.readOnly,f=e.searchable,v=e.selectOnTab,h=e.openOnFocus,y=e.variant,O=e.value,E=e.clearable,x=void 0!==E&&E,_=e.className,F=e.style,S=e.listStyle,k=e.itemFilter,C=e.disableLabelAnimation,P=p(e,["highlightFirstItemOnOpen","debounceTimeout","disabled","feedback","items","label","loadingText","onChange","placeholder","prepend","readOnly","searchable","selectOnTab","openOnFocus","variant","value","clearable","className","style","listStyle","itemFilter","disableLabelAnimation"]),j=T(r,n),L=j.items,A=j.loading,M=j.fetchItems,D=void 0===O?void 0:L.find((function(e){return O===e.value}))||null,q=f?I:w,B=f?{itemFilter:k,name:P.name,"data-cy":P["data-cy"]}:{name:P.name,"data-cy":P["data-cy"]};return l.createElement(g,Object.assign({selectedItem:D,onInputValueChange:M,onChange:d,value:O,highlightFirstItemOnOpen:t,className:_,style:F},P),l.createElement(N,{feedback:i,variant:y},l.createElement(q,Object.assign({label:s,items:L,loading:A,loadingText:o,disabled:a,readOnly:b,placeholder:u,prepend:m,selectOnTab:v,openOnFocus:h,listStyle:S,clearable:x,disableLabelAnimation:C},B))))},exports.MultiSelect=function(e){var i=e.items,o=e.itemsSelectedLabel,c=void 0===o?function(e){return function(e){return e.length<3?e.map((function(e){return e.label})).toString():e.length+" elementer valgt"}(e)}:o,d=e.label,b=e.feedback,g=e.variant,f=e.disabled,v=e.readOnly,h=void 0!==v&&v,y=e.onChange,O=void 0===y?function(){}:y,E=e.className,x=e.clearable,w=void 0!==x&&x,I=e.loading,N=void 0!==I&&I,_=e.loadingText,S=void 0===_?"":_,C=e.openOnFocus,j=void 0!==C&&C,A=e.style,M=e.listStyle,D=e.initialSelectedItems,q=void 0===D?[]:D,B=e.debounceTimeout,V=p(e,["items","itemsSelectedLabel","label","feedback","variant","disabled","readOnly","onChange","className","clearable","loading","loadingText","openOnFocus","style","listStyle","initialSelectedItems","debounceTimeout"]),R=T(i,B).items,H=n.useState(q),K=H[0],Y=H[1],$=l.useCallback((function(){Y([])}),[]),U=a.useSelect(m({items:R,stateReducer:k,selectedItem:null,onSelectedItemChange:function(e){var t=e.selectedItem;if(t){var n=K.indexOf(t);if(n>0){var l=[].concat(K.slice(0,n),K.slice(n+1));Y(l),O(l)}else if(0===n){var a=[].concat(K.slice(1));Y(a),O(a)}else{var i=[].concat(K,[t]);Y(i),O(i)}}}},V)),z=U.isOpen,G=U.getToggleButtonProps,J=U.getLabelProps,Q=U.getMenuProps,W=U.highlightedIndex,X=U.getItemProps,Z=U.openMenu,ee=K.length?c(K):"",te=t.useRandomId("eds-multiselect");return l.createElement(F.Provider,{value:{isOpen:z,reset:$,getToggleButtonProps:G,openMenu:Z,openOnFocus:j}},l.createElement("div",{className:r("eds-multiselect","eds-dropdown-wrapper",E),style:A},l.createElement(s.BaseFormControl,{label:d,labelId:te,labelProps:J(),feedback:b,variant:g,isFilled:K.length>0||z,disabled:f,readOnly:h,append:l.createElement(P,{hasSelected:w&&K.length>0,loading:N,loadingText:S,readOnly:h})},l.createElement("button",Object.assign({},G({style:{textAlign:"left"},type:"button",className:"eds-form-control eds-multiselect__button"})),ee)),l.createElement("ul",Object.assign({className:r("eds-dropdown-list",{"eds-dropdown-list--open":z})},Q({style:m({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},M)})),z&&R.map((function(e,t){return l.createElement("li",Object.assign({className:r("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":W===t,"eds-dropdown-list__item--selected":K.includes(e)}),key:""+e+t},X({item:e,index:t}),{style:{display:"flex"}}),l.createElement("span",{style:{display:"flex"}},l.createElement("span",{className:r("eds-multiselect-checkbox",{"eds-multiselect-checkbox--checked":K.includes(e)})},l.createElement(L,null)),l.createElement("span",{className:"eds-multiselect__item-label"},e.label)),e.icons&&l.createElement("span",null,e.icons.map((function(e,t){return l.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))))})))))},exports.NativeDropdown=function(e){var n=e.className,a=e.disabled,i=void 0!==a&&a,r=e.readOnly,c=void 0!==r&&r,d=e.items,u=e.loadingText,m=e.prepend,b=e.style,g=e.label,f=e.variant,v=e.feedback,h=e.disableLabelAnimation,O=p(e,["className","disabled","readOnly","items","loadingText","prepend","style","label","variant","feedback","disableLabelAnimation"]),E=T(d),x=E.items,w=E.loading,I=l.createElement(o.DownArrowIcon,{inline:!0});i||c?I=null:w&&(I=l.createElement(y,null,u));var N=t.useRandomId("eds-native-dropdown");return l.createElement(s.BaseFormControl,{disabled:i,readOnly:c,prepend:m,append:I,className:n,style:b,label:g,variant:f,feedback:v,labelId:N,disableLabelAnimation:h,isFilled:!0},l.createElement("select",Object.assign({"aria-invalid":"error"===f,className:"eds-form-control eds-dropdown",disabled:i||c},O),x.map((function(e){return l.createElement("option",{key:e.value,value:e.value},e.label)}))))};
|
|
2
2
|
//# sourceMappingURL=dropdown.cjs.production.min.js.map
|
|
@@ -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/MultiSelect.tsx","../src/index.tsx","../src/Dropdown.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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 { CloseIcon } 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 <CloseIcon />\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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 { DropdownItemType, useNormalizedItems } 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: number = 250,\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 = (items: DropdownItemType[]) =>\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, { 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} & UseSelectProps<NormalizedDropdownItemType>;\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 debounceTimeout,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] = useState<\n NormalizedDropdownItemType[]\n >([]);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","Downshift","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","isOpen","highlightedIndex","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","prepend","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","useRef","useEffect","current","fetchItems","useCallback","resolvedItems","normalizedItems","useNormalizedItems","debounce","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","reset","hasSelected","CheckboxIcon","width","height","viewBox","d","fill","searchable","undefined","RenderedDropdown","searchAbleProps","name","itemsSelectedLabel","toString","SelectedItemsLabel","useState","selectedItems","setSelectedItems","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","useRandomId","labelId","includes","display","rightSideIcon","nativeDropdownId"],"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/MultiSelect.tsx","../src/index.tsx","../src/Dropdown.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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 { DropdownItemType, useNormalizedItems } 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: number = 250,\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 = (items: DropdownItemType[]) =>\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, { 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 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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","Downshift","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","isOpen","highlightedIndex","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseSmallIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","prepend","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","useRef","useEffect","current","fetchItems","useCallback","resolvedItems","normalizedItems","useNormalizedItems","debounce","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","reset","CloseIcon","hasSelected","CheckboxIcon","width","height","viewBox","d","fill","searchable","undefined","RenderedDropdown","searchAbleProps","name","itemsSelectedLabel","toString","SelectedItemsLabel","initialSelectedItems","useState","selectedItems","setSelectedItems","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","useRandomId","labelId","includes","display","rightSideIcon","nativeDropdownId"],"mappings":"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"}
|
package/dist/dropdown.esm.js
CHANGED
|
@@ -3,7 +3,7 @@ import React, { useState } from 'react';
|
|
|
3
3
|
import Downshift, { useSelect } from 'downshift';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import { BaseFormControl, VariantProvider, FeedbackText } from '@entur/form';
|
|
6
|
-
import { CheckIcon, DownArrowIcon, CloseIcon } from '@entur/icons';
|
|
6
|
+
import { CheckIcon, DownArrowIcon, CloseSmallIcon, CloseIcon } from '@entur/icons';
|
|
7
7
|
import { VisuallyHidden } from '@entur/a11y';
|
|
8
8
|
import { LoadingDots } from '@entur/loader';
|
|
9
9
|
import { space } from '@entur/tokens';
|
|
@@ -229,7 +229,7 @@ var ClearButton = function ClearButton(_ref2) {
|
|
|
229
229
|
onClick: function onClick() {
|
|
230
230
|
return clearSelection();
|
|
231
231
|
}
|
|
232
|
-
}, props), React.createElement(
|
|
232
|
+
}, props), React.createElement(CloseSmallIcon, null)), selectedItem && React.createElement("div", {
|
|
233
233
|
className: "eds-dropdown__divider"
|
|
234
234
|
}));
|
|
235
235
|
};
|
|
@@ -726,13 +726,15 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
726
726
|
openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
|
|
727
727
|
style = _ref.style,
|
|
728
728
|
listStyle = _ref.listStyle,
|
|
729
|
+
_ref$initialSelectedI = _ref.initialSelectedItems,
|
|
730
|
+
initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
|
|
729
731
|
debounceTimeout = _ref.debounceTimeout,
|
|
730
|
-
rest = _objectWithoutPropertiesLoose(_ref, ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "debounceTimeout"]);
|
|
732
|
+
rest = _objectWithoutPropertiesLoose(_ref, ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"]);
|
|
731
733
|
|
|
732
734
|
var _useResolvedItems = useResolvedItems(input, debounceTimeout),
|
|
733
735
|
items = _useResolvedItems.items;
|
|
734
736
|
|
|
735
|
-
var _useState = useState(
|
|
737
|
+
var _useState = useState(initialSelectedItems),
|
|
736
738
|
selectedItems = _useState[0],
|
|
737
739
|
setSelectedItems = _useState[1];
|
|
738
740
|
|
package/dist/dropdown.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.esm.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/useNormalizedItems.ts","../src/useResolvedItems.ts","../src/Dropdown.tsx","../src/NativeDropdown.tsx","../src/MultiSelect.tsx","../src/index.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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 { CloseIcon } 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 <CloseIcon />\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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';\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 = (items: DropdownItemType[]) =>\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 { debounce } from '@entur/utils';\nimport { DropdownItemType, useNormalizedItems } 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: number = 250,\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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","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} & UseSelectProps<NormalizedDropdownItemType>;\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 debounceTimeout,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] = useState<\n NormalizedDropdownItemType[]\n >([]);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","children","onChange","undefined","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","handleStateChange","changes","stateAndHelpers","type","Downshift","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","wasJustOpened","isOpen","highlightedIndex","itemToString","item","label","onStateChange","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","firstCharacter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","LowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","inputRegex","RegExp","test","SearchableDropdown","prepend","itemFilter","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","useNormalizedItems","useIsMounted","isMountedRef","useRef","useEffect","current","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","fetchItems","useCallback","resolvedItems","normalizedItems","debounce","Dropdown","searchable","RenderedDropdown","searchAbleProps","name","NativeDropdown","rightSideIcon","nativeDropdownId","useRandomId","labelId","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","itemsSelectedLabel","SelectedItemsLabel","useState","selectedItems","setSelectedItems","reset","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","hasSelected","includes","display","CheckboxIcon","width","height","viewBox","d","fill","toString","warnAboutMissingStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.esm.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/useNormalizedItems.ts","../src/useResolvedItems.ts","../src/Dropdown.tsx","../src/NativeDropdown.tsx","../src/MultiSelect.tsx","../src/index.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 [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 ...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 if (highlightFirstItemOnOpen) {\n const wasJustOpened = 'isOpen' in changes && changes.isOpen;\n if (wasJustOpened) {\n return { ...changes, highlightedIndex: 0 };\n }\n }\n return changes;\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> = ({\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 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 >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\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 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 = (item: NormalizedDropdownItemType, inputValue: string | null) =>\n LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n ...rest\n}) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n selectedItem,\n } = useDownshift();\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 <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n />\n </BaseDropdown>\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';\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 = (items: DropdownItemType[]) =>\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 { debounce } from '@entur/utils';\nimport { DropdownItemType, useNormalizedItems } 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: number = 250,\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';\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 /** 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 /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før 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> = ({\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 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 {...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 {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n};\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <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","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 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 index = selectedItems.indexOf(selectedItem);\n if (index > 0) {\n const slicedItemList = [\n ...selectedItems.slice(0, index),\n ...selectedItems.slice(index + 1),\n ];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else if (index === 0) {\n const slicedItemList = [...selectedItems.slice(1)];\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':\n selectedItems.includes(item),\n })}\n key={`${item}${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':\n selectedItems.includes(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 { 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';\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","children","onChange","undefined","onInputValueChange","highlightFirstItemOnOpen","className","style","rest","handleStateChange","changes","stateAndHelpers","type","Downshift","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","wasJustOpened","isOpen","highlightedIndex","itemToString","item","label","onStateChange","args","classNames","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","loading","loadingText","placeholder","listStyle","clearable","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","props","clearSelection","onClick","CloseSmallIcon","RegularDropdown","disabled","selectOnTab","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","firstCharacter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","LowerCaseFilterTest","input","sanitizeEscapeCharacters","replace","inputRegex","RegExp","test","SearchableDropdown","prepend","itemFilter","getInputProps","filteredItems","useMemo","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","useNormalizedItems","useIsMounted","isMountedRef","useRef","useEffect","current","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isItemsFunction","itemsResolver","Promise","resolve","useReducer","dispatch","isMounted","fetchItems","useCallback","resolvedItems","normalizedItems","debounce","Dropdown","searchable","RenderedDropdown","searchAbleProps","name","NativeDropdown","rightSideIcon","nativeDropdownId","useRandomId","labelId","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","itemsSelectedLabel","SelectedItemsLabel","initialSelectedItems","useState","selectedItems","setSelectedItems","reset","onSelectedItemChange","indexOf","slicedItemList","slice","buttonText","multiSelectId","hasSelected","includes","display","CheckboxIcon","CloseIcon","width","height","viewBox","d","fill","toString","warnAboutMissingStyles"],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -216,7 +216,7 @@
|
|
|
216
216
|
.eds-dropdown__clear-button:focus {
|
|
217
217
|
outline-offset: 0.125rem;
|
|
218
218
|
outline: none;
|
|
219
|
-
box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.
|
|
219
|
+
box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.25rem #181c56;
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
.eds-dropdown__divider {
|
|
@@ -249,8 +249,8 @@
|
|
|
249
249
|
.eds-dropdown__toggle-button:focus {
|
|
250
250
|
outline-offset: 0.125rem;
|
|
251
251
|
outline: none;
|
|
252
|
-
box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.
|
|
252
|
+
box-shadow: 0 0 0 0.125rem #ffffff, 0 0 0 0.25rem #181c56;
|
|
253
253
|
}
|
|
254
254
|
.eds-contrast .eds-dropdown__toggle-button:focus {
|
|
255
|
-
box-shadow: 0 0 0 0.125rem #181c56, 0 0 0 0.
|
|
255
|
+
box-shadow: 0 0 0 0.125rem #181c56, 0 0 0 0.25rem #ffffff;
|
|
256
256
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@entur/dropdown",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"license": "EUPL-1.2",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/dropdown.esm.js",
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
"react-dom": ">=16.8.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@entur/a11y": "^0.2.
|
|
31
|
-
"@entur/chip": "^0.4.
|
|
32
|
-
"@entur/form": "^5.
|
|
33
|
-
"@entur/icons": "^3.
|
|
34
|
-
"@entur/loader": "^0.4.
|
|
35
|
-
"@entur/tokens": "^3.2.
|
|
36
|
-
"@entur/tooltip": "^2.4.
|
|
30
|
+
"@entur/a11y": "^0.2.40",
|
|
31
|
+
"@entur/chip": "^0.4.18",
|
|
32
|
+
"@entur/form": "^5.1.3",
|
|
33
|
+
"@entur/icons": "^3.3.0",
|
|
34
|
+
"@entur/loader": "^0.4.3",
|
|
35
|
+
"@entur/tokens": "^3.2.1",
|
|
36
|
+
"@entur/tooltip": "^2.4.26",
|
|
37
37
|
"@entur/utils": "^0.4.2",
|
|
38
38
|
"classnames": "^2.3.1",
|
|
39
39
|
"downshift": "^6.1.7"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "aad3a1c1996dd2f48dbc9c93b646d95007fdae4b"
|
|
42
42
|
}
|