@basic-ui/material 1.0.0-alpha.4 → 1.0.0-alpha.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +2133 -1450
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Alert/Alert.d.ts +1 -1
- package/build/esm/Alert/Alert.js +3 -2
- package/build/esm/Alert/Alert.js.map +1 -1
- package/build/esm/Alert/index.js.map +1 -1
- package/build/esm/AppBar/AppBar.d.ts +3 -3
- package/build/esm/AppBar/AppBar.js +6 -5
- package/build/esm/AppBar/AppBar.js.map +1 -1
- package/build/esm/AppBar/AppBarButton.d.ts +1 -1
- package/build/esm/AppBar/AppBarButton.js +2 -1
- package/build/esm/AppBar/AppBarButton.js.map +1 -1
- package/build/esm/AppBar/context.js.map +1 -1
- package/build/esm/AppBar/index.js.map +1 -1
- package/build/esm/Badge/Badge.d.ts +2 -2
- package/build/esm/Badge/Badge.js +28 -2
- package/build/esm/Badge/Badge.js.map +1 -1
- package/build/esm/Badge/index.js.map +1 -1
- package/build/esm/BaseLine/BaseLine.js.map +1 -1
- package/build/esm/BaseLine/index.js.map +1 -1
- package/build/esm/BottomSheet/BottomSheet.d.ts +1 -1
- package/build/esm/BottomSheet/BottomSheet.js +2 -1
- package/build/esm/BottomSheet/BottomSheet.js.map +1 -1
- package/build/esm/BottomSheet/BottomSheetSurface.d.ts +2 -2
- package/build/esm/BottomSheet/BottomSheetSurface.js +2 -2
- package/build/esm/BottomSheet/BottomSheetSurface.js.map +1 -1
- package/build/esm/BottomSheet/index.js.map +1 -1
- package/build/esm/Box/Box.d.ts +4 -4
- package/build/esm/Box/Box.js +1 -2
- package/build/esm/Box/Box.js.map +1 -1
- package/build/esm/Box/index.js.map +1 -1
- package/build/esm/Button/BaseButton.d.ts +3 -3
- package/build/esm/Button/BaseButton.js +6 -5
- package/build/esm/Button/BaseButton.js.map +1 -1
- package/build/esm/Button/Button.d.ts +4 -4
- package/build/esm/Button/Button.js +6 -6
- package/build/esm/Button/Button.js.map +1 -1
- package/build/esm/Button/ButtonGroup.d.ts +2 -2
- package/build/esm/Button/ButtonGroup.js +3 -2
- package/build/esm/Button/ButtonGroup.js.map +1 -1
- package/build/esm/Button/FilledButton.d.ts +1 -1
- package/build/esm/Button/FilledButton.js +6 -8
- package/build/esm/Button/FilledButton.js.map +1 -1
- package/build/esm/Button/FloatingActionButton.js +1 -1
- package/build/esm/Button/FloatingActionButton.js.map +1 -1
- package/build/esm/Button/IconButton.js +1 -1
- package/build/esm/Button/IconButton.js.map +1 -1
- package/build/esm/Button/OutlinedButton.d.ts +1 -1
- package/build/esm/Button/OutlinedButton.js +2 -2
- package/build/esm/Button/OutlinedButton.js.map +1 -1
- package/build/esm/Button/TransparentButton.d.ts +1 -1
- package/build/esm/Button/TransparentButton.js.map +1 -1
- package/build/esm/Button/context.js.map +1 -1
- package/build/esm/Button/index.js.map +1 -1
- package/build/esm/CheckBox/CheckBox.d.ts +5 -5
- package/build/esm/CheckBox/CheckBox.js +6 -5
- package/build/esm/CheckBox/CheckBox.js.map +1 -1
- package/build/esm/CheckBox/CheckBoxIcon.d.ts +4 -4
- package/build/esm/CheckBox/CheckBoxIcon.js +6 -5
- package/build/esm/CheckBox/CheckBoxIcon.js.map +1 -1
- package/build/esm/CheckBox/CheckPath.d.ts +0 -1
- package/build/esm/CheckBox/CheckPath.js.map +1 -1
- package/build/esm/CheckBox/IndeterminatePath.d.ts +0 -1
- package/build/esm/CheckBox/IndeterminatePath.js.map +1 -1
- package/build/esm/CheckBox/index.js.map +1 -1
- package/build/esm/Chip/ButtonChip.d.ts +4 -4
- package/build/esm/Chip/ButtonChip.js +4 -4
- package/build/esm/Chip/ButtonChip.js.map +1 -1
- package/build/esm/Chip/Chip.js.map +1 -1
- package/build/esm/Chip/ChipBase.d.ts +3 -3
- package/build/esm/Chip/ChipBase.js +10 -10
- package/build/esm/Chip/ChipBase.js.map +1 -1
- package/build/esm/Chip/ChoiceChip.d.ts +5 -5
- package/build/esm/Chip/ChoiceChip.js +6 -5
- package/build/esm/Chip/ChoiceChip.js.map +1 -1
- package/build/esm/Chip/index.js.map +1 -1
- package/build/esm/Combobox/Combobox.d.ts +13 -13
- package/build/esm/Combobox/Combobox.js +25 -16
- package/build/esm/Combobox/Combobox.js.map +1 -1
- package/build/esm/Combobox/index.js.map +1 -1
- package/build/esm/Dialog/Dialog.d.ts +1 -1
- package/build/esm/Dialog/Dialog.js +6 -5
- package/build/esm/Dialog/Dialog.js.map +1 -1
- package/build/esm/Dialog/DialogBackdrop.d.ts +2 -2
- package/build/esm/Dialog/DialogBackdrop.js +2 -2
- package/build/esm/Dialog/DialogBackdrop.js.map +1 -1
- package/build/esm/Dialog/DialogContainer.d.ts +1 -1
- package/build/esm/Dialog/DialogContainer.js +2 -1
- package/build/esm/Dialog/DialogContainer.js.map +1 -1
- package/build/esm/Dialog/DialogSurface.d.ts +2 -2
- package/build/esm/Dialog/DialogSurface.js +4 -4
- package/build/esm/Dialog/DialogSurface.js.map +1 -1
- package/build/esm/Dialog/Scrim.d.ts +1 -1
- package/build/esm/Dialog/Scrim.js +2 -1
- package/build/esm/Dialog/Scrim.js.map +1 -1
- package/build/esm/Dialog/index.js +1 -0
- package/build/esm/Dialog/index.js.map +1 -1
- package/build/esm/Dialog/useDialogAnimation.js +6 -4
- package/build/esm/Dialog/useDialogAnimation.js.map +1 -1
- package/build/esm/Divider/Divider.d.ts +3 -3
- package/build/esm/Divider/Divider.js +9 -10
- package/build/esm/Divider/Divider.js.map +1 -1
- package/build/esm/Divider/index.js.map +1 -1
- package/build/esm/FloatingLabel/FloatingLabel.d.ts +4 -4
- package/build/esm/FloatingLabel/FloatingLabel.js +7 -6
- package/build/esm/FloatingLabel/FloatingLabel.js.map +1 -1
- package/build/esm/FloatingLabel/index.js.map +1 -1
- package/build/esm/LineRipple/LineRipple.d.ts +3 -3
- package/build/esm/LineRipple/LineRipple.js +5 -4
- package/build/esm/LineRipple/LineRipple.js.map +1 -1
- package/build/esm/LineRipple/index.js.map +1 -1
- package/build/esm/Link/Link.d.ts +3 -3
- package/build/esm/Link/Link.js +14 -2
- package/build/esm/Link/Link.js.map +1 -1
- package/build/esm/Link/index.js.map +1 -1
- package/build/esm/List/List.d.ts +5 -5
- package/build/esm/List/List.js +2 -2
- package/build/esm/List/List.js.map +1 -1
- package/build/esm/List/index.js.map +1 -1
- package/build/esm/ListItem/ListItem.d.ts +7 -5
- package/build/esm/ListItem/ListItem.js +50 -47
- package/build/esm/ListItem/ListItem.js.map +1 -1
- package/build/esm/ListItem/ListItemText.d.ts +6 -6
- package/build/esm/ListItem/ListItemText.js +5 -5
- package/build/esm/ListItem/ListItemText.js.map +1 -1
- package/build/esm/ListItem/index.js.map +1 -1
- package/build/esm/Menu/Menu.d.ts +9 -7
- package/build/esm/Menu/Menu.js +31 -11
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/animation.js.map +1 -1
- package/build/esm/Menu/index.d.ts +1 -0
- package/build/esm/Menu/index.js +1 -0
- package/build/esm/Menu/index.js.map +1 -1
- package/build/esm/NavRail/NavRailItem.d.ts +15 -0
- package/build/esm/NavRail/NavRailItem.js +149 -0
- package/build/esm/NavRail/NavRailItem.js.map +1 -0
- package/build/esm/NavRail/icons/test-icons.d.ts +4 -0
- package/build/esm/NavRail/icons/test-icons.js +42 -0
- package/build/esm/NavRail/icons/test-icons.js.map +1 -0
- package/build/esm/NavRail/index.d.ts +1 -0
- package/build/esm/NavRail/index.js +2 -0
- package/build/esm/NavRail/index.js.map +1 -0
- package/build/esm/NotchedOutline/NotchedOutline.d.ts +5 -5
- package/build/esm/NotchedOutline/NotchedOutline.js +4 -4
- package/build/esm/NotchedOutline/NotchedOutline.js.map +1 -1
- package/build/esm/NotchedOutline/context.js.map +1 -1
- package/build/esm/NotchedOutline/index.js.map +1 -1
- package/build/esm/NotchedOutline/styledComponents.d.ts +118 -28
- package/build/esm/NotchedOutline/styledComponents.js +3 -2
- package/build/esm/NotchedOutline/styledComponents.js.map +1 -1
- package/build/esm/Paper/Paper.d.ts +4 -4
- package/build/esm/Paper/Paper.js +8 -8
- package/build/esm/Paper/Paper.js.map +1 -1
- package/build/esm/Paper/index.js.map +1 -1
- package/build/esm/Popover/Popover.d.ts +14 -0
- package/build/esm/Popover/Popover.js +74 -0
- package/build/esm/Popover/Popover.js.map +1 -0
- package/build/esm/Popover/PopoverContainer.d.ts +4 -0
- package/build/esm/Popover/PopoverContainer.js +20 -0
- package/build/esm/Popover/PopoverContainer.js.map +1 -0
- package/build/esm/Popover/PopoverSurface.d.ts +5 -0
- package/build/esm/Popover/PopoverSurface.js +41 -0
- package/build/esm/Popover/PopoverSurface.js.map +1 -0
- package/build/esm/Popover/index.d.ts +1 -0
- package/build/esm/Popover/index.js +2 -0
- package/build/esm/Popover/index.js.map +1 -0
- package/build/esm/ProgressSpinner/ProgressSpinner.d.ts +1 -1
- package/build/esm/ProgressSpinner/ProgressSpinner.js +14 -14
- package/build/esm/ProgressSpinner/ProgressSpinner.js.map +1 -1
- package/build/esm/ProgressSpinner/index.js.map +1 -1
- package/build/esm/RadioButton/RadioButton.js +4 -2
- package/build/esm/RadioButton/RadioButton.js.map +1 -1
- package/build/esm/RadioButton/RadioButtonIcon.d.ts +3 -3
- package/build/esm/RadioButton/RadioButtonIcon.js +6 -5
- package/build/esm/RadioButton/RadioButtonIcon.js.map +1 -1
- package/build/esm/RadioButton/RadioGroup.d.ts +1 -1
- package/build/esm/RadioButton/RadioGroup.js +2 -1
- package/build/esm/RadioButton/RadioGroup.js.map +1 -1
- package/build/esm/RadioButton/index.js.map +1 -1
- package/build/esm/Ripple/Ripple.js.map +1 -1
- package/build/esm/Ripple/RippleBox.d.ts +1 -2
- package/build/esm/Ripple/RippleBox.js +7 -6
- package/build/esm/Ripple/RippleBox.js.map +1 -1
- package/build/esm/Ripple/constants.js.map +1 -1
- package/build/esm/Ripple/index.js.map +1 -1
- package/build/esm/Ripple/keyframes.js.map +1 -1
- package/build/esm/Ripple/useRipple.js +2 -2
- package/build/esm/Ripple/useRipple.js.map +1 -1
- package/build/esm/Ripple/useRippleHandlers.d.ts +3 -3
- package/build/esm/Ripple/useRippleHandlers.js +2 -1
- package/build/esm/Ripple/useRippleHandlers.js.map +1 -1
- package/build/esm/Ripple/useRippleSurface.d.ts +6 -5
- package/build/esm/Ripple/useRippleSurface.js +65 -60
- package/build/esm/Ripple/useRippleSurface.js.map +1 -1
- package/build/esm/Select/CustomContainerExample.d.ts +3 -0
- package/build/esm/Select/CustomContainerExample.js +59 -0
- package/build/esm/Select/CustomContainerExample.js.map +1 -0
- package/build/esm/Select/Select.d.ts +23 -9
- package/build/esm/Select/Select.js +67 -15
- package/build/esm/Select/Select.js.map +1 -1
- package/build/esm/Select/SelectIcon.d.ts +3 -3
- package/build/esm/Select/SelectIcon.js +6 -5
- package/build/esm/Select/SelectIcon.js.map +1 -1
- package/build/esm/Select/context.d.ts +7 -6
- package/build/esm/Select/context.js +2 -1
- package/build/esm/Select/context.js.map +1 -1
- package/build/esm/Select/defaultRender.d.ts +3 -1
- package/build/esm/Select/defaultRender.js +33 -4
- package/build/esm/Select/defaultRender.js.map +1 -1
- package/build/esm/Select/index.js.map +1 -1
- package/build/esm/Select/styledComponents.d.ts +9 -9
- package/build/esm/Select/styledComponents.js +13 -22
- package/build/esm/Select/styledComponents.js.map +1 -1
- package/build/esm/SelectItem/SelectItem.d.ts +11 -4
- package/build/esm/SelectItem/SelectItem.js +34 -9
- package/build/esm/SelectItem/SelectItem.js.map +1 -1
- package/build/esm/SelectItem/index.js.map +1 -1
- package/build/esm/SelectionControl/SelectionControlLabel.d.ts +5 -5
- package/build/esm/SelectionControl/SelectionControlLabel.js +4 -3
- package/build/esm/SelectionControl/SelectionControlLabel.js.map +1 -1
- package/build/esm/SelectionControl/SelectionControlText.d.ts +4 -4
- package/build/esm/SelectionControl/SelectionControlText.js +4 -4
- package/build/esm/SelectionControl/SelectionControlText.js.map +1 -1
- package/build/esm/SelectionControl/index.js.map +1 -1
- package/build/esm/Skeleton/DelayAppearance.d.ts +3 -3
- package/build/esm/Skeleton/DelayAppearance.js +2 -2
- package/build/esm/Skeleton/DelayAppearance.js.map +1 -1
- package/build/esm/Skeleton/Skeleton.d.ts +6 -6
- package/build/esm/Skeleton/Skeleton.js +4 -4
- package/build/esm/Skeleton/Skeleton.js.map +1 -1
- package/build/esm/Skeleton/animation.js.map +1 -1
- package/build/esm/Skeleton/index.js.map +1 -1
- package/build/esm/Slider/Slider.d.ts +17 -0
- package/build/esm/Slider/Slider.js +224 -0
- package/build/esm/Slider/Slider.js.map +1 -0
- package/build/esm/Slider/index.d.ts +1 -0
- package/build/esm/Slider/index.js +2 -0
- package/build/esm/Slider/index.js.map +1 -0
- package/build/esm/Snackbar/Snackbar.d.ts +3 -3
- package/build/esm/Snackbar/Snackbar.js +12 -12
- package/build/esm/Snackbar/Snackbar.js.map +1 -1
- package/build/esm/Snackbar/Stack.d.ts +2 -3
- package/build/esm/Snackbar/Stack.js +11 -10
- package/build/esm/Snackbar/Stack.js.map +1 -1
- package/build/esm/Snackbar/index.d.ts +1 -0
- package/build/esm/Snackbar/index.js +1 -0
- package/build/esm/Snackbar/index.js.map +1 -1
- package/build/esm/Snackbar/useSnackbarAnimation.d.ts +2 -66
- package/build/esm/Snackbar/useSnackbarAnimation.js +9 -8
- package/build/esm/Snackbar/useSnackbarAnimation.js.map +1 -1
- package/build/esm/Switch/Switch.d.ts +9 -5
- package/build/esm/Switch/Switch.js +70 -48
- package/build/esm/Switch/Switch.js.map +1 -1
- package/build/esm/Switch/index.js.map +1 -1
- package/build/esm/Switch/styledComponents.js +34 -25
- package/build/esm/Switch/styledComponents.js.map +1 -1
- package/build/esm/Tab/Tab.d.ts +3 -3
- package/build/esm/Tab/Tab.js +51 -14
- package/build/esm/Tab/Tab.js.map +1 -1
- package/build/esm/Tab/TabList.d.ts +2 -1
- package/build/esm/Tab/TabList.js +8 -3
- package/build/esm/Tab/TabList.js.map +1 -1
- package/build/esm/Tab/TabPanel.d.ts +1 -1
- package/build/esm/Tab/TabPanel.js +4 -2
- package/build/esm/Tab/TabPanel.js.map +1 -1
- package/build/esm/Tab/TabPanels.js.map +1 -1
- package/build/esm/Tab/Tabs.js.map +1 -1
- package/build/esm/Tab/context.d.ts +1 -0
- package/build/esm/Tab/context.js +2 -1
- package/build/esm/Tab/context.js.map +1 -1
- package/build/esm/Tab/index.js.map +1 -1
- package/build/esm/TabIndicator/TabIndicator.d.ts +4 -2
- package/build/esm/TabIndicator/TabIndicator.js +78 -10
- package/build/esm/TabIndicator/TabIndicator.js.map +1 -1
- package/build/esm/TabIndicator/context.d.ts +2 -2
- package/build/esm/TabIndicator/context.js.map +1 -1
- package/build/esm/TabIndicator/index.js.map +1 -1
- package/build/esm/Table/Table.d.ts +1 -1
- package/build/esm/Table/Table.js +14 -5
- package/build/esm/Table/Table.js.map +1 -1
- package/build/esm/Table/TableBody.d.ts +1 -1
- package/build/esm/Table/TableBody.js +4 -3
- package/build/esm/Table/TableBody.js.map +1 -1
- package/build/esm/Table/TableCell.d.ts +1 -1
- package/build/esm/Table/TableCell.js +4 -3
- package/build/esm/Table/TableCell.js.map +1 -1
- package/build/esm/Table/TableHead.js +7 -5
- package/build/esm/Table/TableHead.js.map +1 -1
- package/build/esm/Table/TableRow.d.ts +1 -1
- package/build/esm/Table/TableRow.js +6 -6
- package/build/esm/Table/TableRow.js.map +1 -1
- package/build/esm/Table/context.js.map +1 -1
- package/build/esm/Table/index.js.map +1 -1
- package/build/esm/Text/LoremIpsum.js +1 -1
- package/build/esm/Text/LoremIpsum.js.map +1 -1
- package/build/esm/Text/Text.d.ts +8 -4
- package/build/esm/Text/Text.js +7 -3
- package/build/esm/Text/Text.js.map +1 -1
- package/build/esm/Text/index.js.map +1 -1
- package/build/esm/TextField/FilledContainer.d.ts +7 -4
- package/build/esm/TextField/FilledContainer.js +11 -11
- package/build/esm/TextField/FilledContainer.js.map +1 -1
- package/build/esm/TextField/HelperText.d.ts +5 -5
- package/build/esm/TextField/HelperText.js +5 -5
- package/build/esm/TextField/HelperText.js.map +1 -1
- package/build/esm/TextField/IconContainer.d.ts +2 -3
- package/build/esm/TextField/IconContainer.js +0 -1
- package/build/esm/TextField/IconContainer.js.map +1 -1
- package/build/esm/TextField/Input.d.ts +4 -4
- package/build/esm/TextField/Input.js +11 -9
- package/build/esm/TextField/Input.js.map +1 -1
- package/build/esm/TextField/OutlinedContainer.d.ts +4 -4
- package/build/esm/TextField/OutlinedContainer.js +17 -9
- package/build/esm/TextField/OutlinedContainer.js.map +1 -1
- package/build/esm/TextField/TextField.d.ts +5 -5
- package/build/esm/TextField/TextField.js +4 -4
- package/build/esm/TextField/TextField.js.map +1 -1
- package/build/esm/TextField/consts.js.map +1 -1
- package/build/esm/TextField/index.js.map +1 -1
- package/build/esm/ThemeExplorer/BorderSlider.d.ts +7 -0
- package/build/esm/ThemeExplorer/BorderSlider.js +78 -0
- package/build/esm/ThemeExplorer/BorderSlider.js.map +1 -0
- package/build/esm/ThemeExplorer/ColorPicker.js +4 -3
- package/build/esm/ThemeExplorer/ColorPicker.js.map +1 -1
- package/build/esm/ThemeExplorer/ColorSchemePicker.d.ts +10 -0
- package/build/esm/ThemeExplorer/ColorSchemePicker.js +54 -0
- package/build/esm/ThemeExplorer/ColorSchemePicker.js.map +1 -0
- package/build/esm/ThemeExplorer/FontAutoComplete.d.ts +9 -0
- package/build/esm/ThemeExplorer/FontAutoComplete.js +128 -0
- package/build/esm/ThemeExplorer/FontAutoComplete.js.map +1 -0
- package/build/esm/ThemeExplorer/TextFieldColorPicker.js +4 -3
- package/build/esm/ThemeExplorer/TextFieldColorPicker.js.map +1 -1
- package/build/esm/ThemeExplorer/ThemeBuilder.d.ts +11 -0
- package/build/esm/ThemeExplorer/ThemeBuilder.js +400 -0
- package/build/esm/ThemeExplorer/ThemeBuilder.js.map +1 -0
- package/build/esm/ThemeExplorer/ThemeColors.d.ts +2 -2
- package/build/esm/ThemeExplorer/ThemeColors.js +38 -16
- package/build/esm/ThemeExplorer/ThemeColors.js.map +1 -1
- package/build/esm/ThemeExplorer/components.d.ts +7 -8
- package/build/esm/ThemeExplorer/components.js +29 -28
- package/build/esm/ThemeExplorer/components.js.map +1 -1
- package/build/esm/ThemeExplorer/googleFonts.d.ts +1 -0
- package/build/esm/ThemeExplorer/googleFonts.js +7 -0
- package/build/esm/ThemeExplorer/googleFonts.js.map +1 -0
- package/build/esm/ThemeExplorer/index.d.ts +1 -0
- package/build/esm/ThemeExplorer/index.js +2 -0
- package/build/esm/ThemeExplorer/index.js.map +1 -0
- package/build/esm/ThemeExplorer/makeColorScheme.d.ts +36 -4
- package/build/esm/ThemeExplorer/makeColorScheme.js +46 -10
- package/build/esm/ThemeExplorer/makeColorScheme.js.map +1 -1
- package/build/esm/ThemeExplorer/makeTailwindTheme.d.ts +2 -0
- package/build/esm/ThemeExplorer/makeTailwindTheme.js +30 -0
- package/build/esm/ThemeExplorer/makeTailwindTheme.js.map +1 -0
- package/build/esm/ThemeExplorer/updateGoogleFonts.js +70 -0
- package/build/esm/ThemeExplorer/updateGoogleFonts.js.map +1 -0
- package/build/esm/ThemeExplorer/useDeferredColor.js +6 -9
- package/build/esm/ThemeExplorer/useDeferredColor.js.map +1 -1
- package/build/esm/ThemeExplorer/useLocalStorageCachedState.d.ts +1 -1
- package/build/esm/ThemeExplorer/useLocalStorageCachedState.js +1 -1
- package/build/esm/ThemeExplorer/useLocalStorageCachedState.js.map +1 -1
- package/build/esm/Tooltip/Tooltip.d.ts +3 -3
- package/build/esm/Tooltip/Tooltip.js +30 -16
- package/build/esm/Tooltip/Tooltip.js.map +1 -1
- package/build/esm/Tooltip/index.js.map +1 -1
- package/build/esm/color.d.ts +3 -1
- package/build/esm/color.js +14 -5
- package/build/esm/color.js.map +1 -1
- package/build/esm/css.js.map +1 -1
- package/build/esm/hooks/useAnimation.js +3 -3
- package/build/esm/hooks/useAnimation.js.map +1 -1
- package/build/esm/index.d.ts +5 -1
- package/build/esm/index.js +5 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/motion.d.ts +7 -0
- package/build/esm/motion.js +8 -0
- package/build/esm/motion.js.map +1 -0
- package/build/esm/tailwind/extendColors.d.ts +5 -0
- package/build/esm/tailwind/extendColors.js +59 -0
- package/build/esm/tailwind/extendColors.js.map +1 -0
- package/build/esm/tailwind/index.d.ts +8 -0
- package/build/esm/tailwind/index.js +45 -0
- package/build/esm/tailwind/index.js.map +1 -0
- package/build/esm/theme/index.js.map +1 -1
- package/build/esm/theme/theme.d.ts +118 -28
- package/build/esm/theme/theme.js +54 -42
- package/build/esm/theme/theme.js.map +1 -1
- package/build/esm/theme/typography-raleway.js.map +1 -1
- package/build/esm/theme/typography-roboto.js.map +1 -1
- package/build/esm/theme/useTheme.d.ts +561 -1
- package/build/esm/theme/useTheme.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -0
- package/package.json +22 -12
- package/src/Alert/Alert.tsx +1 -1
- package/src/AppBar/AppBar.tsx +4 -3
- package/src/Badge/Badge.story.tsx +68 -0
- package/src/Badge/Badge.tsx +33 -3
- package/src/BottomSheet/BottomSheetSurface.tsx +3 -3
- package/src/Box/Box.tsx +6 -8
- package/src/Button/BaseButton.tsx +4 -11
- package/src/Button/Button.story.tsx +10 -1
- package/src/Button/Button.tsx +4 -4
- package/src/Button/ButtonGroup.tsx +1 -1
- package/src/Button/FilledButton.tsx +4 -9
- package/src/Button/OutlinedButton.tsx +1 -1
- package/src/Button/SpinnerButton.story.tsx +1 -1
- package/src/CheckBox/CheckBox.story.tsx +7 -6
- package/src/CheckBox/CheckBox.tsx +6 -10
- package/src/CheckBox/CheckBoxIcon.tsx +5 -5
- package/src/Chip/ButtonChip.tsx +3 -3
- package/src/Chip/Chip.story.tsx +1 -1
- package/src/Chip/ChipBase.tsx +2 -2
- package/src/Chip/ChoiceChip.tsx +7 -7
- package/src/Combobox/Combobox.story.tsx +3 -3
- package/src/Combobox/Combobox.tsx +14 -12
- package/src/Dialog/DialogBackdrop.tsx +3 -3
- package/src/Dialog/DialogSurface.tsx +2 -4
- package/src/Dialog/useDialogAnimation.tsx +3 -4
- package/src/Divider/Divider.tsx +4 -5
- package/src/FloatingLabel/FloatingLabel.tsx +7 -6
- package/src/LineRipple/LineRipple.story.tsx +1 -1
- package/src/LineRipple/LineRipple.tsx +4 -4
- package/src/Link/Link.tsx +14 -5
- package/src/List/List.tsx +4 -4
- package/src/ListItem/ListItem.tsx +52 -47
- package/src/ListItem/ListItemText.tsx +6 -7
- package/src/Menu/ContextMenu.story.tsx +34 -0
- package/src/Menu/Menu.tsx +19 -5
- package/src/Menu/index.ts +1 -0
- package/src/NavRail/NavRail.story.tsx +146 -0
- package/src/NavRail/NavRailItem.tsx +175 -0
- package/src/NavRail/icons/test-icons.tsx +46 -0
- package/src/NavRail/index.ts +1 -0
- package/src/NotchedOutline/NotchedOutline.tsx +4 -5
- package/src/NotchedOutline/styledComponents.ts +2 -1
- package/src/Paper/Paper.story.tsx +3 -3
- package/src/Paper/Paper.tsx +5 -9
- package/src/Popover/Popover.story.tsx +29 -0
- package/src/Popover/Popover.tsx +96 -0
- package/src/Popover/PopoverContainer.tsx +25 -0
- package/src/Popover/PopoverSurface.tsx +51 -0
- package/src/Popover/index.ts +1 -0
- package/src/ProgressSpinner/ProgressSpinner.tsx +9 -9
- package/src/RadioButton/RadioButton.story.tsx +2 -2
- package/src/RadioButton/RadioButton.tsx +1 -1
- package/src/RadioButton/RadioButtonIcon.tsx +4 -5
- package/src/Ripple/Ripple.story.tsx +1 -1
- package/src/Ripple/RippleBox.tsx +1 -2
- package/src/Ripple/useRippleHandlers.ts +3 -3
- package/src/Ripple/useRippleSurface.ts +83 -61
- package/src/Select/CustomContainerExample.tsx +59 -0
- package/src/Select/PaymentMethodSelect.story.tsx +17 -24
- package/src/Select/Select.story.tsx +68 -69
- package/src/Select/Select.tsx +118 -32
- package/src/Select/SelectIcon.tsx +3 -4
- package/src/Select/SelectMultiple.story.tsx +215 -0
- package/src/Select/context.ts +7 -4
- package/src/Select/defaultRender.tsx +49 -0
- package/src/Select/styledComponents.tsx +12 -22
- package/src/SelectItem/SelectItem.tsx +81 -49
- package/src/SelectionControl/SelectionControlLabel.tsx +5 -8
- package/src/SelectionControl/SelectionControlText.tsx +3 -3
- package/src/Skeleton/DelayAppearance.tsx +2 -2
- package/src/Skeleton/Skeleton.story.tsx +2 -2
- package/src/Skeleton/Skeleton.tsx +6 -6
- package/src/Slider/Slider.story.tsx +36 -0
- package/src/Slider/Slider.tsx +275 -0
- package/src/Slider/index.ts +1 -0
- package/src/Snackbar/Snackbar.tsx +10 -10
- package/src/Snackbar/Stack.tsx +13 -12
- package/src/Snackbar/index.ts +1 -0
- package/src/Snackbar/useSnackbarAnimation.ts +5 -4
- package/src/Switch/Switch.story.tsx +78 -7
- package/src/Switch/Switch.tsx +101 -58
- package/src/Switch/styledComponents.tsx +34 -27
- package/src/Tab/Tab.story.tsx +170 -14
- package/src/Tab/Tab.tsx +53 -15
- package/src/Tab/TabList.tsx +5 -1
- package/src/Tab/context.ts +2 -0
- package/src/TabIndicator/TabIndicator.tsx +85 -8
- package/src/TabIndicator/context.ts +2 -1
- package/src/Table/Table.tsx +10 -1
- package/src/Table/TableHead.tsx +3 -2
- package/src/Table/TableRow.tsx +2 -3
- package/src/Text/LoremIpsum.tsx +1 -1
- package/src/Text/Text.story.tsx +42 -7
- package/src/Text/Text.tsx +25 -5
- package/src/TextField/FilledContainer.tsx +9 -8
- package/src/TextField/HelperText.tsx +5 -5
- package/src/TextField/IconContainer.tsx +2 -3
- package/src/TextField/Input.tsx +5 -4
- package/src/TextField/OutlinedContainer.tsx +11 -6
- package/src/TextField/TextField.tsx +4 -4
- package/src/ThemeExplorer/BorderSlider.tsx +73 -0
- package/src/ThemeExplorer/ColorSchemePicker.tsx +55 -0
- package/src/ThemeExplorer/FontAutoComplete.tsx +139 -0
- package/src/ThemeExplorer/ThemeBuilder.story.tsx +3 -160
- package/src/ThemeExplorer/ThemeBuilder.tsx +353 -0
- package/src/ThemeExplorer/ThemeColors.tsx +45 -16
- package/src/ThemeExplorer/components.tsx +30 -30
- package/src/ThemeExplorer/googleFonts.ts +1436 -0
- package/src/ThemeExplorer/index.ts +1 -0
- package/src/ThemeExplorer/makeColorScheme.tsx +44 -7
- package/src/ThemeExplorer/makeTailwindTheme.ts +44 -0
- package/src/ThemeExplorer/updateGoogleFonts.js +33 -0
- package/src/ThemeExplorer/useDeferredColor.tsx +6 -10
- package/src/ThemeExplorer/useLocalStorageCachedState.ts +2 -2
- package/src/Tooltip/Tooltip.story.tsx +2 -2
- package/src/Tooltip/Tooltip.tsx +36 -19
- package/src/color.ts +30 -6
- package/src/index.ts +5 -1
- package/src/motion.ts +7 -0
- package/src/tailwind/extendColors.ts +51 -0
- package/src/tailwind/index.ts +56 -0
- package/src/tailwind/tests/extendColors.test.ts +123 -0
- package/src/theme/theme.ts +57 -39
- package/tailwind/package.json +5 -0
- package/theme-explorer/package.json +5 -0
- package/build/esm/ColorMode/ColorModeProvider.d.ts +0 -7
- package/build/esm/ColorMode/ColorModeProvider.js +0 -92
- package/build/esm/ColorMode/ColorModeProvider.js.map +0 -1
- package/build/esm/ColorMode/color-mode.d.ts +0 -8
- package/build/esm/ColorMode/color-mode.js +0 -11
- package/build/esm/ColorMode/color-mode.js.map +0 -1
- package/build/esm/ColorMode/color-vars.d.ts +0 -4
- package/build/esm/ColorMode/color-vars.js +0 -58
- package/build/esm/ColorMode/color-vars.js.map +0 -1
- package/build/esm/ColorMode/constants.d.ts +0 -3
- package/build/esm/ColorMode/constants.js +0 -5
- package/build/esm/ColorMode/constants.js.map +0 -1
- package/build/esm/ColorMode/index.d.ts +0 -4
- package/build/esm/ColorMode/index.js +0 -5
- package/build/esm/ColorMode/index.js.map +0 -1
- package/build/esm/ListItem/context.d.ts +0 -7
- package/build/esm/ListItem/context.js +0 -10
- package/build/esm/ListItem/context.js.map +0 -1
- package/build/tsconfig.tsbuildinfo +0 -1
- package/src/ColorMode/ColorModeProvider.tsx +0 -97
- package/src/ColorMode/color-mode.ts +0 -20
- package/src/ColorMode/color-vars.ts +0 -56
- package/src/ColorMode/constants.ts +0 -5
- package/src/ColorMode/index.ts +0 -4
- package/src/ColorMode/tests/color-vars.test.ts +0 -9
- package/src/Select/defaultRender.ts +0 -18
- package/src/ThemeExplorer/ThemeExplorer.story.tsx +0 -43
package/src/Select/Select.tsx
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import type {
|
|
2
|
+
SelectHTMLAttributes,
|
|
3
|
+
ReactNode,
|
|
4
|
+
ChangeEvent,
|
|
5
|
+
ComponentType,
|
|
6
|
+
ForwardedRef,
|
|
7
|
+
ReactElement,
|
|
8
|
+
Ref,
|
|
9
|
+
} from 'react';
|
|
10
|
+
import { useMemo, forwardRef, useState, useRef, useEffect, useId } from 'react';
|
|
3
11
|
import {
|
|
4
12
|
wrapEvent,
|
|
5
13
|
assignMultipleRefs,
|
|
@@ -9,51 +17,75 @@ import {
|
|
|
9
17
|
import type { Theme } from '../theme';
|
|
10
18
|
import { useTheme } from '../theme';
|
|
11
19
|
import { Select as SelectComp, SelectButton } from './styledComponents';
|
|
20
|
+
import type { FilledContainerProps } from '../TextField/FilledContainer';
|
|
12
21
|
import { FilledContainer } from '../TextField/FilledContainer';
|
|
13
22
|
import { HelperText } from '../TextField/HelperText';
|
|
14
23
|
import { OutlinedContainer } from '../TextField/OutlinedContainer';
|
|
15
24
|
import { SelectProvider } from './context';
|
|
16
25
|
import { Menu, MenuPopover, MenuList } from '../Menu';
|
|
17
26
|
import { SelectIcon } from './SelectIcon';
|
|
18
|
-
import { makeDefaultRender } from './defaultRender';
|
|
27
|
+
import { makeDefaultMultipleRender, makeDefaultRender } from './defaultRender';
|
|
19
28
|
import type { BoxProps } from '../Box';
|
|
20
29
|
import { Box } from '../Box';
|
|
21
30
|
import { IconContainer } from '../TextField/IconContainer';
|
|
31
|
+
import { listItemStyle } from '../ListItem';
|
|
22
32
|
|
|
23
33
|
const componentMap = {
|
|
24
34
|
outlined: OutlinedContainer,
|
|
25
35
|
filled: FilledContainer,
|
|
26
36
|
};
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
interface BaseSelectProps
|
|
29
39
|
extends Omit<
|
|
30
|
-
BoxProps<HTMLSelectElement,
|
|
40
|
+
BoxProps<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>,
|
|
31
41
|
'value' | 'defaultValue' | 'onChange'
|
|
32
42
|
> {
|
|
33
43
|
variant?: 'outlined' | 'filled';
|
|
34
44
|
color?: 'primary' | 'secondary';
|
|
35
|
-
label?:
|
|
45
|
+
label?: ReactNode;
|
|
36
46
|
helperText?: string;
|
|
37
|
-
defaultValue?: string;
|
|
38
|
-
value?: string;
|
|
39
47
|
native?: boolean;
|
|
40
48
|
theme?: Theme;
|
|
41
49
|
error?: boolean | string;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
leadingIcon?: React.ReactNode;
|
|
50
|
+
leadingIcon?: ReactNode;
|
|
51
|
+
CustomContainer?: ComponentType<FilledContainerProps>;
|
|
45
52
|
}
|
|
46
53
|
|
|
47
|
-
export
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
54
|
+
export type SelectProps<ValueType extends string> = BaseSelectProps &
|
|
55
|
+
(
|
|
56
|
+
| {
|
|
57
|
+
multiple?: false | undefined;
|
|
58
|
+
value?: ValueType;
|
|
59
|
+
defaultValue?: ValueType;
|
|
60
|
+
onChange?: (
|
|
61
|
+
e: ChangeEvent<HTMLSelectElement>,
|
|
62
|
+
value: ValueType
|
|
63
|
+
) => void;
|
|
64
|
+
renderValue?: (value?: ValueType | '') => ReactNode;
|
|
65
|
+
}
|
|
66
|
+
| {
|
|
67
|
+
multiple: true;
|
|
68
|
+
value?: ValueType[];
|
|
69
|
+
defaultValue?: ValueType[];
|
|
70
|
+
onChange?: (
|
|
71
|
+
e: ChangeEvent<HTMLSelectElement>,
|
|
72
|
+
value: ValueType[]
|
|
73
|
+
) => void;
|
|
74
|
+
renderValue?: (value?: ValueType[]) => ReactNode;
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
export const Select = forwardRef(function Select<ValueType extends string>(
|
|
79
|
+
props: SelectProps<ValueType>,
|
|
80
|
+
forwardedRef: ForwardedRef<HTMLSelectElement | HTMLButtonElement>
|
|
81
|
+
) {
|
|
51
82
|
const {
|
|
52
83
|
id: idProp,
|
|
84
|
+
name,
|
|
53
85
|
variant = 'outlined',
|
|
54
86
|
color = 'primary',
|
|
55
87
|
value: valueProp,
|
|
56
|
-
defaultValue = '',
|
|
88
|
+
defaultValue = props.multiple ? [] : ('' as const),
|
|
57
89
|
disabled,
|
|
58
90
|
error = false,
|
|
59
91
|
label = null,
|
|
@@ -63,26 +95,38 @@ export const Select = forwardRef<
|
|
|
63
95
|
onFocus,
|
|
64
96
|
onBlur,
|
|
65
97
|
native = false,
|
|
98
|
+
multiple = false,
|
|
66
99
|
children,
|
|
67
100
|
renderValue: renderValueProp,
|
|
68
101
|
leadingIcon = null,
|
|
102
|
+
CustomContainer: overwrittenContainer,
|
|
69
103
|
...otherProps
|
|
70
104
|
} = props;
|
|
71
105
|
const [value, onChange] = useControlledState(
|
|
72
106
|
valueProp,
|
|
73
|
-
onChangeProp
|
|
107
|
+
onChangeProp as (
|
|
108
|
+
e: ChangeEvent<HTMLSelectElement>,
|
|
109
|
+
value: ValueType | ValueType[]
|
|
110
|
+
) => void,
|
|
74
111
|
defaultValue,
|
|
75
|
-
(setState) => (e, v) => {
|
|
112
|
+
(setState) => (e, v: ValueType | ValueType[]) => {
|
|
76
113
|
setState(v);
|
|
77
114
|
}
|
|
78
115
|
);
|
|
116
|
+
if (multiple && !Array.isArray(value)) {
|
|
117
|
+
console.warn(
|
|
118
|
+
'Warning: The `value` prop supplied to <Select> must be an array if `multiple` is true.'
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
79
122
|
const [hasFocus, setHasFocus] = useState(false);
|
|
80
123
|
const buttonRef = useRef<HTMLButtonElement | HTMLSelectElement>();
|
|
81
124
|
const [open, setOpen] = useState(false);
|
|
82
125
|
const fallbackId = useId();
|
|
83
126
|
const theme = useTheme();
|
|
84
127
|
|
|
85
|
-
const Container =
|
|
128
|
+
const Container =
|
|
129
|
+
overwrittenContainer || componentMap[variant] || OutlinedContainer;
|
|
86
130
|
|
|
87
131
|
const handleFocus = () => {
|
|
88
132
|
setHasFocus(true);
|
|
@@ -97,11 +141,25 @@ export const Select = forwardRef<
|
|
|
97
141
|
};
|
|
98
142
|
|
|
99
143
|
const handleOnChange = (e: any) => {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
144
|
+
const selectedValue = native
|
|
145
|
+
? e.target.value
|
|
146
|
+
: e.currentTarget.dataset.value;
|
|
147
|
+
|
|
148
|
+
if (multiple && Array.isArray(value)) {
|
|
149
|
+
if (value.find((c) => c === selectedValue)) {
|
|
150
|
+
onChange &&
|
|
151
|
+
onChange(e as any, value.filter((c) => c !== selectedValue) as any);
|
|
152
|
+
} else {
|
|
153
|
+
onChange && onChange(e as any, [...value, selectedValue] as any);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const isMac = Boolean(/mac os|ios/i.test(navigator.userAgent));
|
|
157
|
+
if (e.key === ' ' || (isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
|
|
158
|
+
e.preventDefault();
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
onChange && onChange(e as any, selectedValue);
|
|
162
|
+
}
|
|
105
163
|
};
|
|
106
164
|
|
|
107
165
|
const hasError = Boolean(error);
|
|
@@ -111,11 +169,25 @@ export const Select = forwardRef<
|
|
|
111
169
|
const inputId = `${id}-text-field`;
|
|
112
170
|
const helperTextId = helperText ? `${id}-helper-text` : undefined;
|
|
113
171
|
|
|
114
|
-
const
|
|
172
|
+
const defaultRenderFn = useMemo(
|
|
173
|
+
() =>
|
|
174
|
+
multiple
|
|
175
|
+
? makeDefaultMultipleRender(children)
|
|
176
|
+
: makeDefaultRender<ValueType>(children),
|
|
177
|
+
[children, multiple]
|
|
178
|
+
);
|
|
179
|
+
const renderValue = renderValueProp || defaultRenderFn;
|
|
115
180
|
|
|
116
|
-
|
|
181
|
+
function hasAnySelected() {
|
|
182
|
+
if (multiple) {
|
|
183
|
+
return value.length > 0;
|
|
184
|
+
} else {
|
|
185
|
+
return value !== '';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const labelIsFloating = hasFocus || open || hasAnySelected();
|
|
117
189
|
|
|
118
|
-
const Comp:
|
|
190
|
+
const Comp: ComponentType<any> = native
|
|
119
191
|
? (SelectComp as any)
|
|
120
192
|
: (SelectButton as any);
|
|
121
193
|
|
|
@@ -124,14 +196,17 @@ export const Select = forwardRef<
|
|
|
124
196
|
// is different than the value we have stored in state we need to
|
|
125
197
|
// update our state to reflect that.
|
|
126
198
|
if (native && buttonRef.current && buttonRef.current.value !== value) {
|
|
127
|
-
onChange && onChange({} as any, buttonRef.current.value);
|
|
199
|
+
onChange && onChange({} as any, buttonRef.current.value as ValueType);
|
|
128
200
|
}
|
|
129
201
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
130
202
|
}, []);
|
|
131
203
|
|
|
132
204
|
return (
|
|
133
|
-
<SelectProvider
|
|
205
|
+
<SelectProvider
|
|
206
|
+
value={{ native, onSelect: handleOnChange, value, multiple }}
|
|
207
|
+
>
|
|
134
208
|
<Box display="inline-flex" flexDirection="column" width="100%">
|
|
209
|
+
{!native && <input type="hidden" name={name} value={value} />}
|
|
135
210
|
<Container
|
|
136
211
|
theme={theme}
|
|
137
212
|
label={label}
|
|
@@ -139,7 +214,7 @@ export const Select = forwardRef<
|
|
|
139
214
|
labelIsFloating={labelIsFloating}
|
|
140
215
|
inputId={inputId}
|
|
141
216
|
hasFocus={hasFocus}
|
|
142
|
-
disabled={disabled}
|
|
217
|
+
disabled={disabled ?? false}
|
|
143
218
|
forceActive={open}
|
|
144
219
|
error={hasError}
|
|
145
220
|
leadingIcon={Boolean(leadingIcon)}
|
|
@@ -163,10 +238,12 @@ export const Select = forwardRef<
|
|
|
163
238
|
aria-describedby={helperTextId}
|
|
164
239
|
hasLabel={!!label}
|
|
165
240
|
leadingIcon={Boolean(leadingIcon)}
|
|
241
|
+
name={native ? name : undefined}
|
|
242
|
+
multiple={native ? multiple : undefined}
|
|
166
243
|
trailingIcon={true}
|
|
167
244
|
{...otherProps}
|
|
168
245
|
>
|
|
169
|
-
{native ? children : renderValue(value)}
|
|
246
|
+
{native ? children : renderValue(value as any)}
|
|
170
247
|
</Comp>
|
|
171
248
|
{!native && (
|
|
172
249
|
<MenuPopover usePortal>
|
|
@@ -176,6 +253,11 @@ export const Select = forwardRef<
|
|
|
176
253
|
minWidth: buttonRef?.current?.offsetWidth,
|
|
177
254
|
}}
|
|
178
255
|
role="listbox"
|
|
256
|
+
__css={{
|
|
257
|
+
'& [data-menu-item=""]': {
|
|
258
|
+
...listItemStyle('primary'),
|
|
259
|
+
},
|
|
260
|
+
}}
|
|
179
261
|
>
|
|
180
262
|
{children}
|
|
181
263
|
</MenuList>
|
|
@@ -194,4 +276,8 @@ export const Select = forwardRef<
|
|
|
194
276
|
</Box>
|
|
195
277
|
</SelectProvider>
|
|
196
278
|
);
|
|
197
|
-
})
|
|
279
|
+
}) as <ValueType extends string>(
|
|
280
|
+
p: SelectProps<ValueType> & {
|
|
281
|
+
ref?: Ref<HTMLSelectElement | HTMLButtonElement>;
|
|
282
|
+
}
|
|
283
|
+
) => ReactElement;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { SVGAttributes } from 'react';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import * as React from 'react';
|
|
4
3
|
import { rem } from 'polished';
|
|
5
4
|
|
|
6
5
|
import type { BoxProps } from '../Box';
|
|
7
6
|
import { Box } from '../Box';
|
|
8
7
|
import { alpha } from '../color';
|
|
9
8
|
import { PADDING_RIGHT_WITH_ICON } from '../TextField/consts';
|
|
9
|
+
import { EASING_STANDARD } from '../motion';
|
|
10
10
|
|
|
11
11
|
export type SelectIconProps = BoxProps<
|
|
12
12
|
SVGElement,
|
|
13
|
-
|
|
13
|
+
SVGAttributes<SVGElement>
|
|
14
14
|
> & { open?: boolean };
|
|
15
15
|
|
|
16
16
|
export const SelectIcon = forwardRef<SVGElement, SelectIconProps>(
|
|
@@ -32,8 +32,7 @@ export const SelectIcon = forwardRef<SVGElement, SelectIconProps>(
|
|
|
32
32
|
color: open ? 'primary' : alpha('on.surface', 0.54),
|
|
33
33
|
pointerEvents: 'none',
|
|
34
34
|
transform: open ? 'rotate(180deg)' : undefined,
|
|
35
|
-
transition:
|
|
36
|
-
'transform .15s cubic-bezier(.4,0,.2,1), color .15s cubic-bezier(.4,0,.2,1)',
|
|
35
|
+
transition: `transform .15s ${EASING_STANDARD}, color .15s ${EASING_STANDARD}`,
|
|
37
36
|
}}
|
|
38
37
|
{...otherProps}
|
|
39
38
|
>
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Select } from './';
|
|
4
|
+
import { SelectItem } from '../SelectItem';
|
|
5
|
+
import { Box } from '../Box';
|
|
6
|
+
import { CheckBox } from '../CheckBox';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title: 'components/Select/Multiple',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const SearchIcon = (props: any) => (
|
|
13
|
+
<svg
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
height={24}
|
|
16
|
+
width={24}
|
|
17
|
+
viewBox="0 0 48 48"
|
|
18
|
+
fill="currentColor"
|
|
19
|
+
{...props}
|
|
20
|
+
>
|
|
21
|
+
<path d="M39.8 41.95 26.65 28.8q-1.5 1.3-3.5 2.025-2 .725-4.25.725-5.4 0-9.15-3.75T6 18.75q0-5.3 3.75-9.05 3.75-3.75 9.1-3.75 5.3 0 9.025 3.75 3.725 3.75 3.725 9.05 0 2.15-.7 4.15-.7 2-2.1 3.75L42 39.75Zm-20.95-13.4q4.05 0 6.9-2.875Q28.6 22.8 28.6 18.75t-2.85-6.925Q22.9 8.95 18.85 8.95q-4.1 0-6.975 2.875T9 18.75q0 4.05 2.875 6.925t6.975 2.875Z" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
type OptionType =
|
|
26
|
+
| ''
|
|
27
|
+
| '10'
|
|
28
|
+
| '20'
|
|
29
|
+
| '30'
|
|
30
|
+
| '40'
|
|
31
|
+
| '50'
|
|
32
|
+
| '60'
|
|
33
|
+
| '70'
|
|
34
|
+
| '80'
|
|
35
|
+
| '90'
|
|
36
|
+
| '100'
|
|
37
|
+
| '110'
|
|
38
|
+
| '120'
|
|
39
|
+
| '130';
|
|
40
|
+
|
|
41
|
+
const Example = ({
|
|
42
|
+
variant,
|
|
43
|
+
native = false,
|
|
44
|
+
}: {
|
|
45
|
+
variant?: 'outlined' | 'filled';
|
|
46
|
+
native?: boolean;
|
|
47
|
+
}) => {
|
|
48
|
+
const [error, setError] = useState<boolean | string>(false);
|
|
49
|
+
const [color, setColor] = useState<'primary' | 'secondary'>('primary');
|
|
50
|
+
|
|
51
|
+
/* eslint-disable react/no-children-prop */
|
|
52
|
+
const children = [
|
|
53
|
+
<SelectItem<OptionType> key={1} value={'10'}>
|
|
54
|
+
Ten
|
|
55
|
+
</SelectItem>,
|
|
56
|
+
<SelectItem<OptionType> key={2} value={'20'}>
|
|
57
|
+
Twenty
|
|
58
|
+
</SelectItem>,
|
|
59
|
+
<SelectItem<OptionType> key={3} value={'30'}>
|
|
60
|
+
Thirty
|
|
61
|
+
</SelectItem>,
|
|
62
|
+
<SelectItem<OptionType> key={4} value={'40'}>
|
|
63
|
+
Fourty
|
|
64
|
+
</SelectItem>,
|
|
65
|
+
<SelectItem<OptionType> key={5} value={'50'}>
|
|
66
|
+
Fifty
|
|
67
|
+
</SelectItem>,
|
|
68
|
+
<SelectItem<OptionType> key={6} value={'60'}>
|
|
69
|
+
Sixty
|
|
70
|
+
</SelectItem>,
|
|
71
|
+
<SelectItem<OptionType> key={7} value={'70'}>
|
|
72
|
+
Seventy
|
|
73
|
+
</SelectItem>,
|
|
74
|
+
<SelectItem<OptionType> key={8} value={'80'}>
|
|
75
|
+
Eighty
|
|
76
|
+
</SelectItem>,
|
|
77
|
+
<SelectItem<OptionType> key={9} value={'90'}>
|
|
78
|
+
Ninety
|
|
79
|
+
</SelectItem>,
|
|
80
|
+
<SelectItem<OptionType> key={10} value={'100'}>
|
|
81
|
+
One Hundred
|
|
82
|
+
</SelectItem>,
|
|
83
|
+
<SelectItem<OptionType> key={11} value={'110'}>
|
|
84
|
+
One Hundred Ten
|
|
85
|
+
</SelectItem>,
|
|
86
|
+
<SelectItem<OptionType> key={12} value={'120'}>
|
|
87
|
+
One Hundred Twenty
|
|
88
|
+
</SelectItem>,
|
|
89
|
+
<SelectItem<OptionType> key={13} value={'130'}>
|
|
90
|
+
One Hundred Thirty
|
|
91
|
+
</SelectItem>,
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<Box p={3}>
|
|
96
|
+
{/* <CheckBox
|
|
97
|
+
checked={Boolean(error)}
|
|
98
|
+
onChange={(e) =>
|
|
99
|
+
setError(e.target.checked ? 'This field is required' : false)
|
|
100
|
+
}
|
|
101
|
+
>
|
|
102
|
+
Has Error
|
|
103
|
+
</CheckBox>
|
|
104
|
+
<Box width={230} display="inline-block">
|
|
105
|
+
<Select<'primary' | 'secondary'>
|
|
106
|
+
value={color}
|
|
107
|
+
onChange={(e, value) => setColor(value)}
|
|
108
|
+
label="Color"
|
|
109
|
+
>
|
|
110
|
+
<SelectItem<'primary' | 'secondary'> value="primary">
|
|
111
|
+
Primary
|
|
112
|
+
</SelectItem>
|
|
113
|
+
<SelectItem<'primary' | 'secondary'> value="secondary">
|
|
114
|
+
Secondary
|
|
115
|
+
</SelectItem>
|
|
116
|
+
</Select>
|
|
117
|
+
</Box> */}
|
|
118
|
+
<Box m={3} bg="surface">
|
|
119
|
+
<Box mb={3} width={230}>
|
|
120
|
+
<Select<OptionType>
|
|
121
|
+
error={error}
|
|
122
|
+
color={color}
|
|
123
|
+
native={native}
|
|
124
|
+
multiple
|
|
125
|
+
variant={variant}
|
|
126
|
+
label="Standard"
|
|
127
|
+
helperText="Helper text"
|
|
128
|
+
children={children}
|
|
129
|
+
placeholder="Empty"
|
|
130
|
+
/>
|
|
131
|
+
</Box>
|
|
132
|
+
<Box mb={3} width={230}>
|
|
133
|
+
<Select<OptionType>
|
|
134
|
+
error={error}
|
|
135
|
+
color={color}
|
|
136
|
+
native={native}
|
|
137
|
+
multiple
|
|
138
|
+
variant={variant}
|
|
139
|
+
label="Standard"
|
|
140
|
+
defaultValue={['20']}
|
|
141
|
+
helperText="Helper text"
|
|
142
|
+
children={children}
|
|
143
|
+
/>
|
|
144
|
+
</Box>
|
|
145
|
+
<Box mb={3} width={230}>
|
|
146
|
+
<Select<OptionType>
|
|
147
|
+
error={error}
|
|
148
|
+
color={color}
|
|
149
|
+
native={native}
|
|
150
|
+
multiple
|
|
151
|
+
variant={variant}
|
|
152
|
+
label="Standard"
|
|
153
|
+
children={children}
|
|
154
|
+
/>
|
|
155
|
+
</Box>
|
|
156
|
+
<Box mb={3} width={230}>
|
|
157
|
+
<Select<OptionType>
|
|
158
|
+
error={error}
|
|
159
|
+
color={color}
|
|
160
|
+
native={native}
|
|
161
|
+
multiple
|
|
162
|
+
variant={variant}
|
|
163
|
+
label="Disabled"
|
|
164
|
+
helperText="Helper text"
|
|
165
|
+
disabled
|
|
166
|
+
children={children}
|
|
167
|
+
/>
|
|
168
|
+
</Box>
|
|
169
|
+
<Box mb={3} width={230}>
|
|
170
|
+
<Select<OptionType>
|
|
171
|
+
error={error}
|
|
172
|
+
color={color}
|
|
173
|
+
native={native}
|
|
174
|
+
multiple
|
|
175
|
+
variant={variant}
|
|
176
|
+
label=""
|
|
177
|
+
helperText="Helper text"
|
|
178
|
+
children={children}
|
|
179
|
+
/>
|
|
180
|
+
</Box>
|
|
181
|
+
<Box mb={3} width={230}>
|
|
182
|
+
<Select<OptionType>
|
|
183
|
+
error={error}
|
|
184
|
+
color={color}
|
|
185
|
+
native={native}
|
|
186
|
+
multiple
|
|
187
|
+
variant={variant}
|
|
188
|
+
label=""
|
|
189
|
+
helperText="Helper text"
|
|
190
|
+
children={children}
|
|
191
|
+
leadingIcon={<SearchIcon />}
|
|
192
|
+
/>
|
|
193
|
+
</Box>
|
|
194
|
+
<Box mb={3} width={230}>
|
|
195
|
+
<Select<OptionType>
|
|
196
|
+
error={error}
|
|
197
|
+
color={color}
|
|
198
|
+
native={native}
|
|
199
|
+
multiple
|
|
200
|
+
variant={variant}
|
|
201
|
+
label="Standard"
|
|
202
|
+
helperText="Helper text"
|
|
203
|
+
children={children}
|
|
204
|
+
leadingIcon={<SearchIcon />}
|
|
205
|
+
/>
|
|
206
|
+
</Box>
|
|
207
|
+
</Box>
|
|
208
|
+
</Box>
|
|
209
|
+
);
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const Filled = () => <Example variant="filled" />;
|
|
213
|
+
export const Outlined = () => <Example variant="outlined" />;
|
|
214
|
+
export const FilledNative = () => <Example variant="filled" native />;
|
|
215
|
+
export const OutlinedNative = () => <Example variant="outlined" native />;
|
package/src/Select/context.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
+
import type { MouseEvent, KeyboardEvent } from 'react';
|
|
1
2
|
import { useContext, createContext } from 'react';
|
|
2
3
|
|
|
3
4
|
// Select Component
|
|
4
|
-
export interface SelectContextProps {
|
|
5
|
+
export interface SelectContextProps<ValueType extends string> {
|
|
5
6
|
native: boolean;
|
|
6
|
-
value?:
|
|
7
|
+
value?: ValueType | ValueType[];
|
|
7
8
|
onSelect: (
|
|
8
|
-
e:
|
|
9
|
+
e: MouseEvent<HTMLLIElement> | KeyboardEvent<HTMLLIElement>
|
|
9
10
|
) => void;
|
|
11
|
+
multiple: boolean;
|
|
10
12
|
}
|
|
11
13
|
|
|
12
|
-
const selectContext = createContext<SelectContextProps
|
|
14
|
+
const selectContext = createContext<SelectContextProps<string>>({
|
|
13
15
|
native: false,
|
|
14
16
|
onSelect: () => {
|
|
15
17
|
// noop
|
|
16
18
|
},
|
|
19
|
+
multiple: false,
|
|
17
20
|
});
|
|
18
21
|
export const { Provider: SelectProvider } = selectContext;
|
|
19
22
|
export const useSelectContext = () => useContext(selectContext);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { Children, isValidElement } from 'react';
|
|
3
|
+
|
|
4
|
+
import { Box } from '../Box';
|
|
5
|
+
|
|
6
|
+
export const makeDefaultRender =
|
|
7
|
+
<T extends string>(children?: ReactNode) =>
|
|
8
|
+
(val: T | '' | undefined): ReactNode => {
|
|
9
|
+
if (children && val !== undefined) {
|
|
10
|
+
const allChildren = Children.toArray(children);
|
|
11
|
+
for (let i = 0; i < allChildren.length; i++) {
|
|
12
|
+
const child = allChildren[i];
|
|
13
|
+
if (isValidElement(child) && String(child.props.value) === val) {
|
|
14
|
+
return child.props.children;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return val || undefined;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const makeDefaultMultipleRender =
|
|
22
|
+
<T extends string>(children?: ReactNode) =>
|
|
23
|
+
(val: T[] | undefined): ReactNode => {
|
|
24
|
+
const ret = [];
|
|
25
|
+
if (children && val !== undefined && val.length > 0) {
|
|
26
|
+
const set = new Set<string>(val);
|
|
27
|
+
const allChildren = Children.toArray(children);
|
|
28
|
+
for (let i = 0; i < allChildren.length; i++) {
|
|
29
|
+
const child = allChildren[i];
|
|
30
|
+
if (isValidElement(child) && set.has(String(child.props.value))) {
|
|
31
|
+
ret.push(child.props.children);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<Box
|
|
38
|
+
as="span"
|
|
39
|
+
sx={{
|
|
40
|
+
maxWidth: '100%',
|
|
41
|
+
overflow: 'hidden',
|
|
42
|
+
textOverflow: 'ellipsis',
|
|
43
|
+
whiteSpace: 'nowrap',
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
{ret.join(', ')}
|
|
47
|
+
</Box>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ElementType,
|
|
3
|
+
FC,
|
|
4
|
+
RefAttributes,
|
|
5
|
+
SelectHTMLAttributes,
|
|
6
|
+
} from 'react';
|
|
1
7
|
import { forwardRef } from 'react';
|
|
2
|
-
import * as React from 'react';
|
|
3
8
|
import type { MenuButtonProps } from '@basic-ui/core';
|
|
4
9
|
import { MenuButton as BaseMenuButton } from '@basic-ui/core';
|
|
5
10
|
|
|
6
11
|
import type { Theme } from '../theme';
|
|
7
12
|
import { Input } from '../TextField/Input';
|
|
8
13
|
|
|
9
|
-
export interface SelectProps
|
|
10
|
-
|
|
11
|
-
as?: React.ElementType<any>;
|
|
14
|
+
export interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {
|
|
15
|
+
as?: ElementType<any>;
|
|
12
16
|
variant?: 'filled' | 'outlined';
|
|
13
17
|
hasLabel?: boolean;
|
|
14
18
|
theme: Theme;
|
|
@@ -17,32 +21,18 @@ export interface SelectProps
|
|
|
17
21
|
|
|
18
22
|
export const Select = forwardRef<HTMLSelectElement, SelectProps>(
|
|
19
23
|
({ as: asProp = 'select', ...props }, forwardedRef) => {
|
|
20
|
-
const InputSelect:
|
|
21
|
-
|
|
22
|
-
> = Input as any;
|
|
24
|
+
const InputSelect: FC<SelectProps & RefAttributes<HTMLSelectElement>> =
|
|
25
|
+
Input as any;
|
|
23
26
|
|
|
24
27
|
return <InputSelect as={asProp} ref={forwardedRef} {...props} />;
|
|
25
28
|
}
|
|
26
29
|
);
|
|
27
30
|
|
|
28
|
-
const SelectButtonInner = forwardRef<
|
|
29
|
-
HTMLButtonElement,
|
|
30
|
-
SelectProps & { innerAs?: React.ElementType<any> }
|
|
31
|
-
>(({ innerAs = 'div', ...props }, forwardedRef) => {
|
|
32
|
-
const InputButton: React.FC<
|
|
33
|
-
SelectProps & React.RefAttributes<HTMLButtonElement>
|
|
34
|
-
> = Input as any;
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<InputButton as={innerAs} ref={forwardedRef} tabIndex={0} {...props} />
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
31
|
export const SelectButton = forwardRef<
|
|
42
32
|
HTMLButtonElement,
|
|
43
33
|
SelectProps & MenuButtonProps
|
|
44
|
-
>(({ as, children, ...props }, ref) => (
|
|
45
|
-
<BaseMenuButton as={
|
|
34
|
+
>(({ as = 'div', children, ...props }, ref) => (
|
|
35
|
+
<BaseMenuButton as={Input} innerAs={as} ref={ref} tabIndex={0} {...props}>
|
|
46
36
|
{children}
|
|
47
37
|
</BaseMenuButton>
|
|
48
38
|
));
|