@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,148 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { Point } from '@lumx/react/utils/type';
|
|
3
|
-
import type { useAnimateScroll } from './useAnimateScroll';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Listen to mouse wheel + ctrl and multi-pointer pinch to zoom
|
|
7
|
-
*/
|
|
8
|
-
export function usePointerZoom(
|
|
9
|
-
scrollAreaRef: React.RefObject<HTMLDivElement>,
|
|
10
|
-
onScaleChange: ((value: number) => void) | undefined,
|
|
11
|
-
animateScroll: ReturnType<typeof useAnimateScroll>,
|
|
12
|
-
) {
|
|
13
|
-
const [isPointerZooming, setPointerZooming] = React.useState(false);
|
|
14
|
-
React.useEffect(() => {
|
|
15
|
-
const scrollArea = scrollAreaRef.current as HTMLDivElement;
|
|
16
|
-
if (!scrollArea || !onScaleChange) {
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
let animationFrame: number | null;
|
|
21
|
-
let zoomStateTimeoutId: ReturnType<typeof setTimeout> | null;
|
|
22
|
-
|
|
23
|
-
function updateScaleOnNextFrame(newScale: number, mousePosition: Point): void {
|
|
24
|
-
// Cancel previously scheduled frame
|
|
25
|
-
if (animationFrame) cancelAnimationFrame(animationFrame);
|
|
26
|
-
|
|
27
|
-
// Cancel previously scheduled zoom state change
|
|
28
|
-
if (zoomStateTimeoutId) clearTimeout(zoomStateTimeoutId);
|
|
29
|
-
|
|
30
|
-
function nextFrame() {
|
|
31
|
-
setPointerZooming(true);
|
|
32
|
-
onScaleChange?.(newScale);
|
|
33
|
-
|
|
34
|
-
animationFrame = null;
|
|
35
|
-
// Wait a bit before indicating the pointer zooming is finished
|
|
36
|
-
zoomStateTimeoutId = setTimeout(() => setPointerZooming(false), 100);
|
|
37
|
-
}
|
|
38
|
-
animationFrame = requestAnimationFrame(nextFrame);
|
|
39
|
-
|
|
40
|
-
// Animate scroll in parallel (centering on the current mouse position)
|
|
41
|
-
animateScroll(mousePosition, {
|
|
42
|
-
width: scrollArea.scrollWidth,
|
|
43
|
-
height: scrollArea.scrollHeight,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function onWheel(event: WheelEvent) {
|
|
48
|
-
if (!event.ctrlKey) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
const newScale = Math.exp(-event.deltaY / 50);
|
|
53
|
-
|
|
54
|
-
// Update scale on next frame (focused on the mouse position)
|
|
55
|
-
updateScaleOnNextFrame(newScale, {
|
|
56
|
-
x: event.clientX,
|
|
57
|
-
y: event.clientY,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const activePointers: Record<PointerEvent['pointerId'], PointerEvent> = {};
|
|
62
|
-
let prevDistance: number | null = null;
|
|
63
|
-
let previousCenterPoint: Point | null = null;
|
|
64
|
-
|
|
65
|
-
function onPointerDown(event: PointerEvent) {
|
|
66
|
-
activePointers[event.pointerId] = event;
|
|
67
|
-
}
|
|
68
|
-
function onPointerMove(event: PointerEvent) {
|
|
69
|
-
// Update pointer in cache
|
|
70
|
-
if (activePointers[event.pointerId]) {
|
|
71
|
-
activePointers[event.pointerId] = event;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const pointers = Object.values(activePointers);
|
|
75
|
-
|
|
76
|
-
// Make sure we run computation on one of the pointer in the group
|
|
77
|
-
if (pointers[0]?.pointerId !== event.pointerId) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Centered point between all pointers
|
|
82
|
-
const centerPoint: Point = {
|
|
83
|
-
x: pointers.reduce((x, { clientX }) => x + clientX, 0) / pointers.length,
|
|
84
|
-
y: pointers.reduce((y, { clientY }) => y + clientY, 0) / pointers.length,
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
// Movement of the center point
|
|
88
|
-
const deltaCenterPoint = previousCenterPoint && {
|
|
89
|
-
left: previousCenterPoint.x - centerPoint.x,
|
|
90
|
-
top: previousCenterPoint.y - centerPoint.y,
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
// Pan X & Y
|
|
94
|
-
if (deltaCenterPoint) {
|
|
95
|
-
// Apply movement of the center point to the scroll
|
|
96
|
-
scrollArea.scrollBy({
|
|
97
|
-
top: deltaCenterPoint.top / 2,
|
|
98
|
-
left: deltaCenterPoint.left / 2,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Pinch to zoom
|
|
103
|
-
if (pointers.length === 2) {
|
|
104
|
-
const [pointer1, pointer2] = pointers;
|
|
105
|
-
const distance = Math.hypot(pointer2.clientX - pointer1.clientX, pointer2.clientY - pointer1.clientY);
|
|
106
|
-
|
|
107
|
-
if (prevDistance && deltaCenterPoint) {
|
|
108
|
-
const delta = prevDistance - distance;
|
|
109
|
-
const absDelta = Math.abs(delta);
|
|
110
|
-
|
|
111
|
-
// Zoom only if we are "pinching" more than we are moving the pointers
|
|
112
|
-
if (absDelta > Math.abs(deltaCenterPoint.left) && absDelta > Math.abs(deltaCenterPoint.top)) {
|
|
113
|
-
// Update scale on next frame (focused on the center point between the two pointers)
|
|
114
|
-
const newScale = Math.exp(-delta / 100);
|
|
115
|
-
updateScaleOnNextFrame(newScale, centerPoint);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
prevDistance = distance;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
previousCenterPoint = centerPoint;
|
|
123
|
-
}
|
|
124
|
-
function onPointerUp(event: PointerEvent) {
|
|
125
|
-
prevDistance = null;
|
|
126
|
-
previousCenterPoint = null;
|
|
127
|
-
delete activePointers[event.pointerId];
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
scrollArea.addEventListener('wheel', onWheel, { passive: false });
|
|
131
|
-
const isMultiTouch = navigator.maxTouchPoints >= 2;
|
|
132
|
-
if (isMultiTouch) {
|
|
133
|
-
scrollArea.addEventListener('pointerdown', onPointerDown);
|
|
134
|
-
scrollArea.addEventListener('pointermove', onPointerMove);
|
|
135
|
-
scrollArea.addEventListener('pointerup', onPointerUp);
|
|
136
|
-
}
|
|
137
|
-
return () => {
|
|
138
|
-
scrollArea.removeEventListener('wheel', onWheel);
|
|
139
|
-
if (isMultiTouch) {
|
|
140
|
-
scrollArea.removeEventListener('pointerdown', onPointerDown);
|
|
141
|
-
scrollArea.removeEventListener('pointermove', onPointerMove);
|
|
142
|
-
scrollArea.removeEventListener('pointerup', onPointerUp);
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
}, [animateScroll, onScaleChange, scrollAreaRef]);
|
|
146
|
-
|
|
147
|
-
return isPointerZooming;
|
|
148
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import type { IconButtonProps, LightboxProps, SlideshowProps, ThumbnailProps } from '@lumx/react';
|
|
4
|
-
import type { HasClassName } from '@lumx/react/utils/type';
|
|
5
|
-
import type { ImageCaptionMetadata } from '@lumx/react/components/image-block/ImageCaption';
|
|
6
|
-
|
|
7
|
-
export type InheritedSlideShowProps = Pick<SlideshowProps, 'slideshowControlsProps' | 'slideGroupLabel'>;
|
|
8
|
-
|
|
9
|
-
export interface ZoomButtonProps {
|
|
10
|
-
/** Zoom in button props */
|
|
11
|
-
zoomInButtonProps?: IconButtonProps;
|
|
12
|
-
/** Zoom out button props */
|
|
13
|
-
zoomOutButtonProps?: IconButtonProps;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type InheritedThumbnailProps = Pick<
|
|
17
|
-
ThumbnailProps,
|
|
18
|
-
'image' | 'alt' | 'imgProps' | 'imgRef' | 'loadingPlaceholderImageRef'
|
|
19
|
-
>;
|
|
20
|
-
|
|
21
|
-
export type InheritedImageMetadata = Pick<ImageCaptionMetadata, 'title' | 'description' | 'tags'>;
|
|
22
|
-
|
|
23
|
-
export type ImageProps = InheritedThumbnailProps & InheritedImageMetadata;
|
|
24
|
-
|
|
25
|
-
export interface ImagesProps {
|
|
26
|
-
/** Index of the active image to show on open */
|
|
27
|
-
activeImageIndex?: number;
|
|
28
|
-
/** List of images to display */
|
|
29
|
-
images: Array<ImageProps>;
|
|
30
|
-
/** Ref of the active image when the lightbox is open */
|
|
31
|
-
activeImageRef?: React.Ref<HTMLImageElement>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export type InheritedLightboxProps = Pick<
|
|
35
|
-
LightboxProps,
|
|
36
|
-
'isOpen' | 'parentElement' | 'onClose' | 'closeButtonProps' | 'aria-label' | 'aria-labelledby'
|
|
37
|
-
>;
|
|
38
|
-
|
|
39
|
-
export type ForwardedProps = React.ComponentPropsWithoutRef<'div'>;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* ImageLightbox component props
|
|
43
|
-
*/
|
|
44
|
-
export interface ImageLightboxProps
|
|
45
|
-
extends HasClassName,
|
|
46
|
-
ZoomButtonProps,
|
|
47
|
-
ImagesProps,
|
|
48
|
-
InheritedSlideShowProps,
|
|
49
|
-
InheritedLightboxProps,
|
|
50
|
-
ForwardedProps {}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import memoize from 'lodash/memoize';
|
|
4
|
-
|
|
5
|
-
import { startViewTransition } from '@lumx/react/utils/browser/DOM/startViewTransition';
|
|
6
|
-
import { findImage } from '@lumx/react/utils/browser/DOM/findImage';
|
|
7
|
-
|
|
8
|
-
import type { ImageLightboxProps } from './types';
|
|
9
|
-
import { CLASSNAME } from './constants';
|
|
10
|
-
|
|
11
|
-
/** Subset of the ImageLightboxProps managed by the useImageLightbox hook */
|
|
12
|
-
type ManagedProps = Pick<
|
|
13
|
-
ImageLightboxProps,
|
|
14
|
-
'isOpen' | 'images' | 'parentElement' | 'activeImageRef' | 'onClose' | 'activeImageIndex'
|
|
15
|
-
>;
|
|
16
|
-
|
|
17
|
-
const EMPTY_PROPS: ManagedProps = { isOpen: false, images: [], parentElement: React.createRef() };
|
|
18
|
-
|
|
19
|
-
type TriggerOptions = Pick<ImageLightboxProps, 'activeImageIndex'>;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Set up an ImageLightbox with images and triggers.
|
|
23
|
-
*
|
|
24
|
-
* - Associate a trigger with the lightbox to properly focus the trigger on close
|
|
25
|
-
* - Associate a trigger with an image to display on open
|
|
26
|
-
* - Automatically provide a view transition between an image trigger and the displayed image on open & close
|
|
27
|
-
*
|
|
28
|
-
* @param props Images to display in the image lightbox
|
|
29
|
-
*/
|
|
30
|
-
export function useImageLightbox<P extends Partial<ImageLightboxProps>>(
|
|
31
|
-
props: P,
|
|
32
|
-
): {
|
|
33
|
-
/**
|
|
34
|
-
* Generates trigger props
|
|
35
|
-
* @param index Provide an index to choose which image to display when the image lightbox opens.
|
|
36
|
-
* */
|
|
37
|
-
getTriggerProps: (options?: TriggerOptions) => { onClick: React.MouseEventHandler; ref: React.Ref<any> };
|
|
38
|
-
/** Props to forward to the ImageLightbox */
|
|
39
|
-
imageLightboxProps: ManagedProps & P;
|
|
40
|
-
} {
|
|
41
|
-
const propsRef = React.useRef(props);
|
|
42
|
-
|
|
43
|
-
React.useEffect(() => {
|
|
44
|
-
propsRef.current = props;
|
|
45
|
-
}, [props]);
|
|
46
|
-
|
|
47
|
-
// Keep reference for each image elements
|
|
48
|
-
const imageRefsRef = React.useRef<Array<React.RefObject<HTMLImageElement>>>([]);
|
|
49
|
-
|
|
50
|
-
const currentImageRef = React.useRef<HTMLImageElement>(null);
|
|
51
|
-
const [imageLightboxProps, setImageLightboxProps] = React.useState(
|
|
52
|
-
() => ({ ...EMPTY_PROPS, ...props }) as ManagedProps & P,
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
const getTriggerProps = React.useMemo(() => {
|
|
56
|
-
const triggerImageRefs: Record<number, React.RefObject<HTMLImageElement>> = {};
|
|
57
|
-
|
|
58
|
-
async function close() {
|
|
59
|
-
const currentImage = currentImageRef.current;
|
|
60
|
-
if (!currentImage) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const currentIndex = imageRefsRef.current.findIndex(
|
|
64
|
-
(imageRef) => imageRef.current === currentImage,
|
|
65
|
-
) as number;
|
|
66
|
-
|
|
67
|
-
await startViewTransition({
|
|
68
|
-
changes() {
|
|
69
|
-
// Close lightbox
|
|
70
|
-
setImageLightboxProps((prevProps) => ({ ...prevProps, isOpen: false }));
|
|
71
|
-
},
|
|
72
|
-
// Morph from the image in lightbox to the image in trigger
|
|
73
|
-
viewTransitionName: {
|
|
74
|
-
source: currentImageRef,
|
|
75
|
-
target: triggerImageRefs[currentIndex],
|
|
76
|
-
name: CLASSNAME,
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
async function open(triggerElement: HTMLElement, { activeImageIndex }: TriggerOptions = {}) {
|
|
82
|
-
// If we find an image inside the trigger, animate it in transition with the opening image
|
|
83
|
-
const triggerImage = triggerImageRefs[activeImageIndex as any]?.current || findImage(triggerElement);
|
|
84
|
-
|
|
85
|
-
// Inject refs to improve transition and loading style
|
|
86
|
-
const images = propsRef.current?.images?.map((image, idx) => {
|
|
87
|
-
// Get or create image reference
|
|
88
|
-
let imgRef = imageRefsRef.current[idx];
|
|
89
|
-
if (!imgRef) {
|
|
90
|
-
imgRef = React.createRef();
|
|
91
|
-
imageRefsRef.current[idx] = imgRef;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Try to use the trigger image as the loading placeholder
|
|
95
|
-
const loadingPlaceholderImageRef =
|
|
96
|
-
triggerImage && idx === activeImageIndex ? { current: triggerImage } : undefined;
|
|
97
|
-
|
|
98
|
-
return { loadingPlaceholderImageRef, ...image, imgRef };
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
await startViewTransition({
|
|
102
|
-
changes: () => {
|
|
103
|
-
// Open lightbox with setup props
|
|
104
|
-
setImageLightboxProps((prevProps) => ({
|
|
105
|
-
...prevProps,
|
|
106
|
-
...propsRef.current,
|
|
107
|
-
activeImageRef: currentImageRef,
|
|
108
|
-
parentElement: { current: triggerElement },
|
|
109
|
-
isOpen: true,
|
|
110
|
-
onClose: () => {
|
|
111
|
-
close();
|
|
112
|
-
propsRef.current?.onClose?.();
|
|
113
|
-
},
|
|
114
|
-
images,
|
|
115
|
-
activeImageIndex: activeImageIndex || 0,
|
|
116
|
-
}));
|
|
117
|
-
},
|
|
118
|
-
// Morph from the image in trigger to the image in lightbox
|
|
119
|
-
viewTransitionName: {
|
|
120
|
-
source: triggerImage,
|
|
121
|
-
target: currentImageRef,
|
|
122
|
-
name: CLASSNAME,
|
|
123
|
-
},
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return memoize((options?: TriggerOptions) => ({
|
|
128
|
-
ref(element: HTMLElement | null) {
|
|
129
|
-
// Track trigger image ref if any
|
|
130
|
-
if (options?.activeImageIndex !== undefined && element) {
|
|
131
|
-
triggerImageRefs[options.activeImageIndex] = { current: findImage(element) };
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
onClick(e: React.MouseEvent) {
|
|
135
|
-
open(e.target as HTMLElement, options);
|
|
136
|
-
},
|
|
137
|
-
}));
|
|
138
|
-
}, []);
|
|
139
|
-
|
|
140
|
-
return { getTriggerProps, imageLightboxProps };
|
|
141
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { mdiEarth } from '@lumx/icons';
|
|
3
|
-
import { Icon, Text } from '@lumx/react';
|
|
4
|
-
import { withResizableBox } from '@lumx/react/stories/decorators/withResizableBox';
|
|
5
|
-
import { allTypographyArgType } from '@lumx/react/stories/controls/typography';
|
|
6
|
-
import { colorArgType, colorVariantArgType } from '@lumx/react/stories/controls/color';
|
|
7
|
-
import { InlineList } from '.';
|
|
8
|
-
|
|
9
|
-
export default {
|
|
10
|
-
title: 'LumX components/inline-list/InlineList',
|
|
11
|
-
component: InlineList,
|
|
12
|
-
argTypes: {
|
|
13
|
-
typography: allTypographyArgType,
|
|
14
|
-
color: colorArgType,
|
|
15
|
-
colorVariant: colorVariantArgType,
|
|
16
|
-
children: { control: false },
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Inline list with three simple text elements
|
|
22
|
-
*/
|
|
23
|
-
export const WithElements = {
|
|
24
|
-
args: {
|
|
25
|
-
children: [
|
|
26
|
-
<span key="1">Some text</span>,
|
|
27
|
-
<span key="2">Some other text</span>,
|
|
28
|
-
<span key="3">Some other other text</span>,
|
|
29
|
-
],
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Using color, typography and more complex elements
|
|
35
|
-
*/
|
|
36
|
-
export const MixedNoWrapAndTruncate = {
|
|
37
|
-
args: {
|
|
38
|
-
typography: 'body1',
|
|
39
|
-
color: 'dark',
|
|
40
|
-
colorVariant: 'L2',
|
|
41
|
-
style: { width: '100%' },
|
|
42
|
-
children: [
|
|
43
|
-
<Text key="1" as="span" truncate>
|
|
44
|
-
Very very very very very long text
|
|
45
|
-
</Text>,
|
|
46
|
-
<Text key="2" as="span" noWrap>
|
|
47
|
-
<Icon icon={mdiEarth} />
|
|
48
|
-
Some text
|
|
49
|
-
</Text>,
|
|
50
|
-
<Text key="3" as="span" truncate>
|
|
51
|
-
Very very very very very long text
|
|
52
|
-
</Text>,
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
decorators: [withResizableBox({ width: 400 })],
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Line wrap on overflow
|
|
60
|
-
*/
|
|
61
|
-
export const Wrap = {
|
|
62
|
-
args: {
|
|
63
|
-
wrap: true,
|
|
64
|
-
children: [
|
|
65
|
-
<Text key="1" as="span">
|
|
66
|
-
Very very very very very long text
|
|
67
|
-
</Text>,
|
|
68
|
-
<Text key="2" as="span">
|
|
69
|
-
<Icon icon={mdiEarth} />
|
|
70
|
-
Some text
|
|
71
|
-
</Text>,
|
|
72
|
-
<Text key="3" as="span">
|
|
73
|
-
Very very very very very long text
|
|
74
|
-
</Text>,
|
|
75
|
-
],
|
|
76
|
-
},
|
|
77
|
-
decorators: [withResizableBox({ width: 400 })],
|
|
78
|
-
};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
|
|
4
|
-
import { render, screen, within } from '@testing-library/react';
|
|
5
|
-
import { queryByClassName } from '@lumx/react/testing/utils/queries';
|
|
6
|
-
import { InlineList, InlineListProps } from '.';
|
|
7
|
-
|
|
8
|
-
const CLASSNAME = InlineList.className as string;
|
|
9
|
-
|
|
10
|
-
const setup = (props: Partial<InlineListProps> = {}) => {
|
|
11
|
-
render(<InlineList {...props} />);
|
|
12
|
-
const inlineList = queryByClassName(document.body, CLASSNAME);
|
|
13
|
-
return { props, inlineList };
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
describe(`<${InlineList.displayName}>`, () => {
|
|
17
|
-
describe('Snapshots and structure', () => {
|
|
18
|
-
it('should render default', () => {
|
|
19
|
-
const { inlineList } = setup({ children: ['Some text', 'Some other text'] });
|
|
20
|
-
|
|
21
|
-
expect(inlineList).toBeInTheDocument();
|
|
22
|
-
|
|
23
|
-
const list = screen.getByRole('list');
|
|
24
|
-
expect(list).toBeInTheDocument();
|
|
25
|
-
|
|
26
|
-
const listItems = within(list).queryAllByRole('listitem');
|
|
27
|
-
expect(listItems.length).toBe(2);
|
|
28
|
-
expect(listItems[0]).toHaveTextContent('Some text');
|
|
29
|
-
expect(listItems[1]).toHaveTextContent('Some other text');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('should render with typography', () => {
|
|
33
|
-
const { inlineList } = setup({ typography: 'body2', children: 'Some text' });
|
|
34
|
-
expect(inlineList).toHaveClass('lumx-typography-body2');
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('should render with color', () => {
|
|
38
|
-
const { inlineList } = setup({ color: 'blue', children: 'Some text' });
|
|
39
|
-
expect(inlineList).toHaveClass('lumx-color-font-blue-N');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('should render with color and variant', () => {
|
|
43
|
-
const { inlineList } = setup({ color: 'blue', colorVariant: 'D2', children: 'Some text' });
|
|
44
|
-
expect(inlineList).toHaveClass('lumx-color-font-blue-D2');
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Common tests suite.
|
|
49
|
-
commonTestsSuiteRTL(setup, {
|
|
50
|
-
baseClassName: CLASSNAME,
|
|
51
|
-
forwardClassName: 'inlineList',
|
|
52
|
-
forwardAttributes: 'inlineList',
|
|
53
|
-
});
|
|
54
|
-
});
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import React, { Children, isValidElement } from 'react';
|
|
2
|
-
|
|
3
|
-
import classNames from 'classnames';
|
|
4
|
-
|
|
5
|
-
import { ColorVariant, ColorWithVariants, Typography } from '@lumx/react';
|
|
6
|
-
import { GenericProps } from '@lumx/react/utils/type';
|
|
7
|
-
import { fontColorClass, getRootClassName, getTypographyClassName } from '@lumx/core/js/utils/className';
|
|
8
|
-
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Defines the props of the component.
|
|
12
|
-
*/
|
|
13
|
-
export interface InlineListProps extends GenericProps {
|
|
14
|
-
/**
|
|
15
|
-
* Text color.
|
|
16
|
-
*/
|
|
17
|
-
color?: ColorWithVariants;
|
|
18
|
-
/**
|
|
19
|
-
* Lightened or darkened variant of the selected color.
|
|
20
|
-
*/
|
|
21
|
-
colorVariant?: ColorVariant;
|
|
22
|
-
/**
|
|
23
|
-
* Typography variant.
|
|
24
|
-
*/
|
|
25
|
-
typography?: Typography;
|
|
26
|
-
/**
|
|
27
|
-
* Activate line wrap on overflow.
|
|
28
|
-
*/
|
|
29
|
-
wrap?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Children
|
|
32
|
-
*/
|
|
33
|
-
children?: React.ReactNode;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Component display name.
|
|
38
|
-
*/
|
|
39
|
-
const COMPONENT_NAME = 'InlineList';
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Component default class name and class prefix.
|
|
43
|
-
*/
|
|
44
|
-
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Component default props.
|
|
48
|
-
*/
|
|
49
|
-
const DEFAULT_PROPS = {} as const;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* InlineList component.
|
|
53
|
-
*
|
|
54
|
-
* @param props Component props.
|
|
55
|
-
* @param ref Component ref.
|
|
56
|
-
* @return React element.
|
|
57
|
-
*/
|
|
58
|
-
export const InlineList = forwardRef<InlineListProps>((props, ref) => {
|
|
59
|
-
const { className, color, colorVariant, typography, children, wrap, ...forwardedProps } = props;
|
|
60
|
-
const typographyClassName = typography && getTypographyClassName(typography);
|
|
61
|
-
return (
|
|
62
|
-
// eslint-disable-next-line jsx-a11y/no-redundant-roles
|
|
63
|
-
<ul
|
|
64
|
-
{...forwardedProps}
|
|
65
|
-
ref={ref as any}
|
|
66
|
-
className={classNames(
|
|
67
|
-
className,
|
|
68
|
-
CLASSNAME,
|
|
69
|
-
wrap && `${CLASSNAME}--wrap`,
|
|
70
|
-
fontColorClass(color, colorVariant),
|
|
71
|
-
typographyClassName,
|
|
72
|
-
)}
|
|
73
|
-
// Lists with removed bullet style can lose their a11y list role on some browsers
|
|
74
|
-
role="list"
|
|
75
|
-
>
|
|
76
|
-
{Children.toArray(children).map((child, index) => {
|
|
77
|
-
const key = (isValidElement(child) && child.key) || index;
|
|
78
|
-
return (
|
|
79
|
-
// We need to item is set as display: contents which removes the semantic.
|
|
80
|
-
// eslint-disable-next-line jsx-a11y/no-redundant-roles
|
|
81
|
-
<li key={key} role="listitem" className={`${CLASSNAME}__item`}>
|
|
82
|
-
{index !== 0 && (
|
|
83
|
-
<span className={`${CLASSNAME}__item-separator`} aria-hidden="true">
|
|
84
|
-
{'\u00A0•\u00A0'}
|
|
85
|
-
</span>
|
|
86
|
-
)}
|
|
87
|
-
{child}
|
|
88
|
-
</li>
|
|
89
|
-
);
|
|
90
|
-
})}
|
|
91
|
-
</ul>
|
|
92
|
-
);
|
|
93
|
-
});
|
|
94
|
-
InlineList.displayName = COMPONENT_NAME;
|
|
95
|
-
InlineList.className = CLASSNAME;
|
|
96
|
-
InlineList.defaultProps = DEFAULT_PROPS;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './InlineList';
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { InputHelper, Kind } from '@lumx/react';
|
|
2
|
-
import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
|
|
3
|
-
import { withCombinations } from '@lumx/react/stories/decorators/withCombinations';
|
|
4
|
-
import { withUndefined } from '@lumx/react/stories/controls/withUndefined';
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
title: 'LumX components/input-helper/Input Helper',
|
|
8
|
-
component: InputHelper,
|
|
9
|
-
argTypes: {
|
|
10
|
-
kind: getSelectArgType(Kind),
|
|
11
|
-
},
|
|
12
|
-
args: {
|
|
13
|
-
...InputHelper.defaultProps,
|
|
14
|
-
children: 'Some helper text',
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Default input helper
|
|
20
|
-
*/
|
|
21
|
-
export const Default = {};
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* All `kind` variants
|
|
25
|
-
*/
|
|
26
|
-
export const AllKinds = {
|
|
27
|
-
argTypes: { kind: { control: false } },
|
|
28
|
-
decorators: [
|
|
29
|
-
withCombinations({
|
|
30
|
-
combinations: {
|
|
31
|
-
rows: { key: 'kind', options: withUndefined(Kind) },
|
|
32
|
-
},
|
|
33
|
-
}),
|
|
34
|
-
],
|
|
35
|
-
};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import { Kind, Theme } from '@lumx/react';
|
|
4
|
-
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
5
|
-
import { getByClassName } from '@lumx/react/testing/utils/queries';
|
|
6
|
-
import { render } from '@testing-library/react';
|
|
7
|
-
import { INPUT_HELPER_CONFIGURATION } from '@lumx/react/components/input-helper/constants';
|
|
8
|
-
import { InputHelper, InputHelperProps } from './InputHelper';
|
|
9
|
-
|
|
10
|
-
const CLASSNAME = InputHelper.className as string;
|
|
11
|
-
|
|
12
|
-
type SetupProps = Partial<InputHelperProps>;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Mounts the component and returns common DOM elements / data needed in multiple tests further down.
|
|
16
|
-
*/
|
|
17
|
-
const setup = (propsOverride: SetupProps = {}, { wrapper }: SetupRenderOptions = {}) => {
|
|
18
|
-
const props: any = { ...propsOverride };
|
|
19
|
-
render(<InputHelper {...props} />, { wrapper });
|
|
20
|
-
const helper = getByClassName(document.body, CLASSNAME);
|
|
21
|
-
|
|
22
|
-
return { helper, props };
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
describe(`<${InputHelper.displayName}>`, () => {
|
|
26
|
-
describe('Props', () => {
|
|
27
|
-
it('should render text', () => {
|
|
28
|
-
const { props, helper } = setup({ children: 'helper text' });
|
|
29
|
-
|
|
30
|
-
expect(helper).toHaveTextContent(props.children);
|
|
31
|
-
expect(helper.className).toMatchInlineSnapshot('"lumx-input-helper lumx-input-helper--theme-light"');
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should render dark theme', () => {
|
|
35
|
-
const { helper } = setup({ theme: Theme.dark });
|
|
36
|
-
expect(helper).toHaveClass('lumx-input-helper--theme-dark');
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it.each(Object.values(Kind))('should render kind %s', (kind) => {
|
|
40
|
-
const { helper } = setup({ kind });
|
|
41
|
-
const { color } = INPUT_HELPER_CONFIGURATION[kind as any] || {};
|
|
42
|
-
if (color) expect(helper).toHaveClass(`${CLASSNAME}--color-${color}`);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
commonTestsSuiteRTL(setup, {
|
|
47
|
-
baseClassName: CLASSNAME,
|
|
48
|
-
forwardClassName: 'helper',
|
|
49
|
-
forwardAttributes: 'helper',
|
|
50
|
-
applyTheme: {
|
|
51
|
-
affects: [{ element: 'helper' }],
|
|
52
|
-
viaProp: true,
|
|
53
|
-
viaContext: true,
|
|
54
|
-
defaultTheme: 'light',
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
});
|