@transferwise/components 46.124.0 → 46.125.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/field/Field.js +10 -0
- package/build/field/Field.js.map +1 -1
- package/build/field/Field.mjs +10 -0
- package/build/field/Field.mjs.map +1 -1
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/build/index.mjs +1 -0
- package/build/index.mjs.map +1 -1
- package/build/inputs/SelectInput.js +10 -5
- package/build/inputs/SelectInput.js.map +1 -1
- package/build/inputs/SelectInput.mjs +11 -6
- package/build/inputs/SelectInput.mjs.map +1 -1
- package/build/inputs/_BottomSheet.js +5 -2
- package/build/inputs/_BottomSheet.js.map +1 -1
- package/build/inputs/_BottomSheet.mjs +6 -3
- package/build/inputs/_BottomSheet.mjs.map +1 -1
- package/build/inputs/_Popover.js +2 -0
- package/build/inputs/_Popover.js.map +1 -1
- package/build/inputs/_Popover.mjs +2 -0
- package/build/inputs/_Popover.mjs.map +1 -1
- package/build/listItem/Prompt/ListItemPrompt.js +10 -0
- package/build/listItem/Prompt/ListItemPrompt.js.map +1 -1
- package/build/listItem/Prompt/ListItemPrompt.mjs +10 -0
- package/build/listItem/Prompt/ListItemPrompt.mjs.map +1 -1
- package/build/main.css +32 -2
- package/build/prompt/ActionPrompt/ActionPrompt.js +123 -0
- package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -0
- package/build/prompt/ActionPrompt/ActionPrompt.mjs +118 -0
- package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -0
- package/build/prompt/PrimitivePrompt/PrimitivePrompt.js +13 -11
- package/build/prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
- package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs +14 -12
- package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
- package/build/styles/main.css +32 -2
- package/build/styles/prompt/ActionPrompt/ActionPrompt.css +21 -0
- package/build/styles/prompt/PrimitivePrompt/PrimitivePrompt.css +11 -2
- package/build/tabs/Tabs.js +14 -171
- package/build/tabs/Tabs.js.map +1 -1
- package/build/tabs/Tabs.mjs +16 -173
- package/build/tabs/Tabs.mjs.map +1 -1
- package/build/tabs/utils.js +0 -18
- package/build/tabs/utils.js.map +1 -1
- package/build/tabs/utils.mjs +1 -17
- package/build/tabs/utils.mjs.map +1 -1
- package/build/typeahead/Typeahead.js +10 -0
- package/build/typeahead/Typeahead.js.map +1 -1
- package/build/typeahead/Typeahead.mjs +10 -0
- package/build/typeahead/Typeahead.mjs.map +1 -1
- package/build/types/index.d.ts +2 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/inputs/SelectInput.d.ts.map +1 -1
- package/build/types/inputs/_BottomSheet.d.ts.map +1 -1
- package/build/types/inputs/_Popover.d.ts.map +1 -1
- package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +26 -0
- package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -0
- package/build/types/prompt/ActionPrompt/index.d.ts +3 -0
- package/build/types/prompt/ActionPrompt/index.d.ts.map +1 -0
- package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
- package/build/types/prompt/index.d.ts +2 -0
- package/build/types/prompt/index.d.ts.map +1 -1
- package/build/types/tabs/Tabs.d.ts +2 -24
- package/build/types/tabs/Tabs.d.ts.map +1 -1
- package/build/types/tabs/utils.d.ts +0 -2
- package/build/types/tabs/utils.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/actionButton/ActionButton.story.tsx +2 -9
- package/src/avatar/Avatar.story.tsx +2 -8
- package/src/button/_stories/{Button.tests.story.tsx → Button.test.story.tsx} +5 -10
- package/src/checkbox/Checkbox.story.tsx +3 -16
- package/src/circularButton/CircularButton.story.tsx +2 -7
- package/src/common/bottomSheet/BottomSheet.story.tsx +6 -32
- package/src/common/circle/Circle.story.tsx +3 -14
- package/src/criticalBanner/CriticalCommsBanner.story.tsx +3 -16
- package/src/dateInput/{DateInput.tests.story.tsx → DateInput.test.story.tsx} +3 -13
- package/src/dateLookup/DateLookup.story.tsx +9 -7
- package/src/header/{Header.tests.story.tsx → Header.test.story.tsx} +5 -10
- package/src/index.ts +2 -2
- package/src/info/Info.story.tsx +4 -20
- package/src/inputs/{SelectInput.spec.tsx → SelectInput.test.tsx} +78 -7
- package/src/inputs/SelectInput.tsx +21 -10
- package/src/inputs/_BottomSheet.tsx +7 -4
- package/src/inputs/_Popover.tsx +2 -0
- package/src/listItem/_stories/variants/ListItem.brightGreen.test.story.tsx +2 -7
- package/src/listItem/_stories/variants/ListItem.dark.test.story.tsx +2 -7
- package/src/listItem/_stories/variants/ListItem.forestGreen.test.story.tsx +2 -7
- package/src/listItem/_stories/variants/ListItem.rtl.test.story.tsx +2 -7
- package/src/main.css +32 -2
- package/src/main.less +1 -0
- package/src/modal/Modal.story.tsx +6 -31
- package/src/moneyInput/{MoneyInput.spec.tsx → MoneyInput.test.tsx} +26 -7
- package/src/prompt/ActionPrompt/ActionPrompt.css +21 -0
- package/src/prompt/ActionPrompt/ActionPrompt.less +23 -0
- package/src/prompt/ActionPrompt/ActionPrompt.story.tsx +184 -0
- package/src/prompt/ActionPrompt/ActionPrompt.test.tsx +256 -0
- package/src/prompt/ActionPrompt/ActionPrompt.tsx +129 -0
- package/src/prompt/ActionPrompt/index.ts +2 -0
- package/src/prompt/InlinePrompt/{InlinePrompt.spec.tsx → InlinePrompt.test.tsx} +3 -38
- package/src/prompt/PrimitivePrompt/PrimitivePrompt.css +11 -2
- package/src/prompt/PrimitivePrompt/PrimitivePrompt.less +12 -2
- package/src/prompt/PrimitivePrompt/PrimitivePrompt.test.tsx +161 -0
- package/src/prompt/PrimitivePrompt/PrimitivePrompt.tsx +15 -11
- package/src/prompt/index.ts +3 -0
- package/src/snackbar/{Snackbar.tests.story.tsx → Snackbar.test.story.tsx} +6 -32
- package/src/{ssr.spec.tsx → ssr.test.tsx} +1 -0
- package/src/statusIcon/StatusIcon.story.tsx +5 -9
- package/src/tabs/Tabs.story.tsx +1 -45
- package/src/tabs/{Tabs.spec.tsx → Tabs.test.tsx} +0 -22
- package/src/tabs/Tabs.tsx +23 -240
- package/src/tabs/utils.test.ts +68 -0
- package/src/tabs/utils.ts +0 -20
- package/src/tooltip/Tooltip.story.tsx +2 -7
- package/src/tabs/utils.spec.ts +0 -126
- /package/src/accordion/{Accordion.spec.js → Accordion.test.js} +0 -0
- /package/src/accordion/AccordionItem/{AccordionItem.spec.js → AccordionItem.test.js} +0 -0
- /package/src/accordion/AccordionItem/__snapshots__/{AccordionItem.spec.js.snap → AccordionItem.test.js.snap} +0 -0
- /package/src/accordion/__snapshots__/{Accordion.spec.js.snap → Accordion.test.js.snap} +0 -0
- /package/src/actionButton/{ActionButton.spec.tsx → ActionButton.test.tsx} +0 -0
- /package/src/actionButton/__snapshots__/{ActionButton.spec.tsx.snap → ActionButton.test.tsx.snap} +0 -0
- /package/src/actionOption/{ActionOption.spec.tsx → ActionOption.test.tsx} +0 -0
- /package/src/alert/{Alert.tests.story.tsx → Alert.test.story.tsx} +0 -0
- /package/src/alert/{Alert.spec.tsx → Alert.test.tsx} +0 -0
- /package/src/avatar/{Avatar.spec.tsx → Avatar.test.tsx} +0 -0
- /package/src/avatarWrapper/{AvatarWrapper.spec.tsx → AvatarWrapper.test.tsx} +0 -0
- /package/src/avatarWrapper/__snapshots__/{AvatarWrapper.spec.tsx.snap → AvatarWrapper.test.tsx.snap} +0 -0
- /package/src/badge/{Badge.spec.tsx → Badge.test.tsx} +0 -0
- /package/src/body/{Body.spec.tsx → Body.test.tsx} +0 -0
- /package/src/button/{Button.spec.tsx → Button.test.tsx} +0 -0
- /package/src/button/{LegacyButton.spec.tsx → LegacyButton.test.tsx} +0 -0
- /package/src/button/_stories/{Button.brightGreen.tests.story.tsx → Button.brightGreen.test.story.tsx} +0 -0
- /package/src/button/_stories/{Button.dark.tests.story.tsx → Button.dark.test.story.tsx} +0 -0
- /package/src/button/_stories/{Button.default.tests.story.tsx → Button.default.test.story.tsx} +0 -0
- /package/src/button/_stories/{Button.forestGreen.tests.story.tsx → Button.forestGreen.test.story.tsx} +0 -0
- /package/src/button/legacyUtils/{legacyUtils.spec.tsx → legacyUtils.test.tsx} +0 -0
- /package/src/card/{Card.spec.tsx → Card.test.tsx} +0 -0
- /package/src/carousel/{Carousel.spec.tsx → Carousel.test.tsx} +0 -0
- /package/src/checkbox/{Checkbox.spec.tsx → Checkbox.test.tsx} +0 -0
- /package/src/checkbox/__snapshots__/{Checkbox.spec.tsx.snap → Checkbox.test.tsx.snap} +0 -0
- /package/src/checkboxButton/{CheckboxButton.spec.tsx → CheckboxButton.test.tsx} +0 -0
- /package/src/checkboxOption/{CheckboxOption.spec.tsx → CheckboxOption.test.tsx} +0 -0
- /package/src/chevron/{Chevron.spec.tsx → Chevron.test.tsx} +0 -0
- /package/src/chevron/__snapshots__/{Chevron.spec.tsx.snap → Chevron.test.tsx.snap} +0 -0
- /package/src/chips/{Chips.spec.tsx → Chips.test.tsx} +0 -0
- /package/src/chips/__snapshots__/{Chips.spec.tsx.snap → Chips.test.tsx.snap} +0 -0
- /package/src/circularButton/{CircularButton.tests.story.tsx → CircularButton.test.story.tsx} +0 -0
- /package/src/circularButton/{CircularButton.spec.tsx → CircularButton.test.tsx} +0 -0
- /package/src/common/DOMOperations/{DOMOperations.spec.tsx → DOMOperations.test.tsx} +0 -0
- /package/src/common/Option/{Option.spec.tsx → Option.test.tsx} +0 -0
- /package/src/common/RadioButton/{RadioButton.spec.tsx → RadioButton.test.tsx} +0 -0
- /package/src/common/RadioButton/__snapshots__/{RadioButton.spec.tsx.snap → RadioButton.test.tsx.snap} +0 -0
- /package/src/common/bottomSheet/{BottomSheet.spec.tsx → BottomSheet.test.tsx} +0 -0
- /package/src/common/bottomSheet/__snapshots__/{BottomSheet.spec.tsx.snap → BottomSheet.test.tsx.snap} +0 -0
- /package/src/common/card/{Card.spec.tsx → Card.test.tsx} +0 -0
- /package/src/common/card/__snapshots__/{Card.spec.tsx.snap → Card.test.tsx.snap} +0 -0
- /package/src/common/closeButton/{CloseButton.spec.tsx → CloseButton.test.tsx} +0 -0
- /package/src/common/closeButton/__snapshots__/{CloseButton.spec.tsx.snap → CloseButton.test.tsx.snap} +0 -0
- /package/src/common/dateUtils/getDayNames/{getDayNames.spec.js → getDayNames.test.js} +0 -0
- /package/src/common/dateUtils/getMonthNames/{getMonthNames.spec.js → getMonthNames.test.js} +0 -0
- /package/src/common/dateUtils/isDateValid/{isDateValid.spec.ts → isDateValid.test.ts} +0 -0
- /package/src/common/dateUtils/isMonthAndYearFormat/{isMonthAndYearFormat.spec.js → isMonthAndYearFormat.test.js} +0 -0
- /package/src/common/dateUtils/isWithinRange/{isWithinRange.spec.ts → isWithinRange.test.ts} +0 -0
- /package/src/common/dateUtils/moveToWithinRange/{moveToWithinRange.spec.js → moveToWithinRange.test.js} +0 -0
- /package/src/common/deviceDetection/{deviceDetection.spec.ts → deviceDetection.test.ts} +0 -0
- /package/src/common/domHelpers/{documentIosClick.spec.ts → documentIosClick.test.ts} +0 -0
- /package/src/common/flowHeader/{FlowHeader.spec.tsx → FlowHeader.test.tsx} +0 -0
- /package/src/common/flowHeader/__snapshots__/{FlowHeader.spec.tsx.snap → FlowHeader.test.tsx.snap} +0 -0
- /package/src/common/historyNavigator/{historyNavigator.spec.ts → historyNavigator.test.ts} +0 -0
- /package/src/common/hooks/useConditionalListener/{useConditionalListener.spec.js → useConditionalListener.test.js} +0 -0
- /package/src/common/hooks/useDirection/{useDirection.spec.js → useDirection.test.js} +0 -0
- /package/src/common/hooks/useHasIntersected/{useHasIntersected.spec.js → useHasIntersected.test.js} +0 -0
- /package/src/common/hooks/{useMedia.spec.ts → useMedia.test.ts} +0 -0
- /package/src/common/{initials.spec.tsx → initials.test.tsx} +0 -0
- /package/src/common/locale/{index.spec.ts → index.test.ts} +0 -0
- /package/src/common/panel/{Panel.spec.tsx → Panel.test.tsx} +0 -0
- /package/src/common/panel/__snapshots__/{Panel.spec.tsx.snap → Panel.test.tsx.snap} +0 -0
- /package/src/common/responsivePanel/{ResponsivePanel.spec.js → ResponsivePanel.test.js} +0 -0
- /package/src/common/textFormat/formatWithPattern/{formatWithPattern.spec.ts → formatWithPattern.test.ts} +0 -0
- /package/src/common/textFormat/getCountOfSymbolsInSelection/{getCountOfSymbolsInSelection.spec.ts → getCountOfSymbolsInSelection.test.ts} +0 -0
- /package/src/common/textFormat/getCursorPositionAfterKeystroke/{getCursorPositionAfterKeystroke.spec.ts → getCursorPositionAfterKeystroke.test.ts} +0 -0
- /package/src/common/textFormat/getDistanceToSymbol/{getDistanceToSymbol.spec.ts → getDistanceToSymbol.test.ts} +0 -0
- /package/src/common/textFormat/getSymbolsInPatternWithPosition/{getSymbolsInPatternWithPosition.spec.ts → getSymbolsInPatternWithPosition.test.ts} +0 -0
- /package/src/common/textFormat/unformatWithPattern/{unformatWithPattern.spec.ts → unformatWithPattern.test.ts} +0 -0
- /package/src/dateInput/{DateInput.spec.tsx → DateInput.test.tsx} +0 -0
- /package/src/dateInput/utils/convertToLocalMidnight/{convertToLocalMidnight.spec.ts → convertToLocalMidnight.test.ts} +0 -0
- /package/src/dateLookup/{DateLookup.tests.story.tsx → DateLookup.test.story.tsx} +0 -0
- /package/src/dateLookup/{DateLookup.spec.tsx → DateLookup.test.tsx} +0 -0
- /package/src/dateLookup/getFocusableTime/{getFocusable.spec.ts → getFocusable.test.ts} +0 -0
- /package/src/dateLookup/getStartOfDay/{getStartOfDay.spec.js → getStartOfDay.test.js} +0 -0
- /package/src/decision/{Decision.spec.tsx → Decision.test.tsx} +0 -0
- /package/src/dimmer/{Dimmer.spec.tsx → Dimmer.test.tsx} +0 -0
- /package/src/divider/{Divider.spec.tsx → Divider.test.tsx} +0 -0
- /package/src/drawer/{Drawer.spec.tsx → Drawer.test.tsx} +0 -0
- /package/src/emphasis/{Emphasis.spec.tsx → Emphasis.test.tsx} +0 -0
- /package/src/emphasis/{EmphasisHtmlTransformer.spec.tsx → EmphasisHtmlTransformer.test.tsx} +0 -0
- /package/src/expressiveMoneyInput/{ExpressiveMoneyInput.spec.tsx → ExpressiveMoneyInput.test.tsx} +0 -0
- /package/src/expressiveMoneyInput/amountInput/{AmountInput.spec.tsx → AmountInput.test.tsx} +0 -0
- /package/src/expressiveMoneyInput/amountInput/{utils.spec.ts → utils.test.ts} +0 -0
- /package/src/expressiveMoneyInput/currencySelector/{CurrencySelector.spec.tsx → CurrencySelector.test.tsx} +0 -0
- /package/src/field/{Field.spec.tsx → Field.test.tsx} +0 -0
- /package/src/flowNavigation/{FlowNavigation.spec.js → FlowNavigation.test.js} +0 -0
- /package/src/flowNavigation/__snapshots__/{FlowNavigation.spec.js.snap → FlowNavigation.test.js.snap} +0 -0
- /package/src/flowNavigation/animatedLabel/{AnimatedLabel.spec.js → AnimatedLabel.test.js} +0 -0
- /package/src/header/{Header.spec.tsx → Header.test.tsx} +0 -0
- /package/src/iconButton/{iconButton.spec.tsx → iconButton.test.tsx} +0 -0
- /package/src/image/{Image.spec.tsx → Image.test.tsx} +0 -0
- /package/src/info/{Info.spec.jsx → Info.test.jsx} +0 -0
- /package/src/inlineAlert/{InlineAlert.spec.tsx → InlineAlert.test.tsx} +0 -0
- /package/src/inputWithDisplayFormat/{InputWithDisplayFormat.spec.js → InputWithDisplayFormat.test.js} +0 -0
- /package/src/inputs/{InputGroup.spec.tsx → InputGroup.test.tsx} +0 -0
- /package/src/inputs/{SearchInput.spec.tsx → SearchInput.test.tsx} +0 -0
- /package/src/instructionsList/{InstructionsList.spec.tsx → InstructionsList.test.tsx} +0 -0
- /package/src/label/{Label.spec.tsx → Label.test.tsx} +0 -0
- /package/src/legacylistItem/{LegacyListItem.tests.story.tsx → LegacyListItem.test.story.tsx} +0 -0
- /package/src/legacylistItem/{LegacyListItem.spec.tsx → LegacyListItem.test.tsx} +0 -0
- /package/src/link/{Link.spec.tsx → Link.test.tsx} +0 -0
- /package/src/list/{List.spec.tsx → List.test.tsx} +0 -0
- /package/src/listItem/AdditionalInfo/{ListItemAdditionalInfo.spec.tsx → ListItemAdditionalInfo.test.tsx} +0 -0
- /package/src/listItem/AvatarLayout/{ListItemAvatarLayout.spec.tsx → ListItemAvatarLayout.test.tsx} +0 -0
- /package/src/listItem/AvatarView/{ListItemAvatarView.spec.tsx → ListItemAvatarView.test.tsx} +0 -0
- /package/src/listItem/Button/{ListItemButton.spec.tsx → ListItemButton.test.tsx} +0 -0
- /package/src/listItem/Checkbox/{ListItemCheckbox.spec.tsx → ListItemCheckbox.test.tsx} +0 -0
- /package/src/listItem/IconButton/{ListItemIconButton.spec.tsx → ListItemIconButton.test.tsx} +0 -0
- /package/src/listItem/Image/{ListItemImage.spec.tsx → ListItemImage.test.tsx} +0 -0
- /package/src/listItem/{ListItem.spec.tsx → ListItem.test.tsx} +0 -0
- /package/src/listItem/Navigation/{ListItemNavigation.spec.tsx → ListItemNavigation.test.tsx} +0 -0
- /package/src/listItem/Prompt/{ListItemPrompt.spec.tsx → ListItemPrompt.test.tsx} +0 -0
- /package/src/listItem/Radio/{ListItemRadio.spec.tsx → ListItemRadio.test.tsx} +0 -0
- /package/src/listItem/Switch/{ListItemSwitch.spec.tsx → ListItemSwitch.test.tsx} +0 -0
- /package/src/loader/{Loader.spec.tsx → Loader.test.tsx} +0 -0
- /package/src/logo/{Logo.spec.tsx → Logo.test.tsx} +0 -0
- /package/src/logo/__snapshots__/{Logo.spec.tsx.snap → Logo.test.tsx.snap} +0 -0
- /package/src/markdown/{Markdown.spec.tsx → Markdown.test.tsx} +0 -0
- /package/src/modal/{Modal.spec.tsx → Modal.test.tsx} +0 -0
- /package/src/money/{Money.spec.tsx → Money.test.tsx} +0 -0
- /package/src/moneyInput/{currencyFormatting.spec.ts → currencyFormatting.test.ts} +0 -0
- /package/src/navigationOption/{NavigationOption.spec.tsx → NavigationOption.test.tsx} +0 -0
- /package/src/navigationOptionsList/{NavigationOptionsList.spec.tsx → NavigationOptionsList.test.tsx} +0 -0
- /package/src/nudge/{Nudge.spec.tsx → Nudge.test.tsx} +0 -0
- /package/src/overlayHeader/{OverlayHeader.spec.tsx → OverlayHeader.test.tsx} +0 -0
- /package/src/overlayHeader/__snapshots__/{OverlayHeader.spec.tsx.snap → OverlayHeader.test.tsx.snap} +0 -0
- /package/src/phoneNumberInput/{PhoneNumberInput.spec.tsx → PhoneNumberInput.test.tsx} +0 -0
- /package/src/phoneNumberInput/utils/cleanNumber/{cleanNumber.spec.ts → cleanNumber.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/excludeCountries/{excludeCountries.spec.ts → excludeCountries.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/explodeNumberModel/{explodeNumberModel.spec.ts → explodeNumberModel.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/findCountryByCode/{findCountryByCode.spec.ts → findCountryByCode.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/findCountryByPrefix/{findCountryByPrefix.spec.ts → findCountryByPrefix.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/groupCountriesByPrefix/{groupCountriesByPrefix.spec.ts → groupCountriesByPrefix.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/isStringNumeric/{isStringNumeric.spec.ts → isStringNumeric.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/isValidPhoneNumber/{isValidPhoneNumber.spec.ts → isValidPhoneNumber.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/longestMatchingPrefix/{longestMatchingPrefix.spec.ts → longestMatchingPrefix.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/setDefaultPrefix/{setDefaultPrefix.spec.ts → setDefaultPrefix.test.ts} +0 -0
- /package/src/phoneNumberInput/utils/sortArrayByProperty/{sortArrayByProperty.spec.ts → sortArrayByProperty.test.ts} +0 -0
- /package/src/popover/{Popover.spec.tsx → Popover.test.tsx} +0 -0
- /package/src/popover/__snapshots__/{Popover.spec.tsx.snap → Popover.test.tsx.snap} +0 -0
- /package/src/primitives/PrimitiveAnchor/stories/{PrimitiveAnchor.tests.story.tsx → PrimitiveAnchor.test.story.tsx} +0 -0
- /package/src/primitives/PrimitiveAnchor/test/{PrimitiveAnchor.spec.tsx → PrimitiveAnchor.test.tsx} +0 -0
- /package/src/primitives/PrimitiveButton/stories/{PrimitiveButton.tests.story.tsx → PrimitiveButton.test.story.tsx} +0 -0
- /package/src/primitives/PrimitiveButton/test/{PrimitiveButton.spec.tsx → PrimitiveButton.test.tsx} +0 -0
- /package/src/processIndicator/{ProcessIndicator.rtl.spec.tsx → ProcessIndicator.rtl.test.tsx} +0 -0
- /package/src/progress/{Progress.spec.tsx → Progress.test.tsx} +0 -0
- /package/src/progressBar/{ProgressBar.spec.tsx → ProgressBar.test.tsx} +0 -0
- /package/src/promoCard/{PromoCard.spec.tsx → PromoCard.test.tsx} +0 -0
- /package/src/promoCard/{PromoCardContext.spec.tsx → PromoCardContext.test.tsx} +0 -0
- /package/src/promoCard/{PromoCardGroup.spec.tsx → PromoCardGroup.test.tsx} +0 -0
- /package/src/promoCard/__snapshots__/{PromoCard.spec.tsx.snap → PromoCard.test.tsx.snap} +0 -0
- /package/src/promoCard/__snapshots__/{PromoCardGroup.spec.tsx.snap → PromoCardGroup.test.tsx.snap} +0 -0
- /package/src/provider/{Provider.spec.tsx → Provider.test.tsx} +0 -0
- /package/src/provider/direction/{DirectionProvider.spec.tsx → DirectionProvider.test.tsx} +0 -0
- /package/src/provider/language/{LanguageProvider.spec.tsx → LanguageProvider.test.tsx} +0 -0
- /package/src/radio/{Radio.spec.tsx → Radio.test.tsx} +0 -0
- /package/src/radioGroup/{RadioGroup.spec.tsx → RadioGroup.test.tsx} +0 -0
- /package/src/radioOption/{RadioOption.spec.tsx → RadioOption.test.tsx} +0 -0
- /package/src/section/{Section.spec.tsx → Section.test.tsx} +0 -0
- /package/src/segmentedControl/{SegmentedControl.spec.tsx → SegmentedControl.test.tsx} +0 -0
- /package/src/select/{Select.rtl.spec.tsx → Select.rtl.test.tsx} +0 -0
- /package/src/select/{Select.spec.tsx → Select.test.tsx} +0 -0
- /package/src/select/option/{Option.spec.tsx → Option.test.tsx} +0 -0
- /package/src/select/searchBox/{SearchBox.spec.tsx → SearchBox.test.tsx} +0 -0
- /package/src/sentimentSurface/{SentimentSurface.tests.story.tsx → SentimentSurface.test.story.tsx} +0 -0
- /package/src/sentimentSurface/{SentimentSurface.spec.tsx → SentimentSurface.test.tsx} +0 -0
- /package/src/slidingPanel/{SlidingPanel.spec.tsx → SlidingPanel.test.tsx} +0 -0
- /package/src/statusIcon/{StatusIcon.spec.tsx → StatusIcon.test.tsx} +0 -0
- /package/src/stepper/{Stepper.tests.story.tsx → Stepper.test.story.tsx} +0 -0
- /package/src/stepper/{Stepper.spec.tsx → Stepper.test.tsx} +0 -0
- /package/src/stepper/{deviceDetection.spec.ts → deviceDetection.test.ts} +0 -0
- /package/src/sticky/{Sticky.spec.tsx → Sticky.test.tsx} +0 -0
- /package/src/summary/{Summary.tests.story.tsx → Summary.test.story.tsx} +0 -0
- /package/src/summary/{Summary.spec.tsx → Summary.test.tsx} +0 -0
- /package/src/switch/{Switch.spec.tsx → Switch.test.tsx} +0 -0
- /package/src/switchOption/{SwitchOption.spec.tsx → SwitchOption.test.tsx} +0 -0
- /package/src/table/{Table.spec.tsx → Table.test.tsx} +0 -0
- /package/src/table/{TableCell.spec.tsx → TableCell.test.tsx} +0 -0
- /package/src/table/{TableHeader.spec.tsx → TableHeader.test.tsx} +0 -0
- /package/src/table/{TableRow.spec.tsx → TableRow.test.tsx} +0 -0
- /package/src/table/{TableStatusText.spec.tsx → TableStatusText.test.tsx} +0 -0
- /package/src/textareaWithDisplayFormat/{TextareaWithDisplayFormat.spec.js → TextareaWithDisplayFormat.test.js} +0 -0
- /package/src/tile/{Tile.spec.tsx → Tile.test.tsx} +0 -0
- /package/src/tile/__snapshots__/{Tile.spec.tsx.snap → Tile.test.tsx.snap} +0 -0
- /package/src/title/{Title.spec.tsx → Title.test.tsx} +0 -0
- /package/src/tooltip/{Tooltip.spec.tsx → Tooltip.test.tsx} +0 -0
- /package/src/tooltip/__snapshots__/{Tooltip.spec.tsx.snap → Tooltip.test.tsx.snap} +0 -0
- /package/src/typeahead/{Typeahead.spec.tsx → Typeahead.test.tsx} +0 -0
- /package/src/typeahead/typeaheadInput/{TypeaheadInput.spec.tsx → TypeaheadInput.test.tsx} +0 -0
- /package/src/typeahead/util/{highlight.spec.tsx → highlight.test.tsx} +0 -0
- /package/src/upload/{Upload.tests.story.tsx → Upload.test.story.tsx} +0 -0
- /package/src/upload/{Upload.spec.tsx → Upload.test.tsx} +0 -0
- /package/src/upload/steps/completeStep/{completeStep.spec.tsx → completeStep.test.tsx} +0 -0
- /package/src/upload/steps/processingStep/{processingStep.spec.tsx → processingStep.test.tsx} +0 -0
- /package/src/upload/steps/uploadImageStep/{uploadImageStep.spec.tsx → uploadImageStep.test.tsx} +0 -0
- /package/src/upload/utils/asyncFileRead/{asyncFileRead.spec.ts → asyncFileRead.test.ts} +0 -0
- /package/src/upload/utils/getFileType/{getFileType.spec.ts → getFileType.test.ts} +0 -0
- /package/src/upload/utils/isSizeValid/{isSizeValid.spec.ts → isSizeValid.test.ts} +0 -0
- /package/src/upload/utils/isTypeValid/{isTypeValid.spec.ts → isTypeValid.test.ts} +0 -0
- /package/src/upload/utils/postData/{postData.spec.ts → postData.test.ts} +0 -0
- /package/src/uploadInput/{UploadInput.tests.story.tsx → UploadInput.test.story.tsx} +0 -0
- /package/src/uploadInput/{UploadInput.spec.tsx → UploadInput.test.tsx} +0 -0
- /package/src/uploadInput/uploadButton/{UploadButton.spec.tsx → UploadButton.test.tsx} +0 -0
- /package/src/uploadInput/uploadButton/{getAllowedFileTypes.spec.ts → getAllowedFileTypes.test.ts} +0 -0
- /package/src/uploadInput/uploadItem/{UploadItem.spec.tsx → UploadItem.test.tsx} +0 -0
- /package/src/utilities/deprecatedProperty/{deprecatedProperty.spec.ts → deprecatedProperty.test.ts} +0 -0
- /package/src/withDisplayFormat/{WithDisplayFormat.spec.js → WithDisplayFormat.test.js} +0 -0
- /package/src/withId/{withId.spec.tsx → withId.test.tsx} +0 -0
- /package/src/withNextPortal/{withNextPortal.spec.tsx → withNextPortal.test.tsx} +0 -0
package/build/field/Field.js
CHANGED
|
@@ -26,6 +26,16 @@ require('react-intl');
|
|
|
26
26
|
require('../common/closeButton/CloseButton.messages.js');
|
|
27
27
|
var jsxRuntime = require('react/jsx-runtime');
|
|
28
28
|
var InlinePrompt = require('../prompt/InlinePrompt/InlinePrompt.js');
|
|
29
|
+
require('../statusIcon/StatusIcon.js');
|
|
30
|
+
require('../body/Body.js');
|
|
31
|
+
require('../button/Button.resolver.js');
|
|
32
|
+
require('../badge/Badge.js');
|
|
33
|
+
require('@wise/art');
|
|
34
|
+
require('@transferwise/neptune-validation');
|
|
35
|
+
require('../provider/direction/DirectionProvider.js');
|
|
36
|
+
require('../sentimentSurface/SentimentSurface.js');
|
|
37
|
+
require('../primitives/PrimitiveButton/PrimitiveButton.js');
|
|
38
|
+
require('../primitives/PrimitiveAnchor/PrimitiveAnchor.js');
|
|
29
39
|
var contexts = require('../inputs/contexts.js');
|
|
30
40
|
var Label = require('../label/Label.js');
|
|
31
41
|
|
package/build/field/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sources":["../../src/field/Field.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useId, useRef } from 'react';\n\nimport { Sentiment } from '../common';\nimport { InlinePrompt, type InlinePromptProps } from '../prompt';\nimport {\n FieldLabelContextProvider,\n InputDescribedByProvider,\n InputIdContextProvider,\n InputInvalidProvider,\n} from '../inputs/contexts';\nimport { Label } from '../label';\n\nexport type FieldProps = {\n /** `null` disables auto-generating the `id` attribute, falling back to nesting-based label association over setting `htmlFor` explicitly. */\n id?: string | null;\n /** Should be specified unless the wrapped control has its own labeling mechanism, e.g. `Checkbox`. */\n label?: React.ReactNode;\n required?: boolean;\n /** @deprecated use `description` prop instead */\n hint?: React.ReactNode;\n message?: React.ReactNode;\n /**\n * Override for the [InlinePrompt icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n messageIconLabel?: string;\n /**\n * If true, shows a loading spinner in place of the message icon of the InlinePrompt\n */\n messageLoading?: boolean;\n description?: React.ReactNode;\n /** @deprecated use `message` and `type={Sentiment.NEGATIVE}` prop instead */\n error?: React.ReactNode;\n sentiment?: InlinePromptProps['sentiment'];\n className?: string;\n children?: React.ReactNode;\n};\n\nexport const Field = ({\n id,\n label,\n required = true,\n message: propMessage,\n messageIconLabel,\n messageLoading,\n hint,\n description = hint,\n sentiment: propType = Sentiment.NEUTRAL,\n className,\n children,\n ...props\n}: FieldProps) => {\n const labelRef = useRef<HTMLLabelElement>(null);\n const sentiment = props.error ? Sentiment.NEGATIVE : propType;\n const message = propMessage || props.error;\n const hasError = sentiment === Sentiment.NEGATIVE;\n\n const labelId = useId();\n\n const fallbackInputId = useId();\n const inputId = id !== null ? (id ?? fallbackInputId) : undefined;\n\n const messageId = useId();\n const descriptionId = useId();\n\n /**\n * form control can have multiple messages to describe it,\n * e.g the description underneath the label and inline alert\n */\n function ariaDescribedbyByIds() {\n const messageIds = [];\n if (description) {\n messageIds.push(descriptionId);\n }\n if (message) {\n messageIds.push(messageId);\n }\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n return (\n <FieldLabelContextProvider value={{ id: labelId, ref: labelRef }}>\n <InputIdContextProvider value={inputId}>\n <InputDescribedByProvider value={ariaDescribedbyByIds()}>\n <InputInvalidProvider value={hasError}>\n <div\n className={clsx(\n 'np-field form-group d-block',\n {\n 'has-success': sentiment === Sentiment.POSITIVE,\n 'has-warning': sentiment === Sentiment.WARNING,\n 'has-error': hasError,\n 'has-info': sentiment === Sentiment.NEUTRAL,\n },\n className,\n )}\n >\n {label != null ? (\n <>\n <Label ref={labelRef} id={labelId} htmlFor={inputId}>\n {required ? label : <Label.Optional>{label}</Label.Optional>}\n </Label>\n <Label.Description id={descriptionId}>{description}</Label.Description>\n <div className=\"np-field-control\">{children}</div>\n </>\n ) : (\n children\n )}\n\n {message && (\n <InlinePrompt\n sentiment={sentiment}\n id={messageId}\n mediaLabel={messageIconLabel}\n className=\"np-field__prompt\"\n loading={messageLoading}\n width=\"full\"\n >\n {message}\n </InlinePrompt>\n )}\n </div>\n </InputInvalidProvider>\n </InputDescribedByProvider>\n </InputIdContextProvider>\n </FieldLabelContextProvider>\n );\n};\n"],"names":["Field","id","label","required","message","propMessage","messageIconLabel","messageLoading","hint","description","sentiment","propType","Sentiment","NEUTRAL","className","children","props","labelRef","useRef","error","NEGATIVE","hasError","labelId","useId","fallbackInputId","inputId","undefined","messageId","descriptionId","ariaDescribedbyByIds","messageIds","push","length","join","_jsx","FieldLabelContextProvider","value","ref","InputIdContextProvider","InputDescribedByProvider","InputInvalidProvider","_jsxs","clsx","POSITIVE","WARNING","_Fragment","Label","htmlFor","Optional","Description","InlinePrompt","mediaLabel","loading","width"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Field.js","sources":["../../src/field/Field.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useId, useRef } from 'react';\n\nimport { Sentiment } from '../common';\nimport { InlinePrompt, type InlinePromptProps } from '../prompt';\nimport {\n FieldLabelContextProvider,\n InputDescribedByProvider,\n InputIdContextProvider,\n InputInvalidProvider,\n} from '../inputs/contexts';\nimport { Label } from '../label';\n\nexport type FieldProps = {\n /** `null` disables auto-generating the `id` attribute, falling back to nesting-based label association over setting `htmlFor` explicitly. */\n id?: string | null;\n /** Should be specified unless the wrapped control has its own labeling mechanism, e.g. `Checkbox`. */\n label?: React.ReactNode;\n required?: boolean;\n /** @deprecated use `description` prop instead */\n hint?: React.ReactNode;\n message?: React.ReactNode;\n /**\n * Override for the [InlinePrompt icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n messageIconLabel?: string;\n /**\n * If true, shows a loading spinner in place of the message icon of the InlinePrompt\n */\n messageLoading?: boolean;\n description?: React.ReactNode;\n /** @deprecated use `message` and `type={Sentiment.NEGATIVE}` prop instead */\n error?: React.ReactNode;\n sentiment?: InlinePromptProps['sentiment'];\n className?: string;\n children?: React.ReactNode;\n};\n\nexport const Field = ({\n id,\n label,\n required = true,\n message: propMessage,\n messageIconLabel,\n messageLoading,\n hint,\n description = hint,\n sentiment: propType = Sentiment.NEUTRAL,\n className,\n children,\n ...props\n}: FieldProps) => {\n const labelRef = useRef<HTMLLabelElement>(null);\n const sentiment = props.error ? Sentiment.NEGATIVE : propType;\n const message = propMessage || props.error;\n const hasError = sentiment === Sentiment.NEGATIVE;\n\n const labelId = useId();\n\n const fallbackInputId = useId();\n const inputId = id !== null ? (id ?? fallbackInputId) : undefined;\n\n const messageId = useId();\n const descriptionId = useId();\n\n /**\n * form control can have multiple messages to describe it,\n * e.g the description underneath the label and inline alert\n */\n function ariaDescribedbyByIds() {\n const messageIds = [];\n if (description) {\n messageIds.push(descriptionId);\n }\n if (message) {\n messageIds.push(messageId);\n }\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n return (\n <FieldLabelContextProvider value={{ id: labelId, ref: labelRef }}>\n <InputIdContextProvider value={inputId}>\n <InputDescribedByProvider value={ariaDescribedbyByIds()}>\n <InputInvalidProvider value={hasError}>\n <div\n className={clsx(\n 'np-field form-group d-block',\n {\n 'has-success': sentiment === Sentiment.POSITIVE,\n 'has-warning': sentiment === Sentiment.WARNING,\n 'has-error': hasError,\n 'has-info': sentiment === Sentiment.NEUTRAL,\n },\n className,\n )}\n >\n {label != null ? (\n <>\n <Label ref={labelRef} id={labelId} htmlFor={inputId}>\n {required ? label : <Label.Optional>{label}</Label.Optional>}\n </Label>\n <Label.Description id={descriptionId}>{description}</Label.Description>\n <div className=\"np-field-control\">{children}</div>\n </>\n ) : (\n children\n )}\n\n {message && (\n <InlinePrompt\n sentiment={sentiment}\n id={messageId}\n mediaLabel={messageIconLabel}\n className=\"np-field__prompt\"\n loading={messageLoading}\n width=\"full\"\n >\n {message}\n </InlinePrompt>\n )}\n </div>\n </InputInvalidProvider>\n </InputDescribedByProvider>\n </InputIdContextProvider>\n </FieldLabelContextProvider>\n );\n};\n"],"names":["Field","id","label","required","message","propMessage","messageIconLabel","messageLoading","hint","description","sentiment","propType","Sentiment","NEUTRAL","className","children","props","labelRef","useRef","error","NEGATIVE","hasError","labelId","useId","fallbackInputId","inputId","undefined","messageId","descriptionId","ariaDescribedbyByIds","messageIds","push","length","join","_jsx","FieldLabelContextProvider","value","ref","InputIdContextProvider","InputDescribedByProvider","InputInvalidProvider","_jsxs","clsx","POSITIVE","WARNING","_Fragment","Label","htmlFor","Optional","Description","InlinePrompt","mediaLabel","loading","width"],"mappings":"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"}
|
package/build/field/Field.mjs
CHANGED
|
@@ -24,6 +24,16 @@ import 'react-intl';
|
|
|
24
24
|
import '../common/closeButton/CloseButton.messages.mjs';
|
|
25
25
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
26
26
|
import { InlinePrompt } from '../prompt/InlinePrompt/InlinePrompt.mjs';
|
|
27
|
+
import '../statusIcon/StatusIcon.mjs';
|
|
28
|
+
import '../body/Body.mjs';
|
|
29
|
+
import '../button/Button.resolver.mjs';
|
|
30
|
+
import '../badge/Badge.mjs';
|
|
31
|
+
import '@wise/art';
|
|
32
|
+
import '@transferwise/neptune-validation';
|
|
33
|
+
import '../provider/direction/DirectionProvider.mjs';
|
|
34
|
+
import '../sentimentSurface/SentimentSurface.mjs';
|
|
35
|
+
import '../primitives/PrimitiveButton/PrimitiveButton.mjs';
|
|
36
|
+
import '../primitives/PrimitiveAnchor/PrimitiveAnchor.mjs';
|
|
27
37
|
import { FieldLabelContextProvider, InputIdContextProvider, InputDescribedByProvider, InputInvalidProvider } from '../inputs/contexts.mjs';
|
|
28
38
|
import { Label as LabelNamespace } from '../label/Label.mjs';
|
|
29
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.mjs","sources":["../../src/field/Field.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useId, useRef } from 'react';\n\nimport { Sentiment } from '../common';\nimport { InlinePrompt, type InlinePromptProps } from '../prompt';\nimport {\n FieldLabelContextProvider,\n InputDescribedByProvider,\n InputIdContextProvider,\n InputInvalidProvider,\n} from '../inputs/contexts';\nimport { Label } from '../label';\n\nexport type FieldProps = {\n /** `null` disables auto-generating the `id` attribute, falling back to nesting-based label association over setting `htmlFor` explicitly. */\n id?: string | null;\n /** Should be specified unless the wrapped control has its own labeling mechanism, e.g. `Checkbox`. */\n label?: React.ReactNode;\n required?: boolean;\n /** @deprecated use `description` prop instead */\n hint?: React.ReactNode;\n message?: React.ReactNode;\n /**\n * Override for the [InlinePrompt icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n messageIconLabel?: string;\n /**\n * If true, shows a loading spinner in place of the message icon of the InlinePrompt\n */\n messageLoading?: boolean;\n description?: React.ReactNode;\n /** @deprecated use `message` and `type={Sentiment.NEGATIVE}` prop instead */\n error?: React.ReactNode;\n sentiment?: InlinePromptProps['sentiment'];\n className?: string;\n children?: React.ReactNode;\n};\n\nexport const Field = ({\n id,\n label,\n required = true,\n message: propMessage,\n messageIconLabel,\n messageLoading,\n hint,\n description = hint,\n sentiment: propType = Sentiment.NEUTRAL,\n className,\n children,\n ...props\n}: FieldProps) => {\n const labelRef = useRef<HTMLLabelElement>(null);\n const sentiment = props.error ? Sentiment.NEGATIVE : propType;\n const message = propMessage || props.error;\n const hasError = sentiment === Sentiment.NEGATIVE;\n\n const labelId = useId();\n\n const fallbackInputId = useId();\n const inputId = id !== null ? (id ?? fallbackInputId) : undefined;\n\n const messageId = useId();\n const descriptionId = useId();\n\n /**\n * form control can have multiple messages to describe it,\n * e.g the description underneath the label and inline alert\n */\n function ariaDescribedbyByIds() {\n const messageIds = [];\n if (description) {\n messageIds.push(descriptionId);\n }\n if (message) {\n messageIds.push(messageId);\n }\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n return (\n <FieldLabelContextProvider value={{ id: labelId, ref: labelRef }}>\n <InputIdContextProvider value={inputId}>\n <InputDescribedByProvider value={ariaDescribedbyByIds()}>\n <InputInvalidProvider value={hasError}>\n <div\n className={clsx(\n 'np-field form-group d-block',\n {\n 'has-success': sentiment === Sentiment.POSITIVE,\n 'has-warning': sentiment === Sentiment.WARNING,\n 'has-error': hasError,\n 'has-info': sentiment === Sentiment.NEUTRAL,\n },\n className,\n )}\n >\n {label != null ? (\n <>\n <Label ref={labelRef} id={labelId} htmlFor={inputId}>\n {required ? label : <Label.Optional>{label}</Label.Optional>}\n </Label>\n <Label.Description id={descriptionId}>{description}</Label.Description>\n <div className=\"np-field-control\">{children}</div>\n </>\n ) : (\n children\n )}\n\n {message && (\n <InlinePrompt\n sentiment={sentiment}\n id={messageId}\n mediaLabel={messageIconLabel}\n className=\"np-field__prompt\"\n loading={messageLoading}\n width=\"full\"\n >\n {message}\n </InlinePrompt>\n )}\n </div>\n </InputInvalidProvider>\n </InputDescribedByProvider>\n </InputIdContextProvider>\n </FieldLabelContextProvider>\n );\n};\n"],"names":["Field","id","label","required","message","propMessage","messageIconLabel","messageLoading","hint","description","sentiment","propType","Sentiment","NEUTRAL","className","children","props","labelRef","useRef","error","NEGATIVE","hasError","labelId","useId","fallbackInputId","inputId","undefined","messageId","descriptionId","ariaDescribedbyByIds","messageIds","push","length","join","_jsx","FieldLabelContextProvider","value","ref","InputIdContextProvider","InputDescribedByProvider","InputInvalidProvider","_jsxs","clsx","POSITIVE","WARNING","_Fragment","Label","htmlFor","Optional","Description","InlinePrompt","mediaLabel","loading","width"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Field.mjs","sources":["../../src/field/Field.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useId, useRef } from 'react';\n\nimport { Sentiment } from '../common';\nimport { InlinePrompt, type InlinePromptProps } from '../prompt';\nimport {\n FieldLabelContextProvider,\n InputDescribedByProvider,\n InputIdContextProvider,\n InputInvalidProvider,\n} from '../inputs/contexts';\nimport { Label } from '../label';\n\nexport type FieldProps = {\n /** `null` disables auto-generating the `id` attribute, falling back to nesting-based label association over setting `htmlFor` explicitly. */\n id?: string | null;\n /** Should be specified unless the wrapped control has its own labeling mechanism, e.g. `Checkbox`. */\n label?: React.ReactNode;\n required?: boolean;\n /** @deprecated use `description` prop instead */\n hint?: React.ReactNode;\n message?: React.ReactNode;\n /**\n * Override for the [InlinePrompt icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n messageIconLabel?: string;\n /**\n * If true, shows a loading spinner in place of the message icon of the InlinePrompt\n */\n messageLoading?: boolean;\n description?: React.ReactNode;\n /** @deprecated use `message` and `type={Sentiment.NEGATIVE}` prop instead */\n error?: React.ReactNode;\n sentiment?: InlinePromptProps['sentiment'];\n className?: string;\n children?: React.ReactNode;\n};\n\nexport const Field = ({\n id,\n label,\n required = true,\n message: propMessage,\n messageIconLabel,\n messageLoading,\n hint,\n description = hint,\n sentiment: propType = Sentiment.NEUTRAL,\n className,\n children,\n ...props\n}: FieldProps) => {\n const labelRef = useRef<HTMLLabelElement>(null);\n const sentiment = props.error ? Sentiment.NEGATIVE : propType;\n const message = propMessage || props.error;\n const hasError = sentiment === Sentiment.NEGATIVE;\n\n const labelId = useId();\n\n const fallbackInputId = useId();\n const inputId = id !== null ? (id ?? fallbackInputId) : undefined;\n\n const messageId = useId();\n const descriptionId = useId();\n\n /**\n * form control can have multiple messages to describe it,\n * e.g the description underneath the label and inline alert\n */\n function ariaDescribedbyByIds() {\n const messageIds = [];\n if (description) {\n messageIds.push(descriptionId);\n }\n if (message) {\n messageIds.push(messageId);\n }\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n return (\n <FieldLabelContextProvider value={{ id: labelId, ref: labelRef }}>\n <InputIdContextProvider value={inputId}>\n <InputDescribedByProvider value={ariaDescribedbyByIds()}>\n <InputInvalidProvider value={hasError}>\n <div\n className={clsx(\n 'np-field form-group d-block',\n {\n 'has-success': sentiment === Sentiment.POSITIVE,\n 'has-warning': sentiment === Sentiment.WARNING,\n 'has-error': hasError,\n 'has-info': sentiment === Sentiment.NEUTRAL,\n },\n className,\n )}\n >\n {label != null ? (\n <>\n <Label ref={labelRef} id={labelId} htmlFor={inputId}>\n {required ? label : <Label.Optional>{label}</Label.Optional>}\n </Label>\n <Label.Description id={descriptionId}>{description}</Label.Description>\n <div className=\"np-field-control\">{children}</div>\n </>\n ) : (\n children\n )}\n\n {message && (\n <InlinePrompt\n sentiment={sentiment}\n id={messageId}\n mediaLabel={messageIconLabel}\n className=\"np-field__prompt\"\n loading={messageLoading}\n width=\"full\"\n >\n {message}\n </InlinePrompt>\n )}\n </div>\n </InputInvalidProvider>\n </InputDescribedByProvider>\n </InputIdContextProvider>\n </FieldLabelContextProvider>\n );\n};\n"],"names":["Field","id","label","required","message","propMessage","messageIconLabel","messageLoading","hint","description","sentiment","propType","Sentiment","NEUTRAL","className","children","props","labelRef","useRef","error","NEGATIVE","hasError","labelId","useId","fallbackInputId","inputId","undefined","messageId","descriptionId","ariaDescribedbyByIds","messageIds","push","length","join","_jsx","FieldLabelContextProvider","value","ref","InputIdContextProvider","InputDescribedByProvider","InputInvalidProvider","_jsxs","clsx","POSITIVE","WARNING","_Fragment","Label","htmlFor","Optional","Description","InlinePrompt","mediaLabel","loading","width"],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -52,6 +52,7 @@ var infoPresentations = require('./info/infoPresentations.js');
|
|
|
52
52
|
var Info = require('./info/Info.js');
|
|
53
53
|
var InlineAlert = require('./inlineAlert/InlineAlert.js');
|
|
54
54
|
var InlinePrompt = require('./prompt/InlinePrompt/InlinePrompt.js');
|
|
55
|
+
var ActionPrompt = require('./prompt/ActionPrompt/ActionPrompt.js');
|
|
55
56
|
var InputWithDisplayFormat = require('./inputWithDisplayFormat/InputWithDisplayFormat.js');
|
|
56
57
|
var Input = require('./inputs/Input.js');
|
|
57
58
|
var InputGroup = require('./inputs/InputGroup.js');
|
|
@@ -211,6 +212,7 @@ Object.defineProperty(exports, "InfoPresentation", {
|
|
|
211
212
|
exports.Info = Info.default;
|
|
212
213
|
exports.InlineAlert = InlineAlert.default;
|
|
213
214
|
exports.InlinePrompt = InlinePrompt.InlinePrompt;
|
|
215
|
+
exports.ActionPrompt = ActionPrompt.ActionPrompt;
|
|
214
216
|
exports.InputWithDisplayFormat = InputWithDisplayFormat.default;
|
|
215
217
|
exports.Input = Input.Input;
|
|
216
218
|
exports.InputGroup = InputGroup.InputGroup;
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/build/index.mjs
CHANGED
|
@@ -50,6 +50,7 @@ export { InfoPresentation } from './info/infoPresentations.mjs';
|
|
|
50
50
|
export { default as Info } from './info/Info.mjs';
|
|
51
51
|
export { default as InlineAlert } from './inlineAlert/InlineAlert.mjs';
|
|
52
52
|
export { InlinePrompt } from './prompt/InlinePrompt/InlinePrompt.mjs';
|
|
53
|
+
export { ActionPrompt } from './prompt/ActionPrompt/ActionPrompt.mjs';
|
|
53
54
|
export { default as InputWithDisplayFormat } from './inputWithDisplayFormat/InputWithDisplayFormat.mjs';
|
|
54
55
|
export { Input } from './inputs/Input.mjs';
|
|
55
56
|
export { InputGroup } from './inputs/InputGroup.mjs';
|
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -373,7 +373,7 @@ function SelectInputTriggerButton({
|
|
|
373
373
|
onKeyDown,
|
|
374
374
|
...interactionProps
|
|
375
375
|
} = React.useContext(SelectInputTriggerButtonPropsContext);
|
|
376
|
-
return /*#__PURE__*/jsxRuntime.jsx(react.
|
|
376
|
+
return /*#__PURE__*/jsxRuntime.jsx(react.ListboxButton, {
|
|
377
377
|
ref: ref,
|
|
378
378
|
as: PolymorphicWithOverrides.PolymorphicWithOverrides,
|
|
379
379
|
role: "combobox",
|
|
@@ -408,8 +408,12 @@ const SelectInputOptionsContainer = /*#__PURE__*/React.forwardRef(function Selec
|
|
|
408
408
|
if (event.key === 'Enter' && ariaActiveDescendant == null) {
|
|
409
409
|
return;
|
|
410
410
|
}
|
|
411
|
-
//
|
|
412
|
-
if (event.key === '
|
|
411
|
+
// Required to make ListBox focusable
|
|
412
|
+
if (event.key === 'Tab') {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
// Prevent absorbing Escape early
|
|
416
|
+
if (event.key === 'Escape') {
|
|
413
417
|
onKeyDown?.({
|
|
414
418
|
...event,
|
|
415
419
|
preventDefault: () => {},
|
|
@@ -540,7 +544,8 @@ function SelectInputOptions({
|
|
|
540
544
|
const fuzzyMatch = flatOptions.find(option => option.filterMatchers?.some(matcher => matcher.toLowerCase().includes(autocompleteValue.toLowerCase())));
|
|
541
545
|
return fuzzyMatch ? fuzzyMatch.value : null;
|
|
542
546
|
};
|
|
543
|
-
return /*#__PURE__*/jsxRuntime.jsxs(react.
|
|
547
|
+
return /*#__PURE__*/jsxRuntime.jsxs(react.ListboxOptions, {
|
|
548
|
+
modal: true,
|
|
544
549
|
as: SelectInputOptionsContainer,
|
|
545
550
|
static: true,
|
|
546
551
|
className: "np-select-input-options-container",
|
|
@@ -755,7 +760,7 @@ function SelectInputOption({
|
|
|
755
760
|
}) {
|
|
756
761
|
const itemsCount = React.useContext(SelectInputItemsCountContext);
|
|
757
762
|
const itemPosition = React.useContext(SelectInputItemPositionContext);
|
|
758
|
-
return /*#__PURE__*/jsxRuntime.jsx(react.
|
|
763
|
+
return /*#__PURE__*/jsxRuntime.jsx(react.ListboxOption, {
|
|
759
764
|
as: "div",
|
|
760
765
|
value: value,
|
|
761
766
|
"aria-setsize": itemsCount,
|
|
@@ -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 ReactNode,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport { Virtualizer, type VirtualizerHandle } from 'virtua';\n\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { PolymorphicWithOverrides } from '../common/polymorphicWithOverrides/PolymorphicWithOverrides';\nimport { Breakpoint } from '../common/propsValues/breakpoint';\nimport dateTriggerMessages from '../dateLookup/dateTrigger/DateTrigger.messages';\nimport { Merge } from '../utils';\n\nimport { BottomSheet } from './_BottomSheet';\nimport { ButtonInput } from './_ButtonInput';\nimport { Popover } from './_Popover';\nimport { useInputAttributes, WithInputAttributesProps } from './contexts';\nimport { InputGroup } from './InputGroup';\nimport { SearchInput } from './SearchInput';\nimport messages from './SelectInput.messages';\nimport Header from '../header';\nimport Section from '../section';\nimport { ButtonProps } from '../button/Button.types';\n\nconst MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;\n\nfunction searchableString(value: string) {\n return (\n value\n .trim()\n .replace(/\\s+/gu, ' ')\n // NFD converts an Å to A + ̊ (and other special characters)\n .normalize('NFD')\n // and then this replaces the ̊ with nothing (and other special characters)\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n );\n}\n\nfunction inferSearchableStrings(value: unknown) {\n if (typeof value === 'string') {\n return [searchableString(value)];\n }\n\n if (typeof value === 'object' && value != null) {\n return Object.values(value)\n .filter((innerValue) => typeof innerValue === 'string')\n .map((innerValue) => searchableString(innerValue));\n }\n\n return [];\n}\n\nexport interface SelectInputOptionItem<T = string> {\n type: 'option';\n value: T;\n filterMatchers?: readonly string[];\n disabled?: boolean;\n}\n\nexport interface SelectInputGroupItem<T = string> {\n type: 'group';\n label: ReactNode;\n options: readonly SelectInputOptionItem<T>[];\n action?: {\n label: string;\n onClick: ButtonProps['onClick'];\n };\n}\n\nexport interface SelectInputSeparatorItem {\n type: 'separator';\n}\n\nexport type SelectInputItem<T = string> =\n | SelectInputOptionItem<T>\n | SelectInputGroupItem<T>\n | SelectInputSeparatorItem;\n\nfunction dedupeSelectInputOptionItem<T>(\n item: SelectInputOptionItem<T>,\n existingValues: Set<T>,\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputOptionItem<T | undefined> {\n const isDuplicate = compareValues\n ? Array.from(existingValues).some((existingValue) => compareValues(item.value, existingValue))\n : existingValues.has(item.value);\n\n if (!isDuplicate) {\n existingValues.add(item.value);\n return item;\n }\n return { ...item, value: undefined };\n}\n\n/**\n * Sets the `value` of duplicate option items to `undefined`, hiding them when\n * rendered. Indexes are kept intact within groups to preserve the active item\n * between filter changes when possible.\n */\nfunction dedupeSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputItem<T | undefined>[] {\n const existingValues = new Set<T>();\n\n return items.map((item) => {\n switch (item.type) {\n case 'option': {\n return dedupeSelectInputOptionItem(item, existingValues, compareValues);\n }\n case 'group': {\n return {\n ...item,\n options: item.options.map((option) =>\n dedupeSelectInputOptionItem(option, existingValues, compareValues),\n ),\n };\n }\n default:\n }\n return item;\n });\n}\n\nfunction selectInputOptionItemIncludesNeedle<T>(item: SelectInputOptionItem<T>, needle: string) {\n return inferSearchableStrings(item.filterMatchers ?? item.value).some((haystack) =>\n haystack.includes(needle),\n );\n}\n\nfunction filterSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n predicate: (item: SelectInputOptionItem<T>) => boolean,\n) {\n return items.filter((item) => {\n switch (item.type) {\n case 'option': {\n return predicate(item);\n }\n case 'group': {\n return item.options.some((option) => predicate(option));\n }\n default:\n }\n return false;\n });\n}\n\n/**\n * Flattens and sorts filtered options using the provided comparator.\n * Extracts all options from groups, filters out undefined values (deduplicated items),\n * sorts them, and returns as a flat list of option items.\n */\nfunction sortSelectInputItems<T>(\n items: readonly SelectInputItem<T | undefined>[],\n compareFn: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number,\n searchQuery: string,\n): SelectInputItem<NonNullable<T>>[] {\n const flattenedOption = items.flatMap((item) => {\n if (item.type === 'option') {\n return item.value !== undefined ? [item as SelectInputOptionItem<NonNullable<T>>] : [];\n }\n\n if (item.type === 'group') {\n return item.options.filter(\n (option): option is SelectInputOptionItem<NonNullable<T>> => option.value !== undefined,\n );\n }\n\n return [];\n });\n\n // eslint-disable-next-line functional/immutable-data\n return flattenedOption.sort((a, b) => compareFn(a, b, searchQuery));\n}\n\nexport interface SelectInputProps<T = string, M extends boolean = false> {\n id?: string;\n /**\n * Sets the `data-wds-parent` attribute on the listbox container, which is needed for complex components like DateInput to correctly manage event handling.\n * @internal\n */\n parentId?: string;\n name?: string;\n multiple?: M;\n placeholder?: string;\n items: readonly SelectInputItem<NonNullable<T>>[];\n /**\n * Enables browser autocomplete integration through the search input.\n * Accepts standard HTML autocomplete values (e.g., \"country-name\", \"address-level1\").\n *\n * Requires `filterable={true}` to enable the search input.\n *\n * @example\n * <SelectInput\n * name=\"country\"\n * autocomplete=\"country-name\"\n * filterable={true}\n * items={[{\n * type: 'option',\n * value: 'GB',\n * filterMatchers: ['United Kingdom', 'UK']\n * }]}\n * />\n */\n autocomplete?: string;\n defaultValue?: M extends true ? readonly T[] : T;\n value?: M extends true ? readonly T[] : T;\n compareValues?:\n | (keyof NonNullable<T> & string)\n | ((a: T | undefined, b: T | undefined) => boolean);\n renderValue?: (value: NonNullable<T>, withinTrigger: boolean) => React.ReactNode;\n renderFooter?: (args: {\n resultsEmpty: boolean;\n queryNormalized: string | null | undefined;\n }) => React.ReactNode;\n renderTrigger?: (args: {\n content: React.ReactNode;\n placeholderShown: boolean;\n clear: (() => void) | undefined;\n disabled: boolean;\n size: 'sm' | 'md' | 'lg';\n className: string | undefined;\n }) => React.ReactNode;\n filterable?: boolean;\n filterPlaceholder?: string;\n sortFilteredOptions?: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'] & {\n 'aria-label'?: string;\n };\n /** Ref to the select trigger button element. */\n triggerRef?: React.MutableRefObject<HTMLButtonElement | null>;\n onFilterChange?: (args: { query: string; queryNormalized: string | null }) => void;\n onChange?: (value: M extends true ? T[] : T) => void;\n onOpen?: () => void;\n onClose?: () => void;\n onClear?: () => void;\n}\n\nconst defaultRenderTrigger = (({ content, placeholderShown, clear, disabled, size, className }) => (\n <InputGroup\n addonEnd={{\n content: (\n <span className={clsx('np-select-input-addon-container', disabled && 'disabled')}>\n {clear != null && !placeholderShown ? (\n <>\n <SelectInputClearButton\n onClick={(event) => {\n event.preventDefault();\n clear();\n }}\n />\n <span className=\"np-select-input-addon-separator\" />\n </>\n ) : null}\n\n <span className=\"np-select-input-addon\">\n <ChevronDown size={16} />\n </span>\n </span>\n ),\n initialContentWidth: 24 + 4,\n padding: 'sm',\n }}\n disabled={disabled}\n className={className}\n >\n <SelectInputTriggerButton as={ButtonInput} size={size}>\n <span\n className={clsx(\n 'np-select-input-content',\n placeholderShown && 'np-select-input-placeholder',\n )}\n >\n {content}\n </span>\n </SelectInputTriggerButton>\n </InputGroup>\n)) satisfies SelectInputProps['renderTrigger'];\n\ninterface SelectInputClearButtonProps extends Pick<\n React.ComponentPropsWithoutRef<'button'>,\n 'className' | 'onClick'\n> {}\n\nfunction SelectInputClearButton({ className, onClick }: SelectInputClearButtonProps) {\n const intl = useIntl();\n\n return (\n <button\n type=\"button\"\n aria-label={intl.formatMessage(dateTriggerMessages.ariaLabel)}\n className={clsx(className, 'np-select-input-addon np-select-input-addon--interactive')}\n onClick={onClick}\n >\n <Cross size={16} />\n </button>\n );\n}\n\nconst noop = () => {};\n\nexport function SelectInput<T = string, M extends boolean = false>({\n id: idProp,\n parentId,\n name,\n multiple,\n placeholder,\n autocomplete,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = defaultRenderTrigger,\n filterable,\n filterPlaceholder,\n sortFilteredOptions,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n triggerRef: externalTriggerRef,\n onFilterChange = noop,\n onChange,\n onOpen,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n\n const [open, setOpen] = useState(false);\n\n const initialized = useRef(false);\n const handleClose = useEffectEvent(onClose ?? (() => {}));\n const handleOpen = useEffectEvent(onOpen ?? (() => {}));\n useEffect(() => {\n if (initialized.current) {\n if (open) {\n handleOpen?.();\n } else {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [handleClose, handleOpen, open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const deferredFilterQuery = useDeferredValue(filterQuery);\n const setFilterQuery = useEffectEvent((query: string) => {\n _setFilterQuery(query);\n if (query !== filterQuery) {\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n }\n });\n\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n\n const screenSm = useScreenSize(Breakpoint.SMALL);\n const OptionsOverlay = screenSm ? Popover : BottomSheet;\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n /**\n * Attempts to resolve the `listbox` label\n * @see https://storybook.wise.design/?path=/docs/forms-selectinput-accessibility--docs#labelling\n */\n const getListBoxLabelProps = (): {\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n } => {\n if (UNSAFE_triggerButtonProps?.['aria-label']) {\n return {\n listBoxLabel: UNSAFE_triggerButtonProps['aria-label'],\n };\n }\n\n if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {\n return {\n listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby'],\n };\n }\n\n if (inputAttributes['aria-labelledby']) {\n return {\n listBoxLabelledBy: inputAttributes['aria-labelledby'],\n };\n }\n\n return {};\n };\n\n return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue}\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 if (externalTriggerRef) {\n // eslint-disable-next-line no-param-reassign\n externalTriggerRef.current = node;\n } else {\n internalTriggerRef.current = node;\n }\n },\n ...inputAttributes,\n ...UNSAFE_triggerButtonProps,\n id,\n ...mergeProps(\n {\n onClick: () => {\n setOpen((prev) => !prev);\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (\n event.key === ' ' ||\n event.key === 'Enter' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n setOpen((prev) => !prev);\n }\n },\n },\n getInteractionProps(),\n ),\n }}\n >\n {renderTrigger({\n content: !placeholderShown ? (\n <SelectInputOptionContentWithinTriggerContext.Provider value>\n {multiple && Array.isArray(value)\n ? (value as readonly NonNullable<T>[])\n .map((option) => renderValue(option, true))\n .filter((node) => node != null)\n .join(', ')\n : renderValue(value as NonNullable<T>, true)}\n </SelectInputOptionContentWithinTriggerContext.Provider>\n ) : (\n placeholder\n ),\n placeholderShown,\n clear:\n onClear != null\n ? () => {\n onClear();\n (externalTriggerRef?.current ?? internalTriggerRef.current)?.focus({\n preventScroll: true,\n });\n }\n : undefined,\n disabled: uiDisabled,\n size,\n className,\n })}\n </SelectInputTriggerButtonPropsContext.Provider>\n )}\n initialFocusRef={controllerRef}\n size={filterable ? 'lg' : 'md'}\n padding=\"none\"\n onClose={() => {\n setOpen(false);\n }}\n onCloseEnd={() => {\n setFilterQuery('');\n }}\n >\n <SelectInputOptions\n id={id ? `${id}Search` : undefined}\n parentId={parentId}\n items={items}\n compareValues={compareValues}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n sortFilteredOptions={sortFilteredOptions}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n autocomplete={autocomplete}\n name={name}\n onFilterChange={setFilterQuery}\n onAutocompleteSelect={(matchedValue) => {\n onChange?.(matchedValue as M extends true ? T[] : T);\n if (!multiple) {\n setOpen(false);\n }\n }}\n {...getListBoxLabelProps()}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\n}\n\nconst SelectInputTriggerButtonPropsContext = createContext<{\n ref?: React.ForwardedRef<HTMLButtonElement | null>;\n id?: string;\n onClick?: (event: React.MouseEvent) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n [key: string]: unknown;\n}>({});\n\ntype SelectInputTriggerButtonElementType = 'button' | React.ComponentType;\n\nexport type SelectInputTriggerButtonProps<\n T extends SelectInputTriggerButtonElementType = 'button',\n> = Merge<React.ComponentPropsWithoutRef<T>, { as?: T }>;\n\nexport function SelectInputTriggerButton<T extends SelectInputTriggerButtonElementType = 'button'>({\n as = 'button' as T,\n ...restProps\n}: SelectInputTriggerButtonProps<T>) {\n const { ref, onClick, onKeyDown, ...interactionProps } = useContext(\n SelectInputTriggerButtonPropsContext,\n );\n\n return (\n <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> extends Pick<\n SelectInputProps<T>,\n | 'items'\n | 'renderValue'\n | 'renderFooter'\n | 'filterable'\n | 'filterPlaceholder'\n | 'id'\n | 'parentId'\n | 'compareValues'\n | 'sortFilteredOptions'\n> {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n autocomplete?: string;\n name?: string;\n onAutocompleteSelect?: (value: T) => void;\n}\n\nfunction SelectInputOptions<T = string>({\n id,\n parentId,\n items,\n compareValues: compareValuesProp,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n sortFilteredOptions,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n listBoxLabel,\n listBoxLabelledBy,\n autocomplete,\n name,\n onAutocompleteSelect,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n const virtualiserHandlerRef = useRef<VirtualizerHandle>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n const [initialRender, setInitialRender] = useState(true);\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n useEffect(() => {\n if (needle) {\n // Ensure having an active option while filtering.\n // Without `requestAnimationFrame` upon which React depends for scheduling\n // updates, the active status would only show for a split second and then\n // disappear inadvertently.\n requestAnimationFrame(() => {\n if (\n controllerRef.current != null &&\n !controllerRef.current.hasAttribute('aria-activedescendant')\n ) {\n // Activate first option via synthetic key press\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n });\n }\n }, [controllerRef, needle]);\n\n const compareValues = useMemo(() => {\n if (!compareValuesProp) {\n return undefined;\n }\n\n if (typeof compareValuesProp === 'function') {\n return (a: NonNullable<T>, b: NonNullable<T>) => compareValuesProp(a, b);\n }\n\n const key = compareValuesProp;\n return (a: NonNullable<T>, b: NonNullable<T>) => {\n if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {\n return (a as Record<string, unknown>)[key] === (b as Record<string, unknown>)[key];\n }\n return a === b;\n };\n }, [compareValuesProp]);\n\n const filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] = useMemo(() => {\n if (needle == null) {\n return items;\n }\n\n const filtered = filterSelectInputItems(dedupeSelectInputItems(items, compareValues), (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n );\n\n if (sortFilteredOptions) {\n return sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);\n }\n\n return filtered;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needle, items, compareValues]);\n const resultsEmpty = needle != null && filteredItems.length === 0;\n\n const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;\n\n // Items shown once shall be kept mounted until the needle changes, otherwise\n // the scroll position may jump around inadvertently. Pattern adopted from:\n // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only\n const [mountedIndexes, setMountedIndexes] = useState<number[]>([]);\n useEffect(() => {\n // Ensure the 'End' key works as intended by keeping the last item mounted\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n indexes.add(filteredItems.length - 1);\n return [...indexes]; // Sorting is redundant by nature here\n });\n }, [\n needle, // Needed as `filteredItems.length` may be equal between two updates\n filteredItems.length,\n ]);\n\n const listboxContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (listboxContainerRef.current != null) {\n listboxContainerRef.current.style.setProperty(\n '--initial-height',\n `${listboxContainerRef.current.offsetHeight}px`,\n );\n }\n }, []);\n\n useEffect(() => {\n setInitialRender(false);\n }, []);\n\n const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n const getItemNode = (index: number) => {\n const item = filteredItems[index];\n return (\n <SelectInputItemView key={index} item={item} renderValue={renderValue} needle={needle} />\n );\n };\n\n const findMatchingItem = (autocompleteValue: string): T | null => {\n const flatOptions = items\n .flatMap((item) =>\n item.type === 'group' ? item.options : item.type === 'option' ? [item] : [],\n )\n .filter(\n (item): item is SelectInputOptionItem<NonNullable<T>> =>\n item.type === 'option' && item.value != null,\n );\n\n const exactMatch = flatOptions.find(\n (option) =>\n String(option.value) === autocompleteValue ||\n option.filterMatchers?.some((matcher) => matcher === autocompleteValue),\n );\n\n if (exactMatch) {\n return exactMatch.value;\n }\n\n const fuzzyMatch = flatOptions.find((option) =>\n option.filterMatchers?.some((matcher) =>\n matcher.toLowerCase().includes(autocompleteValue.toLowerCase()),\n ),\n );\n\n return fuzzyMatch ? fuzzyMatch.value : null;\n };\n\n return (\n <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 (!initialRender && value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\n name={name}\n autoComplete={autocomplete}\n role=\"combobox\"\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n aria-label={filterPlaceholder}\n defaultValue={filterQuery}\n aria-autocomplete=\"list\"\n aria-expanded\n aria-controls={listboxId}\n aria-describedby={showStatus ? statusId : undefined}\n onKeyDown={(event) => {\n // Prevent interfering with the matcher of Headless UI\n // https://mathiasbynens.be/notes/javascript-unicode#regex\n if (/^.$/u.test(event.key)) {\n event.stopPropagation();\n }\n }}\n onChange={(event) => {\n // Free up resources and ensure not to go out of bounds when the\n // resulting item count is less than before\n const inputValue = event.currentTarget.value;\n\n // Free up resources and ensure not to go out of bounds\n setMountedIndexes([]);\n onFilterChange(inputValue);\n }}\n onInput={(event) => {\n const inputValue = event.currentTarget.value;\n const inputElement = event.currentTarget;\n\n if (autocomplete && onAutocompleteSelect && inputValue) {\n setTimeout(() => {\n if (inputElement.value === inputValue && inputValue.length > 2) {\n const matchedValue = findMatchingItem(inputValue);\n if (matchedValue !== null) {\n onAutocompleteSelect(matchedValue);\n }\n }\n }, 50);\n }\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={clsx(\n 'np-select-input-listbox-container',\n virtualized && 'np-select-input-listbox-container--virtualized',\n needle == null && // Groups aren't shown when filtering\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\n data-wds-parent={parentId ?? undefined}\n >\n {resultsEmpty ? (\n <div id={statusId} className=\"np-select-input-options-status\">\n <CrossCircle size={16} className=\"np-select-input-options-status-icon\" />\n {intl.formatMessage(messages.noResultsFound)}\n </div>\n ) : null}\n\n <div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-label={listBoxLabel}\n aria-labelledby={listBoxLabelledBy}\n tabIndex={0}\n className=\"np-select-input-listbox\"\n >\n {!virtualized ? (\n filteredItems.map((_, index) => getItemNode(index))\n ) : (\n <Virtualizer\n ref={virtualiserHandlerRef}\n key={needle}\n data={filteredItems}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onScroll={async () => {\n if (!virtualiserHandlerRef.current) return;\n\n const startIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset,\n );\n const endIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset +\n virtualiserHandlerRef.current.viewportSize,\n );\n\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n\n for (let index = startIndex; index <= endIndex; index += 1) {\n indexes.add(index);\n }\n\n return [...indexes].sort((a, b) => a - b);\n });\n }}\n >\n {(item, index) => (\n // The position of each item can't be inferred by browsers when\n // virtualizing, as some of the items may not be in the DOM\n <SelectInputItemsCountContext.Provider value={filteredItems.length}>\n <SelectInputItemPositionContext.Provider value={index + 1}>\n {getItemNode(index)}\n </SelectInputItemPositionContext.Provider>\n </SelectInputItemsCountContext.Provider>\n )}\n </Virtualizer>\n )}\n </div>\n\n {renderFooter != null ? (\n <footer className=\"np-select-input-footer\">\n <div\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent interfering with Headless UI\n if (event.key !== 'Escape') {\n event.stopPropagation();\n }\n }}\n >\n {renderFooter({\n resultsEmpty,\n queryNormalized: needle,\n })}\n </div>\n </footer>\n ) : null}\n </section>\n </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> extends SelectInputItemViewProps<\n T,\n SelectInputGroupItem<T | undefined>\n> {}\n\nfunction SelectInputGroupItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputGroupItemViewProps<T>) {\n const headerId = useId();\n\n const header = (\n <Header\n as=\"header\"\n role=\"none\"\n id={headerId}\n title={item.label}\n // @ts-expect-error when we migrate ActionButton to new Button this should be sorted\n action={\n item.action && {\n text: item.action.label,\n onClick: item.action.onClick,\n }\n }\n className=\"np-select-input-group-item-header p-x-1\"\n />\n );\n\n return (\n // An empty container may be rendered when no options match `needle`\n // However, pre-filtering would result in worse performance overall\n <Section\n as=\"section\"\n role=\"group\"\n aria-labelledby={headerId}\n className={clsx('m-y-0', needle === null && 'np-select-input-group-item--without-needle')}\n >\n {needle == null ? header : null}\n {item.options.map((option, index) => (\n <SelectInputItemView\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n item={option}\n renderValue={renderValue}\n needle={needle}\n />\n ))}\n </Section>\n );\n}\n\nconst SelectInputItemsCountContext = createContext<number | undefined>(undefined);\nconst SelectInputItemPositionContext = createContext<number | undefined>(undefined);\n\ninterface SelectInputOptionProps<T = string> {\n value: T;\n disabled?: boolean;\n children?: React.ReactNode;\n}\n\nfunction SelectInputOption<T = string>({ value, disabled, children }: SelectInputOptionProps<T>) {\n const itemsCount = useContext(SelectInputItemsCountContext);\n const itemPosition = useContext(SelectInputItemPositionContext);\n return (\n <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","compareValues","isDuplicate","Array","from","some","existingValue","has","add","undefined","dedupeSelectInputItems","items","Set","type","options","option","selectInputOptionItemIncludesNeedle","needle","filterMatchers","haystack","includes","filterSelectInputItems","predicate","sortSelectInputItems","compareFn","searchQuery","flattenedOption","flatMap","sort","a","b","defaultRenderTrigger","content","placeholderShown","clear","disabled","size","className","_jsx","InputGroup","addonEnd","_jsxs","clsx","children","_Fragment","SelectInputClearButton","onClick","event","preventDefault","ChevronDown","initialContentWidth","padding","SelectInputTriggerButton","as","ButtonInput","intl","useIntl","formatMessage","dateTriggerMessages","ariaLabel","Cross","noop","SelectInput","id","idProp","parentId","name","multiple","placeholder","autocomplete","defaultValue","controlledValue","renderValue","String","renderFooter","renderTrigger","filterable","filterPlaceholder","sortFilteredOptions","UNSAFE_triggerButtonProps","triggerRef","externalTriggerRef","onFilterChange","onChange","onOpen","onClose","onClear","inputAttributes","useInputAttributes","nonLabelable","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","handleOpen","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","setFilterQuery","query","queryNormalized","internalTriggerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","Popover","BottomSheet","searchInputRef","listboxRef","controllerRef","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","ListboxBase","by","uiDisabled","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","prev","onKeyDown","key","SelectInputOptionContentWithinTriggerContext","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","onAutocompleteSelect","matchedValue","createContext","restProps","interactionProps","useContext","Button","PolymorphicWithOverrides","role","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","compareValuesProp","virtualiserHandlerRef","initialRender","setInitialRender","useMemo","requestAnimationFrame","hasAttribute","dispatchEvent","KeyboardEvent","bubbles","filteredItems","filtered","resultsEmpty","virtualized","mountedIndexes","setMountedIndexes","prevMountedIndexes","indexes","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","SelectInputItemView","findMatchingItem","autocompleteValue","flatOptions","exactMatch","find","matcher","fuzzyMatch","Options","static","setAttribute","removeAttribute","SearchInput","autoComplete","shape","test","inputValue","currentTarget","onInput","inputElement","setTimeout","CrossCircle","messages","noResultsFound","_","Virtualizer","data","keepMounted","scrollRef","onScroll","startIndex","findItemIndex","scrollOffset","endIndex","viewportSize","SelectInputItemsCountContext","SelectInputItemPositionContext","SelectInputOption","SelectInputGroupItemView","headerId","header","Header","title","label","action","text","Section","itemsCount","itemPosition","Option","active","selected","Check","SelectInputOptionContent","note","description","icon","withinTrigger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectInput.js","sources":["../../src/inputs/SelectInput.tsx"],"sourcesContent":["import {\n Listbox as ListboxBase,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n} from '@headlessui/react';\nimport { Check, ChevronDown, Cross, CrossCircle } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport mergeProps from 'merge-props';\nimport {\n createContext,\n forwardRef,\n ReactNode,\n useContext,\n useDeferredValue,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useIntl } from 'react-intl';\nimport { Virtualizer, type VirtualizerHandle } from 'virtua';\n\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\nimport { useScreenSize } from '../common/hooks/useScreenSize';\nimport { PolymorphicWithOverrides } from '../common/polymorphicWithOverrides/PolymorphicWithOverrides';\nimport { Breakpoint } from '../common/propsValues/breakpoint';\nimport dateTriggerMessages from '../dateLookup/dateTrigger/DateTrigger.messages';\nimport { Merge } from '../utils';\n\nimport { BottomSheet } from './_BottomSheet';\nimport { ButtonInput } from './_ButtonInput';\nimport { Popover } from './_Popover';\nimport { useInputAttributes, WithInputAttributesProps } from './contexts';\nimport { InputGroup } from './InputGroup';\nimport { SearchInput } from './SearchInput';\nimport messages from './SelectInput.messages';\nimport Header from '../header';\nimport Section from '../section';\nimport { ButtonProps } from '../button/Button.types';\n\nconst MAX_ITEMS_WITHOUT_VIRTUALIZATION = 50;\n\nfunction searchableString(value: string) {\n return (\n value\n .trim()\n .replace(/\\s+/gu, ' ')\n // NFD converts an Å to A + ̊ (and other special characters)\n .normalize('NFD')\n // and then this replaces the ̊ with nothing (and other special characters)\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n );\n}\n\nfunction inferSearchableStrings(value: unknown) {\n if (typeof value === 'string') {\n return [searchableString(value)];\n }\n\n if (typeof value === 'object' && value != null) {\n return Object.values(value)\n .filter((innerValue) => typeof innerValue === 'string')\n .map((innerValue) => searchableString(innerValue));\n }\n\n return [];\n}\n\nexport interface SelectInputOptionItem<T = string> {\n type: 'option';\n value: T;\n filterMatchers?: readonly string[];\n disabled?: boolean;\n}\n\nexport interface SelectInputGroupItem<T = string> {\n type: 'group';\n label: ReactNode;\n options: readonly SelectInputOptionItem<T>[];\n action?: {\n label: string;\n onClick: ButtonProps['onClick'];\n };\n}\n\nexport interface SelectInputSeparatorItem {\n type: 'separator';\n}\n\nexport type SelectInputItem<T = string> =\n | SelectInputOptionItem<T>\n | SelectInputGroupItem<T>\n | SelectInputSeparatorItem;\n\nfunction dedupeSelectInputOptionItem<T>(\n item: SelectInputOptionItem<T>,\n existingValues: Set<T>,\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputOptionItem<T | undefined> {\n const isDuplicate = compareValues\n ? Array.from(existingValues).some((existingValue) => compareValues(item.value, existingValue))\n : existingValues.has(item.value);\n\n if (!isDuplicate) {\n existingValues.add(item.value);\n return item;\n }\n return { ...item, value: undefined };\n}\n\n/**\n * Sets the `value` of duplicate option items to `undefined`, hiding them when\n * rendered. Indexes are kept intact within groups to preserve the active item\n * between filter changes when possible.\n */\nfunction dedupeSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n compareValues?: (a: T, b: T) => boolean,\n): SelectInputItem<T | undefined>[] {\n const existingValues = new Set<T>();\n\n return items.map((item) => {\n switch (item.type) {\n case 'option': {\n return dedupeSelectInputOptionItem(item, existingValues, compareValues);\n }\n case 'group': {\n return {\n ...item,\n options: item.options.map((option) =>\n dedupeSelectInputOptionItem(option, existingValues, compareValues),\n ),\n };\n }\n default:\n }\n return item;\n });\n}\n\nfunction selectInputOptionItemIncludesNeedle<T>(item: SelectInputOptionItem<T>, needle: string) {\n return inferSearchableStrings(item.filterMatchers ?? item.value).some((haystack) =>\n haystack.includes(needle),\n );\n}\n\nfunction filterSelectInputItems<T>(\n items: readonly SelectInputItem<T>[],\n predicate: (item: SelectInputOptionItem<T>) => boolean,\n) {\n return items.filter((item) => {\n switch (item.type) {\n case 'option': {\n return predicate(item);\n }\n case 'group': {\n return item.options.some((option) => predicate(option));\n }\n default:\n }\n return false;\n });\n}\n\n/**\n * Flattens and sorts filtered options using the provided comparator.\n * Extracts all options from groups, filters out undefined values (deduplicated items),\n * sorts them, and returns as a flat list of option items.\n */\nfunction sortSelectInputItems<T>(\n items: readonly SelectInputItem<T | undefined>[],\n compareFn: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number,\n searchQuery: string,\n): SelectInputItem<NonNullable<T>>[] {\n const flattenedOption = items.flatMap((item) => {\n if (item.type === 'option') {\n return item.value !== undefined ? [item as SelectInputOptionItem<NonNullable<T>>] : [];\n }\n\n if (item.type === 'group') {\n return item.options.filter(\n (option): option is SelectInputOptionItem<NonNullable<T>> => option.value !== undefined,\n );\n }\n\n return [];\n });\n\n // eslint-disable-next-line functional/immutable-data\n return flattenedOption.sort((a, b) => compareFn(a, b, searchQuery));\n}\n\nexport interface SelectInputProps<T = string, M extends boolean = false> {\n id?: string;\n /**\n * Sets the `data-wds-parent` attribute on the listbox container, which is needed for complex components like DateInput to correctly manage event handling.\n * @internal\n */\n parentId?: string;\n name?: string;\n multiple?: M;\n placeholder?: string;\n items: readonly SelectInputItem<NonNullable<T>>[];\n /**\n * Enables browser autocomplete integration through the search input.\n * Accepts standard HTML autocomplete values (e.g., \"country-name\", \"address-level1\").\n *\n * Requires `filterable={true}` to enable the search input.\n *\n * @example\n * <SelectInput\n * name=\"country\"\n * autocomplete=\"country-name\"\n * filterable={true}\n * items={[{\n * type: 'option',\n * value: 'GB',\n * filterMatchers: ['United Kingdom', 'UK']\n * }]}\n * />\n */\n autocomplete?: string;\n defaultValue?: M extends true ? readonly T[] : T;\n value?: M extends true ? readonly T[] : T;\n compareValues?:\n | (keyof NonNullable<T> & string)\n | ((a: T | undefined, b: T | undefined) => boolean);\n renderValue?: (value: NonNullable<T>, withinTrigger: boolean) => React.ReactNode;\n renderFooter?: (args: {\n resultsEmpty: boolean;\n queryNormalized: string | null | undefined;\n }) => React.ReactNode;\n renderTrigger?: (args: {\n content: React.ReactNode;\n placeholderShown: boolean;\n clear: (() => void) | undefined;\n disabled: boolean;\n size: 'sm' | 'md' | 'lg';\n className: string | undefined;\n }) => React.ReactNode;\n filterable?: boolean;\n filterPlaceholder?: string;\n sortFilteredOptions?: (\n a: SelectInputOptionItem<NonNullable<T>>,\n b: SelectInputOptionItem<NonNullable<T>>,\n searchQuery: string,\n ) => number;\n disabled?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n UNSAFE_triggerButtonProps?: WithInputAttributesProps['inputAttributes'] & {\n 'aria-label'?: string;\n };\n /** Ref to the select trigger button element. */\n triggerRef?: React.MutableRefObject<HTMLButtonElement | null>;\n onFilterChange?: (args: { query: string; queryNormalized: string | null }) => void;\n onChange?: (value: M extends true ? T[] : T) => void;\n onOpen?: () => void;\n onClose?: () => void;\n onClear?: () => void;\n}\n\nconst defaultRenderTrigger = (({ content, placeholderShown, clear, disabled, size, className }) => (\n <InputGroup\n addonEnd={{\n content: (\n <span className={clsx('np-select-input-addon-container', disabled && 'disabled')}>\n {clear != null && !placeholderShown ? (\n <>\n <SelectInputClearButton\n onClick={(event) => {\n event.preventDefault();\n clear();\n }}\n />\n <span className=\"np-select-input-addon-separator\" />\n </>\n ) : null}\n\n <span className=\"np-select-input-addon\">\n <ChevronDown size={16} />\n </span>\n </span>\n ),\n initialContentWidth: 24 + 4,\n padding: 'sm',\n }}\n disabled={disabled}\n className={className}\n >\n <SelectInputTriggerButton as={ButtonInput} size={size}>\n <span\n className={clsx(\n 'np-select-input-content',\n placeholderShown && 'np-select-input-placeholder',\n )}\n >\n {content}\n </span>\n </SelectInputTriggerButton>\n </InputGroup>\n)) satisfies SelectInputProps['renderTrigger'];\n\ninterface SelectInputClearButtonProps extends Pick<\n React.ComponentPropsWithoutRef<'button'>,\n 'className' | 'onClick'\n> {}\n\nfunction SelectInputClearButton({ className, onClick }: SelectInputClearButtonProps) {\n const intl = useIntl();\n\n return (\n <button\n type=\"button\"\n aria-label={intl.formatMessage(dateTriggerMessages.ariaLabel)}\n className={clsx(className, 'np-select-input-addon np-select-input-addon--interactive')}\n onClick={onClick}\n >\n <Cross size={16} />\n </button>\n );\n}\n\nconst noop = () => {};\n\nexport function SelectInput<T = string, M extends boolean = false>({\n id: idProp,\n parentId,\n name,\n multiple,\n placeholder,\n autocomplete,\n items,\n defaultValue,\n value: controlledValue,\n compareValues,\n renderValue = String,\n renderFooter,\n renderTrigger = defaultRenderTrigger,\n filterable,\n filterPlaceholder,\n sortFilteredOptions,\n disabled,\n size = 'md',\n className,\n UNSAFE_triggerButtonProps,\n triggerRef: externalTriggerRef,\n onFilterChange = noop,\n onChange,\n onOpen,\n onClose,\n onClear,\n}: SelectInputProps<T, M>) {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n\n const [open, setOpen] = useState(false);\n\n const initialized = useRef(false);\n const handleClose = useEffectEvent(onClose ?? (() => {}));\n const handleOpen = useEffectEvent(onOpen ?? (() => {}));\n useEffect(() => {\n if (initialized.current) {\n if (open) {\n handleOpen?.();\n } else {\n handleClose?.();\n }\n } else {\n initialized.current = true;\n }\n }, [handleClose, handleOpen, open]);\n\n const [filterQuery, _setFilterQuery] = useState('');\n const deferredFilterQuery = useDeferredValue(filterQuery);\n const setFilterQuery = useEffectEvent((query: string) => {\n _setFilterQuery(query);\n if (query !== filterQuery) {\n onFilterChange({\n query,\n queryNormalized: query ? searchableString(query) : null,\n });\n }\n });\n\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n\n const screenSm = useScreenSize(Breakpoint.SMALL);\n const OptionsOverlay = screenSm ? Popover : BottomSheet;\n\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n\n /**\n * Attempts to resolve the `listbox` label\n * @see https://storybook.wise.design/?path=/docs/forms-selectinput-accessibility--docs#labelling\n */\n const getListBoxLabelProps = (): {\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n } => {\n if (UNSAFE_triggerButtonProps?.['aria-label']) {\n return {\n listBoxLabel: UNSAFE_triggerButtonProps['aria-label'],\n };\n }\n\n if (UNSAFE_triggerButtonProps?.['aria-labelledby']) {\n return {\n listBoxLabelledBy: UNSAFE_triggerButtonProps['aria-labelledby'],\n };\n }\n\n if (inputAttributes['aria-labelledby']) {\n return {\n listBoxLabelledBy: inputAttributes['aria-labelledby'],\n };\n }\n\n return {};\n };\n\n return (\n <ListboxBase\n name={name}\n multiple={multiple}\n defaultValue={defaultValue as M extends true ? T[] : T}\n value={controlledValue as M extends true ? T[] : T}\n by={compareValues}\n disabled={disabled}\n onChange={\n ((value) => {\n if (!multiple) {\n setOpen(false);\n }\n onChange?.(value);\n }) satisfies SelectInputProps<T, M>['onChange']\n }\n >\n {({ disabled: uiDisabled, value }) => {\n const placeholderShown =\n multiple && Array.isArray(value) ? value.length === 0 : value == null;\n return (\n <OptionsOverlay\n placement=\"bottom-start\"\n open={open}\n renderTrigger={({ ref, getInteractionProps }) => (\n <SelectInputTriggerButtonPropsContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n ref: (node) => {\n ref(node);\n if (externalTriggerRef) {\n // eslint-disable-next-line no-param-reassign\n externalTriggerRef.current = node;\n } else {\n internalTriggerRef.current = node;\n }\n },\n ...inputAttributes,\n ...UNSAFE_triggerButtonProps,\n id,\n ...mergeProps(\n {\n onClick: () => {\n setOpen((prev) => !prev);\n },\n onKeyDown: (event: React.KeyboardEvent) => {\n if (\n event.key === ' ' ||\n event.key === 'Enter' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp'\n ) {\n setOpen((prev) => !prev);\n }\n },\n },\n getInteractionProps(),\n ),\n }}\n >\n {renderTrigger({\n content: !placeholderShown ? (\n <SelectInputOptionContentWithinTriggerContext.Provider value>\n {multiple && Array.isArray(value)\n ? (value as readonly NonNullable<T>[])\n .map((option) => renderValue(option, true))\n .filter((node) => node != null)\n .join(', ')\n : renderValue(value as NonNullable<T>, true)}\n </SelectInputOptionContentWithinTriggerContext.Provider>\n ) : (\n placeholder\n ),\n placeholderShown,\n clear:\n onClear != null\n ? () => {\n onClear();\n (externalTriggerRef?.current ?? internalTriggerRef.current)?.focus({\n preventScroll: true,\n });\n }\n : undefined,\n disabled: uiDisabled,\n size,\n className,\n })}\n </SelectInputTriggerButtonPropsContext.Provider>\n )}\n initialFocusRef={controllerRef}\n size={filterable ? 'lg' : 'md'}\n padding=\"none\"\n onClose={() => {\n setOpen(false);\n }}\n onCloseEnd={() => {\n setFilterQuery('');\n }}\n >\n <SelectInputOptions\n id={id ? `${id}Search` : undefined}\n parentId={parentId}\n items={items}\n compareValues={compareValues}\n renderValue={renderValue}\n renderFooter={renderFooter}\n filterable={filterable}\n filterPlaceholder={filterPlaceholder}\n sortFilteredOptions={sortFilteredOptions}\n searchInputRef={searchInputRef}\n listboxRef={listboxRef}\n filterQuery={deferredFilterQuery}\n autocomplete={autocomplete}\n name={name}\n onFilterChange={setFilterQuery}\n onAutocompleteSelect={(matchedValue) => {\n onChange?.(matchedValue as M extends true ? T[] : T);\n if (!multiple) {\n setOpen(false);\n }\n }}\n {...getListBoxLabelProps()}\n />\n </OptionsOverlay>\n );\n }}\n </ListboxBase>\n );\n}\n\nconst SelectInputTriggerButtonPropsContext = createContext<{\n ref?: React.ForwardedRef<HTMLButtonElement | null>;\n id?: string;\n onClick?: (event: React.MouseEvent) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n [key: string]: unknown;\n}>({});\n\ntype SelectInputTriggerButtonElementType = 'button' | React.ComponentType;\n\nexport type SelectInputTriggerButtonProps<\n T extends SelectInputTriggerButtonElementType = 'button',\n> = Merge<React.ComponentPropsWithoutRef<T>, { as?: T }>;\n\nexport function SelectInputTriggerButton<T extends SelectInputTriggerButtonElementType = 'button'>({\n as = 'button' as T,\n ...restProps\n}: SelectInputTriggerButtonProps<T>) {\n const { ref, onClick, onKeyDown, ...interactionProps } = useContext(\n SelectInputTriggerButtonPropsContext,\n );\n\n return (\n <ListboxButton\n ref={ref}\n as={PolymorphicWithOverrides}\n role=\"combobox\"\n __overrides={{ as, ...interactionProps }}\n {...mergeProps({ onClick, onKeyDown }, restProps)}\n />\n );\n}\n\ninterface SelectInputOptionsContainerProps extends React.ComponentPropsWithRef<'div'> {\n onAriaActiveDescendantChange: (value: React.AriaAttributes['aria-activedescendant']) => void;\n}\n\nconst SelectInputOptionsContainer = forwardRef(function SelectInputOptionsContainer(\n {\n 'aria-orientation': ariaOrientation,\n 'aria-activedescendant': ariaActiveDescendant,\n role,\n tabIndex,\n onAriaActiveDescendantChange,\n onKeyDown,\n ...restProps\n }: SelectInputOptionsContainerProps,\n ref: React.ForwardedRef<HTMLDivElement | null>,\n) {\n const handleAriaActiveDescendantChange = useEffectEvent(onAriaActiveDescendantChange);\n useEffect(() => {\n handleAriaActiveDescendantChange(ariaActiveDescendant);\n }, [ariaActiveDescendant, handleAriaActiveDescendantChange]);\n\n return (\n <div\n ref={ref}\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent confirmation close without an active item\n if (event.key === 'Enter' && ariaActiveDescendant == null) {\n return;\n }\n\n // Required to make ListBox focusable\n if (event.key === 'Tab') {\n return;\n }\n\n // Prevent absorbing Escape early\n if (event.key === 'Escape') {\n onKeyDown?.({\n ...event,\n preventDefault: () => {},\n stopPropagation: () => {},\n });\n return;\n }\n\n onKeyDown?.(event);\n }}\n {...restProps}\n />\n );\n});\n\ninterface SelectInputOptionsProps<T = string> extends Pick<\n SelectInputProps<T>,\n | 'items'\n | 'renderValue'\n | 'renderFooter'\n | 'filterable'\n | 'filterPlaceholder'\n | 'id'\n | 'parentId'\n | 'compareValues'\n | 'sortFilteredOptions'\n> {\n searchInputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxRef: React.MutableRefObject<HTMLDivElement | null>;\n filterQuery: string;\n onFilterChange: (query: string) => void;\n listBoxLabel?: string;\n listBoxLabelledBy?: string;\n autocomplete?: string;\n name?: string;\n onAutocompleteSelect?: (value: T) => void;\n}\n\nfunction SelectInputOptions<T = string>({\n id,\n parentId,\n items,\n compareValues: compareValuesProp,\n renderValue = String,\n renderFooter,\n filterable = false,\n filterPlaceholder,\n sortFilteredOptions,\n searchInputRef,\n listboxRef,\n filterQuery,\n onFilterChange,\n listBoxLabel,\n listBoxLabelledBy,\n autocomplete,\n name,\n onAutocompleteSelect,\n}: SelectInputOptionsProps<T>) {\n const intl = useIntl();\n const virtualiserHandlerRef = useRef<VirtualizerHandle>(null);\n const controllerRef = filterable ? searchInputRef : listboxRef;\n const [initialRender, setInitialRender] = useState(true);\n\n const needle = useMemo(() => {\n if (filterable) {\n return filterQuery ? searchableString(filterQuery) : null;\n }\n return undefined;\n }, [filterQuery, filterable]);\n useEffect(() => {\n if (needle) {\n // Ensure having an active option while filtering.\n // Without `requestAnimationFrame` upon which React depends for scheduling\n // updates, the active status would only show for a split second and then\n // disappear inadvertently.\n requestAnimationFrame(() => {\n if (\n controllerRef.current != null &&\n !controllerRef.current.hasAttribute('aria-activedescendant')\n ) {\n // Activate first option via synthetic key press\n controllerRef.current.dispatchEvent(\n new KeyboardEvent('keydown', { key: 'Home', bubbles: true }),\n );\n }\n });\n }\n }, [controllerRef, needle]);\n\n const compareValues = useMemo(() => {\n if (!compareValuesProp) {\n return undefined;\n }\n\n if (typeof compareValuesProp === 'function') {\n return (a: NonNullable<T>, b: NonNullable<T>) => compareValuesProp(a, b);\n }\n\n const key = compareValuesProp;\n return (a: NonNullable<T>, b: NonNullable<T>) => {\n if (typeof a === 'object' && a != null && typeof b === 'object' && b != null) {\n return (a as Record<string, unknown>)[key] === (b as Record<string, unknown>)[key];\n }\n return a === b;\n };\n }, [compareValuesProp]);\n\n const filteredItems: readonly SelectInputItem<NonNullable<T> | undefined>[] = useMemo(() => {\n if (needle == null) {\n return items;\n }\n\n const filtered = filterSelectInputItems(dedupeSelectInputItems(items, compareValues), (item) =>\n selectInputOptionItemIncludesNeedle(item, needle),\n );\n\n if (sortFilteredOptions) {\n return sortSelectInputItems(filtered, sortFilteredOptions, filterQuery);\n }\n\n return filtered;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [needle, items, compareValues]);\n const resultsEmpty = needle != null && filteredItems.length === 0;\n\n const virtualized = filteredItems.length > MAX_ITEMS_WITHOUT_VIRTUALIZATION;\n\n // Items shown once shall be kept mounted until the needle changes, otherwise\n // the scroll position may jump around inadvertently. Pattern adopted from:\n // https://inokawa.github.io/virtua/?path=/story/advanced-keep-offscreen-items--append-only\n const [mountedIndexes, setMountedIndexes] = useState<number[]>([]);\n useEffect(() => {\n // Ensure the 'End' key works as intended by keeping the last item mounted\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n indexes.add(filteredItems.length - 1);\n return [...indexes]; // Sorting is redundant by nature here\n });\n }, [\n needle, // Needed as `filteredItems.length` may be equal between two updates\n filteredItems.length,\n ]);\n\n const listboxContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (listboxContainerRef.current != null) {\n listboxContainerRef.current.style.setProperty(\n '--initial-height',\n `${listboxContainerRef.current.offsetHeight}px`,\n );\n }\n }, []);\n\n useEffect(() => {\n setInitialRender(false);\n }, []);\n\n const showStatus = resultsEmpty;\n const statusId = useId();\n const listboxId = useId();\n\n const getItemNode = (index: number) => {\n const item = filteredItems[index];\n return (\n <SelectInputItemView key={index} item={item} renderValue={renderValue} needle={needle} />\n );\n };\n\n const findMatchingItem = (autocompleteValue: string): T | null => {\n const flatOptions = items\n .flatMap((item) =>\n item.type === 'group' ? item.options : item.type === 'option' ? [item] : [],\n )\n .filter(\n (item): item is SelectInputOptionItem<NonNullable<T>> =>\n item.type === 'option' && item.value != null,\n );\n\n const exactMatch = flatOptions.find(\n (option) =>\n String(option.value) === autocompleteValue ||\n option.filterMatchers?.some((matcher) => matcher === autocompleteValue),\n );\n\n if (exactMatch) {\n return exactMatch.value;\n }\n\n const fuzzyMatch = flatOptions.find((option) =>\n option.filterMatchers?.some((matcher) =>\n matcher.toLowerCase().includes(autocompleteValue.toLowerCase()),\n ),\n );\n\n return fuzzyMatch ? fuzzyMatch.value : null;\n };\n\n return (\n <ListboxOptions\n modal\n as={SelectInputOptionsContainer}\n static\n className=\"np-select-input-options-container\"\n onAriaActiveDescendantChange={(value: React.AriaAttributes['aria-activedescendant']) => {\n if (controllerRef.current != null) {\n if (!initialRender && value != null) {\n controllerRef.current.setAttribute('aria-activedescendant', value);\n } else {\n controllerRef.current.removeAttribute('aria-activedescendant');\n }\n }\n }}\n >\n {filterable ? (\n <div className=\"np-select-input-query-container\">\n <SearchInput\n ref={searchInputRef}\n id={id}\n name={name}\n autoComplete={autocomplete}\n role=\"combobox\"\n shape=\"rectangle\"\n placeholder={filterPlaceholder}\n aria-label={filterPlaceholder}\n defaultValue={filterQuery}\n aria-autocomplete=\"list\"\n aria-expanded\n aria-controls={listboxId}\n aria-describedby={showStatus ? statusId : undefined}\n onKeyDown={(event) => {\n // Prevent interfering with the matcher of Headless UI\n // https://mathiasbynens.be/notes/javascript-unicode#regex\n if (/^.$/u.test(event.key)) {\n event.stopPropagation();\n }\n }}\n onChange={(event) => {\n // Free up resources and ensure not to go out of bounds when the\n // resulting item count is less than before\n const inputValue = event.currentTarget.value;\n\n // Free up resources and ensure not to go out of bounds\n setMountedIndexes([]);\n onFilterChange(inputValue);\n }}\n onInput={(event) => {\n const inputValue = event.currentTarget.value;\n const inputElement = event.currentTarget;\n\n if (autocomplete && onAutocompleteSelect && inputValue) {\n setTimeout(() => {\n if (inputElement.value === inputValue && inputValue.length > 2) {\n const matchedValue = findMatchingItem(inputValue);\n if (matchedValue !== null) {\n onAutocompleteSelect(matchedValue);\n }\n }\n }, 50);\n }\n }}\n />\n </div>\n ) : null}\n\n <section\n ref={listboxContainerRef}\n tabIndex={-1}\n className={clsx(\n 'np-select-input-listbox-container',\n virtualized && 'np-select-input-listbox-container--virtualized',\n needle == null && // Groups aren't shown when filtering\n items.some((item) => item.type === 'group') &&\n 'np-select-input-listbox-container--has-group',\n )}\n data-wds-parent={parentId ?? undefined}\n >\n {resultsEmpty ? (\n <div id={statusId} className=\"np-select-input-options-status\">\n <CrossCircle size={16} className=\"np-select-input-options-status-icon\" />\n {intl.formatMessage(messages.noResultsFound)}\n </div>\n ) : null}\n\n <div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-orientation=\"vertical\"\n aria-label={listBoxLabel}\n aria-labelledby={listBoxLabelledBy}\n tabIndex={0}\n className=\"np-select-input-listbox\"\n >\n {!virtualized ? (\n filteredItems.map((_, index) => getItemNode(index))\n ) : (\n <Virtualizer\n ref={virtualiserHandlerRef}\n key={needle}\n data={filteredItems}\n keepMounted={mountedIndexes}\n scrollRef={listboxRef} // `VList` doesn't expose this\n onScroll={async () => {\n if (!virtualiserHandlerRef.current) return;\n\n const startIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset,\n );\n const endIndex = virtualiserHandlerRef.current.findItemIndex(\n virtualiserHandlerRef.current.scrollOffset +\n virtualiserHandlerRef.current.viewportSize,\n );\n\n setMountedIndexes((prevMountedIndexes) => {\n const indexes = new Set(prevMountedIndexes);\n\n for (let index = startIndex; index <= endIndex; index += 1) {\n indexes.add(index);\n }\n\n return [...indexes].sort((a, b) => a - b);\n });\n }}\n >\n {(item, index) => (\n // The position of each item can't be inferred by browsers when\n // virtualizing, as some of the items may not be in the DOM\n <SelectInputItemsCountContext.Provider value={filteredItems.length}>\n <SelectInputItemPositionContext.Provider value={index + 1}>\n {getItemNode(index)}\n </SelectInputItemPositionContext.Provider>\n </SelectInputItemsCountContext.Provider>\n )}\n </Virtualizer>\n )}\n </div>\n\n {renderFooter != null ? (\n <footer className=\"np-select-input-footer\">\n <div\n role=\"none\"\n onKeyDown={(event) => {\n // Prevent interfering with Headless UI\n if (event.key !== 'Escape') {\n event.stopPropagation();\n }\n }}\n >\n {renderFooter({\n resultsEmpty,\n queryNormalized: needle,\n })}\n </div>\n </footer>\n ) : null}\n </section>\n </ListboxOptions>\n );\n}\n\ninterface SelectInputItemViewProps<\n T = string,\n I extends SelectInputItem<T | undefined> = SelectInputItem<T | undefined>,\n> extends Required<Pick<SelectInputProps<T>, 'renderValue'>> {\n item: I;\n needle: string | null | undefined;\n}\n\nfunction SelectInputItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputItemViewProps<T>) {\n switch (item.type) {\n case 'option': {\n if (\n item.value != null &&\n (needle == null || selectInputOptionItemIncludesNeedle(item, needle))\n ) {\n return (\n <SelectInputOption value={item.value} disabled={item.disabled}>\n {renderValue(item.value, false)}\n </SelectInputOption>\n );\n }\n break;\n }\n case 'group': {\n return <SelectInputGroupItemView item={item} renderValue={renderValue} needle={needle} />;\n }\n case 'separator': {\n if (needle == null) {\n return <hr className=\"np-select-input-separator-item\" />;\n }\n break;\n }\n }\n return null;\n}\n\ninterface SelectInputGroupItemViewProps<T = string> extends SelectInputItemViewProps<\n T,\n SelectInputGroupItem<T | undefined>\n> {}\n\nfunction SelectInputGroupItemView<T = string>({\n item,\n renderValue,\n needle,\n}: SelectInputGroupItemViewProps<T>) {\n const headerId = useId();\n\n const header = (\n <Header\n as=\"header\"\n role=\"none\"\n id={headerId}\n title={item.label}\n // @ts-expect-error when we migrate ActionButton to new Button this should be sorted\n action={\n item.action && {\n text: item.action.label,\n onClick: item.action.onClick,\n }\n }\n className=\"np-select-input-group-item-header p-x-1\"\n />\n );\n\n return (\n // An empty container may be rendered when no options match `needle`\n // However, pre-filtering would result in worse performance overall\n <Section\n as=\"section\"\n role=\"group\"\n aria-labelledby={headerId}\n className={clsx('m-y-0', needle === null && 'np-select-input-group-item--without-needle')}\n >\n {needle == null ? header : null}\n {item.options.map((option, index) => (\n <SelectInputItemView\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n item={option}\n renderValue={renderValue}\n needle={needle}\n />\n ))}\n </Section>\n );\n}\n\nconst SelectInputItemsCountContext = createContext<number | undefined>(undefined);\nconst SelectInputItemPositionContext = createContext<number | undefined>(undefined);\n\ninterface SelectInputOptionProps<T = string> {\n value: T;\n disabled?: boolean;\n children?: React.ReactNode;\n}\n\nfunction SelectInputOption<T = string>({ value, disabled, children }: SelectInputOptionProps<T>) {\n const itemsCount = useContext(SelectInputItemsCountContext);\n const itemPosition = useContext(SelectInputItemPositionContext);\n return (\n <ListboxOption\n as=\"div\"\n value={value}\n aria-setsize={itemsCount}\n aria-posinset={itemPosition}\n disabled={disabled}\n className={({ active, disabled: uiDisabled }) =>\n clsx(\n 'np-select-input-option-container np-text-body-large',\n active && 'np-select-input-option-container--active',\n uiDisabled && 'np-select-input-option-container--disabled',\n )\n }\n >\n {({ selected }) => (\n <>\n <div className=\"np-select-input-option\">{children}</div>\n <Check\n size={16}\n className={clsx(\n 'np-select-input-option-check',\n !selected && 'np-select-input-option-check--not-selected',\n )}\n />\n </>\n )}\n </ListboxOption>\n );\n}\n\nconst SelectInputOptionContentWithinTriggerContext = createContext(false);\n\nexport interface SelectInputOptionContentProps {\n title: string;\n note?: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport function SelectInputOptionContent({\n title,\n note,\n description,\n icon,\n}: SelectInputOptionContentProps) {\n const withinTrigger = useContext(SelectInputOptionContentWithinTriggerContext);\n\n return (\n <div\n className={clsx(\n 'np-select-input-option-content-container',\n (note || description) && 'np-text-body-large',\n )}\n >\n {icon ? (\n <div\n className={clsx(\n 'np-select-input-option-content-icon',\n !withinTrigger && 'np-select-input-option-content-icon--not-within-trigger',\n )}\n >\n {icon}\n </div>\n ) : null}\n\n <div className=\"np-select-input-option-content-text\">\n <div\n className={clsx(\n 'np-select-input-option-content-text-line-1',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n <div className=\"d-inline\">{title}</div>\n {note ? (\n <span className=\"np-select-input-option-content-text-secondary np-text-body-default\">\n {note}\n </span>\n ) : null}\n </div>\n\n {description ? (\n <div\n className={clsx(\n 'np-select-input-option-content-text-secondary np-text-body-default',\n withinTrigger && 'np-select-input-option-content-text-within-trigger',\n )}\n >\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["MAX_ITEMS_WITHOUT_VIRTUALIZATION","searchableString","value","trim","replace","normalize","toLowerCase","inferSearchableStrings","Object","values","filter","innerValue","map","dedupeSelectInputOptionItem","item","existingValues","compareValues","isDuplicate","Array","from","some","existingValue","has","add","undefined","dedupeSelectInputItems","items","Set","type","options","option","selectInputOptionItemIncludesNeedle","needle","filterMatchers","haystack","includes","filterSelectInputItems","predicate","sortSelectInputItems","compareFn","searchQuery","flattenedOption","flatMap","sort","a","b","defaultRenderTrigger","content","placeholderShown","clear","disabled","size","className","_jsx","InputGroup","addonEnd","_jsxs","clsx","children","_Fragment","SelectInputClearButton","onClick","event","preventDefault","ChevronDown","initialContentWidth","padding","SelectInputTriggerButton","as","ButtonInput","intl","useIntl","formatMessage","dateTriggerMessages","ariaLabel","Cross","noop","SelectInput","id","idProp","parentId","name","multiple","placeholder","autocomplete","defaultValue","controlledValue","renderValue","String","renderFooter","renderTrigger","filterable","filterPlaceholder","sortFilteredOptions","UNSAFE_triggerButtonProps","triggerRef","externalTriggerRef","onFilterChange","onChange","onOpen","onClose","onClear","inputAttributes","useInputAttributes","nonLabelable","open","setOpen","useState","initialized","useRef","handleClose","useEffectEvent","handleOpen","useEffect","current","filterQuery","_setFilterQuery","deferredFilterQuery","useDeferredValue","setFilterQuery","query","queryNormalized","internalTriggerRef","screenSm","useScreenSize","Breakpoint","SMALL","OptionsOverlay","Popover","BottomSheet","searchInputRef","listboxRef","controllerRef","getListBoxLabelProps","listBoxLabel","listBoxLabelledBy","ListboxBase","by","uiDisabled","isArray","length","placement","ref","getInteractionProps","SelectInputTriggerButtonPropsContext","Provider","node","mergeProps","prev","onKeyDown","key","SelectInputOptionContentWithinTriggerContext","join","focus","preventScroll","initialFocusRef","onCloseEnd","SelectInputOptions","onAutocompleteSelect","matchedValue","createContext","restProps","interactionProps","useContext","ListboxButton","PolymorphicWithOverrides","role","__overrides","SelectInputOptionsContainer","forwardRef","ariaOrientation","ariaActiveDescendant","tabIndex","onAriaActiveDescendantChange","handleAriaActiveDescendantChange","stopPropagation","compareValuesProp","virtualiserHandlerRef","initialRender","setInitialRender","useMemo","requestAnimationFrame","hasAttribute","dispatchEvent","KeyboardEvent","bubbles","filteredItems","filtered","resultsEmpty","virtualized","mountedIndexes","setMountedIndexes","prevMountedIndexes","indexes","listboxContainerRef","style","setProperty","offsetHeight","showStatus","statusId","useId","listboxId","getItemNode","index","SelectInputItemView","findMatchingItem","autocompleteValue","flatOptions","exactMatch","find","matcher","fuzzyMatch","ListboxOptions","modal","static","setAttribute","removeAttribute","SearchInput","autoComplete","shape","test","inputValue","currentTarget","onInput","inputElement","setTimeout","CrossCircle","messages","noResultsFound","_","Virtualizer","data","keepMounted","scrollRef","onScroll","startIndex","findItemIndex","scrollOffset","endIndex","viewportSize","SelectInputItemsCountContext","SelectInputItemPositionContext","SelectInputOption","SelectInputGroupItemView","headerId","header","Header","title","label","action","text","Section","itemsCount","itemPosition","ListboxOption","active","selected","Check","SelectInputOptionContent","note","description","icon","withinTrigger"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Listbox } from '@headlessui/react';
|
|
1
|
+
import { Listbox, ListboxOptions, ListboxButton, ListboxOption } from '@headlessui/react';
|
|
2
2
|
import { CrossCircle, ChevronDown, Cross, Check } from '@transferwise/icons';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
4
|
import mergeProps from 'merge-props';
|
|
@@ -367,7 +367,7 @@ function SelectInputTriggerButton({
|
|
|
367
367
|
onKeyDown,
|
|
368
368
|
...interactionProps
|
|
369
369
|
} = useContext(SelectInputTriggerButtonPropsContext);
|
|
370
|
-
return /*#__PURE__*/jsx(
|
|
370
|
+
return /*#__PURE__*/jsx(ListboxButton, {
|
|
371
371
|
ref: ref,
|
|
372
372
|
as: PolymorphicWithOverrides,
|
|
373
373
|
role: "combobox",
|
|
@@ -402,8 +402,12 @@ const SelectInputOptionsContainer = /*#__PURE__*/forwardRef(function SelectInput
|
|
|
402
402
|
if (event.key === 'Enter' && ariaActiveDescendant == null) {
|
|
403
403
|
return;
|
|
404
404
|
}
|
|
405
|
-
//
|
|
406
|
-
if (event.key === '
|
|
405
|
+
// Required to make ListBox focusable
|
|
406
|
+
if (event.key === 'Tab') {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
// Prevent absorbing Escape early
|
|
410
|
+
if (event.key === 'Escape') {
|
|
407
411
|
onKeyDown?.({
|
|
408
412
|
...event,
|
|
409
413
|
preventDefault: () => {},
|
|
@@ -534,7 +538,8 @@ function SelectInputOptions({
|
|
|
534
538
|
const fuzzyMatch = flatOptions.find(option => option.filterMatchers?.some(matcher => matcher.toLowerCase().includes(autocompleteValue.toLowerCase())));
|
|
535
539
|
return fuzzyMatch ? fuzzyMatch.value : null;
|
|
536
540
|
};
|
|
537
|
-
return /*#__PURE__*/jsxs(
|
|
541
|
+
return /*#__PURE__*/jsxs(ListboxOptions, {
|
|
542
|
+
modal: true,
|
|
538
543
|
as: SelectInputOptionsContainer,
|
|
539
544
|
static: true,
|
|
540
545
|
className: "np-select-input-options-container",
|
|
@@ -749,7 +754,7 @@ function SelectInputOption({
|
|
|
749
754
|
}) {
|
|
750
755
|
const itemsCount = useContext(SelectInputItemsCountContext);
|
|
751
756
|
const itemPosition = useContext(SelectInputItemPositionContext);
|
|
752
|
-
return /*#__PURE__*/jsx(
|
|
757
|
+
return /*#__PURE__*/jsx(ListboxOption, {
|
|
753
758
|
as: "div",
|
|
754
759
|
value: value,
|
|
755
760
|
"aria-setsize": itemsCount,
|