@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,17 +0,0 @@
|
|
|
1
|
-
import { parseLocale } from '@lumx/react/utils/locale/parseLocale';
|
|
2
|
-
|
|
3
|
-
describe(parseLocale.name, () => {
|
|
4
|
-
it('should parse various locale formats', () => {
|
|
5
|
-
expect(parseLocale('en')).toEqual({ code: 'en', language: 'en' });
|
|
6
|
-
expect(parseLocale('EN')).toEqual({ code: 'en', language: 'en' });
|
|
7
|
-
expect(parseLocale('en-US')).toEqual({ code: 'en-US', language: 'en', region: 'US' });
|
|
8
|
-
expect(parseLocale('en-us')).toEqual({ code: 'en-US', language: 'en', region: 'US' });
|
|
9
|
-
expect(parseLocale('en_us')).toEqual({ code: 'en-US', language: 'en', region: 'US' });
|
|
10
|
-
expect(parseLocale('EN-US')).toEqual({ code: 'en-US', language: 'en', region: 'US' });
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should fail on invalid locale', () => {
|
|
14
|
-
expect(parseLocale('-')).toBe(undefined);
|
|
15
|
-
expect(parseLocale('-foo')).toBe(undefined);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Locale } from '@lumx/react/utils/locale/types';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Parse locale code
|
|
5
|
-
* @example
|
|
6
|
-
* parseLocale('EN') // => { code: 'en', language: 'en' }
|
|
7
|
-
* parseLocale('en_us') // => { code: 'en-US', language: 'en', region: 'US' }
|
|
8
|
-
* parseLocale('EN-US') // => { code: 'en-US', language: 'en', region: 'US' }
|
|
9
|
-
*/
|
|
10
|
-
export function parseLocale(locale: string): Locale | undefined {
|
|
11
|
-
const [rawLanguage, rawRegion] = locale.split(/[-_]/);
|
|
12
|
-
if (!rawLanguage) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
const language = rawLanguage.toLowerCase();
|
|
16
|
-
let region: string | undefined;
|
|
17
|
-
let code = language;
|
|
18
|
-
if (rawRegion) {
|
|
19
|
-
region = rawRegion.toUpperCase();
|
|
20
|
-
code += `-${region}`;
|
|
21
|
-
}
|
|
22
|
-
return { code, region, language };
|
|
23
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Clamp value in range.
|
|
3
|
-
*
|
|
4
|
-
* @param value Value to clamp.
|
|
5
|
-
* @param min Minimum value.
|
|
6
|
-
* @param max Maximum value.
|
|
7
|
-
* @return Clamped value.
|
|
8
|
-
*/
|
|
9
|
-
export const clamp = (value: number, min: number, max: number): number => {
|
|
10
|
-
if (value < min) {
|
|
11
|
-
return min;
|
|
12
|
-
}
|
|
13
|
-
if (value > max) {
|
|
14
|
-
return max;
|
|
15
|
-
}
|
|
16
|
-
return value;
|
|
17
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { isEqual } from './isEqual';
|
|
2
|
-
|
|
3
|
-
test(isEqual.name, () => {
|
|
4
|
-
expect(isEqual('', '')).toBe(true);
|
|
5
|
-
expect(isEqual(0, 0)).toBe(true);
|
|
6
|
-
expect(isEqual(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY)).toBe(true);
|
|
7
|
-
|
|
8
|
-
expect(isEqual('', 0)).toBe(false);
|
|
9
|
-
|
|
10
|
-
expect(isEqual({}, {})).toBe(true);
|
|
11
|
-
expect(isEqual({ a: 1 }, { a: 1 })).toBe(true);
|
|
12
|
-
expect(isEqual({ a: { a: 1 } }, { a: { a: 1 } })).toBe(true);
|
|
13
|
-
|
|
14
|
-
expect(isEqual([], [])).toBe(true);
|
|
15
|
-
|
|
16
|
-
expect(isEqual([1], [2])).toBe(false);
|
|
17
|
-
expect(isEqual([1], [1, 2])).toBe(false);
|
|
18
|
-
expect(isEqual([1, 2], [2, 1])).toBe(false);
|
|
19
|
-
|
|
20
|
-
expect(isEqual({ a: 1 }, { a: 2 })).toBe(false);
|
|
21
|
-
expect(isEqual({ a: 1 }, {})).toBe(false);
|
|
22
|
-
expect(isEqual({}, { a: 1 })).toBe(false);
|
|
23
|
-
expect(isEqual({ a: { a: 1 } }, { a: { a: 2 } })).toBe(false);
|
|
24
|
-
expect(isEqual({ a: 1 }, { a: 1, b: 1 })).toBe(false);
|
|
25
|
-
});
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/** Minimal recursive deep equal of JS values */
|
|
2
|
-
export function isEqual(obj1: any, obj2: any): boolean {
|
|
3
|
-
if (obj1 === obj2) return true;
|
|
4
|
-
if (typeof obj1 === 'object' && typeof obj2 === 'object') {
|
|
5
|
-
const keys1 = Object.keys(obj1);
|
|
6
|
-
const keys2 = Object.keys(obj2);
|
|
7
|
-
if (keys1.length !== keys2.length) return false;
|
|
8
|
-
return keys1.every((key1) => isEqual(obj1[key1], obj2[key1]));
|
|
9
|
-
}
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import partition from 'lodash/partition';
|
|
2
|
-
import { partitionMulti } from './partitionMulti';
|
|
3
|
-
|
|
4
|
-
describe('partitionMulti', () => {
|
|
5
|
-
it('should act like partition for single predicate', () => {
|
|
6
|
-
const data = [0, 1, 2, 3, 4, 5];
|
|
7
|
-
const isEven = (n: number): boolean => n % 2 === 0;
|
|
8
|
-
|
|
9
|
-
const expected = partition(data, isEven);
|
|
10
|
-
const actual = partitionMulti(data, [isEven]);
|
|
11
|
-
|
|
12
|
-
expect(actual).toEqual(expected);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should partition on multiple predicates', () => {
|
|
16
|
-
type T = string | number | boolean;
|
|
17
|
-
const data: T[] = ['a', 1, 'b', false, true];
|
|
18
|
-
const isString = (s: T): boolean => typeof s === 'string';
|
|
19
|
-
const isNumber = (s: T): boolean => typeof s === 'number';
|
|
20
|
-
|
|
21
|
-
const [strings, numbers, others] = partitionMulti(data, [isString, isNumber]);
|
|
22
|
-
|
|
23
|
-
expect(strings).toEqual(['a', 'b']);
|
|
24
|
-
expect(numbers).toEqual([1]);
|
|
25
|
-
expect(others).toEqual([false, true]);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import concat from 'lodash/concat';
|
|
2
|
-
import dropRight from 'lodash/dropRight';
|
|
3
|
-
import last from 'lodash/last';
|
|
4
|
-
import partition from 'lodash/partition';
|
|
5
|
-
import reduce from 'lodash/reduce';
|
|
6
|
-
|
|
7
|
-
import { Predicate } from '@lumx/core/js/types';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Similar to lodash `partition` function but working with multiple predicates.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* const isString = (s) => typeof s === 'string'
|
|
14
|
-
* const isNumber = (s) => typeof s === 'number'
|
|
15
|
-
* const [strings, numbers, others] = partitionMulti(['a', 1, 'b', false], [isString, isNumber])
|
|
16
|
-
* //=> [['a', 'b'], [1], [false]]
|
|
17
|
-
*
|
|
18
|
-
* @param elements array of elements
|
|
19
|
-
* @param predicates array of predicates to apply on elements
|
|
20
|
-
* @return partitioned elements by the given predicates
|
|
21
|
-
*/
|
|
22
|
-
export function partitionMulti<T>(elements: T[], predicates: Array<Predicate<T>>): T[][] {
|
|
23
|
-
return reduce(
|
|
24
|
-
predicates,
|
|
25
|
-
(partitioned: T[][], predicate: Predicate<T>) =>
|
|
26
|
-
concat(dropRight(partitioned), partition(last(partitioned), predicate)),
|
|
27
|
-
[elements],
|
|
28
|
-
);
|
|
29
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React, { useLayoutEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Helper component using useLayoutEffect to trigger a callback on before unmount.
|
|
5
|
-
*
|
|
6
|
-
* The callback must be wrapped in a React ref to avoid updating the `useLayoutEffect` before the un-mount
|
|
7
|
-
*/
|
|
8
|
-
export const OnBeforeUnmount = ({ callbackRef }: { callbackRef: React.RefObject<(() => void) | undefined> }) => {
|
|
9
|
-
useLayoutEffect(
|
|
10
|
-
() => {
|
|
11
|
-
return () => {
|
|
12
|
-
// On unmount
|
|
13
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
14
|
-
callbackRef.current?.();
|
|
15
|
-
};
|
|
16
|
-
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
17
|
-
[],
|
|
18
|
-
);
|
|
19
|
-
return null;
|
|
20
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import get from 'lodash/get';
|
|
2
|
-
import { Children, Key, ReactChild, ReactNode, cloneElement, isValidElement } from 'react';
|
|
3
|
-
import { isFragment } from 'react-is';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Flatten list of react nodes removing fragments and adding keys.
|
|
7
|
-
* based on: https://github.com/grrowl/react-keyed-flatten-children/blob/5d421644a449765ddd62b659946196b4b5d7b135/index.ts
|
|
8
|
-
*
|
|
9
|
-
* @param children React nodes to flatten.
|
|
10
|
-
* @return Flattened react nodes.
|
|
11
|
-
* @deprecated This function was used to develop keyboard navigation in the List component,
|
|
12
|
-
* but we will replace this with a better method that does not require to hack the children inspection
|
|
13
|
-
*
|
|
14
|
-
* TODO: remove List keyboard navigation once we have provided alternative component (Menu, Combobox, etc.),
|
|
15
|
-
* remove this function and then remove react-is from the dependencies
|
|
16
|
-
*/
|
|
17
|
-
export function flattenChildren(children: ReactNode) {
|
|
18
|
-
function recur(nodes: ReactNode, keys: Key[] = []) {
|
|
19
|
-
return Children.toArray(nodes).reduce((acc: ReactChild[], node, index) => {
|
|
20
|
-
const nodeKeys = keys.concat(get(node, 'key') ?? index);
|
|
21
|
-
if (isFragment(node)) {
|
|
22
|
-
acc.push(...recur(node.props.children, nodeKeys));
|
|
23
|
-
} else if (isValidElement(node)) {
|
|
24
|
-
acc.push(cloneElement(node, { key: nodeKeys.join('.') }));
|
|
25
|
-
} else if (typeof node === 'string' || typeof node === 'number') {
|
|
26
|
-
acc.push(node);
|
|
27
|
-
}
|
|
28
|
-
return acc;
|
|
29
|
-
}, []);
|
|
30
|
-
}
|
|
31
|
-
return recur(children);
|
|
32
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React, { type ReactNode, type ForwardedRef } from 'react';
|
|
2
|
-
import type { Comp } from '../type';
|
|
3
|
-
|
|
4
|
-
type ForwardRef = <P, T = HTMLElement, A = unknown>(
|
|
5
|
-
render: (props: P, ref: ForwardedRef<T>) => ReactNode,
|
|
6
|
-
) => Comp<P, T> & A;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* React.forwardRef but re-typed to attach some custom metadata on our components.
|
|
10
|
-
*/
|
|
11
|
-
export const forwardRef = React.forwardRef as ForwardRef;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React, { type ElementType } from 'react';
|
|
2
|
-
import type { ComponentRef } from '@lumx/react/utils/type';
|
|
3
|
-
|
|
4
|
-
type ForwardRefPolymorphic = <E extends ElementType, P extends { as?: E }>(
|
|
5
|
-
render: (props: P, ref: ComponentRef<E>) => React.ReactNode,
|
|
6
|
-
) => (props: P & React.ComponentProps<E> & { ref?: ComponentRef<E> }) => React.JSX.Element;
|
|
7
|
-
|
|
8
|
-
/** Same as `React.forwardRef` but inferring Ref type from the `as` prop. */
|
|
9
|
-
export const forwardRefPolymorphic = React.forwardRef as ForwardRefPolymorphic;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Falsy } from '@lumx/react/utils/type';
|
|
2
|
-
import { MutableRefObject, useMemo } from 'react';
|
|
3
|
-
|
|
4
|
-
type FnRef<T> = (value: T) => void;
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Merge refs into a single function ref.
|
|
8
|
-
*
|
|
9
|
-
* @param refs React references to merge.
|
|
10
|
-
* @return the merged ref.
|
|
11
|
-
*/
|
|
12
|
-
export function mergeRefs<T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>): FnRef<T> {
|
|
13
|
-
return (value) =>
|
|
14
|
-
refs.forEach((ref) => {
|
|
15
|
-
if (typeof ref === 'function') {
|
|
16
|
-
ref(value);
|
|
17
|
-
} else if (ref) {
|
|
18
|
-
// eslint-disable-next-line no-param-reassign
|
|
19
|
-
(ref as MutableRefObject<T>).current = value;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Same as `mergeRefs` but memoized
|
|
26
|
-
*/
|
|
27
|
-
export const useMergeRefs = <T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>) => {
|
|
28
|
-
return useMemo(
|
|
29
|
-
() => mergeRefs(...refs),
|
|
30
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
|
-
refs,
|
|
32
|
-
);
|
|
33
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
-
import { renderLink } from './renderLink';
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
linkAs?: any;
|
|
6
|
-
href?: any;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Render <button> HTML component, fallbacks to `<a>` when a `href` is provided or a custom component with `linkAs`.
|
|
11
|
-
*/
|
|
12
|
-
export const renderButtonOrLink = <P extends Props>(props: P, ...children: ReactNode[]): ReactElement => {
|
|
13
|
-
const { linkAs, href, ...forwardedProps } = props;
|
|
14
|
-
if (linkAs || href) return renderLink(props, ...children);
|
|
15
|
-
return React.createElement('button', { type: 'button', ...forwardedProps }, ...children);
|
|
16
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
interface Props {
|
|
4
|
-
linkAs?: any;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Render link with default <a> HTML component or a custom one provided by `linkAs`.
|
|
9
|
-
*
|
|
10
|
-
* Can be used to inject the `Link` component from `react-router` and provide better a11y on LumX components.
|
|
11
|
-
*
|
|
12
|
-
* @param linkAs Custom link component.
|
|
13
|
-
* @param children Link children.
|
|
14
|
-
* @return A link.
|
|
15
|
-
*/
|
|
16
|
-
export const renderLink = <P extends Props>({ linkAs, ...forwardedProps }: P, ...children: ReactNode[]): ReactElement =>
|
|
17
|
-
React.createElement(linkAs || 'a', forwardedProps, ...children);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@lumx/react/constants';
|
|
2
|
-
import type { Comp } from '@lumx/react/utils/type';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* HOC component wrapping a component to skip render if predicate return falsy
|
|
7
|
-
*/
|
|
8
|
-
export const skipRender = <P, T>(predicate: (props: P) => any, Component: Comp<P, T>) => {
|
|
9
|
-
const Wrapper = React.forwardRef<T, P>((props, ref) => {
|
|
10
|
-
if (!DOCUMENT) {
|
|
11
|
-
// Can't render in SSR.
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
return <Component ref={ref} {...props} />;
|
|
15
|
-
});
|
|
16
|
-
Wrapper.displayName = Component.displayName;
|
|
17
|
-
return Wrapper;
|
|
18
|
-
};
|
package/src/utils/react/unref.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MaybeElementOrRef } from '@lumx/react/utils/type';
|
|
2
|
-
|
|
3
|
-
/** Unref a react ref or element */
|
|
4
|
-
export function unref(maybeElement: MaybeElementOrRef<HTMLElement>) {
|
|
5
|
-
if (maybeElement instanceof HTMLElement) return maybeElement;
|
|
6
|
-
return maybeElement?.current;
|
|
7
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import React, { Fragment } from 'react';
|
|
2
|
-
|
|
3
|
-
import { Icon } from '@lumx/react';
|
|
4
|
-
import { mdiEarth, mdiFoodApple, mdiPencil } from '@lumx/icons';
|
|
5
|
-
import { wrapChildrenIconWithSpaces } from './wrapChildrenIconWithSpaces';
|
|
6
|
-
|
|
7
|
-
describe(wrapChildrenIconWithSpaces, () => {
|
|
8
|
-
it('should ignore null or undefined children', () => {
|
|
9
|
-
expect(wrapChildrenIconWithSpaces(undefined)).toBeUndefined();
|
|
10
|
-
expect(wrapChildrenIconWithSpaces(null)).toBeUndefined();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should wrap icons with spaces', () => {
|
|
14
|
-
expect(
|
|
15
|
-
wrapChildrenIconWithSpaces(
|
|
16
|
-
<>
|
|
17
|
-
<Icon icon={mdiEarth} />a string
|
|
18
|
-
<>
|
|
19
|
-
some more string with
|
|
20
|
-
<Icon icon={mdiFoodApple} />
|
|
21
|
-
</>
|
|
22
|
-
{['array with', <Icon key="custom-key" icon={mdiPencil} />]}
|
|
23
|
-
</>,
|
|
24
|
-
),
|
|
25
|
-
).toEqual([
|
|
26
|
-
// prettier-ignore
|
|
27
|
-
<Fragment key=".0">
|
|
28
|
-
{' '}
|
|
29
|
-
<Icon key=".0" icon={mdiEarth} />{' '}a string
|
|
30
|
-
<Fragment key=".2">
|
|
31
|
-
some more string with{' '}<Icon key=".1" icon={mdiFoodApple} />{' '}
|
|
32
|
-
</Fragment>
|
|
33
|
-
array with{' '}<Icon key=".3:$custom-key" icon={mdiPencil} />{' '}
|
|
34
|
-
</Fragment>,
|
|
35
|
-
]);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React, { Children } from 'react';
|
|
2
|
-
import { isComponentType } from '@lumx/react/utils/type';
|
|
3
|
-
import { Icon } from '@lumx/react';
|
|
4
|
-
|
|
5
|
-
/** Force wrap spaces around icons to make sure they are never stuck against text. */
|
|
6
|
-
export function wrapChildrenIconWithSpaces(children: React.ReactNode): React.ReactNode {
|
|
7
|
-
if (children === null || children === undefined) return undefined;
|
|
8
|
-
return Children.toArray(children).flatMap((child) => {
|
|
9
|
-
if (isComponentType(Icon)(child)) {
|
|
10
|
-
return [' ', child, ' '];
|
|
11
|
-
}
|
|
12
|
-
if (
|
|
13
|
-
React.isValidElement(child) &&
|
|
14
|
-
child.props &&
|
|
15
|
-
typeof child.props === 'object' &&
|
|
16
|
-
'children' in child.props
|
|
17
|
-
) {
|
|
18
|
-
return React.cloneElement(child, undefined, wrapChildrenIconWithSpaces(child.props.children));
|
|
19
|
-
}
|
|
20
|
-
return child;
|
|
21
|
-
});
|
|
22
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { Theme } from '@lumx/react';
|
|
3
|
-
|
|
4
|
-
type ThemeContextValue = Theme | undefined;
|
|
5
|
-
export const ThemeContext = React.createContext<ThemeContextValue>(undefined);
|
|
6
|
-
|
|
7
|
-
/** Provide a theme context to all children. */
|
|
8
|
-
export const ThemeProvider = ThemeContext.Provider as React.FC<{
|
|
9
|
-
value: ThemeContextValue;
|
|
10
|
-
children?: React.ReactNode;
|
|
11
|
-
}>;
|
|
12
|
-
|
|
13
|
-
/** Get the theme in the current context. */
|
|
14
|
-
export function useTheme(): ThemeContextValue {
|
|
15
|
-
return React.useContext(ThemeContext);
|
|
16
|
-
}
|
package/src/utils/type/Comp.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ReactElement, Ref } from 'react';
|
|
2
|
-
|
|
3
|
-
/** LumX Component Type. */
|
|
4
|
-
export type Comp<P, T = HTMLElement> = {
|
|
5
|
-
(props: P & { ref?: Ref<T> }): ReactElement | null;
|
|
6
|
-
/** React component type. */
|
|
7
|
-
readonly $$typeof: symbol;
|
|
8
|
-
/** Component default props. */
|
|
9
|
-
defaultProps?: Partial<P>;
|
|
10
|
-
/** Component name. */
|
|
11
|
-
displayName?: string;
|
|
12
|
-
/** Component base class name. */
|
|
13
|
-
className?: string;
|
|
14
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type React from 'react';
|
|
2
|
-
import type { Comp } from './Comp';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Extract ref type for a component or JSX intrinsic element
|
|
6
|
-
*
|
|
7
|
-
* @example ComponentRef<'div'> => React.Ref<HTMLDivElement>
|
|
8
|
-
* @example ComponentRef<Button> => React.Ref<HTMLButtonElement
|
|
9
|
-
*/
|
|
10
|
-
export type ComponentRef<C> = C extends keyof JSX.IntrinsicElements
|
|
11
|
-
? JSX.IntrinsicElements[C]['ref']
|
|
12
|
-
: C extends Comp<any, infer T>
|
|
13
|
-
? React.Ref<T>
|
|
14
|
-
: C extends React.JSXElementConstructor<{ ref?: infer R }>
|
|
15
|
-
? R
|
|
16
|
-
: never;
|
package/src/utils/type/index.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export type * from '@lumx/core/js/types';
|
|
2
|
-
|
|
3
|
-
export type { Comp } from './Comp';
|
|
4
|
-
export type { ComponentRef } from './ComponentRef';
|
|
5
|
-
export type { HasPolymorphicAs } from './HasPolymorphicAs';
|
|
6
|
-
export { isComponent } from './isComponent';
|
|
7
|
-
export { isComponentType } from './isComponentType';
|
|
8
|
-
export type { MaybeElementOrRef } from './MaybeElementOrRef';
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { ReactElement, ReactNode } from 'react';
|
|
2
|
-
import get from 'lodash/get';
|
|
3
|
-
import type { Comp } from './Comp';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Properties of a component to use to determine it's name.
|
|
7
|
-
* In the order of preference.
|
|
8
|
-
*/
|
|
9
|
-
const NAME_PROPERTIES: string[] = [
|
|
10
|
-
'type',
|
|
11
|
-
'type.displayName',
|
|
12
|
-
'displayName',
|
|
13
|
-
'name',
|
|
14
|
-
'type.name',
|
|
15
|
-
'props.mdxType',
|
|
16
|
-
'_reactInternalFiber.elementType.name',
|
|
17
|
-
];
|
|
18
|
-
/**
|
|
19
|
-
* Create a predicate function that checks if a ReactNode is a react element from the given component.
|
|
20
|
-
*
|
|
21
|
-
* @param component React function component or the component name
|
|
22
|
-
* @return predicate returning true if value is instance of the component
|
|
23
|
-
*/
|
|
24
|
-
export const isComponent =
|
|
25
|
-
<C>(component: Comp<C, any> | string) =>
|
|
26
|
-
(instance: ReactNode): instance is ReactElement => {
|
|
27
|
-
const componentName = typeof component === 'string' ? component : component.displayName;
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
!!get(instance, '$$typeof') &&
|
|
31
|
-
NAME_PROPERTIES.some((nameProperty: string): boolean => get(instance, nameProperty) === componentName)
|
|
32
|
-
);
|
|
33
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Similar to `isComponent` but more precise as it's not based on the component `displayName` but on the component function reference.
|
|
5
|
-
*/
|
|
6
|
-
export const isComponentType =
|
|
7
|
-
(type: ReactElement['type']) =>
|
|
8
|
-
(node: ReactNode): node is ReactElement =>
|
|
9
|
-
React.isValidElement(node) && node.type === type;
|