@transferwise/components 46.65.0 → 46.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/decision/Decision.js +4 -0
- package/build/decision/Decision.js.map +1 -1
- package/build/decision/Decision.mjs +4 -0
- package/build/decision/Decision.mjs.map +1 -1
- package/build/i18n/en.json +1 -0
- package/build/i18n/en.json.js +1 -0
- package/build/i18n/en.json.js.map +1 -1
- package/build/i18n/en.json.mjs +1 -0
- package/build/i18n/en.json.mjs.map +1 -1
- package/build/inputs/SelectInput.js +4 -0
- package/build/inputs/SelectInput.js.map +1 -1
- package/build/inputs/SelectInput.mjs +4 -0
- package/build/inputs/SelectInput.mjs.map +1 -1
- package/build/main.css +0 -24
- package/build/moneyInput/MoneyInput.js +8 -1
- package/build/moneyInput/MoneyInput.js.map +1 -1
- package/build/moneyInput/MoneyInput.messages.js +3 -0
- package/build/moneyInput/MoneyInput.messages.js.map +1 -1
- package/build/moneyInput/MoneyInput.messages.mjs +3 -0
- package/build/moneyInput/MoneyInput.messages.mjs.map +1 -1
- package/build/moneyInput/MoneyInput.mjs +8 -1
- package/build/moneyInput/MoneyInput.mjs.map +1 -1
- package/build/stepper/Stepper.js +12 -1
- package/build/stepper/Stepper.js.map +1 -1
- package/build/stepper/Stepper.mjs +12 -1
- package/build/stepper/Stepper.mjs.map +1 -1
- package/build/styles/main.css +0 -24
- package/build/styles/stepper/Stepper.css +0 -24
- package/build/tile/Tile.js +2 -0
- package/build/tile/Tile.js.map +1 -1
- package/build/tile/Tile.mjs +2 -0
- package/build/tile/Tile.mjs.map +1 -1
- package/build/types/decision/Decision.d.ts +1 -0
- package/build/types/decision/Decision.d.ts.map +1 -1
- package/build/types/inputs/SelectInput.d.ts +3 -1
- package/build/types/inputs/SelectInput.d.ts.map +1 -1
- package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
- package/build/types/moneyInput/MoneyInput.messages.d.ts +5 -0
- package/build/types/moneyInput/MoneyInput.messages.d.ts.map +1 -1
- package/build/types/stepper/Stepper.d.ts.map +1 -1
- package/build/types/tile/Tile.d.ts +3 -1
- package/build/types/tile/Tile.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/decision/Decision.spec.tsx +166 -0
- package/src/decision/Decision.story.tsx +208 -202
- package/src/decision/Decision.tsx +26 -2
- package/src/flowNavigation/__snapshots__/FlowNavigation.spec.js.snap +1 -2
- package/src/i18n/en.json +1 -0
- package/src/inputs/SelectInput.tsx +8 -3
- package/src/main.css +0 -24
- package/src/moneyInput/MoneyInput.docs.mdx +34 -0
- package/src/moneyInput/MoneyInput.messages.ts +5 -0
- package/src/moneyInput/MoneyInput.rtl.spec.tsx +47 -0
- package/src/moneyInput/MoneyInput.spec.js +0 -11
- package/src/moneyInput/MoneyInput.story.tsx +10 -7
- package/src/moneyInput/MoneyInput.tsx +8 -1
- package/src/stepper/Stepper.css +0 -24
- package/src/stepper/Stepper.less +0 -17
- package/src/stepper/Stepper.spec.js +11 -5
- package/src/stepper/Stepper.tsx +13 -2
- package/src/tile/Tile.tsx +4 -0
- package/src/withId/withId.story.tsx +1 -0
- package/src/decision/Decision.spec.js +0 -127
|
@@ -32,6 +32,7 @@ const Decision = ({
|
|
|
32
32
|
const screenSm = useScreenSize.useScreenSize(breakpoint.Breakpoint.SMALL);
|
|
33
33
|
if (type === exports.DecisionType.NAVIGATION) {
|
|
34
34
|
const renderedOptions = options.map(({
|
|
35
|
+
'aria-label': ariaLabel,
|
|
35
36
|
title,
|
|
36
37
|
description,
|
|
37
38
|
disabled,
|
|
@@ -44,6 +45,7 @@ const Decision = ({
|
|
|
44
45
|
}, key) => /*#__PURE__*/jsxRuntime.jsx(NavigationOption
|
|
45
46
|
// eslint-disable-next-line react/no-array-index-key
|
|
46
47
|
, {
|
|
48
|
+
"aria-label": ariaLabel,
|
|
47
49
|
complex: false,
|
|
48
50
|
content: description,
|
|
49
51
|
disabled: disabled,
|
|
@@ -66,6 +68,7 @@ const Decision = ({
|
|
|
66
68
|
'np-decision--grid': isGrid
|
|
67
69
|
}, breakpoint ? isGrid && 'flex-wrap' : 'flex-column'),
|
|
68
70
|
children: breakpoint ? options.map(({
|
|
71
|
+
'aria-label': ariaLabel,
|
|
69
72
|
description,
|
|
70
73
|
disabled,
|
|
71
74
|
href,
|
|
@@ -81,6 +84,7 @@ const Decision = ({
|
|
|
81
84
|
className: clsx.clsx(`np-decision__tile${isSmall ? '--small' : ''}`, {
|
|
82
85
|
'np-decision__tile--fixed-width': isGrid
|
|
83
86
|
}),
|
|
87
|
+
"aria-label": ariaLabel,
|
|
84
88
|
description: description,
|
|
85
89
|
disabled: disabled,
|
|
86
90
|
href: href,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Decision.js","sources":["../../src/decision/Decision.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport { Size, Breakpoint, SizeSmall, SizeMedium } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport NavigationOption from '../navigationOption';\nimport Tile from '../tile';\n\ninterface DecisionOption {\n description?: React.ReactNode;\n disabled?: boolean;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n media: {\n block: React.ReactNode;\n list: React.ReactNode;\n };\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n title: React.ReactNode;\n}\n\nexport enum DecisionPresentation {\n LIST = 'LIST',\n LIST_BLOCK = 'LIST_BLOCK',\n LIST_BLOCK_GRID = 'LIST_BLOCK_GRID',\n}\n\nexport enum DecisionType {\n NAVIGATION = 'NAVIGATION',\n}\n\nexport interface DecisionProps {\n /** A list of elements to be rendered */\n options: readonly DecisionOption[];\n /** Handles the display mode of the component */\n presentation?: `${DecisionPresentation}`;\n /** Size currently affects only Tile dimension */\n size?: SizeSmall | SizeMedium;\n /** Decide which kind of element type needs to be rendered ex: Navigation Options or in the future Radio or Checkbox Options */\n type?: `${DecisionType}`;\n\n /** Display media in a circle in list presentation */\n showMediaCircleInList?: boolean;\n\n /** Sets navigation options to be aligned with the parent container */\n isContainerAligned?: boolean;\n}\n\nconst Decision = ({\n options,\n presentation = DecisionPresentation.LIST,\n size = Size.MEDIUM,\n type = DecisionType.NAVIGATION,\n showMediaCircleInList = true,\n isContainerAligned = false,\n}: DecisionProps) => {\n const screenXs = useScreenSize(Breakpoint.EXTRA_SMALL);\n const screenSm = useScreenSize(Breakpoint.SMALL);\n\n if (type === DecisionType.NAVIGATION) {\n const renderedOptions = options.map(\n ({ title
|
|
1
|
+
{"version":3,"file":"Decision.js","sources":["../../src/decision/Decision.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport { Size, Breakpoint, SizeSmall, SizeMedium } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport NavigationOption from '../navigationOption';\nimport Tile from '../tile';\n\ninterface DecisionOption {\n 'aria-label'?: string;\n description?: React.ReactNode;\n disabled?: boolean;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n media: {\n block: React.ReactNode;\n list: React.ReactNode;\n };\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n title: React.ReactNode;\n}\n\nexport enum DecisionPresentation {\n LIST = 'LIST',\n LIST_BLOCK = 'LIST_BLOCK',\n LIST_BLOCK_GRID = 'LIST_BLOCK_GRID',\n}\n\nexport enum DecisionType {\n NAVIGATION = 'NAVIGATION',\n}\n\nexport interface DecisionProps {\n /** A list of elements to be rendered */\n options: readonly DecisionOption[];\n /** Handles the display mode of the component */\n presentation?: `${DecisionPresentation}`;\n /** Size currently affects only Tile dimension */\n size?: SizeSmall | SizeMedium;\n /** Decide which kind of element type needs to be rendered ex: Navigation Options or in the future Radio or Checkbox Options */\n type?: `${DecisionType}`;\n\n /** Display media in a circle in list presentation */\n showMediaCircleInList?: boolean;\n\n /** Sets navigation options to be aligned with the parent container */\n isContainerAligned?: boolean;\n}\n\nconst Decision = ({\n options,\n presentation = DecisionPresentation.LIST,\n size = Size.MEDIUM,\n type = DecisionType.NAVIGATION,\n showMediaCircleInList = true,\n isContainerAligned = false,\n}: DecisionProps) => {\n const screenXs = useScreenSize(Breakpoint.EXTRA_SMALL);\n const screenSm = useScreenSize(Breakpoint.SMALL);\n\n if (type === DecisionType.NAVIGATION) {\n const renderedOptions = options.map(\n (\n {\n 'aria-label': ariaLabel,\n title,\n description,\n disabled,\n href,\n target,\n media: { list },\n onClick,\n },\n key,\n ) => (\n <NavigationOption\n // eslint-disable-next-line react/no-array-index-key\n key={`nav-${key}`}\n aria-label={ariaLabel}\n complex={false}\n content={description}\n disabled={disabled}\n href={href}\n target={target}\n media={list}\n showMediaAtAllSizes\n showMediaCircle={showMediaCircleInList}\n isContainerAligned={isContainerAligned}\n title={title}\n onClick={onClick}\n />\n ),\n );\n\n if (\n presentation === DecisionPresentation.LIST_BLOCK ||\n presentation === DecisionPresentation.LIST_BLOCK_GRID\n ) {\n const isSmall = size === Size.SMALL;\n const breakpoint = isSmall ? screenXs : screenSm;\n\n const isGrid = presentation === DecisionPresentation.LIST_BLOCK_GRID;\n\n return (\n <div\n className={clsx(\n 'np-decision d-flex',\n {\n 'np-decision--small': isSmall,\n 'np-decision--grid': isGrid,\n },\n breakpoint ? isGrid && 'flex-wrap' : 'flex-column',\n )}\n >\n {breakpoint\n ? options.map(\n (\n {\n 'aria-label': ariaLabel,\n description,\n disabled,\n href,\n target,\n media: { block },\n onClick,\n title,\n },\n key,\n ) => (\n <Tile\n // eslint-disable-next-line react/no-array-index-key\n key={`tile-${key}`}\n className={clsx(`np-decision__tile${isSmall ? '--small' : ''}`, {\n 'np-decision__tile--fixed-width': isGrid,\n })}\n aria-label={ariaLabel}\n description={description}\n disabled={disabled}\n href={href}\n target={target}\n media={block}\n size={isSmall ? Size.SMALL : Size.MEDIUM}\n title={title}\n onClick={onClick}\n />\n ),\n )\n : renderedOptions}\n </div>\n );\n }\n // LIST\n return <>{renderedOptions}</>;\n }\n return null;\n};\n\nexport default Decision;\n"],"names":["DecisionPresentation","DecisionType","Decision","options","presentation","LIST","size","Size","MEDIUM","type","NAVIGATION","showMediaCircleInList","isContainerAligned","screenXs","useScreenSize","Breakpoint","EXTRA_SMALL","screenSm","SMALL","renderedOptions","map","ariaLabel","title","description","disabled","href","target","media","list","onClick","key","_jsx","NavigationOption","complex","content","showMediaAtAllSizes","showMediaCircle","LIST_BLOCK","LIST_BLOCK_GRID","isSmall","breakpoint","isGrid","className","clsx","children","block","Tile","_Fragment"],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ const Decision = ({
|
|
|
28
28
|
const screenSm = useScreenSize(Breakpoint.SMALL);
|
|
29
29
|
if (type === DecisionType.NAVIGATION) {
|
|
30
30
|
const renderedOptions = options.map(({
|
|
31
|
+
'aria-label': ariaLabel,
|
|
31
32
|
title,
|
|
32
33
|
description,
|
|
33
34
|
disabled,
|
|
@@ -40,6 +41,7 @@ const Decision = ({
|
|
|
40
41
|
}, key) => /*#__PURE__*/jsx(NavigationOption
|
|
41
42
|
// eslint-disable-next-line react/no-array-index-key
|
|
42
43
|
, {
|
|
44
|
+
"aria-label": ariaLabel,
|
|
43
45
|
complex: false,
|
|
44
46
|
content: description,
|
|
45
47
|
disabled: disabled,
|
|
@@ -62,6 +64,7 @@ const Decision = ({
|
|
|
62
64
|
'np-decision--grid': isGrid
|
|
63
65
|
}, breakpoint ? isGrid && 'flex-wrap' : 'flex-column'),
|
|
64
66
|
children: breakpoint ? options.map(({
|
|
67
|
+
'aria-label': ariaLabel,
|
|
65
68
|
description,
|
|
66
69
|
disabled,
|
|
67
70
|
href,
|
|
@@ -77,6 +80,7 @@ const Decision = ({
|
|
|
77
80
|
className: clsx(`np-decision__tile${isSmall ? '--small' : ''}`, {
|
|
78
81
|
'np-decision__tile--fixed-width': isGrid
|
|
79
82
|
}),
|
|
83
|
+
"aria-label": ariaLabel,
|
|
80
84
|
description: description,
|
|
81
85
|
disabled: disabled,
|
|
82
86
|
href: href,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Decision.mjs","sources":["../../src/decision/Decision.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport { Size, Breakpoint, SizeSmall, SizeMedium } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport NavigationOption from '../navigationOption';\nimport Tile from '../tile';\n\ninterface DecisionOption {\n description?: React.ReactNode;\n disabled?: boolean;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n media: {\n block: React.ReactNode;\n list: React.ReactNode;\n };\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n title: React.ReactNode;\n}\n\nexport enum DecisionPresentation {\n LIST = 'LIST',\n LIST_BLOCK = 'LIST_BLOCK',\n LIST_BLOCK_GRID = 'LIST_BLOCK_GRID',\n}\n\nexport enum DecisionType {\n NAVIGATION = 'NAVIGATION',\n}\n\nexport interface DecisionProps {\n /** A list of elements to be rendered */\n options: readonly DecisionOption[];\n /** Handles the display mode of the component */\n presentation?: `${DecisionPresentation}`;\n /** Size currently affects only Tile dimension */\n size?: SizeSmall | SizeMedium;\n /** Decide which kind of element type needs to be rendered ex: Navigation Options or in the future Radio or Checkbox Options */\n type?: `${DecisionType}`;\n\n /** Display media in a circle in list presentation */\n showMediaCircleInList?: boolean;\n\n /** Sets navigation options to be aligned with the parent container */\n isContainerAligned?: boolean;\n}\n\nconst Decision = ({\n options,\n presentation = DecisionPresentation.LIST,\n size = Size.MEDIUM,\n type = DecisionType.NAVIGATION,\n showMediaCircleInList = true,\n isContainerAligned = false,\n}: DecisionProps) => {\n const screenXs = useScreenSize(Breakpoint.EXTRA_SMALL);\n const screenSm = useScreenSize(Breakpoint.SMALL);\n\n if (type === DecisionType.NAVIGATION) {\n const renderedOptions = options.map(\n ({ title
|
|
1
|
+
{"version":3,"file":"Decision.mjs","sources":["../../src/decision/Decision.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport { Size, Breakpoint, SizeSmall, SizeMedium } from '../common';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport NavigationOption from '../navigationOption';\nimport Tile from '../tile';\n\ninterface DecisionOption {\n 'aria-label'?: string;\n description?: React.ReactNode;\n disabled?: boolean;\n href?: string;\n target?: React.HTMLAttributeAnchorTarget;\n media: {\n block: React.ReactNode;\n list: React.ReactNode;\n };\n onClick?: (event?: React.MouseEvent<HTMLElement>) => void;\n title: React.ReactNode;\n}\n\nexport enum DecisionPresentation {\n LIST = 'LIST',\n LIST_BLOCK = 'LIST_BLOCK',\n LIST_BLOCK_GRID = 'LIST_BLOCK_GRID',\n}\n\nexport enum DecisionType {\n NAVIGATION = 'NAVIGATION',\n}\n\nexport interface DecisionProps {\n /** A list of elements to be rendered */\n options: readonly DecisionOption[];\n /** Handles the display mode of the component */\n presentation?: `${DecisionPresentation}`;\n /** Size currently affects only Tile dimension */\n size?: SizeSmall | SizeMedium;\n /** Decide which kind of element type needs to be rendered ex: Navigation Options or in the future Radio or Checkbox Options */\n type?: `${DecisionType}`;\n\n /** Display media in a circle in list presentation */\n showMediaCircleInList?: boolean;\n\n /** Sets navigation options to be aligned with the parent container */\n isContainerAligned?: boolean;\n}\n\nconst Decision = ({\n options,\n presentation = DecisionPresentation.LIST,\n size = Size.MEDIUM,\n type = DecisionType.NAVIGATION,\n showMediaCircleInList = true,\n isContainerAligned = false,\n}: DecisionProps) => {\n const screenXs = useScreenSize(Breakpoint.EXTRA_SMALL);\n const screenSm = useScreenSize(Breakpoint.SMALL);\n\n if (type === DecisionType.NAVIGATION) {\n const renderedOptions = options.map(\n (\n {\n 'aria-label': ariaLabel,\n title,\n description,\n disabled,\n href,\n target,\n media: { list },\n onClick,\n },\n key,\n ) => (\n <NavigationOption\n // eslint-disable-next-line react/no-array-index-key\n key={`nav-${key}`}\n aria-label={ariaLabel}\n complex={false}\n content={description}\n disabled={disabled}\n href={href}\n target={target}\n media={list}\n showMediaAtAllSizes\n showMediaCircle={showMediaCircleInList}\n isContainerAligned={isContainerAligned}\n title={title}\n onClick={onClick}\n />\n ),\n );\n\n if (\n presentation === DecisionPresentation.LIST_BLOCK ||\n presentation === DecisionPresentation.LIST_BLOCK_GRID\n ) {\n const isSmall = size === Size.SMALL;\n const breakpoint = isSmall ? screenXs : screenSm;\n\n const isGrid = presentation === DecisionPresentation.LIST_BLOCK_GRID;\n\n return (\n <div\n className={clsx(\n 'np-decision d-flex',\n {\n 'np-decision--small': isSmall,\n 'np-decision--grid': isGrid,\n },\n breakpoint ? isGrid && 'flex-wrap' : 'flex-column',\n )}\n >\n {breakpoint\n ? options.map(\n (\n {\n 'aria-label': ariaLabel,\n description,\n disabled,\n href,\n target,\n media: { block },\n onClick,\n title,\n },\n key,\n ) => (\n <Tile\n // eslint-disable-next-line react/no-array-index-key\n key={`tile-${key}`}\n className={clsx(`np-decision__tile${isSmall ? '--small' : ''}`, {\n 'np-decision__tile--fixed-width': isGrid,\n })}\n aria-label={ariaLabel}\n description={description}\n disabled={disabled}\n href={href}\n target={target}\n media={block}\n size={isSmall ? Size.SMALL : Size.MEDIUM}\n title={title}\n onClick={onClick}\n />\n ),\n )\n : renderedOptions}\n </div>\n );\n }\n // LIST\n return <>{renderedOptions}</>;\n }\n return null;\n};\n\nexport default Decision;\n"],"names":["DecisionPresentation","DecisionType","Decision","options","presentation","LIST","size","Size","MEDIUM","type","NAVIGATION","showMediaCircleInList","isContainerAligned","screenXs","useScreenSize","Breakpoint","EXTRA_SMALL","screenSm","SMALL","renderedOptions","map","ariaLabel","title","description","disabled","href","target","media","list","onClick","key","_jsx","NavigationOption","complex","content","showMediaAtAllSizes","showMediaCircle","LIST_BLOCK","LIST_BLOCK_GRID","isSmall","breakpoint","isGrid","className","clsx","children","block","Tile","_Fragment"],"mappings":"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"}
|
package/build/i18n/en.json
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"neptune.Label.optional": "(Optional)",
|
|
22
22
|
"neptune.Link.opensInNewTab": "(opens in new tab)",
|
|
23
23
|
"neptune.MoneyInput.Select.placeholder": "Select an option...",
|
|
24
|
+
"neptune.MoneyInput.Select.selectCurrencyLabel": "Select currency",
|
|
24
25
|
"neptune.PhoneNumberInput.SelectInput.placeholder": "Select an option...",
|
|
25
26
|
"neptune.Select.searchPlaceholder": "Search...",
|
|
26
27
|
"neptune.SelectInput.noResultsFound": "No results found",
|
package/build/i18n/en.json.js
CHANGED
|
@@ -23,6 +23,7 @@ var en = {
|
|
|
23
23
|
"neptune.Label.optional": "(Optional)",
|
|
24
24
|
"neptune.Link.opensInNewTab": "(opens in new tab)",
|
|
25
25
|
"neptune.MoneyInput.Select.placeholder": "Select an option...",
|
|
26
|
+
"neptune.MoneyInput.Select.selectCurrencyLabel": "Select currency",
|
|
26
27
|
"neptune.PhoneNumberInput.SelectInput.placeholder": "Select an option...",
|
|
27
28
|
"neptune.Select.searchPlaceholder": "Search...",
|
|
28
29
|
"neptune.SelectInput.noResultsFound": "No results found",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/build/i18n/en.json.mjs
CHANGED
|
@@ -21,6 +21,7 @@ var en = {
|
|
|
21
21
|
"neptune.Label.optional": "(Optional)",
|
|
22
22
|
"neptune.Link.opensInNewTab": "(opens in new tab)",
|
|
23
23
|
"neptune.MoneyInput.Select.placeholder": "Select an option...",
|
|
24
|
+
"neptune.MoneyInput.Select.selectCurrencyLabel": "Select currency",
|
|
24
25
|
"neptune.PhoneNumberInput.SelectInput.placeholder": "Select an option...",
|
|
25
26
|
"neptune.Select.searchPlaceholder": "Search...",
|
|
26
27
|
"neptune.SelectInput.noResultsFound": "No results found",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -273,6 +273,7 @@ function SelectInput({
|
|
|
273
273
|
setFilterQuery('');
|
|
274
274
|
},
|
|
275
275
|
children: /*#__PURE__*/jsxRuntime.jsx(SelectInputOptions, {
|
|
276
|
+
id: `${id}Search`,
|
|
276
277
|
items: items,
|
|
277
278
|
renderValue: renderValue,
|
|
278
279
|
renderFooter: renderFooter,
|
|
@@ -348,6 +349,7 @@ const SelectInputOptionsContainer = /*#__PURE__*/React.forwardRef(function Selec
|
|
|
348
349
|
});
|
|
349
350
|
});
|
|
350
351
|
function SelectInputOptions({
|
|
352
|
+
id,
|
|
351
353
|
items,
|
|
352
354
|
renderValue = String,
|
|
353
355
|
renderFooter,
|
|
@@ -436,9 +438,11 @@ function SelectInputOptions({
|
|
|
436
438
|
className: "np-select-input-query-container",
|
|
437
439
|
children: /*#__PURE__*/jsxRuntime.jsx(SearchInput.SearchInput, {
|
|
438
440
|
ref: searchInputRef,
|
|
441
|
+
id: id,
|
|
439
442
|
role: "combobox",
|
|
440
443
|
shape: "rectangle",
|
|
441
444
|
placeholder: filterPlaceholder,
|
|
445
|
+
"aria-label": filterPlaceholder,
|
|
442
446
|
defaultValue: filterQuery,
|
|
443
447
|
"aria-autocomplete": "list",
|
|
444
448
|
"aria-expanded": true,
|
|
@@ -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 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\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 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'\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 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 role=\"combobox\"\n shape=\"rectangle\"\n placeholder={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 <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={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();\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 <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={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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"}
|
|
@@ -267,6 +267,7 @@ function SelectInput({
|
|
|
267
267
|
setFilterQuery('');
|
|
268
268
|
},
|
|
269
269
|
children: /*#__PURE__*/jsx(SelectInputOptions, {
|
|
270
|
+
id: `${id}Search`,
|
|
270
271
|
items: items,
|
|
271
272
|
renderValue: renderValue,
|
|
272
273
|
renderFooter: renderFooter,
|
|
@@ -342,6 +343,7 @@ const SelectInputOptionsContainer = /*#__PURE__*/forwardRef(function SelectInput
|
|
|
342
343
|
});
|
|
343
344
|
});
|
|
344
345
|
function SelectInputOptions({
|
|
346
|
+
id,
|
|
345
347
|
items,
|
|
346
348
|
renderValue = String,
|
|
347
349
|
renderFooter,
|
|
@@ -430,9 +432,11 @@ function SelectInputOptions({
|
|
|
430
432
|
className: "np-select-input-query-container",
|
|
431
433
|
children: /*#__PURE__*/jsx(SearchInput, {
|
|
432
434
|
ref: searchInputRef,
|
|
435
|
+
id: id,
|
|
433
436
|
role: "combobox",
|
|
434
437
|
shape: "rectangle",
|
|
435
438
|
placeholder: filterPlaceholder,
|
|
439
|
+
"aria-label": filterPlaceholder,
|
|
436
440
|
defaultValue: filterQuery,
|
|
437
441
|
"aria-autocomplete": "list",
|
|
438
442
|
"aria-expanded": true,
|