@bspk/ui 1.3.11 → 1.3.16
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 +22 -20
- package/dist/components/Accordion/Accordion.js +22 -20
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/Accordion/AccordionExample.js +5 -4
- package/dist/components/Accordion/AccordionExample.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +1 -2
- package/dist/components/Avatar/Avatar.js +2 -3
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/avatar.css +13 -8
- package/dist/components/Avatar/avatar.css.js +13 -8
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +1 -1
- package/dist/components/AvatarGroup/AvatarGroup.js +1 -1
- package/dist/components/Badge/Badge.d.ts +1 -1
- package/dist/components/Badge/Badge.js +1 -1
- package/dist/components/Badge/BadgeExample.js +0 -1
- package/dist/components/Badge/BadgeExample.js.map +1 -1
- package/dist/components/BadgeDot/BadgeDot.d.ts +1 -1
- package/dist/components/BadgeDot/BadgeDot.js +1 -1
- package/dist/components/BadgeDot/BadgeDotExample.js +0 -1
- package/dist/components/BadgeDot/BadgeDotExample.js.map +1 -1
- package/dist/components/BannerAlert/BannerAlert.d.ts +14 -12
- package/dist/components/BannerAlert/BannerAlert.js +14 -12
- package/dist/components/BannerAlert/BannerAlert.js.map +1 -1
- package/dist/components/BannerAlert/BannerAlertExample.js +0 -1
- package/dist/components/BannerAlert/BannerAlertExample.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.d.ts +20 -18
- package/dist/components/Breadcrumb/Breadcrumb.js +20 -18
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Button/Button.d.ts +29 -4
- package/dist/components/Button/Button.js +33 -8
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/button.css +4 -3
- package/dist/components/Button/button.css.js +4 -3
- package/dist/components/Calendar/Calendar.d.ts +5 -41
- package/dist/components/Calendar/Calendar.js +61 -185
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/Calendar/CalendarExample.js +0 -1
- package/dist/components/Calendar/CalendarExample.js.map +1 -1
- package/dist/components/Calendar/calendar.css +35 -28
- package/dist/components/Calendar/calendar.css.js +35 -28
- package/dist/components/Calendar/index.d.ts +1 -0
- package/dist/components/Calendar/index.js +1 -0
- package/dist/components/Calendar/index.js.map +1 -1
- package/dist/components/Calendar/utils.d.ts +11 -0
- package/dist/components/Calendar/utils.js +76 -0
- package/dist/components/Calendar/utils.js.map +1 -0
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/Card.js +1 -1
- package/dist/components/Carousel/Carousel.d.ts +8 -8
- package/dist/components/Carousel/Carousel.js +8 -8
- package/dist/components/Carousel/carousel.css +0 -1
- package/dist/components/Carousel/carousel.css.js +0 -1
- package/dist/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.js +1 -1
- package/dist/components/Checkbox/checkbox.css +3 -1
- package/dist/components/Checkbox/checkbox.css.js +3 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/dist/components/CheckboxGroup/checkbox-group.css +1 -1
- package/dist/components/CheckboxGroup/checkbox-group.css.js +1 -1
- package/dist/components/CheckboxGroupField/CheckboxGroupField.d.ts +1 -1
- package/dist/components/CheckboxGroupField/CheckboxGroupField.js +1 -1
- package/dist/components/CheckboxOption/CheckboxOption.d.ts +1 -1
- package/dist/components/CheckboxOption/CheckboxOption.js +1 -1
- package/dist/components/Chip/Chip.d.ts +1 -1
- package/dist/components/Chip/Chip.js +1 -1
- package/dist/components/ChipGroup/ChipGroup.d.ts +1 -1
- package/dist/components/ChipGroup/ChipGroup.js +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +23 -11
- package/dist/components/DatePicker/DatePicker.js +20 -83
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DatePicker/DatePickerExample.d.ts +1 -0
- package/dist/components/DatePicker/DatePickerExample.js +10 -2
- package/dist/components/DatePicker/DatePickerExample.js.map +1 -1
- package/dist/components/DatePicker/date-picker.css +9 -0
- package/dist/components/DatePicker/date-picker.css.js +9 -0
- package/dist/components/DatePickerField/DatePickerField.d.ts +1 -1
- package/dist/components/DatePickerField/DatePickerField.js +1 -1
- package/dist/components/Divider/Divider.d.ts +4 -4
- package/dist/components/Divider/Divider.js +4 -4
- package/dist/components/Divider/DividerExample.js +17 -20
- package/dist/components/Divider/DividerExample.js.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +8 -10
- package/dist/components/Drawer/Drawer.js +9 -12
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Drawer/DrawerExample.d.ts +1 -0
- package/dist/components/Drawer/DrawerExample.js +10 -4
- package/dist/components/Drawer/DrawerExample.js.map +1 -1
- package/dist/components/Drawer/drawer.css +6 -0
- package/dist/components/Drawer/drawer.css.js +6 -0
- package/dist/components/EmptyState/EmptyState.d.ts +2 -2
- package/dist/components/EmptyState/EmptyState.js +4 -7
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/EmptyState/EmptyStateExample.js +5 -6
- package/dist/components/EmptyState/EmptyStateExample.js.map +1 -1
- package/dist/components/ExamplePlaceholder/ExamplePlaceholder.d.ts +6 -13
- package/dist/components/ExamplePlaceholder/ExamplePlaceholder.js +12 -7
- package/dist/components/ExamplePlaceholder/ExamplePlaceholder.js.map +1 -1
- package/dist/components/Fab/Fab.d.ts +5 -3
- package/dist/components/Fab/Fab.js +8 -6
- package/dist/components/Fab/Fab.js.map +1 -1
- package/dist/components/Fab/FabExample.d.ts +1 -0
- package/dist/components/Fab/FabExample.js +6 -0
- package/dist/components/Fab/FabExample.js.map +1 -1
- package/dist/components/Fab/fab.css +5 -3
- package/dist/components/Fab/fab.css.js +5 -3
- package/dist/components/FileUpload/FileUpload.d.ts +1 -1
- package/dist/components/FileUpload/FileUpload.js +1 -1
- package/dist/components/FileUploadItem/FileUploadItem.d.ts +1 -1
- package/dist/components/FileUploadItem/FileUploadItem.js +1 -1
- package/dist/components/Flex/Flex.d.ts +55 -0
- package/dist/components/Flex/Flex.js +38 -0
- package/dist/components/Flex/Flex.js.map +1 -0
- package/dist/components/Flex/FlexExample.d.ts +5 -0
- package/dist/components/Flex/FlexExample.js +13 -0
- package/dist/components/Flex/FlexExample.js.map +1 -0
- package/dist/components/Flex/index.d.ts +1 -0
- package/dist/components/Flex/index.js +2 -0
- package/dist/components/Flex/index.js.map +1 -0
- package/dist/components/FormField/FormFieldExample.js +0 -1
- package/dist/components/FormField/FormFieldExample.js.map +1 -1
- package/dist/components/Grid/Grid.d.ts +48 -0
- package/dist/components/Grid/Grid.js +36 -0
- package/dist/components/Grid/Grid.js.map +1 -0
- package/dist/components/Grid/GridExample.d.ts +3 -0
- package/dist/components/Grid/GridExample.js +28 -0
- package/dist/components/Grid/GridExample.js.map +1 -0
- package/dist/components/Grid/index.d.ts +1 -0
- package/dist/components/Grid/index.js +2 -0
- package/dist/components/Grid/index.js.map +1 -0
- package/dist/components/InlineAlert/InlineAlert.d.ts +1 -1
- package/dist/components/InlineAlert/InlineAlert.js +1 -1
- package/dist/components/Input/Input.d.ts +5 -9
- package/dist/components/Input/Input.js +5 -9
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/InputElement.js +3 -6
- package/dist/components/Input/InputElement.js.map +1 -1
- package/dist/components/Input/InputExample.d.ts +1 -0
- package/dist/components/Input/InputExample.js +10 -1
- package/dist/components/Input/InputExample.js.map +1 -1
- package/dist/components/Input/input.css +6 -1
- package/dist/components/Input/input.css.js +6 -1
- package/dist/components/InputField/InputField.d.ts +1 -1
- package/dist/components/InputField/InputField.js +1 -1
- package/dist/components/InputNumber/InputNumber.d.ts +6 -15
- package/dist/components/InputNumber/InputNumber.js +6 -15
- package/dist/components/InputNumber/InputNumber.js.map +1 -1
- package/dist/components/InputNumber/InputNumberExample.d.ts +1 -0
- package/dist/components/InputNumber/InputNumberExample.js +10 -1
- package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
- package/dist/components/InputNumber/input-number.css +6 -4
- package/dist/components/InputNumber/input-number.css.js +6 -4
- package/dist/components/InputNumberField/InputNumberField.d.ts +1 -1
- package/dist/components/InputNumberField/InputNumberField.js +1 -1
- package/dist/components/InputPhone/InputPhone.d.ts +7 -9
- package/dist/components/InputPhone/InputPhone.js +19 -19
- package/dist/components/InputPhone/InputPhone.js.map +1 -1
- package/dist/components/InputPhone/InputPhoneExample.d.ts +2 -1
- package/dist/components/InputPhone/InputPhoneExample.js +9 -1
- package/dist/components/InputPhone/InputPhoneExample.js.map +1 -1
- package/dist/components/InputPhoneField/InputPhoneField.d.ts +1 -1
- package/dist/components/InputPhoneField/InputPhoneField.js +1 -1
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/Link/Link.js +1 -1
- package/dist/components/ListItem/ListItem.d.ts +1 -1
- package/dist/components/ListItem/ListItem.js +1 -1
- package/dist/components/Menu/Menu.d.ts +1 -3
- package/dist/components/Menu/Menu.js +1 -3
- package/dist/components/Menu/Menu.js.map +1 -1
- package/dist/components/Modal/Modal.d.ts +1 -3
- package/dist/components/Modal/Modal.js +2 -4
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/OTPInput/OTPInput.d.ts +1 -1
- package/dist/components/OTPInput/OTPInput.js +1 -1
- package/dist/components/OTPInput/OTPInputExample.js +0 -1
- package/dist/components/OTPInput/OTPInputExample.js.map +1 -1
- package/dist/components/PageControl/PageControl.d.ts +1 -1
- package/dist/components/PageControl/PageControl.js +1 -1
- package/dist/components/PageControl/PageControlExample.js +0 -1
- package/dist/components/PageControl/PageControlExample.js.map +1 -1
- package/dist/components/PageHeader/PageHeader.d.ts +57 -0
- package/dist/components/PageHeader/PageHeader.js +28 -0
- package/dist/components/PageHeader/PageHeader.js.map +1 -0
- package/dist/components/PageHeader/PageHeaderExample.d.ts +4 -0
- package/dist/components/PageHeader/PageHeaderExample.js +56 -0
- package/dist/components/PageHeader/PageHeaderExample.js.map +1 -0
- package/dist/components/PageHeader/index.d.ts +1 -0
- package/dist/components/PageHeader/index.js +2 -0
- package/dist/components/PageHeader/index.js.map +1 -0
- package/dist/components/PageHeader/page-header.css +35 -0
- package/dist/components/PageHeader/page-header.css.js +40 -0
- package/dist/components/Pagination/Pagination.d.ts +2 -2
- package/dist/components/Pagination/Pagination.js +8 -3
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/pagination.css +8 -2
- package/dist/components/Pagination/pagination.css.js +8 -2
- package/dist/components/Password/Password.d.ts +11 -16
- package/dist/components/Password/Password.js +11 -16
- package/dist/components/Password/Password.js.map +1 -1
- package/dist/components/Password/PasswordExample.d.ts +1 -0
- package/dist/components/Password/PasswordExample.js +9 -0
- package/dist/components/Password/PasswordExample.js.map +1 -1
- package/dist/components/PasswordField/PasswordField.d.ts +1 -1
- package/dist/components/PasswordField/PasswordField.js +1 -1
- package/dist/components/Popover/Popover.d.ts +1 -1
- package/dist/components/Popover/Popover.js +1 -1
- package/dist/components/Popover/PopoverExample.js +0 -1
- package/dist/components/Popover/PopoverExample.js.map +1 -1
- package/dist/components/Popover/popover.css +7 -5
- package/dist/components/Popover/popover.css.js +7 -5
- package/dist/components/ProgressBar/ProgressBar.d.ts +1 -1
- package/dist/components/ProgressBar/ProgressBar.js +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.d.ts +1 -1
- package/dist/components/ProgressCircle/ProgressCircle.js +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepper.d.ts +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepper.js +1 -1
- package/dist/components/ProgressionStepper/ProgressionStepperExample.js +0 -1
- package/dist/components/ProgressionStepper/ProgressionStepperExample.js.map +1 -1
- package/dist/components/ProgressionStepper/progression-stepper.css +5 -3
- package/dist/components/ProgressionStepper/progression-stepper.css.js +5 -3
- package/dist/components/ProgressionStepperBar/ProgressionStepperBar.d.ts +1 -1
- package/dist/components/ProgressionStepperBar/ProgressionStepperBar.js +1 -1
- package/dist/components/ProgressionStepperBar/progression-stepper-bar.css +6 -6
- package/dist/components/ProgressionStepperBar/progression-stepper-bar.css.js +7 -7
- package/dist/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/components/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/RadioGroup/radio-group.css +1 -1
- package/dist/components/RadioGroup/radio-group.css.js +1 -1
- package/dist/components/RadioGroupField/RadioGroupField.d.ts +1 -1
- package/dist/components/RadioGroupField/RadioGroupField.js +1 -1
- package/dist/components/Rating/Rating.d.ts +3 -2
- package/dist/components/Rating/Rating.js +5 -3
- package/dist/components/Rating/Rating.js.map +1 -1
- package/dist/components/SearchBar/SearchBar.d.ts +1 -1
- package/dist/components/SearchBar/SearchBar.js +3 -4
- package/dist/components/SearchBar/SearchBar.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/components/SegmentedControl/segmented-control.css +3 -1
- package/dist/components/SegmentedControl/segmented-control.css.js +3 -1
- package/dist/components/Select/Select.d.ts +11 -24
- package/dist/components/Select/Select.js +11 -24
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/SelectExample.d.ts +1 -0
- package/dist/components/Select/SelectExample.js +18 -1
- package/dist/components/Select/SelectExample.js.map +1 -1
- package/dist/components/SelectField/SelectField.d.ts +1 -1
- package/dist/components/SelectField/SelectField.js +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +1 -1
- package/dist/components/Skeleton/Skeleton.js +1 -1
- package/dist/components/SkeletonText/SkeletonText.d.ts +1 -1
- package/dist/components/SkeletonText/SkeletonText.js +1 -1
- package/dist/components/Slider/Slider.d.ts +18 -3
- package/dist/components/Slider/Slider.js +20 -4
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/Slider/SliderExample.d.ts +1 -0
- package/dist/components/Slider/SliderExample.js +7 -2
- package/dist/components/Slider/SliderExample.js.map +1 -1
- package/dist/components/Snackbar/Manager.d.ts +1 -1
- package/dist/components/Snackbar/Manager.js +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts +1 -1
- package/dist/components/Snackbar/Snackbar.js +1 -1
- package/dist/components/Snackbar/SnackbarExample.js +0 -1
- package/dist/components/Snackbar/SnackbarExample.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +1 -1
- package/dist/components/Switch/Switch.js +1 -1
- package/dist/components/Switch/switch.css +11 -9
- package/dist/components/Switch/switch.css.js +11 -9
- package/dist/components/SwitchOption/SwitchOption.d.ts +1 -1
- package/dist/components/SwitchOption/SwitchOption.js +1 -1
- package/dist/components/TabGroup/TabGroup.d.ts +1 -1
- package/dist/components/TabGroup/TabGroup.js +1 -1
- package/dist/components/TabGroup/TabGroupExample.js +0 -1
- package/dist/components/TabGroup/TabGroupExample.js.map +1 -1
- package/dist/components/TabList/TabListExample.js +0 -1
- package/dist/components/TabList/TabListExample.js.map +1 -1
- package/dist/components/TabList/tab-list.css +5 -3
- package/dist/components/TabList/tab-list.css.js +5 -3
- package/dist/components/Table/Table.d.ts +2 -2
- package/dist/components/Table/Table.js +8 -8
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/TableExample.js +56 -54
- package/dist/components/Table/TableExample.js.map +1 -1
- package/dist/components/Table/utils.d.ts +2 -2
- package/dist/components/Table/utils.js +27 -22
- package/dist/components/Table/utils.js.map +1 -1
- package/dist/components/Tag/Tag.d.ts +1 -1
- package/dist/components/Tag/Tag.js +1 -1
- package/dist/components/Textarea/Textarea.d.ts +5 -8
- package/dist/components/Textarea/Textarea.js +5 -8
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Textarea/TextareaExample.d.ts +1 -0
- package/dist/components/Textarea/TextareaExample.js +12 -1
- package/dist/components/Textarea/TextareaExample.js.map +1 -1
- package/dist/components/Textarea/textarea.css +5 -3
- package/dist/components/Textarea/textarea.css.js +5 -3
- package/dist/components/TextareaField/TextareaField.d.ts +1 -1
- package/dist/components/TextareaField/TextareaField.js +1 -1
- package/dist/components/TimePicker/TimePicker.d.ts +5 -9
- package/dist/components/TimePicker/TimePicker.js +5 -9
- package/dist/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/components/TimePicker/TimePickerExample.d.ts +1 -0
- package/dist/components/TimePicker/TimePickerExample.js +9 -1
- package/dist/components/TimePicker/TimePickerExample.js.map +1 -1
- package/dist/components/TimePickerField/TimePickerField.d.ts +1 -1
- package/dist/components/TimePickerField/TimePickerField.js +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.js +2 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/tooltip.css +7 -3
- package/dist/components/Tooltip/tooltip.css.js +7 -3
- package/dist/components/Txt/Txt.d.ts +1 -1
- package/dist/components/Txt/Txt.js +1 -1
- package/dist/components/UIProvider/UIProvider.js +4 -6
- package/dist/components/UIProvider/UIProvider.js.map +1 -1
- package/dist/components/UIProvider/UIProviderExample.d.ts +0 -1
- package/dist/components/UIProvider/UIProviderExample.js +1 -46
- package/dist/components/UIProvider/UIProviderExample.js.map +1 -1
- package/dist/hooks/useControlledState.d.ts +7 -0
- package/dist/hooks/useControlledState.js +21 -0
- package/dist/hooks/useControlledState.js.map +1 -0
- package/dist/hooks/{useAddEventListener.js → useEventListener.js} +1 -1
- package/dist/hooks/useEventListener.js.map +1 -0
- package/dist/types/meta.d.ts +0 -1
- package/dist/types/meta.js +0 -7
- package/dist/types/meta.js.map +1 -1
- package/dist/utils/createCustomEvent.js +1 -1
- package/dist/utils/createCustomEvent.js.map +1 -1
- package/dist/utils/demo.d.ts +19 -2
- package/dist/utils/demo.js.map +1 -1
- package/dist/utils/dom.d.ts +1 -0
- package/dist/utils/dom.js +5 -0
- package/dist/utils/dom.js.map +1 -1
- package/dist/utils/handleKeyDown.d.ts +1 -0
- package/dist/utils/handleKeyDown.js +9 -3
- package/dist/utils/handleKeyDown.js.map +1 -1
- package/dist/utils/keyboard.d.ts +3 -1
- package/dist/utils/keyboard.js.map +1 -1
- package/dist/utils/sendAriaLiveMessage.d.ts +8 -0
- package/dist/utils/sendAriaLiveMessage.js +14 -0
- package/dist/utils/sendAriaLiveMessage.js.map +1 -0
- package/dist/utils/sizing.d.ts +3 -0
- package/dist/utils/sizing.js +28 -0
- package/dist/utils/sizing.js.map +1 -0
- package/dist/utils/uiContext.d.ts +0 -1
- package/dist/utils/uiContext.js.map +1 -1
- package/meta.ts +9 -8
- package/package.json +28 -22
- package/src/components/Accordion/Accordion.tsx +22 -20
- package/src/components/Accordion/AccordionExample.tsx +5 -4
- package/src/components/Avatar/Avatar.tsx +2 -3
- package/src/components/Avatar/avatar.scss +9 -6
- package/src/components/AvatarGroup/AvatarGroup.tsx +1 -1
- package/src/components/Badge/Badge.tsx +1 -1
- package/src/components/Badge/BadgeExample.tsx +0 -1
- package/src/components/BadgeDot/BadgeDot.tsx +1 -1
- package/src/components/BadgeDot/BadgeDotExample.tsx +0 -1
- package/src/components/BannerAlert/BannerAlert.tsx +14 -12
- package/src/components/BannerAlert/BannerAlertExample.tsx +0 -1
- package/src/components/Breadcrumb/Breadcrumb.tsx +20 -18
- package/src/components/Button/Button.tsx +36 -10
- package/src/components/Button/button.scss +13 -6
- package/src/components/Calendar/Calendar.rtl.test.tsx +1 -1
- package/src/components/Calendar/Calendar.tsx +156 -371
- package/src/components/Calendar/CalendarExample.tsx +0 -1
- package/src/components/Calendar/calendar.scss +46 -40
- package/src/components/Calendar/index.tsx +1 -0
- package/src/components/Calendar/utils.tsx +98 -0
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Carousel/Carousel.tsx +8 -8
- package/src/components/Carousel/carousel.scss +0 -1
- package/src/components/Checkbox/Checkbox.tsx +1 -1
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +1 -1
- package/src/components/CheckboxGroupField/CheckboxGroupField.tsx +1 -1
- package/src/components/CheckboxOption/CheckboxOption.tsx +1 -1
- package/src/components/Chip/Chip.tsx +1 -1
- package/src/components/ChipGroup/ChipGroup.tsx +1 -1
- package/src/components/DatePicker/DatePicker.rtl.test.tsx +1 -1
- package/src/components/DatePicker/DatePicker.tsx +51 -106
- package/src/components/DatePicker/DatePickerExample.tsx +20 -3
- package/src/components/DatePicker/date-picker.scss +11 -0
- package/src/components/DatePickerField/DatePickerField.tsx +1 -1
- package/src/components/Divider/Divider.tsx +4 -4
- package/src/components/Divider/DividerExample.tsx +22 -23
- package/src/components/Drawer/Drawer.tsx +9 -16
- package/src/components/Drawer/DrawerExample.tsx +28 -4
- package/src/components/Drawer/drawer.scss +7 -0
- package/src/components/EmptyState/EmptyState.rtl.test.tsx +1 -1
- package/src/components/EmptyState/EmptyState.tsx +14 -21
- package/src/components/EmptyState/EmptyStateExample.tsx +5 -5
- package/src/components/ExamplePlaceholder/ExamplePlaceholder.tsx +17 -22
- package/src/components/Fab/Fab.tsx +10 -7
- package/src/components/Fab/FabExample.tsx +10 -1
- package/src/components/FileUpload/FileUpload.tsx +1 -1
- package/src/components/FileUploadItem/FileUploadItem.tsx +1 -1
- package/src/components/{Layout/Layout.rtl.test.tsx → Flex/Flex.rtl.test.tsx} +3 -3
- package/src/components/Flex/Flex.tsx +100 -0
- package/src/components/Flex/FlexExample.tsx +27 -0
- package/src/components/Flex/index.tsx +1 -0
- package/src/components/FormField/FormFieldExample.tsx +1 -2
- package/src/components/Grid/Grid.rtl.test.tsx +19 -0
- package/src/components/Grid/Grid.tsx +75 -0
- package/src/components/Grid/GridExample.tsx +42 -0
- package/src/components/Grid/index.tsx +1 -0
- package/src/components/InlineAlert/InlineAlert.tsx +1 -1
- package/src/components/Input/Input.tsx +5 -9
- package/src/components/Input/InputElement.tsx +4 -7
- package/src/components/Input/InputExample.tsx +19 -1
- package/src/components/Input/input.scss +9 -1
- package/src/components/InputField/InputField.tsx +1 -1
- package/src/components/InputNumber/InputNumber.tsx +6 -15
- package/src/components/InputNumber/InputNumberExample.tsx +24 -1
- package/src/components/InputNumberField/InputNumberField.tsx +1 -1
- package/src/components/InputPhone/InputPhone.tsx +18 -17
- package/src/components/InputPhone/InputPhoneExample.tsx +27 -2
- package/src/components/InputPhoneField/InputPhoneField.tsx +1 -1
- package/src/components/Link/Link.tsx +1 -1
- package/src/components/ListItem/ListItem.tsx +1 -1
- package/src/components/Menu/Menu.tsx +1 -3
- package/src/components/Modal/Modal.tsx +2 -4
- package/src/components/OTPInput/OTPInput.tsx +1 -1
- package/src/components/OTPInput/OTPInputExample.tsx +0 -1
- package/src/components/PageControl/PageControl.tsx +1 -1
- package/src/components/PageControl/PageControlExample.tsx +0 -1
- package/src/components/PageHeader/PageHeader.rtl.test.tsx +18 -0
- package/src/components/PageHeader/PageHeader.tsx +78 -0
- package/src/components/PageHeader/PageHeaderExample.tsx +58 -0
- package/src/components/PageHeader/index.tsx +1 -0
- package/src/components/PageHeader/page-header.scss +41 -0
- package/src/components/Pagination/Pagination.tsx +14 -3
- package/src/components/Pagination/pagination.scss +12 -5
- package/src/components/Password/Password.tsx +11 -16
- package/src/components/Password/PasswordExample.tsx +18 -1
- package/src/components/PasswordField/PasswordField.tsx +1 -1
- package/src/components/Popover/Popover.tsx +1 -1
- package/src/components/Popover/PopoverExample.tsx +0 -1
- package/src/components/ProgressBar/ProgressBar.tsx +1 -1
- package/src/components/ProgressCircle/ProgressCircle.tsx +1 -1
- package/src/components/ProgressionStepper/ProgressionStepper.tsx +1 -1
- package/src/components/ProgressionStepper/ProgressionStepperExample.tsx +0 -1
- package/src/components/ProgressionStepperBar/ProgressionStepperBar.tsx +1 -1
- package/src/components/RadioGroup/RadioGroup.tsx +1 -1
- package/src/components/RadioGroupField/RadioGroupField.tsx +1 -1
- package/src/components/Rating/Rating.tsx +7 -3
- package/src/components/SearchBar/SearchBar.tsx +3 -5
- package/src/components/SegmentedControl/SegmentedControl.tsx +1 -1
- package/src/components/Select/Select.tsx +11 -24
- package/src/components/Select/SelectExample.tsx +36 -1
- package/src/components/SelectField/SelectField.tsx +1 -1
- package/src/components/Skeleton/Skeleton.tsx +1 -1
- package/src/components/SkeletonText/SkeletonText.tsx +1 -1
- package/src/components/Slider/Slider.tsx +21 -4
- package/src/components/Slider/SliderExample.tsx +16 -2
- package/src/components/Snackbar/Manager.tsx +1 -1
- package/src/components/Snackbar/Snackbar.tsx +1 -1
- package/src/components/Snackbar/SnackbarExample.tsx +0 -1
- package/src/components/Switch/Switch.tsx +1 -1
- package/src/components/SwitchOption/SwitchOption.tsx +1 -1
- package/src/components/TabGroup/TabGroup.tsx +1 -1
- package/src/components/TabGroup/TabGroupExample.tsx +0 -1
- package/src/components/TabList/TabListExample.tsx +0 -1
- package/src/components/Table/Table.tsx +11 -16
- package/src/components/Table/TableExample.tsx +56 -54
- package/src/components/Table/utils.ts +31 -20
- package/src/components/Tag/Tag.tsx +1 -1
- package/src/components/Textarea/Textarea.tsx +5 -8
- package/src/components/Textarea/TextareaExample.tsx +21 -1
- package/src/components/TextareaField/TextareaField.tsx +1 -1
- package/src/components/TimePicker/TimePicker.tsx +5 -9
- package/src/components/TimePicker/TimePickerExample.tsx +18 -1
- package/src/components/TimePickerField/TimePickerField.tsx +1 -1
- package/src/components/Tooltip/Tooltip.tsx +2 -2
- package/src/components/Tooltip/tooltip.scss +2 -0
- package/src/components/Txt/Txt.tsx +1 -1
- package/src/components/UIProvider/UIProvider.tsx +1 -4
- package/src/components/UIProvider/UIProviderExample.tsx +0 -83
- package/src/hooks/useControlledState.ts +31 -0
- package/src/types/meta.ts +0 -8
- package/src/utils/createCustomEvent.ts +1 -1
- package/src/utils/demo.ts +19 -2
- package/src/utils/dom.ts +8 -0
- package/src/utils/handleKeyDown.ts +9 -3
- package/src/utils/keyboard.ts +5 -2
- package/src/utils/sendAriaLiveMessage.ts +17 -0
- package/src/utils/sizing.ts +30 -0
- package/src/utils/uiContext.ts +0 -1
- package/.scripts/index.ts +0 -110
- package/dist/components/Layout/Layout.d.ts +0 -50
- package/dist/components/Layout/Layout.js +0 -28
- package/dist/components/Layout/Layout.js.map +0 -1
- package/dist/components/Layout/LayoutExample.d.ts +0 -4
- package/dist/components/Layout/LayoutExample.js +0 -9
- package/dist/components/Layout/LayoutExample.js.map +0 -1
- package/dist/components/Layout/index.d.ts +0 -1
- package/dist/components/Layout/index.js +0 -2
- package/dist/components/Layout/index.js.map +0 -1
- package/dist/components/UIProvider/AriaLiveMessageHandler.d.ts +0 -13
- package/dist/components/UIProvider/AriaLiveMessageHandler.js +0 -31
- package/dist/components/UIProvider/AriaLiveMessageHandler.js.map +0 -1
- package/dist/hooks/useAddEventListener.js.map +0 -1
- package/src/components/Layout/Layout.tsx +0 -85
- package/src/components/Layout/LayoutExample.tsx +0 -17
- package/src/components/Layout/index.tsx +0 -1
- package/src/components/UIProvider/AriaLiveMessageHandler.tsx +0 -46
- /package/dist/hooks/{useAddEventListener.d.ts → useEventListener.d.ts} +0 -0
- /package/src/hooks/{useAddEventListener.ts → useEventListener.ts} +0 -0
|
@@ -4,203 +4,23 @@ import { SvgChevronRight } from '@bspk/icons/ChevronRight';
|
|
|
4
4
|
import { SvgKeyboardDoubleArrowLeft } from '@bspk/icons/KeyboardDoubleArrowLeft';
|
|
5
5
|
import { SvgKeyboardDoubleArrowRight } from '@bspk/icons/KeyboardDoubleArrowRight';
|
|
6
6
|
import {
|
|
7
|
-
addDays,
|
|
8
7
|
addMonths,
|
|
9
8
|
addYears,
|
|
9
|
+
eachDayOfInterval,
|
|
10
10
|
endOfMonth,
|
|
11
11
|
endOfWeek,
|
|
12
12
|
format,
|
|
13
|
-
|
|
13
|
+
isSameDay,
|
|
14
|
+
isValid,
|
|
14
15
|
startOfMonth,
|
|
16
|
+
startOfToday,
|
|
15
17
|
startOfWeek,
|
|
16
|
-
isValid,
|
|
17
|
-
isSameDay,
|
|
18
|
-
isSameMonth,
|
|
19
|
-
isSameYear,
|
|
20
|
-
setMonth,
|
|
21
|
-
endOfDecade,
|
|
22
18
|
} from 'date-fns';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { Button
|
|
26
|
-
import { ListItemProps } from '-/components/ListItem';
|
|
19
|
+
import { useMemo, useRef, useState } from 'react';
|
|
20
|
+
import { useKeyDownCaptures, optionIdGenerator } from './utils';
|
|
21
|
+
import { Button } from '-/components/Button';
|
|
27
22
|
import { useId } from '-/hooks/useId';
|
|
28
|
-
import {
|
|
29
|
-
import { handleKeyDown } from '-/utils/handleKeyDown';
|
|
30
|
-
|
|
31
|
-
export type Direction = '<' | '<<' | '>' | '>>';
|
|
32
|
-
export type Kind = 'day' | 'month' | 'year';
|
|
33
|
-
|
|
34
|
-
export type ConfigKind = {
|
|
35
|
-
header: Record<
|
|
36
|
-
Direction,
|
|
37
|
-
{
|
|
38
|
-
label: string;
|
|
39
|
-
incrementFn: (date: Date, amount: number) => Date;
|
|
40
|
-
} | null
|
|
41
|
-
> & {
|
|
42
|
-
label: (baseDate: Date, setKind: (next: Kind) => void) => ReactNode;
|
|
43
|
-
};
|
|
44
|
-
columns: number;
|
|
45
|
-
range: {
|
|
46
|
-
start: (date: Date) => Date;
|
|
47
|
-
end: (date: Date) => Date;
|
|
48
|
-
};
|
|
49
|
-
compare: (dateLeft: Date, dateRight: Date) => boolean;
|
|
50
|
-
incrementFn: (date: Date, amount: number) => Date;
|
|
51
|
-
optionFormatStr: string;
|
|
52
|
-
listboxLabel: string;
|
|
53
|
-
listBoxHeader?: ReactNode;
|
|
54
|
-
ariaFormatStr: string;
|
|
55
|
-
optionProps?: (params: {
|
|
56
|
-
baseDate: Date;
|
|
57
|
-
date: Date;
|
|
58
|
-
isActive: boolean;
|
|
59
|
-
isSelected: boolean;
|
|
60
|
-
onChange: (next: Date) => void;
|
|
61
|
-
setBaseDate: (next: Date) => void;
|
|
62
|
-
setKind: (next: Kind) => void;
|
|
63
|
-
}) => Partial<ButtonProps>;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Configuration for each of the calendar picker modes (day, month, year)
|
|
68
|
-
*
|
|
69
|
-
* This helps keep the main component cleaner and easier to read and avoid lots of conditionals.
|
|
70
|
-
*/
|
|
71
|
-
const CONFIG: Record<Kind, ConfigKind> = {
|
|
72
|
-
day: {
|
|
73
|
-
header: {
|
|
74
|
-
'<<': { label: 'Previous Year', incrementFn: addYears },
|
|
75
|
-
'<': { label: 'Previous Month', incrementFn: addMonths },
|
|
76
|
-
label: (baseDate, setKind) => (
|
|
77
|
-
<>
|
|
78
|
-
<Button
|
|
79
|
-
aria-label={`Change Month, currently ${format(baseDate, 'MMMM')}`}
|
|
80
|
-
data-month
|
|
81
|
-
iconOnly
|
|
82
|
-
label={format(baseDate, 'MMMM')}
|
|
83
|
-
onClick={() => setKind('month')}
|
|
84
|
-
size="large"
|
|
85
|
-
variant="tertiary"
|
|
86
|
-
/>
|
|
87
|
-
<Button
|
|
88
|
-
aria-label={`Change Year, currently ${baseDate.getFullYear()}`}
|
|
89
|
-
data-year
|
|
90
|
-
iconOnly
|
|
91
|
-
label={`${baseDate.getFullYear()}`}
|
|
92
|
-
onClick={() => setKind('year')}
|
|
93
|
-
size="large"
|
|
94
|
-
variant="tertiary"
|
|
95
|
-
/>
|
|
96
|
-
</>
|
|
97
|
-
),
|
|
98
|
-
'>': { label: 'Next Month', incrementFn: addMonths },
|
|
99
|
-
'>>': { label: 'Next Year', incrementFn: addYears },
|
|
100
|
-
},
|
|
101
|
-
columns: 7,
|
|
102
|
-
range: {
|
|
103
|
-
start: (date: Date) => startOfWeek(startOfMonth(date), { weekStartsOn: 0 }),
|
|
104
|
-
end: (date: Date) => endOfWeek(endOfMonth(date), { weekStartsOn: 0 }),
|
|
105
|
-
},
|
|
106
|
-
compare: isSameDay,
|
|
107
|
-
incrementFn: addDays,
|
|
108
|
-
optionFormatStr: 'd',
|
|
109
|
-
listboxLabel: 'Select Date',
|
|
110
|
-
ariaFormatStr: 'do MMMM yyyy',
|
|
111
|
-
listBoxHeader: (
|
|
112
|
-
<div data-day-headers>
|
|
113
|
-
<span>Sun</span>
|
|
114
|
-
<span>Mon</span>
|
|
115
|
-
<span>Tue</span>
|
|
116
|
-
<span>Wed</span>
|
|
117
|
-
<span>Thu</span>
|
|
118
|
-
<span>Fri</span>
|
|
119
|
-
<span>Sat</span>
|
|
120
|
-
</div>
|
|
121
|
-
),
|
|
122
|
-
optionProps: ({ date, baseDate, isSelected, setBaseDate, onChange, isActive }) => ({
|
|
123
|
-
'data-non-month-day': date.getMonth() !== baseDate.getMonth() ? true : undefined,
|
|
124
|
-
onClick: () => {
|
|
125
|
-
setBaseDate(date);
|
|
126
|
-
onChange(date);
|
|
127
|
-
},
|
|
128
|
-
variant: isSelected ? 'primary' : isActive ? 'secondary' : 'tertiary',
|
|
129
|
-
}),
|
|
130
|
-
},
|
|
131
|
-
month: {
|
|
132
|
-
header: {
|
|
133
|
-
'<': { label: 'Previous Year', incrementFn: addYears },
|
|
134
|
-
'<<': null,
|
|
135
|
-
label: (baseDate, setKind) => (
|
|
136
|
-
<Button
|
|
137
|
-
aria-label={`Change Year, currently ${baseDate.getFullYear()}`}
|
|
138
|
-
iconOnly
|
|
139
|
-
label={`${baseDate.getFullYear()}`}
|
|
140
|
-
onClick={() => setKind('year')}
|
|
141
|
-
size="large"
|
|
142
|
-
variant="tertiary"
|
|
143
|
-
/>
|
|
144
|
-
),
|
|
145
|
-
'>>': null,
|
|
146
|
-
'>': { label: 'Next Year', incrementFn: addYears },
|
|
147
|
-
},
|
|
148
|
-
columns: 3,
|
|
149
|
-
range: {
|
|
150
|
-
start: (date: Date) => setMonth(date, 0),
|
|
151
|
-
end: (date: Date) => setMonth(date, 11),
|
|
152
|
-
},
|
|
153
|
-
incrementFn: addMonths,
|
|
154
|
-
compare: isSameMonth,
|
|
155
|
-
optionFormatStr: 'MMM',
|
|
156
|
-
listboxLabel: 'Select Month',
|
|
157
|
-
ariaFormatStr: 'MMMM yyyy',
|
|
158
|
-
optionProps: ({ date, setBaseDate, setKind, isActive }) => ({
|
|
159
|
-
onClick: () => {
|
|
160
|
-
setBaseDate(date);
|
|
161
|
-
setKind('day');
|
|
162
|
-
},
|
|
163
|
-
variant: isActive ? 'secondary' : 'tertiary',
|
|
164
|
-
}),
|
|
165
|
-
},
|
|
166
|
-
year: {
|
|
167
|
-
header: {
|
|
168
|
-
'<': { label: 'Earlier Years', incrementFn: (d) => addYears(d, -10) },
|
|
169
|
-
'<<': null,
|
|
170
|
-
label: (baseDate, setKind) => (
|
|
171
|
-
<Button
|
|
172
|
-
aria-label={`Change Decade, currently ${startOfDecade(baseDate).getFullYear()} to ${endOfDecade(
|
|
173
|
-
baseDate,
|
|
174
|
-
).getFullYear()}`}
|
|
175
|
-
iconOnly
|
|
176
|
-
label={`${startOfDecade(baseDate).getFullYear() - 1} - ${startOfDecade(baseDate).getFullYear() + 10}`}
|
|
177
|
-
onClick={() => setKind('year')}
|
|
178
|
-
size="large"
|
|
179
|
-
variant="tertiary"
|
|
180
|
-
/>
|
|
181
|
-
),
|
|
182
|
-
'>>': null,
|
|
183
|
-
'>': { label: 'Later Years', incrementFn: (d) => addYears(d, 10) },
|
|
184
|
-
},
|
|
185
|
-
columns: 4,
|
|
186
|
-
range: {
|
|
187
|
-
start: (date: Date) => addYears(startOfDecade(date), -1),
|
|
188
|
-
end: (date: Date) => addYears(endOfDecade(date), 1),
|
|
189
|
-
},
|
|
190
|
-
compare: isSameYear,
|
|
191
|
-
incrementFn: addYears,
|
|
192
|
-
optionFormatStr: 'yyyy',
|
|
193
|
-
listboxLabel: 'Select Year',
|
|
194
|
-
ariaFormatStr: 'yyyy',
|
|
195
|
-
optionProps: ({ date, setBaseDate, setKind, isActive }) => ({
|
|
196
|
-
onClick: () => {
|
|
197
|
-
setBaseDate(date);
|
|
198
|
-
setKind('month');
|
|
199
|
-
},
|
|
200
|
-
variant: isActive ? 'secondary' : 'tertiary',
|
|
201
|
-
}),
|
|
202
|
-
},
|
|
203
|
-
};
|
|
23
|
+
import { getEventCode } from '-/utils/handleKeyDown';
|
|
204
24
|
|
|
205
25
|
export type CalendarProps = {
|
|
206
26
|
/**
|
|
@@ -212,212 +32,177 @@ export type CalendarProps = {
|
|
|
212
32
|
/** Fires when the date changes with the new date */
|
|
213
33
|
onChange: (newDate: Date) => void;
|
|
214
34
|
/**
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* @default flat
|
|
218
|
-
*/
|
|
219
|
-
variant?: 'elevated' | 'flat';
|
|
220
|
-
/**
|
|
221
|
-
* If focus trap should be enabled within the calendar component.
|
|
35
|
+
* When true, keyboard focus is trapped within the calendar component on initial render.
|
|
222
36
|
*
|
|
223
37
|
* Only applicable if the Calendar is used in a popover like in DatePicker.
|
|
224
38
|
*
|
|
225
39
|
* @default false
|
|
226
40
|
*/
|
|
227
41
|
focusTrap?: boolean;
|
|
42
|
+
/** The id of the calendar component. */
|
|
43
|
+
id?: string;
|
|
228
44
|
};
|
|
229
45
|
|
|
230
46
|
/**
|
|
231
47
|
* Allows customers to select the date, month, and year.
|
|
232
48
|
*
|
|
233
49
|
* @name Calendar
|
|
234
|
-
* @phase
|
|
50
|
+
* @phase Stable
|
|
235
51
|
*/
|
|
236
|
-
export function Calendar({ value: valueProp, onChange,
|
|
237
|
-
const baseId = useId();
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const
|
|
243
|
-
|
|
52
|
+
export function Calendar({ id, value: valueProp, onChange, focusTrap = false }: CalendarProps) {
|
|
53
|
+
const baseId = useId(id);
|
|
54
|
+
const gridId = `${baseId}-grid`;
|
|
55
|
+
const generateOptionId = useMemo(() => optionIdGenerator(baseId), [baseId]);
|
|
56
|
+
|
|
57
|
+
const firstButtonRef = useRef<HTMLButtonElement | null>(null);
|
|
58
|
+
const lastButtonRef = useRef<HTMLButtonElement | null>(null);
|
|
59
|
+
const gridRef = useRef<HTMLTableSectionElement | null>(null);
|
|
60
|
+
|
|
61
|
+
const [activeDate, setActiveDate] = useState<Date>(valueProp && isValid(valueProp) ? valueProp : startOfToday());
|
|
62
|
+
|
|
63
|
+
const rows = useMemo(
|
|
64
|
+
() =>
|
|
65
|
+
// generate all days to be shown in the month view
|
|
66
|
+
eachDayOfInterval({
|
|
67
|
+
start: startOfWeek(startOfMonth(activeDate)!, { weekStartsOn: 0 }),
|
|
68
|
+
end: endOfWeek(endOfMonth(activeDate!), { weekStartsOn: 0 }),
|
|
69
|
+
})
|
|
70
|
+
// create groups of 7 for each week
|
|
71
|
+
.reduce<Date[][]>((row, item) => {
|
|
72
|
+
const previousRow = row[row.length - 1];
|
|
73
|
+
if (row.length === 0 || previousRow.length === 7) return [...row, [item]];
|
|
74
|
+
previousRow.push(item);
|
|
75
|
+
return row;
|
|
76
|
+
}, []),
|
|
77
|
+
[activeDate],
|
|
78
|
+
);
|
|
244
79
|
|
|
245
|
-
const
|
|
80
|
+
const [focusDay, setFocusDay] = useState<boolean>(focusTrap);
|
|
246
81
|
|
|
247
|
-
const { handleKeyDownCapture } = useKeyDownCaptures({
|
|
82
|
+
const { handleKeyDownCapture } = useKeyDownCaptures({
|
|
83
|
+
activeDate,
|
|
84
|
+
setActiveDate,
|
|
85
|
+
rows,
|
|
86
|
+
focusActiveDay: () => setFocusDay(true),
|
|
87
|
+
});
|
|
248
88
|
|
|
249
|
-
|
|
250
|
-
<div data-bspk="calendar"
|
|
89
|
+
return (
|
|
90
|
+
<div data-bspk="calendar" id={baseId}>
|
|
251
91
|
<div data-header>
|
|
252
|
-
<
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
92
|
+
<Button
|
|
93
|
+
icon={<SvgKeyboardDoubleArrowLeft />}
|
|
94
|
+
iconOnly={true}
|
|
95
|
+
innerRef={(node) => (firstButtonRef.current = node)}
|
|
96
|
+
label="Previous Year"
|
|
97
|
+
onClick={() => setActiveDate(addYears(activeDate, -1))}
|
|
98
|
+
onKeyDown={(event: React.KeyboardEvent) => {
|
|
99
|
+
if (focusTrap && getEventCode(event) === 'Shift+Tab') {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
event.stopPropagation();
|
|
102
|
+
setFocusDay(true);
|
|
103
|
+
}
|
|
104
|
+
}}
|
|
105
|
+
size="large"
|
|
106
|
+
variant="tertiary"
|
|
107
|
+
/>
|
|
108
|
+
<Button
|
|
109
|
+
icon={<SvgChevronLeft />}
|
|
110
|
+
iconOnly={true}
|
|
111
|
+
label="Previous Month"
|
|
112
|
+
onClick={() => setActiveDate(addMonths(activeDate, -1))}
|
|
113
|
+
size="large"
|
|
114
|
+
variant="tertiary"
|
|
257
115
|
/>
|
|
258
|
-
<
|
|
259
|
-
<
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
116
|
+
<span data-title>{format(activeDate, 'MMMM yyyy')}</span>
|
|
117
|
+
<Button
|
|
118
|
+
icon={<SvgChevronRight />}
|
|
119
|
+
iconOnly={true}
|
|
120
|
+
label="Next Month"
|
|
121
|
+
onClick={() => setActiveDate(addMonths(activeDate, 1))}
|
|
122
|
+
size="large"
|
|
123
|
+
variant="tertiary"
|
|
124
|
+
/>
|
|
125
|
+
<Button
|
|
126
|
+
icon={<SvgKeyboardDoubleArrowRight />}
|
|
127
|
+
iconOnly={true}
|
|
128
|
+
innerRef={(node) => (lastButtonRef.current = node)}
|
|
129
|
+
label="Next Year"
|
|
130
|
+
onClick={() => setActiveDate(addYears(activeDate, 1))}
|
|
131
|
+
size="large"
|
|
132
|
+
variant="tertiary"
|
|
266
133
|
/>
|
|
267
134
|
</div>
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
<
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
135
|
+
<table role="grid">
|
|
136
|
+
<thead>
|
|
137
|
+
<tr>
|
|
138
|
+
<th abbr="Sunday" scope="col">
|
|
139
|
+
Sun
|
|
140
|
+
</th>
|
|
141
|
+
<th abbr="Monday" scope="col">
|
|
142
|
+
Mon
|
|
143
|
+
</th>
|
|
144
|
+
<th abbr="Tuesday" scope="col">
|
|
145
|
+
Tue
|
|
146
|
+
</th>
|
|
147
|
+
<th abbr="Wednesday" scope="col">
|
|
148
|
+
Wed
|
|
149
|
+
</th>
|
|
150
|
+
<th abbr="Thursday" scope="col">
|
|
151
|
+
Thu
|
|
152
|
+
</th>
|
|
153
|
+
<th abbr="Friday" scope="col">
|
|
154
|
+
Fri
|
|
155
|
+
</th>
|
|
156
|
+
<th abbr="Saturday" scope="col">
|
|
157
|
+
Sat
|
|
158
|
+
</th>
|
|
159
|
+
</tr>
|
|
160
|
+
</thead>
|
|
161
|
+
<tbody
|
|
162
|
+
id={gridId}
|
|
163
|
+
onKeyDownCapture={(event) => {
|
|
164
|
+
handleKeyDownCapture(event);
|
|
165
|
+
if (focusTrap && getEventCode(event) === 'Tab') {
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
event.stopPropagation();
|
|
168
|
+
firstButtonRef.current?.focus();
|
|
169
|
+
}
|
|
170
|
+
}}
|
|
171
|
+
ref={(node) => (gridRef.current = node)}
|
|
172
|
+
>
|
|
173
|
+
{rows.map((week) => (
|
|
174
|
+
<tr key={`week${week[0].toString()}`}>
|
|
175
|
+
{week.map((date) => {
|
|
176
|
+
const label = format(date, 'd');
|
|
177
|
+
const optionId = generateOptionId(date);
|
|
178
|
+
const isActive = isSameDay(date, activeDate);
|
|
179
|
+
return (
|
|
180
|
+
<td
|
|
181
|
+
aria-label={format(date, 'do MMMM yyyy')}
|
|
182
|
+
data-selected={isActive || undefined}
|
|
183
|
+
id={optionId}
|
|
184
|
+
key={date.toString()}
|
|
185
|
+
onClick={() => onChange(date)}
|
|
186
|
+
ref={(node) => {
|
|
187
|
+
if (!focusDay || !isActive || !node) return;
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
node.focus({ preventScroll: true });
|
|
190
|
+
}, 0);
|
|
191
|
+
setFocusDay(false);
|
|
192
|
+
}}
|
|
193
|
+
role={isActive ? 'gridcell' : undefined}
|
|
194
|
+
tabIndex={isActive ? 0 : -1}
|
|
195
|
+
>
|
|
196
|
+
{label}
|
|
197
|
+
</td>
|
|
198
|
+
);
|
|
308
199
|
})}
|
|
309
|
-
|
|
310
|
-
)
|
|
311
|
-
|
|
312
|
-
</
|
|
200
|
+
</tr>
|
|
201
|
+
))}
|
|
202
|
+
</tbody>
|
|
203
|
+
</table>
|
|
313
204
|
</div>
|
|
314
205
|
);
|
|
315
|
-
|
|
316
|
-
return focusTrap ? (
|
|
317
|
-
<FocusTrap
|
|
318
|
-
focusTrapOptions={{
|
|
319
|
-
fallbackFocus: () => {
|
|
320
|
-
const idToFocus = items.find(({ value: date }) => config.compare(date, baseDate))?.id;
|
|
321
|
-
return getElementById(idToFocus)!;
|
|
322
|
-
},
|
|
323
|
-
clickOutsideDeactivates: true,
|
|
324
|
-
}}
|
|
325
|
-
>
|
|
326
|
-
{calendar}
|
|
327
|
-
</FocusTrap>
|
|
328
|
-
) : (
|
|
329
|
-
calendar
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/** Generates the items (days, months, years) to display based on the grid and the range start and end */
|
|
334
|
-
function useItemsAndRange(config: ConfigKind, value: Date, baseId: string) {
|
|
335
|
-
return useMemo(() => {
|
|
336
|
-
const start = config.range.start(value);
|
|
337
|
-
const end = config.range.end(value);
|
|
338
|
-
const nextItems: (ListItemProps & { value: Date })[] = [];
|
|
339
|
-
|
|
340
|
-
for (let date = start; date <= end; date = config.incrementFn(date, 1)) {
|
|
341
|
-
const label = format(date, config.optionFormatStr);
|
|
342
|
-
nextItems.push({
|
|
343
|
-
value: date,
|
|
344
|
-
label,
|
|
345
|
-
'aria-label': format(date, config.ariaFormatStr),
|
|
346
|
-
id: `${baseId}-option-${format(date, 'MM-dd-yyyy')}`,
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
return { items: nextItems, range: { start, end } };
|
|
351
|
-
}, [config, value, baseId]);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
const useKeyDownCaptures = ({
|
|
355
|
-
config,
|
|
356
|
-
baseDate,
|
|
357
|
-
setBaseDate,
|
|
358
|
-
}: {
|
|
359
|
-
config: ConfigKind;
|
|
360
|
-
baseDate: Date;
|
|
361
|
-
setBaseDate: (date: Date) => void;
|
|
362
|
-
}) => {
|
|
363
|
-
const handleItemArrows = (direction: 'down' | 'left' | 'right' | 'up') => (event: KeyboardEvent) => {
|
|
364
|
-
event.preventDefault();
|
|
365
|
-
event.stopPropagation();
|
|
366
|
-
// Determine the direction and amount to move the base date
|
|
367
|
-
// down/right is positive, up/left is negative
|
|
368
|
-
const multiplier = direction === 'down' || direction === 'right' ? 1 : -1;
|
|
369
|
-
// Moving left/right moves one increment, moving up/down moves the number of columns
|
|
370
|
-
// (e.g. in day mode, left/right moves one day, up/down moves 7 days)
|
|
371
|
-
// In month mode, left/right moves one month, up/down moves 3 months
|
|
372
|
-
// In year mode, left/right moves one year, up/down moves 4 years
|
|
373
|
-
// This is determined by the number of columns in the grid for each mode
|
|
374
|
-
const amount = direction === 'left' || direction === 'right' ? 1 : config.columns;
|
|
375
|
-
const next = config.incrementFn(baseDate, amount * multiplier);
|
|
376
|
-
setBaseDate(next);
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
return {
|
|
380
|
-
handleKeyDownCapture: handleKeyDown({
|
|
381
|
-
ArrowDown: handleItemArrows('down'),
|
|
382
|
-
ArrowUp: handleItemArrows('up'),
|
|
383
|
-
ArrowLeft: handleItemArrows('left'),
|
|
384
|
-
ArrowRight: handleItemArrows('right'),
|
|
385
|
-
}),
|
|
386
|
-
};
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
const HEADER_DIRECTION_ICONS: Record<Direction, ReactNode> = {
|
|
390
|
-
'<': <SvgChevronLeft />,
|
|
391
|
-
'<<': <SvgKeyboardDoubleArrowLeft />,
|
|
392
|
-
'>': <SvgChevronRight />,
|
|
393
|
-
'>>': <SvgKeyboardDoubleArrowRight />,
|
|
394
|
-
};
|
|
395
|
-
|
|
396
|
-
// eslint-disable-next-line react/no-multi-comp
|
|
397
|
-
function HeaderButton({
|
|
398
|
-
direction,
|
|
399
|
-
config,
|
|
400
|
-
setBaseDate,
|
|
401
|
-
baseDate,
|
|
402
|
-
}: {
|
|
403
|
-
direction: Direction;
|
|
404
|
-
config: ConfigKind['header'][Direction];
|
|
405
|
-
setBaseDate: (date: Date) => void;
|
|
406
|
-
baseDate: Date;
|
|
407
|
-
}) {
|
|
408
|
-
return (
|
|
409
|
-
config && (
|
|
410
|
-
<Button
|
|
411
|
-
icon={HEADER_DIRECTION_ICONS[direction]}
|
|
412
|
-
iconOnly={true}
|
|
413
|
-
key={direction}
|
|
414
|
-
label={config.label}
|
|
415
|
-
onClick={() => setBaseDate(config.incrementFn(baseDate, direction.startsWith('<') ? -1 : 1))}
|
|
416
|
-
size="large"
|
|
417
|
-
variant="tertiary"
|
|
418
|
-
/>
|
|
419
|
-
)
|
|
420
|
-
);
|
|
421
206
|
}
|
|
422
207
|
|
|
423
208
|
/** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
|