@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,135 +0,0 @@
|
|
|
1
|
-
/* eslint-disable jsx-a11y/anchor-is-valid */
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
import { mdiMenuDown, mdiStar } from '@lumx/icons';
|
|
5
|
-
import { Badge, ColorPalette, Icon, IconButton, Link, Orientation, Size, Text } from '@lumx/react';
|
|
6
|
-
import { CustomLink } from '@lumx/react/stories/utils/CustomLink';
|
|
7
|
-
|
|
8
|
-
import { AVATAR_IMAGES } from '@lumx/react/stories/controls/image';
|
|
9
|
-
import { withCombinations } from '@lumx/react/stories/decorators/withCombinations';
|
|
10
|
-
import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
|
|
11
|
-
import { withResizableBox } from '@lumx/react/stories/decorators/withResizableBox';
|
|
12
|
-
import { UserBlock } from './UserBlock';
|
|
13
|
-
|
|
14
|
-
const sizes = [Size.xs, Size.s, Size.m, Size.l];
|
|
15
|
-
|
|
16
|
-
export default {
|
|
17
|
-
title: 'LumX components/user-block/UserBlock',
|
|
18
|
-
component: UserBlock,
|
|
19
|
-
args: UserBlock.defaultProps,
|
|
20
|
-
argTypes: {
|
|
21
|
-
size: getSelectArgType(sizes),
|
|
22
|
-
orientation: getSelectArgType(Orientation),
|
|
23
|
-
},
|
|
24
|
-
decorators: [withResizableBox({ width: 'auto', minWidth: 'min-content', height: 'auto' })],
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/** Only an avatar */
|
|
28
|
-
export const AvatarOnly = {
|
|
29
|
-
args: { avatarProps: { image: AVATAR_IMAGES.avatar1 } },
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/** Avatar and name */
|
|
33
|
-
export const AvatarAndName = {
|
|
34
|
-
args: { ...AvatarOnly.args, name: 'Emmitt O. Lum' },
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/** Avatar and children */
|
|
38
|
-
export const AvatarAndCustomName = {
|
|
39
|
-
args: {
|
|
40
|
-
...AvatarOnly.args,
|
|
41
|
-
name: (
|
|
42
|
-
<Text as="span" color="green">
|
|
43
|
-
Emmitt O. Lum
|
|
44
|
-
</Text>
|
|
45
|
-
),
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/** Avatar, name and secondary fields */
|
|
50
|
-
export const AvatarAndNameAndSecondaryFields = {
|
|
51
|
-
args: {
|
|
52
|
-
...AvatarAndName.args,
|
|
53
|
-
fields: ['Creative developer', 'Denpasar'],
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/** With Right component */
|
|
58
|
-
export const WithAfter = {
|
|
59
|
-
args: {
|
|
60
|
-
...AvatarAndNameAndSecondaryFields.args,
|
|
61
|
-
after: <IconButton label="View" icon={mdiMenuDown} emphasis="low" />,
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/** With after component */
|
|
66
|
-
export const WithAdditionalFields = {
|
|
67
|
-
args: {
|
|
68
|
-
...AvatarAndName.args,
|
|
69
|
-
fields: [
|
|
70
|
-
<Text key={0} as="span" color="dark">
|
|
71
|
-
Published a post in <Link href="#">Space</Link>
|
|
72
|
-
</Text>,
|
|
73
|
-
<time key={1}>May 13, 2025</time>,
|
|
74
|
-
],
|
|
75
|
-
additionalFields: (
|
|
76
|
-
<Text as="span" typography="body1">
|
|
77
|
-
Works at the Toronto office
|
|
78
|
-
</Text>
|
|
79
|
-
),
|
|
80
|
-
},
|
|
81
|
-
parameters: {
|
|
82
|
-
// Testing constrained space
|
|
83
|
-
wrapperProps: { style: { width: 245 } },
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
/** Size variants */
|
|
88
|
-
export const SizesAndOrientations = {
|
|
89
|
-
args: AvatarAndNameAndSecondaryFields.args,
|
|
90
|
-
decorators: [
|
|
91
|
-
withCombinations({
|
|
92
|
-
combinations: {
|
|
93
|
-
rows: { key: 'size', options: sizes },
|
|
94
|
-
cols: { key: 'orientation', options: Object.values(Orientation) },
|
|
95
|
-
},
|
|
96
|
-
}),
|
|
97
|
-
],
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
/** Setting `onClick` to use it as a button */
|
|
101
|
-
export const AsButton = {
|
|
102
|
-
args: AvatarAndNameAndSecondaryFields.args,
|
|
103
|
-
argTypes: { onClick: { action: true } },
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
/** Setting the `linkProps` prop to use it as a link */
|
|
107
|
-
export const AsLink = {
|
|
108
|
-
args: {
|
|
109
|
-
...AvatarAndNameAndSecondaryFields.args,
|
|
110
|
-
linkProps: { href: 'https://example.com' },
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
/** Setting the `linkAs` prop to inject a custom link component */
|
|
115
|
-
export const AsCustomLink = {
|
|
116
|
-
args: {
|
|
117
|
-
...AvatarAndNameAndSecondaryFields.args,
|
|
118
|
-
linkAs: CustomLink,
|
|
119
|
-
},
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
/** Setting the `avatarProps.badge` prop to inject a badge */
|
|
123
|
-
export const WithBadge = {
|
|
124
|
-
args: {
|
|
125
|
-
...AvatarAndNameAndSecondaryFields.args,
|
|
126
|
-
avatarProps: {
|
|
127
|
-
...AvatarAndNameAndSecondaryFields.args.avatarProps,
|
|
128
|
-
badge: (
|
|
129
|
-
<Badge color={ColorPalette.blue}>
|
|
130
|
-
<Icon icon={mdiStar} />
|
|
131
|
-
</Badge>
|
|
132
|
-
),
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
};
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
4
|
-
import { render, within, screen } from '@testing-library/react';
|
|
5
|
-
import { getByClassName, queryByClassName } from '@lumx/react/testing/utils/queries';
|
|
6
|
-
import { Text, Thumbnail } from '@lumx/react';
|
|
7
|
-
import userEvent from '@testing-library/user-event';
|
|
8
|
-
|
|
9
|
-
import { UserBlock, UserBlockProps } from './UserBlock';
|
|
10
|
-
|
|
11
|
-
const CLASSNAME = UserBlock.className as string;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Mounts the component and returns common DOM elements / data needed in multiple tests further down.
|
|
15
|
-
*/
|
|
16
|
-
const setup = (propsOverride: Partial<UserBlockProps> = {}, { wrapper }: SetupRenderOptions = {}) => {
|
|
17
|
-
const props: UserBlockProps = { ...propsOverride };
|
|
18
|
-
|
|
19
|
-
render(<UserBlock {...props} />, { wrapper });
|
|
20
|
-
const userBlock = getByClassName(document.body, CLASSNAME);
|
|
21
|
-
const name = queryByClassName(userBlock, `${CLASSNAME}__name`);
|
|
22
|
-
const avatar = queryByClassName(userBlock, `${CLASSNAME}__avatar`);
|
|
23
|
-
const thumbnail = avatar && queryByClassName(avatar, Thumbnail.className as string);
|
|
24
|
-
const fields = queryByClassName(userBlock, `${CLASSNAME}__fields`);
|
|
25
|
-
const after = queryByClassName(userBlock, `${CLASSNAME}__after`);
|
|
26
|
-
|
|
27
|
-
return { props, userBlock, name, avatar, thumbnail, fields, after };
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
describe(`<${UserBlock.displayName}>`, () => {
|
|
31
|
-
describe('Props', () => {
|
|
32
|
-
it('should forward name props', () => {
|
|
33
|
-
const { name } = setup({ name: 'John Doe', nameProps: { 'data-custom-attribute': true } });
|
|
34
|
-
|
|
35
|
-
expect(name).toHaveAttribute('data-custom-attribute');
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should render button', async () => {
|
|
39
|
-
const onClick = jest.fn();
|
|
40
|
-
const { name, thumbnail } = setup({
|
|
41
|
-
onClick,
|
|
42
|
-
name: 'John Doe',
|
|
43
|
-
avatarProps: { image: 'profile-picture.jpg' },
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Button name
|
|
47
|
-
expect(name?.tagName).toBe('BUTTON');
|
|
48
|
-
await userEvent.click(name as any);
|
|
49
|
-
expect(onClick).toHaveBeenCalled();
|
|
50
|
-
|
|
51
|
-
// Button thumbnail (but excluded from tab stops)
|
|
52
|
-
expect(thumbnail?.tagName).toBe('BUTTON');
|
|
53
|
-
expect(thumbnail?.tabIndex).toBe(-1);
|
|
54
|
-
onClick.mockClear();
|
|
55
|
-
await userEvent.click(thumbnail as any);
|
|
56
|
-
expect(onClick).toHaveBeenCalled();
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should render link', async () => {
|
|
60
|
-
const { props, name, thumbnail } = setup({
|
|
61
|
-
linkProps: { href: 'https://example.com' },
|
|
62
|
-
name: 'John Doe',
|
|
63
|
-
avatarProps: { image: 'profile-picture.jpg' },
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Link name
|
|
67
|
-
expect(name?.tagName).toBe('A');
|
|
68
|
-
expect(name).toHaveAttribute('href', props.linkProps?.href);
|
|
69
|
-
|
|
70
|
-
// Link thumbnail (but excluded from tab stops)
|
|
71
|
-
expect(thumbnail?.tagName).toBe('A');
|
|
72
|
-
expect(thumbnail?.tabIndex).toBe(-1);
|
|
73
|
-
expect(thumbnail).toHaveAttribute('href', props.linkProps?.href);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('should render fields', () => {
|
|
77
|
-
const { fields } = setup({ fields: ['Field 1', 'Field 2'] });
|
|
78
|
-
expect(fields).toBeInTheDocument();
|
|
79
|
-
expect(within(fields as any).getByText('Field 1')).toBeInTheDocument();
|
|
80
|
-
expect(within(fields as any).getByText('Field 2')).toBeInTheDocument();
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should render additional fields', () => {
|
|
84
|
-
setup({ additionalFields: <Text as="span">Works in Toronto</Text> });
|
|
85
|
-
expect(screen.queryByText(/works in toronto/i)).toBeInTheDocument();
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('should render after', () => {
|
|
89
|
-
const { after } = setup({ after: <Text as="span">After</Text> });
|
|
90
|
-
expect(after).toBeInTheDocument();
|
|
91
|
-
expect(screen.queryByText(/after/i)).toBeInTheDocument();
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// Common tests suite.
|
|
96
|
-
commonTestsSuiteRTL(setup, {
|
|
97
|
-
baseClassName: CLASSNAME,
|
|
98
|
-
forwardClassName: 'userBlock',
|
|
99
|
-
forwardAttributes: 'userBlock',
|
|
100
|
-
forwardRef: 'userBlock',
|
|
101
|
-
applyTheme: {
|
|
102
|
-
affects: [{ element: 'userBlock' }],
|
|
103
|
-
viaProp: true,
|
|
104
|
-
viaContext: true,
|
|
105
|
-
defaultTheme: 'light',
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
});
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
import classNames from 'classnames';
|
|
4
|
-
import isEmpty from 'lodash/isEmpty';
|
|
5
|
-
import set from 'lodash/set';
|
|
6
|
-
|
|
7
|
-
import { Avatar, ColorPalette, Link, Orientation, Size, Theme } from '@lumx/react';
|
|
8
|
-
import { GenericProps, HasTheme } from '@lumx/react/utils/type';
|
|
9
|
-
import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
|
|
10
|
-
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
|
|
11
|
-
|
|
12
|
-
import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
|
|
13
|
-
import { AvatarProps } from '../avatar/Avatar';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* User block sizes.
|
|
17
|
-
*/
|
|
18
|
-
export type UserBlockSize = Extract<Size, 'xs' | 's' | 'm' | 'l'>;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Defines the props of the component.
|
|
22
|
-
*/
|
|
23
|
-
export interface UserBlockProps extends GenericProps, HasTheme {
|
|
24
|
-
/** Props to pass to the avatar. */
|
|
25
|
-
avatarProps?: Omit<AvatarProps, 'alt'>;
|
|
26
|
-
/** Additional fields used to describe the user. */
|
|
27
|
-
fields?: string[];
|
|
28
|
-
/** Props to pass to the link wrapping the avatar thumbnail. */
|
|
29
|
-
linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
|
|
30
|
-
/** Custom react component for the link (can be used to inject react router Link). */
|
|
31
|
-
linkAs?: 'a' | any;
|
|
32
|
-
/** Multiple action toolbar content. */
|
|
33
|
-
multipleActions?: ReactNode;
|
|
34
|
-
/** User name. */
|
|
35
|
-
name?: React.ReactNode;
|
|
36
|
-
/** Props to pass to the name block. */
|
|
37
|
-
nameProps?: GenericProps;
|
|
38
|
-
/** Orientation. */
|
|
39
|
-
orientation?: Orientation;
|
|
40
|
-
/** Simple action toolbar content. */
|
|
41
|
-
simpleAction?: ReactNode;
|
|
42
|
-
/** Size variant. */
|
|
43
|
-
size?: UserBlockSize;
|
|
44
|
-
/** On click callback. */
|
|
45
|
-
onClick?(): void;
|
|
46
|
-
/** On mouse enter callback. */
|
|
47
|
-
onMouseEnter?(): void;
|
|
48
|
-
/** On mouse leave callback. */
|
|
49
|
-
onMouseLeave?(): void;
|
|
50
|
-
/** Display additional fields below the original name and fields */
|
|
51
|
-
additionalFields?: React.ReactNode;
|
|
52
|
-
/** Display an additional element after the entire component. (to the right if orientation is horizontal, at the bottom if orientation is vertical) */
|
|
53
|
-
after?: React.ReactNode;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Component display name.
|
|
58
|
-
*/
|
|
59
|
-
const COMPONENT_NAME = 'UserBlock';
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Component default class name and class prefix.
|
|
63
|
-
*/
|
|
64
|
-
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Component default props.
|
|
68
|
-
*/
|
|
69
|
-
const DEFAULT_PROPS: Partial<UserBlockProps> = {
|
|
70
|
-
orientation: Orientation.horizontal,
|
|
71
|
-
size: Size.m,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* UserBlock component.
|
|
76
|
-
*
|
|
77
|
-
* @param props Component props.
|
|
78
|
-
* @param ref Component ref.
|
|
79
|
-
* @return React element.
|
|
80
|
-
*/
|
|
81
|
-
export const UserBlock = forwardRef<UserBlockProps, HTMLDivElement>((props, ref) => {
|
|
82
|
-
const defaultTheme = useTheme() || Theme.light;
|
|
83
|
-
const {
|
|
84
|
-
avatarProps,
|
|
85
|
-
className,
|
|
86
|
-
fields,
|
|
87
|
-
linkProps,
|
|
88
|
-
linkAs,
|
|
89
|
-
multipleActions,
|
|
90
|
-
name,
|
|
91
|
-
nameProps,
|
|
92
|
-
onClick,
|
|
93
|
-
onMouseEnter,
|
|
94
|
-
onMouseLeave,
|
|
95
|
-
orientation = DEFAULT_PROPS.orientation,
|
|
96
|
-
simpleAction,
|
|
97
|
-
size = DEFAULT_PROPS.size,
|
|
98
|
-
theme = defaultTheme,
|
|
99
|
-
children,
|
|
100
|
-
additionalFields,
|
|
101
|
-
after,
|
|
102
|
-
...forwardedProps
|
|
103
|
-
} = props;
|
|
104
|
-
let componentSize = size;
|
|
105
|
-
|
|
106
|
-
// Special case - When using vertical orientation force the size to be Sizes.l.
|
|
107
|
-
if (orientation === Orientation.vertical) {
|
|
108
|
-
componentSize = Size.l;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const shouldDisplayActions: boolean = orientation === Orientation.vertical;
|
|
112
|
-
|
|
113
|
-
const isLink = Boolean(linkProps?.href || linkAs);
|
|
114
|
-
const isClickable = !!onClick || isLink;
|
|
115
|
-
|
|
116
|
-
const nameBlock: ReactNode = React.useMemo(() => {
|
|
117
|
-
if (isEmpty(name)) {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
let NameComponent: any = 'span';
|
|
121
|
-
const nProps: any = {
|
|
122
|
-
...nameProps,
|
|
123
|
-
className: classNames(`${CLASSNAME}__name`, linkProps?.className, nameProps?.className),
|
|
124
|
-
};
|
|
125
|
-
if (isClickable) {
|
|
126
|
-
NameComponent = Link;
|
|
127
|
-
Object.assign(nProps, {
|
|
128
|
-
...linkProps,
|
|
129
|
-
onClick,
|
|
130
|
-
linkAs,
|
|
131
|
-
color: ColorPalette.dark,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
// Disable avatar focus since the name block is the same link / same button.
|
|
135
|
-
if (avatarProps) {
|
|
136
|
-
set(avatarProps, ['thumbnailProps', 'tabIndex'], -1);
|
|
137
|
-
}
|
|
138
|
-
return <NameComponent {...nProps}>{name}</NameComponent>;
|
|
139
|
-
}, [avatarProps, isClickable, linkAs, linkProps, name, nameProps, onClick]);
|
|
140
|
-
|
|
141
|
-
const shouldDisplayFields = componentSize !== Size.s && componentSize !== Size.xs;
|
|
142
|
-
|
|
143
|
-
const fieldsBlock: ReactNode = fields && shouldDisplayFields && (
|
|
144
|
-
<div className={`${CLASSNAME}__fields`}>
|
|
145
|
-
{fields.map((field: string, idx: number) => (
|
|
146
|
-
<span key={idx} className={`${CLASSNAME}__field`}>
|
|
147
|
-
{field}
|
|
148
|
-
</span>
|
|
149
|
-
))}
|
|
150
|
-
</div>
|
|
151
|
-
);
|
|
152
|
-
|
|
153
|
-
return (
|
|
154
|
-
<div
|
|
155
|
-
ref={ref}
|
|
156
|
-
{...forwardedProps}
|
|
157
|
-
className={classNames(
|
|
158
|
-
className,
|
|
159
|
-
handleBasicClasses({ prefix: CLASSNAME, orientation, size: componentSize, theme, isClickable }),
|
|
160
|
-
)}
|
|
161
|
-
onMouseLeave={onMouseLeave}
|
|
162
|
-
onMouseEnter={onMouseEnter}
|
|
163
|
-
>
|
|
164
|
-
{avatarProps && (
|
|
165
|
-
<Avatar
|
|
166
|
-
linkAs={linkAs}
|
|
167
|
-
linkProps={linkProps}
|
|
168
|
-
alt=""
|
|
169
|
-
{...(avatarProps as any)}
|
|
170
|
-
className={classNames(`${CLASSNAME}__avatar`, avatarProps.className)}
|
|
171
|
-
size={componentSize}
|
|
172
|
-
onClick={onClick}
|
|
173
|
-
theme={theme}
|
|
174
|
-
/>
|
|
175
|
-
)}
|
|
176
|
-
{(fields || name || children || additionalFields) && (
|
|
177
|
-
<div className={`${CLASSNAME}__wrapper`}>
|
|
178
|
-
{children || nameBlock}
|
|
179
|
-
{fieldsBlock}
|
|
180
|
-
{shouldDisplayFields ? additionalFields : null}
|
|
181
|
-
</div>
|
|
182
|
-
)}
|
|
183
|
-
{shouldDisplayActions && simpleAction && <div className={`${CLASSNAME}__action`}>{simpleAction}</div>}
|
|
184
|
-
{shouldDisplayActions && multipleActions && (
|
|
185
|
-
<div className={`${CLASSNAME}__actions`}>{multipleActions}</div>
|
|
186
|
-
)}
|
|
187
|
-
{after ? <div className={`${CLASSNAME}__after`}>{after}</div> : null}
|
|
188
|
-
</div>
|
|
189
|
-
);
|
|
190
|
-
});
|
|
191
|
-
UserBlock.displayName = COMPONENT_NAME;
|
|
192
|
-
UserBlock.className = CLASSNAME;
|
|
193
|
-
UserBlock.defaultProps = DEFAULT_PROPS;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './UserBlock';
|
package/src/constants.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
CSS_PREFIX,
|
|
3
|
-
DIALOG_TRANSITION_DURATION,
|
|
4
|
-
NOTIFICATION_TRANSITION_DURATION,
|
|
5
|
-
TOOLTIP_HOVER_DELAY,
|
|
6
|
-
TOOLTIP_LONG_PRESS_DELAY,
|
|
7
|
-
} from '@lumx/core/js/constants';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Optional global `window` instance (not defined when running SSR).
|
|
11
|
-
*/
|
|
12
|
-
export const WINDOW = typeof window !== 'undefined' ? window : undefined;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Optional global `document` instance (not defined when running SSR).
|
|
16
|
-
*/
|
|
17
|
-
export const DOCUMENT = typeof document !== 'undefined' ? document : undefined;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Check if we are running in a true browser
|
|
21
|
-
*/
|
|
22
|
-
export const IS_BROWSER = typeof navigator !== 'undefined' && !navigator.userAgent.includes('jsdom');
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Visually hidden a11y utility class name
|
|
26
|
-
*/
|
|
27
|
-
export const VISUALLY_HIDDEN = 'visually-hidden';
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { useCallback, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useBooleanState = (defaultValue: boolean): [boolean, () => void, () => void, () => void] => {
|
|
4
|
-
const [booleanValue, setBoolean] = useState<boolean>(defaultValue);
|
|
5
|
-
|
|
6
|
-
const setToFalse = useCallback(() => setBoolean(false), []);
|
|
7
|
-
|
|
8
|
-
const setToTrue = useCallback(() => setBoolean(true), []);
|
|
9
|
-
|
|
10
|
-
const toggleBoolean = useCallback(() => setBoolean((previousValue) => !previousValue), []);
|
|
11
|
-
|
|
12
|
-
return [booleanValue, setToFalse, setToTrue, toggleBoolean];
|
|
13
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@lumx/react/constants';
|
|
2
|
-
import { Callback } from '@lumx/react/utils/type';
|
|
3
|
-
import { onEscapePressed } from '@lumx/core/js/utils';
|
|
4
|
-
import { useEffect } from 'react';
|
|
5
|
-
import { Listener, makeListenerTowerContext } from '@lumx/react/utils/function/makeListenerTowerContext';
|
|
6
|
-
|
|
7
|
-
const LISTENERS = makeListenerTowerContext();
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Register a global listener on 'Escape' key pressed.
|
|
11
|
-
*
|
|
12
|
-
* If multiple listener are registered, only the last one is maintained. When a listener is unregistered, the previous
|
|
13
|
-
* one gets activated again.
|
|
14
|
-
*
|
|
15
|
-
* @param callback Callback
|
|
16
|
-
* @param closeOnEscape Disables the hook when false
|
|
17
|
-
*/
|
|
18
|
-
export function useCallbackOnEscape(callback: Callback | undefined, closeOnEscape = true) {
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
const rootElement = DOCUMENT?.body;
|
|
21
|
-
if (!closeOnEscape || !callback || !rootElement) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
const onKeyDown = onEscapePressed(callback);
|
|
25
|
-
|
|
26
|
-
const listener: Listener = {
|
|
27
|
-
enable: () => rootElement.addEventListener('keydown', onKeyDown),
|
|
28
|
-
disable: () => rootElement.removeEventListener('keydown', onKeyDown),
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
LISTENERS.register(listener);
|
|
32
|
-
return () => LISTENERS.unregister(listener);
|
|
33
|
-
}, [callback, closeOnEscape]);
|
|
34
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
|
|
3
|
-
interface UseChipGroupNavigation {
|
|
4
|
-
/** the current active chip index */
|
|
5
|
-
activeChip: number;
|
|
6
|
-
|
|
7
|
-
/** callback to be executed when the backspace was pressed */
|
|
8
|
-
onBackspacePressed(): void;
|
|
9
|
-
|
|
10
|
-
/** function that allows to reset the navigation */
|
|
11
|
-
resetChipNavigation(): void;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type useChipGroupNavigationType<C = any> = (
|
|
15
|
-
chips: C[],
|
|
16
|
-
onChipDeleted: (chip: C) => void,
|
|
17
|
-
initialActiveChip?: number,
|
|
18
|
-
) => UseChipGroupNavigation;
|
|
19
|
-
|
|
20
|
-
const INITIAL_STATE_ACTIVE_CHIP = -1;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Hook that provides the necessary information to manage chips navigation.
|
|
24
|
-
* @param chips List of chips selected.
|
|
25
|
-
* @param onChipDeleted Callback executed when a chip must be eliminated.
|
|
26
|
-
* @param initialActiveChip Initial active chip index.
|
|
27
|
-
*
|
|
28
|
-
* @return chip navigation tools.
|
|
29
|
-
*/
|
|
30
|
-
export const useChipGroupNavigation: useChipGroupNavigationType = (
|
|
31
|
-
chips,
|
|
32
|
-
onChipDeleted,
|
|
33
|
-
initialActiveChip = INITIAL_STATE_ACTIVE_CHIP,
|
|
34
|
-
) => {
|
|
35
|
-
const [wasBackspacePressed, setWasBackspacePressed] = useState(false);
|
|
36
|
-
const [activeChip, setActiveChip] = useState(initialActiveChip);
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Resets the active index and backspace control to their initial state
|
|
40
|
-
*/
|
|
41
|
-
const resetChipNavigation = () => {
|
|
42
|
-
setWasBackspacePressed(false);
|
|
43
|
-
setActiveChip(initialActiveChip);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Callback to be executed when the backspace was pressed. If there are no chips
|
|
48
|
-
* selected, it will return immediately. If there are it will check if the
|
|
49
|
-
* backspace was already pressed. if it was, it means that the user wants to eliminate
|
|
50
|
-
* the chip, so we execute the `onChipDeleted` function and reset internal state.
|
|
51
|
-
*
|
|
52
|
-
* If it was not pressed before, we set the `wasBackspacePressed` flag to true and
|
|
53
|
-
* highlight the last chip.
|
|
54
|
-
*/
|
|
55
|
-
const onBackspacePressed = () => {
|
|
56
|
-
if (chips.length === 0) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (wasBackspacePressed) {
|
|
61
|
-
const chipDeleted: any = chips[chips.length - 1];
|
|
62
|
-
onChipDeleted(chipDeleted);
|
|
63
|
-
resetChipNavigation();
|
|
64
|
-
} else {
|
|
65
|
-
setActiveChip(chips.length - 1);
|
|
66
|
-
setWasBackspacePressed(true);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
activeChip,
|
|
72
|
-
onBackspacePressed,
|
|
73
|
-
resetChipNavigation,
|
|
74
|
-
};
|
|
75
|
-
};
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { RefObject, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
import { Falsy } from '@lumx/react/utils/type';
|
|
4
|
-
|
|
5
|
-
import isEmpty from 'lodash/isEmpty';
|
|
6
|
-
|
|
7
|
-
const EVENT_TYPES = ['mousedown', 'touchstart'];
|
|
8
|
-
|
|
9
|
-
function isClickAway(targets: HTMLElement[], refs: Array<RefObject<HTMLElement>>): boolean {
|
|
10
|
-
// The targets elements are not contained in any of the listed element references.
|
|
11
|
-
return !refs.some((ref) => targets.some((target) => ref?.current?.contains(target)));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface ClickAwayParameters {
|
|
15
|
-
/**
|
|
16
|
-
* A callback function to call when the user clicks away from the elements.
|
|
17
|
-
*/
|
|
18
|
-
callback: EventListener | Falsy;
|
|
19
|
-
/**
|
|
20
|
-
* Elements considered within the click away context (clicking outside them will trigger the click away callback).
|
|
21
|
-
*/
|
|
22
|
-
childrenRefs: RefObject<Array<RefObject<HTMLElement>>>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Listen to clicks away from the given elements and callback the passed in function.
|
|
27
|
-
*
|
|
28
|
-
* Warning: If you need to detect click away on nested React portals, please use the `ClickAwayProvider` component.
|
|
29
|
-
*/
|
|
30
|
-
export function useClickAway({ callback, childrenRefs }: ClickAwayParameters): void {
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
const { current: currentRefs } = childrenRefs;
|
|
33
|
-
if (!callback || !currentRefs || isEmpty(currentRefs)) {
|
|
34
|
-
return undefined;
|
|
35
|
-
}
|
|
36
|
-
const listener: EventListener = (evt) => {
|
|
37
|
-
const targets = [evt.composedPath?.()[0], evt.target] as HTMLElement[];
|
|
38
|
-
if (isClickAway(targets, currentRefs)) {
|
|
39
|
-
callback(evt);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
EVENT_TYPES.forEach((evtType) => document.addEventListener(evtType, listener));
|
|
44
|
-
return () => {
|
|
45
|
-
EVENT_TYPES.forEach((evtType) => document.removeEventListener(evtType, listener));
|
|
46
|
-
};
|
|
47
|
-
}, [callback, childrenRefs]);
|
|
48
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
|
|
3
|
-
import { Falsy } from '@lumx/react/utils/type';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Disables the scroll on the body to make it only usable in the current modal element.
|
|
7
|
-
* When the modal element is not provided anymore, the scroll is restored.
|
|
8
|
-
*
|
|
9
|
-
* @param modalElement The modal element.
|
|
10
|
-
*/
|
|
11
|
-
export const useDisableBodyScroll = (modalElement: Element | Falsy): void => {
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
if (!modalElement) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
// Fixing the document overflow style to prevent a bug that scrolls the window to the top.
|
|
17
|
-
const previousDocumentOverflow = document.documentElement.style.overflow;
|
|
18
|
-
document.documentElement.style.overflow = 'visible';
|
|
19
|
-
disableBodyScroll(modalElement);
|
|
20
|
-
return () => {
|
|
21
|
-
enableBodyScroll(modalElement);
|
|
22
|
-
// Restore the previous overflow style.
|
|
23
|
-
requestAnimationFrame(() => {
|
|
24
|
-
document.documentElement.style.overflow = previousDocumentOverflow;
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
}, [modalElement]);
|
|
28
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
const useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* https://github.com/facebook/react/issues/14099#issuecomment-440013892
|
|
7
|
-
*
|
|
8
|
-
* @param fn A function to run
|
|
9
|
-
* @return A React callback
|
|
10
|
-
*/
|
|
11
|
-
export default function useEventCallback(fn: (...args: any[]) => any): (event: any) => any {
|
|
12
|
-
const ref = React.useRef(fn);
|
|
13
|
-
useEnhancedEffect(() => {
|
|
14
|
-
ref.current = fn;
|
|
15
|
-
});
|
|
16
|
-
return React.useCallback((event: any) => ref.current(event), []);
|
|
17
|
-
}
|