@lumx/react 3.21.1 → 3.21.2-alpha.1
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 → ClSM3-wl.js} +24 -101
- package/_internal/ClSM3-wl.js.map +1 -0
- package/index.d.ts +42 -385
- package/index.js +4455 -5351
- package/index.js.map +1 -1
- package/package.json +14 -29
- package/utils/index.d.ts +10 -9
- 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 -36
- 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 -163
- 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 -245
- 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 -187
- 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 -73
- package/src/components/icon/Icon.test.tsx +0 -127
- package/src/components/icon/Icon.tsx +0 -135
- 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 -256
- 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 -129
- package/src/components/link/Link.tsx +0 -108
- 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 -82
- package/src/components/navigation/NavigationSection.test.tsx +0 -139
- package/src/components/navigation/NavigationSection.tsx +0 -108
- package/src/components/navigation/context.tsx +0 -7
- package/src/components/navigation/index.ts +0 -1
- package/src/components/notification/Notification.test.tsx +0 -96
- 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 -201
- 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 -165
- 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/RawInputText.stories.tsx +0 -18
- package/src/components/text-field/RawInputText.test.tsx +0 -59
- package/src/components/text-field/RawInputText.tsx +0 -69
- package/src/components/text-field/RawInputTextarea.stories.tsx +0 -22
- package/src/components/text-field/RawInputTextarea.test.tsx +0 -64
- package/src/components/text-field/RawInputTextarea.tsx +0 -74
- package/src/components/text-field/TextField.stories.tsx +0 -180
- package/src/components/text-field/TextField.test.tsx +0 -307
- package/src/components/text-field/TextField.tsx +0 -323
- package/src/components/text-field/constants.ts +0 -16
- package/src/components/text-field/index.ts +0 -3
- package/src/components/text-field/useFitRowsToContent.ts +0 -42
- package/src/components/thumbnail/Thumbnail.stories.tsx +0 -448
- package/src/components/thumbnail/Thumbnail.test.tsx +0 -90
- 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 -417
- 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 -9
- 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/RawClickable.test.tsx +0 -153
- package/src/utils/react/RawClickable.tsx +0 -65
- 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/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/HasRequiredLinkHref.ts +0 -1
- package/src/utils/type/MaybeElementOrRef.ts +0 -6
- package/src/utils/type/index.ts +0 -9
- package/src/utils/type/isComponent.ts +0 -33
- package/src/utils/type/isComponentType.ts +0 -9
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { createPortal } from 'react-dom';
|
|
3
|
-
import { PortalContext } from './PortalProvider';
|
|
4
|
-
|
|
5
|
-
export interface PortalProps {
|
|
6
|
-
enabled?: boolean;
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Render children in a portal outside the current DOM position
|
|
12
|
-
* (defaults to `document.body` but can be customized with the PortalContextProvider)
|
|
13
|
-
*/
|
|
14
|
-
export const Portal: React.FC<PortalProps> = ({ children, enabled = true }) => {
|
|
15
|
-
const init = React.useContext(PortalContext);
|
|
16
|
-
const context = React.useMemo(
|
|
17
|
-
() => {
|
|
18
|
-
return enabled ? init() : null;
|
|
19
|
-
},
|
|
20
|
-
// Only update on 'enabled'
|
|
21
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22
|
-
[enabled],
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
React.useLayoutEffect(() => {
|
|
26
|
-
return context?.teardown;
|
|
27
|
-
}, [context?.teardown, enabled]);
|
|
28
|
-
|
|
29
|
-
if (!context?.container) {
|
|
30
|
-
return <>{children}</>;
|
|
31
|
-
}
|
|
32
|
-
return createPortal(children, context.container);
|
|
33
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Button } from '@lumx/react';
|
|
3
|
-
import { initDemoShadowDOMPortal } from '@lumx/react/stories/utils/initDemoShadowDOMPortal';
|
|
4
|
-
import { PortalProvider } from './PortalProvider';
|
|
5
|
-
import { Portal } from './Portal';
|
|
6
|
-
|
|
7
|
-
export default {
|
|
8
|
-
title: 'LumX components/PortalProvider',
|
|
9
|
-
component: PortalProvider,
|
|
10
|
-
args: { enabled: true },
|
|
11
|
-
parameters: { chromatic: { disable: true } },
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Demonstrate how to customize portals to render into a custom shadow root
|
|
16
|
-
*/
|
|
17
|
-
export const RenderInShadowDOM = ({ enabled }) => (
|
|
18
|
-
<PortalProvider value={initDemoShadowDOMPortal}>
|
|
19
|
-
<Portal enabled={enabled}>
|
|
20
|
-
<Button>My button {!enabled && 'not'} in a shadow DOM portal</Button>
|
|
21
|
-
</Portal>
|
|
22
|
-
</PortalProvider>
|
|
23
|
-
);
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { render, screen } from '@testing-library/react';
|
|
3
|
-
import { PortalInit, PortalProvider } from './PortalProvider';
|
|
4
|
-
import { Portal } from './Portal';
|
|
5
|
-
|
|
6
|
-
const TEST_ID = 'portal-child';
|
|
7
|
-
const PORTAL_CONTAINER_ID = 'portal-container';
|
|
8
|
-
|
|
9
|
-
const PortalChild = () => <div data-testid={TEST_ID}>Hello from portal</div>;
|
|
10
|
-
|
|
11
|
-
describe('PortalProvider', () => {
|
|
12
|
-
it('should render portal content in the provided container', () => {
|
|
13
|
-
const portalContainer = document.createElement('div');
|
|
14
|
-
portalContainer.id = PORTAL_CONTAINER_ID;
|
|
15
|
-
document.body.appendChild(portalContainer);
|
|
16
|
-
|
|
17
|
-
const getContainer: PortalInit = () => ({ container: portalContainer });
|
|
18
|
-
|
|
19
|
-
render(
|
|
20
|
-
<PortalProvider value={getContainer}>
|
|
21
|
-
<Portal>
|
|
22
|
-
<PortalChild />
|
|
23
|
-
</Portal>
|
|
24
|
-
</PortalProvider>,
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
const child = screen.getByTestId(TEST_ID);
|
|
28
|
-
expect(child.parentElement).toBe(portalContainer);
|
|
29
|
-
portalContainer.remove();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('should call teardown on unmount', () => {
|
|
33
|
-
const teardownMock = vi.fn();
|
|
34
|
-
const portalContainer = document.createElement('div');
|
|
35
|
-
portalContainer.id = PORTAL_CONTAINER_ID;
|
|
36
|
-
document.body.appendChild(portalContainer);
|
|
37
|
-
|
|
38
|
-
const getContainer: PortalInit = () => ({
|
|
39
|
-
container: portalContainer,
|
|
40
|
-
teardown: teardownMock,
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const { unmount } = render(
|
|
44
|
-
<PortalProvider value={getContainer}>
|
|
45
|
-
<Portal>
|
|
46
|
-
<PortalChild />
|
|
47
|
-
</Portal>
|
|
48
|
-
</PortalProvider>,
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
expect(teardownMock).not.toHaveBeenCalled();
|
|
52
|
-
unmount();
|
|
53
|
-
expect(teardownMock).toHaveBeenCalledTimes(1);
|
|
54
|
-
portalContainer.remove();
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('should render inline if provider does not return a container', () => {
|
|
58
|
-
const getContainer: PortalInit = () => ({}); // No container
|
|
59
|
-
|
|
60
|
-
const { container } = render(
|
|
61
|
-
<div id="wrapper">
|
|
62
|
-
<PortalProvider value={getContainer}>
|
|
63
|
-
<Portal>
|
|
64
|
-
<PortalChild />
|
|
65
|
-
</Portal>
|
|
66
|
-
</PortalProvider>
|
|
67
|
-
</div>,
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
const child = screen.getByTestId(TEST_ID);
|
|
71
|
-
expect(child.parentElement).toBe(container.querySelector('#wrapper'));
|
|
72
|
-
});
|
|
73
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
type Container = DocumentFragment | Element;
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Portal initializing function.
|
|
7
|
-
* If it does not provide a container, the Portal children will render in classic React tree and not in a portal.
|
|
8
|
-
*/
|
|
9
|
-
export type PortalInit = () => {
|
|
10
|
-
container?: Container;
|
|
11
|
-
teardown?: () => void;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export const PortalContext = React.createContext<PortalInit>(() => ({ container: document.body }));
|
|
15
|
-
|
|
16
|
-
export interface PortalProviderProps {
|
|
17
|
-
children?: React.ReactNode;
|
|
18
|
-
value: PortalInit;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Customize where <Portal> wrapped elements render (tooltip, popover, dialog, etc.)
|
|
23
|
-
*/
|
|
24
|
-
export const PortalProvider: React.FC<PortalProviderProps> = PortalContext.Provider;
|
|
@@ -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
|
-
});
|