@lumx/react 3.20.1-alpha.5 → 3.20.1-alpha.50
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/CONTRIBUTING.md +1 -5
- package/README.md +0 -2
- package/_internal/{index.js → Cd8LPzmx.js} +78 -102
- package/_internal/Cd8LPzmx.js.map +1 -0
- package/index.d.ts +75 -390
- package/index.js +3960 -4706
- package/index.js.map +1 -1
- package/package.json +17 -36
- package/utils/index.d.ts +61 -8
- package/utils/index.js +1 -1
- package/_internal/Falsy.d.ts +0 -7
- package/_internal/index.js.map +0 -1
- package/src/components/alert-dialog/AlertDialog.stories.tsx +0 -127
- package/src/components/alert-dialog/AlertDialog.test.tsx +0 -35
- package/src/components/alert-dialog/AlertDialog.tsx +0 -189
- package/src/components/alert-dialog/index.ts +0 -1
- package/src/components/autocomplete/Autocomplete.stories.tsx +0 -75
- package/src/components/autocomplete/Autocomplete.test.tsx +0 -101
- package/src/components/autocomplete/Autocomplete.tsx +0 -294
- package/src/components/autocomplete/AutocompleteMultiple.stories.tsx +0 -167
- package/src/components/autocomplete/AutocompleteMultiple.test.tsx +0 -63
- package/src/components/autocomplete/AutocompleteMultiple.tsx +0 -156
- package/src/components/autocomplete/__mockData__/index.ts +0 -39
- package/src/components/autocomplete/index.ts +0 -2
- package/src/components/avatar/Avatar.stories.tsx +0 -121
- package/src/components/avatar/Avatar.test.tsx +0 -34
- package/src/components/avatar/Avatar.tsx +0 -114
- package/src/components/avatar/index.ts +0 -1
- package/src/components/badge/Badge.stories.tsx +0 -70
- package/src/components/badge/Badge.test.tsx +0 -47
- package/src/components/badge/Badge.tsx +0 -58
- package/src/components/badge/BadgeWrapper.stories.tsx +0 -76
- package/src/components/badge/BadgeWrapper.test.tsx +0 -49
- package/src/components/badge/BadgeWrapper.tsx +0 -37
- package/src/components/badge/index.ts +0 -2
- package/src/components/button/Button.stories.tsx +0 -356
- package/src/components/button/Button.test.tsx +0 -127
- package/src/components/button/Button.tsx +0 -103
- package/src/components/button/ButtonGroup.stories.tsx +0 -54
- package/src/components/button/ButtonGroup.test.tsx +0 -43
- package/src/components/button/ButtonGroup.tsx +0 -52
- package/src/components/button/ButtonRoot.tsx +0 -193
- package/src/components/button/IconButton.stories.tsx +0 -52
- package/src/components/button/IconButton.test.tsx +0 -68
- package/src/components/button/IconButton.tsx +0 -93
- package/src/components/button/index.ts +0 -4
- package/src/components/checkbox/Checkbox.stories.tsx +0 -64
- package/src/components/checkbox/Checkbox.test.tsx +0 -156
- package/src/components/checkbox/Checkbox.tsx +0 -164
- package/src/components/checkbox/index.ts +0 -1
- package/src/components/chip/Chip.stories.tsx +0 -166
- package/src/components/chip/Chip.test.tsx +0 -243
- package/src/components/chip/Chip.tsx +0 -168
- package/src/components/chip/ChipGroup.stories.tsx +0 -49
- package/src/components/chip/ChipGroup.test.tsx +0 -39
- package/src/components/chip/ChipGroup.tsx +0 -60
- package/src/components/chip/index.ts +0 -2
- package/src/components/comment-block/CommentBlock.stories.tsx +0 -92
- package/src/components/comment-block/CommentBlock.test.tsx +0 -29
- package/src/components/comment-block/CommentBlock.tsx +0 -172
- package/src/components/comment-block/index.ts +0 -1
- package/src/components/date-picker/DatePicker.stories.tsx +0 -118
- package/src/components/date-picker/DatePicker.test.tsx +0 -36
- package/src/components/date-picker/DatePicker.tsx +0 -52
- package/src/components/date-picker/DatePickerControlled.test.tsx +0 -93
- package/src/components/date-picker/DatePickerControlled.tsx +0 -259
- package/src/components/date-picker/DatePickerField.stories.tsx +0 -100
- package/src/components/date-picker/DatePickerField.test.tsx +0 -72
- package/src/components/date-picker/DatePickerField.tsx +0 -135
- package/src/components/date-picker/constants.ts +0 -11
- package/src/components/date-picker/index.ts +0 -4
- package/src/components/date-picker/types.ts +0 -28
- package/src/components/dialog/Dialog.stories.tsx +0 -318
- package/src/components/dialog/Dialog.test.tsx +0 -99
- package/src/components/dialog/Dialog.tsx +0 -288
- package/src/components/dialog/index.ts +0 -1
- package/src/components/divider/Divider.test.tsx +0 -53
- package/src/components/divider/Divider.tsx +0 -52
- package/src/components/divider/index.ts +0 -1
- package/src/components/drag-handle/DragHandle.test.tsx +0 -38
- package/src/components/drag-handle/DragHandle.tsx +0 -53
- package/src/components/drag-handle/index.ts +0 -1
- package/src/components/dropdown/Dropdown.stories.tsx +0 -31
- package/src/components/dropdown/Dropdown.test.tsx +0 -66
- package/src/components/dropdown/Dropdown.tsx +0 -186
- package/src/components/dropdown/index.ts +0 -1
- package/src/components/expansion-panel/ExpansionPanel.stories.tsx +0 -91
- package/src/components/expansion-panel/ExpansionPanel.test.tsx +0 -186
- package/src/components/expansion-panel/ExpansionPanel.tsx +0 -195
- package/src/components/expansion-panel/index.ts +0 -1
- package/src/components/flag/Flag.stories.tsx +0 -48
- package/src/components/flag/Flag.test.tsx +0 -64
- package/src/components/flag/Flag.tsx +0 -54
- package/src/components/flag/index.ts +0 -1
- package/src/components/flex-box/FlexBox.stories.tsx +0 -158
- package/src/components/flex-box/FlexBox.test.tsx +0 -25
- package/src/components/flex-box/FlexBox.tsx +0 -100
- package/src/components/flex-box/index.ts +0 -1
- package/src/components/generic-block/GenericBlock.stories.jsx +0 -128
- package/src/components/generic-block/GenericBlock.test.tsx +0 -156
- package/src/components/generic-block/GenericBlock.tsx +0 -225
- package/src/components/generic-block/constants.ts +0 -9
- package/src/components/generic-block/index.ts +0 -2
- package/src/components/grid/Grid.tsx +0 -85
- package/src/components/grid/GridItem.tsx +0 -57
- package/src/components/grid/index.ts +0 -2
- package/src/components/grid-column/GridColumn.stories.tsx +0 -46
- package/src/components/grid-column/GridColumn.test.jsx +0 -58
- package/src/components/grid-column/GridColumn.tsx +0 -83
- package/src/components/grid-column/index.ts +0 -1
- package/src/components/heading/Heading.stories.tsx +0 -70
- package/src/components/heading/Heading.test.tsx +0 -84
- package/src/components/heading/Heading.tsx +0 -67
- package/src/components/heading/HeadingLevelProvider.tsx +0 -30
- package/src/components/heading/constants.ts +0 -16
- package/src/components/heading/context.tsx +0 -13
- package/src/components/heading/index.ts +0 -3
- package/src/components/heading/useHeadingLevel.tsx +0 -8
- package/src/components/icon/Icon.stories.tsx +0 -47
- package/src/components/icon/Icon.test.tsx +0 -44
- package/src/components/icon/Icon.tsx +0 -24
- package/src/components/icon/index.ts +0 -1
- package/src/components/image-block/ImageBlock.stories.tsx +0 -119
- package/src/components/image-block/ImageBlock.test.tsx +0 -59
- package/src/components/image-block/ImageBlock.tsx +0 -142
- package/src/components/image-block/ImageCaption.tsx +0 -115
- package/src/components/image-block/index.ts +0 -1
- package/src/components/image-lightbox/ImageLightbox.stories.tsx +0 -161
- package/src/components/image-lightbox/ImageLightbox.test.tsx +0 -252
- package/src/components/image-lightbox/ImageLightbox.tsx +0 -90
- package/src/components/image-lightbox/constants.ts +0 -11
- package/src/components/image-lightbox/index.ts +0 -2
- package/src/components/image-lightbox/internal/ImageSlide.tsx +0 -107
- package/src/components/image-lightbox/internal/ImageSlideshow.tsx +0 -164
- package/src/components/image-lightbox/internal/useAnimateScroll.ts +0 -55
- package/src/components/image-lightbox/internal/usePointerZoom.ts +0 -148
- package/src/components/image-lightbox/types.ts +0 -50
- package/src/components/image-lightbox/useImageLightbox.tsx +0 -141
- package/src/components/inline-list/InlineList.stories.tsx +0 -78
- package/src/components/inline-list/InlineList.test.tsx +0 -54
- package/src/components/inline-list/InlineList.tsx +0 -96
- package/src/components/inline-list/index.ts +0 -1
- package/src/components/input-helper/InputHelper.stories.tsx +0 -35
- package/src/components/input-helper/InputHelper.test.tsx +0 -57
- package/src/components/input-helper/InputHelper.tsx +0 -65
- package/src/components/input-helper/constants.ts +0 -11
- package/src/components/input-helper/index.ts +0 -1
- package/src/components/input-label/InputLabel.stories.tsx +0 -47
- package/src/components/input-label/InputLabel.test.tsx +0 -61
- package/src/components/input-label/InputLabel.tsx +0 -69
- package/src/components/input-label/index.ts +0 -1
- package/src/components/lightbox/Lightbox.stories.tsx +0 -101
- package/src/components/lightbox/Lightbox.test.tsx +0 -55
- package/src/components/lightbox/Lightbox.tsx +0 -180
- package/src/components/lightbox/index.ts +0 -1
- package/src/components/link/Link.stories.tsx +0 -196
- package/src/components/link/Link.test.tsx +0 -127
- package/src/components/link/Link.tsx +0 -119
- package/src/components/link/index.ts +0 -1
- package/src/components/link-preview/LinkPreview.stories.tsx +0 -61
- package/src/components/link-preview/LinkPreview.test.tsx +0 -107
- package/src/components/link-preview/LinkPreview.tsx +0 -160
- package/src/components/link-preview/index.ts +0 -1
- package/src/components/list/List.stories.tsx +0 -116
- package/src/components/list/List.test.tsx +0 -20
- package/src/components/list/List.tsx +0 -104
- package/src/components/list/ListDivider.stories.tsx +0 -12
- package/src/components/list/ListDivider.test.tsx +0 -24
- package/src/components/list/ListDivider.tsx +0 -37
- package/src/components/list/ListItem.stories.tsx +0 -66
- package/src/components/list/ListItem.test.tsx +0 -95
- package/src/components/list/ListItem.tsx +0 -157
- package/src/components/list/ListSubheader.stories.tsx +0 -11
- package/src/components/list/ListSubheader.test.tsx +0 -23
- package/src/components/list/ListSubheader.tsx +0 -44
- package/src/components/list/index.ts +0 -4
- package/src/components/list/useInteractiveList.tsx +0 -202
- package/src/components/message/Message.stories.tsx +0 -72
- package/src/components/message/Message.test.tsx +0 -77
- package/src/components/message/Message.tsx +0 -100
- package/src/components/message/index.ts +0 -1
- package/src/components/mosaic/Mosaic.stories.tsx +0 -89
- package/src/components/mosaic/Mosaic.test.tsx +0 -79
- package/src/components/mosaic/Mosaic.tsx +0 -98
- package/src/components/mosaic/index.ts +0 -1
- package/src/components/navigation/Navigation.stories.tsx +0 -236
- package/src/components/navigation/Navigation.test.tsx +0 -67
- package/src/components/navigation/Navigation.tsx +0 -81
- package/src/components/navigation/NavigationItem.test.tsx +0 -37
- package/src/components/navigation/NavigationItem.tsx +0 -86
- package/src/components/navigation/NavigationSection.test.tsx +0 -139
- package/src/components/navigation/NavigationSection.tsx +0 -107
- package/src/components/navigation/context.tsx +0 -7
- package/src/components/navigation/index.ts +0 -1
- package/src/components/notification/Notification.test.tsx +0 -95
- package/src/components/notification/Notification.tsx +0 -138
- package/src/components/notification/Notifications.stories.tsx +0 -92
- package/src/components/notification/constants.ts +0 -28
- package/src/components/notification/index.ts +0 -1
- package/src/components/popover/Popover.stories.tsx +0 -264
- package/src/components/popover/Popover.test.tsx +0 -64
- package/src/components/popover/Popover.tsx +0 -201
- package/src/components/popover/constants.ts +0 -62
- package/src/components/popover/index.ts +0 -3
- package/src/components/popover/usePopoverStyle.tsx +0 -184
- package/src/components/popover/useRestoreFocusOnClose.tsx +0 -47
- package/src/components/popover-dialog/PopoverDialog.stories.tsx +0 -64
- package/src/components/popover-dialog/PopoverDialog.test.tsx +0 -140
- package/src/components/popover-dialog/PopoverDialog.tsx +0 -76
- package/src/components/popover-dialog/index.tsx +0 -1
- package/src/components/post-block/PostBlock.test.tsx +0 -29
- package/src/components/post-block/PostBlock.tsx +0 -122
- package/src/components/post-block/index.ts +0 -1
- package/src/components/progress/Progress.tsx +0 -70
- package/src/components/progress/ProgressCircular.stories.tsx +0 -44
- package/src/components/progress/ProgressCircular.test.tsx +0 -48
- package/src/components/progress/ProgressCircular.tsx +0 -84
- package/src/components/progress/ProgressLinear.stories.tsx +0 -12
- package/src/components/progress/ProgressLinear.test.tsx +0 -32
- package/src/components/progress/ProgressLinear.tsx +0 -52
- package/src/components/progress/index.ts +0 -3
- package/src/components/progress-tracker/ProgressTracker.stories.tsx +0 -145
- package/src/components/progress-tracker/ProgressTracker.test.tsx +0 -44
- package/src/components/progress-tracker/ProgressTracker.tsx +0 -87
- package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +0 -67
- package/src/components/progress-tracker/ProgressTrackerProvider.tsx +0 -67
- package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +0 -38
- package/src/components/progress-tracker/ProgressTrackerStep.tsx +0 -159
- package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +0 -36
- package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +0 -69
- package/src/components/progress-tracker/index.ts +0 -4
- package/src/components/radio-button/RadioButton.stories.tsx +0 -71
- package/src/components/radio-button/RadioButton.test.tsx +0 -145
- package/src/components/radio-button/RadioButton.tsx +0 -143
- package/src/components/radio-button/RadioGroup.stories.tsx +0 -39
- package/src/components/radio-button/RadioGroup.test.tsx +0 -31
- package/src/components/radio-button/RadioGroup.tsx +0 -44
- package/src/components/radio-button/index.ts +0 -2
- package/src/components/select/Select.stories.tsx +0 -385
- package/src/components/select/Select.test.tsx +0 -200
- package/src/components/select/Select.tsx +0 -199
- package/src/components/select/SelectMultiple.stories.tsx +0 -315
- package/src/components/select/SelectMultiple.test.tsx +0 -215
- package/src/components/select/SelectMultiple.tsx +0 -206
- package/src/components/select/WithSelectContext.tsx +0 -147
- package/src/components/select/constants.ts +0 -55
- package/src/components/select/index.ts +0 -2
- package/src/components/side-navigation/SideNavigation.stories.tsx +0 -191
- package/src/components/side-navigation/SideNavigation.test.tsx +0 -39
- package/src/components/side-navigation/SideNavigation.tsx +0 -52
- package/src/components/side-navigation/SideNavigationItem.stories.tsx +0 -133
- package/src/components/side-navigation/SideNavigationItem.test.tsx +0 -138
- package/src/components/side-navigation/SideNavigationItem.tsx +0 -170
- package/src/components/side-navigation/index.ts +0 -2
- package/src/components/skeleton/SkeletonCircle.stories.tsx +0 -41
- package/src/components/skeleton/SkeletonCircle.test.tsx +0 -29
- package/src/components/skeleton/SkeletonCircle.tsx +0 -54
- package/src/components/skeleton/SkeletonRectangle.stories.tsx +0 -82
- package/src/components/skeleton/SkeletonRectangle.test.tsx +0 -29
- package/src/components/skeleton/SkeletonRectangle.tsx +0 -90
- package/src/components/skeleton/SkeletonTypography.stories.tsx +0 -21
- package/src/components/skeleton/SkeletonTypography.test.tsx +0 -29
- package/src/components/skeleton/SkeletonTypography.tsx +0 -59
- package/src/components/skeleton/index.ts +0 -3
- package/src/components/slider/Slider.stories.tsx +0 -45
- package/src/components/slider/Slider.test.tsx +0 -31
- package/src/components/slider/Slider.tsx +0 -299
- package/src/components/slider/index.ts +0 -2
- package/src/components/slideshow/Slides.tsx +0 -130
- package/src/components/slideshow/Slideshow.stories.tsx +0 -180
- package/src/components/slideshow/Slideshow.test.tsx +0 -37
- package/src/components/slideshow/Slideshow.tsx +0 -173
- package/src/components/slideshow/SlideshowControls.stories.tsx +0 -102
- package/src/components/slideshow/SlideshowControls.tsx +0 -243
- package/src/components/slideshow/SlideshowItem.tsx +0 -46
- package/src/components/slideshow/SlideshowItemGroup.tsx +0 -60
- package/src/components/slideshow/constants.ts +0 -24
- package/src/components/slideshow/index.ts +0 -4
- package/src/components/slideshow/useKeyNavigate.ts +0 -28
- package/src/components/slideshow/usePaginationVisibleRange.ts +0 -37
- package/src/components/slideshow/useSlideFocusManagement.tsx +0 -92
- package/src/components/slideshow/useSwipeNavigate.ts +0 -18
- package/src/components/switch/Switch.stories.tsx +0 -49
- package/src/components/switch/Switch.test.tsx +0 -146
- package/src/components/switch/Switch.tsx +0 -145
- package/src/components/switch/index.ts +0 -1
- package/src/components/table/Table.test.tsx +0 -31
- package/src/components/table/Table.tsx +0 -61
- package/src/components/table/TableBody.test.tsx +0 -32
- package/src/components/table/TableBody.tsx +0 -44
- package/src/components/table/TableCell.test.tsx +0 -74
- package/src/components/table/TableCell.tsx +0 -132
- package/src/components/table/TableHeader.test.tsx +0 -32
- package/src/components/table/TableHeader.tsx +0 -50
- package/src/components/table/TableRow.test.tsx +0 -42
- package/src/components/table/TableRow.tsx +0 -73
- package/src/components/table/index.ts +0 -5
- package/src/components/tabs/Tab.test.tsx +0 -52
- package/src/components/tabs/Tab.tsx +0 -133
- package/src/components/tabs/TabList.test.tsx +0 -51
- package/src/components/tabs/TabList.tsx +0 -94
- package/src/components/tabs/TabPanel.test.tsx +0 -39
- package/src/components/tabs/TabPanel.tsx +0 -69
- package/src/components/tabs/TabProvider.test.tsx +0 -163
- package/src/components/tabs/TabProvider.tsx +0 -67
- package/src/components/tabs/Tabs.stories.tsx +0 -170
- package/src/components/tabs/index.ts +0 -4
- package/src/components/tabs/state.ts +0 -114
- package/src/components/tabs/test-utils.ts +0 -39
- package/src/components/text/Text.stories.tsx +0 -177
- package/src/components/text/Text.test.tsx +0 -94
- package/src/components/text/Text.tsx +0 -141
- package/src/components/text/index.ts +0 -1
- package/src/components/text-field/TextField.stories.tsx +0 -180
- package/src/components/text-field/TextField.test.tsx +0 -299
- package/src/components/text-field/TextField.tsx +0 -493
- package/src/components/text-field/index.ts +0 -1
- package/src/components/thumbnail/Thumbnail.stories.tsx +0 -448
- package/src/components/thumbnail/Thumbnail.test.tsx +0 -66
- package/src/components/thumbnail/Thumbnail.tsx +0 -248
- package/src/components/thumbnail/index.ts +0 -3
- package/src/components/thumbnail/types.ts +0 -48
- package/src/components/thumbnail/useFocusPointStyle.test.ts +0 -92
- package/src/components/thumbnail/useFocusPointStyle.tsx +0 -107
- package/src/components/thumbnail/useImageLoad.ts +0 -40
- package/src/components/toolbar/Toolbar.tsx +0 -68
- package/src/components/toolbar/index.ts +0 -1
- package/src/components/tooltip/Tooltip.stories.tsx +0 -117
- package/src/components/tooltip/Tooltip.test.tsx +0 -411
- package/src/components/tooltip/Tooltip.tsx +0 -165
- package/src/components/tooltip/constants.ts +0 -8
- package/src/components/tooltip/context.tsx +0 -17
- package/src/components/tooltip/index.ts +0 -1
- package/src/components/tooltip/useInjectTooltipRef.tsx +0 -55
- package/src/components/tooltip/useTooltipOpen.tsx +0 -143
- package/src/components/uploader/Uploader.stories.tsx +0 -109
- package/src/components/uploader/Uploader.test.tsx +0 -148
- package/src/components/uploader/Uploader.tsx +0 -177
- package/src/components/uploader/index.ts +0 -1
- package/src/components/user-block/UserBlock.stories.tsx +0 -135
- package/src/components/user-block/UserBlock.test.tsx +0 -108
- package/src/components/user-block/UserBlock.tsx +0 -193
- package/src/components/user-block/index.ts +0 -1
- package/src/constants.ts +0 -27
- package/src/hooks/useBooleanState.tsx +0 -13
- package/src/hooks/useCallbackOnEscape.ts +0 -34
- package/src/hooks/useChipGroupNavigation.tsx +0 -75
- package/src/hooks/useClickAway.tsx +0 -48
- package/src/hooks/useDisableBodyScroll.ts +0 -28
- package/src/hooks/useEventCallback.tsx +0 -17
- package/src/hooks/useFocus.tsx +0 -21
- package/src/hooks/useFocusTrap.ts +0 -93
- package/src/hooks/useFocusWithin.ts +0 -33
- package/src/hooks/useId.test.tsx +0 -23
- package/src/hooks/useId.ts +0 -15
- package/src/hooks/useImageSize.ts +0 -17
- package/src/hooks/useInfiniteScroll.tsx +0 -60
- package/src/hooks/useIntersectionObserver.tsx +0 -43
- package/src/hooks/useInterval.tsx +0 -31
- package/src/hooks/useKeyboardListNavigation.tsx +0 -204
- package/src/hooks/useListenFocus.tsx +0 -26
- package/src/hooks/useOverflowTooltipLabel.tsx +0 -32
- package/src/hooks/usePopper.ts +0 -12
- package/src/hooks/usePreviousValue.ts +0 -13
- package/src/hooks/useRovingTabIndex.tsx +0 -90
- package/src/hooks/useSizeOnWindowResize.ts +0 -30
- package/src/hooks/useSlideshowControls.ts +0 -246
- package/src/hooks/useStopPropagation.ts +0 -21
- package/src/hooks/useTransitionVisibility.ts +0 -48
- package/src/index.ts +0 -63
- package/src/stories/controls/color.ts +0 -7
- package/src/stories/controls/element.ts +0 -6
- package/src/stories/controls/focusPoint.ts +0 -1
- package/src/stories/controls/icons.ts +0 -126
- package/src/stories/controls/image.ts +0 -84
- package/src/stories/controls/selectArgType.ts +0 -8
- package/src/stories/controls/theme.ts +0 -3
- package/src/stories/controls/typography.ts +0 -5
- package/src/stories/controls/withUndefined.ts +0 -1
- package/src/stories/decorators/withChromaticForceScreenSize.tsx +0 -8
- package/src/stories/decorators/withCombinations.tsx +0 -132
- package/src/stories/decorators/withNestedProps.tsx +0 -23
- package/src/stories/decorators/withResizableBox.tsx +0 -21
- package/src/stories/decorators/withThemedBackground.tsx +0 -18
- package/src/stories/decorators/withValueOnChange.tsx +0 -18
- package/src/stories/decorators/withWrapper.tsx +0 -21
- package/src/stories/generated/Autocomplete/Demos.stories.tsx +0 -7
- package/src/stories/generated/Avatar/Demos.stories.tsx +0 -7
- package/src/stories/generated/Badge/Demos.stories.tsx +0 -9
- package/src/stories/generated/Button/Demos.stories.tsx +0 -11
- package/src/stories/generated/Checkbox/Demos.stories.tsx +0 -6
- package/src/stories/generated/Chip/Demos.stories.tsx +0 -11
- package/src/stories/generated/CommentBlock/Demos.stories.tsx +0 -8
- package/src/stories/generated/DatePicker/Demos.stories.tsx +0 -8
- package/src/stories/generated/Dialog/Demos.stories.tsx +0 -10
- package/src/stories/generated/Divider/Demos.stories.tsx +0 -6
- package/src/stories/generated/Dropdown/Demos.stories.tsx +0 -8
- package/src/stories/generated/ExpansionPanel/Demos.stories.tsx +0 -9
- package/src/stories/generated/Flag/Demos.stories.tsx +0 -6
- package/src/stories/generated/GenericBlock/Demos.stories.tsx +0 -8
- package/src/stories/generated/Heading/Demos.stories.tsx +0 -6
- package/src/stories/generated/Icon/Demos.stories.tsx +0 -8
- package/src/stories/generated/ImageBlock/Demos.stories.tsx +0 -9
- package/src/stories/generated/ImageLightbox/Demos.stories.tsx +0 -6
- package/src/stories/generated/Lightbox/Demos.stories.tsx +0 -6
- package/src/stories/generated/LinkPreview/Demos.stories.tsx +0 -7
- package/src/stories/generated/List/Demos.stories.tsx +0 -11
- package/src/stories/generated/Message/Demos.stories.tsx +0 -11
- package/src/stories/generated/Mosaic/Demos.stories.tsx +0 -10
- package/src/stories/generated/Notification/Demos.stories.tsx +0 -6
- package/src/stories/generated/Popover/Demos.stories.tsx +0 -11
- package/src/stories/generated/PopoverDialog/Demos.stories.tsx +0 -6
- package/src/stories/generated/PostBlock/Demos.stories.tsx +0 -6
- package/src/stories/generated/Progress/Demos.stories.tsx +0 -7
- package/src/stories/generated/ProgressTracker/Demos.stories.tsx +0 -9
- package/src/stories/generated/RadioButton/Demos.stories.tsx +0 -6
- package/src/stories/generated/Select/Demos.stories.tsx +0 -14
- package/src/stories/generated/SideNavigation/Demos.stories.tsx +0 -10
- package/src/stories/generated/Skeleton/Demos.stories.tsx +0 -9
- package/src/stories/generated/Slider/Demos.stories.tsx +0 -9
- package/src/stories/generated/Slideshow/Demos.stories.tsx +0 -8
- package/src/stories/generated/Switch/Demos.stories.tsx +0 -6
- package/src/stories/generated/Table/Demos.stories.tsx +0 -7
- package/src/stories/generated/Tabs/Demos.stories.tsx +0 -8
- package/src/stories/generated/TextField/Demos.stories.tsx +0 -20
- package/src/stories/generated/Thumbnail/Demos.stories.tsx +0 -12
- package/src/stories/generated/Toolbar/Demos.stories.tsx +0 -10
- package/src/stories/generated/Tooltip/Demos.stories.tsx +0 -8
- package/src/stories/generated/Uploader/Demos.stories.tsx +0 -8
- package/src/stories/generated/UserBlock/Demos.stories.tsx +0 -11
- package/src/stories/utils/CustomLink.tsx +0 -13
- package/src/stories/utils/concatPath.tsx +0 -17
- package/src/stories/utils/disableArgTypes.ts +0 -3
- package/src/stories/utils/initDemoShadowDOMPortal.ts +0 -10
- package/src/stories/utils/lorem.ts +0 -59
- package/src/stories/utils/theming.tsx +0 -166
- package/src/stories/utils/toFlattenProps.ts +0 -28
- package/src/stories/utils/withCategory.ts +0 -12
- package/src/testing/utils/ThemeSentinel.tsx +0 -11
- package/src/testing/utils/commonTestsSuiteRTL.tsx +0 -193
- package/src/testing/utils/index.ts +0 -1
- package/src/testing/utils/queries.ts +0 -19
- package/src/untypped-modules.d.ts +0 -5
- package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +0 -70
- package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +0 -69
- package/src/utils/ClickAwayProvider/index.ts +0 -1
- package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +0 -54
- package/src/utils/MaterialThemeSwitcher/index.ts +0 -1
- package/src/utils/Portal/Portal.test.tsx +0 -32
- package/src/utils/Portal/Portal.tsx +0 -33
- package/src/utils/Portal/PortalProvider.stories.jsx +0 -23
- package/src/utils/Portal/PortalProvider.test.tsx +0 -73
- package/src/utils/Portal/PortalProvider.tsx +0 -24
- package/src/utils/Portal/index.tsx +0 -2
- package/src/utils/browser/DOM/findImage.tsx +0 -3
- package/src/utils/browser/DOM/startViewTransition.ts +0 -68
- package/src/utils/browser/focus/constants.ts +0 -7
- package/src/utils/browser/focus/getFirstAndLastFocusable.test.ts +0 -134
- package/src/utils/browser/focus/getFirstAndLastFocusable.ts +0 -21
- package/src/utils/browser/focus/getFocusableElements.test.ts +0 -151
- package/src/utils/browser/focus/getFocusableElements.ts +0 -7
- package/src/utils/browser/isFocusVisible.ts +0 -9
- package/src/utils/browser/isHoverNotSupported.test.js +0 -24
- package/src/utils/browser/isHoverNotSupported.ts +0 -2
- package/src/utils/browser/isReducedMotion.ts +0 -6
- package/src/utils/date/addMonthResetDay.test.ts +0 -13
- package/src/utils/date/addMonthResetDay.ts +0 -9
- package/src/utils/date/formatDayNumber.test.ts +0 -12
- package/src/utils/date/formatDayNumber.ts +0 -5
- package/src/utils/date/getFirstDayOfWeek.test.ts +0 -20
- package/src/utils/date/getFirstDayOfWeek.ts +0 -59
- package/src/utils/date/getMonthCalendar.test.ts +0 -127
- package/src/utils/date/getMonthCalendar.ts +0 -69
- package/src/utils/date/getWeekDays.test.ts +0 -48
- package/src/utils/date/getWeekDays.ts +0 -34
- package/src/utils/date/getYearDisplayName.test.ts +0 -20
- package/src/utils/date/getYearDisplayName.ts +0 -12
- package/src/utils/date/isDateValid.test.ts +0 -15
- package/src/utils/date/isDateValid.ts +0 -4
- package/src/utils/date/isSameDay.test.ts +0 -37
- package/src/utils/date/isSameDay.ts +0 -11
- package/src/utils/disabled/DisabledStateContext.tsx +0 -29
- package/src/utils/disabled/DisabledStateProvider.stories.tsx +0 -94
- package/src/utils/disabled/index.ts +0 -2
- package/src/utils/disabled/useDisableStateProps.test.tsx +0 -74
- package/src/utils/disabled/useDisableStateProps.tsx +0 -37
- package/src/utils/function/makeListenerTowerContext.ts +0 -32
- package/src/utils/index.ts +0 -7
- package/src/utils/locale/getCurrentLocale.ts +0 -4
- package/src/utils/locale/parseLocale.test.ts +0 -17
- package/src/utils/locale/parseLocale.ts +0 -23
- package/src/utils/locale/types.ts +0 -8
- package/src/utils/number/clamp.ts +0 -17
- package/src/utils/object/isEqual.test.ts +0 -25
- package/src/utils/object/isEqual.ts +0 -11
- package/src/utils/partitionMulti.test.ts +0 -27
- package/src/utils/partitionMulti.ts +0 -29
- package/src/utils/react/OnBeforeUnmount.tsx +0 -20
- package/src/utils/react/flattenChildren.ts +0 -32
- package/src/utils/react/forwardRef.ts +0 -11
- package/src/utils/react/forwardRefPolymorphic.ts +0 -9
- package/src/utils/react/mergeRefs.ts +0 -33
- package/src/utils/react/renderButtonOrLink.tsx +0 -16
- package/src/utils/react/renderLink.tsx +0 -17
- package/src/utils/react/skipRender.tsx +0 -18
- package/src/utils/react/unref.ts +0 -7
- package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +0 -37
- package/src/utils/react/wrapChildrenIconWithSpaces.tsx +0 -22
- package/src/utils/theme/ThemeContext.ts +0 -16
- package/src/utils/theme/invertTheme.ts +0 -4
- package/src/utils/type/Comp.ts +0 -14
- package/src/utils/type/ComponentRef.ts +0 -16
- package/src/utils/type/HasAriaDisabled.ts +0 -6
- package/src/utils/type/HasPolymorphicAs.ts +0 -8
- package/src/utils/type/MaybeElementOrRef.ts +0 -6
- package/src/utils/type/index.ts +0 -8
- package/src/utils/type/isComponent.ts +0 -33
- package/src/utils/type/isComponentType.ts +0 -9
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import ReactDOM from 'react-dom';
|
|
2
|
-
|
|
3
|
-
import { MaybeElementOrRef } from '@lumx/react/utils/type';
|
|
4
|
-
|
|
5
|
-
import { unref } from '../../react/unref';
|
|
6
|
-
import { isReducedMotion } from '../isReducedMotion';
|
|
7
|
-
|
|
8
|
-
function setupViewTransitionName(elementRef: MaybeElementOrRef<HTMLElement>, name: string) {
|
|
9
|
-
let originalName: string | null = null;
|
|
10
|
-
return {
|
|
11
|
-
set() {
|
|
12
|
-
const element = unref(elementRef);
|
|
13
|
-
if (!element) return;
|
|
14
|
-
originalName = element.style.viewTransitionName;
|
|
15
|
-
element.style.viewTransitionName = name;
|
|
16
|
-
},
|
|
17
|
-
unset() {
|
|
18
|
-
const element = unref(elementRef);
|
|
19
|
-
if (!element || originalName === null) return;
|
|
20
|
-
element.style.viewTransitionName = originalName;
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Wrapper around the `document.startViewTransition` handling browser incompatibilities, react DOM flush and
|
|
27
|
-
* user preference.
|
|
28
|
-
*
|
|
29
|
-
* @param changes callback containing the changes to apply within the view transition.
|
|
30
|
-
* @param setViewTransitionName set the `viewTransitionName` style on a `source` & `target` to morph these elements.
|
|
31
|
-
*/
|
|
32
|
-
export async function startViewTransition({
|
|
33
|
-
changes,
|
|
34
|
-
viewTransitionName,
|
|
35
|
-
}: {
|
|
36
|
-
changes: () => void;
|
|
37
|
-
viewTransitionName: {
|
|
38
|
-
source: MaybeElementOrRef<HTMLElement>;
|
|
39
|
-
target: MaybeElementOrRef<HTMLElement>;
|
|
40
|
-
name: string;
|
|
41
|
-
};
|
|
42
|
-
}) {
|
|
43
|
-
const start = (document as any)?.startViewTransition?.bind(document);
|
|
44
|
-
const prefersReducedMotion = isReducedMotion();
|
|
45
|
-
const { flushSync } = ReactDOM as any;
|
|
46
|
-
if (prefersReducedMotion || !start || !flushSync || !viewTransitionName?.source || !viewTransitionName?.target) {
|
|
47
|
-
// Skip, apply changes without a transition
|
|
48
|
-
changes();
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Setup set/unset transition name on source & target
|
|
53
|
-
const sourceTransitionName = setupViewTransitionName(viewTransitionName.source, viewTransitionName.name);
|
|
54
|
-
const targetTransitionName = setupViewTransitionName(viewTransitionName.target, viewTransitionName.name);
|
|
55
|
-
|
|
56
|
-
sourceTransitionName.set();
|
|
57
|
-
|
|
58
|
-
// Start view transition, apply changes & flush to DOM
|
|
59
|
-
await start(() => {
|
|
60
|
-
sourceTransitionName.unset();
|
|
61
|
-
|
|
62
|
-
flushSync(changes);
|
|
63
|
-
|
|
64
|
-
targetTransitionName.set();
|
|
65
|
-
}).updateCallbackDone;
|
|
66
|
-
|
|
67
|
-
targetTransitionName.unset();
|
|
68
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** CSS selector listing all tabbable elements. */
|
|
2
|
-
export const TABBABLE_ELEMENTS_SELECTOR =
|
|
3
|
-
'a[href], button, textarea, input:not([type="hidden"]):not([hidden]), [tabindex]';
|
|
4
|
-
|
|
5
|
-
/** CSS selector matching element that are disabled (should not receive focus). */
|
|
6
|
-
export const DISABLED_SELECTOR =
|
|
7
|
-
'[hidden], [tabindex="-1"], [disabled]:not([disabled="false"]), [aria-disabled]:not([aria-disabled="false"])';
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { getFirstAndLastFocusable } from './getFirstAndLastFocusable';
|
|
2
|
-
|
|
3
|
-
function htmlToElement(html: string): any {
|
|
4
|
-
const template = document.createElement('template');
|
|
5
|
-
template.innerHTML = html.trim();
|
|
6
|
-
return template.content.firstChild;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
describe(getFirstAndLastFocusable.name, () => {
|
|
10
|
-
it('should get empty', () => {
|
|
11
|
-
const element = htmlToElement('<div></div>');
|
|
12
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
13
|
-
expect(focusable).toEqual({});
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('should get single item', () => {
|
|
17
|
-
const element = htmlToElement('<div><button /></div>');
|
|
18
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
19
|
-
expect(focusable.last).toBe(focusable.first);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should get first and last', () => {
|
|
23
|
-
const element = htmlToElement(`
|
|
24
|
-
<div>
|
|
25
|
-
<div>Non focusable div</div>
|
|
26
|
-
<button>Simple button</button>
|
|
27
|
-
<div>Non focusable div</div>
|
|
28
|
-
<input />
|
|
29
|
-
<div>Non focusable div</div>
|
|
30
|
-
</div>
|
|
31
|
-
`);
|
|
32
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
33
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
34
|
-
<button>
|
|
35
|
-
Simple button
|
|
36
|
-
</button>
|
|
37
|
-
`);
|
|
38
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
39
|
-
<button>
|
|
40
|
-
Simple button
|
|
41
|
-
</button>
|
|
42
|
-
`);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('match focusable elements', () => {
|
|
46
|
-
it('should match input element', () => {
|
|
47
|
-
const element = htmlToElement('<div><input /></div>');
|
|
48
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
49
|
-
expect(focusable.first).toMatchInlineSnapshot('<input />');
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should match link element', () => {
|
|
53
|
-
const element = htmlToElement('<div><a href="#" /></div>');
|
|
54
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
55
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
56
|
-
<a
|
|
57
|
-
href="#"
|
|
58
|
-
/>
|
|
59
|
-
`);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('should match textarea element', () => {
|
|
63
|
-
const element = htmlToElement('<div><textarea /></div>');
|
|
64
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
65
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
66
|
-
<textarea>
|
|
67
|
-
</div>
|
|
68
|
-
</textarea>
|
|
69
|
-
`);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should match element with tabindex', () => {
|
|
73
|
-
const element = htmlToElement('<div><span tabindex="0" /></div>');
|
|
74
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
75
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
76
|
-
<span
|
|
77
|
-
tabindex="0"
|
|
78
|
-
/>
|
|
79
|
-
`);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should keep disabled=false', () => {
|
|
83
|
-
const element = htmlToElement('<div><button disabled="false" /><button /></div>');
|
|
84
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
85
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
86
|
-
<button
|
|
87
|
-
disabled="false"
|
|
88
|
-
/>
|
|
89
|
-
`);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('should keep aria-disabled=false', () => {
|
|
93
|
-
const element = htmlToElement('<div><button aria-disabled="false" /><button /></div>');
|
|
94
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
95
|
-
expect(focusable.first).toMatchInlineSnapshot(`
|
|
96
|
-
<button
|
|
97
|
-
aria-disabled="false"
|
|
98
|
-
/>
|
|
99
|
-
`);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
describe('skip disabled elements', () => {
|
|
104
|
-
it('should skip disabled', () => {
|
|
105
|
-
const element = htmlToElement('<div><button disabled /><button /></div>');
|
|
106
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
107
|
-
expect(focusable.first).toMatchInlineSnapshot('<button />');
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it('should skip aria-disabled', () => {
|
|
111
|
-
const element = htmlToElement('<div><button aria-disabled /><button /></div>');
|
|
112
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
113
|
-
expect(focusable.first).toMatchInlineSnapshot('<button />');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should skip tabindex=-1', () => {
|
|
117
|
-
const element = htmlToElement('<div><button tabindex="-1" /><button /></div>');
|
|
118
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
119
|
-
expect(focusable.first).toMatchInlineSnapshot('<button />');
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('should skip input type hidden', () => {
|
|
123
|
-
const element = htmlToElement('<div><input type="hidden" /><button /></div>');
|
|
124
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
125
|
-
expect(focusable.first).toMatchInlineSnapshot('<button />');
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('should skip hidden input', () => {
|
|
129
|
-
const element = htmlToElement('<div><input hidden /><button /></div>');
|
|
130
|
-
const focusable = getFirstAndLastFocusable(element);
|
|
131
|
-
expect(focusable.first).toMatchInlineSnapshot('<button />');
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { getFocusableElements } from './getFocusableElements';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Get first and last elements focusable in an element.
|
|
5
|
-
*
|
|
6
|
-
* @param parentElement The element in which to search focusable elements.
|
|
7
|
-
* @return first and last focusable elements
|
|
8
|
-
*/
|
|
9
|
-
export function getFirstAndLastFocusable(parentElement: HTMLElement | ShadowRoot) {
|
|
10
|
-
const focusableElements = getFocusableElements(parentElement);
|
|
11
|
-
|
|
12
|
-
// First non disabled element.
|
|
13
|
-
const first = focusableElements[0];
|
|
14
|
-
// Last non disabled element.
|
|
15
|
-
const last = focusableElements[focusableElements.length - 1];
|
|
16
|
-
|
|
17
|
-
if (last && first) {
|
|
18
|
-
return { first, last };
|
|
19
|
-
}
|
|
20
|
-
return {};
|
|
21
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { getFocusableElements } from './getFocusableElements';
|
|
2
|
-
|
|
3
|
-
function htmlToElement(html: string): any {
|
|
4
|
-
const template = document.createElement('template');
|
|
5
|
-
template.innerHTML = html.trim();
|
|
6
|
-
return template.content.firstChild;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
describe(getFocusableElements.name, () => {
|
|
10
|
-
it('should get empty', () => {
|
|
11
|
-
const element = htmlToElement('<div></div>');
|
|
12
|
-
const focusable = getFocusableElements(element);
|
|
13
|
-
expect(focusable).toEqual([]);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('should get single item', () => {
|
|
17
|
-
const element = htmlToElement('<div><button /></div>');
|
|
18
|
-
const focusable = getFocusableElements(element);
|
|
19
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
20
|
-
[
|
|
21
|
-
<button />,
|
|
22
|
-
]
|
|
23
|
-
`);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe('match focusable elements', () => {
|
|
27
|
-
it('should match input element', () => {
|
|
28
|
-
const element = htmlToElement('<div><input /></div>');
|
|
29
|
-
const focusable = getFocusableElements(element);
|
|
30
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
31
|
-
[
|
|
32
|
-
<input />,
|
|
33
|
-
]
|
|
34
|
-
`);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('should match link element', () => {
|
|
38
|
-
const element = htmlToElement('<div><a href="#" /></div>');
|
|
39
|
-
const focusable = getFocusableElements(element);
|
|
40
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
41
|
-
[
|
|
42
|
-
<a
|
|
43
|
-
href="#"
|
|
44
|
-
/>,
|
|
45
|
-
]
|
|
46
|
-
`);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should match textarea element', () => {
|
|
50
|
-
const element = htmlToElement('<div><textarea /></div>');
|
|
51
|
-
const focusable = getFocusableElements(element);
|
|
52
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
53
|
-
[
|
|
54
|
-
<textarea>
|
|
55
|
-
</div>
|
|
56
|
-
</textarea>,
|
|
57
|
-
]
|
|
58
|
-
`);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should match element with tabindex', () => {
|
|
62
|
-
const element = htmlToElement('<div><span tabindex="0" /></div>');
|
|
63
|
-
const focusable = getFocusableElements(element);
|
|
64
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
65
|
-
[
|
|
66
|
-
<span
|
|
67
|
-
tabindex="0"
|
|
68
|
-
/>,
|
|
69
|
-
]
|
|
70
|
-
`);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('should keep disabled=false', () => {
|
|
74
|
-
const element = htmlToElement('<div><button disabled="false" /><button /></div>');
|
|
75
|
-
const focusable = getFocusableElements(element);
|
|
76
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
77
|
-
[
|
|
78
|
-
<button
|
|
79
|
-
disabled="false"
|
|
80
|
-
/>,
|
|
81
|
-
<button />,
|
|
82
|
-
]
|
|
83
|
-
`);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should keep aria-disabled=false', () => {
|
|
87
|
-
const element = htmlToElement('<div><button aria-disabled="false" /><button /></div>');
|
|
88
|
-
const focusable = getFocusableElements(element);
|
|
89
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
90
|
-
[
|
|
91
|
-
<button
|
|
92
|
-
aria-disabled="false"
|
|
93
|
-
/>,
|
|
94
|
-
<button />,
|
|
95
|
-
]
|
|
96
|
-
`);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
describe('skip disabled elements', () => {
|
|
101
|
-
it('should skip disabled', () => {
|
|
102
|
-
const element = htmlToElement('<div><button disabled /><button /></div>');
|
|
103
|
-
const focusable = getFocusableElements(element);
|
|
104
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
105
|
-
[
|
|
106
|
-
<button />,
|
|
107
|
-
]
|
|
108
|
-
`);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it('should skip aria-disabled', () => {
|
|
112
|
-
const element = htmlToElement('<div><button aria-disabled /><button /></div>');
|
|
113
|
-
const focusable = getFocusableElements(element);
|
|
114
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
115
|
-
[
|
|
116
|
-
<button />,
|
|
117
|
-
]
|
|
118
|
-
`);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it('should skip tabindex=-1', () => {
|
|
122
|
-
const element = htmlToElement('<div><button tabindex="-1" /><button /></div>');
|
|
123
|
-
const focusable = getFocusableElements(element);
|
|
124
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
125
|
-
[
|
|
126
|
-
<button />,
|
|
127
|
-
]
|
|
128
|
-
`);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it('should skip input type hidden', () => {
|
|
132
|
-
const element = htmlToElement('<div><input type="hidden" /><button /></div>');
|
|
133
|
-
const focusable = getFocusableElements(element);
|
|
134
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
135
|
-
[
|
|
136
|
-
<button />,
|
|
137
|
-
]
|
|
138
|
-
`);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it('should skip hidden input', () => {
|
|
142
|
-
const element = htmlToElement('<div><input hidden /><button /></div>');
|
|
143
|
-
const focusable = getFocusableElements(element);
|
|
144
|
-
expect(focusable).toMatchInlineSnapshot(`
|
|
145
|
-
[
|
|
146
|
-
<button />,
|
|
147
|
-
]
|
|
148
|
-
`);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
});
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { DISABLED_SELECTOR, TABBABLE_ELEMENTS_SELECTOR } from './constants';
|
|
2
|
-
|
|
3
|
-
const isNotDisabled = (element: HTMLElement) => !element.matches(DISABLED_SELECTOR);
|
|
4
|
-
|
|
5
|
-
export function getFocusableElements(element: HTMLElement | ShadowRoot): HTMLElement[] {
|
|
6
|
-
return Array.from(element.querySelectorAll<HTMLElement>(TABBABLE_ELEMENTS_SELECTOR)).filter(isNotDisabled);
|
|
7
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/** Check if the focus is visible on the given element */
|
|
2
|
-
export const isFocusVisible = (element?: HTMLElement) => {
|
|
3
|
-
try {
|
|
4
|
-
return element?.matches?.(':focus-visible, [data-focus-visible-added]');
|
|
5
|
-
} catch (_ignored) {
|
|
6
|
-
// Can fail on non browser env
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { isHoverNotSupported } from './isHoverNotSupported';
|
|
2
|
-
|
|
3
|
-
const originalMatchMedia = global.matchMedia;
|
|
4
|
-
|
|
5
|
-
describe('isHoverNotSupported', () => {
|
|
6
|
-
afterAll(() => {
|
|
7
|
-
global.matchMedia = originalMatchMedia;
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it('should return `false` on browsers that do not support matchMedia', () => {
|
|
11
|
-
global.matchMedia = undefined;
|
|
12
|
-
expect(isHoverNotSupported()).toBe(false);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should return `false` on browsers that support matchMedia and does support hover', () => {
|
|
16
|
-
global.matchMedia = () => ({ matches: false });
|
|
17
|
-
expect(isHoverNotSupported()).toBe(false);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('should return `true` on browsers that support matchMedia and does not support hover', () => {
|
|
21
|
-
global.matchMedia = () => ({ matches: true });
|
|
22
|
-
expect(isHoverNotSupported()).toBe(true);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { addMonthResetDay } from '@lumx/react/utils/date/addMonthResetDay';
|
|
2
|
-
|
|
3
|
-
describe(addMonthResetDay.name, () => {
|
|
4
|
-
it('should add month to date', () => {
|
|
5
|
-
const actual = addMonthResetDay(new Date('2017-01-30'), 1);
|
|
6
|
-
expect(actual).toEqual(new Date('2017-02-01'));
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
it('should remove months to date', () => {
|
|
10
|
-
const actual = addMonthResetDay(new Date('2017-01-30'), -2);
|
|
11
|
-
expect(actual).toEqual(new Date('2016-11-01'));
|
|
12
|
-
});
|
|
13
|
-
});
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Add a number of months from a date while resetting the day to prevent month length mismatches.
|
|
3
|
-
*/
|
|
4
|
-
export function addMonthResetDay(date: Date, monthOffset: number) {
|
|
5
|
-
const newDate = new Date(date.getTime());
|
|
6
|
-
newDate.setDate(1);
|
|
7
|
-
newDate.setMonth(date.getMonth() + monthOffset);
|
|
8
|
-
return newDate;
|
|
9
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { formatDayNumber } from '@lumx/react/utils/date/formatDayNumber';
|
|
2
|
-
|
|
3
|
-
describe(formatDayNumber, () => {
|
|
4
|
-
it('should format ', () => {
|
|
5
|
-
// Standard numerical formatting.
|
|
6
|
-
expect(formatDayNumber('en', new Date('2024-05-11'))).toEqual('11');
|
|
7
|
-
// Keep only the numerical part (if any). Raw formatted day number here is '11日'.
|
|
8
|
-
expect(formatDayNumber('ja', new Date('2024-05-11'))).toEqual('11');
|
|
9
|
-
// Else Keep the non-numerical formatting
|
|
10
|
-
expect(formatDayNumber('ar-eg', new Date('2024-05-11'))).toEqual('١١');
|
|
11
|
-
});
|
|
12
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Locale } from '@lumx/react/utils/locale/types';
|
|
2
|
-
import { parseLocale } from '../locale/parseLocale';
|
|
3
|
-
import { getFirstDayOfWeek } from './getFirstDayOfWeek';
|
|
4
|
-
|
|
5
|
-
describe(getFirstDayOfWeek.name, () => {
|
|
6
|
-
it('should return for a valid locales', () => {
|
|
7
|
-
expect(getFirstDayOfWeek(parseLocale('fa-ir') as Locale)).toBe(6);
|
|
8
|
-
expect(getFirstDayOfWeek(parseLocale('ar-ma') as Locale)).toBe(1);
|
|
9
|
-
expect(getFirstDayOfWeek(parseLocale('ar') as Locale)).toBe(6);
|
|
10
|
-
expect(getFirstDayOfWeek(parseLocale('en') as Locale)).toBe(0);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should return for the lang locale if available', () => {
|
|
14
|
-
// Test for a specific locale and its root locale
|
|
15
|
-
const localeWithRoot = parseLocale('es-ES') as Locale; // Spanish (Spain) with root locale es
|
|
16
|
-
const expectedFirstDay = getFirstDayOfWeek(parseLocale('es') as Locale); // First day for root locale 'es'
|
|
17
|
-
|
|
18
|
-
expect(getFirstDayOfWeek(localeWithRoot)).toBe(expectedFirstDay);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Locale } from '@lumx/react/utils/locale/types';
|
|
2
|
-
|
|
3
|
-
/** Get first day of week for locale from the browser API */
|
|
4
|
-
export const getFromBrowser = (locale: Locale): number | undefined => {
|
|
5
|
-
try {
|
|
6
|
-
const localeMetadata = new Intl.Locale(locale.code) as any;
|
|
7
|
-
const { firstDay } = localeMetadata.getWeekInfo?.() || localeMetadata.weekInfo;
|
|
8
|
-
// Sunday is represented as `0` in Date.getDay()
|
|
9
|
-
if (firstDay === 7) return 0;
|
|
10
|
-
return firstDay;
|
|
11
|
-
} catch (e) {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
/** List first day for each locale (could be removed when all browser implement Locale weekInfo) */
|
|
17
|
-
const FIRST_DAY_FOR_LOCALES = [
|
|
18
|
-
{
|
|
19
|
-
// Locales with Sunday as the first day of the week
|
|
20
|
-
localeRX: /^(af|ar-(dz|eg|sa)|bn|cy|en-(ca|us|za)|fr-ca|gd|he|hi|ja|km|ko|pt-br|te|th|ug|zh-hk)$/i,
|
|
21
|
-
firstDay: 0,
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
// Locales with Monday as the first day of the week
|
|
25
|
-
localeRX:
|
|
26
|
-
/^(ar-(ma|tn)|az|be|bg|bs|ca|cs|da|de|el|en-(au|gb|ie|in|nz)|eo|es|et|eu|fi|fr|fy|gl|gu|hr|ht|hu|hy|id|is|it|ka|kk|kn|lb|lt|lv|mk|mn|ms|mt|nb|nl|nn|oc|pl|pt|ro|ru|sk|sl|sq|sr|sv|ta|tr|uk|uz|vi|zh-(cn|tw))$/i,
|
|
27
|
-
firstDay: 1,
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
// Locales with Saturday as the first day of the week
|
|
31
|
-
localeRX: /^(ar|fa-ir)$/i,
|
|
32
|
-
firstDay: 6,
|
|
33
|
-
},
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
/** Find first day of week for locale from the constant */
|
|
37
|
-
const getFromConstant = (locale: Locale, searchBy: keyof Locale = 'code'): number | undefined => {
|
|
38
|
-
// Search for locale (lang + region)
|
|
39
|
-
for (const { localeRX, firstDay } of FIRST_DAY_FOR_LOCALES) {
|
|
40
|
-
if (localeRX.test(locale[searchBy] as string)) return firstDay;
|
|
41
|
-
}
|
|
42
|
-
// Fallback search for locale lang
|
|
43
|
-
if (locale.code !== locale.language) {
|
|
44
|
-
return getFromConstant(locale, 'language');
|
|
45
|
-
}
|
|
46
|
-
return undefined;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Get first day of the week for the given locale code (language + region).
|
|
51
|
-
*/
|
|
52
|
-
export const getFirstDayOfWeek = (locale: Locale): number | undefined => {
|
|
53
|
-
// Get from browser API
|
|
54
|
-
const firstDay = getFromBrowser(locale);
|
|
55
|
-
if (firstDay !== undefined) return firstDay;
|
|
56
|
-
|
|
57
|
-
// Get from constant
|
|
58
|
-
return getFromConstant(locale);
|
|
59
|
-
};
|