@bspk/ui 1.3.7 → 1.3.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/dist/components/Accordion/Accordion.d.ts +19 -3
- package/dist/components/Accordion/Accordion.js +20 -3
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +13 -14
- package/dist/components/Avatar/Avatar.js +13 -14
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +29 -12
- package/dist/components/AvatarGroup/AvatarGroup.js +29 -12
- package/dist/components/AvatarGroup/AvatarGroup.js.map +1 -1
- package/dist/components/Badge/Badge.d.ts +1 -3
- package/dist/components/Badge/Badge.js +1 -3
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/BadgeDot/BadgeDot.d.ts +4 -4
- package/dist/components/BadgeDot/BadgeDot.js +5 -4
- package/dist/components/BadgeDot/BadgeDot.js.map +1 -1
- package/dist/components/BannerAlert/BannerAlert.d.ts +11 -12
- package/dist/components/BannerAlert/BannerAlert.js +11 -12
- package/dist/components/BannerAlert/BannerAlert.js.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigation.d.ts +6 -3
- package/dist/components/BottomNavigation/BottomNavigation.js +6 -3
- package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
- package/dist/components/BottomNavigation/BottomNavigationExample.js +31 -36
- package/dist/components/BottomNavigation/BottomNavigationExample.js.map +1 -1
- package/dist/components/BottomNavigation/bottom-navigation.css +8 -1
- package/dist/components/BottomNavigation/bottom-navigation.css.js +8 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +17 -18
- package/dist/components/Breadcrumb/Breadcrumb.js +17 -18
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Button/Button.d.ts +1 -11
- package/dist/components/Button/Button.js +1 -11
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/ButtonExample.js +1 -3
- package/dist/components/Button/ButtonExample.js.map +1 -1
- package/dist/components/ButtonDock/ButtonDock.d.ts +10 -14
- package/dist/components/ButtonDock/ButtonDock.js +10 -14
- package/dist/components/ButtonDock/ButtonDock.js.map +1 -1
- package/dist/components/Card/Card.d.ts +8 -10
- package/dist/components/Card/Card.js +6 -10
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Carousel/Carousel.d.ts +9 -13
- package/dist/components/Carousel/Carousel.js +9 -13
- package/dist/components/Carousel/Carousel.js.map +1 -1
- package/dist/components/Carousel/CarouselExample.js +14 -14
- package/dist/components/Carousel/CarouselExample.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +7 -4
- package/dist/components/Checkbox/Checkbox.js +7 -4
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/CheckboxExample.js +4 -1
- package/dist/components/Checkbox/CheckboxExample.js.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/dist/components/CheckboxGroup/CheckboxGroup.js +3 -3
- package/dist/components/CheckboxOption/CheckboxOption.d.ts +4 -4
- package/dist/components/CheckboxOption/CheckboxOption.js +4 -4
- package/dist/components/Chip/Chip.d.ts +3 -7
- package/dist/components/Chip/Chip.js +3 -7
- package/dist/components/Chip/Chip.js.map +1 -1
- package/dist/components/Chip/ChipExample.js +50 -3
- package/dist/components/Chip/ChipExample.js.map +1 -1
- package/dist/components/ChipGroup/ChipGroup.d.ts +21 -10
- package/dist/components/ChipGroup/ChipGroup.js +21 -10
- package/dist/components/ChipGroup/ChipGroup.js.map +1 -1
- package/dist/components/ChipGroup/ChipGroupExample.js +1 -0
- package/dist/components/ChipGroup/ChipGroupExample.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +13 -12
- package/dist/components/DatePicker/DatePicker.js +13 -12
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/Dialog/Dialog.d.ts +11 -6
- package/dist/components/Dialog/Dialog.js +11 -6
- package/dist/components/Dialog/Dialog.js.map +1 -1
- package/dist/components/Divider/Divider.d.ts +5 -9
- package/dist/components/Divider/Divider.js +5 -9
- package/dist/components/Divider/Divider.js.map +1 -1
- package/dist/components/Divider/DividerExample.js +16 -1
- package/dist/components/Divider/DividerExample.js.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +3 -3
- package/dist/components/Drawer/Drawer.js +3 -3
- package/dist/components/EmptyState/EmptyState.d.ts +3 -7
- package/dist/components/EmptyState/EmptyState.js +3 -7
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/Fab/Fab.d.ts +4 -5
- package/dist/components/Fab/Fab.js +4 -6
- package/dist/components/Fab/Fab.js.map +1 -1
- package/dist/components/Fab/FabExample.d.ts +2 -1
- package/dist/components/Fab/FabExample.js +20 -2
- package/dist/components/Fab/FabExample.js.map +1 -1
- package/dist/components/Field/Field.d.ts +4 -5
- package/dist/components/Field/Field.js +4 -5
- package/dist/components/Field/Field.js.map +1 -1
- package/dist/components/FileUpload/FileUpload.d.ts +3 -3
- package/dist/components/FileUpload/FileUpload.js +3 -3
- package/dist/components/FileUploadItem/FileUploadItem.d.ts +6 -10
- package/dist/components/FileUploadItem/FileUploadItem.js +6 -10
- package/dist/components/FileUploadItem/FileUploadItem.js.map +1 -1
- package/dist/components/FormField/FormField.d.ts +5 -16
- package/dist/components/FormField/FormField.js +5 -16
- package/dist/components/FormField/FormField.js.map +1 -1
- package/dist/components/Img/Img.d.ts +1 -3
- package/dist/components/Img/Img.js +1 -3
- package/dist/components/Img/Img.js.map +1 -1
- package/dist/components/InlineAlert/InlineAlert.d.ts +1 -3
- package/dist/components/InlineAlert/InlineAlert.js +1 -3
- package/dist/components/InlineAlert/InlineAlert.js.map +1 -1
- package/dist/components/Input/Input.d.ts +13 -13
- package/dist/components/Input/Input.js +13 -13
- package/dist/components/Input/InputElement.d.ts +11 -5
- package/dist/components/Input/InputElement.js +11 -5
- package/dist/components/Input/InputElement.js.map +1 -1
- package/dist/components/Input/InputExample.js +1 -0
- package/dist/components/Input/InputExample.js.map +1 -1
- package/dist/components/InputNumber/InputNumber.d.ts +20 -20
- package/dist/components/InputNumber/InputNumber.js +20 -20
- package/dist/components/InputNumber/InputNumberExample.js +3 -0
- package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
- package/dist/components/InputPhone/InputPhone.d.ts +21 -16
- package/dist/components/InputPhone/InputPhone.js +21 -16
- package/dist/components/InputPhone/InputPhone.js.map +1 -1
- package/dist/components/InputPhone/InputPhoneExample.js +3 -0
- package/dist/components/InputPhone/InputPhoneExample.js.map +1 -1
- package/dist/components/Layout/Layout.d.ts +1 -3
- package/dist/components/Layout/Layout.js +1 -3
- package/dist/components/Layout/Layout.js.map +1 -1
- package/dist/components/Link/Link.d.ts +1 -3
- package/dist/components/Link/Link.js +1 -3
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/ListItem/ListItem.d.ts +22 -21
- package/dist/components/ListItem/ListItem.js +19 -16
- package/dist/components/ListItem/ListItem.js.map +1 -1
- package/dist/components/Menu/Menu.d.ts +5 -9
- package/dist/components/Menu/Menu.js +5 -9
- package/dist/components/Menu/Menu.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts +4 -4
- package/dist/components/Modal/Modal.js +4 -4
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/modal.css +12 -1
- package/dist/components/Modal/modal.css.js +12 -1
- package/dist/components/OTPInput/OTPInput.d.ts +1 -3
- package/dist/components/OTPInput/OTPInput.js +1 -3
- package/dist/components/OTPInput/OTPInput.js.map +1 -1
- package/dist/components/PageControl/PageControl.d.ts +1 -3
- package/dist/components/PageControl/PageControl.js +1 -3
- package/dist/components/PageControl/PageControl.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +6 -7
- package/dist/components/Pagination/Pagination.js +28 -15
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/pagination.css +5 -14
- package/dist/components/Pagination/pagination.css.js +5 -14
- package/dist/components/Password/Password.d.ts +19 -20
- package/dist/components/Password/Password.js +19 -20
- package/dist/components/Password/Password.js.map +1 -1
- package/dist/components/Password/PasswordExample.d.ts +3 -0
- package/dist/components/Password/PasswordExample.js +6 -0
- package/dist/components/Password/PasswordExample.js.map +1 -0
- package/dist/components/Popover/Popover.d.ts +11 -20
- package/dist/components/Popover/Popover.js +11 -20
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/PopoverExample.js +1 -1
- package/dist/components/Popover/PopoverExample.js.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +1 -3
- package/dist/components/ProgressBar/ProgressBar.js +1 -3
- package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.d.ts +1 -3
- package/dist/components/ProgressCircle/ProgressCircle.js +1 -3
- package/dist/components/ProgressCircle/ProgressCircle.js.map +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepper.d.ts +1 -3
- package/dist/components/ProgressionStepper/ProgressionStepper.js +1 -3
- package/dist/components/ProgressionStepper/ProgressionStepper.js.map +1 -1
- package/dist/components/Radio/RadioExample.js +4 -1
- package/dist/components/Radio/RadioExample.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/dist/components/RadioGroup/RadioGroup.js +2 -2
- package/dist/components/Rating/Rating.d.ts +2 -4
- package/dist/components/Rating/Rating.js +8 -6
- package/dist/components/Rating/Rating.js.map +1 -1
- package/dist/components/Rating/RatingExample.js +17 -1
- package/dist/components/Rating/RatingExample.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.d.ts +2 -2
- package/dist/components/SearchBar/SearchBar.js +2 -2
- package/dist/components/SearchBar/SearchBarExample.js +3 -0
- package/dist/components/SearchBar/SearchBarExample.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +3 -3
- package/dist/components/SegmentedControl/SegmentedControl.js +3 -3
- package/dist/components/SegmentedControl/SegmentedControlExample.js +10 -12
- package/dist/components/SegmentedControl/SegmentedControlExample.js.map +1 -1
- package/dist/components/Select/Select.d.ts +24 -25
- package/dist/components/Select/Select.js +24 -25
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/SelectExample.js +1 -0
- package/dist/components/Select/SelectExample.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +10 -14
- package/dist/components/Skeleton/Skeleton.js +10 -14
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Skeleton/SkeletonExample.js +4 -3
- package/dist/components/Skeleton/SkeletonExample.js.map +1 -1
- package/dist/components/SkeletonText/SkeletonText.d.ts +5 -9
- package/dist/components/SkeletonText/SkeletonText.js +5 -9
- package/dist/components/SkeletonText/SkeletonText.js.map +1 -1
- package/dist/components/Slider/Slider.d.ts +2 -2
- package/dist/components/Slider/Slider.js +2 -2
- package/dist/components/Slider/SliderExample.js +40 -18
- package/dist/components/Slider/SliderExample.js.map +1 -1
- package/dist/components/Snackbar/Manager.d.ts +29 -0
- package/dist/components/Snackbar/Manager.js +35 -0
- package/dist/components/Snackbar/Manager.js.map +1 -0
- package/dist/components/Snackbar/Snackbar.d.ts +23 -5
- package/dist/components/Snackbar/Snackbar.js +23 -4
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/Snackbar/SnackbarExample.js +8 -1
- package/dist/components/Snackbar/SnackbarExample.js.map +1 -1
- package/dist/components/Snackbar/index.d.ts +1 -0
- package/dist/components/Snackbar/index.js +1 -0
- package/dist/components/Snackbar/index.js.map +1 -1
- package/dist/components/StylesProviderDemo/StylesProviderDemo.d.ts +1 -3
- package/dist/components/StylesProviderDemo/StylesProviderDemo.js +1 -3
- package/dist/components/StylesProviderDemo/StylesProviderDemo.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +2 -2
- package/dist/components/Switch/Switch.js +2 -2
- package/dist/components/Switch/SwitchExample.js +4 -1
- package/dist/components/Switch/SwitchExample.js.map +1 -1
- package/dist/components/TabGroup/TabGroup.d.ts +2 -2
- package/dist/components/TabGroup/TabGroup.js +2 -2
- package/dist/components/TabGroup/TabGroupExample.js +5 -11
- package/dist/components/TabGroup/TabGroupExample.js.map +1 -1
- package/dist/components/TabGroup/tab-group.css +1 -0
- package/dist/components/TabGroup/tab-group.css.js +1 -0
- package/dist/components/TabList/TabList.d.ts +2 -2
- package/dist/components/TabList/TabList.js +2 -2
- package/dist/components/TabList/tab-list.css +0 -1
- package/dist/components/TabList/tab-list.css.js +0 -1
- package/dist/components/Table/Table.d.ts +53 -16
- package/dist/components/Table/Table.js +53 -16
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/table.css +0 -1
- package/dist/components/Table/table.css.js +0 -1
- package/dist/components/Tag/Tag.d.ts +1 -3
- package/dist/components/Tag/Tag.js +1 -3
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +13 -13
- package/dist/components/Textarea/Textarea.js +13 -13
- package/dist/components/Textarea/TextareaExample.js +3 -0
- package/dist/components/Textarea/TextareaExample.js.map +1 -1
- package/dist/components/TimePicker/TimePicker.d.ts +14 -14
- package/dist/components/TimePicker/TimePicker.js +14 -14
- package/dist/components/TimePicker/TimePickerExample.js +3 -0
- package/dist/components/TimePicker/TimePickerExample.js.map +1 -1
- package/dist/components/ToggleOption/ToggleOption.js +1 -1
- package/dist/components/ToggleOption/ToggleOption.js.map +1 -1
- package/dist/components/ToggleOption/toggle-option.css +2 -49
- package/dist/components/ToggleOption/toggle-option.css.js +2 -49
- package/dist/components/Tooltip/Tooltip.d.ts +3 -7
- package/dist/components/Tooltip/Tooltip.js +3 -7
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/TooltipExample.js +23 -3
- package/dist/components/Tooltip/TooltipExample.js.map +1 -1
- package/dist/components/Txt/Txt.d.ts +1 -3
- package/dist/components/Txt/Txt.js +1 -3
- package/dist/components/Txt/Txt.js.map +1 -1
- package/dist/components/UIProvider/AriaLiveMessageHandler.js +3 -2
- package/dist/components/UIProvider/AriaLiveMessageHandler.js.map +1 -1
- package/dist/hooks/useAddEventListener.d.ts +1 -2
- package/dist/hooks/useAddEventListener.js.map +1 -1
- package/dist/hooks/useRadioState.d.ts +1 -1
- package/dist/hooks/useTimeout.d.ts +1 -2
- package/dist/hooks/useTimeout.js +20 -4
- package/dist/hooks/useTimeout.js.map +1 -1
- package/dist/types/common.d.ts +3 -0
- package/dist/types/common.js.map +1 -1
- package/dist/types/meta.d.ts +1 -0
- package/dist/types/meta.js.map +1 -1
- package/dist/utils/createCustomEvent.d.ts +17 -0
- package/dist/utils/createCustomEvent.js +21 -0
- package/dist/utils/createCustomEvent.js.map +1 -0
- package/dist/utils/createExampleChildElement.js +3 -3
- package/dist/utils/createExampleChildElement.js.map +1 -1
- package/dist/utils/demo.d.ts +18 -26
- package/dist/utils/demo.js.map +1 -1
- package/meta.ts +6 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.tsx +20 -3
- package/src/components/Avatar/Avatar.tsx +13 -14
- package/src/components/AvatarGroup/AvatarGroup.tsx +30 -13
- package/src/components/Badge/Badge.tsx +1 -3
- package/src/components/BadgeDot/BadgeDot.tsx +6 -4
- package/src/components/BannerAlert/BannerAlert.tsx +11 -12
- package/src/components/BottomNavigation/BottomNavigation.tsx +6 -3
- package/src/components/BottomNavigation/BottomNavigationExample.tsx +31 -36
- package/src/components/BottomNavigation/bottom-navigation.scss +10 -1
- package/src/components/Breadcrumb/Breadcrumb.tsx +17 -18
- package/src/components/Button/Button.tsx +1 -11
- package/src/components/Button/ButtonExample.tsx +1 -2
- package/src/components/ButtonDock/ButtonDock.tsx +10 -14
- package/src/components/Card/Card.tsx +9 -11
- package/src/components/Carousel/Carousel.tsx +9 -13
- package/src/components/Carousel/CarouselExample.tsx +25 -25
- package/src/components/Checkbox/Checkbox.tsx +7 -4
- package/src/components/Checkbox/CheckboxExample.tsx +4 -3
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +3 -3
- package/src/components/CheckboxOption/CheckboxOption.tsx +4 -4
- package/src/components/Chip/Chip.tsx +3 -7
- package/src/components/Chip/ChipExample.tsx +52 -3
- package/src/components/ChipGroup/ChipGroup.tsx +21 -10
- package/src/components/ChipGroup/ChipGroupExample.tsx +1 -1
- package/src/components/DatePicker/DatePicker.tsx +13 -12
- package/src/components/Dialog/Dialog.tsx +11 -6
- package/src/components/Divider/Divider.tsx +5 -9
- package/src/components/Divider/DividerExample.tsx +18 -1
- package/src/components/Drawer/Drawer.tsx +3 -3
- package/src/components/EmptyState/EmptyState.tsx +3 -7
- package/src/components/Fab/Fab.tsx +8 -5
- package/src/components/Fab/FabExample.tsx +22 -3
- package/src/components/Field/Field.tsx +4 -5
- package/src/components/FileUpload/FileUpload.tsx +3 -3
- package/src/components/FileUploadItem/FileUploadItem.tsx +6 -10
- package/src/components/FormField/FormField.tsx +5 -16
- package/src/components/Img/Img.tsx +1 -3
- package/src/components/InlineAlert/InlineAlert.tsx +1 -3
- package/src/components/Input/Input.tsx +13 -13
- package/src/components/Input/InputElement.tsx +11 -5
- package/src/components/Input/InputExample.tsx +1 -0
- package/src/components/InputNumber/InputNumber.tsx +20 -20
- package/src/components/InputNumber/InputNumberExample.tsx +3 -0
- package/src/components/InputPhone/InputPhone.tsx +21 -16
- package/src/components/InputPhone/InputPhoneExample.tsx +3 -0
- package/src/components/Layout/Layout.tsx +1 -3
- package/src/components/Link/Link.tsx +1 -3
- package/src/components/ListItem/ListItem.tsx +22 -20
- package/src/components/Menu/Menu.tsx +5 -9
- package/src/components/Modal/Modal.tsx +10 -5
- package/src/components/Modal/modal.scss +13 -1
- package/src/components/OTPInput/OTPInput.tsx +1 -3
- package/src/components/PageControl/PageControl.tsx +1 -3
- package/src/components/Pagination/Pagination.tsx +50 -24
- package/src/components/Pagination/pagination.scss +7 -17
- package/src/components/Password/Password.tsx +19 -20
- package/src/components/Password/PasswordExample.tsx +8 -0
- package/src/components/Popover/Popover.tsx +11 -20
- package/src/components/Popover/PopoverExample.tsx +1 -1
- package/src/components/ProgressBar/ProgressBar.tsx +1 -3
- package/src/components/ProgressCircle/ProgressCircle.tsx +1 -3
- package/src/components/ProgressionStepper/ProgressionStepper.tsx +1 -3
- package/src/components/Radio/RadioExample.tsx +4 -3
- package/src/components/RadioGroup/RadioGroup.tsx +2 -2
- package/src/components/Rating/Rating.tsx +34 -14
- package/src/components/Rating/RatingExample.tsx +18 -1
- package/src/components/SearchBar/SearchBar.tsx +2 -2
- package/src/components/SearchBar/SearchBarExample.tsx +3 -0
- package/src/components/SegmentedControl/SegmentedControl.tsx +3 -3
- package/src/components/SegmentedControl/SegmentedControlExample.tsx +10 -12
- package/src/components/Select/Select.tsx +24 -25
- package/src/components/Select/SelectExample.tsx +1 -0
- package/src/components/Skeleton/Skeleton.tsx +10 -14
- package/src/components/Skeleton/SkeletonExample.tsx +5 -3
- package/src/components/SkeletonText/SkeletonText.tsx +5 -9
- package/src/components/Slider/Slider.tsx +2 -2
- package/src/components/Slider/SliderExample.tsx +42 -17
- package/src/components/Snackbar/Manager.tsx +64 -0
- package/src/components/Snackbar/Snackbar.tsx +23 -6
- package/src/components/Snackbar/SnackbarExample.tsx +28 -6
- package/src/components/Snackbar/index.tsx +1 -0
- package/src/components/StylesProviderDemo/StylesProviderDemo.tsx +1 -3
- package/src/components/Switch/Switch.tsx +2 -2
- package/src/components/Switch/SwitchExample.tsx +4 -1
- package/src/components/TabGroup/TabGroup.tsx +2 -2
- package/src/components/TabGroup/TabGroupExample.tsx +5 -11
- package/src/components/TabGroup/tab-group.scss +1 -0
- package/src/components/TabList/TabList.tsx +2 -2
- package/src/components/TabList/tab-list.scss +0 -1
- package/src/components/Table/Table.tsx +53 -16
- package/src/components/Table/table.scss +0 -1
- package/src/components/Tag/Tag.tsx +1 -3
- package/src/components/Textarea/Textarea.tsx +13 -13
- package/src/components/Textarea/TextareaExample.tsx +3 -0
- package/src/components/TimePicker/TimePicker.tsx +14 -14
- package/src/components/TimePicker/TimePickerExample.tsx +3 -1
- package/src/components/ToggleOption/ToggleOption.tsx +1 -0
- package/src/components/ToggleOption/toggle-option.scss +2 -61
- package/src/components/Tooltip/Tooltip.tsx +3 -7
- package/src/components/Tooltip/TooltipExample.tsx +23 -11
- package/src/components/Txt/Txt.tsx +1 -3
- package/src/components/UIProvider/AriaLiveMessageHandler.tsx +4 -2
- package/src/hooks/useAddEventListener.ts +1 -3
- package/src/hooks/useTimeout.ts +1 -5
- package/src/types/common.ts +4 -0
- package/src/types/meta.ts +1 -0
- package/src/utils/createCustomEvent.ts +35 -0
- package/src/utils/createExampleChildElement.tsx +3 -8
- package/src/utils/demo.ts +24 -27
- package/dist/components/ListItem/ListItemButton.d.ts +0 -2
- package/dist/components/ListItem/ListItemButton.js +0 -7
- package/dist/components/ListItem/ListItemButton.js.map +0 -1
- package/dist/components/Pagination/PageInput.d.ts +0 -4
- package/dist/components/Pagination/PageInput.js +0 -36
- package/dist/components/Pagination/PageInput.js.map +0 -1
- package/dist/hooks/usePaginationState.d.ts +0 -4
- package/dist/hooks/usePaginationState.js +0 -22
- package/dist/hooks/usePaginationState.js.map +0 -1
- package/src/components/ListItem/ListItemButton.tsx +0 -6
- package/src/components/Pagination/PageInput.tsx +0 -65
- package/src/hooks/usePaginationState.tsx +0 -24
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ComponentExample, createUid } from '-/utils/demo';
|
|
2
2
|
|
|
3
3
|
export const RadioExample: ComponentExample = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
defaultState: {
|
|
5
|
+
'aria-label': 'radio aria-label',
|
|
6
|
+
},
|
|
7
|
+
render: ({ props, Component }) => <Component {...props} name={createUid('radio')} />,
|
|
7
8
|
};
|
|
@@ -40,7 +40,7 @@ export type RadioGroupProps = Omit<FieldControlProps, 'readOnly'> & {
|
|
|
40
40
|
* import { useState } from 'react';
|
|
41
41
|
* import { RadioGroup } from '@bspk/ui/RadioGroup';
|
|
42
42
|
*
|
|
43
|
-
*
|
|
43
|
+
* () => {
|
|
44
44
|
* const [selectedOption, setSelectedOption] = useState<string>('1');
|
|
45
45
|
*
|
|
46
46
|
* return (
|
|
@@ -59,7 +59,7 @@ export type RadioGroupProps = Omit<FieldControlProps, 'readOnly'> & {
|
|
|
59
59
|
* value={selectedOption}
|
|
60
60
|
* />
|
|
61
61
|
* );
|
|
62
|
-
* }
|
|
62
|
+
* };
|
|
63
63
|
*
|
|
64
64
|
* @name RadioGroup
|
|
65
65
|
* @phase UXReview
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import './rating.scss';
|
|
2
2
|
import { SvgStarFill } from '@bspk/icons/StarFill';
|
|
3
|
-
import { ElementType } from 'react';
|
|
4
3
|
|
|
5
4
|
export type RatingSize = 'large' | 'medium' | 'small';
|
|
6
5
|
export type RatingProps = {
|
|
@@ -12,7 +11,7 @@ export type RatingProps = {
|
|
|
12
11
|
*/
|
|
13
12
|
value?: number;
|
|
14
13
|
/**
|
|
15
|
-
* If included the component is
|
|
14
|
+
* If included the component is interactive and this callback is fired when the user selects a new rating value.
|
|
16
15
|
*
|
|
17
16
|
* @param value - The new value of the rating.
|
|
18
17
|
*/
|
|
@@ -39,37 +38,58 @@ const iconWidths: Record<RatingSize, number> = {
|
|
|
39
38
|
* @example
|
|
40
39
|
* import { Rating } from '@bspk/ui/Rating';
|
|
41
40
|
*
|
|
42
|
-
*
|
|
43
|
-
* return <Rating value={4.5} />;
|
|
44
|
-
* }
|
|
41
|
+
* <Rating value={4.5} size="large" />;
|
|
45
42
|
*
|
|
46
43
|
* @name Rating
|
|
47
44
|
* @phase UXReview
|
|
48
45
|
*/
|
|
49
46
|
export function Rating({ size = 'medium', value, onChange }: RatingProps) {
|
|
50
|
-
|
|
47
|
+
if (!onChange)
|
|
48
|
+
return (
|
|
49
|
+
<div
|
|
50
|
+
aria-label={value ? `${value} out of ${MAX_STARS} stars` : 'Rating'}
|
|
51
|
+
data-bspk="rating"
|
|
52
|
+
data-size={size}
|
|
53
|
+
role="img"
|
|
54
|
+
>
|
|
55
|
+
{Array.from({ length: MAX_STARS }, (_, index) => {
|
|
56
|
+
const fill = getFill(index + 1, value);
|
|
57
|
+
return (
|
|
58
|
+
<div data-fill={fill} data-star key={index} role="presentation" tabIndex={-1}>
|
|
59
|
+
<SvgStarFill width={iconWidths[size]} />
|
|
60
|
+
{fill === 'half' && (
|
|
61
|
+
<div data-fill-half>
|
|
62
|
+
<div data-star>
|
|
63
|
+
<SvgStarFill width={iconWidths[size]} />
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
)}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
})}
|
|
70
|
+
</div>
|
|
71
|
+
);
|
|
51
72
|
|
|
52
73
|
return (
|
|
53
74
|
<div
|
|
54
|
-
aria-label={
|
|
75
|
+
aria-label={value ? `${value} out of ${MAX_STARS} stars` : 'Select a star rating'}
|
|
55
76
|
data-bspk="rating"
|
|
56
77
|
data-size={size}
|
|
57
|
-
role=
|
|
78
|
+
role="radiogroup"
|
|
58
79
|
>
|
|
59
80
|
{Array.from({ length: MAX_STARS }, (_, index) => {
|
|
60
81
|
const fill = getFill(index + 1, value);
|
|
61
82
|
const selected = value !== undefined && Math.floor(value) === index;
|
|
62
83
|
return (
|
|
63
|
-
<
|
|
84
|
+
<button
|
|
64
85
|
aria-checked={selected}
|
|
65
|
-
aria-
|
|
66
|
-
aria-label={onChange ? `Rate ${index + 1}` : undefined}
|
|
86
|
+
aria-label={`Rate ${index + 1}`}
|
|
67
87
|
data-fill={fill}
|
|
68
88
|
data-star
|
|
69
89
|
key={index}
|
|
70
90
|
onClick={() => onChange?.(index + 1)}
|
|
71
|
-
role=
|
|
72
|
-
tabIndex={
|
|
91
|
+
role="radio"
|
|
92
|
+
tabIndex={selected ? 0 : -1}
|
|
73
93
|
type="button"
|
|
74
94
|
>
|
|
75
95
|
<SvgStarFill width={iconWidths[size]} />
|
|
@@ -80,7 +100,7 @@ export function Rating({ size = 'medium', value, onChange }: RatingProps) {
|
|
|
80
100
|
</div>
|
|
81
101
|
</div>
|
|
82
102
|
)}
|
|
83
|
-
</
|
|
103
|
+
</button>
|
|
84
104
|
);
|
|
85
105
|
})}
|
|
86
106
|
</div>
|
|
@@ -3,11 +3,28 @@ import { ComponentExampleFn, Preset } from '-/utils/demo';
|
|
|
3
3
|
|
|
4
4
|
export const presets: Preset<RatingProps>[] = [
|
|
5
5
|
{
|
|
6
|
-
label: '
|
|
6
|
+
label: 'Read Only, No Value',
|
|
7
7
|
propState: {
|
|
8
8
|
onChange: undefined,
|
|
9
|
+
value: undefined,
|
|
9
10
|
},
|
|
10
11
|
},
|
|
12
|
+
{
|
|
13
|
+
label: 'Read Only',
|
|
14
|
+
propState: {
|
|
15
|
+
onChange: undefined,
|
|
16
|
+
value: 4.5,
|
|
17
|
+
},
|
|
18
|
+
designPattern: 'A read only representation of ratings, a scale of 1 to 5.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: 'Interactive',
|
|
22
|
+
propState: {
|
|
23
|
+
onChange: () => {},
|
|
24
|
+
},
|
|
25
|
+
designPattern:
|
|
26
|
+
'Interactive control that allow customers to indicate their feelings about an experience or product on a scale of 1 to 5.',
|
|
27
|
+
},
|
|
11
28
|
];
|
|
12
29
|
|
|
13
30
|
export const RatingExample: ComponentExampleFn<RatingProps> = () => {
|
|
@@ -72,7 +72,7 @@ export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Omit<
|
|
|
72
72
|
* import { useState } from 'react';
|
|
73
73
|
* import { SearchBar } from '@bspk/ui/SearchBar';
|
|
74
74
|
*
|
|
75
|
-
*
|
|
75
|
+
* () => {
|
|
76
76
|
* const [searchText, setSearchText] = useState('');
|
|
77
77
|
*
|
|
78
78
|
* return (
|
|
@@ -96,7 +96,7 @@ export type SearchBarProps<O extends SearchBarOption = SearchBarOption> = Omit<
|
|
|
96
96
|
* onChange={setSearchText}
|
|
97
97
|
* />
|
|
98
98
|
* );
|
|
99
|
-
* }
|
|
99
|
+
* };
|
|
100
100
|
*
|
|
101
101
|
* @name SearchBar
|
|
102
102
|
* @phase UXReview
|
|
@@ -3,6 +3,9 @@ import { ComponentExample } from '-/utils/demo';
|
|
|
3
3
|
import { randomString } from '-/utils/random';
|
|
4
4
|
|
|
5
5
|
export const SearchBarExample: ComponentExample<SearchBarProps> = {
|
|
6
|
+
defaultState: {
|
|
7
|
+
'aria-label': 'search bar aria-label',
|
|
8
|
+
},
|
|
6
9
|
render: ({ props, Component }) => {
|
|
7
10
|
return <Component {...props} id={`search-bar-${randomString(8)}`} />;
|
|
8
11
|
},
|
|
@@ -12,8 +12,8 @@ export type SegmentedControlProps = TabListProps<SegmentedControlOption>;
|
|
|
12
12
|
* import { useState } from 'react';
|
|
13
13
|
* import { SegmentedControl } from '@bspk/ui/SegmentedControl';
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
* const [selectedOption, setSelectedOption] = useState<string>();
|
|
15
|
+
* () => {
|
|
16
|
+
* const [selectedOption, setSelectedOption] = useState<string>('');
|
|
17
17
|
*
|
|
18
18
|
* return (
|
|
19
19
|
* <SegmentedControl
|
|
@@ -26,7 +26,7 @@ export type SegmentedControlProps = TabListProps<SegmentedControlOption>;
|
|
|
26
26
|
* value={selectedOption}
|
|
27
27
|
* />
|
|
28
28
|
* );
|
|
29
|
-
* }
|
|
29
|
+
* };
|
|
30
30
|
*
|
|
31
31
|
* @name SegmentedControl
|
|
32
32
|
* @phase UXReview
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { SvgCircle } from '@bspk/icons/Circle';
|
|
2
|
-
import { SvgDiamond } from '@bspk/icons/Diamond';
|
|
3
|
-
import { SvgDiamondFill } from '@bspk/icons/DiamondFill';
|
|
4
|
-
import { SvgSquare } from '@bspk/icons/Square';
|
|
5
|
-
import { SvgSquareFill } from '@bspk/icons/SquareFill';
|
|
6
|
-
|
|
7
1
|
import { SegmentedControlOption, SegmentedControlProps } from '.';
|
|
8
2
|
import { ComponentExample, Preset } from '-/utils/demo';
|
|
9
3
|
|
|
@@ -11,20 +5,20 @@ const PRESET_OPTIONS: SegmentedControlOption[] = [
|
|
|
11
5
|
{
|
|
12
6
|
value: '1',
|
|
13
7
|
label: 'Option 1',
|
|
14
|
-
icon:
|
|
15
|
-
iconSelected:
|
|
8
|
+
icon: 'Diamond',
|
|
9
|
+
iconSelected: 'DiamondFill',
|
|
16
10
|
},
|
|
17
11
|
{
|
|
18
12
|
value: '2',
|
|
19
13
|
label: 'Disabled 2',
|
|
20
14
|
disabled: true,
|
|
21
|
-
icon:
|
|
15
|
+
icon: 'Circle',
|
|
22
16
|
},
|
|
23
17
|
{
|
|
24
18
|
value: '3',
|
|
25
19
|
label: 'Option 3',
|
|
26
|
-
icon:
|
|
27
|
-
iconSelected:
|
|
20
|
+
icon: 'Square',
|
|
21
|
+
iconSelected: 'SquareFill',
|
|
28
22
|
},
|
|
29
23
|
];
|
|
30
24
|
|
|
@@ -64,7 +58,11 @@ export const presets: Preset<SegmentedControlProps>[] = [
|
|
|
64
58
|
export const SegmentedControlExample: ComponentExample<SegmentedControlProps> = {
|
|
65
59
|
containerStyle: { width: '100%', overflow: 'auto', alignItems: 'start' },
|
|
66
60
|
defaultState: {
|
|
67
|
-
options: PRESET_OPTIONS
|
|
61
|
+
options: PRESET_OPTIONS.map((option) => ({
|
|
62
|
+
...option,
|
|
63
|
+
icon: undefined,
|
|
64
|
+
iconSelected: undefined,
|
|
65
|
+
})),
|
|
68
66
|
},
|
|
69
67
|
presets,
|
|
70
68
|
variants: false,
|
|
@@ -77,29 +77,14 @@ export type SelectProps = CommonProps<'size'> &
|
|
|
77
77
|
* { id: '6', label: 'Option 6' },
|
|
78
78
|
* ];
|
|
79
79
|
*
|
|
80
|
-
*
|
|
81
|
-
* const [selected, setSelected] =
|
|
80
|
+
* () => {
|
|
81
|
+
* const [selected, setSelected] = useState<string[]>([]);
|
|
82
82
|
*
|
|
83
83
|
* return (
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* itemCount={5}
|
|
87
|
-
* name="example-select"
|
|
88
|
-
* onChange={setSelected}
|
|
89
|
-
* options={OPTIONS}
|
|
90
|
-
* placeholder="Select an option"
|
|
91
|
-
* size="medium"
|
|
92
|
-
* value={selected}
|
|
93
|
-
* />
|
|
94
|
-
* );
|
|
95
|
-
* }
|
|
96
|
-
*
|
|
97
|
-
* function ExampleWithField() {
|
|
98
|
-
* const [selected, setSelected] = React.useState<string[]>([]);
|
|
99
|
-
* return (
|
|
100
|
-
* <Field>
|
|
101
|
-
* <FieldLabel>Select an option</FieldLabel>
|
|
84
|
+
* <>
|
|
85
|
+
* // standalone select example
|
|
102
86
|
* <Select
|
|
87
|
+
* aria-label="Select an option"
|
|
103
88
|
* itemCount={5}
|
|
104
89
|
* name="example-select"
|
|
105
90
|
* onChange={setSelected}
|
|
@@ -108,12 +93,26 @@ export type SelectProps = CommonProps<'size'> &
|
|
|
108
93
|
* size="medium"
|
|
109
94
|
* value={selected}
|
|
110
95
|
* />
|
|
111
|
-
* <
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
96
|
+
* <br />
|
|
97
|
+
* // select used within a field
|
|
98
|
+
* <Field>
|
|
99
|
+
* <FieldLabel>Select an option</FieldLabel>
|
|
100
|
+
* <Select
|
|
101
|
+
* itemCount={5}
|
|
102
|
+
* name="example-select"
|
|
103
|
+
* onChange={setSelected}
|
|
104
|
+
* options={OPTIONS}
|
|
105
|
+
* placeholder="Select an option"
|
|
106
|
+
* size="medium"
|
|
107
|
+
* value={selected}
|
|
108
|
+
* />
|
|
109
|
+
* <FieldDescription>
|
|
110
|
+
* The select allows you to choose one option from a list of options.
|
|
111
|
+
* </FieldDescription>
|
|
112
|
+
* </Field>
|
|
113
|
+
* </>
|
|
115
114
|
* );
|
|
116
|
-
* }
|
|
115
|
+
* };
|
|
117
116
|
*
|
|
118
117
|
* @name Select
|
|
119
118
|
* @phase UXReview
|
|
@@ -156,6 +156,7 @@ export const SelectExample: ComponentExample<SelectProps> = {
|
|
|
156
156
|
options: DEFAULT_OPTIONS,
|
|
157
157
|
scrollLimit: 5,
|
|
158
158
|
value: '',
|
|
159
|
+
'aria-label': 'select aria-label',
|
|
159
160
|
},
|
|
160
161
|
render: ({ props, Component, preset }) => <Component key={preset?.label} {...props} />,
|
|
161
162
|
presets,
|
|
@@ -49,20 +49,16 @@ export type SkeletonProps = {
|
|
|
49
49
|
* @example
|
|
50
50
|
* import { Skeleton } from '@bspk/ui/skeleton';
|
|
51
51
|
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* />
|
|
63
|
-
* </Skeleton>
|
|
64
|
-
* );
|
|
65
|
-
* }
|
|
52
|
+
* <Skeleton variant="photo" width={210} height={118}>
|
|
53
|
+
* <img
|
|
54
|
+
* style={{
|
|
55
|
+
* width: 210,
|
|
56
|
+
* height: 118,
|
|
57
|
+
* }}
|
|
58
|
+
* alt={'A cool photo'}
|
|
59
|
+
* src={'https://example.com/cool-photo.jpg'}
|
|
60
|
+
* />
|
|
61
|
+
* </Skeleton>;
|
|
66
62
|
*
|
|
67
63
|
* @exampleDescription This example shows a skeleton loading state for an image but can be used for any element.
|
|
68
64
|
*
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
2
|
import { SkeletonProps, SkeletonVariant } from '.';
|
|
3
3
|
import { Avatar } from '-/components/Avatar';
|
|
4
4
|
import { ExamplePlaceholder } from '-/components/ExamplePlaceholder';
|
|
5
|
-
import { useTimeout } from '-/hooks/useTimeout';
|
|
6
5
|
import { ComponentExample, ComponentExampleRenderProps, Preset } from '-/utils/demo';
|
|
7
6
|
|
|
8
7
|
export const presets: Preset<SkeletonProps>[] = [
|
|
@@ -29,7 +28,10 @@ function SkeletonTransition({
|
|
|
29
28
|
props,
|
|
30
29
|
}: Pick<ComponentExampleRenderProps<SkeletonProps>, 'Component' | 'props'>) {
|
|
31
30
|
const [loaded, setLoaded] = useState(false);
|
|
32
|
-
|
|
31
|
+
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
setTimeout(() => setLoaded(true), 3000);
|
|
34
|
+
}, []);
|
|
33
35
|
|
|
34
36
|
return <Component {...props}>{loaded && PROP_VARIANT_CHILDREN[props!.variant as SkeletonVariant]}</Component>;
|
|
35
37
|
}
|
|
@@ -33,15 +33,11 @@ export type SkeletonTextProps = {
|
|
|
33
33
|
* @example
|
|
34
34
|
* import { SkeletonText } from '@bspk/ui/SkeletonText';
|
|
35
35
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* </Txt>
|
|
42
|
-
* </SkeletonText>
|
|
43
|
-
* );
|
|
44
|
-
* }
|
|
36
|
+
* <SkeletonText textLines={1} textVariant="body-base">
|
|
37
|
+
* <Txt as="p" variant="body-base">
|
|
38
|
+
* {'This is the loaded text content that was previously loading.'}
|
|
39
|
+
* </Txt>
|
|
40
|
+
* </SkeletonText>;
|
|
45
41
|
*
|
|
46
42
|
* @exampleDescription This example shows a skeleton loading state for some text but can be used for any element.
|
|
47
43
|
*
|
|
@@ -74,11 +74,11 @@ export type SliderProps<Value> = Pick<CommonPropsLibrary, 'disabled' | 'readOnly
|
|
|
74
74
|
* import { Slider } from '@bspk/ui/Slider';
|
|
75
75
|
* import { useState } from 'react';
|
|
76
76
|
*
|
|
77
|
-
*
|
|
77
|
+
* () => {
|
|
78
78
|
* const [value, setValue] = useState(50);
|
|
79
79
|
*
|
|
80
80
|
* return <Slider value={value} min={0} max={100} label="Slider Example" onChange={setValue} />;
|
|
81
|
-
* }
|
|
81
|
+
* };
|
|
82
82
|
*
|
|
83
83
|
* @name Slider
|
|
84
84
|
* @phase UXReview
|
|
@@ -22,19 +22,21 @@ export const SliderExample: ComponentExample<SliderProps<number | [number, numbe
|
|
|
22
22
|
},
|
|
23
23
|
presets: [
|
|
24
24
|
{
|
|
25
|
-
label: '
|
|
25
|
+
label: 'Formatted Number',
|
|
26
26
|
propState: {
|
|
27
|
-
label: '
|
|
28
|
-
min:
|
|
29
|
-
max:
|
|
30
|
-
step:
|
|
31
|
-
value:
|
|
27
|
+
label: 'Price option',
|
|
28
|
+
min: 0,
|
|
29
|
+
max: 100,
|
|
30
|
+
step: 5,
|
|
31
|
+
value: 50,
|
|
32
32
|
formatNumber: (num) => `$${num}`,
|
|
33
|
-
name: '
|
|
33
|
+
name: 'formatted-number-slider',
|
|
34
34
|
},
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
label: 'Range Slider',
|
|
38
|
+
designPattern:
|
|
39
|
+
'A control element that allows customers to select a value or adjust a setting by moving the handle along a horizontal track.',
|
|
38
40
|
propState: {
|
|
39
41
|
label: 'Range option',
|
|
40
42
|
min: 0,
|
|
@@ -48,19 +50,42 @@ export const SliderExample: ComponentExample<SliderProps<number | [number, numbe
|
|
|
48
50
|
},
|
|
49
51
|
},
|
|
50
52
|
{
|
|
51
|
-
label: '
|
|
53
|
+
label: 'Continuous Slider',
|
|
54
|
+
designPattern: 'Continuous sliders allow users to select a value along a subjective range.',
|
|
52
55
|
propState: {
|
|
53
|
-
label: '
|
|
54
|
-
min:
|
|
55
|
-
max:
|
|
56
|
+
label: 'What is the purpose of life?',
|
|
57
|
+
min: 0,
|
|
58
|
+
max: 100,
|
|
59
|
+
value: 42,
|
|
56
60
|
step: 1,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
formatNumber: (num) => num.toFixed(0),
|
|
62
|
+
name: 'continuous-slider',
|
|
63
|
+
marks: false,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: 'Discrete Slider',
|
|
68
|
+
designPattern:
|
|
69
|
+
'Discrete sliders can be adjusted to a specific value by referencing its value indicator. You can generate a mark for each step with marks={true}.',
|
|
70
|
+
propState: {
|
|
71
|
+
label: 'Discrete option',
|
|
72
|
+
min: 0,
|
|
73
|
+
max: 100,
|
|
74
|
+
step: 10,
|
|
75
|
+
value: 40,
|
|
76
|
+
formatNumber: (num) => num.toString(),
|
|
77
|
+
name: 'discrete-slider',
|
|
78
|
+
marks: true,
|
|
63
79
|
},
|
|
64
80
|
},
|
|
65
81
|
],
|
|
82
|
+
defaultState: {
|
|
83
|
+
label: 'Basic option',
|
|
84
|
+
min: 20,
|
|
85
|
+
max: 80,
|
|
86
|
+
step: 1,
|
|
87
|
+
value: 30,
|
|
88
|
+
formatNumber: (num) => `$${num}`,
|
|
89
|
+
name: 'basic-slider',
|
|
90
|
+
},
|
|
66
91
|
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { IconName } from '@bspk/icons';
|
|
2
|
+
import { SvgIcon } from '@bspk/icons/SvgIcon';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { SnackbarProps, Snackbar } from './Snackbar';
|
|
5
|
+
import { BspkIcon } from '-/types/common';
|
|
6
|
+
import { createCustomEvent } from '-/utils/createCustomEvent';
|
|
7
|
+
|
|
8
|
+
const CLEAR_EVENT = 'bspk-snackbar-clear' as const;
|
|
9
|
+
|
|
10
|
+
// make onClose optional
|
|
11
|
+
export type SendSnackbarProps = Omit<SnackbarProps, 'icon' | 'innerRef' | 'onClose'> & {
|
|
12
|
+
onClose?: SnackbarProps['onClose'];
|
|
13
|
+
icon?: BspkIcon;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type SnackbarManagerProps = {
|
|
17
|
+
/**
|
|
18
|
+
* Default timeout for snackbars sent via the manager (in milliseconds).
|
|
19
|
+
*
|
|
20
|
+
* @default 5000
|
|
21
|
+
*/
|
|
22
|
+
defaultTimeout?: number;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const SnackbarEvent = createCustomEvent<SendSnackbarProps | string | typeof CLEAR_EVENT>('bspk-snackbar-event');
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* SnackbarManager is a single use component that listens for snackbar events and displays them to the user.
|
|
29
|
+
*
|
|
30
|
+
* We use a custom event to communicate between components and this manager.
|
|
31
|
+
*
|
|
32
|
+
* We don't store the snackbar props in React.Context to avoid unnecessary re-renders of all components that consume the
|
|
33
|
+
* context. :)
|
|
34
|
+
*
|
|
35
|
+
* @name SnackbarManager
|
|
36
|
+
*
|
|
37
|
+
* @phase UXReview
|
|
38
|
+
*/
|
|
39
|
+
export function SnackbarManager({ defaultTimeout = 5000 }: SnackbarManagerProps) {
|
|
40
|
+
const [snackbarProps, setSnackbarProps] = useState<SendSnackbarProps | undefined>();
|
|
41
|
+
const { useEventListener } = SnackbarEvent;
|
|
42
|
+
|
|
43
|
+
useEventListener((detail) => {
|
|
44
|
+
if (detail === CLEAR_EVENT || !detail) return setSnackbarProps(undefined);
|
|
45
|
+
|
|
46
|
+
setSnackbarProps(typeof detail === 'string' ? { text: detail, timeout: defaultTimeout } : detail);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return snackbarProps ? (
|
|
50
|
+
<Snackbar
|
|
51
|
+
{...snackbarProps}
|
|
52
|
+
icon={snackbarProps.icon ? <SvgIcon name={snackbarProps.icon as IconName} /> : undefined}
|
|
53
|
+
onClose={() => {
|
|
54
|
+
setSnackbarProps(undefined);
|
|
55
|
+
snackbarProps?.onClose?.();
|
|
56
|
+
}}
|
|
57
|
+
open={true}
|
|
58
|
+
/>
|
|
59
|
+
) : null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const sendSnackbar = (props: SendSnackbarProps | string) => SnackbarEvent.send(props);
|
|
63
|
+
|
|
64
|
+
export const clearSnackbar = () => SnackbarEvent.send(CLEAR_EVENT);
|
|
@@ -41,8 +41,6 @@ export type SnackbarProps = CommonProps<'id'> & {
|
|
|
41
41
|
* @required
|
|
42
42
|
*/
|
|
43
43
|
onClose: () => void;
|
|
44
|
-
/** Content to be rendered inside the snack bar provider, the snackbar trigger element. */
|
|
45
|
-
// children: ReactNode;
|
|
46
44
|
/**
|
|
47
45
|
* Time in milliseconds after which the snackbar will auto dismiss.
|
|
48
46
|
*
|
|
@@ -67,24 +65,43 @@ export type SnackbarProps = CommonProps<'id'> & {
|
|
|
67
65
|
};
|
|
68
66
|
|
|
69
67
|
/**
|
|
70
|
-
* Snackbars
|
|
71
|
-
*
|
|
68
|
+
* Snackbars provide brief feedback about user actions. Because they use a focus trap, they interrupt the user's
|
|
69
|
+
* workflow and should be used sparingly.
|
|
70
|
+
*
|
|
71
|
+
* #### Inline
|
|
72
|
+
*
|
|
73
|
+
* Render the Snackbar inside the component that triggers it and control visibility with local state/props. This is
|
|
74
|
+
* simple and useful for small or isolated components, but can lead to duplicate snackbars or inadvertent render loops
|
|
75
|
+
* if state is not managed carefully.
|
|
76
|
+
*
|
|
77
|
+
* #### Managed
|
|
78
|
+
*
|
|
79
|
+
* Use the SnackbarManager together with `sendSnackbar` and `clearSnackbar` to control snackbars globally. This lets any
|
|
80
|
+
* part of the app trigger snackbars without prop drilling and helps avoid duplicates. and prevents duplicate snackbars
|
|
81
|
+
* from being shown.
|
|
72
82
|
*
|
|
73
83
|
* @example
|
|
74
84
|
* import { Snackbar } from '@bspk/ui/Snackbar';
|
|
75
85
|
* import { Button } from '@bspk/ui/Button';
|
|
76
86
|
* import { useState } from 'react';
|
|
87
|
+
* import { sendSnackbar } from '@bspk/ui/Snackbar/Manager';
|
|
77
88
|
*
|
|
78
|
-
*
|
|
89
|
+
* () => {
|
|
79
90
|
* const [snackbarOpen, setSnackbarOpen] = useState(false);
|
|
80
91
|
*
|
|
81
92
|
* return (
|
|
82
93
|
* <>
|
|
94
|
+
* // -- inline snackbar
|
|
83
95
|
* <Button label="Show snackbar" onClick={() => setSnackbarOpen(true)} size="medium" title="Snackbar" />
|
|
84
96
|
* <Snackbar text="I am an example." open={snackbarOpen} onClose={() => setSnackbarOpen(false)} />
|
|
97
|
+
* // -- managed snackbar
|
|
98
|
+
* <Button
|
|
99
|
+
* label="Show managed snackbar"
|
|
100
|
+
* onClick={() => sendSnackbar({ text: 'I am a managed snackbar!' })}
|
|
101
|
+
* />
|
|
85
102
|
* </>
|
|
86
103
|
* );
|
|
87
|
-
* }
|
|
104
|
+
* };
|
|
88
105
|
*
|
|
89
106
|
* @name Snackbar
|
|
90
107
|
*
|