@transferwise/components 0.0.0-experimental-8d46704 → 0.0.0-experimental-1067f73

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.
@@ -6,7 +6,6 @@ var classNames = require('classnames');
6
6
  var mergeProps = require('merge-props');
7
7
  var React = require('react');
8
8
  var reactIntl = require('react-intl');
9
- var virtua = require('virtua');
10
9
  var useEffectEvent = require('../common/hooks/useEffectEvent.js');
11
10
  var useScreenSize = require('../common/hooks/useScreenSize.js');
12
11
  var PolymorphicWithOverrides = require('../common/polymorphicWithOverrides/PolymorphicWithOverrides.js');
@@ -26,7 +25,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
25
  var classNames__default = /*#__PURE__*/_interopDefault(classNames);
27
26
  var mergeProps__default = /*#__PURE__*/_interopDefault(mergeProps);
28
27
 
29
- const MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;
30
28
  function searchableString(value) {
31
29
  return value.trim().replace(/\s+/gu, ' ').normalize('NFKC').toLowerCase();
32
30
  }
@@ -70,19 +68,19 @@ function dedupeSelectInputItems(items) {
70
68
  return item;
71
69
  });
72
70
  }
73
- function selectInputOptionItemIncludesNeedle(item, needle) {
71
+ function filterSelectInputOptionItem(item, needle) {
74
72
  return inferSearchableStrings(item.filterMatchers ?? item.value).some(haystack => haystack.includes(needle));
75
73
  }
76
- function filterSelectInputItems(items, predicate) {
74
+ function filterSelectInputItems(items, needle) {
77
75
  return items.filter(item => {
78
76
  switch (item.type) {
79
77
  case 'option':
80
78
  {
81
- return predicate(item);
79
+ return filterSelectInputOptionItem(item, needle);
82
80
  }
83
81
  case 'group':
84
82
  {
85
- return item.options.some(option => predicate(option));
83
+ return item.options.some(option => filterSelectInputOptionItem(option, needle));
86
84
  }
87
85
  }
88
86
  return false;
@@ -183,15 +181,12 @@ function SelectInput({
183
181
  }
184
182
  }, [handleClose, open]);
185
183
  const [filterQuery, _setFilterQuery] = React.useState('');
186
- const deferredFilterQuery = React.useDeferredValue(filterQuery);
187
184
  const setFilterQuery = useEffectEvent.useEffectEvent(query => {
188
185
  _setFilterQuery(query);
189
- if (query !== filterQuery) {
190
- onFilterChange({
191
- query,
192
- queryNormalized: query ? searchableString(query) : null
193
- });
194
- }
186
+ onFilterChange({
187
+ query,
188
+ queryNormalized: query ? searchableString(query) : null
189
+ });
195
190
  });
196
191
  const triggerRef = React.useRef(null);
197
192
  const screenSm = useScreenSize.useScreenSize(breakpoint.Breakpoint.SMALL);
@@ -203,7 +198,10 @@ function SelectInput({
203
198
  name: name,
204
199
  multiple: multiple,
205
200
  defaultValue: defaultValue,
206
- value: controlledValue,
201
+ value: controlledValue
202
+ // TODO: Remove assertion when upgrading TypeScript to v5
203
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
204
+ ,
207
205
  by: compareValues,
208
206
  disabled: disabled,
209
207
  onChange: value => {
@@ -268,7 +266,9 @@ function SelectInput({
268
266
  setOpen(false);
269
267
  },
270
268
  onCloseEnd: () => {
271
- setFilterQuery('');
269
+ if (filterQuery !== '') {
270
+ setFilterQuery('');
271
+ }
272
272
  },
273
273
  children: /*#__PURE__*/jsxRuntime.jsx(SelectInputOptions, {
274
274
  items: items,
@@ -278,8 +278,7 @@ function SelectInput({
278
278
  filterPlaceholder: filterPlaceholder,
279
279
  searchInputRef: searchInputRef,
280
280
  listboxRef: listboxRef,
281
- value: value,
282
- filterQuery: deferredFilterQuery,
281
+ filterQuery: filterQuery,
283
282
  onFilterChange: setFilterQuery
284
283
  })
285
284
  });
@@ -352,7 +351,6 @@ function SelectInputOptions({
352
351
  filterPlaceholder,
353
352
  searchInputRef,
354
353
  listboxRef,
355
- value,
356
354
  filterQuery,
357
355
  onFilterChange
358
356
  }) {
@@ -364,8 +362,7 @@ function SelectInputOptions({
364
362
  }
365
363
  return undefined;
366
364
  }, [filterQuery, filterable]);
367
- const filteredItems = needle != null ? filterSelectInputItems(items, item => selectInputOptionItemIncludesNeedle(item, needle)) : items;
368
- const resultsEmpty = needle != null && filteredItems.length === 0;
365
+ const resultsEmpty = needle != null && filterSelectInputItems(items, needle).length === 0;
369
366
  const listboxContainerRef = React.useRef(null);
370
367
  React.useEffect(() => {
371
368
  if (listboxContainerRef.current != null) {
@@ -375,22 +372,6 @@ function SelectInputOptions({
375
372
  const showStatus = resultsEmpty;
376
373
  const statusId = React.useId();
377
374
  const listboxId = React.useId();
378
- const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;
379
- const values = React.useMemo(() => new Set(Array.isArray(value) ? value : [value]), [value]);
380
- const listboxProps = {
381
- id: listboxId,
382
- role: 'listbox',
383
- 'aria-orientation': 'vertical',
384
- tabIndex: 0,
385
- className: 'np-select-input-listbox',
386
- children: (needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => /*#__PURE__*/jsxRuntime.jsx(SelectInputItemView
387
- // eslint-disable-next-line react/no-array-index-key
388
- , {
389
- item: item,
390
- renderValue: renderValue,
391
- needle: needle
392
- }, index))
393
- };
394
375
  return /*#__PURE__*/jsxRuntime.jsxs(react.Listbox.Options, {
395
376
  as: SelectInputOptionsContainer,
396
377
  static: true,
@@ -417,7 +398,7 @@ function SelectInputOptions({
417
398
  ref: searchInputRef,
418
399
  shape: "rectangle",
419
400
  placeholder: filterPlaceholder,
420
- defaultValue: filterQuery,
401
+ value: filterQuery,
421
402
  "aria-controls": listboxId,
422
403
  "aria-describedby": showStatus ? statusId : undefined,
423
404
  onKeyDown: event => {
@@ -434,7 +415,7 @@ function SelectInputOptions({
434
415
  }) : null, /*#__PURE__*/jsxRuntime.jsxs("section", {
435
416
  ref: listboxContainerRef,
436
417
  tabIndex: -1,
437
- className: classNames__default.default('np-select-input-listbox-container', virtualized && 'np-select-input-listbox-container--virtualized', needle == null && items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
418
+ className: classNames__default.default('np-select-input-listbox-container', items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
438
419
  children: [resultsEmpty ? /*#__PURE__*/jsxRuntime.jsxs("div", {
439
420
  id: statusId,
440
421
  className: "np-select-input-options-status",
@@ -442,19 +423,20 @@ function SelectInputOptions({
442
423
  size: 16,
443
424
  className: "np-select-input-options-status-icon"
444
425
  }), intl.formatMessage(SelectInput_messages.noResultsFound)]
445
- }) : null, !virtualized ? /*#__PURE__*/jsxRuntime.jsx("div", {
426
+ }) : null, /*#__PURE__*/jsxRuntime.jsx("div", {
446
427
  ref: listboxRef,
447
- ...listboxProps
448
- }) : /*#__PURE__*/React.createElement(virtua.VList, {
449
- ...listboxProps,
450
- key: needle,
451
- keepMounted: (() => {
452
- let index = 0;
453
- return filterSelectInputItems(filteredItems, item => values.has(item.value)).map(item => {
454
- index = filteredItems.indexOf(item, index + 1);
455
- return index;
456
- });
457
- })()
428
+ id: listboxId,
429
+ role: "listbox",
430
+ "aria-orientation": "vertical",
431
+ tabIndex: 0,
432
+ className: "np-select-input-listbox",
433
+ children: (needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => /*#__PURE__*/jsxRuntime.jsx(SelectInputItemView
434
+ // eslint-disable-next-line react/no-array-index-key
435
+ , {
436
+ item: item,
437
+ renderValue: renderValue,
438
+ needle: needle
439
+ }, index))
458
440
  }), renderFooter != null ? /*#__PURE__*/jsxRuntime.jsx("footer", {
459
441
  className: "np-select-input-footer",
460
442
  children: /*#__PURE__*/jsxRuntime.jsx("div", {
@@ -482,7 +464,7 @@ function SelectInputItemView({
482
464
  switch (item.type) {
483
465
  case 'option':
484
466
  {
485
- if (item.value != null && (needle == null || selectInputOptionItemIncludesNeedle(item, needle))) {
467
+ if (item.value != null && (needle == null || filterSelectInputOptionItem(item, needle))) {
486
468
  return /*#__PURE__*/jsxRuntime.jsx(SelectInputOption, {
487
469
  value: item.value,
488
470
  disabled: item.disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"SelectInput.js","sources":["../../src/inputs/SelectInput.tsx"],"sourcesContent":["import { Listbox as ListboxBase } from '@headlessui/react';\nimport { Check, ChevronDown, Cross, CrossCircle } from '@transferwise/icons';\nimport classNames from 'classnames';\nimport mergeProps from 'merge-props';\nimport {\n createContext,\n forwardRef,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport { VList } 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';\n\nconst MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;\n\nfunction searchableString(value: string) {\n return value.trim().replace(/\\s+/gu, ' ').normalize('NFKC').toLowerCase();\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\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}>({});\nconst SelectInputOptionContentWithinTriggerContext = createContext(false);\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: string;\n options: readonly SelectInputOptionItem<T>[];\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): SelectInputOptionItem<T | undefined> {\n if (!existingValues.has(item.value)) {\n existingValues.add(item.value);\n return item;\n }\n return { ...item, value: undefined };\n}\n\nfunction dedupeSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n): SelectInputItem<T | undefined>[] {\n const existingValues = new Set<T>();\n return items.map((item) => {\n switch (item.type) {\n case 'option': {\n return dedupeSelectInputOptionItem(item, existingValues);\n }\n case 'group': {\n return {\n ...item,\n options: item.options.map((option) =>\n dedupeSelectInputOptionItem(option, existingValues),\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\nexport interface SelectInputProps<T = string, M extends boolean = false> {\n id?: string;\n name?: string;\n multiple?: M;\n placeholder?: string;\n items: readonly SelectInputItem<NonNullable<T>>[];\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 disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'];\n onFilterChange?: (args: { query: string; queryNormalized: string | null }) => void;\n onChange?: (value: M extends true ? T[] : T) => 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={classNames('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={classNames(\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\n extends Pick<React.ComponentPropsWithoutRef<'button'>, 'className' | 'onClick'> {}\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={classNames(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 name,\n multiple,\n placeholder,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = defaultRenderTrigger,\n filterable,\n filterPlaceholder,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n onFilterChange = noop,\n onChange,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes();\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 useEffect(() => {\n if (initialized.current) {\n if (!open) {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [handleClose, 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 triggerRef = 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 return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue}\n value={controlledValue}\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 triggerRef.current = node;\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 triggerRef.current?.focus({ preventScroll: true });\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 items={items}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n value={value}\n filterQuery={deferredFilterQuery}\n onFilterChange={setFilterQuery}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\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 <ListboxBase.Button\n ref={ref}\n as={PolymorphicWithOverrides}\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 // Prevent absorbing actions early\n if (event.key === 'Escape' || event.key === 'Tab') {\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>\n extends Pick<\n SelectInputProps<T>,\n 'items' | 'renderValue' | 'renderFooter' | 'filterable' | 'filterPlaceholder'\n > {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n value: readonly T[] | T;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n}\n\nfunction SelectInputOptions<T = string>({\n items,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n searchInputRef,\n listboxRef,\n value,\n filterQuery,\n onFilterChange,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n\n const filteredItems =\n needle != null\n ? filterSelectInputItems(items, (item) => selectInputOptionItemIncludesNeedle(item, needle))\n : items;\n const resultsEmpty = needle != null && filteredItems.length === 0;\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 const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;\n\n const values = useMemo(\n () => new Set(Array.isArray(value) ? (value as readonly T[]) : [value as T]),\n [value],\n );\n\n const listboxProps = {\n id: listboxId,\n role: 'listbox',\n 'aria-orientation': 'vertical',\n tabIndex: 0,\n className: 'np-select-input-listbox',\n children: (needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => (\n <SelectInputItemView\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n item={item}\n renderValue={renderValue}\n needle={needle}\n />\n )),\n } as const;\n\n return (\n <ListboxBase.Options\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 (value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n if (filterQuery) {\n // Ensure having an active option while filtering\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n defaultValue={filterQuery}\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 onFilterChange(event.currentTarget.value);\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={classNames(\n 'np-select-input-listbox-container',\n virtualized && 'np-select-input-listbox-container--virtualized',\n needle == null &&\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\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 {!virtualized ? (\n <div ref={listboxRef} {...listboxProps} />\n ) : (\n <VList\n {...listboxProps}\n key={needle}\n keepMounted={(() => {\n let index = 0;\n return filterSelectInputItems(filteredItems, (item) => values.has(item.value)).map(\n (item) => {\n index = filteredItems.indexOf(item, index + 1);\n return index;\n },\n );\n })()}\n />\n )}\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 </ListboxBase.Options>\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>\n extends SelectInputItemViewProps<T, SelectInputGroupItem<T | undefined>> {}\n\nfunction SelectInputGroupItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputGroupItemViewProps<T>) {\n const headerId = useId();\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 role=\"group\"\n aria-labelledby={headerId}\n className={classNames(needle === null && 'np-select-input-group-item--without-needle')}\n >\n {needle == null ? (\n <header\n id={headerId}\n role=\"none\"\n className=\"np-select-input-group-item-header np-text-title-group\"\n >\n {item.label}\n </header>\n ) : 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\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 return (\n <ListboxBase.Option\n as=\"div\"\n value={value}\n disabled={disabled}\n className={({ active, disabled: uiDisabled }) =>\n classNames(\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={classNames(\n 'np-select-input-option-check',\n !selected && 'np-select-input-option-check--not-selected',\n )}\n />\n </>\n )}\n </ListboxBase.Option>\n );\n}\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={classNames(\n 'np-select-input-option-content-container',\n (note || description) && 'np-text-body-large',\n )}\n >\n {icon ? (\n <div\n className={classNames(\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={classNames(\n 'np-select-input-option-content-text-line-1',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n <h4 className=\"np-select-input-option-content-text-primary d-inline\">{title}</h4>\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={classNames(\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","SelectInputTriggerButtonPropsContext","createContext","SelectInputOptionContentWithinTriggerContext","dedupeSelectInputOptionItem","item","existingValues","has","add","undefined","dedupeSelectInputItems","items","Set","type","options","option","selectInputOptionItemIncludesNeedle","needle","filterMatchers","some","haystack","includes","filterSelectInputItems","predicate","defaultRenderTrigger","content","placeholderShown","clear","disabled","size","className","_jsx","InputGroup","addonEnd","_jsxs","classNames","children","_Fragment","SelectInputClearButton","onClick","event","preventDefault","ChevronDown","initialContentWidth","padding","SelectInputTriggerButton","as","ButtonInput","intl","useIntl","formatMessage","dateTriggerMessages","ariaLabel","Cross","noop","SelectInput","id","idProp","name","multiple","placeholder","defaultValue","controlledValue","compareValues","renderValue","String","renderFooter","renderTrigger","filterable","filterPlaceholder","UNSAFE_triggerButtonProps","onFilterChange","onChange","onClose","onClear","inputAttributes","useInputAttributes","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","setFilterQuery","query","queryNormalized","triggerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","Popover","BottomSheet","searchInputRef","listboxRef","controllerRef","ListboxBase","by","uiDisabled","Array","isArray","length","placement","ref","getInteractionProps","Provider","node","mergeProps","prev","onKeyDown","key","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","restProps","interactionProps","useContext","Button","PolymorphicWithOverrides","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","role","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","useMemo","filteredItems","resultsEmpty","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","virtualized","listboxProps","index","SelectInputItemView","Options","static","setAttribute","removeAttribute","dispatchEvent","KeyboardEvent","bubbles","SearchInput","shape","test","currentTarget","CrossCircle","messages","noResultsFound","_createElement","VList","keepMounted","indexOf","SelectInputOption","SelectInputGroupItemView","headerId","label","Option","active","selected","Check","SelectInputOptionContent","title","note","description","icon","withinTrigger"],"mappings":"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"}
1
+ {"version":3,"file":"SelectInput.js","sources":["../../src/inputs/SelectInput.tsx"],"sourcesContent":["import { Listbox as ListboxBase } from '@headlessui/react';\nimport { Check, ChevronDown, Cross, CrossCircle } from '@transferwise/icons';\nimport classNames from 'classnames';\nimport mergeProps from 'merge-props';\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\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';\n\nfunction searchableString(value: string) {\n return value.trim().replace(/\\s+/gu, ' ').normalize('NFKC').toLowerCase();\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): innerValue is string => typeof innerValue === 'string')\n .map((innerValue) => searchableString(innerValue));\n }\n\n return [];\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}>({});\nconst SelectInputOptionContentWithinTriggerContext = createContext(false);\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: string;\n options: readonly SelectInputOptionItem<T>[];\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): SelectInputOptionItem<T | undefined> {\n if (!existingValues.has(item.value)) {\n existingValues.add(item.value);\n return item;\n }\n return { ...item, value: undefined };\n}\n\nfunction dedupeSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n): SelectInputItem<T | undefined>[] {\n const existingValues = new Set<T>();\n return items.map((item) => {\n switch (item.type) {\n case 'option': {\n return dedupeSelectInputOptionItem(item, existingValues);\n }\n case 'group': {\n return {\n ...item,\n options: item.options.map((option) =>\n dedupeSelectInputOptionItem(option, existingValues),\n ),\n };\n }\n default:\n }\n return item;\n });\n}\n\nfunction filterSelectInputOptionItem<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>(items: readonly SelectInputItem<T>[], needle: string) {\n return items.filter((item) => {\n switch (item.type) {\n case 'option': {\n return filterSelectInputOptionItem(item, needle);\n }\n case 'group': {\n return item.options.some((option) => filterSelectInputOptionItem(option, needle));\n }\n default:\n }\n return false;\n });\n}\n\nexport interface SelectInputProps<T = string, M extends boolean = false> {\n id?: string;\n name?: string;\n multiple?: M;\n placeholder?: string;\n items: readonly SelectInputItem<NonNullable<T>>[];\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 disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'];\n onFilterChange?: (args: { query: string; queryNormalized: string | null }) => void;\n onChange?: (value: M extends true ? T[] : T) => 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={classNames('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={classNames(\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\n extends Pick<React.ComponentPropsWithoutRef<'button'>, 'className' | 'onClick'> {}\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={classNames(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 name,\n multiple,\n placeholder,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = defaultRenderTrigger,\n filterable,\n filterPlaceholder,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n onFilterChange = noop,\n onChange,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes();\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 useEffect(() => {\n if (initialized.current) {\n if (!open) {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [handleClose, open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const setFilterQuery = useEffectEvent((query: string) => {\n _setFilterQuery(query);\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n });\n\n const triggerRef = 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 return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue}\n value={controlledValue}\n // TODO: Remove assertion when upgrading TypeScript to v5\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n by={compareValues as any}\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 triggerRef.current = node;\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\n .map((option: NonNullable<T>) => 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 triggerRef.current?.focus({ preventScroll: true });\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 if (filterQuery !== '') {\n setFilterQuery('');\n }\n }}\n >\n <SelectInputOptions\n items={items}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={filterQuery}\n onFilterChange={setFilterQuery}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\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 <ListboxBase.Button\n ref={ref}\n as={PolymorphicWithOverrides}\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 // Prevent absorbing actions early\n if (event.key === 'Escape' || event.key === 'Tab') {\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>\n extends Pick<\n SelectInputProps<T>,\n 'items' | 'renderValue' | 'renderFooter' | 'filterable' | 'filterPlaceholder'\n > {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n}\n\nfunction SelectInputOptions<T = string>({\n items,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n const resultsEmpty = needle != null && filterSelectInputItems(items, needle).length === 0;\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 const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n return (\n <ListboxBase.Options\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 (value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n if (filterQuery) {\n // Ensure having an active option while filtering\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n value={filterQuery}\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 onFilterChange(event.currentTarget.value);\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={classNames(\n 'np-select-input-listbox-container',\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\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 tabIndex={0}\n className=\"np-select-input-listbox\"\n >\n {(needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => (\n <SelectInputItemView\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n item={item}\n renderValue={renderValue}\n needle={needle}\n />\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 </ListboxBase.Options>\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 (item.value != null && (needle == null || filterSelectInputOptionItem(item, needle))) {\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>\n extends SelectInputItemViewProps<T, SelectInputGroupItem<T | undefined>> {}\n\nfunction SelectInputGroupItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputGroupItemViewProps<T>) {\n const headerId = useId();\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 role=\"group\"\n aria-labelledby={headerId}\n className={classNames(needle === null && 'np-select-input-group-item--without-needle')}\n >\n {needle == null ? (\n <header\n id={headerId}\n role=\"none\"\n className=\"np-select-input-group-item-header np-text-title-group\"\n >\n {item.label}\n </header>\n ) : 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\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 return (\n <ListboxBase.Option\n as=\"div\"\n value={value}\n disabled={disabled}\n className={({ active, disabled: uiDisabled }) =>\n classNames(\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={classNames(\n 'np-select-input-option-check',\n !selected && 'np-select-input-option-check--not-selected',\n )}\n />\n </>\n )}\n </ListboxBase.Option>\n );\n}\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={classNames(\n 'np-select-input-option-content-container',\n (note || description) && 'np-text-body-large',\n )}\n >\n {icon ? (\n <div\n className={classNames(\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={classNames(\n 'np-select-input-option-content-text-line-1',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n <h4 className=\"np-select-input-option-content-text-primary d-inline\">{title}</h4>\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={classNames(\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":["searchableString","value","trim","replace","normalize","toLowerCase","inferSearchableStrings","Object","values","filter","innerValue","map","SelectInputTriggerButtonPropsContext","createContext","SelectInputOptionContentWithinTriggerContext","dedupeSelectInputOptionItem","item","existingValues","has","add","undefined","dedupeSelectInputItems","items","Set","type","options","option","filterSelectInputOptionItem","needle","filterMatchers","some","haystack","includes","filterSelectInputItems","defaultRenderTrigger","content","placeholderShown","clear","disabled","size","className","_jsx","InputGroup","addonEnd","_jsxs","classNames","children","_Fragment","SelectInputClearButton","onClick","event","preventDefault","ChevronDown","initialContentWidth","padding","SelectInputTriggerButton","as","ButtonInput","intl","useIntl","formatMessage","dateTriggerMessages","ariaLabel","Cross","noop","SelectInput","id","idProp","name","multiple","placeholder","defaultValue","controlledValue","compareValues","renderValue","String","renderFooter","renderTrigger","filterable","filterPlaceholder","UNSAFE_triggerButtonProps","onFilterChange","onChange","onClose","onClear","inputAttributes","useInputAttributes","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","useEffect","current","filterQuery","_setFilterQuery","setFilterQuery","query","queryNormalized","triggerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","Popover","BottomSheet","searchInputRef","listboxRef","controllerRef","ListboxBase","by","uiDisabled","Array","isArray","length","placement","ref","getInteractionProps","Provider","node","mergeProps","prev","onKeyDown","key","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","restProps","interactionProps","useContext","Button","PolymorphicWithOverrides","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","role","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","useMemo","resultsEmpty","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","Options","static","setAttribute","removeAttribute","dispatchEvent","KeyboardEvent","bubbles","SearchInput","shape","test","currentTarget","CrossCircle","messages","noResultsFound","index","SelectInputItemView","SelectInputOption","SelectInputGroupItemView","headerId","label","Option","active","selected","Check","SelectInputOptionContent","title","note","description","icon","withinTrigger"],"mappings":"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"}
@@ -2,9 +2,8 @@ import { Listbox } from '@headlessui/react';
2
2
  import { CrossCircle, Check, ChevronDown, Cross } from '@transferwise/icons';
3
3
  import classNames from 'classnames';
4
4
  import mergeProps from 'merge-props';
5
- import { useState, useRef, useEffect, useDeferredValue, useContext, useMemo, useId, createElement, createContext, forwardRef } from 'react';
5
+ import { useState, useRef, useEffect, useContext, useMemo, useId, createContext, forwardRef } from 'react';
6
6
  import { useIntl } from 'react-intl';
7
- import { VList } from 'virtua';
8
7
  import { useEffectEvent } from '../common/hooks/useEffectEvent.mjs';
9
8
  import { useScreenSize } from '../common/hooks/useScreenSize.mjs';
10
9
  import { PolymorphicWithOverrides } from '../common/polymorphicWithOverrides/PolymorphicWithOverrides.mjs';
@@ -19,7 +18,6 @@ import { SearchInput } from './SearchInput.mjs';
19
18
  import messages from './SelectInput.messages.mjs';
20
19
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
21
20
 
22
- const MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;
23
21
  function searchableString(value) {
24
22
  return value.trim().replace(/\s+/gu, ' ').normalize('NFKC').toLowerCase();
25
23
  }
@@ -63,19 +61,19 @@ function dedupeSelectInputItems(items) {
63
61
  return item;
64
62
  });
65
63
  }
66
- function selectInputOptionItemIncludesNeedle(item, needle) {
64
+ function filterSelectInputOptionItem(item, needle) {
67
65
  return inferSearchableStrings(item.filterMatchers ?? item.value).some(haystack => haystack.includes(needle));
68
66
  }
69
- function filterSelectInputItems(items, predicate) {
67
+ function filterSelectInputItems(items, needle) {
70
68
  return items.filter(item => {
71
69
  switch (item.type) {
72
70
  case 'option':
73
71
  {
74
- return predicate(item);
72
+ return filterSelectInputOptionItem(item, needle);
75
73
  }
76
74
  case 'group':
77
75
  {
78
- return item.options.some(option => predicate(option));
76
+ return item.options.some(option => filterSelectInputOptionItem(option, needle));
79
77
  }
80
78
  }
81
79
  return false;
@@ -176,15 +174,12 @@ function SelectInput({
176
174
  }
177
175
  }, [handleClose, open]);
178
176
  const [filterQuery, _setFilterQuery] = useState('');
179
- const deferredFilterQuery = useDeferredValue(filterQuery);
180
177
  const setFilterQuery = useEffectEvent(query => {
181
178
  _setFilterQuery(query);
182
- if (query !== filterQuery) {
183
- onFilterChange({
184
- query,
185
- queryNormalized: query ? searchableString(query) : null
186
- });
187
- }
179
+ onFilterChange({
180
+ query,
181
+ queryNormalized: query ? searchableString(query) : null
182
+ });
188
183
  });
189
184
  const triggerRef = useRef(null);
190
185
  const screenSm = useScreenSize(Breakpoint.SMALL);
@@ -196,7 +191,10 @@ function SelectInput({
196
191
  name: name,
197
192
  multiple: multiple,
198
193
  defaultValue: defaultValue,
199
- value: controlledValue,
194
+ value: controlledValue
195
+ // TODO: Remove assertion when upgrading TypeScript to v5
196
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
197
+ ,
200
198
  by: compareValues,
201
199
  disabled: disabled,
202
200
  onChange: value => {
@@ -261,7 +259,9 @@ function SelectInput({
261
259
  setOpen(false);
262
260
  },
263
261
  onCloseEnd: () => {
264
- setFilterQuery('');
262
+ if (filterQuery !== '') {
263
+ setFilterQuery('');
264
+ }
265
265
  },
266
266
  children: /*#__PURE__*/jsx(SelectInputOptions, {
267
267
  items: items,
@@ -271,8 +271,7 @@ function SelectInput({
271
271
  filterPlaceholder: filterPlaceholder,
272
272
  searchInputRef: searchInputRef,
273
273
  listboxRef: listboxRef,
274
- value: value,
275
- filterQuery: deferredFilterQuery,
274
+ filterQuery: filterQuery,
276
275
  onFilterChange: setFilterQuery
277
276
  })
278
277
  });
@@ -345,7 +344,6 @@ function SelectInputOptions({
345
344
  filterPlaceholder,
346
345
  searchInputRef,
347
346
  listboxRef,
348
- value,
349
347
  filterQuery,
350
348
  onFilterChange
351
349
  }) {
@@ -357,8 +355,7 @@ function SelectInputOptions({
357
355
  }
358
356
  return undefined;
359
357
  }, [filterQuery, filterable]);
360
- const filteredItems = needle != null ? filterSelectInputItems(items, item => selectInputOptionItemIncludesNeedle(item, needle)) : items;
361
- const resultsEmpty = needle != null && filteredItems.length === 0;
358
+ const resultsEmpty = needle != null && filterSelectInputItems(items, needle).length === 0;
362
359
  const listboxContainerRef = useRef(null);
363
360
  useEffect(() => {
364
361
  if (listboxContainerRef.current != null) {
@@ -368,22 +365,6 @@ function SelectInputOptions({
368
365
  const showStatus = resultsEmpty;
369
366
  const statusId = useId();
370
367
  const listboxId = useId();
371
- const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;
372
- const values = useMemo(() => new Set(Array.isArray(value) ? value : [value]), [value]);
373
- const listboxProps = {
374
- id: listboxId,
375
- role: 'listbox',
376
- 'aria-orientation': 'vertical',
377
- tabIndex: 0,
378
- className: 'np-select-input-listbox',
379
- children: (needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => /*#__PURE__*/jsx(SelectInputItemView
380
- // eslint-disable-next-line react/no-array-index-key
381
- , {
382
- item: item,
383
- renderValue: renderValue,
384
- needle: needle
385
- }, index))
386
- };
387
368
  return /*#__PURE__*/jsxs(Listbox.Options, {
388
369
  as: SelectInputOptionsContainer,
389
370
  static: true,
@@ -410,7 +391,7 @@ function SelectInputOptions({
410
391
  ref: searchInputRef,
411
392
  shape: "rectangle",
412
393
  placeholder: filterPlaceholder,
413
- defaultValue: filterQuery,
394
+ value: filterQuery,
414
395
  "aria-controls": listboxId,
415
396
  "aria-describedby": showStatus ? statusId : undefined,
416
397
  onKeyDown: event => {
@@ -427,7 +408,7 @@ function SelectInputOptions({
427
408
  }) : null, /*#__PURE__*/jsxs("section", {
428
409
  ref: listboxContainerRef,
429
410
  tabIndex: -1,
430
- className: classNames('np-select-input-listbox-container', virtualized && 'np-select-input-listbox-container--virtualized', needle == null && items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
411
+ className: classNames('np-select-input-listbox-container', items.some(item => item.type === 'group') && 'np-select-input-listbox-container--has-group'),
431
412
  children: [resultsEmpty ? /*#__PURE__*/jsxs("div", {
432
413
  id: statusId,
433
414
  className: "np-select-input-options-status",
@@ -435,19 +416,20 @@ function SelectInputOptions({
435
416
  size: 16,
436
417
  className: "np-select-input-options-status-icon"
437
418
  }), intl.formatMessage(messages.noResultsFound)]
438
- }) : null, !virtualized ? /*#__PURE__*/jsx("div", {
419
+ }) : null, /*#__PURE__*/jsx("div", {
439
420
  ref: listboxRef,
440
- ...listboxProps
441
- }) : /*#__PURE__*/createElement(VList, {
442
- ...listboxProps,
443
- key: needle,
444
- keepMounted: (() => {
445
- let index = 0;
446
- return filterSelectInputItems(filteredItems, item => values.has(item.value)).map(item => {
447
- index = filteredItems.indexOf(item, index + 1);
448
- return index;
449
- });
450
- })()
421
+ id: listboxId,
422
+ role: "listbox",
423
+ "aria-orientation": "vertical",
424
+ tabIndex: 0,
425
+ className: "np-select-input-listbox",
426
+ children: (needle != null ? dedupeSelectInputItems(items) : items).map((item, index) => /*#__PURE__*/jsx(SelectInputItemView
427
+ // eslint-disable-next-line react/no-array-index-key
428
+ , {
429
+ item: item,
430
+ renderValue: renderValue,
431
+ needle: needle
432
+ }, index))
451
433
  }), renderFooter != null ? /*#__PURE__*/jsx("footer", {
452
434
  className: "np-select-input-footer",
453
435
  children: /*#__PURE__*/jsx("div", {
@@ -475,7 +457,7 @@ function SelectInputItemView({
475
457
  switch (item.type) {
476
458
  case 'option':
477
459
  {
478
- if (item.value != null && (needle == null || selectInputOptionItemIncludesNeedle(item, needle))) {
460
+ if (item.value != null && (needle == null || filterSelectInputOptionItem(item, needle))) {
479
461
  return /*#__PURE__*/jsx(SelectInputOption, {
480
462
  value: item.value,
481
463
  disabled: item.disabled,