@react-md/core 1.0.0-next.8 → 1.0.0-next.9
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/.stylelintrc.json +14 -0
- package/.turbo/turbo-build.log +5 -5
- package/.turbo/turbo-lint.log +13 -0
- package/CHANGELOG.md +9 -0
- package/README.md +39 -24
- package/coverage/clover.xml +1013 -404
- package/coverage/coverage-final.json +9 -2
- package/coverage/lcov-report/AutoComplete.tsx.html +283 -0
- package/coverage/lcov-report/RootHtml.tsx.html +370 -0
- package/coverage/lcov-report/Select.tsx.html +1411 -0
- package/coverage/lcov-report/autocomplete/AutoComplete.tsx.html +283 -0
- package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +283 -0
- package/coverage/lcov-report/autocomplete/index.html +161 -0
- package/coverage/lcov-report/autocomplete/useAutoComplete.ts.html +775 -0
- package/coverage/lcov-report/autocomplete/useAutocomplete.ts.html +775 -0
- package/coverage/lcov-report/autocomplete/useInlineAutoComplete.ts.html +340 -0
- package/coverage/lcov-report/autocomplete/useInlineAutocomplete.ts.html +346 -0
- package/coverage/lcov-report/autocomplete/utils.ts.html +106 -0
- package/coverage/lcov-report/avatar/Avatar.tsx.html +162 -99
- package/coverage/lcov-report/avatar/index.html +19 -34
- package/coverage/lcov-report/avatar/styles.ts.html +1 -1
- package/coverage/lcov-report/button/Button.tsx.html +85 -85
- package/coverage/lcov-report/button/index.html +12 -12
- package/coverage/lcov-report/dialog/DialogFooter.tsx.html +36 -36
- package/coverage/lcov-report/dialog/DialogHeader.tsx.html +26 -26
- package/coverage/lcov-report/dialog/index.html +34 -19
- package/coverage/lcov-report/form/AutoComplete.tsx.html +283 -0
- package/coverage/lcov-report/form/Form.tsx.html +22 -22
- package/coverage/lcov-report/form/OptGroup.tsx.html +169 -166
- package/coverage/lcov-report/form/Option.tsx.html +727 -0
- package/coverage/lcov-report/form/Select.tsx.html +962 -1112
- package/coverage/lcov-report/form/SelectOriginal.tsx.html +1630 -0
- package/coverage/lcov-report/form/SelectV2.tsx.html +1024 -0
- package/coverage/lcov-report/form/SelectedOption.tsx.html +250 -0
- package/coverage/lcov-report/form/index.html +57 -12
- package/coverage/lcov-report/form/selectUtils.ts.html +188 -221
- package/coverage/lcov-report/form/useAutoComplete.ts.html +787 -0
- package/coverage/lcov-report/form/useCombobox.ts.html +454 -460
- package/coverage/lcov-report/form/useComboboxList.ts.html +108 -93
- package/coverage/lcov-report/form/useFormReset.ts.html +229 -0
- package/coverage/lcov-report/form/useInlineAutoComplete.ts.html +379 -0
- package/coverage/lcov-report/form/useSelectCombobox.ts.html +499 -0
- package/coverage/lcov-report/form/utils.ts.html +209 -170
- package/coverage/lcov-report/icon/FontIcon.tsx.html +28 -28
- package/coverage/lcov-report/icon/MaterialIcon.tsx.html +235 -0
- package/coverage/lcov-report/icon/index.html +1 -1
- package/coverage/lcov-report/index.html +36 -21
- package/coverage/lcov-report/media-queries/appSize.ts.html +1 -1
- package/coverage/lcov-report/media-queries/index.html +1 -1
- package/coverage/lcov-report/menu/DropdownMenu.tsx.html +188 -188
- package/coverage/lcov-report/menu/Menu.tsx.html +271 -265
- package/coverage/lcov-report/menu/MenuItem.tsx.html +292 -0
- package/coverage/lcov-report/menu/MenuVisibilityProvider.tsx.html +48 -33
- package/coverage/lcov-report/menu/index.html +45 -15
- package/coverage/lcov-report/menu/useContextMenu.ts.html +490 -0
- package/coverage/lcov-report/movement/index.html +19 -19
- package/coverage/lcov-report/movement/useKeyboardMovementProvider.ts.html +422 -383
- package/coverage/lcov-report/positioning/constants.ts.html +463 -0
- package/coverage/lcov-report/positioning/index.html +30 -30
- package/coverage/lcov-report/positioning/useFixedPositioning.ts.html +1321 -0
- package/coverage/lcov-report/progress/CircularProgress.tsx.html +184 -184
- package/coverage/lcov-report/progress/index.html +19 -34
- package/coverage/lcov-report/searching/caseInsensitive.ts.html +685 -0
- package/coverage/lcov-report/searching/fuzzy.ts.html +610 -0
- package/coverage/lcov-report/searching/index.html +161 -0
- package/coverage/lcov-report/searching/toSearchQuery.ts.html +139 -0
- package/coverage/lcov-report/searching/utils.ts.html +247 -0
- package/coverage/lcov-report/src/CoreProviders.tsx.html +20 -20
- package/coverage/lcov-report/src/NoSsr.tsx.html +1 -1
- package/coverage/lcov-report/src/RootHtml.tsx.html +370 -0
- package/coverage/lcov-report/src/SsrProvider.tsx.html +10 -10
- package/coverage/lcov-report/src/app-bar/AppBar.tsx.html +1 -1
- package/coverage/lcov-report/src/app-bar/AppBarTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/app-bar/index.html +1 -1
- package/coverage/lcov-report/src/avatar/Avatar.tsx.html +1 -1
- package/coverage/lcov-report/src/avatar/index.html +1 -1
- package/coverage/lcov-report/src/avatar/styles.ts.html +1 -1
- package/coverage/lcov-report/src/badge/Badge.tsx.html +1 -1
- package/coverage/lcov-report/src/badge/index.html +1 -1
- package/coverage/lcov-report/src/box/Box.tsx.html +1 -1
- package/coverage/lcov-report/src/box/index.html +1 -1
- package/coverage/lcov-report/src/box/styles.ts.html +1 -1
- package/coverage/lcov-report/src/button/AsyncButton.tsx.html +1 -1
- package/coverage/lcov-report/src/button/Button.tsx.html +1 -1
- package/coverage/lcov-report/src/button/ButtonUnstyled.tsx.html +1 -1
- package/coverage/lcov-report/src/button/FloatingActionButton.tsx.html +1 -1
- package/coverage/lcov-report/src/button/TooltippedButton.tsx.html +1 -1
- package/coverage/lcov-report/src/button/buttonStyles.ts.html +1 -1
- package/coverage/lcov-report/src/button/buttonUnstyledStyles.ts.html +1 -1
- package/coverage/lcov-report/src/button/index.html +1 -1
- package/coverage/lcov-report/src/card/Card.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardContent.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardFooter.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardSubtitle.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/card/ClickableCard.tsx.html +1 -1
- package/coverage/lcov-report/src/card/index.html +1 -1
- package/coverage/lcov-report/src/card/styles.ts.html +1 -1
- package/coverage/lcov-report/src/chip/Chip.tsx.html +1 -1
- package/coverage/lcov-report/src/chip/index.html +1 -1
- package/coverage/lcov-report/src/chip/styles.ts.html +1 -1
- package/coverage/lcov-report/src/cssUtils.ts.html +53 -53
- package/coverage/lcov-report/src/delegateEvent.ts.html +1 -1
- package/coverage/lcov-report/src/dialog/Dialog.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogContent.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogFooter.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/FixedDialog.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/NestedDialogProvider.ts.html +1 -1
- package/coverage/lcov-report/src/dialog/index.html +1 -1
- package/coverage/lcov-report/src/dialog/styles.ts.html +1 -1
- package/coverage/lcov-report/src/divider/Divider.tsx.html +1 -1
- package/coverage/lcov-report/src/divider/index.html +1 -1
- package/coverage/lcov-report/src/divider/styles.ts.html +1 -1
- package/coverage/lcov-report/src/draggable/index.html +1 -1
- package/coverage/lcov-report/src/draggable/useDraggable.ts.html +1 -1
- package/coverage/lcov-report/src/draggable/utils.ts.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/ExpansionList.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/ExpansionPanel.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/ExpansionPanelHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/index.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/useExpansionList.ts.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/useExpansionPanels.ts.html +1 -1
- package/coverage/lcov-report/src/focus/index.html +1 -1
- package/coverage/lcov-report/src/focus/useFocusContainer.ts.html +1 -1
- package/coverage/lcov-report/src/focus/utils.ts.html +1 -1
- package/coverage/lcov-report/src/form/AutoComplete.tsx.html +283 -0
- package/coverage/lcov-report/src/form/Checkbox.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Fieldset.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FileInput.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Form.tsx.html +11 -8
- package/coverage/lcov-report/src/form/FormMessage.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FormMessageContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FormMessageCounter.tsx.html +1 -1
- package/coverage/lcov-report/src/form/InputToggle.tsx.html +1 -1
- package/coverage/lcov-report/src/form/InputToggleIcon.tsx.html +56 -56
- package/coverage/lcov-report/src/form/Label.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Legend.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemCheckbox.tsx.html +3 -3
- package/coverage/lcov-report/src/form/MenuItemFileInput.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemInputToggle.tsx.html +178 -232
- package/coverage/lcov-report/src/form/MenuItemRadio.tsx.html +3 -3
- package/coverage/lcov-report/src/form/MenuItemSwitch.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemTextField.tsx.html +1 -1
- package/coverage/lcov-report/src/form/NativeSelect.tsx.html +1 -1
- package/coverage/lcov-report/src/form/OptGroup.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Option.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Password.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Radio.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Select.tsx.html +894 -1146
- package/coverage/lcov-report/src/form/SelectValue.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Slider.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderMark.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderMarkLabel.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderThumb.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderTrack.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderValueMarks.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderValueTooltip.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Switch.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SwitchTrack.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextArea.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextField.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldAddon.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldContainerStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/fileUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/formConfig.ts.html +1 -1
- package/coverage/lcov-report/src/form/formMessageStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/index.html +30 -900
- package/coverage/lcov-report/src/form/inputToggleStyles.ts.html +30 -30
- package/coverage/lcov-report/src/form/menuItemInputToggleStyles.ts.html +319 -0
- package/coverage/lcov-report/src/form/nativeSelectStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/optionStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/passwordStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/selectStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/selectUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/sliderUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/switchStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/textAreaStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/textFieldStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/useAutoComplete.ts.html +787 -0
- package/coverage/lcov-report/src/form/useCheckboxGroup.ts.html +1 -1
- package/coverage/lcov-report/src/form/useCombobox.ts.html +943 -457
- package/coverage/lcov-report/src/form/useEditableCombobox.ts.html +502 -0
- package/coverage/lcov-report/src/form/useFileUpload.ts.html +1 -1
- package/coverage/lcov-report/src/form/useInlineAutoComplete.ts.html +109 -0
- package/coverage/lcov-report/src/form/useListboxProvider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useNumberField.ts.html +1 -1
- package/coverage/lcov-report/src/form/useRadioGroup.ts.html +1 -1
- package/coverage/lcov-report/src/form/useRangeSlider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useResizingTextArea.ts.html +1 -1
- package/coverage/lcov-report/src/form/useSelectCombobox.ts.html +295 -0
- package/coverage/lcov-report/src/form/useSlider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useTextField.ts.html +1 -1
- package/coverage/lcov-report/src/form/utils.ts.html +200 -170
- package/coverage/lcov-report/src/form/validation.ts.html +1 -1
- package/coverage/lcov-report/src/hoverMode/index.html +1 -1
- package/coverage/lcov-report/src/hoverMode/useHoverMode.ts.html +1 -1
- package/coverage/lcov-report/src/hoverMode/useHoverModeProvider.ts.html +1 -1
- package/coverage/lcov-report/src/icon/FontIcon.tsx.html +28 -28
- package/coverage/lcov-report/src/icon/IconRotator.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/MaterialIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/MaterialSymbol.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/SVGIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/TextIconSpacing.tsx.html +51 -51
- package/coverage/lcov-report/src/icon/iconConfig.tsx.html +10 -10
- package/coverage/lcov-report/src/icon/index.html +1 -1
- package/coverage/lcov-report/src/icon/material.ts.html +1 -1
- package/coverage/lcov-report/src/icon/materialConfig.ts.html +1 -1
- package/coverage/lcov-report/src/icon/styles.ts.html +38 -38
- package/coverage/lcov-report/src/index.html +9 -354
- package/coverage/lcov-report/src/interaction/Ripple.tsx.html +1 -1
- package/coverage/lcov-report/src/interaction/RippleContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/interaction/UserInteractionModeProvider.tsx.html +87 -87
- package/coverage/lcov-report/src/interaction/config.ts.html +7 -7
- package/coverage/lcov-report/src/interaction/index.html +1 -1
- package/coverage/lcov-report/src/interaction/useElementInteraction.tsx.html +83 -83
- package/coverage/lcov-report/src/interaction/useHigherContrastChildren.tsx.html +7 -7
- package/coverage/lcov-report/src/interaction/utils.ts.html +1 -1
- package/coverage/lcov-report/src/layout/LayoutAppBar.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/LayoutNav.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/LayoutWindowSplitter.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/Main.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/index.html +1 -1
- package/coverage/lcov-report/src/layout/layoutNavStyles.ts.html +1 -1
- package/coverage/lcov-report/src/layout/layoutWindowSplitterStyles.ts.html +1 -1
- package/coverage/lcov-report/src/layout/mainStyles.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useExpandableLayout.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useHorizontalLayoutTransition.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useLayoutAppBarHeight.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useLayoutTree.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useLayoutWindowSplitter.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useMainTabIndex.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useResizableLayout.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useTemporaryLayout.ts.html +1 -1
- package/coverage/lcov-report/src/link/Link.tsx.html +1 -1
- package/coverage/lcov-report/src/link/SkipToMainContent.tsx.html +1 -1
- package/coverage/lcov-report/src/link/index.html +1 -1
- package/coverage/lcov-report/src/link/styles.ts.html +1 -1
- package/coverage/lcov-report/src/list/List.tsx.html +30 -30
- package/coverage/lcov-report/src/list/ListItem.tsx.html +124 -124
- package/coverage/lcov-report/src/list/ListItemAddon.tsx.html +35 -35
- package/coverage/lcov-report/src/list/ListItemChildren.tsx.html +79 -79
- package/coverage/lcov-report/src/list/ListItemLink.tsx.html +2 -2
- package/coverage/lcov-report/src/list/ListItemText.tsx.html +35 -35
- package/coverage/lcov-report/src/list/ListSubheader.tsx.html +1 -1
- package/coverage/lcov-report/src/list/getListItemHeight.ts.html +44 -47
- package/coverage/lcov-report/src/list/index.html +5 -5
- package/coverage/lcov-report/src/list/listItemStyles.ts.html +65 -65
- package/coverage/lcov-report/src/media-queries/AppSizeProvider.tsx.html +49 -49
- package/coverage/lcov-report/src/media-queries/appSize.ts.html +1 -1
- package/coverage/lcov-report/src/media-queries/index.html +1 -1
- package/coverage/lcov-report/src/media-queries/useMediaQuery.ts.html +24 -24
- package/coverage/lcov-report/src/menu/DropdownMenu.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/Menu.tsx.html +3 -3
- package/coverage/lcov-report/src/menu/MenuBar.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuButton.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuConfigurationProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItem.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemButton.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemGroup.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemSeparator.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuSheet.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuVisibilityProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuWidget.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuWidgetKeyboardProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/index.html +1 -1
- package/coverage/lcov-report/src/menu/useContextMenu.ts.html +1 -1
- package/coverage/lcov-report/src/menu/useMenuBarProvider.ts.html +1 -1
- package/coverage/lcov-report/src/menu/utils.ts.html +1 -1
- package/coverage/lcov-report/src/movement/constants.ts.html +1 -1
- package/coverage/lcov-report/src/movement/findMatchIndex.ts.html +1 -1
- package/coverage/lcov-report/src/movement/index.html +17 -62
- package/coverage/lcov-report/src/movement/useKeyboardMovementProvider.ts.html +1 -1
- package/coverage/lcov-report/src/movement/utils.ts.html +143 -119
- package/coverage/lcov-report/src/overlay/Overlay.tsx.html +1 -1
- package/coverage/lcov-report/src/overlay/index.html +1 -1
- package/coverage/lcov-report/src/overlay/overlayStyles.ts.html +1 -1
- package/coverage/lcov-report/src/portal/Portal.tsx.html +1 -1
- package/coverage/lcov-report/src/portal/PortalContainerProvider.tsx.html +36 -36
- package/coverage/lcov-report/src/portal/index.html +1 -1
- package/coverage/lcov-report/src/positioning/constants.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/createHorizontalPosition.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/createVerticalPosition.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/getFixedPosition.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/index.html +1 -1
- package/coverage/lcov-report/src/positioning/useFixedPositioning.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/utils.ts.html +1 -1
- package/coverage/lcov-report/src/progress/CircularProgress.tsx.html +81 -81
- package/coverage/lcov-report/src/progress/LinearProgress.tsx.html +1 -1
- package/coverage/lcov-report/src/progress/getProgressA11y.ts.html +1 -1
- package/coverage/lcov-report/src/progress/index.html +1 -1
- package/coverage/lcov-report/src/responsive-item/ResponsiveItemContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/responsive-item/ResponsiveItemOverlay.tsx.html +1 -1
- package/coverage/lcov-report/src/responsive-item/index.html +1 -1
- package/coverage/lcov-report/src/responsive-item/styles.ts.html +1 -1
- package/coverage/lcov-report/src/scroll/ScrollLock.tsx.html +1 -1
- package/coverage/lcov-report/src/scroll/getScrollbarWidth.ts.html +1 -1
- package/coverage/lcov-report/src/scroll/index.html +1 -1
- package/coverage/lcov-report/src/scroll/useScrollLock.ts.html +1 -1
- package/coverage/lcov-report/src/segmented-button/SegmentedButton.tsx.html +1 -1
- package/coverage/lcov-report/src/segmented-button/SegmentedButtonContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/segmented-button/index.html +1 -1
- package/coverage/lcov-report/src/segmented-button/segmentedButtonContainerStyles.ts.html +1 -1
- package/coverage/lcov-report/src/segmented-button/segmentedButtonStyles.ts.html +1 -1
- package/coverage/lcov-report/src/sheet/Sheet.tsx.html +1 -1
- package/coverage/lcov-report/src/sheet/index.html +1 -1
- package/coverage/lcov-report/src/sheet/styles.ts.html +1 -1
- package/coverage/lcov-report/src/snackbar/DefaultToastRenderer.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/Snackbar.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/Toast.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastActionButton.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastCloseButton.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastContent.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastManager.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastManagerProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/index.html +1 -1
- package/coverage/lcov-report/src/snackbar/snackbarStyles.ts.html +1 -1
- package/coverage/lcov-report/src/snackbar/toastContentStyles.ts.html +1 -1
- package/coverage/lcov-report/src/snackbar/toastStyles.ts.html +1 -1
- package/coverage/lcov-report/src/snackbar/useCurrentToastActions.ts.html +1 -1
- package/coverage/lcov-report/src/suspense/CircularProgressSuspense.tsx.html +142 -142
- package/coverage/lcov-report/src/suspense/NullSuspense.tsx.html +88 -88
- package/coverage/lcov-report/src/suspense/index.html +32 -32
- package/coverage/lcov-report/src/table/Table.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableBody.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableCell.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableCellContent.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableCheckbox.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableConfigurationProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableContainerProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableFooter.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableRadio.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableRow.tsx.html +1 -1
- package/coverage/lcov-report/src/table/index.html +1 -1
- package/coverage/lcov-report/src/table/tableCellStyles.ts.html +1 -1
- package/coverage/lcov-report/src/table/tableContainerStyles.ts.html +1 -1
- package/coverage/lcov-report/src/table/tableFooterStyles.ts.html +1 -1
- package/coverage/lcov-report/src/table/tableHeaderStyles.ts.html +1 -1
- package/coverage/lcov-report/src/table/tableRowStyles.ts.html +1 -1
- package/coverage/lcov-report/src/table/tableStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/Tab.tsx.html +1 -1
- package/coverage/lcov-report/src/tabs/TabList.tsx.html +1 -1
- package/coverage/lcov-report/src/tabs/TabListScrollButton.tsx.html +1 -1
- package/coverage/lcov-report/src/tabs/index.html +1 -1
- package/coverage/lcov-report/src/tabs/tabIndicatorStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/tabListScrollButtonStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/tabListStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/tabStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/useTabList.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/useTabs.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/utils.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/IntersectionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/ResizeObserver.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/data-testid.ts.html +18 -6
- package/coverage/lcov-report/src/test-utils/drag.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/index.html +7 -7
- package/coverage/lcov-report/src/test-utils/jest-setup.ts.html +9 -9
- package/coverage/lcov-report/src/test-utils/matchMedia.ts.html +4 -4
- package/coverage/lcov-report/src/test-utils/polyfills/IntersectionObserver.ts.html +4 -4
- package/coverage/lcov-report/src/test-utils/polyfills/ResizeObserver.ts.html +3 -3
- package/coverage/lcov-report/src/test-utils/polyfills/TextDecoder.ts.html +106 -0
- package/coverage/lcov-report/src/test-utils/polyfills/TextEncoder.ts.html +100 -0
- package/coverage/lcov-report/src/test-utils/polyfills/index.html +1 -1
- package/coverage/lcov-report/src/test-utils/polyfills/matchMedia.ts.html +6 -6
- package/coverage/lcov-report/src/test-utils/polyfills/offsetParent.ts.html +14 -14
- package/coverage/lcov-report/src/test-utils/polyfills/scrollIntoView.ts.html +5 -5
- package/coverage/lcov-report/src/test-utils/render.tsx.html +21 -21
- package/coverage/lcov-report/src/test-utils/root-html-environment.ts.html +85 -0
- package/coverage/lcov-report/src/test-utils/timers.ts.html +1 -1
- package/coverage/lcov-report/src/theme/LocalStorageColorSchemeProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/theme/ThemeProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/theme/colors.ts.html +1 -1
- package/coverage/lcov-report/src/theme/cssVars.ts.html +1 -1
- package/coverage/lcov-report/src/theme/index.html +1 -1
- package/coverage/lcov-report/src/theme/useCSSVariables.ts.html +1 -1
- package/coverage/lcov-report/src/theme/useColorScheme.ts.html +1 -1
- package/coverage/lcov-report/src/theme/useColorSchemeMetaTag.ts.html +1 -1
- package/coverage/lcov-report/src/theme/useColorSchemeProvider.ts.html +1 -1
- package/coverage/lcov-report/src/theme/usePrefersColorScheme.ts.html +1 -1
- package/coverage/lcov-report/src/theme/utils.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/Tooltip.tsx.html +1 -1
- package/coverage/lcov-report/src/tooltip/TooltipHoverModeProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/tooltip/constants.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/index.html +1 -1
- package/coverage/lcov-report/src/tooltip/tooltipStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/useTooltip.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/useTooltipPosition.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/utils.ts.html +1 -1
- package/coverage/lcov-report/src/transition/CSSTransition.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/Collapse.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/CrossFade.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/ScaleTransition.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/SkeletonPlaceholder.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/Slide.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/SlideContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/collapseStyles.ts.html +13 -13
- package/coverage/lcov-report/src/transition/config.ts.html +3 -3
- package/coverage/lcov-report/src/transition/index.html +7 -7
- package/coverage/lcov-report/src/transition/maxWidthTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/skeletonPlaceholderUtils.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useCSSTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useCarousel.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useCollapseTransition.ts.html +96 -150
- package/coverage/lcov-report/src/transition/useCrossFadeTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useMaxWidthTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useScaleTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useSkeletonPlaceholder.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useSlideTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useTransition.ts.html +152 -152
- package/coverage/lcov-report/src/transition/utils.ts.html +14 -14
- package/coverage/lcov-report/src/tree/DefaultTreeItemRenderer.tsx.html +1 -1
- package/coverage/lcov-report/src/tree/Tree.tsx.html +1 -1
- package/coverage/lcov-report/src/tree/TreeGroup.tsx.html +45 -45
- package/coverage/lcov-report/src/tree/TreeItem.tsx.html +1 -1
- package/coverage/lcov-report/src/tree/TreeItemExpander.tsx.html +1 -1
- package/coverage/lcov-report/src/tree/TreeProvider.tsx.html +8 -8
- package/coverage/lcov-report/src/tree/index.html +1 -1
- package/coverage/lcov-report/src/tree/styles.ts.html +5 -5
- package/coverage/lcov-report/src/tree/useTree.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeExpansion.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeItems.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeMovement.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeSelection.ts.html +1 -1
- package/coverage/lcov-report/src/tree/utils.ts.html +1 -1
- package/coverage/lcov-report/src/typography/SrOnly.tsx.html +12 -12
- package/coverage/lcov-report/src/typography/TextContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/Typography.tsx.html +94 -94
- package/coverage/lcov-report/src/typography/WritingDirectionProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/index.html +1 -1
- package/coverage/lcov-report/src/useAsyncAction.ts.html +1 -1
- package/coverage/lcov-report/src/useDebouncedFunction.ts.html +1 -1
- package/coverage/lcov-report/src/useDropzone.ts.html +1 -1
- package/coverage/lcov-report/src/useElementSize.ts.html +1 -1
- package/coverage/lcov-report/src/useEnsuredId.ts.html +8 -8
- package/coverage/lcov-report/src/useEnsuredRef.ts.html +11 -11
- package/coverage/lcov-report/src/useEnsuredState.ts.html +16 -16
- package/coverage/lcov-report/src/useHtmlClassName.ts.html +1 -1
- package/coverage/lcov-report/src/useIntersectionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/useIsomorphicLayoutEffect.ts.html +1 -1
- package/coverage/lcov-report/src/useLocalStorage.ts.html +1 -1
- package/coverage/lcov-report/src/useOrientation.ts.html +32 -32
- package/coverage/lcov-report/src/usePageInactive.ts.html +1 -1
- package/coverage/lcov-report/src/useResizeListener.ts.html +1 -1
- package/coverage/lcov-report/src/useResizeObserver.ts.html +23 -23
- package/coverage/lcov-report/src/useThrottledFunction.ts.html +1 -1
- package/coverage/lcov-report/src/useToggle.ts.html +1 -1
- package/coverage/lcov-report/src/useUnmounted.ts.html +1 -1
- package/coverage/lcov-report/src/useWindowSize.ts.html +1 -1
- package/coverage/lcov-report/src/utils/RenderRecursively.tsx.html +1 -1
- package/coverage/lcov-report/src/utils/alphaNumericSort.ts.html +1 -1
- package/coverage/lcov-report/src/utils/applyRef.ts.html +1 -1
- package/coverage/lcov-report/src/utils/bem.ts.html +50 -50
- package/coverage/lcov-report/src/utils/filters.ts.html +357 -84
- package/coverage/lcov-report/src/utils/getClientPosition.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getMiddleOfRange.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getPercentage.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getRangeDefaultValue.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getRangeSteps.ts.html +1 -1
- package/coverage/lcov-report/src/utils/identity.ts.html +1 -1
- package/coverage/lcov-report/src/utils/index.html +13 -268
- package/coverage/lcov-report/src/utils/isElementVisible.ts.html +1 -1
- package/coverage/lcov-report/src/utils/loop.ts.html +1 -1
- package/coverage/lcov-report/src/utils/nearest.ts.html +1 -1
- package/coverage/lcov-report/src/utils/parseCssLengthUnit.ts.html +1 -1
- package/coverage/lcov-report/src/utils/randomInt.ts.html +1 -1
- package/coverage/lcov-report/src/utils/wait.ts.html +1 -1
- package/coverage/lcov-report/src/utils/withinRange.ts.html +1 -1
- package/coverage/lcov-report/src/window-splitter/WindowSplitter.tsx.html +1 -1
- package/coverage/lcov-report/src/window-splitter/index.html +1 -1
- package/coverage/lcov-report/src/window-splitter/useWindowSplitter.ts.html +1 -1
- package/coverage/lcov-report/transition/config.ts.html +5 -5
- package/coverage/lcov-report/transition/index.html +1 -1
- package/coverage/lcov-report/transition/useScaleTransition.ts.html +535 -0
- package/coverage/lcov-report/useAutoComplete.ts.html +787 -0
- package/coverage/lcov-report/useCollapseTransition.ts.html +166 -211
- package/coverage/lcov-report/useCombobox.ts.html +1513 -0
- package/coverage/lcov-report/useInlineAutoComplete.ts.html +379 -0
- package/coverage/lcov-report/useSelectCombobox.ts.html +295 -0
- package/coverage/lcov-report/utils/alphaNumericSort.ts.html +11 -50
- package/coverage/lcov-report/utils/filters.ts.html +1056 -201
- package/coverage/lcov-report/utils/index.html +10 -10
- package/coverage/lcov-report/utils/searching.ts.html +85 -0
- package/coverage/lcov-report/utils.ts.html +109 -277
- package/coverage/lcov.info +928 -259
- package/dist/RootHtml.d.ts +62 -0
- package/dist/RootHtml.js +49 -0
- package/dist/RootHtml.js.map +1 -0
- package/dist/avatar/Avatar.d.ts +14 -0
- package/dist/avatar/Avatar.js +5 -2
- package/dist/avatar/Avatar.js.map +1 -1
- package/dist/dialog/FixedDialog.d.ts +5 -4
- package/dist/dialog/FixedDialog.js +5 -4
- package/dist/dialog/FixedDialog.js.map +1 -1
- package/dist/form/NativeSelect.d.ts +5 -2
- package/dist/form/NativeSelect.js.map +1 -1
- package/dist/form/Option.js +3 -2
- package/dist/form/Option.js.map +1 -1
- package/dist/form/Select.d.ts +105 -15
- package/dist/form/Select.js +160 -249
- package/dist/form/Select.js.map +1 -1
- package/dist/form/SelectedOption.d.ts +21 -0
- package/dist/form/SelectedOption.js +37 -0
- package/dist/form/SelectedOption.js.map +1 -0
- package/dist/form/TextField.d.ts +2 -2
- package/dist/form/TextField.js.map +1 -1
- package/dist/form/_form.scss +8 -13
- package/dist/form/selectUtils.d.ts +1 -3
- package/dist/form/selectUtils.js +2 -10
- package/dist/form/selectUtils.js.map +1 -1
- package/dist/form/types.d.ts +6 -6
- package/dist/form/types.js.map +1 -1
- package/dist/form/useCombobox.d.ts +157 -0
- package/dist/form/useCombobox.js +206 -0
- package/dist/form/useCombobox.js.map +1 -0
- package/dist/form/useEditableCombobox.d.ts +15 -0
- package/dist/form/useEditableCombobox.js +101 -0
- package/dist/form/useEditableCombobox.js.map +1 -0
- package/dist/form/useFormReset.d.ts +16 -0
- package/dist/form/useFormReset.js +32 -0
- package/dist/form/useFormReset.js.map +1 -0
- package/dist/form/useListboxProvider.d.ts +1 -0
- package/dist/form/useListboxProvider.js +1 -0
- package/dist/form/useListboxProvider.js.map +1 -1
- package/dist/form/useSelectCombobox.d.ts +17 -0
- package/dist/form/useSelectCombobox.js +36 -0
- package/dist/form/useSelectCombobox.js.map +1 -0
- package/dist/form/utils.d.ts +11 -1
- package/dist/form/utils.js +6 -0
- package/dist/form/utils.js.map +1 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/menu/Menu.js +12 -1
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/useContextMenu.d.ts +3 -3
- package/dist/menu/useContextMenu.js +3 -3
- package/dist/menu/useContextMenu.js.map +1 -1
- package/dist/movement/types.d.ts +40 -21
- package/dist/movement/types.js.map +1 -1
- package/dist/movement/useKeyboardMovementProvider.js +15 -4
- package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
- package/dist/movement/utils.d.ts +7 -2
- package/dist/movement/utils.js +10 -0
- package/dist/movement/utils.js.map +1 -1
- package/dist/positioning/useFixedPositioning.js +0 -8
- package/dist/positioning/useFixedPositioning.js.map +1 -1
- package/dist/searching/caseInsensitive.d.ts +150 -0
- package/dist/searching/caseInsensitive.js +30 -0
- package/dist/searching/caseInsensitive.js.map +1 -0
- package/dist/searching/fuzzy.d.ts +128 -0
- package/dist/searching/fuzzy.js +54 -0
- package/dist/searching/fuzzy.js.map +1 -0
- package/dist/searching/toSearchQuery.d.ts +5 -0
- package/dist/searching/toSearchQuery.js +13 -0
- package/dist/searching/toSearchQuery.js.map +1 -0
- package/dist/searching/types.d.ts +28 -0
- package/dist/searching/types.js +5 -0
- package/dist/searching/types.js.map +1 -0
- package/dist/searching/utils.d.ts +21 -0
- package/dist/searching/utils.js +28 -0
- package/dist/searching/utils.js.map +1 -0
- package/dist/test-utils/IntersectionObserver.d.ts +12 -0
- package/dist/test-utils/ResizeObserver.d.ts +172 -0
- package/dist/test-utils/data-testid.d.ts +7 -0
- package/dist/test-utils/data-testid.js +1 -0
- package/dist/test-utils/data-testid.js.map +1 -1
- package/dist/test-utils/drag.d.ts +26 -0
- package/dist/test-utils/index.d.ts +7 -0
- package/dist/test-utils/jest-setup.d.ts +1 -0
- package/dist/test-utils/matchMedia.d.ts +101 -0
- package/dist/test-utils/polyfills/IntersectionObserver.d.ts +1 -0
- package/dist/test-utils/polyfills/ResizeObserver.d.ts +1 -0
- package/dist/test-utils/polyfills/TextDecoder.d.ts +1 -0
- package/dist/test-utils/polyfills/TextDecoder.js +8 -0
- package/dist/test-utils/polyfills/TextDecoder.js.map +1 -0
- package/dist/test-utils/polyfills/TextEncoder.d.ts +1 -0
- package/dist/test-utils/polyfills/TextEncoder.js +6 -0
- package/dist/test-utils/polyfills/TextEncoder.js.map +1 -0
- package/dist/test-utils/polyfills/index.d.ts +7 -0
- package/dist/test-utils/polyfills/index.js +2 -0
- package/dist/test-utils/polyfills/index.js.map +1 -1
- package/dist/test-utils/polyfills/matchMedia.d.ts +1 -0
- package/dist/test-utils/polyfills/offsetParent.d.ts +1 -0
- package/dist/test-utils/polyfills/scrollIntoView.d.ts +1 -0
- package/dist/test-utils/render.d.ts +13 -0
- package/dist/test-utils/timers.d.ts +39 -0
- package/dist/transition/useCollapseTransition.d.ts +3 -18
- package/dist/transition/useCollapseTransition.js +1 -10
- package/dist/transition/useCollapseTransition.js.map +1 -1
- package/dist/transition/utils.js +7 -2
- package/dist/transition/utils.js.map +1 -1
- package/dist/useEnsuredState.d.ts +1 -1
- package/dist/useEnsuredState.js.map +1 -1
- package/dist/utils/alphaNumericSort.d.ts +1 -1
- package/dist/utils/alphaNumericSort.js +2 -10
- package/dist/utils/alphaNumericSort.js.map +1 -1
- package/jest.config.ts +4 -0
- package/package.json +14 -13
- package/src/RootHtml.tsx +95 -0
- package/src/__tests__/RootHtml.node.tsx +46 -0
- package/src/__tests__/__snapshots__/RootHtml.node.tsx.snap +19 -0
- package/src/avatar/Avatar.tsx +24 -3
- package/src/avatar/__tests__/Avatar.tsx +1 -1
- package/src/avatar/__tests__/__snapshots__/Avatar.tsx.snap +6 -6
- package/src/dialog/FixedDialog.tsx +5 -4
- package/src/form/NativeSelect.tsx +6 -3
- package/src/form/Option.tsx +8 -2
- package/src/form/Select.tsx +251 -335
- package/src/form/SelectedOption.tsx +55 -0
- package/src/form/TextField.tsx +2 -2
- package/src/form/__tests__/Select.tsx +439 -0
- package/src/form/__tests__/__snapshots__/Select.tsx.snap +492 -0
- package/src/form/__tests__/useFormReset.tsx +195 -0
- package/src/form/_form.scss +8 -13
- package/src/form/selectUtils.ts +3 -14
- package/src/form/types.ts +6 -6
- package/src/form/useCombobox.ts +523 -0
- package/src/form/useEditableCombobox.ts +139 -0
- package/src/form/useFormReset.ts +48 -0
- package/src/form/useListboxProvider.ts +2 -0
- package/src/form/useSelectCombobox.ts +70 -0
- package/src/form/utils.ts +17 -4
- package/src/index.ts +14 -1
- package/src/menu/Menu.tsx +9 -1
- package/src/menu/__tests__/__snapshots__/useContextMenu.tsx.snap +54 -0
- package/src/menu/__tests__/useContextMenu.tsx +41 -0
- package/src/menu/useContextMenu.ts +3 -3
- package/src/movement/types.ts +50 -25
- package/src/movement/useKeyboardMovementProvider.ts +21 -8
- package/src/movement/utils.ts +12 -2
- package/src/positioning/__tests__/__snapshots__/useFixedPositioning.tsx.snap +0 -32
- package/src/positioning/__tests__/useFixedPositioning.tsx +0 -14
- package/src/positioning/useFixedPositioning.ts +0 -6
- package/src/searching/__tests__/caseInsensitive.ts +165 -0
- package/src/searching/__tests__/fuzzy.ts +169 -0
- package/src/searching/__tests__/toSearchQuery.ts +21 -0
- package/src/searching/caseInsensitive.ts +200 -0
- package/src/searching/fuzzy.ts +175 -0
- package/src/searching/toSearchQuery.ts +18 -0
- package/src/searching/types.ts +34 -0
- package/src/searching/utils.ts +54 -0
- package/src/test-utils/data-testid.ts +5 -1
- package/src/test-utils/polyfills/TextDecoder.ts +7 -0
- package/src/test-utils/polyfills/TextEncoder.ts +5 -0
- package/src/test-utils/polyfills/index.ts +2 -0
- package/src/transition/__tests__/utils.ts +25 -0
- package/src/transition/useCollapseTransition.ts +6 -24
- package/src/transition/utils.ts +10 -5
- package/src/useEnsuredState.ts +1 -1
- package/src/utils/alphaNumericSort.ts +3 -16
- package/tsconfig.json +2 -2
- package/tsconfig.types.json +1 -1
- package/dist/form/SelectValue.d.ts +0 -17
- package/dist/form/SelectValue.js +0 -32
- package/dist/form/SelectValue.js.map +0 -1
- package/dist/utils/filters.d.ts +0 -196
- package/dist/utils/filters.js +0 -67
- package/dist/utils/filters.js.map +0 -1
- package/src/form/SelectValue.tsx +0 -39
- package/src/utils/filters.ts +0 -320
package/dist/form/Select.js
CHANGED
|
@@ -1,299 +1,210 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cnb } from "cnbuilder";
|
|
4
|
-
import {
|
|
4
|
+
import { useMemo, useRef, useState } from "react";
|
|
5
5
|
import { IconRotator } from "../icon/IconRotator.js";
|
|
6
6
|
import { getIcon } from "../icon/iconConfig.js";
|
|
7
7
|
import { Menu } from "../menu/Menu.js";
|
|
8
|
-
import {
|
|
9
|
-
import { KeyboardMovementProvider, useKeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
|
|
10
|
-
import { isSearchableEvent } from "../movement/utils.js";
|
|
11
|
-
import { BELOW_CENTER_ANCHOR } from "../positioning/constants.js";
|
|
8
|
+
import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
|
|
12
9
|
import { useEnsuredId } from "../useEnsuredId.js";
|
|
13
10
|
import { useEnsuredRef } from "../useEnsuredRef.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { TextField } from "./TextField.js";
|
|
11
|
+
import { label as labelStyles } from "./Label.js";
|
|
12
|
+
import { SelectedOption } from "./SelectedOption.js";
|
|
13
|
+
import { TextFieldContainer } from "./TextFieldContainer.js";
|
|
18
14
|
import { getFormConfig } from "./formConfig.js";
|
|
19
15
|
import { select } from "./selectStyles.js";
|
|
20
16
|
import { extractOptionsFromChildren } from "./selectUtils.js";
|
|
17
|
+
import { textField } from "./textFieldStyles.js";
|
|
18
|
+
import { useFormReset } from "./useFormReset.js";
|
|
21
19
|
import { ListboxProvider } from "./useListboxProvider.js";
|
|
22
|
-
import {
|
|
20
|
+
import { useSelectCombobox } from "./useSelectCombobox.js";
|
|
23
21
|
const EMPTY_STRING = "";
|
|
24
22
|
const noop = ()=>{
|
|
25
23
|
// do nothing
|
|
26
24
|
};
|
|
27
|
-
const getNonDisabledOptions = (container)=>[
|
|
28
|
-
...container.querySelectorAll('[role="option"]:not([aria-disabled])')
|
|
29
|
-
];
|
|
30
25
|
/**
|
|
31
26
|
* **Client Component**
|
|
32
27
|
*
|
|
28
|
+
* @example
|
|
29
|
+
* Simple Example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { Select, Option } from "react-md";
|
|
32
|
+
* import { useState, type ReactElement } from "react";
|
|
33
|
+
*
|
|
34
|
+
* function Example(): ReactElement {
|
|
35
|
+
* const [value, setValue] = useState("");
|
|
36
|
+
*
|
|
37
|
+
* return (
|
|
38
|
+
* <Select
|
|
39
|
+
* label="Select"
|
|
40
|
+
* value={value}
|
|
41
|
+
* onChange={(event) => setValue(event.currentTarget.value)}
|
|
42
|
+
* placeholder="Select a value"
|
|
43
|
+
* >
|
|
44
|
+
* <Option value="a">Option 1</Option>
|
|
45
|
+
* <Option value="b">Option 2</Option>
|
|
46
|
+
* <Option value="c">Option 3</Option>
|
|
47
|
+
* <Option value="d">Option 4</Option>
|
|
48
|
+
* </Select>
|
|
49
|
+
* );
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* Testing
|
|
55
|
+
* ```tsx
|
|
56
|
+
* rmdRender(
|
|
57
|
+
* <Select label="Select" selectedOptionProps={{ "data-testid": "selected" }}>
|
|
58
|
+
* <Option value="a">Option 1</Option>
|
|
59
|
+
* <Option value="b">Option 2</Option>
|
|
60
|
+
* <Option value="c">Option 3</Option>
|
|
61
|
+
* <Option value="d">Option 4</Option>
|
|
62
|
+
* </Select>
|
|
63
|
+
* );
|
|
64
|
+
*
|
|
65
|
+
* const user = userEvent.setup();
|
|
66
|
+
* const select = screen.getByRole("combobox", { name: "Select" });
|
|
67
|
+
* const selected = screen.getByTestId("selected")
|
|
68
|
+
* const selectInput = screen.getByRole("textbox", { hidden: true });
|
|
69
|
+
* expect(selected).toHaveTextContent("");
|
|
70
|
+
* expect(selectInput).toHaveValue("");
|
|
71
|
+
*
|
|
72
|
+
* await user.click(select);
|
|
73
|
+
* await user.click(screen.getByRole("option"), { name: "Option 2" });
|
|
74
|
+
*
|
|
75
|
+
* expect(selected).toHaveTextContent("Option 2");
|
|
76
|
+
* expect(selectInput).toHaveValue("b");
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
33
79
|
* @remarks \@since 6.0.0 Rewritten with a new API.
|
|
34
80
|
*/ export function Select(props) {
|
|
35
|
-
const { id
|
|
36
|
-
const {
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);
|
|
43
|
-
const [containerRef, containerRefCallback] = useEnsuredRef(propContainerProps.ref);
|
|
44
|
-
const [menuRef, menuRefCallback] = useEnsuredRef(menuProps.nodeRef);
|
|
45
|
-
const [currentValue, setCurrentValue] = useState(()=>{
|
|
81
|
+
const { id, form, autoCompleteValue, autoComplete = autoCompleteValue, name = autoCompleteValue, className, onClick, onFocus, onKeyDown, inputRef: propInputRef, inputProps, containerRef, placeholder, menuProps = {}, label, labelProps = {}, selectedOptionProps, icon: propIcon, value, defaultValue, theme: propTheme, onChange = noop, rightAddon: propRightAddon, active = false, required, selectedIconAfter = false, disableOptionAddon = false, disableSelectedIcon = false, children, ...remaining } = props;
|
|
82
|
+
const { dense, error, disabled } = props;
|
|
83
|
+
const comboboxId = useEnsuredId(id, "select");
|
|
84
|
+
const inputId = useEnsuredId(inputProps?.id, "select-value");
|
|
85
|
+
const selectLabelId = useEnsuredId(labelProps.id, "select-label");
|
|
86
|
+
const labelId = label ? selectLabelId : undefined;
|
|
87
|
+
const [localValue, setLocalValue] = useState(()=>{
|
|
46
88
|
if (typeof defaultValue !== "undefined") {
|
|
47
89
|
return defaultValue;
|
|
48
90
|
}
|
|
49
91
|
return typeof value !== "undefined" ? value : EMPTY_STRING;
|
|
50
92
|
});
|
|
93
|
+
const currentValue = typeof value === "undefined" ? localValue : value;
|
|
51
94
|
const initialValue = useRef(currentValue);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!select) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const formElement = select.closest("form") || form && document.getElementById(form) || null;
|
|
58
|
-
if (!formElement) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const handleReset = ()=>{
|
|
62
|
-
triggerManualChangeEvent(select, initialValue.current);
|
|
63
|
-
};
|
|
64
|
-
formElement.addEventListener("reset", handleReset);
|
|
65
|
-
return ()=>{
|
|
66
|
-
formElement.removeEventListener("reset", handleReset);
|
|
67
|
-
};
|
|
68
|
-
}, [
|
|
95
|
+
const { options, currentOption } = extractOptionsFromChildren(children, currentValue);
|
|
96
|
+
const { visible, comboboxProps, movementContext, getMenuProps } = useSelectCombobox({
|
|
69
97
|
form,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
98
|
+
value: currentValue,
|
|
99
|
+
values: options,
|
|
100
|
+
onClick,
|
|
101
|
+
onFocus,
|
|
102
|
+
onKeyDown,
|
|
103
|
+
disabled,
|
|
104
|
+
popupId: menuProps.id,
|
|
105
|
+
popupRef: menuProps.nodeRef,
|
|
106
|
+
comboboxId,
|
|
107
|
+
comboboxRef: containerRef
|
|
108
|
+
});
|
|
109
|
+
const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);
|
|
110
|
+
useFormReset({
|
|
111
|
+
form,
|
|
112
|
+
elementRef: inputRef,
|
|
113
|
+
defaultValue: initialValue.current
|
|
114
|
+
});
|
|
81
115
|
const listboxContext = useMemo(()=>({
|
|
82
116
|
inputRef,
|
|
83
|
-
currentValue
|
|
117
|
+
currentValue,
|
|
118
|
+
selectedIconAfter,
|
|
84
119
|
disableSelectedIcon
|
|
85
120
|
}), [
|
|
86
121
|
currentValue,
|
|
87
122
|
disableSelectedIcon,
|
|
88
123
|
inputRef,
|
|
89
|
-
|
|
124
|
+
selectedIconAfter
|
|
90
125
|
]);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
show();
|
|
107
|
-
},
|
|
108
|
-
onKeyDown (event) {
|
|
109
|
-
propContainerProps.onKeyDown?.(event);
|
|
110
|
-
if (disabled) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (visible) {
|
|
114
|
-
if (event.key === "Escape" || event.key === "Tab") {
|
|
115
|
-
event.stopPropagation();
|
|
116
|
-
hide();
|
|
117
|
-
}
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (isSearchableEvent(event)) {
|
|
121
|
-
event.stopPropagation();
|
|
122
|
-
const nextIndex = findMatchIndex({
|
|
123
|
-
value: event.key,
|
|
124
|
-
values: searchValues,
|
|
125
|
-
startIndex: event.shiftKey ? -1 : currentIndex
|
|
126
|
-
});
|
|
127
|
-
if (nextIndex !== -1) {
|
|
128
|
-
triggerManualChangeEvent(inputRef.current, options[nextIndex].value);
|
|
129
|
-
}
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
switch(event.key){
|
|
133
|
-
case " ":
|
|
134
|
-
event.preventDefault();
|
|
135
|
-
event.stopPropagation();
|
|
136
|
-
show();
|
|
137
|
-
break;
|
|
138
|
-
case "Enter":
|
|
139
|
-
tryToSubmitRelatedForm(event, form);
|
|
140
|
-
break;
|
|
141
|
-
case "Home":
|
|
142
|
-
event.preventDefault();
|
|
143
|
-
event.stopPropagation();
|
|
144
|
-
if (currentIndex !== 0) {
|
|
145
|
-
triggerManualChangeEvent(inputRef.current, options[0].value);
|
|
146
|
-
}
|
|
147
|
-
break;
|
|
148
|
-
case "End":
|
|
149
|
-
event.preventDefault();
|
|
150
|
-
event.stopPropagation();
|
|
151
|
-
if (currentIndex !== totalOptions) {
|
|
152
|
-
triggerManualChangeEvent(inputRef.current, options[totalOptions].value);
|
|
153
|
-
}
|
|
154
|
-
break;
|
|
155
|
-
case "ArrowDown":
|
|
156
|
-
case "ArrowUp":
|
|
157
|
-
{
|
|
158
|
-
event.preventDefault();
|
|
159
|
-
event.stopPropagation();
|
|
160
|
-
const increment = event.key === "ArrowDown";
|
|
161
|
-
if (currentIndex === -1 && !increment) {
|
|
162
|
-
// this matches the native select behavior where it will do
|
|
163
|
-
// nothing if there is no current value
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
const nextIndex = loop({
|
|
167
|
-
max: totalOptions,
|
|
168
|
-
value: currentIndex,
|
|
169
|
-
minmax: true,
|
|
170
|
-
increment
|
|
171
|
-
});
|
|
172
|
-
triggerManualChangeEvent(inputRef.current, options[nextIndex].value);
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
loopable: false,
|
|
178
|
-
searchable: true,
|
|
179
|
-
programmatic: true,
|
|
180
|
-
includeDisabled: false,
|
|
181
|
-
tabIndexBehavior: "virtual",
|
|
182
|
-
getDefaultFocusedIndex (focusOptions) {
|
|
183
|
-
if (typeof menuProps.getDefaultFocusedIndex === "function") {
|
|
184
|
-
return menuProps.getDefaultFocusedIndex(focusOptions);
|
|
185
|
-
}
|
|
186
|
-
const val = typeof value === "undefined" ? currentValue : value;
|
|
187
|
-
return options.findIndex((option)=>option.value === val);
|
|
188
|
-
},
|
|
189
|
-
getFocusableElements () {
|
|
190
|
-
const menu = menuRef.current;
|
|
191
|
-
if (!menu) {
|
|
192
|
-
return [];
|
|
193
|
-
}
|
|
194
|
-
return [
|
|
195
|
-
...menu.querySelectorAll('[role="option"]:not([aria-disabled])')
|
|
196
|
-
];
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
const containerProps = {
|
|
200
|
-
...propContainerProps,
|
|
201
|
-
...movementProps,
|
|
202
|
-
...a11yProps,
|
|
203
|
-
ref: containerRefCallback
|
|
204
|
-
};
|
|
205
|
-
const { onEntering, onEntered, onExiting, onExited, disableTransition } = menuProps;
|
|
206
|
-
const handleMounting = (callback = noop, skipped)=>(appearing)=>{
|
|
207
|
-
callback(appearing);
|
|
208
|
-
const menu = menuRef.current;
|
|
209
|
-
if (!menu || skipped) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
// Since the keyboard movement behavior is tied to the
|
|
213
|
-
// `TextFieldContainer` or `input` element instead of the menu for this
|
|
214
|
-
// widget, the focus index and active descendant must manually be updated
|
|
215
|
-
// whenever the menu becomes visible. Without this, no items will be
|
|
216
|
-
// focused until the first keyboard event that would move focus
|
|
217
|
-
const val = typeof value === "undefined" ? currentValue : value;
|
|
218
|
-
const focusables = getNonDisabledOptions(menu);
|
|
219
|
-
const index = Math.max(0, options.findIndex((option)=>option.value === val));
|
|
220
|
-
focusables[index].scrollIntoView({
|
|
221
|
-
block: "nearest"
|
|
222
|
-
});
|
|
223
|
-
currentFocusIndex.current = index;
|
|
224
|
-
setActiveDescendantId(focusables[index]?.id || "");
|
|
225
|
-
};
|
|
226
|
-
const handleUnmounting = (callback = noop, skipped = false)=>()=>{
|
|
227
|
-
callback();
|
|
228
|
-
if (!skipped) {
|
|
229
|
-
// since the menu is unmounted or set to hidden while not visible, need
|
|
230
|
-
// to clear the aria-activedescendant and current focus index when
|
|
231
|
-
// hiding
|
|
232
|
-
currentFocusIndex.current = -1;
|
|
233
|
-
setActiveDescendantId("");
|
|
234
|
-
}
|
|
235
|
-
};
|
|
126
|
+
const icon = getIcon("dropdown", propIcon);
|
|
127
|
+
const theme = getFormConfig("theme", propTheme);
|
|
128
|
+
let rightAddon = propRightAddon;
|
|
129
|
+
if (typeof rightAddon === "undefined" && icon) {
|
|
130
|
+
rightAddon = /*#__PURE__*/ _jsx(IconRotator, {
|
|
131
|
+
rotated: visible,
|
|
132
|
+
children: icon
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
let listboxLabelledBy = menuProps["aria-labelledby"];
|
|
136
|
+
const listboxLabel = menuProps["aria-label"];
|
|
137
|
+
if (!listboxLabel && !listboxLabelledBy) {
|
|
138
|
+
listboxLabelledBy = labelId || comboboxId;
|
|
139
|
+
}
|
|
236
140
|
return /*#__PURE__*/ _jsx(ListboxProvider, {
|
|
237
141
|
value: listboxContext,
|
|
238
142
|
children: /*#__PURE__*/ _jsxs(KeyboardMovementProvider, {
|
|
239
143
|
value: movementContext,
|
|
240
144
|
children: [
|
|
241
|
-
/*#__PURE__*/
|
|
145
|
+
/*#__PURE__*/ _jsxs(TextFieldContainer, {
|
|
146
|
+
"aria-labelledby": labelId,
|
|
242
147
|
...remaining,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
ref: inputRefCallback,
|
|
246
|
-
containerProps: containerProps,
|
|
247
|
-
type: "text",
|
|
248
|
-
tabIndex: -1,
|
|
148
|
+
...comboboxProps,
|
|
149
|
+
label: !!label,
|
|
249
150
|
theme: theme,
|
|
250
|
-
value: value,
|
|
251
|
-
defaultValue: defaultValue,
|
|
252
151
|
active: active || visible,
|
|
253
|
-
leftAddon: leftAddon,
|
|
254
|
-
rightAddon: rightAddon,
|
|
255
152
|
className: cnb("rmd-select-container", className),
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
153
|
+
rightAddon: rightAddon,
|
|
154
|
+
children: [
|
|
155
|
+
/*#__PURE__*/ _jsx(SelectedOption, {
|
|
156
|
+
option: currentOption,
|
|
157
|
+
placeholder: placeholder,
|
|
158
|
+
disableAddon: disableOptionAddon,
|
|
159
|
+
...selectedOptionProps
|
|
160
|
+
}),
|
|
161
|
+
/*#__PURE__*/ _jsx("input", {
|
|
162
|
+
"aria-hidden": true,
|
|
163
|
+
id: inputId,
|
|
164
|
+
ref: inputRefCallback,
|
|
165
|
+
type: "text",
|
|
166
|
+
autoComplete: autoComplete,
|
|
167
|
+
name: name,
|
|
168
|
+
tabIndex: -1,
|
|
169
|
+
disabled: disabled,
|
|
170
|
+
required: required,
|
|
171
|
+
placeholder: " ",
|
|
172
|
+
...inputProps,
|
|
173
|
+
value: value,
|
|
174
|
+
defaultValue: defaultValue,
|
|
175
|
+
className: cnb(select({
|
|
176
|
+
theme
|
|
177
|
+
}), textField()),
|
|
178
|
+
onChange: (event)=>{
|
|
179
|
+
onChange(event);
|
|
180
|
+
if (typeof value !== "undefined") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const nextValue = event.currentTarget.value;
|
|
184
|
+
const nextOption = options.find((option)=>option === nextValue);
|
|
185
|
+
setLocalValue(nextOption ?? initialValue.current);
|
|
186
|
+
}
|
|
187
|
+
}),
|
|
188
|
+
label && /*#__PURE__*/ _jsx("span", {
|
|
189
|
+
...labelProps,
|
|
190
|
+
id: labelId,
|
|
191
|
+
className: labelStyles({
|
|
192
|
+
dense,
|
|
193
|
+
error,
|
|
194
|
+
disabled,
|
|
195
|
+
active: active || visible,
|
|
196
|
+
floating: true,
|
|
197
|
+
floatingActive: !!placeholder || !!currentOption,
|
|
198
|
+
className: labelProps.className
|
|
199
|
+
}),
|
|
200
|
+
children: label
|
|
201
|
+
})
|
|
202
|
+
]
|
|
277
203
|
}),
|
|
278
204
|
/*#__PURE__*/ _jsx(Menu, {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
width: "min",
|
|
283
|
-
...menuProps,
|
|
284
|
-
ref: menuRefCallback,
|
|
285
|
-
visible: visible,
|
|
286
|
-
fixedTo: containerRef,
|
|
287
|
-
onRequestClose: hide,
|
|
288
|
-
onEntering: handleMounting(onEntering, false),
|
|
289
|
-
onEntered: handleMounting(onEntered, !disableTransition),
|
|
290
|
-
onExiting: handleUnmounting(onExiting, false),
|
|
291
|
-
onExited: handleUnmounting(onExited, !disableTransition),
|
|
292
|
-
sheetProps: {
|
|
293
|
-
...menuProps.sheetProps,
|
|
294
|
-
onEntering: handleMounting(menuProps.sheetProps?.onEntering, false),
|
|
295
|
-
onEntered: handleMounting(menuProps.sheetProps?.onEntered, !disableTransition)
|
|
296
|
-
},
|
|
205
|
+
...getMenuProps(menuProps),
|
|
206
|
+
"aria-label": listboxLabel,
|
|
207
|
+
"aria-labelledby": listboxLabelledBy,
|
|
297
208
|
children: children
|
|
298
209
|
})
|
|
299
210
|
]
|
package/dist/form/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { Menu, type MenuProps } from \"../menu/Menu.js\";\nimport { findMatchIndex } from \"../movement/findMatchIndex.js\";\nimport {\n KeyboardMovementProvider,\n useKeyboardMovementProvider,\n} from \"../movement/useKeyboardMovementProvider.js\";\nimport { isSearchableEvent } from \"../movement/utils.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { loop } from \"../utils/loop.js\";\nimport { SelectValue } from \"./SelectValue.js\";\nimport { TextField, type TextFieldProps } from \"./TextField.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport {\n type FormFieldOptions,\n type UserAgentAutoCompleteProps,\n} from \"./types.js\";\nimport { ListboxProvider } from \"./useListboxProvider.js\";\nimport { triggerManualChangeEvent, tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\nconst getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example\n * Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @remarks \\@since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldProps, \"placeholder\" | \"type\" | \"onChange\">,\n UserAgentAutoCompleteProps,\n FormFieldOptions {\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?(event: SelectChangeEvent<Value>): void;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={containerId}`\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableValueAddon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: SelectProps<Value>\n): ReactElement {\n const {\n id: propId,\n className,\n active = false,\n inputRef: propInputRef,\n inputClassName,\n menuProps = {},\n containerProps: propContainerProps = {},\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n leftAddon,\n rightAddon: propRightAddon,\n disableValueAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { disabled = false, form } = props;\n\n const id = useEnsuredId(propId, \"select\");\n const containerId = useEnsuredId(propContainerProps.id, \"select-container\");\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n\n const { toggled: visible, enable: show, disable: hide } = useToggle();\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n const [containerRef, containerRefCallback] = useEnsuredRef(\n propContainerProps.ref\n );\n const [menuRef, menuRefCallback] = useEnsuredRef(menuProps.nodeRef);\n const [currentValue, setCurrentValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const initialValue = useRef(currentValue);\n\n useEffect(() => {\n const select = inputRef.current;\n if (!select) {\n return;\n }\n\n const formElement =\n select.closest<HTMLFormElement>(\"form\") ||\n (form && document.getElementById(form)) ||\n null;\n\n if (!formElement) {\n return;\n }\n\n const handleReset = (): void => {\n triggerManualChangeEvent(select, initialValue.current);\n };\n\n formElement.addEventListener(\"reset\", handleReset);\n return () => {\n formElement.removeEventListener(\"reset\", handleReset);\n };\n }, [form, inputRef]);\n\n const { options, searchValues, currentOption, currentIndex } =\n extractOptionsFromChildren(\n children,\n typeof value === \"undefined\" ? currentValue : value\n );\n const totalOptions = options.length - 1;\n\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n const listboxContext = useMemo(\n () => ({\n inputRef,\n currentValue: typeof value === \"undefined\" ? currentValue : value,\n disableSelectedIcon,\n }),\n [currentValue, disableSelectedIcon, inputRef, value]\n );\n\n // TODO: Need to update this to support editable listboxes where these props\n // would go to the input element instead of the container\n const a11yProps = {\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": visible,\n role: \"combobox\",\n tabIndex: disabled ? -1 : 0,\n } as const;\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<HTMLDivElement>({\n onFocus: propContainerProps.onFocus,\n onClick(event) {\n propContainerProps.onClick?.(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n onKeyDown(event) {\n propContainerProps.onKeyDown?.(event);\n if (disabled) {\n return;\n }\n\n if (visible) {\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n event.stopPropagation();\n hide();\n }\n\n return;\n }\n\n if (isSearchableEvent(event)) {\n event.stopPropagation();\n\n const nextIndex = findMatchIndex({\n value: event.key,\n values: searchValues,\n startIndex: event.shiftKey ? -1 : currentIndex,\n });\n\n if (nextIndex !== -1) {\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n }\n return;\n }\n\n switch (event.key) {\n case \" \":\n event.preventDefault();\n event.stopPropagation();\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n case \"Home\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== 0) {\n triggerManualChangeEvent(inputRef.current, options[0].value);\n }\n break;\n case \"End\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== totalOptions) {\n triggerManualChangeEvent(\n inputRef.current,\n options[totalOptions].value\n );\n }\n break;\n case \"ArrowDown\":\n case \"ArrowUp\": {\n event.preventDefault();\n event.stopPropagation();\n\n const increment = event.key === \"ArrowDown\";\n if (currentIndex === -1 && !increment) {\n // this matches the native select behavior where it will do\n // nothing if there is no current value\n return;\n }\n\n const nextIndex = loop({\n max: totalOptions,\n value: currentIndex,\n minmax: true,\n increment,\n });\n\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n break;\n }\n }\n },\n loopable: false,\n searchable: true,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getDefaultFocusedIndex(focusOptions) {\n if (typeof menuProps.getDefaultFocusedIndex === \"function\") {\n return menuProps.getDefaultFocusedIndex(focusOptions);\n }\n\n const val = typeof value === \"undefined\" ? currentValue : value;\n return options.findIndex((option) => option.value === val);\n },\n getFocusableElements() {\n const menu = menuRef.current;\n if (!menu) {\n return [];\n }\n\n return [\n ...menu.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n ];\n },\n });\n\n const containerProps: Required<SelectProps<Value>>[\"containerProps\"] = {\n ...propContainerProps,\n ...movementProps,\n ...a11yProps,\n ref: containerRefCallback,\n };\n\n const { onEntering, onEntered, onExiting, onExited, disableTransition } =\n menuProps;\n const handleMounting =\n (callback: TransitionEnterHandler | undefined = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const menu = menuRef.current;\n if (!menu || skipped) {\n return;\n }\n\n // Since the keyboard movement behavior is tied to the\n // `TextFieldContainer` or `input` element instead of the menu for this\n // widget, the focus index and active descendant must manually be updated\n // whenever the menu becomes visible. Without this, no items will be\n // focused until the first keyboard event that would move focus\n const val = typeof value === \"undefined\" ? currentValue : value;\n const focusables = getNonDisabledOptions(menu);\n const index = Math.max(\n 0,\n options.findIndex((option) => option.value === val)\n );\n focusables[index].scrollIntoView({ block: \"nearest\" });\n currentFocusIndex.current = index;\n setActiveDescendantId(focusables[index]?.id || \"\");\n };\n\n const handleUnmounting =\n (callback: TransitionExitHandler | undefined = noop, skipped = false) =>\n (): void => {\n callback();\n\n if (!skipped) {\n // since the menu is unmounted or set to hidden while not visible, need\n // to clear the aria-activedescendant and current focus index when\n // hiding\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n }\n };\n\n return (\n <ListboxProvider value={listboxContext}>\n <KeyboardMovementProvider value={movementContext}>\n <TextField\n {...remaining}\n aria-hidden\n id={id}\n ref={inputRefCallback}\n containerProps={containerProps}\n type=\"text\"\n tabIndex={-1}\n theme={theme}\n value={value}\n defaultValue={defaultValue}\n active={active || visible}\n leftAddon={leftAddon}\n rightAddon={rightAddon}\n className={cnb(\"rmd-select-container\", className)}\n inputClassName={select({\n theme,\n className: inputClassName,\n })}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const valueAsNumber = parseFloat(nextValue);\n const nextOption = options.find(\n (option) =>\n // need to compare both here since\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n option.value === nextValue || option.value === valueAsNumber\n );\n\n setCurrentValue(\n nextOption ? nextOption.value : initialValue.current\n );\n }}\n >\n <SelectValue disableAddon={disableValueAddon} {...currentOption} />\n </TextField>\n <Menu\n aria-labelledby={containerId}\n anchor={BELOW_CENTER_ANCHOR}\n role=\"listbox\"\n width=\"min\"\n {...menuProps}\n ref={menuRefCallback}\n visible={visible}\n fixedTo={containerRef}\n onRequestClose={hide}\n onEntering={handleMounting(onEntering, false)}\n onEntered={handleMounting(onEntered, !disableTransition)}\n onExiting={handleUnmounting(onExiting, false)}\n onExited={handleUnmounting(onExited, !disableTransition)}\n sheetProps={{\n ...menuProps.sheetProps,\n onEntering: handleMounting(menuProps.sheetProps?.onEntering, false),\n onEntered: handleMounting(\n menuProps.sheetProps?.onEntered,\n !disableTransition\n ),\n }}\n >\n {children}\n </Menu>\n </KeyboardMovementProvider>\n </ListboxProvider>\n );\n}\n"],"names":["cnb","useEffect","useMemo","useRef","useState","IconRotator","getIcon","Menu","findMatchIndex","KeyboardMovementProvider","useKeyboardMovementProvider","isSearchableEvent","BELOW_CENTER_ANCHOR","useEnsuredId","useEnsuredRef","useToggle","loop","SelectValue","TextField","getFormConfig","select","extractOptionsFromChildren","ListboxProvider","triggerManualChangeEvent","tryToSubmitRelatedForm","EMPTY_STRING","noop","getNonDisabledOptions","container","querySelectorAll","Select","props","id","propId","className","active","inputRef","propInputRef","inputClassName","menuProps","containerProps","propContainerProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","leftAddon","rightAddon","propRightAddon","disableValueAddon","disableSelectedIcon","children","remaining","disabled","form","containerId","toggled","visible","enable","show","disable","hide","inputRefCallback","containerRef","containerRefCallback","ref","menuRef","menuRefCallback","nodeRef","currentValue","setCurrentValue","initialValue","current","formElement","closest","document","getElementById","handleReset","addEventListener","removeEventListener","options","searchValues","currentOption","currentIndex","totalOptions","length","rotated","listboxContext","a11yProps","role","tabIndex","movementProps","movementContext","currentFocusIndex","setActiveDescendantId","onFocus","onClick","event","onKeyDown","key","stopPropagation","nextIndex","values","startIndex","shiftKey","preventDefault","increment","max","minmax","loopable","searchable","programmatic","includeDisabled","tabIndexBehavior","getDefaultFocusedIndex","focusOptions","val","findIndex","option","getFocusableElements","menu","onEntering","onEntered","onExiting","onExited","disableTransition","handleMounting","callback","skipped","appearing","focusables","index","Math","scrollIntoView","block","handleUnmounting","aria-hidden","type","nextValue","currentTarget","valueAsNumber","parseFloat","nextOption","find","disableAddon","aria-labelledby","anchor","width","fixedTo","onRequestClose","sheetProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { type BoxProps } from \"../box/Box.js\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { Menu, type MenuProps } from \"../menu/Menu.js\";\nimport { KeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport {\n type LabelA11y,\n type PropsWithRef,\n type RequireAtLeastOne,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { label as labelStyles } from \"./Label.js\";\nimport { SelectedOption } from \"./SelectedOption.js\";\nimport {\n TextFieldContainer,\n type TextFieldContainerProps,\n} from \"./TextFieldContainer.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport { textField } from \"./textFieldStyles.js\";\nimport { type UserAgentAutocompleteProps } from \"./types.js\";\nimport { useFormReset } from \"./useFormReset.js\";\nimport { ListboxProvider, type ListboxContext } from \"./useListboxProvider.js\";\nimport { useSelectCombobox } from \"./useSelectCombobox.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example\n * Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @remarks \\@since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldContainerProps, \"label\">,\n Pick<InputHTMLAttributes<HTMLInputElement>, \"form\" | \"required\">,\n UserAgentAutocompleteProps {\n /**\n * @defaultValue `\"select-\" + useId()`\n */\n id?: string;\n\n /**\n * Optional placeholder text or element to render while no options have been\n * selected.\n */\n placeholder?: ReactNode;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?(event: SelectChangeEvent<Value>): void;\n\n /**\n * An optional floating label to display like other form fields.\n */\n label?: ReactNode;\n\n /**\n * Optional props to pass to the `<span>` that surrounds the {@link label}\n */\n labelProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n\n /**\n * A ref for the container `<div>` element.\n */\n containerRef?: Ref<HTMLDivElement>;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={label ? labelId : id}` -- this will be undefined if\n * `aria-label` is provided\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">;\n\n /**\n * Any additional props to pass to the div that contains the current visible\n * option.\n */\n selectedOptionProps?: BoxProps;\n\n /**\n * Set this to `true` if all the `Option` components should display the\n * selected icon after the children instead of before.\n *\n * @see {@link disableSelectedIcon} to remove the selected icon instead.\n *\n * @defaultValue `false`\n */\n selectedIconAfter?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableOptionAddon?: boolean;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example\n * Simple Example\n * ```tsx\n * import { Select, Option } from \"react-md\";\n * import { useState, type ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState(\"\");\n *\n * return (\n * <Select\n * label=\"Select\"\n * value={value}\n * onChange={(event) => setValue(event.currentTarget.value)}\n * placeholder=\"Select a value\"\n * >\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n * }\n * ```\n *\n * @example\n * Testing\n * ```tsx\n * rmdRender(\n * <Select label=\"Select\" selectedOptionProps={{ \"data-testid\": \"selected\" }}>\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n *\n * const user = userEvent.setup();\n * const select = screen.getByRole(\"combobox\", { name: \"Select\" });\n * const selected = screen.getByTestId(\"selected\")\n * const selectInput = screen.getByRole(\"textbox\", { hidden: true });\n * expect(selected).toHaveTextContent(\"\");\n * expect(selectInput).toHaveValue(\"\");\n *\n * await user.click(select);\n * await user.click(screen.getByRole(\"option\"), { name: \"Option 2\" });\n *\n * expect(selected).toHaveTextContent(\"Option 2\");\n * expect(selectInput).toHaveValue(\"b\");\n * ```\n *\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: RequireAtLeastOne<SelectProps<Value>, \"label\" | keyof LabelA11y>\n): ReactElement {\n const {\n id,\n form,\n autoCompleteValue,\n autoComplete = autoCompleteValue,\n name = autoCompleteValue,\n className,\n onClick,\n onFocus,\n onKeyDown,\n inputRef: propInputRef,\n inputProps,\n containerRef,\n placeholder,\n menuProps = {},\n label,\n labelProps = {},\n selectedOptionProps,\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n rightAddon: propRightAddon,\n active = false,\n required,\n selectedIconAfter = false,\n disableOptionAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { dense, error, disabled } = props;\n\n const comboboxId = useEnsuredId(id, \"select\");\n const inputId = useEnsuredId(inputProps?.id, \"select-value\");\n const selectLabelId = useEnsuredId(labelProps.id, \"select-label\");\n const labelId = label ? selectLabelId : undefined;\n\n const [localValue, setLocalValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const currentValue = typeof value === \"undefined\" ? localValue : value;\n const initialValue = useRef(currentValue);\n const { options, currentOption } = extractOptionsFromChildren(\n children,\n currentValue\n );\n\n const { visible, comboboxProps, movementContext, getMenuProps } =\n useSelectCombobox({\n form,\n value: currentValue,\n values: options,\n onClick,\n onFocus,\n onKeyDown,\n disabled,\n popupId: menuProps.id,\n popupRef: menuProps.nodeRef,\n comboboxId,\n comboboxRef: containerRef,\n });\n\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n useFormReset({\n form,\n elementRef: inputRef,\n defaultValue: initialValue.current,\n });\n const listboxContext = useMemo<ListboxContext>(\n () => ({\n inputRef,\n currentValue,\n selectedIconAfter,\n disableSelectedIcon,\n }),\n [currentValue, disableSelectedIcon, inputRef, selectedIconAfter]\n );\n\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n let listboxLabelledBy = menuProps[\"aria-labelledby\"];\n const listboxLabel = menuProps[\"aria-label\"];\n if (!listboxLabel && !listboxLabelledBy) {\n listboxLabelledBy = labelId || comboboxId;\n }\n\n return (\n <ListboxProvider value={listboxContext}>\n <KeyboardMovementProvider value={movementContext}>\n <TextFieldContainer\n aria-labelledby={labelId}\n {...remaining}\n {...comboboxProps}\n label={!!label}\n theme={theme}\n active={active || visible}\n className={cnb(\"rmd-select-container\", className)}\n rightAddon={rightAddon}\n >\n <SelectedOption\n option={currentOption}\n placeholder={placeholder}\n disableAddon={disableOptionAddon}\n {...selectedOptionProps}\n />\n <input\n aria-hidden\n id={inputId}\n ref={inputRefCallback}\n type=\"text\"\n autoComplete={autoComplete}\n name={name}\n tabIndex={-1}\n disabled={disabled}\n required={required}\n placeholder=\" \"\n {...inputProps}\n value={value}\n defaultValue={defaultValue}\n className={cnb(select({ theme }), textField())}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const nextOption = options.find((option) => option === nextValue);\n\n setLocalValue(nextOption ?? initialValue.current);\n }}\n />\n {label && (\n <span\n {...labelProps}\n id={labelId}\n className={labelStyles({\n dense,\n error,\n disabled,\n active: active || visible,\n floating: true,\n floatingActive: !!placeholder || !!currentOption,\n className: labelProps.className,\n })}\n >\n {label}\n </span>\n )}\n </TextFieldContainer>\n <Menu\n {...getMenuProps(menuProps)}\n aria-label={listboxLabel}\n aria-labelledby={listboxLabelledBy as string}\n >\n {children}\n </Menu>\n </KeyboardMovementProvider>\n </ListboxProvider>\n );\n}\n"],"names":["cnb","useMemo","useRef","useState","IconRotator","getIcon","Menu","KeyboardMovementProvider","useEnsuredId","useEnsuredRef","label","labelStyles","SelectedOption","TextFieldContainer","getFormConfig","select","extractOptionsFromChildren","textField","useFormReset","ListboxProvider","useSelectCombobox","EMPTY_STRING","noop","Select","props","id","form","autoCompleteValue","autoComplete","name","className","onClick","onFocus","onKeyDown","inputRef","propInputRef","inputProps","containerRef","placeholder","menuProps","labelProps","selectedOptionProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","rightAddon","propRightAddon","active","required","selectedIconAfter","disableOptionAddon","disableSelectedIcon","children","remaining","dense","error","disabled","comboboxId","inputId","selectLabelId","labelId","undefined","localValue","setLocalValue","currentValue","initialValue","options","currentOption","visible","comboboxProps","movementContext","getMenuProps","values","popupId","popupRef","nodeRef","comboboxRef","inputRefCallback","elementRef","current","listboxContext","rotated","listboxLabelledBy","listboxLabel","aria-labelledby","option","disableAddon","input","aria-hidden","ref","type","tabIndex","event","nextValue","currentTarget","nextOption","find","span","floating","floatingActive","aria-label"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import { type BoxProps } from "../box/Box.js";
|
|
3
|
+
import { type OptionProps } from "./Option.js";
|
|
4
|
+
/**
|
|
5
|
+
* @remarks \@since 6.0.0
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface SelectedOptionProps extends BoxProps {
|
|
9
|
+
option: OptionProps | undefined;
|
|
10
|
+
placeholder?: ReactNode;
|
|
11
|
+
disableAddon: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* **Server Component**
|
|
15
|
+
*
|
|
16
|
+
* This component is used to render the current option.
|
|
17
|
+
*
|
|
18
|
+
* @remarks \@since 6.0.0
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function SelectedOption(props: SelectedOptionProps): ReactElement;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cnb } from "cnbuilder";
|
|
3
|
+
import { Box } from "../box/Box.js";
|
|
4
|
+
import { cssUtils } from "../cssUtils.js";
|
|
5
|
+
import { textField } from "./textFieldStyles.js";
|
|
6
|
+
/**
|
|
7
|
+
* **Server Component**
|
|
8
|
+
*
|
|
9
|
+
* This component is used to render the current option.
|
|
10
|
+
*
|
|
11
|
+
* @remarks \@since 6.0.0
|
|
12
|
+
* @internal
|
|
13
|
+
*/ export function SelectedOption(props) {
|
|
14
|
+
const { disableAddon, option, className, disablePadding = true, placeholder, ...remaining } = props;
|
|
15
|
+
let children = option?.children || placeholder;
|
|
16
|
+
// when the children are a string or number, wrap it in additional span so
|
|
17
|
+
// that overflow can be ellipsis-ed
|
|
18
|
+
if (typeof children === "string" || typeof children === "number") {
|
|
19
|
+
children = /*#__PURE__*/ _jsx("span", {
|
|
20
|
+
className: cssUtils({
|
|
21
|
+
textOverflow: "ellipsis"
|
|
22
|
+
}),
|
|
23
|
+
children: children
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return /*#__PURE__*/ _jsxs(Box, {
|
|
27
|
+
...remaining,
|
|
28
|
+
className: cnb("rmd-selected-option", textField(), className),
|
|
29
|
+
disablePadding: disablePadding,
|
|
30
|
+
children: [
|
|
31
|
+
!disableAddon && option?.leftAddon,
|
|
32
|
+
children
|
|
33
|
+
]
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=SelectedOption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/form/SelectedOption.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type ReactElement, type ReactNode } from \"react\";\nimport { Box, type BoxProps } from \"../box/Box.js\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { type OptionProps } from \"./Option.js\";\nimport { textField } from \"./textFieldStyles.js\";\n\n/**\n * @remarks \\@since 6.0.0\n * @internal\n */\nexport interface SelectedOptionProps extends BoxProps {\n option: OptionProps | undefined;\n placeholder?: ReactNode;\n disableAddon: boolean;\n}\n\n/**\n * **Server Component**\n *\n * This component is used to render the current option.\n *\n * @remarks \\@since 6.0.0\n * @internal\n */\nexport function SelectedOption(props: SelectedOptionProps): ReactElement {\n const {\n disableAddon,\n option,\n className,\n disablePadding = true,\n placeholder,\n ...remaining\n } = props;\n\n let children = option?.children || placeholder;\n // when the children are a string or number, wrap it in additional span so\n // that overflow can be ellipsis-ed\n if (typeof children === \"string\" || typeof children === \"number\") {\n children = (\n <span className={cssUtils({ textOverflow: \"ellipsis\" })}>{children}</span>\n );\n }\n\n return (\n <Box\n {...remaining}\n className={cnb(\"rmd-selected-option\", textField(), className)}\n disablePadding={disablePadding}\n >\n {!disableAddon && option?.leftAddon}\n {children}\n </Box>\n );\n}\n"],"names":["cnb","Box","cssUtils","textField","SelectedOption","props","disableAddon","option","className","disablePadding","placeholder","remaining","children","span","textOverflow","leftAddon"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAuB,gBAAgB;AACnD,SAASC,QAAQ,QAAQ,iBAAiB;AAE1C,SAASC,SAAS,QAAQ,uBAAuB;AAYjD;;;;;;;CAOC,GACD,OAAO,SAASC,eAAeC,KAA0B;IACvD,MAAM,EACJC,YAAY,EACZC,MAAM,EACNC,SAAS,EACTC,iBAAiB,IAAI,EACrBC,WAAW,EACX,GAAGC,WACJ,GAAGN;IAEJ,IAAIO,WAAWL,QAAQK,YAAYF;IACnC,0EAA0E;IAC1E,mCAAmC;IACnC,IAAI,OAAOE,aAAa,YAAY,OAAOA,aAAa,UAAU;QAChEA,yBACE,KAACC;YAAKL,WAAWN,SAAS;gBAAEY,cAAc;YAAW;sBAAKF;;IAE9D;IAEA,qBACE,MAACX;QACE,GAAGU,SAAS;QACbH,WAAWR,IAAI,uBAAuBG,aAAaK;QACnDC,gBAAgBA;;YAEf,CAACH,gBAAgBC,QAAQQ;YACzBH;;;AAGP"}
|