@lumx/react 3.20.1-alpha.10 → 3.20.1-alpha.11
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/01bc8fcf.js +114 -0
- package/_internal/01bc8fcf.js.map +1 -0
- package/_internal/0361b7fb.js +15 -0
- package/_internal/0361b7fb.js.map +1 -0
- package/_internal/077b7bef.js +29 -0
- package/_internal/077b7bef.js.map +1 -0
- package/_internal/07e0bd90.js +147 -0
- package/_internal/07e0bd90.js.map +1 -0
- package/_internal/0a31e895.js +304 -0
- package/_internal/0a31e895.js.map +1 -0
- package/_internal/0b9c76cb.js +6 -0
- package/_internal/0b9c76cb.js.map +1 -0
- package/_internal/0f4b35b2.js +76 -0
- package/_internal/0f4b35b2.js.map +1 -0
- package/_internal/18334f0d.js +140 -0
- package/_internal/18334f0d.js.map +1 -0
- package/_internal/1921f348.js +72 -0
- package/_internal/1921f348.js.map +1 -0
- package/_internal/1aaa0341.js +645 -0
- package/_internal/1aaa0341.js.map +1 -0
- package/_internal/1ce667fb.js +790 -0
- package/_internal/1ce667fb.js.map +1 -0
- package/_internal/1e4b7ad5.js +60 -0
- package/_internal/1e4b7ad5.js.map +1 -0
- package/_internal/1eab656b.js +75 -0
- package/_internal/1eab656b.js.map +1 -0
- package/_internal/21aeb1c7.js +19 -0
- package/_internal/21aeb1c7.js.map +1 -0
- package/_internal/21cf275f.js +158 -0
- package/_internal/21cf275f.js.map +1 -0
- package/_internal/230173a8.js +13 -0
- package/_internal/230173a8.js.map +1 -0
- package/_internal/2368cb68.js +297 -0
- package/_internal/2368cb68.js.map +1 -0
- package/_internal/286fc728.js +2 -0
- package/_internal/286fc728.js.map +1 -0
- package/_internal/2938a251.js +147 -0
- package/_internal/2938a251.js.map +1 -0
- package/_internal/2a3d237c.js +12 -0
- package/_internal/2a3d237c.js.map +1 -0
- package/_internal/2c7942af.js +108 -0
- package/_internal/2c7942af.js.map +1 -0
- package/_internal/2d6bde7d.js +209 -0
- package/_internal/2d6bde7d.js.map +1 -0
- package/_internal/30f4c83c.js +59 -0
- package/_internal/30f4c83c.js.map +1 -0
- package/_internal/3181f000.js +14 -0
- package/_internal/3181f000.js.map +1 -0
- package/_internal/32698205.js +107 -0
- package/_internal/32698205.js.map +1 -0
- package/_internal/3646abc3.js +346 -0
- package/_internal/3646abc3.js.map +1 -0
- package/_internal/3683d267.js +52 -0
- package/_internal/3683d267.js.map +1 -0
- package/_internal/36bd7352.js +219 -0
- package/_internal/36bd7352.js.map +1 -0
- package/_internal/38b3ecf3.js +133 -0
- package/_internal/38b3ecf3.js.map +1 -0
- package/_internal/3a1facc0.js +18 -0
- package/_internal/3a1facc0.js.map +1 -0
- package/_internal/3f3de25e.js +112 -0
- package/_internal/3f3de25e.js.map +1 -0
- package/_internal/407735b4.js +2155 -0
- package/_internal/407735b4.js.map +1 -0
- package/_internal/43262bfe.js +48 -0
- package/_internal/43262bfe.js.map +1 -0
- package/_internal/432c85a7.js +50 -0
- package/_internal/432c85a7.js.map +1 -0
- package/_internal/49bbeed3.js +6 -0
- package/_internal/49bbeed3.js.map +1 -0
- package/_internal/4c5a7b63.js +53 -0
- package/_internal/4c5a7b63.js.map +1 -0
- package/_internal/4ceaf17c.js +75 -0
- package/_internal/4ceaf17c.js.map +1 -0
- package/_internal/4d92e13b.js +97 -0
- package/_internal/4d92e13b.js.map +1 -0
- package/{src/utils/partitionMulti.ts → _internal/4daccdd5.js} +5 -9
- package/_internal/4daccdd5.js.map +1 -0
- package/_internal/4e1dde79.js +104 -0
- package/_internal/4e1dde79.js.map +1 -0
- package/_internal/5ba8fae8.js +120 -0
- package/_internal/5ba8fae8.js.map +1 -0
- package/_internal/60923026.js +36 -0
- package/_internal/60923026.js.map +1 -0
- package/_internal/60f8e509.js +745 -0
- package/_internal/60f8e509.js.map +1 -0
- package/_internal/64046d7a.js +57 -0
- package/_internal/64046d7a.js.map +1 -0
- package/_internal/70cf341b.js +117 -0
- package/_internal/70cf341b.js.map +1 -0
- package/_internal/714809cc.js +312 -0
- package/_internal/714809cc.js.map +1 -0
- package/_internal/72407886.js +430 -0
- package/_internal/72407886.js.map +1 -0
- package/_internal/742d4906.js +148 -0
- package/_internal/742d4906.js.map +1 -0
- package/_internal/77eb8ef3.js +149 -0
- package/_internal/77eb8ef3.js.map +1 -0
- package/_internal/78df9309.js +20 -0
- package/_internal/78df9309.js.map +1 -0
- package/_internal/7b214f74.js +70 -0
- package/_internal/7b214f74.js.map +1 -0
- package/_internal/7b221b05.js +9 -0
- package/_internal/7b221b05.js.map +1 -0
- package/_internal/7c4f4643.js +20 -0
- package/_internal/7c4f4643.js.map +1 -0
- package/_internal/7daf0f24.js +77 -0
- package/_internal/7daf0f24.js.map +1 -0
- package/_internal/803945f7.js +65 -0
- package/_internal/803945f7.js.map +1 -0
- package/_internal/80e5c950.js +80 -0
- package/_internal/80e5c950.js.map +1 -0
- package/_internal/825ac334.js +130 -0
- package/_internal/825ac334.js.map +1 -0
- package/_internal/827b804a.js +6 -0
- package/_internal/827b804a.js.map +1 -0
- package/_internal/85d992d2.js +678 -0
- package/_internal/85d992d2.js.map +1 -0
- package/_internal/87bada02.js +262 -0
- package/_internal/87bada02.js.map +1 -0
- package/_internal/881714a1.js +187 -0
- package/_internal/881714a1.js.map +1 -0
- package/_internal/88ec77c2.js +130 -0
- package/_internal/88ec77c2.js.map +1 -0
- package/_internal/8fcceef3.js +120 -0
- package/_internal/8fcceef3.js.map +1 -0
- package/_internal/9210e2f3.js +61 -0
- package/_internal/9210e2f3.js.map +1 -0
- package/_internal/9452daf7.js +103 -0
- package/_internal/9452daf7.js.map +1 -0
- package/_internal/95a2e851.js +42 -0
- package/_internal/95a2e851.js.map +1 -0
- package/_internal/9cf0d217.js +147 -0
- package/_internal/9cf0d217.js.map +1 -0
- package/_internal/9cfa3e10.js +108 -0
- package/_internal/9cfa3e10.js.map +1 -0
- package/_internal/9d8130ae.js +301 -0
- package/_internal/9d8130ae.js.map +1 -0
- package/_internal/a67f26a8.js +98 -0
- package/_internal/a67f26a8.js.map +1 -0
- package/_internal/aa8c5d9b.js +50 -0
- package/_internal/aa8c5d9b.js.map +1 -0
- package/_internal/aafcf80e.js +312 -0
- package/_internal/aafcf80e.js.map +1 -0
- package/_internal/ac3bc511.js +2 -0
- package/_internal/ac3bc511.js.map +1 -0
- package/_internal/b3bfbe72.js +24 -0
- package/_internal/b3bfbe72.js.map +1 -0
- package/_internal/b925072d.js +91 -0
- package/_internal/b925072d.js.map +1 -0
- package/_internal/baa0a23b.js +95 -0
- package/_internal/baa0a23b.js.map +1 -0
- package/_internal/bba7d4c4.js +225 -0
- package/_internal/bba7d4c4.js.map +1 -0
- package/_internal/bc4cb4c0.js +86 -0
- package/_internal/bc4cb4c0.js.map +1 -0
- package/_internal/bcce6ceb.js +93 -0
- package/_internal/bcce6ceb.js.map +1 -0
- package/_internal/bdd41804.js +157 -0
- package/_internal/bdd41804.js.map +1 -0
- package/_internal/c43d098b.js +42 -0
- package/_internal/c43d098b.js.map +1 -0
- package/_internal/cb036703.js +113 -0
- package/_internal/cb036703.js.map +1 -0
- package/_internal/cc995526.js +2 -0
- package/_internal/cc995526.js.map +1 -0
- package/_internal/cdc3efab.js +173 -0
- package/_internal/cdc3efab.js.map +1 -0
- package/_internal/d0dd1815.js +10 -0
- package/_internal/d0dd1815.js.map +1 -0
- package/_internal/d3321a86.js +290 -0
- package/_internal/d3321a86.js.map +1 -0
- package/_internal/d66c4375.js +62 -0
- package/_internal/d66c4375.js.map +1 -0
- package/_internal/d6b3a3c0.js +317 -0
- package/_internal/d6b3a3c0.js.map +1 -0
- package/_internal/dd0a245d.js +142 -0
- package/_internal/dd0a245d.js.map +1 -0
- package/_internal/de24f857.js +4 -0
- package/_internal/de24f857.js.map +1 -0
- package/_internal/e2122a37.js +3 -0
- package/_internal/e2122a37.js.map +1 -0
- package/_internal/e2440593.js +148 -0
- package/_internal/e2440593.js.map +1 -0
- package/_internal/e4613195.js +59 -0
- package/_internal/e4613195.js.map +1 -0
- package/_internal/e53b5a39.js +407 -0
- package/_internal/e53b5a39.js.map +1 -0
- package/_internal/e566d502.js +54 -0
- package/_internal/e566d502.js.map +1 -0
- package/_internal/e806b848.js +9 -0
- package/_internal/e806b848.js.map +1 -0
- package/_internal/eaf6c45a.js +4 -0
- package/_internal/eaf6c45a.js.map +1 -0
- package/_internal/ee64ab0d.js +149 -0
- package/_internal/ee64ab0d.js.map +1 -0
- package/_internal/ef5d1aac.js +4 -0
- package/_internal/ef5d1aac.js.map +1 -0
- package/_internal/f0d7d6ea.js +30 -0
- package/_internal/f0d7d6ea.js.map +1 -0
- package/_internal/f57d4eb8.js +53 -0
- package/_internal/f57d4eb8.js.map +1 -0
- package/_internal/fc47f2da.js +72 -0
- package/_internal/fc47f2da.js.map +1 -0
- package/index.d.ts +1 -2
- package/index.js +65 -14607
- package/index.js.map +1 -1
- package/package.json +3 -7
- package/utils/index.d.ts +1 -1
- package/utils/index.js +3 -1
- package/utils/index.js.map +1 -1
- package/_internal/index.js +0 -229
- 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 -34
- 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 -99
- 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 -61
- 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 -119
- package/src/components/avatar/Avatar.test.tsx +0 -32
- package/src/components/avatar/Avatar.tsx +0 -114
- package/src/components/avatar/index.ts +0 -1
- package/src/components/badge/Badge.stories.tsx +0 -69
- package/src/components/badge/Badge.test.tsx +0 -45
- package/src/components/badge/Badge.tsx +0 -58
- package/src/components/badge/BadgeWrapper.stories.tsx +0 -75
- package/src/components/badge/BadgeWrapper.test.tsx +0 -47
- package/src/components/badge/BadgeWrapper.tsx +0 -37
- package/src/components/badge/index.ts +0 -2
- package/src/components/button/Button.stories.tsx +0 -355
- package/src/components/button/Button.test.tsx +0 -125
- package/src/components/button/Button.tsx +0 -101
- package/src/components/button/ButtonGroup.stories.tsx +0 -52
- package/src/components/button/ButtonGroup.test.tsx +0 -41
- package/src/components/button/ButtonGroup.tsx +0 -50
- package/src/components/button/ButtonRoot.tsx +0 -163
- package/src/components/button/IconButton.stories.tsx +0 -52
- package/src/components/button/IconButton.test.tsx +0 -66
- package/src/components/button/IconButton.tsx +0 -91
- 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 -154
- package/src/components/checkbox/Checkbox.tsx +0 -164
- package/src/components/checkbox/index.ts +0 -1
- package/src/components/chip/Chip.stories.tsx +0 -164
- 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 -47
- package/src/components/chip/ChipGroup.test.tsx +0 -37
- 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 -91
- package/src/components/comment-block/CommentBlock.test.tsx +0 -28
- 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 -34
- package/src/components/date-picker/DatePicker.tsx +0 -52
- package/src/components/date-picker/DatePickerControlled.test.tsx +0 -91
- 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 -70
- 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 -97
- package/src/components/dialog/Dialog.tsx +0 -288
- package/src/components/dialog/index.ts +0 -1
- package/src/components/divider/Divider.test.tsx +0 -51
- package/src/components/divider/Divider.tsx +0 -50
- package/src/components/divider/index.ts +0 -1
- package/src/components/drag-handle/DragHandle.test.tsx +0 -36
- package/src/components/drag-handle/DragHandle.tsx +0 -51
- 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 -185
- 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 -62
- package/src/components/flag/Flag.tsx +0 -52
- package/src/components/flag/index.ts +0 -1
- package/src/components/flex-box/FlexBox.stories.tsx +0 -156
- package/src/components/flex-box/FlexBox.test.tsx +0 -24
- 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 -83
- package/src/components/grid/GridItem.tsx +0 -55
- package/src/components/grid/index.ts +0 -2
- package/src/components/grid-column/GridColumn.stories.tsx +0 -45
- package/src/components/grid-column/GridColumn.test.jsx +0 -56
- 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 -69
- package/src/components/heading/Heading.test.tsx +0 -82
- package/src/components/heading/Heading.tsx +0 -65
- package/src/components/heading/HeadingLevelProvider.tsx +0 -30
- package/src/components/heading/constants.ts +0 -16
- package/src/components/heading/context.tsx +0 -13
- package/src/components/heading/index.ts +0 -3
- package/src/components/heading/useHeadingLevel.tsx +0 -8
- package/src/components/icon/Icon.stories.tsx +0 -73
- package/src/components/icon/Icon.test.tsx +0 -125
- package/src/components/icon/Icon.tsx +0 -22
- package/src/components/icon/index.ts +0 -1
- package/src/components/image-block/ImageBlock.stories.tsx +0 -117
- package/src/components/image-block/ImageBlock.test.tsx +0 -58
- 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 -160
- package/src/components/image-lightbox/ImageLightbox.test.tsx +0 -254
- 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 -48
- package/src/components/image-lightbox/useImageLightbox.tsx +0 -141
- package/src/components/inline-list/InlineList.stories.tsx +0 -77
- package/src/components/inline-list/InlineList.test.tsx +0 -52
- 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 -55
- 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 -45
- package/src/components/input-label/InputLabel.test.tsx +0 -59
- 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 -53
- package/src/components/lightbox/Lightbox.tsx +0 -180
- package/src/components/lightbox/index.ts +0 -1
- package/src/components/link/Link.stories.tsx +0 -195
- package/src/components/link/Link.test.tsx +0 -127
- package/src/components/link/Link.tsx +0 -106
- 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 -105
- package/src/components/link-preview/LinkPreview.tsx +0 -158
- 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 -18
- 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 -22
- package/src/components/list/ListDivider.tsx +0 -35
- package/src/components/list/ListItem.stories.tsx +0 -66
- package/src/components/list/ListItem.test.tsx +0 -93
- 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 -21
- 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 -76
- 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 -77
- package/src/components/mosaic/Mosaic.tsx +0 -98
- package/src/components/mosaic/index.ts +0 -1
- package/src/components/navigation/Navigation.stories.tsx +0 -234
- package/src/components/navigation/Navigation.test.tsx +0 -65
- package/src/components/navigation/Navigation.tsx +0 -79
- package/src/components/navigation/NavigationItem.test.tsx +0 -35
- package/src/components/navigation/NavigationItem.tsx +0 -82
- package/src/components/navigation/NavigationSection.test.tsx +0 -137
- package/src/components/navigation/NavigationSection.tsx +0 -108
- package/src/components/navigation/context.tsx +0 -7
- package/src/components/navigation/index.ts +0 -1
- package/src/components/notification/Notification.test.tsx +0 -94
- 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 -62
- 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 -139
- package/src/components/popover-dialog/PopoverDialog.tsx +0 -74
- package/src/components/popover-dialog/index.tsx +0 -1
- package/src/components/post-block/PostBlock.test.tsx +0 -27
- 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 -68
- package/src/components/progress/ProgressCircular.stories.tsx +0 -43
- package/src/components/progress/ProgressCircular.test.tsx +0 -46
- package/src/components/progress/ProgressCircular.tsx +0 -82
- package/src/components/progress/ProgressLinear.stories.tsx +0 -12
- package/src/components/progress/ProgressLinear.test.tsx +0 -30
- package/src/components/progress/ProgressLinear.tsx +0 -50
- 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 -42
- package/src/components/progress-tracker/ProgressTracker.tsx +0 -87
- package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +0 -65
- package/src/components/progress-tracker/ProgressTrackerProvider.tsx +0 -67
- package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +0 -36
- package/src/components/progress-tracker/ProgressTrackerStep.tsx +0 -159
- package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +0 -34
- package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +0 -67
- 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 -143
- 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 -29
- 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 -199
- 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 -213
- 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 -37
- 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 -136
- package/src/components/side-navigation/SideNavigationItem.tsx +0 -165
- package/src/components/side-navigation/index.ts +0 -2
- package/src/components/skeleton/SkeletonCircle.stories.tsx +0 -41
- package/src/components/skeleton/SkeletonCircle.test.tsx +0 -27
- package/src/components/skeleton/SkeletonCircle.tsx +0 -52
- package/src/components/skeleton/SkeletonRectangle.stories.tsx +0 -82
- package/src/components/skeleton/SkeletonRectangle.test.tsx +0 -27
- package/src/components/skeleton/SkeletonRectangle.tsx +0 -88
- package/src/components/skeleton/SkeletonTypography.stories.tsx +0 -19
- package/src/components/skeleton/SkeletonTypography.test.tsx +0 -27
- 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 -29
- 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 -179
- package/src/components/slideshow/Slideshow.test.tsx +0 -35
- package/src/components/slideshow/Slideshow.tsx +0 -173
- package/src/components/slideshow/SlideshowControls.stories.tsx +0 -100
- package/src/components/slideshow/SlideshowControls.tsx +0 -243
- package/src/components/slideshow/SlideshowItem.tsx +0 -44
- 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 -144
- package/src/components/switch/Switch.tsx +0 -145
- package/src/components/switch/index.ts +0 -1
- package/src/components/table/Table.test.tsx +0 -29
- package/src/components/table/Table.tsx +0 -59
- package/src/components/table/TableBody.test.tsx +0 -30
- package/src/components/table/TableBody.tsx +0 -42
- package/src/components/table/TableCell.test.tsx +0 -72
- package/src/components/table/TableCell.tsx +0 -130
- package/src/components/table/TableHeader.test.tsx +0 -30
- package/src/components/table/TableHeader.tsx +0 -48
- package/src/components/table/TableRow.test.tsx +0 -40
- package/src/components/table/TableRow.tsx +0 -71
- package/src/components/table/index.ts +0 -5
- package/src/components/tabs/Tab.test.tsx +0 -50
- package/src/components/tabs/Tab.tsx +0 -133
- package/src/components/tabs/TabList.test.tsx +0 -49
- package/src/components/tabs/TabList.tsx +0 -94
- package/src/components/tabs/TabPanel.test.tsx +0 -37
- package/src/components/tabs/TabPanel.tsx +0 -67
- package/src/components/tabs/TabProvider.test.tsx +0 -161
- 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 -92
- package/src/components/text/Text.tsx +0 -139
- 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 -298
- 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 -88
- 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 -118
- package/src/components/tooltip/Tooltip.test.tsx +0 -417
- package/src/components/tooltip/Tooltip.tsx +0 -165
- package/src/components/tooltip/constants.ts +0 -8
- package/src/components/tooltip/context.tsx +0 -17
- package/src/components/tooltip/index.ts +0 -1
- package/src/components/tooltip/useInjectTooltipRef.tsx +0 -55
- package/src/components/tooltip/useTooltipOpen.tsx +0 -143
- package/src/components/uploader/Uploader.stories.tsx +0 -109
- package/src/components/uploader/Uploader.test.tsx +0 -146
- 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 -133
- package/src/components/user-block/UserBlock.test.tsx +0 -106
- 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 -22
- 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 -12
- 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 -7
- package/src/stories/decorators/withCombinations.tsx +0 -132
- package/src/stories/decorators/withNestedProps.tsx +0 -22
- package/src/stories/decorators/withResizableBox.tsx +0 -21
- package/src/stories/decorators/withThemedBackground.tsx +0 -16
- package/src/stories/decorators/withValueOnChange.tsx +0 -18
- package/src/stories/decorators/withWrapper.tsx +0 -19
- 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 -12
- 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 -10
- package/src/testing/utils/commonTestsSuiteRTL.tsx +0 -193
- package/src/testing/utils/index.ts +0 -1
- package/src/testing/utils/queries.ts +0 -19
- package/src/untypped-modules.d.ts +0 -9
- package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +0 -70
- package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +0 -69
- package/src/utils/ClickAwayProvider/index.ts +0 -1
- package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +0 -54
- package/src/utils/MaterialThemeSwitcher/index.ts +0 -1
- package/src/utils/Portal/Portal.test.tsx +0 -31
- package/src/utils/Portal/Portal.tsx +0 -33
- package/src/utils/Portal/PortalProvider.stories.jsx +0 -22
- package/src/utils/Portal/PortalProvider.test.tsx +0 -72
- 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 -92
- 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/react/OnBeforeUnmount.tsx +0 -20
- package/src/utils/react/RawClickable.test.tsx +0 -153
- package/src/utils/react/RawClickable.tsx +0 -65
- package/src/utils/react/flattenChildren.ts +0 -32
- package/src/utils/react/forwardRef.ts +0 -11
- package/src/utils/react/forwardRefPolymorphic.ts +0 -9
- package/src/utils/react/mergeRefs.ts +0 -33
- package/src/utils/react/renderLink.tsx +0 -17
- package/src/utils/react/skipRender.tsx +0 -18
- package/src/utils/react/unref.ts +0 -7
- package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +0 -37
- package/src/utils/react/wrapChildrenIconWithSpaces.tsx +0 -22
- package/src/utils/theme/ThemeContext.ts +0 -16
- package/src/utils/theme/invertTheme.ts +0 -4
- package/src/utils/type/Comp.ts +0 -14
- package/src/utils/type/ComponentRef.ts +0 -16
- package/src/utils/type/HasAriaDisabled.ts +0 -6
- package/src/utils/type/HasPolymorphicAs.ts +0 -6
- package/src/utils/type/HasRequiredLinkHref.ts +0 -1
- package/src/utils/type/MaybeElementOrRef.ts +0 -6
- package/src/utils/type/index.ts +0 -9
- package/src/utils/type/isComponent.ts +0 -33
- package/src/utils/type/isComponentType.ts +0 -9
- /package/_internal/{Falsy.d.ts → d95844c1.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"b925072d.js","sources":["../../src/components/mosaic/Mosaic.tsx"],"sourcesContent":["import { MouseEventHandler, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport take from 'lodash/take';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\n\nimport { Alignment, AspectRatio, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Defines the props of the component.\n */\nexport interface MosaicProps extends GenericProps, HasTheme {\n /** Thumbnails. */\n thumbnails: ThumbnailProps[];\n /** On image click callback. */\n onImageClick?(index: number): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Mosaic';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<MosaicProps> = {};\n\n/**\n * Mosaic component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Mosaic = forwardRef<MosaicProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const { className, theme = defaultTheme, thumbnails, onImageClick, ...forwardedProps } = props;\n const handleImageClick = useMemo(() => {\n if (!onImageClick) return undefined;\n\n return (index: number, onClick?: MouseEventHandler): MouseEventHandler =>\n (event) => {\n onClick?.(event);\n onImageClick?.(index);\n };\n }, [onImageClick]);\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-1-thumbnail`]: thumbnails?.length === 1,\n [`${CLASSNAME}--has-2-thumbnails`]: thumbnails?.length === 2,\n [`${CLASSNAME}--has-3-thumbnails`]: thumbnails?.length === 3,\n [`${CLASSNAME}--has-4-thumbnails`]: thumbnails?.length >= 4,\n })}\n >\n <div className={`${CLASSNAME}__wrapper`}>\n {take(thumbnails, 4).map((thumbnail: any, index: number) => {\n const { image, onClick, align, ...thumbnailProps } = thumbnail;\n\n return (\n <div key={index} className={`${CLASSNAME}__thumbnail`}>\n <Thumbnail\n {...thumbnailProps}\n align={align || Alignment.left}\n image={image}\n theme={theme}\n aspectRatio={AspectRatio.free}\n fillHeight\n onClick={handleImageClick?.(index, onClick) || onClick}\n />\n\n {thumbnails.length > 4 && index === 3 && (\n <div className={`${CLASSNAME}__overlay`}>\n <span>+{thumbnails.length - 4}</span>\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n});\nMosaic.displayName = COMPONENT_NAME;\nMosaic.className = CLASSNAME;\nMosaic.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","Mosaic","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","className","theme","thumbnails","onImageClick","forwardedProps","handleImageClick","useMemo","undefined","index","onClick","event","React","createElement","_extends","classNames","handleBasicClasses","prefix","length","take","map","thumbnail","image","align","thumbnailProps","key","Thumbnail","Alignment","left","aspectRatio","AspectRatio","free","fillHeight","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { d as Emphasis, m as getRootClassName, c as Size, n as forwardRef, b as Theme, l as classNames, _ as _extends } from './d3321a86.js';
|
|
2
|
+
import isEmpty from 'lodash/isEmpty';
|
|
3
|
+
import { i as isComponent } from './78df9309.js';
|
|
4
|
+
import { g as getBasicClass } from './4ceaf17c.js';
|
|
5
|
+
import { u as useTheme, T as ThemeProvider } from './3181f000.js';
|
|
6
|
+
import { B as ButtonRoot } from './01bc8fcf.js';
|
|
7
|
+
import { T as Text } from './8fcceef3.js';
|
|
8
|
+
import { I as Icon } from './4e1dde79.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Button emphasis definition.
|
|
12
|
+
* @deprecated Use Emphasis instead.
|
|
13
|
+
*/
|
|
14
|
+
const ButtonEmphasis = Emphasis;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Defines the props of the component.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Component display name.
|
|
22
|
+
*/
|
|
23
|
+
const COMPONENT_NAME = 'Button';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Component default class name and class prefix.
|
|
27
|
+
*/
|
|
28
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Component default props.
|
|
32
|
+
*/
|
|
33
|
+
const DEFAULT_PROPS = {
|
|
34
|
+
emphasis: Emphasis.high,
|
|
35
|
+
size: Size.m
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Button component.
|
|
40
|
+
*
|
|
41
|
+
* @param props Component props.
|
|
42
|
+
* @param ref Component ref.
|
|
43
|
+
* @return React element.
|
|
44
|
+
*/
|
|
45
|
+
const Button = forwardRef((props, ref) => {
|
|
46
|
+
const defaultTheme = useTheme() || Theme.light;
|
|
47
|
+
const {
|
|
48
|
+
children,
|
|
49
|
+
className,
|
|
50
|
+
emphasis = DEFAULT_PROPS.emphasis,
|
|
51
|
+
leftIcon,
|
|
52
|
+
rightIcon,
|
|
53
|
+
size = DEFAULT_PROPS.size,
|
|
54
|
+
theme = defaultTheme,
|
|
55
|
+
...forwardedProps
|
|
56
|
+
} = props;
|
|
57
|
+
const buttonClassName = classNames(className, getBasicClass({
|
|
58
|
+
prefix: CLASSNAME,
|
|
59
|
+
type: 'hasLeftIcon',
|
|
60
|
+
value: !isEmpty(leftIcon)
|
|
61
|
+
}), getBasicClass({
|
|
62
|
+
prefix: CLASSNAME,
|
|
63
|
+
type: 'hasRightIcon',
|
|
64
|
+
value: !isEmpty(rightIcon)
|
|
65
|
+
}));
|
|
66
|
+
return /*#__PURE__*/React.createElement(ButtonRoot, _extends({
|
|
67
|
+
ref: ref,
|
|
68
|
+
emphasis,
|
|
69
|
+
size,
|
|
70
|
+
theme
|
|
71
|
+
}, forwardedProps, {
|
|
72
|
+
className: buttonClassName,
|
|
73
|
+
variant: "button"
|
|
74
|
+
}), leftIcon && !isEmpty(leftIcon) &&
|
|
75
|
+
/*#__PURE__*/
|
|
76
|
+
// Theme is handled in the button scss
|
|
77
|
+
React.createElement(ThemeProvider, {
|
|
78
|
+
value: undefined
|
|
79
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
80
|
+
icon: leftIcon
|
|
81
|
+
})), children && (isComponent(Text)(children) ? children : /*#__PURE__*/React.createElement("span", null, children)), rightIcon && !isEmpty(rightIcon) &&
|
|
82
|
+
/*#__PURE__*/
|
|
83
|
+
// Theme is handled in the button scss
|
|
84
|
+
React.createElement(ThemeProvider, {
|
|
85
|
+
value: undefined
|
|
86
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
87
|
+
icon: rightIcon
|
|
88
|
+
})));
|
|
89
|
+
});
|
|
90
|
+
Button.displayName = COMPONENT_NAME;
|
|
91
|
+
Button.className = CLASSNAME;
|
|
92
|
+
Button.defaultProps = DEFAULT_PROPS;
|
|
93
|
+
|
|
94
|
+
export { ButtonEmphasis as B, Button as a };
|
|
95
|
+
//# sourceMappingURL=baa0a23b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baa0a23b.js","sources":["../../src/components/button/Button.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Emphasis, Icon, Size, Theme, Text, ThemeProvider } from '@lumx/react';\nimport { isComponent } from '@lumx/react/utils/type';\nimport { getBasicClass, getRootClassName } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { BaseButtonProps, ButtonRoot } from './ButtonRoot';\n\n/**\n * Button emphasis definition.\n * @deprecated Use Emphasis instead.\n */\nexport const ButtonEmphasis = Emphasis;\n\n/**\n * Defines the props of the component.\n */\nexport interface ButtonProps extends BaseButtonProps {\n /** Left icon (SVG path). */\n leftIcon?: string;\n /** Right icon (SVG path). */\n rightIcon?: string;\n /** When `true`, the button gets as large as possible. */\n fullWidth?: boolean;\n /** Children */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Button';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<ButtonProps> = {\n emphasis: Emphasis.high,\n size: Size.m,\n};\n\n/**\n * Button component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Button = forwardRef<ButtonProps, HTMLButtonElement | HTMLAnchorElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n children,\n className,\n emphasis = DEFAULT_PROPS.emphasis,\n leftIcon,\n rightIcon,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n ...forwardedProps\n } = props;\n\n const buttonClassName = classNames(\n className,\n getBasicClass({ prefix: CLASSNAME, type: 'hasLeftIcon', value: !isEmpty(leftIcon) }),\n getBasicClass({ prefix: CLASSNAME, type: 'hasRightIcon', value: !isEmpty(rightIcon) }),\n );\n\n return (\n <ButtonRoot\n ref={ref}\n {...{ emphasis, size, theme, ...forwardedProps }}\n className={buttonClassName}\n variant=\"button\"\n >\n {leftIcon && !isEmpty(leftIcon) && (\n // Theme is handled in the button scss\n <ThemeProvider value={undefined}>\n <Icon icon={leftIcon} />\n </ThemeProvider>\n )}\n {children && (isComponent(Text)(children) ? children : <span>{children}</span>)}\n {rightIcon && !isEmpty(rightIcon) && (\n // Theme is handled in the button scss\n <ThemeProvider value={undefined}>\n <Icon icon={rightIcon} />\n </ThemeProvider>\n )}\n </ButtonRoot>\n );\n});\nButton.displayName = COMPONENT_NAME;\nButton.className = CLASSNAME;\nButton.defaultProps = DEFAULT_PROPS;\n"],"names":["ButtonEmphasis","Emphasis","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","emphasis","high","size","Size","m","Button","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","children","className","leftIcon","rightIcon","theme","forwardedProps","buttonClassName","classNames","getBasicClass","prefix","type","value","isEmpty","React","createElement","ButtonRoot","_extends","variant","ThemeProvider","undefined","Icon","icon","isComponent","Text","displayName","defaultProps"],"mappings":";;;;;;;;;AAWA;AACA;AACA;AACA;AACO,MAAMA,cAAc,GAAGC,SAAQ;;AAEtC;AACA;AACA;;AAYA;AACA;AACA;AACA,MAAMC,cAAc,GAAG,QAAQ,CAAA;;AAE/B;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAmC,GAAG;EACxCC,QAAQ,EAAEL,QAAQ,CAACM,IAAI;EACvBC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGC,UAAU,CAAqD,CAACC,KAAK,EAAEC,GAAG,KAAK;EACjG,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFC,QAAQ;IACRC,SAAS;IACTd,QAAQ,GAAGD,aAAa,CAACC,QAAQ;IACjCe,QAAQ;IACRC,SAAS;IACTd,IAAI,GAAGH,aAAa,CAACG,IAAI;AACzBe,IAAAA,KAAK,GAAGR,YAAY;IACpB,GAAGS,cAAAA;AACP,GAAC,GAAGX,KAAK,CAAA;AAET,EAAA,MAAMY,eAAe,GAAGC,UAAU,CAC9BN,SAAS,EACTO,aAAa,CAAC;AAAEC,IAAAA,MAAM,EAAEzB,SAAS;AAAE0B,IAAAA,IAAI,EAAE,aAAa;AAAEC,IAAAA,KAAK,EAAE,CAACC,OAAO,CAACV,QAAQ,CAAA;GAAG,CAAC,EACpFM,aAAa,CAAC;AAAEC,IAAAA,MAAM,EAAEzB,SAAS;AAAE0B,IAAAA,IAAI,EAAE,cAAc;AAAEC,IAAAA,KAAK,EAAE,CAACC,OAAO,CAACT,SAAS,CAAA;AAAE,GAAC,CACzF,CAAC,CAAA;AAED,EAAA,oBACIU,KAAA,CAAAC,aAAA,CAACC,UAAU,EAAAC,QAAA,CAAA;AACPrB,IAAAA,GAAG,EAAEA,GAAI;IACHR,QAAQ;IAAEE,IAAI;AAAEe,IAAAA,KAAAA;AAAK,GAAA,EAAKC,cAAc,EAAA;AAC9CJ,IAAAA,SAAS,EAAEK,eAAgB;AAC3BW,IAAAA,OAAO,EAAC,QAAA;AAAQ,GAAA,CAAA,EAEff,QAAQ,IAAI,CAACU,OAAO,CAACV,QAAQ,CAAC;AAAA;AAC3B;EACAW,KAAA,CAAAC,aAAA,CAACI,aAAa,EAAA;AAACP,IAAAA,KAAK,EAAEQ,SAAAA;AAAU,GAAA,eAC5BN,KAAA,CAAAC,aAAA,CAACM,IAAI,EAAA;AAACC,IAAAA,IAAI,EAAEnB,QAAAA;AAAS,GAAE,CACZ,CAClB,EACAF,QAAQ,KAAKsB,WAAW,CAACC,IAAI,CAAC,CAACvB,QAAQ,CAAC,GAAGA,QAAQ,gBAAGa,KAAA,CAAAC,aAAA,CAAOd,MAAAA,EAAAA,IAAAA,EAAAA,QAAe,CAAC,CAAC,EAC9EG,SAAS,IAAI,CAACS,OAAO,CAACT,SAAS,CAAC;AAAA;AAC7B;EACAU,KAAA,CAAAC,aAAA,CAACI,aAAa,EAAA;AAACP,IAAAA,KAAK,EAAEQ,SAAAA;AAAU,GAAA,eAC5BN,KAAA,CAAAC,aAAA,CAACM,IAAI,EAAA;AAACC,IAAAA,IAAI,EAAElB,SAAAA;GAAY,CACb,CAEX,CAAC,CAAA;AAErB,CAAC,EAAC;AACFX,MAAM,CAACgC,WAAW,GAAGzC,cAAc,CAAA;AACnCS,MAAM,CAACS,SAAS,GAAGjB,SAAS,CAAA;AAC5BQ,MAAM,CAACiC,YAAY,GAAGvC,aAAa;;;;"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { m as getRootClassName, c as Size, n as forwardRef, _ as _extends, l as classNames, D as DIALOG_TRANSITION_DURATION } from './d3321a86.js';
|
|
2
|
+
import React__default, { useState, useEffect, useRef, useMemo, Children } from 'react';
|
|
3
|
+
import { D as DOCUMENT } from './b3bfbe72.js';
|
|
4
|
+
import { u as useCallbackOnEscape } from './d66c4375.js';
|
|
5
|
+
import { u as useFocusTrap } from './3f3de25e.js';
|
|
6
|
+
import { i as isComponent } from './78df9309.js';
|
|
7
|
+
import { p as partitionMulti } from './4daccdd5.js';
|
|
8
|
+
import { h as handleBasicClasses } from './4ceaf17c.js';
|
|
9
|
+
import { m as mergeRefs } from './f0d7d6ea.js';
|
|
10
|
+
import { u as useDisableBodyScroll } from './36bd7352.js';
|
|
11
|
+
import { u as useTransitionVisibility } from './aa8c5d9b.js';
|
|
12
|
+
import { T as ThemeProvider } from './3181f000.js';
|
|
13
|
+
import { P as Portal } from './c43d098b.js';
|
|
14
|
+
import { H as HeadingLevelProvider } from './30f4c83c.js';
|
|
15
|
+
import { C as ClickAwayProvider } from './bcce6ceb.js';
|
|
16
|
+
import { Progress, ProgressVariant } from './881714a1.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Convenient hook to create interaction observers.
|
|
20
|
+
*
|
|
21
|
+
* @param elements Elements to observe.
|
|
22
|
+
* @param options IntersectionObserver options.
|
|
23
|
+
* @return Map of intersections.
|
|
24
|
+
*/
|
|
25
|
+
function useIntersectionObserver(elements, options) {
|
|
26
|
+
const [intersections, setIntersections] = useState(() => new Map());
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (elements.length < 1 || !elements.some(Boolean)) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const observer = new IntersectionObserver(entries => {
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
intersections.set(entry.target, entry);
|
|
34
|
+
}
|
|
35
|
+
setIntersections(new Map(intersections));
|
|
36
|
+
}, options);
|
|
37
|
+
for (const element of elements) {
|
|
38
|
+
if (element) {
|
|
39
|
+
observer.observe(element);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return () => observer.disconnect();
|
|
43
|
+
},
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
[...elements]);
|
|
46
|
+
return intersections;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Defines the props of the component.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
const isHeader = isComponent('header');
|
|
54
|
+
const isFooter = isComponent('footer');
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Component display name.
|
|
58
|
+
*/
|
|
59
|
+
const COMPONENT_NAME = 'Dialog';
|
|
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 = {
|
|
70
|
+
size: Size.big,
|
|
71
|
+
disableBodyScroll: true
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Dialog component.
|
|
76
|
+
*
|
|
77
|
+
* @param props Component props.
|
|
78
|
+
* @param ref Component ref.
|
|
79
|
+
* @return React element.
|
|
80
|
+
*/
|
|
81
|
+
const Dialog = forwardRef((props, ref) => {
|
|
82
|
+
if (!DOCUMENT) {
|
|
83
|
+
// Can't render in SSR.
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const {
|
|
87
|
+
children,
|
|
88
|
+
className,
|
|
89
|
+
header,
|
|
90
|
+
focusElement,
|
|
91
|
+
forceFooterDivider,
|
|
92
|
+
forceHeaderDivider,
|
|
93
|
+
footer,
|
|
94
|
+
isLoading,
|
|
95
|
+
isOpen,
|
|
96
|
+
onClose,
|
|
97
|
+
parentElement,
|
|
98
|
+
contentRef,
|
|
99
|
+
preventAutoClose,
|
|
100
|
+
size = DEFAULT_PROPS.size,
|
|
101
|
+
zIndex,
|
|
102
|
+
dialogProps,
|
|
103
|
+
onVisibilityChange,
|
|
104
|
+
disableBodyScroll = DEFAULT_PROPS.disableBodyScroll,
|
|
105
|
+
preventCloseOnClick,
|
|
106
|
+
preventCloseOnEscape,
|
|
107
|
+
...forwardedProps
|
|
108
|
+
} = props;
|
|
109
|
+
|
|
110
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
111
|
+
const previousOpen = React__default.useRef(isOpen);
|
|
112
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
113
|
+
React__default.useEffect(() => {
|
|
114
|
+
if (isOpen !== previousOpen.current) {
|
|
115
|
+
previousOpen.current = isOpen;
|
|
116
|
+
|
|
117
|
+
// Focus the parent element on close.
|
|
118
|
+
if (!isOpen && parentElement && parentElement.current) {
|
|
119
|
+
parentElement.current.focus();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}, [isOpen, parentElement]);
|
|
123
|
+
const shouldPreventCloseOnEscape = preventAutoClose || preventCloseOnEscape;
|
|
124
|
+
|
|
125
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
126
|
+
useCallbackOnEscape(onClose, isOpen && !shouldPreventCloseOnEscape);
|
|
127
|
+
|
|
128
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
129
|
+
const wrapperRef = useRef(null);
|
|
130
|
+
/**
|
|
131
|
+
* Since the `contentRef` comes from the parent and is optional,
|
|
132
|
+
* we need to create a stable contentRef that will always be available.
|
|
133
|
+
*/
|
|
134
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
135
|
+
const localContentRef = useRef(null);
|
|
136
|
+
// Handle focus trap.
|
|
137
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
138
|
+
useFocusTrap(isOpen && wrapperRef.current, focusElement?.current);
|
|
139
|
+
|
|
140
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
141
|
+
useDisableBodyScroll(disableBodyScroll && isOpen && localContentRef.current);
|
|
142
|
+
|
|
143
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
144
|
+
const [sentinelTop, setSentinelTop] = useState(null);
|
|
145
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
146
|
+
const [sentinelBottom, setSentinelBottom] = useState(null);
|
|
147
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
148
|
+
const intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {
|
|
149
|
+
threshold: [0, 1]
|
|
150
|
+
});
|
|
151
|
+
const hasTopIntersection = sentinelTop && !(intersections.get(sentinelTop)?.isIntersecting ?? true);
|
|
152
|
+
const hasBottomIntersection = sentinelBottom && !(intersections.get(sentinelBottom)?.isIntersecting ?? true);
|
|
153
|
+
|
|
154
|
+
// Separate header, footer and dialog content from children.
|
|
155
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
156
|
+
const [[headerChild], [footerChild], content] = useMemo(() => partitionMulti(Children.toArray(children), [isHeader, isFooter]), [children]);
|
|
157
|
+
const headerChildProps = headerChild?.props;
|
|
158
|
+
const headerChildContent = headerChildProps?.children;
|
|
159
|
+
const footerChildProps = footerChild?.props;
|
|
160
|
+
const footerChildContent = footerChildProps?.children;
|
|
161
|
+
|
|
162
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
163
|
+
const clickAwayRefs = useRef([wrapperRef]);
|
|
164
|
+
|
|
165
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
166
|
+
const rootRef = useRef(null);
|
|
167
|
+
|
|
168
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
169
|
+
const isVisible = useTransitionVisibility(rootRef, Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange);
|
|
170
|
+
const shouldPreventCloseOnClickAway = preventAutoClose || preventCloseOnClick;
|
|
171
|
+
return isOpen || isVisible ? /*#__PURE__*/React__default.createElement(Portal, null, /*#__PURE__*/React__default.createElement("div", _extends({
|
|
172
|
+
ref: mergeRefs(rootRef, ref)
|
|
173
|
+
}, forwardedProps, {
|
|
174
|
+
className: classNames(className, handleBasicClasses({
|
|
175
|
+
isHidden: !isOpen,
|
|
176
|
+
isLoading,
|
|
177
|
+
isShown: isOpen || isVisible,
|
|
178
|
+
prefix: CLASSNAME,
|
|
179
|
+
size
|
|
180
|
+
})),
|
|
181
|
+
style: {
|
|
182
|
+
zIndex
|
|
183
|
+
}
|
|
184
|
+
}), /*#__PURE__*/React__default.createElement("div", {
|
|
185
|
+
className: `${CLASSNAME}__overlay`
|
|
186
|
+
}), /*#__PURE__*/React__default.createElement(HeadingLevelProvider, {
|
|
187
|
+
level: 2
|
|
188
|
+
}, /*#__PURE__*/React__default.createElement(ThemeProvider, {
|
|
189
|
+
value: undefined
|
|
190
|
+
}, /*#__PURE__*/React__default.createElement("div", _extends({
|
|
191
|
+
className: `${CLASSNAME}__container`,
|
|
192
|
+
role: "dialog",
|
|
193
|
+
"aria-modal": "true"
|
|
194
|
+
}, dialogProps), /*#__PURE__*/React__default.createElement(ClickAwayProvider, {
|
|
195
|
+
callback: !shouldPreventCloseOnClickAway && onClose,
|
|
196
|
+
childrenRefs: clickAwayRefs,
|
|
197
|
+
parentRef: rootRef
|
|
198
|
+
}, /*#__PURE__*/React__default.createElement("section", {
|
|
199
|
+
className: `${CLASSNAME}__wrapper`,
|
|
200
|
+
ref: wrapperRef
|
|
201
|
+
}, (header || headerChildContent) && /*#__PURE__*/React__default.createElement("header", _extends({}, headerChildProps, {
|
|
202
|
+
className: classNames(`${CLASSNAME}__header`, (forceHeaderDivider || hasTopIntersection) && `${CLASSNAME}__header--has-divider`, headerChildProps?.className)
|
|
203
|
+
}), header, headerChildContent), /*#__PURE__*/React__default.createElement("div", {
|
|
204
|
+
ref: mergeRefs(contentRef, localContentRef),
|
|
205
|
+
className: `${CLASSNAME}__content`
|
|
206
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
|
207
|
+
className: `${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--top`,
|
|
208
|
+
ref: setSentinelTop
|
|
209
|
+
}), content, /*#__PURE__*/React__default.createElement("div", {
|
|
210
|
+
className: `${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--bottom`,
|
|
211
|
+
ref: setSentinelBottom
|
|
212
|
+
})), (footer || footerChildContent) && /*#__PURE__*/React__default.createElement("footer", _extends({}, footerChildProps, {
|
|
213
|
+
className: classNames(`${CLASSNAME}__footer`, (forceFooterDivider || hasBottomIntersection) && `${CLASSNAME}__footer--has-divider`, footerChildProps?.className)
|
|
214
|
+
}), footer, footerChildContent), isLoading && /*#__PURE__*/React__default.createElement("div", {
|
|
215
|
+
className: `${CLASSNAME}__progress-overlay`
|
|
216
|
+
}, /*#__PURE__*/React__default.createElement(Progress, {
|
|
217
|
+
variant: ProgressVariant.circular
|
|
218
|
+
}))))))))) : null;
|
|
219
|
+
});
|
|
220
|
+
Dialog.displayName = COMPONENT_NAME;
|
|
221
|
+
Dialog.className = CLASSNAME;
|
|
222
|
+
Dialog.defaultProps = DEFAULT_PROPS;
|
|
223
|
+
|
|
224
|
+
export { Dialog };
|
|
225
|
+
//# sourceMappingURL=bba7d4c4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bba7d4c4.js","sources":["../../src/hooks/useIntersectionObserver.tsx","../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type Intersections<T> = Map<T, IntersectionObserverEntry>;\n\n/**\n * Convenient hook to create interaction observers.\n *\n * @param elements Elements to observe.\n * @param options IntersectionObserver options.\n * @return Map of intersections.\n */\nexport function useIntersectionObserver<T extends Element>(\n elements: Array<T | null | undefined>,\n options?: IntersectionObserverInit,\n): Intersections<T> {\n const [intersections, setIntersections] = useState<Intersections<T>>(() => new Map());\n\n useEffect(\n () => {\n if (elements.length < 1 || !elements.some(Boolean)) {\n return undefined;\n }\n\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n intersections.set(entry.target as T, entry);\n }\n setIntersections(new Map(intersections));\n }, options);\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n return () => observer.disconnect();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...elements],\n );\n\n return intersections;\n}\n","import React, { Children, ReactElement, ReactNode, Ref, RefObject, useMemo, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { HeadingLevelProvider, Progress, ProgressVariant, Size } from '@lumx/react';\n\nimport { DIALOG_TRANSITION_DURATION, DOCUMENT } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useIntersectionObserver } from '@lumx/react/hooks/useIntersectionObserver';\n\nimport { GenericProps, isComponent } from '@lumx/react/utils/type';\nimport { partitionMulti } from '@lumx/react/utils/partitionMulti';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\nimport { useTransitionVisibility } from '@lumx/react/hooks/useTransitionVisibility';\nimport { ThemeProvider } from '@lumx/react/utils/theme/ThemeContext';\n\nimport { Portal } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface DialogProps extends GenericProps {\n /** Footer content. */\n footer?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceFooterDivider?: boolean;\n /** Header content. */\n header?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceHeaderDivider?: boolean;\n /** Whether the indefinite progress indicator over the dialog content is displayed or not. */\n isLoading?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the parent element that triggered modal opening (will get back focus on close). */\n parentElement?: RefObject<HTMLElement>;\n /** Reference to the dialog content element. */\n contentRef?: Ref<HTMLDivElement>;\n /** Reference to the of the element that should get the focus when the dialogs opens. By default, the first child will take focus. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Whether to keep the dialog open on escape press. */\n preventCloseOnEscape?: boolean;\n /** Whether to keep the dialog open on clickaway. */\n preventCloseOnClick?: boolean;\n /** Size variant. */\n size?: DialogSizes;\n /** Z-axis position. */\n zIndex?: number;\n /** Z-axis position. */\n dialogProps?: GenericProps;\n /** On close callback. */\n onClose?(): void;\n /** Callback called when the open animation starts and the close animation finishes. */\n onVisibilityChange?(isVisible: boolean): void;\n /** whether to disable the scroll on the body or not */\n disableBodyScroll?: boolean;\n /** Children */\n children?: React.ReactNode;\n}\n\nexport type DialogSizes = Extract<Size, 'tiny' | 'regular' | 'big' | 'huge'>;\n\nconst isHeader = isComponent('header');\nconst isFooter = isComponent('footer');\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Dialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.big,\n disableBodyScroll: true,\n};\n\n/**\n * Dialog component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Dialog = forwardRef<DialogProps, HTMLDivElement>((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n const {\n children,\n className,\n header,\n focusElement,\n forceFooterDivider,\n forceHeaderDivider,\n footer,\n isLoading,\n isOpen,\n onClose,\n parentElement,\n contentRef,\n preventAutoClose,\n size = DEFAULT_PROPS.size,\n zIndex,\n dialogProps,\n onVisibilityChange,\n disableBodyScroll = DEFAULT_PROPS.disableBodyScroll,\n preventCloseOnClick,\n preventCloseOnEscape,\n ...forwardedProps\n } = props;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const previousOpen = React.useRef(isOpen);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (isOpen !== previousOpen.current) {\n previousOpen.current = isOpen;\n\n // Focus the parent element on close.\n if (!isOpen && parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n }, [isOpen, parentElement]);\n\n const shouldPreventCloseOnEscape = preventAutoClose || preventCloseOnEscape;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(onClose, isOpen && !shouldPreventCloseOnEscape);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n /**\n * Since the `contentRef` comes from the parent and is optional,\n * we need to create a stable contentRef that will always be available.\n */\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const localContentRef = useRef<HTMLDivElement>(null);\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(isOpen && wrapperRef.current, focusElement?.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(disableBodyScroll && isOpen && localContentRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelTop, setSentinelTop] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelBottom, setSentinelBottom] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {\n threshold: [0, 1],\n });\n\n const hasTopIntersection = sentinelTop && !(intersections.get(sentinelTop)?.isIntersecting ?? true);\n const hasBottomIntersection = sentinelBottom && !(intersections.get(sentinelBottom)?.isIntersecting ?? true);\n\n // Separate header, footer and dialog content from children.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [[headerChild], [footerChild], content] = useMemo(\n () => partitionMulti(Children.toArray(children), [isHeader, isFooter]),\n [children],\n );\n const headerChildProps = (headerChild as ReactElement)?.props;\n const headerChildContent = headerChildProps?.children;\n const footerChildProps = (footerChild as ReactElement)?.props;\n const footerChildContent = footerChildProps?.children;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const rootRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useTransitionVisibility(rootRef, Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange);\n\n const shouldPreventCloseOnClickAway = preventAutoClose || preventCloseOnClick;\n\n return isOpen || isVisible ? (\n <Portal>\n <div\n ref={mergeRefs(rootRef, ref)}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n isHidden: !isOpen,\n isLoading,\n isShown: isOpen || isVisible,\n prefix: CLASSNAME,\n size,\n }),\n )}\n style={{ zIndex }}\n >\n <div className={`${CLASSNAME}__overlay`} />\n\n <HeadingLevelProvider level={2}>\n <ThemeProvider value={undefined}>\n <div className={`${CLASSNAME}__container`} role=\"dialog\" aria-modal=\"true\" {...dialogProps}>\n <ClickAwayProvider\n callback={!shouldPreventCloseOnClickAway && onClose}\n childrenRefs={clickAwayRefs}\n parentRef={rootRef}\n >\n <section className={`${CLASSNAME}__wrapper`} ref={wrapperRef}>\n {(header || headerChildContent) && (\n <header\n {...headerChildProps}\n className={classNames(\n `${CLASSNAME}__header`,\n (forceHeaderDivider || hasTopIntersection) &&\n `${CLASSNAME}__header--has-divider`,\n headerChildProps?.className,\n )}\n >\n {header}\n {headerChildContent}\n </header>\n )}\n\n <div\n ref={mergeRefs(contentRef, localContentRef)}\n className={`${CLASSNAME}__content`}\n >\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--top`}\n ref={setSentinelTop}\n />\n\n {content}\n\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--bottom`}\n ref={setSentinelBottom}\n />\n </div>\n\n {(footer || footerChildContent) && (\n <footer\n {...footerChildProps}\n className={classNames(\n `${CLASSNAME}__footer`,\n (forceFooterDivider || hasBottomIntersection) &&\n `${CLASSNAME}__footer--has-divider`,\n footerChildProps?.className,\n )}\n >\n {footer}\n {footerChildContent}\n </footer>\n )}\n\n {isLoading && (\n <div className={`${CLASSNAME}__progress-overlay`}>\n <Progress variant={ProgressVariant.circular} />\n </div>\n )}\n </section>\n </ClickAwayProvider>\n </div>\n </ThemeProvider>\n </HeadingLevelProvider>\n </div>\n </Portal>\n ) : null;\n});\nDialog.displayName = COMPONENT_NAME;\nDialog.className = CLASSNAME;\nDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["useIntersectionObserver","elements","options","intersections","setIntersections","useState","Map","useEffect","length","some","Boolean","undefined","observer","IntersectionObserver","entries","entry","set","target","element","observe","disconnect","isHeader","isComponent","isFooter","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","big","disableBodyScroll","Dialog","forwardRef","props","ref","DOCUMENT","children","className","header","focusElement","forceFooterDivider","forceHeaderDivider","footer","isLoading","isOpen","onClose","parentElement","contentRef","preventAutoClose","zIndex","dialogProps","onVisibilityChange","preventCloseOnClick","preventCloseOnEscape","forwardedProps","previousOpen","React","useRef","current","focus","shouldPreventCloseOnEscape","useCallbackOnEscape","wrapperRef","localContentRef","useFocusTrap","useDisableBodyScroll","sentinelTop","setSentinelTop","sentinelBottom","setSentinelBottom","threshold","hasTopIntersection","get","isIntersecting","hasBottomIntersection","headerChild","footerChild","content","useMemo","partitionMulti","Children","toArray","headerChildProps","headerChildContent","footerChildProps","footerChildContent","clickAwayRefs","rootRef","isVisible","useTransitionVisibility","DIALOG_TRANSITION_DURATION","shouldPreventCloseOnClickAway","createElement","Portal","_extends","mergeRefs","classNames","handleBasicClasses","isHidden","isShown","prefix","style","HeadingLevelProvider","level","ThemeProvider","value","role","ClickAwayProvider","callback","childrenRefs","parentRef","Progress","variant","ProgressVariant","circular","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { m as getRootClassName, c as Size, n as forwardRef, b as Theme, _ as _extends, l as classNames, i as AspectRatio } from './d3321a86.js';
|
|
2
|
+
import { h as handleBasicClasses } from './4ceaf17c.js';
|
|
3
|
+
import { u as useTheme } from './3181f000.js';
|
|
4
|
+
import { T as Thumbnail } from './714809cc.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Avatar sizes.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Defines the props of the component.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Component display name.
|
|
16
|
+
*/
|
|
17
|
+
const COMPONENT_NAME = 'Avatar';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Component default class name and class prefix.
|
|
21
|
+
*/
|
|
22
|
+
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Component default props.
|
|
26
|
+
*/
|
|
27
|
+
const DEFAULT_PROPS = {
|
|
28
|
+
size: Size.m
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Avatar component.
|
|
33
|
+
*
|
|
34
|
+
* @param props Component props.
|
|
35
|
+
* @param ref Component ref.
|
|
36
|
+
* @return React element.
|
|
37
|
+
*/
|
|
38
|
+
const Avatar = forwardRef((props, ref) => {
|
|
39
|
+
const defaultTheme = useTheme() || Theme.light;
|
|
40
|
+
const {
|
|
41
|
+
actions,
|
|
42
|
+
alt,
|
|
43
|
+
badge,
|
|
44
|
+
className,
|
|
45
|
+
image,
|
|
46
|
+
linkProps,
|
|
47
|
+
linkAs,
|
|
48
|
+
onClick,
|
|
49
|
+
onKeyPress,
|
|
50
|
+
size = DEFAULT_PROPS.size,
|
|
51
|
+
theme = defaultTheme,
|
|
52
|
+
thumbnailProps,
|
|
53
|
+
...forwardedProps
|
|
54
|
+
} = props;
|
|
55
|
+
return /*#__PURE__*/React.createElement("div", _extends({
|
|
56
|
+
ref: ref
|
|
57
|
+
}, forwardedProps, {
|
|
58
|
+
className: classNames(className, handleBasicClasses({
|
|
59
|
+
prefix: CLASSNAME,
|
|
60
|
+
size,
|
|
61
|
+
theme
|
|
62
|
+
}))
|
|
63
|
+
}), /*#__PURE__*/React.createElement(Thumbnail, _extends({
|
|
64
|
+
linkProps: linkProps,
|
|
65
|
+
linkAs: linkAs,
|
|
66
|
+
className: `${CLASSNAME}__thumbnail`,
|
|
67
|
+
onClick: onClick,
|
|
68
|
+
onKeyPress: onKeyPress
|
|
69
|
+
}, thumbnailProps, {
|
|
70
|
+
aspectRatio: AspectRatio.square,
|
|
71
|
+
size: size,
|
|
72
|
+
image: image,
|
|
73
|
+
alt: alt,
|
|
74
|
+
theme: theme
|
|
75
|
+
})), actions && /*#__PURE__*/React.createElement("div", {
|
|
76
|
+
className: `${CLASSNAME}__actions`
|
|
77
|
+
}, actions), badge && /*#__PURE__*/React.createElement("div", {
|
|
78
|
+
className: `${CLASSNAME}__badge`
|
|
79
|
+
}, badge));
|
|
80
|
+
});
|
|
81
|
+
Avatar.displayName = COMPONENT_NAME;
|
|
82
|
+
Avatar.className = CLASSNAME;
|
|
83
|
+
Avatar.defaultProps = DEFAULT_PROPS;
|
|
84
|
+
|
|
85
|
+
export { Avatar };
|
|
86
|
+
//# sourceMappingURL=bc4cb4c0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bc4cb4c0.js","sources":["../../src/components/avatar/Avatar.tsx"],"sourcesContent":["import { KeyboardEventHandler, MouseEventHandler, ReactElement, ReactNode } from 'react';\n\nimport classNames from 'classnames';\n\nimport { AspectRatio, Size, Theme, Thumbnail, ThumbnailProps } from '@lumx/react';\n\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\n/**\n * Avatar sizes.\n */\nexport type AvatarSize = Extract<Size, 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface AvatarProps extends GenericProps, HasTheme {\n /** Action toolbar content. */\n actions?: ReactNode;\n /** Image alternative text. */\n alt: string;\n /** Badge. */\n badge?: ReactElement;\n /** Image URL. */\n image: string;\n /** Props to pass to the link wrapping the thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n /** On click callback. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** On key press callback. */\n onKeyPress?: KeyboardEventHandler<HTMLDivElement>;\n /** Size variant. */\n size?: AvatarSize;\n /** Props to pass to the thumbnail (minus those already set by the Avatar props). */\n thumbnailProps?: Omit<\n ThumbnailProps,\n 'image' | 'alt' | 'size' | 'theme' | 'align' | 'fillHeight' | 'variant' | 'aspectRatio'\n >;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Avatar';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<AvatarProps> = {\n size: Size.m,\n};\n\n/**\n * Avatar component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Avatar = forwardRef<AvatarProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n actions,\n alt,\n badge,\n className,\n image,\n linkProps,\n linkAs,\n onClick,\n onKeyPress,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n thumbnailProps,\n ...forwardedProps\n } = props;\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, size, theme }))}\n >\n <Thumbnail\n linkProps={linkProps}\n linkAs={linkAs}\n className={`${CLASSNAME}__thumbnail`}\n onClick={onClick}\n onKeyPress={onKeyPress}\n {...thumbnailProps}\n aspectRatio={AspectRatio.square}\n size={size}\n image={image}\n alt={alt}\n theme={theme}\n />\n {actions && <div className={`${CLASSNAME}__actions`}>{actions}</div>}\n {badge && <div className={`${CLASSNAME}__badge`}>{badge}</div>}\n </div>\n );\n});\nAvatar.displayName = COMPONENT_NAME;\nAvatar.className = CLASSNAME;\nAvatar.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","m","Avatar","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","actions","alt","badge","className","image","linkProps","linkAs","onClick","onKeyPress","theme","thumbnailProps","forwardedProps","React","createElement","_extends","classNames","handleBasicClasses","prefix","Thumbnail","aspectRatio","AspectRatio","square","displayName","defaultProps"],"mappings":";;;;;AAWA;AACA;AACA;;AAGA;AACA;AACA;;AA2BA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,QAAQ,CAAA;;AAE/B;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAmC,GAAG;EACxCC,IAAI,EAAEC,IAAI,CAACC,CAAAA;AACf,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGC,UAAU,CAA8B,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC1E,MAAMC,YAAY,GAAGC,QAAQ,EAAE,IAAIC,KAAK,CAACC,KAAK,CAAA;EAC9C,MAAM;IACFC,OAAO;IACPC,GAAG;IACHC,KAAK;IACLC,SAAS;IACTC,KAAK;IACLC,SAAS;IACTC,MAAM;IACNC,OAAO;IACPC,UAAU;IACVnB,IAAI,GAAGD,aAAa,CAACC,IAAI;AACzBoB,IAAAA,KAAK,GAAGb,YAAY;IACpBc,cAAc;IACd,GAAGC,cAAAA;AACP,GAAC,GAAGjB,KAAK,CAAA;AAET,EAAA,oBACIkB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAAC,QAAA,CAAA;AACInB,IAAAA,GAAG,EAAEA,GAAAA;AAAI,GAAA,EACLgB,cAAc,EAAA;AAClBR,IAAAA,SAAS,EAAEY,UAAU,CAACZ,SAAS,EAAEa,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAE/B,SAAS;MAAEG,IAAI;AAAEoB,MAAAA,KAAAA;AAAM,KAAC,CAAC,CAAA;AAAE,GAAA,CAAA,eAEzFG,KAAA,CAAAC,aAAA,CAACK,SAAS,EAAAJ,QAAA,CAAA;AACNT,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,MAAM,EAAEA,MAAO;IACfH,SAAS,EAAE,CAAGjB,EAAAA,SAAS,CAAc,WAAA,CAAA;AACrCqB,IAAAA,OAAO,EAAEA,OAAQ;AACjBC,IAAAA,UAAU,EAAEA,UAAAA;AAAW,GAAA,EACnBE,cAAc,EAAA;IAClBS,WAAW,EAAEC,WAAW,CAACC,MAAO;AAChChC,IAAAA,IAAI,EAAEA,IAAK;AACXe,IAAAA,KAAK,EAAEA,KAAM;AACbH,IAAAA,GAAG,EAAEA,GAAI;AACTQ,IAAAA,KAAK,EAAEA,KAAAA;AAAM,GAAA,CAChB,CAAC,EACDT,OAAO,iBAAIY,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKV,SAAS,EAAE,GAAGjB,SAAS,CAAA,SAAA,CAAA;AAAY,GAAA,EAAEc,OAAa,CAAC,EACnEE,KAAK,iBAAIU,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKV,SAAS,EAAE,GAAGjB,SAAS,CAAA,OAAA,CAAA;GAAYgB,EAAAA,KAAW,CAC5D,CAAC,CAAA;AAEd,CAAC,EAAC;AACFV,MAAM,CAAC8B,WAAW,GAAGrC,cAAc,CAAA;AACnCO,MAAM,CAACW,SAAS,GAAGjB,SAAS,CAAA;AAC5BM,MAAM,CAAC+B,YAAY,GAAGnC,aAAa;;;;"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { useEffect, useContext, useMemo, useRef, createContext } from 'react';
|
|
2
|
+
import isEmpty from 'lodash/isEmpty';
|
|
3
|
+
|
|
4
|
+
const EVENT_TYPES = ['mousedown', 'touchstart'];
|
|
5
|
+
function isClickAway(targets, refs) {
|
|
6
|
+
// The targets elements are not contained in any of the listed element references.
|
|
7
|
+
return !refs.some(ref => targets.some(target => ref?.current?.contains(target)));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Listen to clicks away from the given elements and callback the passed in function.
|
|
11
|
+
*
|
|
12
|
+
* Warning: If you need to detect click away on nested React portals, please use the `ClickAwayProvider` component.
|
|
13
|
+
*/
|
|
14
|
+
function useClickAway({
|
|
15
|
+
callback,
|
|
16
|
+
childrenRefs
|
|
17
|
+
}) {
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const {
|
|
20
|
+
current: currentRefs
|
|
21
|
+
} = childrenRefs;
|
|
22
|
+
if (!callback || !currentRefs || isEmpty(currentRefs)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const listener = evt => {
|
|
26
|
+
const targets = [evt.composedPath?.()[0], evt.target];
|
|
27
|
+
if (isClickAway(targets, currentRefs)) {
|
|
28
|
+
callback(evt);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
EVENT_TYPES.forEach(evtType => document.addEventListener(evtType, listener));
|
|
32
|
+
return () => {
|
|
33
|
+
EVENT_TYPES.forEach(evtType => document.removeEventListener(evtType, listener));
|
|
34
|
+
};
|
|
35
|
+
}, [callback, childrenRefs]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const ClickAwayAncestorContext = /*#__PURE__*/createContext(null);
|
|
39
|
+
/**
|
|
40
|
+
* Component combining the `useClickAway` hook with a React context to hook into the React component tree and make sure
|
|
41
|
+
* we take into account both the DOM tree and the React tree to detect click away.
|
|
42
|
+
*
|
|
43
|
+
* @return the react component.
|
|
44
|
+
*/
|
|
45
|
+
const ClickAwayProvider = ({
|
|
46
|
+
children,
|
|
47
|
+
callback,
|
|
48
|
+
childrenRefs,
|
|
49
|
+
parentRef
|
|
50
|
+
}) => {
|
|
51
|
+
const parentContext = useContext(ClickAwayAncestorContext);
|
|
52
|
+
const currentContext = useMemo(() => {
|
|
53
|
+
const context = {
|
|
54
|
+
childrenRefs: [],
|
|
55
|
+
/**
|
|
56
|
+
* Add element refs to the current context and propagate to the parent context.
|
|
57
|
+
*/
|
|
58
|
+
addRefs(...newChildrenRefs) {
|
|
59
|
+
// Add element refs that should be considered as inside the click away context.
|
|
60
|
+
context.childrenRefs.push(...newChildrenRefs);
|
|
61
|
+
if (parentContext) {
|
|
62
|
+
// Also add then to the parent context
|
|
63
|
+
parentContext.addRefs(...newChildrenRefs);
|
|
64
|
+
if (parentRef) {
|
|
65
|
+
// The parent element is also considered as inside the parent click away context but not inside the current context
|
|
66
|
+
parentContext.addRefs(parentRef);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
return context;
|
|
72
|
+
}, [parentContext, parentRef]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const {
|
|
75
|
+
current: currentRefs
|
|
76
|
+
} = childrenRefs;
|
|
77
|
+
if (!currentRefs) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
currentContext.addRefs(...currentRefs);
|
|
81
|
+
}, [currentContext, childrenRefs]);
|
|
82
|
+
useClickAway({
|
|
83
|
+
callback,
|
|
84
|
+
childrenRefs: useRef(currentContext.childrenRefs)
|
|
85
|
+
});
|
|
86
|
+
return /*#__PURE__*/React.createElement(ClickAwayAncestorContext.Provider, {
|
|
87
|
+
value: currentContext
|
|
88
|
+
}, children);
|
|
89
|
+
};
|
|
90
|
+
ClickAwayProvider.displayName = 'ClickAwayProvider';
|
|
91
|
+
|
|
92
|
+
export { ClickAwayProvider as C };
|
|
93
|
+
//# sourceMappingURL=bcce6ceb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bcce6ceb.js","sources":["../../src/hooks/useClickAway.tsx","../../src/utils/ClickAwayProvider/ClickAwayProvider.tsx"],"sourcesContent":["import { RefObject, useEffect } from 'react';\n\nimport { Falsy } from '@lumx/react/utils/type';\n\nimport isEmpty from 'lodash/isEmpty';\n\nconst EVENT_TYPES = ['mousedown', 'touchstart'];\n\nfunction isClickAway(targets: HTMLElement[], refs: Array<RefObject<HTMLElement>>): boolean {\n // The targets elements are not contained in any of the listed element references.\n return !refs.some((ref) => targets.some((target) => ref?.current?.contains(target)));\n}\n\nexport interface ClickAwayParameters {\n /**\n * A callback function to call when the user clicks away from the elements.\n */\n callback: EventListener | Falsy;\n /**\n * Elements considered within the click away context (clicking outside them will trigger the click away callback).\n */\n childrenRefs: RefObject<Array<RefObject<HTMLElement>>>;\n}\n\n/**\n * Listen to clicks away from the given elements and callback the passed in function.\n *\n * Warning: If you need to detect click away on nested React portals, please use the `ClickAwayProvider` component.\n */\nexport function useClickAway({ callback, childrenRefs }: ClickAwayParameters): void {\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!callback || !currentRefs || isEmpty(currentRefs)) {\n return undefined;\n }\n const listener: EventListener = (evt) => {\n const targets = [evt.composedPath?.()[0], evt.target] as HTMLElement[];\n if (isClickAway(targets, currentRefs)) {\n callback(evt);\n }\n };\n\n EVENT_TYPES.forEach((evtType) => document.addEventListener(evtType, listener));\n return () => {\n EVENT_TYPES.forEach((evtType) => document.removeEventListener(evtType, listener));\n };\n }, [callback, childrenRefs]);\n}\n","import { createContext, RefObject, useContext, useEffect, useMemo, useRef } from 'react';\nimport { ClickAwayParameters, useClickAway } from '@lumx/react/hooks/useClickAway';\n\ninterface ContextValue {\n childrenRefs: Array<RefObject<HTMLElement>>;\n addRefs(...newChildrenRefs: Array<RefObject<HTMLElement>>): void;\n}\n\nconst ClickAwayAncestorContext = createContext<ContextValue | null>(null);\n\ninterface ClickAwayProviderProps extends ClickAwayParameters {\n /**\n * (Optional) Element that should be considered as part of the parent\n */\n parentRef?: RefObject<HTMLElement>;\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Component combining the `useClickAway` hook with a React context to hook into the React component tree and make sure\n * we take into account both the DOM tree and the React tree to detect click away.\n *\n * @return the react component.\n */\nexport const ClickAwayProvider: React.FC<ClickAwayProviderProps> = ({\n children,\n callback,\n childrenRefs,\n parentRef,\n}) => {\n const parentContext = useContext(ClickAwayAncestorContext);\n const currentContext = useMemo(() => {\n const context: ContextValue = {\n childrenRefs: [],\n /**\n * Add element refs to the current context and propagate to the parent context.\n */\n addRefs(...newChildrenRefs) {\n // Add element refs that should be considered as inside the click away context.\n context.childrenRefs.push(...newChildrenRefs);\n\n if (parentContext) {\n // Also add then to the parent context\n parentContext.addRefs(...newChildrenRefs);\n if (parentRef) {\n // The parent element is also considered as inside the parent click away context but not inside the current context\n parentContext.addRefs(parentRef);\n }\n }\n },\n };\n return context;\n }, [parentContext, parentRef]);\n\n useEffect(() => {\n const { current: currentRefs } = childrenRefs;\n if (!currentRefs) {\n return;\n }\n currentContext.addRefs(...currentRefs);\n }, [currentContext, childrenRefs]);\n\n useClickAway({ callback, childrenRefs: useRef(currentContext.childrenRefs) });\n return <ClickAwayAncestorContext.Provider value={currentContext}>{children}</ClickAwayAncestorContext.Provider>;\n};\nClickAwayProvider.displayName = 'ClickAwayProvider';\n"],"names":["EVENT_TYPES","isClickAway","targets","refs","some","ref","target","current","contains","useClickAway","callback","childrenRefs","useEffect","currentRefs","isEmpty","undefined","listener","evt","composedPath","forEach","evtType","document","addEventListener","removeEventListener","ClickAwayAncestorContext","createContext","ClickAwayProvider","children","parentRef","parentContext","useContext","currentContext","useMemo","context","addRefs","newChildrenRefs","push","useRef","React","createElement","Provider","value","displayName"],"mappings":"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"}
|