@entur/dropdown 2.1.2 → 2.2.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 +12 -0
- package/dist/DownshiftProvider.d.ts +1 -0
- package/dist/SearchableDropdown.d.ts +1 -0
- package/dist/dropdown.cjs.development.js +38 -14
- 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 +38 -14
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +74 -65
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
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.2.0](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.1.2...@entur/dropdown@2.2.0) (2022-01-05)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **searchable:** adjust position of selected item ([0abed8d](https://bitbucket.org/enturas/design-system/commits/0abed8d3767dead4161d915a71ad94a8f64f600a))
|
|
11
|
+
- **searchable:** align selectedItem with input field ([527e4f4](https://bitbucket.org/enturas/design-system/commits/527e4f4afea961a0f877e81a5b92f4ec0d44f97c))
|
|
12
|
+
- **searchable:** hide placeholder if item is selected ([933a6cb](https://bitbucket.org/enturas/design-system/commits/933a6cb1b4f84346d737b23f36fc9c4252e7ea46))
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- **searchable:** improve usability of searchable dropdown ([eb3038f](https://bitbucket.org/enturas/design-system/commits/eb3038fb6fc6db7a55d3cc65541ab1d40a6e87af))
|
|
17
|
+
|
|
6
18
|
## [2.1.2](https://bitbucket.org/enturas/design-system/compare/@entur/dropdown@2.1.1...@entur/dropdown@2.1.2) (2021-12-10)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @entur/dropdown
|
|
@@ -9,6 +9,7 @@ export declare type DownshiftProviderProps = {
|
|
|
9
9
|
highlightFirstItemOnOpen?: boolean;
|
|
10
10
|
className?: string;
|
|
11
11
|
style?: React.CSSProperties;
|
|
12
|
+
searchable?: boolean;
|
|
12
13
|
[key: string]: any;
|
|
13
14
|
};
|
|
14
15
|
export declare const DownshiftProvider: React.FC<DownshiftProviderProps>;
|
|
@@ -64,7 +64,9 @@ var DownshiftProvider = function DownshiftProvider(_ref) {
|
|
|
64
64
|
highlightFirstItemOnOpen = _ref$highlightFirstIt === void 0 ? false : _ref$highlightFirstIt,
|
|
65
65
|
className = _ref.className,
|
|
66
66
|
style = _ref.style,
|
|
67
|
-
|
|
67
|
+
_ref$searchable = _ref.searchable,
|
|
68
|
+
searchable = _ref$searchable === void 0 ? false : _ref$searchable,
|
|
69
|
+
rest = _objectWithoutPropertiesLoose(_ref, ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"]);
|
|
68
70
|
|
|
69
71
|
var handleStateChange = function handleStateChange(changes, stateAndHelpers) {
|
|
70
72
|
if (changes.type === Downshift__default.stateChangeTypes.controlledPropUpdatedSelectedItem) {
|
|
@@ -79,17 +81,34 @@ var DownshiftProvider = function DownshiftProvider(_ref) {
|
|
|
79
81
|
};
|
|
80
82
|
|
|
81
83
|
var stateReducer = function stateReducer(_, changes) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
var highlightFirstOnOpen = highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;
|
|
85
|
+
var highlightFirstItemIndex = highlightFirstOnOpen ? {
|
|
86
|
+
highlightedIndex: 0
|
|
87
|
+
} : {};
|
|
88
|
+
|
|
89
|
+
if (searchable) {
|
|
90
|
+
var type = changes.type;
|
|
91
|
+
|
|
92
|
+
switch (type) {
|
|
93
|
+
case '__autocomplete_change_input__':
|
|
94
|
+
return _extends({}, changes, highlightFirstItemIndex);
|
|
95
|
+
|
|
96
|
+
case '__autocomplete_click_item__':
|
|
97
|
+
case '__autocomplete_keydown_enter__':
|
|
98
|
+
case '__autocomplete_blur_input__':
|
|
99
|
+
case '__autocomplete_mouseup__':
|
|
100
|
+
return _extends({}, changes, {
|
|
101
|
+
// if we had an item highlighted in the previous state.
|
|
102
|
+
// we will reset input field value to blank
|
|
103
|
+
inputValue: ''
|
|
104
|
+
}, highlightFirstItemIndex);
|
|
105
|
+
|
|
106
|
+
default:
|
|
107
|
+
return _extends({}, changes, highlightFirstItemIndex);
|
|
89
108
|
}
|
|
109
|
+
} else {
|
|
110
|
+
return _extends({}, changes, highlightFirstItemIndex);
|
|
90
111
|
}
|
|
91
|
-
|
|
92
|
-
return changes;
|
|
93
112
|
};
|
|
94
113
|
|
|
95
114
|
return React__default.createElement(Downshift__default, Object.assign({
|
|
@@ -370,7 +389,8 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
370
389
|
} : _ref$itemFilter,
|
|
371
390
|
label = _ref.label,
|
|
372
391
|
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
373
|
-
|
|
392
|
+
placeholder = _ref.placeholder,
|
|
393
|
+
rest = _objectWithoutPropertiesLoose(_ref, ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"]);
|
|
374
394
|
|
|
375
395
|
var _useDownshift = useDownshift(),
|
|
376
396
|
getInputProps = _useDownshift.getInputProps,
|
|
@@ -398,7 +418,9 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
398
418
|
label: label,
|
|
399
419
|
isFilled: selectedItem ? true : false,
|
|
400
420
|
disableLabelAnimation: disableLabelAnimation
|
|
401
|
-
}, React__default.createElement("
|
|
421
|
+
}, selectedItem && !inputValue && React__default.createElement("span", {
|
|
422
|
+
className: "eds-dropdown__searchable-selected-item"
|
|
423
|
+
}, selectedItem.label), React__default.createElement("input", Object.assign({}, getInputProps(_extends({
|
|
402
424
|
disabled: disabled,
|
|
403
425
|
readOnly: readOnly,
|
|
404
426
|
className: 'eds-form-control eds-dropdown__input',
|
|
@@ -411,7 +433,8 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
411
433
|
if (openOnFocus) {
|
|
412
434
|
!isOpen && openMenu();
|
|
413
435
|
}
|
|
414
|
-
}
|
|
436
|
+
},
|
|
437
|
+
placeholder: selectedItem ? undefined : placeholder
|
|
415
438
|
}, rest)))));
|
|
416
439
|
};
|
|
417
440
|
|
|
@@ -599,7 +622,8 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
599
622
|
value: value,
|
|
600
623
|
highlightFirstItemOnOpen: highlightFirstItemOnOpen,
|
|
601
624
|
className: className,
|
|
602
|
-
style: style
|
|
625
|
+
style: style,
|
|
626
|
+
searchable: searchable
|
|
603
627
|
}, rest), React__default.createElement(DropdownInputGroup, {
|
|
604
628
|
feedback: feedback,
|
|
605
629
|
variant: variant
|
|
@@ -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 { 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
|
+
{"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 searchable?: boolean;\n [key: string]: any;\n};\nexport const DownshiftProvider: React.FC<DownshiftProviderProps> = ({\n children,\n onChange = () => undefined,\n onInputValueChange = () => undefined,\n highlightFirstItemOnOpen = false,\n className,\n style,\n searchable = false,\n ...rest\n}) => {\n const handleStateChange = (\n changes: any,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => {\n if (\n changes.type ===\n Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem\n ) {\n return;\n }\n if ('selectedItem' in changes) {\n onChange(changes.selectedItem, stateAndHelpers);\n } else if ('inputValue' in changes) {\n onInputValueChange(changes.inputValue);\n }\n };\n\n const stateReducer = (\n _: DownshiftState<NormalizedDropdownItemType>,\n changes: StateChangeOptions<NormalizedDropdownItemType>,\n ): Partial<StateChangeOptions<NormalizedDropdownItemType>> => {\n const highlightFirstOnOpen =\n highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;\n const highlightFirstItemIndex: Partial<\n StateChangeOptions<NormalizedDropdownItemType>\n > = highlightFirstOnOpen ? { highlightedIndex: 0 } : {};\n\n if (searchable) {\n const { type } = changes;\n\n switch (type) {\n case '__autocomplete_change_input__':\n return {\n // return normal changes.\n ...changes,\n ...highlightFirstItemIndex,\n };\n case '__autocomplete_click_item__':\n case '__autocomplete_keydown_enter__':\n case '__autocomplete_blur_input__':\n case '__autocomplete_mouseup__':\n return {\n ...changes,\n // if we had an item highlighted in the previous state.\n // we will reset input field value to blank\n inputValue: '',\n ...highlightFirstItemIndex,\n };\n default:\n return {\n ...changes,\n ...highlightFirstItemIndex,\n };\n }\n } else {\n return { ...changes, ...highlightFirstItemIndex };\n }\n };\n\n return (\n <Downshift\n itemToString={item => (item ? item.label : '')}\n onStateChange={handleStateChange}\n stateReducer={stateReducer}\n {...rest}\n >\n {args => (\n <div className={classNames('eds-input-group', className)} style={style}>\n {/* This div is required by Downshift */}\n <DownshiftContext.Provider value={args}>\n {children}\n </DownshiftContext.Provider>\n </div>\n )}\n </Downshift>\n );\n};\n\nexport const useDownshift: () => ControllerStateAndHelpers<NormalizedDropdownItemType> =\n () => {\n const context = React.useContext(DownshiftContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { CheckIcon } from '@entur/icons';\nimport './DropdownList.scss';\n\nexport type DropdownListProps = {\n items: NormalizedDropdownItemType[];\n [key: string]: any;\n};\n\nexport const DropdownList: React.FC<DropdownListProps> = ({\n items,\n ...rest\n}) => {\n const { highlightedIndex, isOpen, selectedItem, getItemProps, getMenuProps } =\n useDownshift();\n\n return (\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps()}\n {...rest}\n >\n {isOpen\n ? items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': selectedItem === item,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem === item && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useDownshift } from './DownshiftProvider';\nimport './DropdownToggleButton.scss';\n\nexport const DropdownToggleButton: () => JSX.Element = () => {\n const { getToggleButtonProps, isOpen } = useDownshift();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n })}\n tabIndex=\"-1\"\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { VisuallyHidden } from '@entur/a11y';\nimport { LoadingDots } from '@entur/loader';\nimport './InlineSpinner.scss';\n\nexport type InlineSpinnerType = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjermlesere */\n children: string;\n [key: string]: any;\n};\nexport const DropdownLoadingDots: React.FC<InlineSpinnerType> = ({\n className,\n children,\n ...rest\n}) => (\n <div className={classNames('eds-inline-spinner', className)} {...rest}>\n <LoadingDots />\n <VisuallyHidden>{children}</VisuallyHidden>\n </div>\n);\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { DropdownList } from './DropdownList';\nimport { DropdownToggleButton } from './DropdownToggleButton';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { CloseSmallIcon } from '@entur/icons';\nimport './BaseDropdown.scss';\nimport { useDownshift } from './DownshiftProvider';\nimport { space } from '@entur/tokens';\n\ntype BaseDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n style?: { [key: string]: any };\n listStyle?: { [key: string]: any };\n isFilled?: boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\nexport const BaseDropdown: React.FC<BaseDropdownProps> = ({\n children,\n className,\n items,\n loading = false,\n loadingText = 'Loading...',\n //eslint-disable-next-line\n placeholder,\n style,\n listStyle,\n clearable,\n label,\n isFilled = false,\n disableLabelAnimation,\n ...rest\n}) => {\n const { getLabelProps } = useDownshift();\n return (\n <div className=\"eds-dropdown-wrapper\" style={style}>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <BaseFormControl\n append={\n <Appendix\n clearable={clearable}\n loading={loading}\n loadingText={loadingText}\n readOnly={...rest.readOnly}\n />\n }\n className={className}\n label={label}\n isFilled={isFilled}\n labelProps={getLabelProps()}\n disableLabelAnimation={disableLabelAnimation}\n {...rest}\n >\n {children}\n </BaseFormControl>\n <DropdownList\n items={items}\n style={{\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n }}\n {...rest}\n />\n </div>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { clearSelection, selectedItem } = useDownshift();\n return (\n <>\n {selectedItem && (\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => clearSelection()}\n {...props}\n >\n <CloseSmallIcon />\n </button>\n )}\n {selectedItem && <div className=\"eds-dropdown__divider\"></div>}\n </>\n );\n};\n\nconst Appendix: React.FC<{\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n}> = ({ clearable, loading, loadingText, readOnly }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return clearable ? (\n <>\n <ClearButton></ClearButton> <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { BaseDropdown } from './BaseDropdown';\n\ntype RegularDropdownProps = {\n items: NormalizedDropdownItemType[];\n disabled?: boolean;\n placeholder?: string;\n loading?: boolean;\n loadingText?: string;\n className?: string;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n disableLabelAnimation?: boolean;\n clearable?: boolean;\n [key: string]: any;\n};\nexport const RegularDropdown: React.FC<RegularDropdownProps> = ({\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';\nimport './SearchableDropdown.scss';\n\ntype SearchableDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n prepend?: React.ReactNode;\n readOnly?: boolean;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n clearable: boolean;\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nfunction LowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | null,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport const SearchableDropdown: React.FC<SearchableDropdownProps> = ({\n 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 placeholder,\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 {selectedItem && !inputValue && (\n <span className=\"eds-dropdown__searchable-selected-item\">\n {selectedItem.label}\n </span>\n )}\n <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n placeholder: selectedItem ? undefined : placeholder,\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 searchable={searchable}\n {...rest}\n >\n <DropdownInputGroup feedback={feedback} variant={variant}>\n <RenderedDropdown\n label={label}\n items={normalizedItems}\n loading={loading}\n loadingText={loadingText}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n prepend={prepend}\n selectOnTab={selectOnTab}\n openOnFocus={openOnFocus}\n listStyle={listStyle}\n clearable={clearable}\n disableLabelAnimation={disableLabelAnimation}\n {...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","searchable","rest","handleStateChange","changes","stateAndHelpers","type","Downshift","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","highlightFirstOnOpen","isOpen","highlightFirstItemIndex","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","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"]),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)}))))};
|
|
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=e.searchable,h=void 0!==f&&f,v=p(e,["children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style","searchable"]);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){var n=d&&"isOpen"in t&&t.isOpen?{highlightedIndex:0}:{};if(!h)return m({},t,n);switch(t.type){case"__autocomplete_change_input__":return m({},t,n);case"__autocomplete_click_item__":case"__autocomplete_keydown_enter__":case"__autocomplete_blur_input__":case"__autocomplete_mouseup__":return m({},t,{inputValue:""},n);default:return m({},t,n)}}},v),(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},h=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)},v=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,v=e.label,y=e.isFilled,O=void 0!==y&&y,E=e.disableLabelAnimation,x=p(e,["children","className","items","loading","loadingText","placeholder","style","listStyle","clearable","label","isFilled","disableLabelAnimation"]),w=f().getLabelProps;return l.createElement("div",{className:"eds-dropdown-wrapper",style:d},l.createElement(s.BaseFormControl,Object.assign({append:l.createElement(_,{clearable:g,loading:r,loadingText:c,readOnly:x.readOnly}),className:n,label:v,isFilled:O,labelProps:w(),disableLabelAnimation:E},x),t),l.createElement(h,Object.assign({items:a,style:m({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},b)},x)))},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"}))},_=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(v,null)):l.createElement(v,null)},x=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,h=e.loadingText,v=e.className,y=e.clearable,E=p(e,["disabled","placeholder","selectOnTab","openOnFocus","listStyle","items","label","disableLabelAnimation","loading","loadingText","className","clearable"]),_=f(),x=_.getToggleButtonProps,w=_.selectedItem,I=_.selectHighlightedItem,N=_.openMenu,T=_.isOpen,F=_.highlightedIndex,S=_.setHighlightedIndex;return l.createElement(O,Object.assign({disabled:t,listStyle:c,items:d,label:u,isFilled:!!w||0!==a.length,disableLabelAnimation:b,loading:g,loadingText:h,className:v,clearable:y},E),l.createElement("button",Object.assign({},x(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&&N()}},E))),w?w.label:a))},w=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,h=void 0!==g&&g,v=e.listStyle,y=e.clearable,E=e.itemFilter,_=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,x=e.label,w=e.disableLabelAnimation,I=e.placeholder,N=p(e,["disabled","className","items","loading","loadingText","readOnly","prepend","selectOnTab","openOnFocus","listStyle","clearable","itemFilter","label","disableLabelAnimation","placeholder"]),T=f(),F=T.getInputProps,S=T.inputValue,k=T.selectHighlightedItem,C=T.isOpen,P=T.openMenu,j=T.selectedItem,L=l.useMemo((function(){return i.filter((function(e){return _(e,S)}))}),[S,i,_]);return l.createElement(O,{items:L,disabled:n,readOnly:c,className:a,loading:r,loadingText:s,prepend:d,listStyle:v,clearable:y,label:x,isFilled:!!j,disableLabelAnimation:w},j&&!S&&l.createElement("span",{className:"eds-dropdown__searchable-selected-item"},j.label),l.createElement("input",Object.assign({},F(m({disabled:n,readOnly:c,className:"eds-form-control eds-dropdown__input",onKeyDown:function(e){b&&"Tab"===e.key&&k()},onFocus:function(){h&&!C&&P()},placeholder:j?void 0:I},N)))))},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)))},N=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(N,{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,h=e.selectOnTab,v=e.openOnFocus,y=e.variant,O=e.value,E=e.clearable,_=void 0!==E&&E,N=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?w:x,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:N,style:F,searchable: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:h,openOnFocus:v,listStyle:S,clearable:_,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,h=e.readOnly,v=void 0!==h&&h,y=e.onChange,O=void 0===y?function(){}:y,E=e.className,_=e.clearable,x=void 0!==_&&_,w=e.loading,I=void 0!==w&&w,N=e.loadingText,S=void 0===N?"":N,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:v,append:l.createElement(P,{hasSelected:x&&K.length>0,loading:I,loadingText:S,readOnly:v})},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,h=e.feedback,v=e.disableLabelAnimation,O=p(e,["className","disabled","readOnly","items","loadingText","prepend","style","label","variant","feedback","disableLabelAnimation"]),E=T(d),_=E.items,x=E.loading,w=l.createElement(o.DownArrowIcon,{inline:!0});i||c?w=null:x&&(w=l.createElement(y,null,u));var I=t.useRandomId("eds-native-dropdown");return l.createElement(s.BaseFormControl,{disabled:i,readOnly:c,prepend:m,append:w,className:n,style:b,label:g,variant:f,feedback:h,labelId:I,disableLabelAnimation:v,isFilled:!0},l.createElement("select",Object.assign({"aria-invalid":"error"===f,className:"eds-form-control eds-dropdown",disabled:i||c},O),_.map((function(e){return l.createElement("option",{key:e.value,value:e.value},e.label)}))))};
|
|
2
2
|
//# sourceMappingURL=dropdown.cjs.production.min.js.map
|