@transferwise/components 0.0.0-experimental-bcfa03a → 0.0.0-experimental-5cd0315
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/build/dateInput/DateInput.js +3 -6
- package/build/dateInput/DateInput.js.map +1 -1
- package/build/dateInput/DateInput.mjs +2 -5
- package/build/dateInput/DateInput.mjs.map +1 -1
- package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js +3 -5
- package/build/expressiveMoneyInput/currencySelector/CurrencySelector.js.map +1 -1
- package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs +1 -3
- package/build/expressiveMoneyInput/currencySelector/CurrencySelector.mjs.map +1 -1
- package/build/index.js +3 -5
- package/build/index.js.map +1 -1
- package/build/index.mjs +1 -3
- package/build/index.mjs.map +1 -1
- package/build/inputs/SelectInput.js +840 -0
- package/build/inputs/SelectInput.js.map +1 -0
- package/build/inputs/SelectInput.messages.js.map +1 -0
- package/build/inputs/SelectInput.messages.mjs.map +1 -0
- package/build/inputs/SelectInput.mjs +832 -0
- package/build/inputs/SelectInput.mjs.map +1 -0
- package/build/main.css +70 -65
- package/build/moneyInput/MoneyInput.js +2 -5
- package/build/moneyInput/MoneyInput.js.map +1 -1
- package/build/moneyInput/MoneyInput.mjs +1 -4
- package/build/moneyInput/MoneyInput.mjs.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.js +2 -5
- package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.mjs +1 -4
- package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
- package/build/styles/inputs/{SelectInput/SelectInput.css → SelectInput.css} +70 -65
- package/build/styles/main.css +70 -65
- package/build/types/inputs/{SelectInput/SelectInput.types.d.ts → SelectInput.d.ts} +7 -10
- package/build/types/inputs/SelectInput.d.ts.map +1 -0
- package/build/types/inputs/SelectInput.messages.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/inputs/{SelectInput/SelectInput.css → SelectInput.css} +70 -65
- package/src/inputs/{SelectInput/SelectInput.docs.mdx → SelectInput.docs.mdx} +1 -0
- package/src/inputs/SelectInput.less +219 -0
- package/src/inputs/{SelectInput/SelectInput.story.tsx → SelectInput.story.tsx} +7 -7
- package/src/inputs/SelectInput.tsx +1209 -0
- package/src/main.css +70 -65
- package/src/main.less +1 -1
- package/build/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.js +0 -26
- package/build/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.js.map +0 -1
- package/build/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.mjs +0 -24
- package/build/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.mjs.map +0 -1
- package/build/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.js +0 -54
- package/build/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.js.map +0 -1
- package/build/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.mjs +0 -52
- package/build/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.mjs.map +0 -1
- package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js +0 -41
- package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +0 -1
- package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +0 -38
- package/build/inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +0 -1
- package/build/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.js +0 -50
- package/build/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.js.map +0 -1
- package/build/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.mjs +0 -48
- package/build/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.mjs.map +0 -1
- package/build/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.js +0 -45
- package/build/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.js.map +0 -1
- package/build/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.mjs +0 -41
- package/build/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.mjs.map +0 -1
- package/build/inputs/SelectInput/Options/ItemView/SelectInputItemView.js +0 -50
- package/build/inputs/SelectInput/Options/ItemView/SelectInputItemView.js.map +0 -1
- package/build/inputs/SelectInput/Options/ItemView/SelectInputItemView.mjs +0 -48
- package/build/inputs/SelectInput/Options/ItemView/SelectInputItemView.mjs.map +0 -1
- package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js +0 -48
- package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.js.map +0 -1
- package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs +0 -46
- package/build/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.mjs.map +0 -1
- package/build/inputs/SelectInput/Options/SelectInputOptions.js +0 -270
- package/build/inputs/SelectInput/Options/SelectInputOptions.js.map +0 -1
- package/build/inputs/SelectInput/Options/SelectInputOptions.mjs +0 -268
- package/build/inputs/SelectInput/Options/SelectInputOptions.mjs.map +0 -1
- package/build/inputs/SelectInput/SelectInput.constants.js +0 -6
- package/build/inputs/SelectInput/SelectInput.constants.js.map +0 -1
- package/build/inputs/SelectInput/SelectInput.constants.mjs +0 -4
- package/build/inputs/SelectInput/SelectInput.constants.mjs.map +0 -1
- package/build/inputs/SelectInput/SelectInput.helpers.js +0 -115
- package/build/inputs/SelectInput/SelectInput.helpers.js.map +0 -1
- package/build/inputs/SelectInput/SelectInput.helpers.mjs +0 -109
- package/build/inputs/SelectInput/SelectInput.helpers.mjs.map +0 -1
- package/build/inputs/SelectInput/SelectInput.js +0 -216
- package/build/inputs/SelectInput/SelectInput.js.map +0 -1
- package/build/inputs/SelectInput/SelectInput.messages.js.map +0 -1
- package/build/inputs/SelectInput/SelectInput.messages.mjs.map +0 -1
- package/build/inputs/SelectInput/SelectInput.mjs +0 -210
- package/build/inputs/SelectInput/SelectInput.mjs.map +0 -1
- package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js +0 -41
- package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.js.map +0 -1
- package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs +0 -34
- package/build/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.mjs.map +0 -1
- package/build/styles/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.css +0 -17
- package/build/styles/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
- package/build/styles/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.css +0 -33
- package/build/styles/inputs/SelectInput/Options/ItemView/SelectInputItemView.css +0 -44
- package/build/styles/inputs/SelectInput/Options/SelectInputOptions.css +0 -125
- package/build/types/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.d.ts +0 -5
- package/build/types/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/DefaultTrigger/ClearButton/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/DefaultTrigger/ClearButton/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.d.ts +0 -9
- package/build/types/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/DefaultTrigger/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/DefaultTrigger/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +0 -9
- package/build/types/inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/OptionContent/index.d.ts +0 -3
- package/build/types/inputs/SelectInput/OptionContent/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.d.ts +0 -3
- package/build/types/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/GroupItemView/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/Options/GroupItemView/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.d.ts +0 -10
- package/build/types/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/ItemView/Option/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/Options/ItemView/Option/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/ItemView/SelectInputItemView.d.ts +0 -3
- package/build/types/inputs/SelectInput/Options/ItemView/SelectInputItemView.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/ItemView/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/Options/ItemView/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts +0 -6
- package/build/types/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/Options/OptionsContainer/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts +0 -15
- package/build/types/inputs/SelectInput/Options/SelectInputOptions.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/Options/index.d.ts +0 -2
- package/build/types/inputs/SelectInput/Options/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/SelectInput.constants.d.ts +0 -2
- package/build/types/inputs/SelectInput/SelectInput.constants.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/SelectInput.d.ts +0 -3
- package/build/types/inputs/SelectInput/SelectInput.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/SelectInput.helpers.d.ts +0 -28
- package/build/types/inputs/SelectInput/SelectInput.helpers.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/SelectInput.messages.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/SelectInput.types.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts +0 -15
- package/build/types/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/TriggerButton/index.d.ts +0 -3
- package/build/types/inputs/SelectInput/TriggerButton/index.d.ts.map +0 -1
- package/build/types/inputs/SelectInput/index.d.ts +0 -5
- package/build/types/inputs/SelectInput/index.d.ts.map +0 -1
- package/src/inputs/SelectInput/DefaultTrigger/ClearButton/SelectInputClearButton.tsx +0 -25
- package/src/inputs/SelectInput/DefaultTrigger/ClearButton/index.ts +0 -1
- package/src/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.css +0 -17
- package/src/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.less +0 -15
- package/src/inputs/SelectInput/DefaultTrigger/SelectInputDefaultTrigger.tsx +0 -56
- package/src/inputs/SelectInput/DefaultTrigger/index.ts +0 -1
- package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.css +0 -37
- package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.less +0 -38
- package/src/inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +0 -67
- package/src/inputs/SelectInput/OptionContent/index.ts +0 -5
- package/src/inputs/SelectInput/Options/GroupItemView/SelectInputGroupItemView.tsx +0 -53
- package/src/inputs/SelectInput/Options/GroupItemView/index.ts +0 -1
- package/src/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.css +0 -33
- package/src/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.less +0 -32
- package/src/inputs/SelectInput/Options/ItemView/Option/SelectInputOption.tsx +0 -51
- package/src/inputs/SelectInput/Options/ItemView/Option/index.ts +0 -5
- package/src/inputs/SelectInput/Options/ItemView/SelectInputItemView.css +0 -44
- package/src/inputs/SelectInput/Options/ItemView/SelectInputItemView.less +0 -14
- package/src/inputs/SelectInput/Options/ItemView/SelectInputItemView.tsx +0 -37
- package/src/inputs/SelectInput/Options/ItemView/index.ts +0 -1
- package/src/inputs/SelectInput/Options/OptionsContainer/SelectInputOptionsContainer.tsx +0 -55
- package/src/inputs/SelectInput/Options/OptionsContainer/index.ts +0 -1
- package/src/inputs/SelectInput/Options/SelectInputOptions.css +0 -125
- package/src/inputs/SelectInput/Options/SelectInputOptions.less +0 -78
- package/src/inputs/SelectInput/Options/SelectInputOptions.tsx +0 -372
- package/src/inputs/SelectInput/Options/index.ts +0 -1
- package/src/inputs/SelectInput/SelectInput.constants.ts +0 -1
- package/src/inputs/SelectInput/SelectInput.helpers.ts +0 -152
- package/src/inputs/SelectInput/SelectInput.less +0 -40
- package/src/inputs/SelectInput/SelectInput.test.tsx +0 -606
- package/src/inputs/SelectInput/SelectInput.tsx +0 -247
- package/src/inputs/SelectInput/SelectInput.types.ts +0 -127
- package/src/inputs/SelectInput/TriggerButton/SelectInputTriggerButton.tsx +0 -39
- package/src/inputs/SelectInput/TriggerButton/index.ts +0 -5
- package/src/inputs/SelectInput/index.ts +0 -13
- /package/build/inputs/{SelectInput/SelectInput.messages.js → SelectInput.messages.js} +0 -0
- /package/build/inputs/{SelectInput/SelectInput.messages.mjs → SelectInput.messages.mjs} +0 -0
- /package/build/types/inputs/{SelectInput/SelectInput.messages.d.ts → SelectInput.messages.d.ts} +0 -0
- /package/src/inputs/{SelectInput/SelectInput.messages.ts → SelectInput.messages.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectInput.mjs","sources":["../../src/inputs/SelectInput.tsx"],"sourcesContent":["import {\n Listbox as ListboxBase,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/react';\nimport { Check, ChevronDown, Cross, CrossCircle } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport mergeProps from 'merge-props';\nimport {\n createContext,\n forwardRef,\n ReactNode,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport { Virtualizer, type VirtualizerHandle } from 'virtua';\n\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { PolymorphicWithOverrides } from '../common/polymorphicWithOverrides/PolymorphicWithOverrides';\nimport { Breakpoint } from '../common/propsValues/breakpoint';\nimport dateTriggerMessages from '../dateLookup/dateTrigger/DateTrigger.messages';\nimport { Merge } from '../utils';\n\nimport { BottomSheet } from './_BottomSheet';\nimport { ButtonInput } from './_ButtonInput';\nimport { Popover } from './_Popover';\nimport { useInputAttributes, WithInputAttributesProps } from './contexts';\nimport { InputGroup } from './InputGroup';\nimport { SearchInput } from './SearchInput';\nimport messages from './SelectInput.messages';\nimport Header from '../header';\nimport Section from '../section';\nimport { ButtonProps } from '../button/Button.types';\n\nconst MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;\n\nfunction searchableString(value: string) {\n return (\n value\n .trim()\n .replace(/\\s+/gu, ' ')\n // NFD converts an Å to A + ̊ (and other special characters)\n .normalize('NFD')\n // and then this replaces the ̊ with nothing (and other special characters)\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n );\n}\n\nfunction inferSearchableStrings(value: unknown) {\n if (typeof value === 'string') {\n return [searchableString(value)];\n }\n\n if (typeof value === 'object' && value != null) {\n return Object.values(value)\n .filter((innerValue) => typeof innerValue === 'string')\n .map((innerValue) => searchableString(innerValue));\n }\n\n return [];\n}\n\nexport interface SelectInputOptionItem<T = string> {\n type: 'option';\n value: T;\n filterMatchers?: readonly string[];\n disabled?: boolean;\n}\n\nexport interface SelectInputGroupItem<T = string> {\n type: 'group';\n label: ReactNode;\n options: readonly SelectInputOptionItem<T>[];\n action?: {\n label: string;\n onClick: ButtonProps['onClick'];\n };\n}\n\nexport interface SelectInputSeparatorItem {\n type: 'separator';\n}\n\nexport type SelectInputItem<T = string> =\n | SelectInputOptionItem<T>\n | SelectInputGroupItem<T>\n | SelectInputSeparatorItem;\n\nfunction dedupeSelectInputOptionItem<T>(\n item: SelectInputOptionItem<T>,\n existingValues: Set<T>,\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputOptionItem<T | undefined> {\n const isDuplicate = compareValues\n ? Array.from(existingValues).some((existingValue) => compareValues(item.value, existingValue))\n : existingValues.has(item.value);\n\n if (!isDuplicate) {\n existingValues.add(item.value);\n return item;\n }\n return { ...item, value: undefined };\n}\n\n/**\n * Sets the `value` of duplicate option items to `undefined`, hiding them when\n * rendered. Indexes are kept intact within groups to preserve the active item\n * between filter changes when possible.\n */\nfunction dedupeSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputItem<T | undefined>[] {\n const existingValues = new Set<T>();\n\n return items.map((item) => {\n switch (item.type) {\n case 'option': {\n return dedupeSelectInputOptionItem(item, existingValues, compareValues);\n }\n case 'group': {\n return {\n ...item,\n options: item.options.map((option) =>\n dedupeSelectInputOptionItem(option, existingValues, compareValues),\n ),\n };\n }\n default:\n }\n return item;\n });\n}\n\nfunction selectInputOptionItemIncludesNeedle<T>(item: SelectInputOptionItem<T>, needle: string) {\n return inferSearchableStrings(item.filterMatchers ?? item.value).some((haystack) =>\n haystack.includes(needle),\n );\n}\n\nfunction filterSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n predicate: (item: SelectInputOptionItem<T>) => boolean,\n) {\n return items.filter((item) => {\n switch (item.type) {\n case 'option': {\n return predicate(item);\n }\n case 'group': {\n return item.options.some((option) => predicate(option));\n }\n default:\n }\n return false;\n });\n}\n\n/**\n * Flattens and sorts filtered options using the provided comparator.\n * Extracts all options from groups, filters out undefined values (deduplicated items),\n * sorts them, and returns as a flat list of option items.\n */\nfunction sortSelectInputItems<T>(\n items: readonly SelectInputItem<T | undefined>[],\n compareFn: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number,\n searchQuery: string,\n): SelectInputItem<NonNullable<T>>[] {\n const flattenedOption = items.flatMap((item) => {\n if (item.type === 'option') {\n return item.value !== undefined ? [item as SelectInputOptionItem<NonNullable<T>>] : [];\n }\n\n if (item.type === 'group') {\n return item.options.filter(\n (option): option is SelectInputOptionItem<NonNullable<T>> => option.value !== undefined,\n );\n }\n\n return [];\n });\n\n // eslint-disable-next-line functional/immutable-data\n return flattenedOption.sort((a, b) => compareFn(a, b, searchQuery));\n}\n\nexport interface SelectInputProps<T = string, M extends boolean = false> {\n id?: string;\n /**\n * Sets the `data-wds-parent` attribute on the listbox container, which is needed for complex components like DateInput to correctly manage event handling.\n * @internal\n */\n parentId?: string;\n name?: string;\n multiple?: M;\n placeholder?: string;\n items: readonly SelectInputItem<NonNullable<T>>[];\n /**\n * Enables browser autocomplete integration through the search input.\n * Accepts standard HTML autocomplete values (e.g., \"country-name\", \"address-level1\").\n *\n * Requires `filterable={true}` to enable the search input.\n *\n * @example\n * <SelectInput\n * name=\"country\"\n * autocomplete=\"country-name\"\n * filterable={true}\n * items={[{\n * type: 'option',\n * value: 'GB',\n * filterMatchers: ['United Kingdom', 'UK']\n * }]}\n * />\n */\n autocomplete?: string;\n defaultValue?: M extends true ? readonly T[] : T;\n value?: M extends true ? readonly T[] : T;\n compareValues?:\n | (keyof NonNullable<T> & string)\n | ((a: T | undefined, b: T | undefined) => boolean);\n renderValue?: (value: NonNullable<T>, withinTrigger: boolean) => React.ReactNode;\n renderFooter?: (args: {\n resultsEmpty: boolean;\n queryNormalized: string | null | undefined;\n }) => React.ReactNode;\n renderTrigger?: (args: {\n content: React.ReactNode;\n placeholderShown: boolean;\n clear: (() => void) | undefined;\n disabled: boolean;\n size: 'sm' | 'md' | 'lg';\n className: string | undefined;\n }) => React.ReactNode;\n filterable?: boolean;\n filterPlaceholder?: string;\n sortFilteredOptions?: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'] & {\n 'aria-label'?: string;\n };\n /** Ref to the select trigger button element. */\n triggerRef?: React.MutableRefObject<HTMLButtonElement | null>;\n onFilterChange?: (args: { query: string; queryNormalized: string | null }) => void;\n onChange?: (value: M extends true ? T[] : T) => void;\n onOpen?: () => void;\n onClose?: () => void;\n onClear?: () => void;\n}\n\nconst defaultRenderTrigger = (({ content, placeholderShown, clear, disabled, size, className }) => (\n <InputGroup\n addonEnd={{\n content: (\n <span className={clsx('np-select-input-addon-container', disabled && 'disabled')}>\n {clear != null && !placeholderShown ? (\n <>\n <SelectInputClearButton\n onClick={(event) => {\n event.preventDefault();\n clear();\n }}\n />\n <span className=\"np-select-input-addon-separator\" />\n </>\n ) : null}\n\n <span className=\"np-select-input-addon\">\n <ChevronDown size={16} />\n </span>\n </span>\n ),\n initialContentWidth: 24 + 4,\n padding: 'sm',\n }}\n disabled={disabled}\n className={className}\n >\n <SelectInputTriggerButton as={ButtonInput} size={size}>\n <span\n className={clsx(\n 'np-select-input-content',\n placeholderShown && 'np-select-input-placeholder',\n )}\n >\n {content}\n </span>\n </SelectInputTriggerButton>\n </InputGroup>\n)) satisfies SelectInputProps['renderTrigger'];\n\ninterface SelectInputClearButtonProps extends Pick<\n React.ComponentPropsWithoutRef<'button'>,\n 'className' | 'onClick'\n> {}\n\nfunction SelectInputClearButton({ className, onClick }: SelectInputClearButtonProps) {\n const intl = useIntl();\n\n return (\n <button\n type=\"button\"\n aria-label={intl.formatMessage(dateTriggerMessages.ariaLabel)}\n className={clsx(className, 'np-select-input-addon np-select-input-addon--interactive')}\n onClick={onClick}\n >\n <Cross size={16} />\n </button>\n );\n}\n\nconst noop = () => {};\n\nexport function SelectInput<T = string, M extends boolean = false>({\n id: idProp,\n parentId,\n name,\n multiple,\n placeholder,\n autocomplete,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = defaultRenderTrigger,\n filterable,\n filterPlaceholder,\n sortFilteredOptions,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n triggerRef: externalTriggerRef,\n onFilterChange = noop,\n onChange,\n onOpen,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n\n const [open, setOpen] = useState(false);\n\n const initialized = useRef(false);\n const handleClose = useEffectEvent(onClose ?? (() => {}));\n const handleOpen = useEffectEvent(onOpen ?? (() => {}));\n useEffect(() => {\n if (initialized.current) {\n if (open) {\n handleOpen?.();\n } else {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [handleClose, handleOpen, open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const deferredFilterQuery = useDeferredValue(filterQuery);\n const setFilterQuery = useEffectEvent((query: string) => {\n _setFilterQuery(query);\n if (query !== filterQuery) {\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n }\n });\n\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n\n const screenSm = useScreenSize(Breakpoint.SMALL);\n const OptionsOverlay = screenSm ? Popover : BottomSheet;\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n /**\n * Attempts to resolve the `listbox` label\n * @see https://storybook.wise.design/?path=/docs/forms-selectinput-accessibility--docs#labelling\n */\n const getListBoxLabelProps = (): {\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n } => {\n if (UNSAFE_triggerButtonProps?.['aria-label']) {\n return {\n listBoxLabel: UNSAFE_triggerButtonProps['aria-label'],\n };\n }\n\n if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {\n return {\n listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby'],\n };\n }\n\n if (inputAttributes['aria-labelledby']) {\n return {\n listBoxLabelledBy: inputAttributes['aria-labelledby'],\n };\n }\n\n return {};\n };\n\n return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue as M extends true ? T[] : T}\n value={controlledValue as M extends true ? T[] : T}\n by={compareValues}\n disabled={disabled}\n onChange={\n ((value) => {\n if (!multiple) {\n setOpen(false);\n }\n onChange?.(value);\n }) satisfies SelectInputProps<T, M>['onChange']\n }\n >\n {({ disabled: uiDisabled, value }) => {\n const placeholderShown =\n multiple && Array.isArray(value) ? value.length === 0 : value == null;\n return (\n <OptionsOverlay\n placement=\"bottom-start\"\n open={open}\n renderTrigger={({ ref, getInteractionProps }) => (\n <SelectInputTriggerButtonPropsContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n ref: (node) => {\n ref(node);\n if (externalTriggerRef) {\n // eslint-disable-next-line no-param-reassign\n externalTriggerRef.current = node;\n } else {\n internalTriggerRef.current = node;\n }\n },\n ...inputAttributes,\n ...UNSAFE_triggerButtonProps,\n id,\n ...mergeProps(\n {\n onClick: () => {\n setOpen((prev) => !prev);\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (\n event.key === ' ' ||\n event.key === 'Enter' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n setOpen((prev) => !prev);\n }\n },\n },\n getInteractionProps(),\n ),\n }}\n >\n {renderTrigger({\n content: !placeholderShown ? (\n <SelectInputOptionContentWithinTriggerContext.Provider value>\n {multiple && Array.isArray(value)\n ? (value as readonly NonNullable<T>[])\n .map((option) => renderValue(option, true))\n .filter((node) => node != null)\n .join(', ')\n : renderValue(value as NonNullable<T>, true)}\n </SelectInputOptionContentWithinTriggerContext.Provider>\n ) : (\n placeholder\n ),\n placeholderShown,\n clear:\n onClear != null\n ? () => {\n onClear();\n (externalTriggerRef?.current ?? internalTriggerRef.current)?.focus({\n preventScroll: true,\n });\n }\n : undefined,\n disabled: uiDisabled,\n size,\n className,\n })}\n </SelectInputTriggerButtonPropsContext.Provider>\n )}\n initialFocusRef={controllerRef}\n size={filterable ? 'lg' : 'md'}\n padding=\"none\"\n onClose={() => {\n setOpen(false);\n }}\n onCloseEnd={() => {\n setFilterQuery('');\n }}\n >\n <SelectInputOptions\n id={id ? `${id}Search` : undefined}\n parentId={parentId}\n items={items}\n compareValues={compareValues}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n sortFilteredOptions={sortFilteredOptions}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n autocomplete={autocomplete}\n name={name}\n onFilterChange={setFilterQuery}\n onAutocompleteSelect={(matchedValue) => {\n onChange?.(matchedValue as M extends true ? T[] : T);\n if (!multiple) {\n setOpen(false);\n }\n }}\n {...getListBoxLabelProps()}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\n}\n\nconst SelectInputTriggerButtonPropsContext = createContext<{\n ref?: React.ForwardedRef<HTMLButtonElement | null>;\n id?: string;\n onClick?: (event: React.MouseEvent) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n [key: string]: unknown;\n}>({});\n\ntype SelectInputTriggerButtonElementType = 'button' | React.ComponentType;\n\nexport type SelectInputTriggerButtonProps<\n T extends SelectInputTriggerButtonElementType = 'button',\n> = Merge<React.ComponentPropsWithoutRef<T>, { as?: T }>;\n\nexport function SelectInputTriggerButton<T extends SelectInputTriggerButtonElementType = 'button'>({\n as = 'button' as T,\n ...restProps\n}: SelectInputTriggerButtonProps<T>) {\n const { ref, onClick, onKeyDown, ...interactionProps } = useContext(\n SelectInputTriggerButtonPropsContext,\n );\n\n return (\n <ListboxButton\n ref={ref}\n as={PolymorphicWithOverrides}\n role=\"combobox\"\n __overrides={{ as, ...interactionProps }}\n {...mergeProps({ onClick, onKeyDown }, restProps)}\n />\n );\n}\n\ninterface SelectInputOptionsContainerProps extends React.ComponentPropsWithRef<'div'> {\n onAriaActiveDescendantChange: (value: React.AriaAttributes['aria-activedescendant']) => void;\n}\n\nconst SelectInputOptionsContainer = forwardRef(function SelectInputOptionsContainer(\n {\n 'aria-orientation': ariaOrientation,\n 'aria-activedescendant': ariaActiveDescendant,\n role,\n tabIndex,\n onAriaActiveDescendantChange,\n onKeyDown,\n ...restProps\n }: SelectInputOptionsContainerProps,\n ref: React.ForwardedRef<HTMLDivElement | null>,\n) {\n const handleAriaActiveDescendantChange = useEffectEvent(onAriaActiveDescendantChange);\n useEffect(() => {\n handleAriaActiveDescendantChange(ariaActiveDescendant);\n }, [ariaActiveDescendant, handleAriaActiveDescendantChange]);\n\n return (\n <div\n ref={ref}\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent confirmation close without an active item\n if (event.key === 'Enter' && ariaActiveDescendant == null) {\n return;\n }\n\n // Required to make ListBox focusable\n if (event.key === 'Tab') {\n return;\n }\n\n // Prevent absorbing Escape early\n if (event.key === 'Escape') {\n onKeyDown?.({\n ...event,\n preventDefault: () => {},\n stopPropagation: () => {},\n });\n return;\n }\n\n onKeyDown?.(event);\n }}\n {...restProps}\n />\n );\n});\n\ninterface SelectInputOptionsProps<T = string> extends Pick<\n SelectInputProps<T>,\n | 'items'\n | 'renderValue'\n | 'renderFooter'\n | 'filterable'\n | 'filterPlaceholder'\n | 'id'\n | 'parentId'\n | 'compareValues'\n | 'sortFilteredOptions'\n> {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n autocomplete?: string;\n name?: string;\n onAutocompleteSelect?: (value: T) => void;\n}\n\nfunction SelectInputOptions<T = string>({\n id,\n parentId,\n items,\n compareValues: compareValuesProp,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n sortFilteredOptions,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n listBoxLabel,\n listBoxLabelledBy,\n autocomplete,\n name,\n onAutocompleteSelect,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n const virtualiserHandlerRef = useRef<VirtualizerHandle>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n const [initialRender, setInitialRender] = useState(true);\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n useEffect(() => {\n if (needle) {\n // Ensure having an active option while filtering.\n // Without `requestAnimationFrame` upon which React depends for scheduling\n // updates, the active status would only show for a split second and then\n // disappear inadvertently.\n requestAnimationFrame(() => {\n if (\n controllerRef.current != null &&\n !controllerRef.current.hasAttribute('aria-activedescendant')\n ) {\n // Activate first option via synthetic key press\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n });\n }\n }, [controllerRef, needle]);\n\n const compareValues = useMemo(() => {\n if (!compareValuesProp) {\n return undefined;\n }\n\n if (typeof compareValuesProp === 'function') {\n return (a: NonNullable<T>, b: NonNullable<T>) => compareValuesProp(a, b);\n }\n\n const key = compareValuesProp;\n return (a: NonNullable<T>, b: NonNullable<T>) => {\n if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {\n return (a as Record<string, unknown>)[key] === (b as Record<string, unknown>)[key];\n }\n return a === b;\n };\n }, [compareValuesProp]);\n\n const filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] = useMemo(() => {\n if (needle == null) {\n return items;\n }\n\n const dedupedItems = dedupeSelectInputItems(items, compareValues);\n\n if (sortFilteredOptions) {\n // When sorting, filter out non-matching items completely to avoid ghost items\n const filtered = dedupedItems.map((item) => {\n if (item.type === 'option') {\n return selectInputOptionItemIncludesNeedle(item, needle)\n ? item\n : { ...item, value: undefined };\n }\n if (item.type === 'group') {\n return {\n ...item,\n options: item.options.map((option) =>\n selectInputOptionItemIncludesNeedle(option, needle)\n ? option\n : { ...option, value: undefined },\n ),\n };\n }\n return item;\n });\n\n return sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);\n }\n\n return filterSelectInputItems(dedupedItems, (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needle, items, compareValues]);\n const resultsEmpty = needle != null && filteredItems.length === 0;\n\n const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;\n\n // Items shown once shall be kept mounted until the needle changes, otherwise\n // the scroll position may jump around inadvertently. Pattern adopted from:\n // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only\n const [mountedIndexes, setMountedIndexes] = useState<number[]>([]);\n useEffect(() => {\n // Ensure the 'End' key works as intended by keeping the last item mounted\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n indexes.add(filteredItems.length - 1);\n return [...indexes]; // Sorting is redundant by nature here\n });\n }, [\n needle, // Needed as `filteredItems.length` may be equal between two updates\n filteredItems.length,\n ]);\n\n const listboxContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (listboxContainerRef.current != null) {\n listboxContainerRef.current.style.setProperty(\n '--initial-height',\n `${listboxContainerRef.current.offsetHeight}px`,\n );\n }\n }, []);\n\n useEffect(() => {\n setInitialRender(false);\n }, []);\n\n const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n const getItemNode = (index: number) => {\n const item = filteredItems[index];\n return (\n <SelectInputItemView key={index} item={item} renderValue={renderValue} needle={needle} />\n );\n };\n\n const findMatchingItem = (autocompleteValue: string): T | null => {\n const flatOptions = items\n .flatMap((item) =>\n item.type === 'group' ? item.options : item.type === 'option' ? [item] : [],\n )\n .filter(\n (item): item is SelectInputOptionItem<NonNullable<T>> =>\n item.type === 'option' && item.value != null,\n );\n\n const exactMatch = flatOptions.find(\n (option) =>\n String(option.value) === autocompleteValue ||\n option.filterMatchers?.some((matcher) => matcher === autocompleteValue),\n );\n\n if (exactMatch) {\n return exactMatch.value;\n }\n\n const fuzzyMatch = flatOptions.find((option) =>\n option.filterMatchers?.some((matcher) =>\n matcher.toLowerCase().includes(autocompleteValue.toLowerCase()),\n ),\n );\n\n return fuzzyMatch ? fuzzyMatch.value : null;\n };\n\n return (\n <ListboxOptions\n modal\n as={SelectInputOptionsContainer}\n static\n className=\"np-select-input-options-container\"\n onAriaActiveDescendantChange={(value: React.AriaAttributes['aria-activedescendant']) => {\n if (controllerRef.current != null) {\n if (!initialRender && value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\n name={name}\n autoComplete={autocomplete}\n role=\"combobox\"\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n aria-label={filterPlaceholder}\n defaultValue={filterQuery}\n aria-autocomplete=\"list\"\n aria-expanded\n aria-controls={listboxId}\n aria-describedby={showStatus ? statusId : undefined}\n onKeyDown={(event) => {\n // Prevent interfering with the matcher of Headless UI\n // https://mathiasbynens.be/notes/javascript-unicode#regex\n if (/^.$/u.test(event.key)) {\n event.stopPropagation();\n }\n }}\n onChange={(event) => {\n // Free up resources and ensure not to go out of bounds when the\n // resulting item count is less than before\n const inputValue = event.currentTarget.value;\n\n // Free up resources and ensure not to go out of bounds\n setMountedIndexes([]);\n onFilterChange(inputValue);\n }}\n onInput={(event) => {\n const inputValue = event.currentTarget.value;\n const inputElement = event.currentTarget;\n\n if (autocomplete && onAutocompleteSelect && inputValue) {\n setTimeout(() => {\n if (inputElement.value === inputValue && inputValue.length > 2) {\n const matchedValue = findMatchingItem(inputValue);\n if (matchedValue !== null) {\n onAutocompleteSelect(matchedValue);\n }\n }\n }, 50);\n }\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={clsx(\n 'np-select-input-listbox-container',\n virtualized && 'np-select-input-listbox-container--virtualized',\n needle == null && // Groups aren't shown when filtering\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\n data-wds-parent={parentId ?? undefined}\n >\n {resultsEmpty ? (\n <div id={statusId} className=\"np-select-input-options-status\">\n <CrossCircle size={16} className=\"np-select-input-options-status-icon\" />\n {intl.formatMessage(messages.noResultsFound)}\n </div>\n ) : null}\n\n <div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-label={listBoxLabel}\n aria-labelledby={listBoxLabelledBy}\n tabIndex={0}\n className=\"np-select-input-listbox\"\n >\n {!virtualized ? (\n filteredItems.map((_, index) => getItemNode(index))\n ) : (\n <Virtualizer\n ref={virtualiserHandlerRef}\n data={filteredItems}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onScroll={async () => {\n if (!virtualiserHandlerRef.current) return;\n\n const startIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset,\n );\n const endIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset +\n virtualiserHandlerRef.current.viewportSize,\n );\n\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n\n for (let index = startIndex; index <= endIndex; index += 1) {\n indexes.add(index);\n }\n\n return [...indexes].sort((a, b) => a - b);\n });\n }}\n >\n {(item, index) => (\n // The position of each item can't be inferred by browsers when\n // virtualizing, as some of the items may not be in the DOM\n <SelectInputItemsCountContext.Provider value={filteredItems.length}>\n <SelectInputItemPositionContext.Provider value={index + 1}>\n {getItemNode(index)}\n </SelectInputItemPositionContext.Provider>\n </SelectInputItemsCountContext.Provider>\n )}\n </Virtualizer>\n )}\n </div>\n\n {renderFooter != null ? (\n <footer className=\"np-select-input-footer\">\n <div\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent interfering with Headless UI\n if (event.key !== 'Escape') {\n event.stopPropagation();\n }\n }}\n >\n {renderFooter({\n resultsEmpty,\n queryNormalized: needle,\n })}\n </div>\n </footer>\n ) : null}\n </section>\n </ListboxOptions>\n );\n}\n\ninterface SelectInputItemViewProps<\n T = string,\n I extends SelectInputItem<T | undefined> = SelectInputItem<T | undefined>,\n> extends Required<Pick<SelectInputProps<T>, 'renderValue'>> {\n item: I;\n needle: string | null | undefined;\n}\n\nfunction SelectInputItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputItemViewProps<T>) {\n switch (item.type) {\n case 'option': {\n if (\n item.value != null &&\n (needle == null || selectInputOptionItemIncludesNeedle(item, needle))\n ) {\n return (\n <SelectInputOption value={item.value} disabled={item.disabled}>\n {renderValue(item.value, false)}\n </SelectInputOption>\n );\n }\n break;\n }\n case 'group': {\n return <SelectInputGroupItemView item={item} renderValue={renderValue} needle={needle} />;\n }\n case 'separator': {\n if (needle == null) {\n return <hr className=\"np-select-input-separator-item\" />;\n }\n break;\n }\n }\n return null;\n}\n\ninterface SelectInputGroupItemViewProps<T = string> extends SelectInputItemViewProps<\n T,\n SelectInputGroupItem<T | undefined>\n> {}\n\nfunction SelectInputGroupItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputGroupItemViewProps<T>) {\n const headerId = useId();\n\n const header = (\n <Header\n as=\"header\"\n role=\"none\"\n id={headerId}\n title={item.label}\n // @ts-expect-error when we migrate ActionButton to new Button this should be sorted\n action={\n item.action && {\n text: item.action.label,\n onClick: item.action.onClick,\n }\n }\n className=\"np-select-input-group-item-header p-x-1\"\n />\n );\n\n return (\n // An empty container may be rendered when no options match `needle`\n // However, pre-filtering would result in worse performance overall\n <Section\n as=\"section\"\n role=\"group\"\n aria-labelledby={headerId}\n className={clsx('m-y-0', needle === null && 'np-select-input-group-item--without-needle')}\n >\n {needle == null ? header : null}\n {item.options.map((option, index) => (\n <SelectInputItemView\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n item={option}\n renderValue={renderValue}\n needle={needle}\n />\n ))}\n </Section>\n );\n}\n\nconst SelectInputItemsCountContext = createContext<number | undefined>(undefined);\nconst SelectInputItemPositionContext = createContext<number | undefined>(undefined);\n\ninterface SelectInputOptionProps<T = string> {\n value: T;\n disabled?: boolean;\n children?: React.ReactNode;\n}\n\nfunction SelectInputOption<T = string>({ value, disabled, children }: SelectInputOptionProps<T>) {\n const itemsCount = useContext(SelectInputItemsCountContext);\n const itemPosition = useContext(SelectInputItemPositionContext);\n return (\n <ListboxOption\n as=\"div\"\n value={value}\n aria-setsize={itemsCount}\n aria-posinset={itemPosition}\n disabled={disabled}\n className={({ active, disabled: uiDisabled }) =>\n clsx(\n 'np-select-input-option-container np-text-body-large',\n active && 'np-select-input-option-container--active',\n uiDisabled && 'np-select-input-option-container--disabled',\n )\n }\n >\n {({ selected }) => (\n <>\n <div className=\"np-select-input-option\">{children}</div>\n <Check\n size={16}\n className={clsx(\n 'np-select-input-option-check',\n !selected && 'np-select-input-option-check--not-selected',\n )}\n />\n </>\n )}\n </ListboxOption>\n );\n}\n\nconst SelectInputOptionContentWithinTriggerContext = createContext(false);\n\nexport interface SelectInputOptionContentProps {\n title: string;\n note?: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport function SelectInputOptionContent({\n title,\n note,\n description,\n icon,\n}: SelectInputOptionContentProps) {\n const withinTrigger = useContext(SelectInputOptionContentWithinTriggerContext);\n\n return (\n <div\n className={clsx(\n 'np-select-input-option-content-container',\n (note || description) && 'np-text-body-large',\n )}\n >\n {icon ? (\n <div\n className={clsx(\n 'np-select-input-option-content-icon',\n !withinTrigger && 'np-select-input-option-content-icon--not-within-trigger',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"np-select-input-option-content-text\">\n <div\n className={clsx(\n 'np-select-input-option-content-text-line-1',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n <div className=\"d-inline\">{title}</div>\n {note ? (\n <span className=\"np-select-input-option-content-text-secondary np-text-body-default\">\n {note}\n </span>\n ) : null}\n </div>\n\n {description ? (\n <div\n className={clsx(\n 'np-select-input-option-content-text-secondary np-text-body-default',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["MAX_ITEMS_WITHOUT_VIRTUALIZATION","searchableString","value","trim","replace","normalize","toLowerCase","inferSearchableStrings","Object","values","filter","innerValue","map","dedupeSelectInputOptionItem","item","existingValues","compareValues","isDuplicate","Array","from","some","existingValue","has","add","undefined","dedupeSelectInputItems","items","Set","type","options","option","selectInputOptionItemIncludesNeedle","needle","filterMatchers","haystack","includes","filterSelectInputItems","predicate","sortSelectInputItems","compareFn","searchQuery","flattenedOption","flatMap","sort","a","b","defaultRenderTrigger","content","placeholderShown","clear","disabled","size","className","_jsx","InputGroup","addonEnd","_jsxs","clsx","children","_Fragment","SelectInputClearButton","onClick","event","preventDefault","ChevronDown","initialContentWidth","padding","SelectInputTriggerButton","as","ButtonInput","intl","useIntl","formatMessage","dateTriggerMessages","ariaLabel","Cross","noop","SelectInput","id","idProp","parentId","name","multiple","placeholder","autocomplete","defaultValue","controlledValue","renderValue","String","renderFooter","renderTrigger","filterable","filterPlaceholder","sortFilteredOptions","UNSAFE_triggerButtonProps","triggerRef","externalTriggerRef","onFilterChange","onChange","onOpen","onClose","onClear","inputAttributes","useInputAttributes","nonLabelable","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","handleOpen","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","setFilterQuery","query","queryNormalized","internalTriggerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","Popover","BottomSheet","searchInputRef","listboxRef","controllerRef","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","ListboxBase","by","uiDisabled","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","prev","onKeyDown","key","SelectInputOptionContentWithinTriggerContext","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","onAutocompleteSelect","matchedValue","createContext","restProps","interactionProps","useContext","ListboxButton","PolymorphicWithOverrides","role","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","compareValuesProp","virtualiserHandlerRef","initialRender","setInitialRender","useMemo","requestAnimationFrame","hasAttribute","dispatchEvent","KeyboardEvent","bubbles","filteredItems","dedupedItems","filtered","resultsEmpty","virtualized","mountedIndexes","setMountedIndexes","prevMountedIndexes","indexes","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","SelectInputItemView","findMatchingItem","autocompleteValue","flatOptions","exactMatch","find","matcher","fuzzyMatch","ListboxOptions","modal","static","setAttribute","removeAttribute","SearchInput","autoComplete","shape","test","inputValue","currentTarget","onInput","inputElement","setTimeout","CrossCircle","messages","noResultsFound","_","Virtualizer","data","keepMounted","scrollRef","onScroll","startIndex","findItemIndex","scrollOffset","endIndex","viewportSize","SelectInputItemsCountContext","SelectInputItemPositionContext","SelectInputOption","SelectInputGroupItemView","headerId","header","Header","title","label","action","text","Section","itemsCount","itemPosition","ListboxOption","active","selected","Check","SelectInputOptionContent","note","description","icon","withinTrigger"],"mappings":"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"}
|
package/build/main.css
CHANGED
|
@@ -3976,49 +3976,27 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
3976
3976
|
color: #5d7079;
|
|
3977
3977
|
color: var(--color-content-secondary);
|
|
3978
3978
|
}
|
|
3979
|
-
.np-select-input-
|
|
3980
|
-
|
|
3981
|
-
|
|
3982
|
-
-
|
|
3983
|
-
-moz-user-select: none;
|
|
3984
|
-
user-select: none;
|
|
3985
|
-
align-items: center;
|
|
3986
|
-
-moz-column-gap: 8px;
|
|
3987
|
-
column-gap: 8px;
|
|
3988
|
-
-moz-column-gap: var(--size-8);
|
|
3989
|
-
column-gap: var(--size-8);
|
|
3990
|
-
border-radius: 10px;
|
|
3991
|
-
border-radius: var(--radius-small);
|
|
3992
|
-
padding: 12px 16px;
|
|
3993
|
-
padding: var(--size-12) var(--size-16);
|
|
3994
|
-
color: var(--color-interactive-primary);
|
|
3995
|
-
}
|
|
3996
|
-
.np-select-input-option-container:focus {
|
|
3997
|
-
outline: none;
|
|
3998
|
-
}
|
|
3999
|
-
.np-select-input-option-container--active {
|
|
4000
|
-
box-shadow: inset 0 0 0 1px #c9cbce;
|
|
4001
|
-
box-shadow: inset 0 0 0 1px var(--color-interactive-secondary);
|
|
4002
|
-
}
|
|
4003
|
-
.np-select-input-option-container--disabled {
|
|
4004
|
-
opacity: 0.45;
|
|
3979
|
+
.np-select-input-content {
|
|
3980
|
+
overflow: hidden;
|
|
3981
|
+
text-overflow: ellipsis;
|
|
3982
|
+
white-space: nowrap;
|
|
4005
3983
|
}
|
|
4006
|
-
.np-select-input-
|
|
4007
|
-
|
|
3984
|
+
.np-select-input-placeholder {
|
|
3985
|
+
color: #768e9c;
|
|
3986
|
+
color: var(--color-content-tertiary);
|
|
4008
3987
|
}
|
|
4009
|
-
.np-select-input-
|
|
4010
|
-
|
|
3988
|
+
.np-select-input-options-container {
|
|
3989
|
+
display: flex;
|
|
3990
|
+
height: 100%;
|
|
3991
|
+
flex-direction: column;
|
|
4011
3992
|
}
|
|
4012
|
-
.np-select-input-
|
|
4013
|
-
|
|
4014
|
-
margin-top: calc(-1 * var(--size-8));
|
|
3993
|
+
.np-select-input-options-container:focus {
|
|
3994
|
+
outline: none;
|
|
4015
3995
|
}
|
|
4016
|
-
|
|
4017
|
-
|
|
4018
|
-
|
|
4019
|
-
|
|
4020
|
-
background-color: #ffffff;
|
|
4021
|
-
background-color: var(--color-background-elevated);
|
|
3996
|
+
@media (min-width: 576px) {
|
|
3997
|
+
.np-select-input-options-container {
|
|
3998
|
+
max-height: 28rem /* 448px */;
|
|
3999
|
+
}
|
|
4022
4000
|
}
|
|
4023
4001
|
.np-select-input-options-status {
|
|
4024
4002
|
display: flex;
|
|
@@ -4084,22 +4062,54 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
4084
4062
|
contain: strict;
|
|
4085
4063
|
height: 100%;
|
|
4086
4064
|
}
|
|
4087
|
-
.np-select-input-
|
|
4065
|
+
.np-select-input-separator-item {
|
|
4066
|
+
margin: 8px;
|
|
4067
|
+
margin: var(--size-8);
|
|
4068
|
+
border-top-width: 1px;
|
|
4069
|
+
}
|
|
4070
|
+
.np-select-input-group-item--without-needle:first-child {
|
|
4071
|
+
margin-top: calc(-1 * 8px);
|
|
4072
|
+
margin-top: calc(-1 * var(--size-8));
|
|
4073
|
+
}
|
|
4074
|
+
.np-select-input-group-item-header {
|
|
4075
|
+
position: sticky;
|
|
4076
|
+
top: 0px;
|
|
4077
|
+
z-index: 10;
|
|
4078
|
+
background-color: #ffffff;
|
|
4079
|
+
background-color: var(--color-background-elevated);
|
|
4080
|
+
}
|
|
4081
|
+
.np-select-input-option-container {
|
|
4088
4082
|
display: flex;
|
|
4089
|
-
|
|
4090
|
-
|
|
4083
|
+
cursor: default;
|
|
4084
|
+
-webkit-user-select: none;
|
|
4085
|
+
-moz-user-select: none;
|
|
4086
|
+
user-select: none;
|
|
4087
|
+
align-items: center;
|
|
4088
|
+
-moz-column-gap: 8px;
|
|
4089
|
+
column-gap: 8px;
|
|
4090
|
+
-moz-column-gap: var(--size-8);
|
|
4091
|
+
column-gap: var(--size-8);
|
|
4092
|
+
border-radius: 10px;
|
|
4093
|
+
border-radius: var(--radius-small);
|
|
4094
|
+
padding: 12px 16px;
|
|
4095
|
+
padding: var(--size-12) var(--size-16);
|
|
4096
|
+
color: var(--color-interactive-primary);
|
|
4091
4097
|
}
|
|
4092
|
-
.np-select-input-
|
|
4098
|
+
.np-select-input-option-container:focus {
|
|
4093
4099
|
outline: none;
|
|
4094
4100
|
}
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
}
|
|
4101
|
+
.np-select-input-option-container--active {
|
|
4102
|
+
box-shadow: inset 0 0 0 1px #c9cbce;
|
|
4103
|
+
box-shadow: inset 0 0 0 1px var(--color-interactive-secondary);
|
|
4099
4104
|
}
|
|
4100
|
-
.np-select-input-
|
|
4101
|
-
|
|
4102
|
-
|
|
4105
|
+
.np-select-input-option-container--disabled {
|
|
4106
|
+
opacity: 0.45;
|
|
4107
|
+
}
|
|
4108
|
+
.np-select-input-option-check--not-selected {
|
|
4109
|
+
visibility: hidden;
|
|
4110
|
+
}
|
|
4111
|
+
.np-select-input-option {
|
|
4112
|
+
flex: 1;
|
|
4103
4113
|
}
|
|
4104
4114
|
.np-select-input-option-content-container {
|
|
4105
4115
|
display: flex;
|
|
@@ -4138,6 +4148,10 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
4138
4148
|
margin-left: 8px;
|
|
4139
4149
|
margin-left: var(--size-8);
|
|
4140
4150
|
}
|
|
4151
|
+
.np-select-input-footer {
|
|
4152
|
+
padding: 4px 24px 16px;
|
|
4153
|
+
padding: var(--size-4) var(--size-24) var(--size-16);
|
|
4154
|
+
}
|
|
4141
4155
|
.np-select-input-addon-container {
|
|
4142
4156
|
pointer-events: none;
|
|
4143
4157
|
margin-inline-start: 4px;
|
|
@@ -4149,21 +4163,6 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
4149
4163
|
margin-inline-start: 4px;
|
|
4150
4164
|
margin-inline-start: var(--size-4);
|
|
4151
4165
|
}
|
|
4152
|
-
.np-select-input-addon-separator {
|
|
4153
|
-
height: 24px;
|
|
4154
|
-
height: var(--size-24);
|
|
4155
|
-
border-inline-start: 1px solid rgba(0,0,0,0.10196);
|
|
4156
|
-
border-inline-start: 1px solid var(--color-border-neutral);
|
|
4157
|
-
}
|
|
4158
|
-
.np-select-input-content {
|
|
4159
|
-
overflow: hidden;
|
|
4160
|
-
text-overflow: ellipsis;
|
|
4161
|
-
white-space: nowrap;
|
|
4162
|
-
}
|
|
4163
|
-
.np-select-input-placeholder {
|
|
4164
|
-
color: #768e9c;
|
|
4165
|
-
color: var(--color-content-tertiary);
|
|
4166
|
-
}
|
|
4167
4166
|
.np-select-input-addon {
|
|
4168
4167
|
border-width: 0;
|
|
4169
4168
|
background: none;
|
|
@@ -4193,6 +4192,12 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
4193
4192
|
outline: var(--ring-outline-color) solid var(--ring-outline-width);
|
|
4194
4193
|
outline-offset: var(--ring-outline-offset);
|
|
4195
4194
|
}
|
|
4195
|
+
.np-select-input-addon-separator {
|
|
4196
|
+
height: 24px;
|
|
4197
|
+
height: var(--size-24);
|
|
4198
|
+
border-inline-start: 1px solid rgba(0,0,0,0.10196);
|
|
4199
|
+
border-inline-start: 1px solid var(--color-border-neutral);
|
|
4200
|
+
}
|
|
4196
4201
|
.np-text-area {
|
|
4197
4202
|
min-height: 72px;
|
|
4198
4203
|
min-height: var(--size-72);
|
|
@@ -31,10 +31,7 @@ require('../common/closeButton/CloseButton.messages.js');
|
|
|
31
31
|
var jsxRuntime = require('react/jsx-runtime');
|
|
32
32
|
var contexts = require('../inputs/contexts.js');
|
|
33
33
|
var Input = require('../inputs/Input.js');
|
|
34
|
-
var SelectInput = require('../inputs/SelectInput
|
|
35
|
-
var SelectInputOptionContent = require('../inputs/SelectInput/OptionContent/SelectInputOptionContent.js');
|
|
36
|
-
require('@headlessui/react');
|
|
37
|
-
require('merge-props');
|
|
34
|
+
var SelectInput = require('../inputs/SelectInput.js');
|
|
38
35
|
var Title = require('../title/Title.js');
|
|
39
36
|
var MoneyInput_messages = require('./MoneyInput.messages.js');
|
|
40
37
|
var currencyFormatting = require('./currencyFormatting.js');
|
|
@@ -295,7 +292,7 @@ class MoneyInput extends React.Component {
|
|
|
295
292
|
value: selectedCurrency,
|
|
296
293
|
compareValues: "currency",
|
|
297
294
|
renderValue: (currency, withinTrigger) => {
|
|
298
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
295
|
+
return /*#__PURE__*/jsxRuntime.jsx(SelectInput.SelectInputOptionContent, {
|
|
299
296
|
title: withinTrigger ? currency.currency.toUpperCase() : currency.label,
|
|
300
297
|
note: withinTrigger ? undefined : currency.note,
|
|
301
298
|
icon: /*#__PURE__*/jsxRuntime.jsx(art.Flag, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </fieldset>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </fieldset>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|
|
@@ -27,10 +27,7 @@ import '../common/closeButton/CloseButton.messages.mjs';
|
|
|
27
27
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
28
28
|
import { withInputAttributes } from '../inputs/contexts.mjs';
|
|
29
29
|
import { Input } from '../inputs/Input.mjs';
|
|
30
|
-
import { SelectInput } from '../inputs/SelectInput
|
|
31
|
-
import { SelectInputOptionContent } from '../inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs';
|
|
32
|
-
import '@headlessui/react';
|
|
33
|
-
import 'merge-props';
|
|
30
|
+
import { SelectInput, SelectInputOptionContent } from '../inputs/SelectInput.mjs';
|
|
34
31
|
import Title from '../title/Title.mjs';
|
|
35
32
|
import messages from './MoneyInput.messages.mjs';
|
|
36
33
|
import { parseAmount } from './currencyFormatting.mjs';
|