@transferwise/components 0.0.0-experimental-ad2ab5f → 0.0.0-experimental-9c03743

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.
Files changed (40) hide show
  1. package/build/alert/Alert.js +1 -1
  2. package/build/alert/Alert.mjs +1 -1
  3. package/build/button/legacyUtils/legacyUtils.js +1 -1
  4. package/build/button/legacyUtils/legacyUtils.mjs +1 -1
  5. package/build/drawer/Drawer.js +1 -1
  6. package/build/drawer/Drawer.mjs +1 -1
  7. package/build/inputs/SelectInput.js +38 -4
  8. package/build/inputs/SelectInput.js.map +1 -1
  9. package/build/inputs/SelectInput.mjs +38 -4
  10. package/build/inputs/SelectInput.mjs.map +1 -1
  11. package/build/markdown/Markdown.js +1 -1
  12. package/build/markdown/Markdown.mjs +1 -1
  13. package/build/popover/Popover.js +1 -1
  14. package/build/popover/Popover.mjs +1 -1
  15. package/build/types/inputs/SelectInput.d.ts.map +1 -1
  16. package/build/types/utilities/deprecatedProperty/deprecatedProperty.d.ts +6 -8
  17. package/build/types/utilities/deprecatedProperty/deprecatedProperty.d.ts.map +1 -1
  18. package/build/types/utilities/deprecatedProperty/index.d.ts +1 -1
  19. package/build/types/utilities/deprecatedProperty/index.d.ts.map +1 -1
  20. package/build/types/utilities/index.d.ts +2 -2
  21. package/build/types/utilities/index.d.ts.map +1 -1
  22. package/build/types/utilities/logActionRequired.d.ts +2 -2
  23. package/build/types/utilities/logActionRequired.d.ts.map +1 -1
  24. package/build/utilities/logActionRequired.js.map +1 -1
  25. package/build/utilities/logActionRequired.mjs.map +1 -1
  26. package/package.json +3 -3
  27. package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.js +85 -0
  28. package/src/inputs/SelectInput.docs.mdx +19 -0
  29. package/src/inputs/SelectInput.spec.tsx +80 -1
  30. package/src/inputs/SelectInput.story.tsx +2 -2
  31. package/src/inputs/SelectInput.tsx +44 -2
  32. package/src/moneyInput/MoneyInput.rtl.spec.tsx +9 -0
  33. package/src/utilities/deprecatedProperty/{deprecatedProperty.ts → deprecatedProperty.js} +4 -23
  34. package/src/utilities/{logActionRequired.ts → logActionRequired.js} +2 -2
  35. package/build/types/test-utils/style-mock.d.ts +0 -1
  36. package/build/types/test-utils/style-mock.d.ts.map +0 -1
  37. package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.tsx +0 -78
  38. /package/src/test-utils/{style-mock.ts → style-mock.js} +0 -0
  39. /package/src/utilities/deprecatedProperty/{index.ts → index.js} +0 -0
  40. /package/src/utilities/{index.ts → index.js} +0 -0
@@ -8,10 +8,10 @@ var Body = require('../body/Body.js');
8
8
  var CloseButton = require('../common/closeButton/CloseButton.js');
9
9
  var StatusIcon = require('../statusIcon/StatusIcon.js');
10
10
  var Title = require('../title/Title.js');
11
- var logActionRequired = require('../utilities/logActionRequired.js');
12
11
  var InlineMarkdown = require('./inlineMarkdown/InlineMarkdown.js');
13
12
  var Action = require('../common/action/Action.js');
14
13
  var jsxRuntime = require('react/jsx-runtime');
14
+ var logActionRequired = require('../utilities/logActionRequired.js');
15
15
  var sentiment = require('../common/propsValues/sentiment.js');
16
16
  var size = require('../common/propsValues/size.js');
17
17
  var typography = require('../common/propsValues/typography.js');
@@ -4,10 +4,10 @@ import Body from '../body/Body.mjs';
4
4
  import { CloseButton } from '../common/closeButton/CloseButton.mjs';
5
5
  import StatusIcon from '../statusIcon/StatusIcon.mjs';
6
6
  import Title from '../title/Title.mjs';
7
- import { logActionRequired } from '../utilities/logActionRequired.mjs';
8
7
  import InlineMarkdown from './inlineMarkdown/InlineMarkdown.mjs';
9
8
  import { Action } from '../common/action/Action.mjs';
10
9
  import { jsxs, jsx } from 'react/jsx-runtime';
10
+ import { logActionRequired } from '../utilities/logActionRequired.mjs';
11
11
  import { Sentiment } from '../common/propsValues/sentiment.mjs';
12
12
  import { Size } from '../common/propsValues/size.mjs';
13
13
  import { Typography } from '../common/propsValues/typography.mjs';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var logActionRequired = require('../../utilities/logActionRequired.js');
4
3
  var type = require('../../common/propsValues/type.js');
4
+ var logActionRequired = require('../../utilities/logActionRequired.js');
5
5
  var control = require('../../common/propsValues/control.js');
6
6
  var size = require('../../common/propsValues/size.js');
7
7
 
@@ -1,5 +1,5 @@
1
- import { logActionRequiredIf } from '../../utilities/logActionRequired.mjs';
2
1
  import { Type } from '../../common/propsValues/type.mjs';
2
+ import { logActionRequiredIf } from '../../utilities/logActionRequired.mjs';
3
3
  import { ControlType, Priority } from '../../common/propsValues/control.mjs';
4
4
  import { Size } from '../../common/propsValues/size.mjs';
5
5
 
@@ -7,8 +7,8 @@ var Dimmer = require('../dimmer/Dimmer.js');
7
7
  var OverlayIdProvider = require('../provider/overlay/OverlayIdProvider.js');
8
8
  var SlidingPanel = require('../slidingPanel/SlidingPanel.js');
9
9
  var Title = require('../title/Title.js');
10
- var logActionRequired = require('../utilities/logActionRequired.js');
11
10
  var jsxRuntime = require('react/jsx-runtime');
11
+ var logActionRequired = require('../utilities/logActionRequired.js');
12
12
  var useLayout = require('../common/hooks/useLayout/useLayout.js');
13
13
  var position = require('../common/propsValues/position.js');
14
14
  var typography = require('../common/propsValues/typography.js');
@@ -5,8 +5,8 @@ import Dimmer from '../dimmer/Dimmer.mjs';
5
5
  import { OverlayIdContext } from '../provider/overlay/OverlayIdProvider.mjs';
6
6
  import SlidingPanel from '../slidingPanel/SlidingPanel.mjs';
7
7
  import Title from '../title/Title.mjs';
8
- import { logActionRequiredIf } from '../utilities/logActionRequired.mjs';
9
8
  import { jsx, jsxs } from 'react/jsx-runtime';
9
+ import { logActionRequiredIf } from '../utilities/logActionRequired.mjs';
10
10
  import { useLayout } from '../common/hooks/useLayout/useLayout.mjs';
11
11
  import { Position } from '../common/propsValues/position.mjs';
12
12
  import { Typography } from '../common/propsValues/typography.mjs';
@@ -170,7 +170,9 @@ function SelectInput({
170
170
  onClose,
171
171
  onClear
172
172
  }) {
173
- const inputAttributes = contexts.useInputAttributes();
173
+ const inputAttributes = contexts.useInputAttributes({
174
+ nonLabelable: true
175
+ });
174
176
  const id = idProp ?? inputAttributes.id;
175
177
  const [open, setOpen] = React.useState(false);
176
178
  const initialized = React.useRef(false);
@@ -201,6 +203,33 @@ function SelectInput({
201
203
  const searchInputRef = React.useRef(null);
202
204
  const listboxRef = React.useRef(null);
203
205
  const controllerRef = filterable ? searchInputRef : listboxRef;
206
+ /**
207
+ * There are few ways to assign a label to a listbox:
208
+ * 1. (preferred) if the trigger button has a meaningful label
209
+ * already, we can use the same thing. Example: MoneyInput
210
+ * 2. (fallback) We can use the input's main label
211
+ * 3. (ignored) we could follow Deque's suggestion and use the
212
+ * option header, but this becomes highly complicated as we can
213
+ * have multiple groups, or search or virtualisation enabled.
214
+ */
215
+ const getListBoxLabelProps = () => {
216
+ if (UNSAFE_triggerButtonProps?.['aria-label']) {
217
+ return {
218
+ listBoxLabel: UNSAFE_triggerButtonProps['aria-label']
219
+ };
220
+ }
221
+ if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {
222
+ return {
223
+ listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby']
224
+ };
225
+ }
226
+ if (inputAttributes['aria-labelledby']) {
227
+ return {
228
+ listBoxLabelledBy: inputAttributes['aria-labelledby']
229
+ };
230
+ }
231
+ return {};
232
+ };
204
233
  return /*#__PURE__*/jsxRuntime.jsx(react.Listbox, {
205
234
  name: name,
206
235
  multiple: multiple,
@@ -273,7 +302,7 @@ function SelectInput({
273
302
  setFilterQuery('');
274
303
  },
275
304
  children: /*#__PURE__*/jsxRuntime.jsx(SelectInputOptions, {
276
- id: `${id}Search`,
305
+ id: id ? `${id}Search` : undefined,
277
306
  items: items,
278
307
  renderValue: renderValue,
279
308
  renderFooter: renderFooter,
@@ -282,7 +311,8 @@ function SelectInput({
282
311
  searchInputRef: searchInputRef,
283
312
  listboxRef: listboxRef,
284
313
  filterQuery: deferredFilterQuery,
285
- onFilterChange: setFilterQuery
314
+ onFilterChange: setFilterQuery,
315
+ ...getListBoxLabelProps()
286
316
  })
287
317
  });
288
318
  }
@@ -358,7 +388,9 @@ function SelectInputOptions({
358
388
  searchInputRef,
359
389
  listboxRef,
360
390
  filterQuery,
361
- onFilterChange
391
+ onFilterChange,
392
+ listBoxLabel,
393
+ listBoxLabelledBy
362
394
  }) {
363
395
  const intl = reactIntl.useIntl();
364
396
  const controllerRef = filterable ? searchInputRef : listboxRef;
@@ -480,6 +512,8 @@ function SelectInputOptions({
480
512
  id: listboxId,
481
513
  role: "listbox",
482
514
  "aria-orientation": "vertical",
515
+ "aria-label": listBoxLabel,
516
+ "aria-labelledby": listBoxLabelledBy,
483
517
  tabIndex: 0,
484
518
  className: "np-select-input-listbox",
485
519
  children: !virtualized ? filteredItems.map((_, index) => getItemNode(index)) : /*#__PURE__*/jsxRuntime.jsx(virtua.Virtualizer, {
@@ -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 { clsx } from 'clsx';\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 { Virtualizer } 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\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\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): 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 'aria-label'?: string;\n };\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={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\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={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 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 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 id={`${id}Search`}\n items={items}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n onFilterChange={setFilterQuery}\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 <ListboxBase.Button\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 // 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' | 'id'\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 id,\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 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 filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] =\n needle != null\n ? filterSelectInputItems(dedupeSelectInputItems(items), (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n )\n : items;\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 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\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 };\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 }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\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 setMountedIndexes([]);\n onFilterChange(event.currentTarget.value);\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 >\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 {!virtualized ? (\n filteredItems.map((_, index) => getItemNode(index))\n ) : (\n <Virtualizer\n key={needle}\n count={filteredItems.length}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onRangeChange={(startIndex, endIndex) => {\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n for (let index = startIndex; index <= endIndex; index += 1) {\n indexes.add(index);\n }\n return [...indexes].sort((a, b) => a - b);\n });\n }}\n >\n {(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 </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={clsx(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\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 <ListboxBase.Option\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 </ListboxBase.Option>\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","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","clsx","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","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","prev","onKeyDown","key","SelectInputOptionContentWithinTriggerContext","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","createContext","restProps","interactionProps","useContext","Button","PolymorphicWithOverrides","role","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","useMemo","requestAnimationFrame","hasAttribute","dispatchEvent","KeyboardEvent","bubbles","filteredItems","resultsEmpty","virtualized","mountedIndexes","setMountedIndexes","prevMountedIndexes","indexes","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","SelectInputItemView","Options","static","setAttribute","removeAttribute","SearchInput","shape","test","currentTarget","CrossCircle","messages","noResultsFound","_","Virtualizer","count","keepMounted","scrollRef","onRangeChange","startIndex","endIndex","sort","a","b","SelectInputItemsCountContext","SelectInputItemPositionContext","SelectInputOption","SelectInputGroupItemView","headerId","label","itemsCount","itemPosition","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 { clsx } from 'clsx';\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 { Virtualizer } 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\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\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): 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 'aria-label'?: string;\n };\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={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\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={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 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({ 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 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 /**\n * There are few ways to assign a label to a listbox:\n * 1. (preferred) if the trigger button has a meaningful label\n * already, we can use the same thing. Example: MoneyInput\n * 2. (fallback) We can use the input's main label\n * 3. (ignored) we could follow Deque's suggestion and use the\n * option header, but this becomes highly complicated as we can\n * have multiple groups, or search or virtualisation enabled.\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}\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 id={id ? `${id}Search` : undefined}\n items={items}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n onFilterChange={setFilterQuery}\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 <ListboxBase.Button\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 // 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' | 'id'\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}\n\nfunction SelectInputOptions<T = string>({\n id,\n items,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n listBoxLabel,\n listBoxLabelledBy,\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 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 filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] =\n needle != null\n ? filterSelectInputItems(dedupeSelectInputItems(items), (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n )\n : items;\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 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\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 };\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 }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\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 setMountedIndexes([]);\n onFilterChange(event.currentTarget.value);\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 >\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 key={needle}\n count={filteredItems.length}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onRangeChange={(startIndex, endIndex) => {\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n for (let index = startIndex; index <= endIndex; index += 1) {\n indexes.add(index);\n }\n return [...indexes].sort((a, b) => a - b);\n });\n }}\n >\n {(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 </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={clsx(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\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 <ListboxBase.Option\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 </ListboxBase.Option>\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","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","clsx","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","nonLabelable","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","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","ListboxBase","by","uiDisabled","Array","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","prev","onKeyDown","key","SelectInputOptionContentWithinTriggerContext","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","createContext","restProps","interactionProps","useContext","Button","PolymorphicWithOverrides","role","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","useMemo","requestAnimationFrame","hasAttribute","dispatchEvent","KeyboardEvent","bubbles","filteredItems","resultsEmpty","virtualized","mountedIndexes","setMountedIndexes","prevMountedIndexes","indexes","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","SelectInputItemView","Options","static","setAttribute","removeAttribute","SearchInput","shape","test","currentTarget","CrossCircle","messages","noResultsFound","_","Virtualizer","count","keepMounted","scrollRef","onRangeChange","startIndex","endIndex","sort","a","b","SelectInputItemsCountContext","SelectInputItemPositionContext","SelectInputOption","SelectInputGroupItemView","headerId","label","itemsCount","itemPosition","Option","active","selected","Check","SelectInputOptionContent","title","note","description","icon","withinTrigger"],"mappings":"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"}
@@ -164,7 +164,9 @@ function SelectInput({
164
164
  onClose,
165
165
  onClear
166
166
  }) {
167
- const inputAttributes = useInputAttributes();
167
+ const inputAttributes = useInputAttributes({
168
+ nonLabelable: true
169
+ });
168
170
  const id = idProp ?? inputAttributes.id;
169
171
  const [open, setOpen] = useState(false);
170
172
  const initialized = useRef(false);
@@ -195,6 +197,33 @@ function SelectInput({
195
197
  const searchInputRef = useRef(null);
196
198
  const listboxRef = useRef(null);
197
199
  const controllerRef = filterable ? searchInputRef : listboxRef;
200
+ /**
201
+ * There are few ways to assign a label to a listbox:
202
+ * 1. (preferred) if the trigger button has a meaningful label
203
+ * already, we can use the same thing. Example: MoneyInput
204
+ * 2. (fallback) We can use the input's main label
205
+ * 3. (ignored) we could follow Deque's suggestion and use the
206
+ * option header, but this becomes highly complicated as we can
207
+ * have multiple groups, or search or virtualisation enabled.
208
+ */
209
+ const getListBoxLabelProps = () => {
210
+ if (UNSAFE_triggerButtonProps?.['aria-label']) {
211
+ return {
212
+ listBoxLabel: UNSAFE_triggerButtonProps['aria-label']
213
+ };
214
+ }
215
+ if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {
216
+ return {
217
+ listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby']
218
+ };
219
+ }
220
+ if (inputAttributes['aria-labelledby']) {
221
+ return {
222
+ listBoxLabelledBy: inputAttributes['aria-labelledby']
223
+ };
224
+ }
225
+ return {};
226
+ };
198
227
  return /*#__PURE__*/jsx(Listbox, {
199
228
  name: name,
200
229
  multiple: multiple,
@@ -267,7 +296,7 @@ function SelectInput({
267
296
  setFilterQuery('');
268
297
  },
269
298
  children: /*#__PURE__*/jsx(SelectInputOptions, {
270
- id: `${id}Search`,
299
+ id: id ? `${id}Search` : undefined,
271
300
  items: items,
272
301
  renderValue: renderValue,
273
302
  renderFooter: renderFooter,
@@ -276,7 +305,8 @@ function SelectInput({
276
305
  searchInputRef: searchInputRef,
277
306
  listboxRef: listboxRef,
278
307
  filterQuery: deferredFilterQuery,
279
- onFilterChange: setFilterQuery
308
+ onFilterChange: setFilterQuery,
309
+ ...getListBoxLabelProps()
280
310
  })
281
311
  });
282
312
  }
@@ -352,7 +382,9 @@ function SelectInputOptions({
352
382
  searchInputRef,
353
383
  listboxRef,
354
384
  filterQuery,
355
- onFilterChange
385
+ onFilterChange,
386
+ listBoxLabel,
387
+ listBoxLabelledBy
356
388
  }) {
357
389
  const intl = useIntl();
358
390
  const controllerRef = filterable ? searchInputRef : listboxRef;
@@ -474,6 +506,8 @@ function SelectInputOptions({
474
506
  id: listboxId,
475
507
  role: "listbox",
476
508
  "aria-orientation": "vertical",
509
+ "aria-label": listBoxLabel,
510
+ "aria-labelledby": listBoxLabelledBy,
477
511
  tabIndex: 0,
478
512
  className: "np-select-input-listbox",
479
513
  children: !virtualized ? filteredItems.map((_, index) => getItemNode(index)) : /*#__PURE__*/jsx(Virtualizer, {