reshaped 3.8.0-canary.2 → 3.8.0-canary.20
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/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +2 -1
- package/dist/bundle.js +11 -11
- package/dist/components/Accordion/AccordionControlled.js +1 -0
- package/dist/components/Actionable/Actionable.js +17 -3
- package/dist/components/Actionable/Actionable.module.css +1 -1
- package/dist/components/Actionable/Actionable.types.d.ts +15 -3
- package/dist/components/Actionable/tests/Actionable.stories.d.ts +13 -1
- package/dist/components/Actionable/tests/Actionable.stories.js +127 -7
- package/dist/components/Alert/tests/Alert.stories.d.ts +6 -5
- package/dist/components/Alert/tests/Alert.stories.js +15 -2
- package/dist/components/Autocomplete/Autocomplete.js +2 -2
- package/dist/components/Autocomplete/Autocomplete.types.d.ts +1 -1
- package/dist/components/Badge/Badge.module.css +1 -1
- package/dist/components/Badge/tests/Badge.stories.d.ts +5 -0
- package/dist/components/Badge/tests/Badge.stories.js +34 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.js +1 -0
- package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.d.ts +8 -4
- package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.js +57 -1
- package/dist/components/Button/Button.js +2 -2
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Button/Button.types.d.ts +1 -1
- package/dist/components/Button/tests/Button.stories.d.ts +54 -12
- package/dist/components/Button/tests/Button.stories.js +725 -588
- package/dist/components/Calendar/CalendarMonth.js +1 -0
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/Card.module.css +1 -1
- package/dist/components/Card/tests/Card.stories.d.ts +29 -7
- package/dist/components/Card/tests/Card.stories.js +110 -65
- package/dist/components/Carousel/Carousel.js +1 -0
- package/dist/components/Carousel/Carousel.module.css +1 -1
- package/dist/components/Checkbox/Checkbox.module.css +1 -1
- package/dist/components/Checkbox/tests/Checkbox.stories.d.ts +20 -4
- package/dist/components/Checkbox/tests/Checkbox.stories.js +150 -79
- package/dist/components/CheckboxGroup/tests/CheckboxGroup.stories.d.ts +9 -2
- package/dist/components/CheckboxGroup/tests/CheckboxGroup.stories.js +67 -35
- package/dist/components/Container/tests/Container.stories.d.ts +2 -0
- package/dist/components/Container/tests/Container.stories.js +14 -0
- package/dist/components/ContextMenu/tests/ContextMenu.stories.d.ts +10 -1
- package/dist/components/ContextMenu/tests/ContextMenu.stories.js +57 -13
- package/dist/components/Dismissible/tests/Dismissible.stories.d.ts +5 -0
- package/dist/components/Dismissible/tests/Dismissible.stories.js +30 -1
- package/dist/components/Divider/tests/Divider.stories.d.ts +8 -3
- package/dist/components/Divider/tests/Divider.stories.js +71 -41
- package/dist/components/DropdownMenu/DropdownMenu.js +4 -4
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +2 -2
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.d.ts +35 -6
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.js +222 -115
- package/dist/components/FileUpload/FileUpload.module.css +1 -1
- package/dist/components/Flyout/Flyout.module.css +1 -1
- package/dist/components/Flyout/Flyout.types.d.ts +7 -7
- package/dist/components/Flyout/FlyoutContent.js +4 -1
- package/dist/components/Flyout/FlyoutControlled.js +10 -3
- package/dist/components/Flyout/index.d.ts +1 -1
- package/dist/components/Flyout/tests/Flyout.stories.d.ts +8 -0
- package/dist/components/Flyout/tests/Flyout.stories.js +81 -33
- package/dist/components/Flyout/useFlyout.d.ts +1 -7
- package/dist/components/Flyout/useFlyout.js +5 -1
- package/dist/components/Flyout/utilities/calculatePosition.d.ts +3 -2
- package/dist/components/Flyout/utilities/calculatePosition.js +47 -22
- package/dist/components/Flyout/utilities/flyout.js +3 -2
- package/dist/components/Flyout/utilities/getPositionFallbacks.js +3 -3
- package/dist/components/Flyout/utilities/isFullyVisible.d.ts +0 -2
- package/dist/components/Flyout/utilities/isFullyVisible.js +5 -7
- package/dist/components/FormControl/FormControl.context.d.ts +1 -1
- package/dist/components/FormControl/tests/FormControl.stories.d.ts +2 -0
- package/dist/components/FormControl/tests/FormControl.stories.js +35 -0
- package/dist/components/Hidden/tests/Hidden.stories.d.ts +2 -0
- package/dist/components/Hidden/tests/Hidden.stories.js +9 -0
- package/dist/components/HiddenVisually/tests/HiddenVisually.stories.d.ts +2 -0
- package/dist/components/HiddenVisually/tests/HiddenVisually.stories.js +9 -0
- package/dist/components/Hotkey/tests/Hotkey.stories.d.ts +2 -0
- package/dist/components/Hotkey/tests/Hotkey.stories.js +15 -0
- package/dist/components/Icon/Icon.js +2 -2
- package/dist/components/Icon/Icon.types.d.ts +1 -1
- package/dist/components/Icon/tests/Icon.stories.d.ts +3 -0
- package/dist/components/Icon/tests/Icon.stories.js +29 -1
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/Link/Link.js +2 -2
- package/dist/components/Link/Link.types.d.ts +1 -1
- package/dist/components/Link/tests/Link.stories.d.ts +29 -6
- package/dist/components/Link/tests/Link.stories.js +141 -58
- package/dist/components/Loader/tests/Loader.stories.d.ts +11 -2
- package/dist/components/Loader/tests/Loader.stories.js +52 -25
- package/dist/components/MenuItem/MenuItem.js +2 -2
- package/dist/components/MenuItem/MenuItem.module.css +1 -1
- package/dist/components/MenuItem/MenuItem.types.d.ts +1 -1
- package/dist/components/MenuItem/tests/MenuItem.stories.d.ts +37 -7
- package/dist/components/MenuItem/tests/MenuItem.stories.js +218 -112
- package/dist/components/Modal/Modal.js +1 -1
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Modal/tests/Modal.stories.d.ts +49 -10
- package/dist/components/Modal/tests/Modal.stories.js +350 -210
- package/dist/components/Overlay/Overlay.js +2 -1
- package/dist/components/Overlay/tests/Overlay.stories.d.ts +15 -1
- package/dist/components/Overlay/tests/Overlay.stories.js +135 -1
- package/dist/components/Pagination/tests/Pagination.stories.d.ts +14 -1
- package/dist/components/Pagination/tests/Pagination.stories.js +93 -15
- package/dist/components/PinField/tests/PinField.stories.d.ts +1 -1
- package/dist/components/PinField/tests/PinField.stories.js +1 -1
- package/dist/components/Popover/Popover.js +2 -2
- package/dist/components/Popover/Popover.module.css +1 -1
- package/dist/components/Popover/Popover.types.d.ts +3 -1
- package/dist/components/Progress/tests/Progress.stories.d.ts +19 -4
- package/dist/components/Progress/tests/Progress.stories.js +85 -49
- package/dist/components/Radio/Radio.module.css +1 -1
- package/dist/components/Radio/tests/Radio.stories.d.ts +25 -4
- package/dist/components/Radio/tests/Radio.stories.js +147 -65
- package/dist/components/RadioGroup/tests/RadioGroup.stories.d.ts +9 -2
- package/dist/components/RadioGroup/tests/RadioGroup.stories.js +64 -38
- package/dist/components/Reshaped/Reshaped.css +1 -1
- package/dist/components/Scrim/tests/Scrim.stories.d.ts +10 -2
- package/dist/components/Scrim/tests/Scrim.stories.js +51 -31
- package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
- package/dist/components/Select/Select.d.ts +8 -1
- package/dist/components/Select/Select.js +22 -48
- package/dist/components/Select/Select.module.css +1 -1
- package/dist/components/Select/Select.types.d.ts +83 -38
- package/dist/components/Select/SelectCustom.d.ts +3 -0
- package/dist/components/Select/SelectCustom.js +12 -0
- package/dist/components/Select/SelectCustomControlled.d.ts +4 -0
- package/dist/components/Select/SelectCustomControlled.js +105 -0
- package/dist/components/Select/SelectCustomUncontrolled.d.ts +4 -0
- package/dist/components/Select/SelectCustomUncontrolled.js +18 -0
- package/dist/components/Select/SelectEndContent.d.ts +3 -0
- package/dist/components/Select/SelectEndContent.js +12 -0
- package/dist/components/Select/SelectNative.d.ts +4 -0
- package/dist/components/Select/SelectNative.js +29 -0
- package/dist/components/Select/SelectOption.d.ts +4 -0
- package/dist/components/Select/SelectOption.js +13 -0
- package/dist/components/Select/SelectOptionGroup.d.ts +4 -0
- package/dist/components/Select/SelectOptionGroup.js +9 -0
- package/dist/components/Select/SelectRoot.d.ts +4 -0
- package/dist/components/Select/SelectRoot.js +21 -0
- package/dist/components/Select/SelectStartContent.d.ts +3 -0
- package/dist/components/Select/SelectStartContent.js +20 -0
- package/dist/components/Select/SelectTrigger.d.ts +4 -0
- package/dist/components/Select/SelectTrigger.js +16 -0
- package/dist/components/Select/tests/Select.stories.d.ts +38 -10
- package/dist/components/Select/tests/Select.stories.js +504 -175
- package/dist/components/Skeleton/tests/Skeleton.stories.d.ts +10 -2
- package/dist/components/Skeleton/tests/Skeleton.stories.js +46 -28
- package/dist/components/Slider/Slider.module.css +1 -1
- package/dist/components/Stepper/Stepper.js +2 -2
- package/dist/components/Stepper/Stepper.types.d.ts +2 -0
- package/dist/components/Stepper/tests/Stepper.stories.d.ts +18 -3
- package/dist/components/Stepper/tests/Stepper.stories.js +99 -47
- package/dist/components/Switch/Switch.module.css +1 -1
- package/dist/components/Switch/tests/Switch.stories.d.ts +10 -2
- package/dist/components/Switch/tests/Switch.stories.js +77 -23
- package/dist/components/Switch/tests/Switch.test.stories.d.ts +0 -10
- package/dist/components/Switch/tests/Switch.test.stories.js +0 -68
- package/dist/components/Table/Table.js +5 -3
- package/dist/components/Table/Table.module.css +1 -1
- package/dist/components/Table/tests/Table.stories.d.ts +25 -5
- package/dist/components/Table/tests/Table.stories.js +274 -177
- package/dist/components/Tabs/Tabs.module.css +1 -1
- package/dist/components/Tabs/TabsControlled.js +1 -0
- package/dist/components/Tabs/TabsList.js +3 -20
- package/dist/components/Text/Text.module.css +1 -1
- package/dist/components/TextArea/TextArea.module.css +1 -1
- package/dist/components/TextArea/tests/TextArea.stories.d.ts +41 -9
- package/dist/components/TextArea/tests/TextArea.stories.js +179 -93
- package/dist/components/TextField/TextField.js +11 -3
- package/dist/components/TextField/TextField.module.css +1 -1
- package/dist/components/TextField/TextField.types.d.ts +5 -1
- package/dist/components/TextField/tests/TextField.stories.d.ts +41 -11
- package/dist/components/TextField/tests/TextField.stories.js +209 -129
- package/dist/components/Theme/Theme.module.css +1 -1
- package/dist/components/Timeline/Timeline.js +2 -2
- package/dist/components/Timeline/tests/Timeline.stories.d.ts +10 -2
- package/dist/components/Timeline/tests/Timeline.stories.js +69 -45
- package/dist/components/Toast/ToastContainer.js +1 -0
- package/dist/components/Toast/ToastRegion.js +1 -0
- package/dist/components/Toast/tests/Toast.stories.d.ts +32 -8
- package/dist/components/Toast/tests/Toast.stories.js +111 -37
- package/dist/components/ToggleButton/ToggleButton.types.d.ts +5 -1
- package/dist/components/ToggleButton/ToggleButtonControlled.js +9 -2
- package/dist/components/ToggleButton/tests/ToggleButton.stories.d.ts +4 -0
- package/dist/components/ToggleButton/tests/ToggleButton.stories.js +10 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroup.types.d.ts +10 -0
- package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.js +6 -41
- package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.d.ts +1 -0
- package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.js +17 -0
- package/dist/components/Tooltip/Tooltip.js +1 -1
- package/dist/components/Tooltip/Tooltip.types.d.ts +2 -2
- package/dist/components/Tooltip/tests/Tooltip.stories.d.ts +18 -4
- package/dist/components/Tooltip/tests/Tooltip.stories.js +139 -107
- package/dist/components/View/View.js +11 -4
- package/dist/components/View/View.types.d.ts +1 -1
- package/dist/components/View/tests/View.stories.d.ts +4 -0
- package/dist/components/View/tests/View.stories.js +39 -0
- package/dist/components/_private/Expandable/Expandable.js +3 -1
- package/dist/components/_private/Portal/Portal.js +4 -1
- package/dist/hooks/_private/useIsDismissible.d.ts +1 -0
- package/dist/hooks/_private/useIsDismissible.js +6 -6
- package/dist/hooks/_private/usePrevious.js +1 -0
- package/dist/hooks/tests/useDrag.stories.js +1 -1
- package/dist/{components/Toast/tests/Toast.test.stories.d.ts → hooks/tests/useKeyboardArrowNavigation.stories.d.ts} +4 -5
- package/dist/hooks/tests/useKeyboardArrowNavigation.stories.js +128 -0
- package/dist/hooks/useKeyboardArrowNavigation.d.ts +9 -0
- package/dist/hooks/useKeyboardArrowNavigation.js +62 -0
- package/dist/hooks/useOnClickOutside.js +0 -2
- package/dist/hooks/useScrollLock.js +5 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/styles/resolvers/align/align.css +1 -1
- package/dist/styles/resolvers/aspectRatio/aspectRatio.css +1 -1
- package/dist/styles/resolvers/bleed/bleed.module.css +1 -1
- package/dist/styles/resolvers/justify/justify.css +1 -1
- package/dist/styles/resolvers/maxHeight/maxHeight.module.css +1 -1
- package/dist/styles/resolvers/maxWidth/maxWidth.module.css +1 -1
- package/dist/styles/resolvers/minHeight/minHeight.module.css +1 -1
- package/dist/styles/resolvers/minWidth/minWidth.module.css +1 -1
- package/dist/styles/resolvers/position/position.css +1 -1
- package/dist/styles/resolvers/textAlign/textAlign.css +1 -1
- package/dist/styles/resolvers/width/width.module.css +1 -1
- package/dist/utilities/a11y/focus.d.ts +21 -4
- package/dist/utilities/a11y/focus.js +4 -3
- package/dist/utilities/scroll/disable.js +2 -2
- package/dist/utilities/scroll/index.d.ts +1 -1
- package/dist/utilities/scroll/index.js +1 -1
- package/dist/utilities/scroll/lock.d.ts +1 -2
- package/dist/utilities/scroll/lock.js +16 -15
- package/dist/utilities/scroll/lockSafari.js +1 -0
- package/package.json +195 -201
- package/CHANGELOG-extra.md +0 -3
- package/CHANGELOG.md +0 -57
- package/dist/components/Actionable/tests/Actionable.test.stories.d.ts +0 -32
- package/dist/components/Actionable/tests/Actionable.test.stories.js +0 -130
- package/dist/components/Alert/tests/Alert.test.stories.d.ts +0 -15
- package/dist/components/Alert/tests/Alert.test.stories.js +0 -26
- package/dist/components/Badge/tests/Badge.test.stories.d.ts +0 -20
- package/dist/components/Badge/tests/Badge.test.stories.js +0 -46
- package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.d.ts +0 -23
- package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.js +0 -76
- package/dist/components/Button/tests/Button.test.stories.d.ts +0 -27
- package/dist/components/Button/tests/Button.test.stories.js +0 -112
- package/dist/components/Card/tests/Card.test.stories.d.ts +0 -35
- package/dist/components/Card/tests/Card.test.stories.js +0 -54
- package/dist/components/Checkbox/tests/Checkbox.test.stories.d.ts +0 -25
- package/dist/components/Checkbox/tests/Checkbox.test.stories.js +0 -104
- package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.d.ts +0 -22
- package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.js +0 -78
- package/dist/components/Container/tests/Container.test.stories.d.ts +0 -15
- package/dist/components/Container/tests/Container.test.stories.js +0 -26
- package/dist/components/ContextMenu/tests/ContextMenu.test.stories.d.ts +0 -25
- package/dist/components/ContextMenu/tests/ContextMenu.test.stories.js +0 -53
- package/dist/components/Dismissible/tests/Dismissible.test.stories.d.ts +0 -19
- package/dist/components/Dismissible/tests/Dismissible.test.stories.js +0 -42
- package/dist/components/Divider/tests/Divider.test.stories.d.ts +0 -18
- package/dist/components/Divider/tests/Divider.test.stories.js +0 -47
- package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.d.ts +0 -36
- package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.js +0 -117
- package/dist/components/FormControl/tests/FormControl.test.stories.d.ts +0 -20
- package/dist/components/FormControl/tests/FormControl.test.stories.js +0 -49
- package/dist/components/Hidden/tests/Hidden.test.stories.d.ts +0 -15
- package/dist/components/Hidden/tests/Hidden.test.stories.js +0 -20
- package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.d.ts +0 -15
- package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.js +0 -20
- package/dist/components/Hotkey/tests/Hotkey.test.stories.d.ts +0 -15
- package/dist/components/Hotkey/tests/Hotkey.test.stories.js +0 -26
- package/dist/components/Icon/tests/Icon.test.stories.d.ts +0 -16
- package/dist/components/Icon/tests/Icon.test.stories.js +0 -35
- package/dist/components/Link/tests/Link.test.stories.d.ts +0 -29
- package/dist/components/Link/tests/Link.test.stories.js +0 -87
- package/dist/components/Loader/tests/Loader.test.stories.d.ts +0 -16
- package/dist/components/Loader/tests/Loader.test.stories.js +0 -32
- package/dist/components/MenuItem/tests/MenuItem.test.stories.d.ts +0 -26
- package/dist/components/MenuItem/tests/MenuItem.test.stories.js +0 -100
- package/dist/components/Modal/tests/Modal.test.stories.d.ts +0 -31
- package/dist/components/Modal/tests/Modal.test.stories.js +0 -149
- package/dist/components/Overlay/tests/Overlay.test.stories.d.ts +0 -28
- package/dist/components/Overlay/tests/Overlay.test.stories.js +0 -148
- package/dist/components/Pagination/tests/Pagination.test.stories.d.ts +0 -23
- package/dist/components/Pagination/tests/Pagination.test.stories.js +0 -86
- package/dist/components/Progress/tests/Progress.test.stories.d.ts +0 -16
- package/dist/components/Progress/tests/Progress.test.stories.js +0 -35
- package/dist/components/Radio/tests/Radio.test.stories.d.ts +0 -30
- package/dist/components/Radio/tests/Radio.test.stories.js +0 -118
- package/dist/components/RadioGroup/tests/RadioGroup.test.stories.d.ts +0 -22
- package/dist/components/RadioGroup/tests/RadioGroup.test.stories.js +0 -78
- package/dist/components/Scrim/tests/Scrim.test.stories.d.ts +0 -15
- package/dist/components/Scrim/tests/Scrim.test.stories.js +0 -25
- package/dist/components/Select/tests/Select.test.stories.d.ts +0 -27
- package/dist/components/Select/tests/Select.test.stories.js +0 -132
- package/dist/components/Skeleton/tests/Skeleton.test.stories.d.ts +0 -15
- package/dist/components/Skeleton/tests/Skeleton.test.stories.js +0 -23
- package/dist/components/Stepper/tests/Stepper.test.stories.d.ts +0 -20
- package/dist/components/Stepper/tests/Stepper.test.stories.js +0 -28
- package/dist/components/Table/tests/Table.test.stories.d.ts +0 -24
- package/dist/components/Table/tests/Table.test.stories.js +0 -93
- package/dist/components/TextArea/tests/TextArea.test.stories.d.ts +0 -28
- package/dist/components/TextArea/tests/TextArea.test.stories.js +0 -99
- package/dist/components/TextField/tests/TextField.test.stories.d.ts +0 -28
- package/dist/components/TextField/tests/TextField.test.stories.js +0 -99
- package/dist/components/Timeline/tests/Timeline.test.stories.d.ts +0 -17
- package/dist/components/Timeline/tests/Timeline.test.stories.js +0 -32
- package/dist/components/Toast/tests/Toast.test.stories.js +0 -101
- package/dist/components/Tooltip/tests/Tooltip.test.stories.d.ts +0 -19
- package/dist/components/Tooltip/tests/Tooltip.test.stories.js +0 -40
- package/dist/components/View/tests/View.test.stories.d.ts +0 -24
- package/dist/components/View/tests/View.test.stories.js +0 -50
@@ -4,6 +4,8 @@ import DropdownMenu from "../index.js";
|
|
4
4
|
import View from "../../View/index.js";
|
5
5
|
import { useTheme } from "../../Theme/useTheme.js";
|
6
6
|
import IconCheckmark from "../../../icons/Checkmark.js";
|
7
|
+
import { expect, fn, userEvent, waitFor, within } from "storybook/test";
|
8
|
+
import { sleep } from "../../../utilities/helpers.js";
|
7
9
|
export default {
|
8
10
|
title: "Components/DropdownMenu",
|
9
11
|
component: DropdownMenu,
|
@@ -13,125 +15,227 @@ export default {
|
|
13
15
|
},
|
14
16
|
},
|
15
17
|
};
|
16
|
-
export const position =
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
<DropdownMenu.
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
export const position = {
|
19
|
+
name: "position",
|
20
|
+
render: () => (<Example>
|
21
|
+
<Example.Item title="position: default">
|
22
|
+
<DropdownMenu>
|
23
|
+
<DropdownMenu.Trigger>
|
24
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
25
|
+
</DropdownMenu.Trigger>
|
26
|
+
<DropdownMenu.Content>
|
27
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 1</DropdownMenu.Item>
|
28
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 2</DropdownMenu.Item>
|
29
|
+
</DropdownMenu.Content>
|
30
|
+
</DropdownMenu>
|
31
|
+
</Example.Item>
|
28
32
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
<Example.Item title="position: end">
|
34
|
+
<DropdownMenu position="end">
|
35
|
+
<DropdownMenu.Trigger>
|
36
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
37
|
+
</DropdownMenu.Trigger>
|
38
|
+
<DropdownMenu.Content>
|
39
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 1</DropdownMenu.Item>
|
40
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 2</DropdownMenu.Item>
|
41
|
+
</DropdownMenu.Content>
|
42
|
+
</DropdownMenu>
|
43
|
+
</Example.Item>
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
45
|
+
<Example.Item title={["position: top-start", "should change to top-start to fit viewport"]}>
|
46
|
+
<DropdownMenu position="top-end">
|
47
|
+
<DropdownMenu.Trigger>
|
48
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
49
|
+
</DropdownMenu.Trigger>
|
50
|
+
<DropdownMenu.Content>
|
51
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 1</DropdownMenu.Item>
|
52
|
+
<DropdownMenu.Item icon={IconCheckmark}>Item 2</DropdownMenu.Item>
|
53
|
+
</DropdownMenu.Content>
|
54
|
+
</DropdownMenu>
|
55
|
+
</Example.Item>
|
56
|
+
<div style={{ height: 2000 }}/>
|
57
|
+
</Example>),
|
58
|
+
};
|
59
|
+
export const sections = {
|
60
|
+
name: "sections",
|
61
|
+
render: () => (<Example>
|
62
|
+
<Example.Item title="2 sections">
|
63
|
+
<DropdownMenu>
|
64
|
+
<DropdownMenu.Trigger>
|
65
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
66
|
+
</DropdownMenu.Trigger>
|
67
|
+
<DropdownMenu.Content>
|
68
|
+
<DropdownMenu.Section>
|
69
|
+
<DropdownMenu.Item>Item 1</DropdownMenu.Item>
|
70
|
+
<DropdownMenu.Item>Item 2</DropdownMenu.Item>
|
71
|
+
</DropdownMenu.Section>
|
65
72
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
<DropdownMenu.
|
85
|
-
|
86
|
-
<DropdownMenu.Item
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
<DropdownMenu.Item
|
94
|
-
|
95
|
-
|
73
|
+
<DropdownMenu.Section>
|
74
|
+
<DropdownMenu.Item>Item 3</DropdownMenu.Item>
|
75
|
+
<DropdownMenu.Item>Item 4</DropdownMenu.Item>
|
76
|
+
</DropdownMenu.Section>
|
77
|
+
</DropdownMenu.Content>
|
78
|
+
</DropdownMenu>
|
79
|
+
</Example.Item>
|
80
|
+
</Example>),
|
81
|
+
};
|
82
|
+
export const submenu = {
|
83
|
+
name: "submenu",
|
84
|
+
render: () => (<Example>
|
85
|
+
<Example.Item title="submenu">
|
86
|
+
<DropdownMenu>
|
87
|
+
<DropdownMenu.Trigger>
|
88
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
89
|
+
</DropdownMenu.Trigger>
|
90
|
+
<DropdownMenu.Content>
|
91
|
+
<DropdownMenu.Item onClick={() => { }}>Item 1</DropdownMenu.Item>
|
92
|
+
<DropdownMenu.SubMenu>
|
93
|
+
<DropdownMenu.SubTrigger>Item 2</DropdownMenu.SubTrigger>
|
94
|
+
<DropdownMenu.Content>
|
95
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 1</DropdownMenu.Item>
|
96
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 2</DropdownMenu.Item>
|
97
|
+
</DropdownMenu.Content>
|
98
|
+
</DropdownMenu.SubMenu>
|
99
|
+
<DropdownMenu.SubMenu>
|
100
|
+
<DropdownMenu.SubTrigger>Item 3</DropdownMenu.SubTrigger>
|
101
|
+
<DropdownMenu.Content>
|
102
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 2-1</DropdownMenu.Item>
|
103
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 2-2</DropdownMenu.Item>
|
104
|
+
</DropdownMenu.Content>
|
105
|
+
</DropdownMenu.SubMenu>
|
96
106
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
</
|
118
|
-
</DropdownMenu>
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
107
|
+
<DropdownMenu.SubMenu>
|
108
|
+
<DropdownMenu.SubTrigger disabled>Item 4, disabled</DropdownMenu.SubTrigger>
|
109
|
+
<DropdownMenu.Content>
|
110
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 3-1</DropdownMenu.Item>
|
111
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 3-2</DropdownMenu.Item>
|
112
|
+
</DropdownMenu.Content>
|
113
|
+
</DropdownMenu.SubMenu>
|
114
|
+
</DropdownMenu.Content>
|
115
|
+
</DropdownMenu>
|
116
|
+
</Example.Item>
|
117
|
+
</Example>),
|
118
|
+
};
|
119
|
+
export const defaultActive = {
|
120
|
+
name: "defaultActive, uncontrolled",
|
121
|
+
args: {
|
122
|
+
handleOpen: fn(),
|
123
|
+
handleClose: fn(),
|
124
|
+
},
|
125
|
+
render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} defaultActive>
|
126
|
+
<DropdownMenu.Trigger>
|
127
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
128
|
+
</DropdownMenu.Trigger>
|
129
|
+
<DropdownMenu.Content>
|
130
|
+
<DropdownMenu.Item>Item</DropdownMenu.Item>
|
131
|
+
</DropdownMenu.Content>
|
132
|
+
</DropdownMenu>),
|
133
|
+
play: async ({ canvasElement, args }) => {
|
134
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
135
|
+
const trigger = canvas.getAllByRole("button")[0];
|
136
|
+
let item = canvas.getByText("Item");
|
137
|
+
await sleep(500);
|
138
|
+
await userEvent.click(document.body);
|
139
|
+
await waitFor(() => {
|
140
|
+
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
141
|
+
expect(args.handleClose).toHaveBeenCalledWith({ reason: "outside-click" });
|
142
|
+
expect(item).not.toBeInTheDocument();
|
143
|
+
});
|
144
|
+
await userEvent.click(trigger);
|
145
|
+
item = canvas.getByText("Item");
|
146
|
+
await waitFor(() => {
|
147
|
+
expect(args.handleOpen).toHaveBeenCalledTimes(1);
|
148
|
+
expect(args.handleOpen).toHaveBeenCalledWith();
|
149
|
+
expect(item).toBeInTheDocument();
|
150
|
+
});
|
151
|
+
},
|
152
|
+
};
|
153
|
+
export const active = {
|
154
|
+
name: "active, controlled",
|
155
|
+
args: {
|
156
|
+
handleOpen: fn(),
|
157
|
+
handleClose: fn(),
|
158
|
+
},
|
159
|
+
render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} active>
|
160
|
+
<DropdownMenu.Trigger>
|
161
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
162
|
+
</DropdownMenu.Trigger>
|
163
|
+
<DropdownMenu.Content>
|
164
|
+
<DropdownMenu.Item>Item</DropdownMenu.Item>
|
165
|
+
</DropdownMenu.Content>
|
166
|
+
</DropdownMenu>),
|
167
|
+
play: async ({ canvasElement, args }) => {
|
168
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
169
|
+
const item = canvas.getByText("Item");
|
170
|
+
await userEvent.click(document.body);
|
171
|
+
await waitFor(() => {
|
172
|
+
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
173
|
+
expect(args.handleClose).toHaveBeenCalledWith({ reason: "outside-click" });
|
174
|
+
});
|
175
|
+
expect(item).toBeInTheDocument();
|
176
|
+
},
|
177
|
+
};
|
178
|
+
export const activeFalse = {
|
179
|
+
name: "active false, controlled",
|
180
|
+
args: {
|
181
|
+
handleOpen: fn(),
|
182
|
+
handleClose: fn(),
|
183
|
+
},
|
184
|
+
render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} active={false}>
|
185
|
+
<DropdownMenu.Trigger>
|
186
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
187
|
+
</DropdownMenu.Trigger>
|
188
|
+
<DropdownMenu.Content>
|
189
|
+
<DropdownMenu.Item>Item</DropdownMenu.Item>
|
190
|
+
</DropdownMenu.Content>
|
191
|
+
</DropdownMenu>),
|
192
|
+
play: async ({ canvasElement, args }) => {
|
193
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
194
|
+
const trigger = canvas.getAllByRole("button")[0];
|
195
|
+
await userEvent.click(trigger);
|
196
|
+
await waitFor(() => {
|
197
|
+
expect(args.handleOpen).toHaveBeenCalledTimes(1);
|
198
|
+
expect(args.handleOpen).toHaveBeenCalledWith();
|
199
|
+
});
|
200
|
+
const item = canvas.queryByText("Item");
|
201
|
+
expect(item).not.toBeInTheDocument();
|
202
|
+
},
|
203
|
+
};
|
204
|
+
export const className = {
|
205
|
+
name: "className, attributes",
|
206
|
+
render: () => (<div data-testid="root">
|
207
|
+
<DropdownMenu active>
|
125
208
|
<DropdownMenu.Trigger>
|
126
209
|
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
127
210
|
</DropdownMenu.Trigger>
|
128
|
-
<DropdownMenu.Content>
|
129
|
-
<DropdownMenu.Item>Item
|
130
|
-
<DropdownMenu.Item>Item 2</DropdownMenu.Item>
|
211
|
+
<DropdownMenu.Content className="test-classname" attributes={{ "data-testid": "test-id" }}>
|
212
|
+
<DropdownMenu.Item>Item</DropdownMenu.Item>
|
131
213
|
</DropdownMenu.Content>
|
132
214
|
</DropdownMenu>
|
133
|
-
</
|
134
|
-
|
215
|
+
</div>),
|
216
|
+
play: async ({ canvasElement }) => {
|
217
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
218
|
+
const menu = await canvas.findByTestId("test-id");
|
219
|
+
expect(menu).toHaveClass("test-classname");
|
220
|
+
},
|
221
|
+
};
|
222
|
+
export const testScroll = {
|
223
|
+
name: "test: scroll",
|
224
|
+
render: () => (<Example>
|
225
|
+
<Example.Item title="Scrolls on page mount to the dropdown">
|
226
|
+
<div style={{ height: 1000 }}/>
|
227
|
+
<DropdownMenu position="end" key="scroll" defaultActive>
|
228
|
+
<DropdownMenu.Trigger>
|
229
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
230
|
+
</DropdownMenu.Trigger>
|
231
|
+
<DropdownMenu.Content>
|
232
|
+
<DropdownMenu.Item>Item 1</DropdownMenu.Item>
|
233
|
+
<DropdownMenu.Item>Item 2</DropdownMenu.Item>
|
234
|
+
</DropdownMenu.Content>
|
235
|
+
</DropdownMenu>
|
236
|
+
</Example.Item>
|
237
|
+
</Example>),
|
238
|
+
};
|
135
239
|
const ThemeSwitching = () => {
|
136
240
|
const { invertColorMode } = useTheme();
|
137
241
|
return (<View gap={3} direction="row">
|
@@ -147,8 +251,11 @@ const ThemeSwitching = () => {
|
|
147
251
|
<Button onClick={() => invertColorMode()}>Switch color mode</Button>
|
148
252
|
</View>);
|
149
253
|
};
|
150
|
-
export const testThemeSwitching =
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
254
|
+
export const testThemeSwitching = {
|
255
|
+
name: "test: theme switching",
|
256
|
+
render: () => (<Example>
|
257
|
+
<Example.Item title="Switch color mode while dropdown is active and check that it still works">
|
258
|
+
<ThemeSwitching />
|
259
|
+
</Example.Item>
|
260
|
+
</Example>),
|
261
|
+
};
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-file-upload-radius:var(--rs-radius-medium);display:block}[data-rs-keyboard] .root:focus-within{box-shadow:var(--rs-focus
|
1
|
+
.root{--rs-file-upload-radius:var(--rs-radius-medium);display:block}[data-rs-keyboard] .root:focus-within{box-shadow:var(--rs-shadow-focus)}.--inline{--rs-file-upload-radius:var(--rs-radius-small)}.--inline,.--inline .triggerLayer{display:inline-block;vertical-align:top}[data-rs-keyboard] .--inline:focus-within{box-shadow:none}[data-rs-keyboard] .--inline:focus-within .triggerLayer>*{box-shadow:var(--rs-shadow-focus)}.--variant-outline .triggerLayer{border:1px dashed var(--rs-color-border-neutral);border-radius:var(--rs-file-upload-radius)}.--highlighted.--variant-outline .triggerLayer{background:rgba(var(--rs-color-rgb-background-primary),.08);border-color:var(--rs-color-border-primary)}@media (hover:hover) and (pointer:fine){.--variant-outline .triggerLayer:hover:not(:has(.trigger)){background:rgba(var(--rs-color-rgb-background-neutral),.16)}}.triggerLayer:has(.trigger){pointer-events:none}.triggerLayer:has(.trigger) .trigger{pointer-events:all}.trigger{display:contents}
|
@@ -1 +1 @@
|
|
1
|
-
.content{--rs-flyout-gap:0;--rs-flyout-origin-x:50%;--rs-flyout-origin-y:50%;isolation:isolate;pointer-events:none;position:absolute}.content.--hover{pointer-events:all}.content.--hover-disabled,.content.--hover-disabled .inner{pointer-events:none}.inner{opacity:0;outline:none;pointer-events:all;transform:scale(.
|
1
|
+
.content{--rs-flyout-gap:0;--rs-flyout-origin-x:50%;--rs-flyout-origin-y:50%;isolation:isolate;pointer-events:none;position:absolute}.content.--hover{pointer-events:all}.content.--hover-disabled,.content.--hover-disabled .inner{pointer-events:none}.inner{backface-visibility:hidden;height:100%;max-height:100%;max-width:100%;opacity:0;outline:none;overflow:auto;pointer-events:all;transform:scale(.92) translateY(0);transform-origin:var(--rs-flyout-origin-x) var(--rs-flyout-origin-y);transition:1ms var(--rs-easing-accelerate)}[data-rs-keyboard] .inner:focus{box-shadow:var(--rs-shadow-focus)}.content.--width-trigger .inner{transform:scale(1) translateY(var(--rs-unit-x2))}.content.--position-top,.content.--position-top-end,.content.--position-top-start{--rs-flyout-origin-y:100%;padding-bottom:calc(var(--rs-unit-x1) * var(--rs-flyout-gap))}.content.--position-bottom,.content.--position-bottom-end,.content.--position-bottom-start{--rs-flyout-origin-y:0%;padding-top:calc(var(--rs-unit-x1) * var(--rs-flyout-gap))}.content.--position-bottom-start,.content.--position-top-start{--rs-flyout-origin-x:0%}.content.--position-bottom-end,.content.--position-top-end{--rs-flyout-origin-x:100%}.content.--position-start,.content.--position-start-bottom,.content.--position-start-top{--rs-flyout-origin-x:100%;padding-right:calc(var(--rs-unit-x1) * var(--rs-flyout-gap))}.content.--position-end,.content.--position-end-bottom,.content.--position-end-top{--rs-flyout-origin-x:0%;padding-left:calc(var(--rs-unit-x1) * var(--rs-flyout-gap))}.content.--position-end-top,.content.--position-start-top{--rs-flyout-origin-y:0%}.content.--position-end-bottom,.content.--position-start-bottom{--rs-flyout-origin-y:100%}.content.--visible .inner{opacity:1;transform:scale(1) translateY(0)}.content.--animated .inner{transition-duration:var(--rs-duration-rapid);transition-property:opacity,transform}.content.--animated.--visible .inner{transition-duration:var(--rs-duration-fast);transition-timing-function:var(--rs-easing-decelerate)}
|
@@ -15,17 +15,13 @@ export type CloseReason = "escape-key" | "outside-click"
|
|
15
15
|
| "item-selection" | "close-button";
|
16
16
|
export type Position = `${YSide}` | `${YSide}-${XSide}` | `${XSide}` | `${XSide}-${YSide}`;
|
17
17
|
export type Width = "trigger" | string;
|
18
|
-
export type Options = {
|
19
|
-
width?: Width;
|
18
|
+
export type Options = Pick<BaseProps, "width" | "fallbackAdjustLayout" | "fallbackMinWidth" | "fallbackMinHeight" | "contentGap" | "contentShift"> & {
|
20
19
|
position: Position;
|
20
|
+
fallbackPositions?: Position[];
|
21
21
|
container?: HTMLElement | null;
|
22
22
|
rtl: boolean;
|
23
|
-
fallbackPositions?: Position[];
|
24
|
-
fallbackAdjustLayout?: boolean;
|
25
23
|
lastUsedPosition: Position;
|
26
24
|
onPositionChoose: (position: Position) => void;
|
27
|
-
contentGap?: number;
|
28
|
-
contentShift?: number;
|
29
25
|
};
|
30
26
|
export type Styles = React.CSSProperties;
|
31
27
|
export type State = {
|
@@ -102,6 +98,10 @@ type BaseProps = {
|
|
102
98
|
fallbackPositions?: Position[] | false;
|
103
99
|
/** Adjust the content size and shift its position to fit into the container when none of the fallback positions work */
|
104
100
|
fallbackAdjustLayout?: boolean;
|
101
|
+
/** Minimum width for the content when fallbackAdjustLayout is true */
|
102
|
+
fallbackMinWidth?: string;
|
103
|
+
/** Minimum height for the content when fallbackAdjustLayout is true */
|
104
|
+
fallbackMinHeight?: string;
|
105
105
|
/** Change component trap focus keyboard behavior and shortcuts */
|
106
106
|
trapFocusMode?: TrapMode | false;
|
107
107
|
/** Disable the flyout content interactivity */
|
@@ -187,7 +187,7 @@ export type ContextProps = {
|
|
187
187
|
handleContentMouseDown: () => void;
|
188
188
|
handleContentMouseUp: () => void;
|
189
189
|
isSubmenu: boolean;
|
190
|
-
} & Pick<Props, "triggerType" | "contentClassName" | "contentAttributes" | "
|
190
|
+
} & Pick<Props, "triggerType" | "contentClassName" | "contentAttributes" | "contentGap" | "trapFocusMode" | "containerRef" | "disableContentHover" | "autoFocus">;
|
191
191
|
export type TriggerContextProps = {
|
192
192
|
elRef?: ContextProps["triggerElRef"];
|
193
193
|
};
|
@@ -11,7 +11,7 @@ import { useFlyoutContext, ContentProvider } from "./Flyout.context.js";
|
|
11
11
|
import s from "./Flyout.module.css";
|
12
12
|
const FlyoutContent = (props) => {
|
13
13
|
const { children, className, attributes } = props;
|
14
|
-
const { flyout, id, flyoutElRef, triggerElRef, handleClose, handleTransitionEnd, handleTransitionStart, triggerType, handleMouseEnter, handleMouseLeave, handleContentMouseDown, handleContentMouseUp,
|
14
|
+
const { flyout, id, flyoutElRef, triggerElRef, handleClose, handleTransitionEnd, handleTransitionStart, triggerType, handleMouseEnter, handleMouseLeave, handleContentMouseDown, handleContentMouseUp, contentClassName, contentAttributes, contentGap, trapFocusMode, disableContentHover, autoFocus, width, containerRef: passedContainerRef, isSubmenu, } = useFlyoutContext();
|
15
15
|
const { styles, status, position } = flyout;
|
16
16
|
const [mounted, setMounted] = React.useState(false);
|
17
17
|
const closestFixedContainer = React.useMemo(() => {
|
@@ -19,13 +19,16 @@ const FlyoutContent = (props) => {
|
|
19
19
|
return null;
|
20
20
|
if (!triggerElRef)
|
21
21
|
return null;
|
22
|
+
// eslint-disable-next-line react-hooks/refs
|
22
23
|
return findClosestPositionContainer({ el: triggerElRef.current });
|
23
24
|
}, [mounted, triggerElRef]);
|
24
25
|
const closestScrollableContainer = React.useMemo(() => {
|
25
26
|
if (!mounted)
|
26
27
|
return;
|
28
|
+
// eslint-disable-next-line react-hooks/refs
|
27
29
|
if (!triggerElRef?.current)
|
28
30
|
return;
|
31
|
+
// eslint-disable-next-line react-hooks/refs
|
29
32
|
return findClosestScrollableContainer({ el: triggerElRef.current });
|
30
33
|
}, [mounted, triggerElRef]);
|
31
34
|
const containerRef = passedContainerRef || { current: closestFixedContainer };
|
@@ -15,7 +15,7 @@ import cooldown from "./utilities/cooldown.js";
|
|
15
15
|
import { Provider, useFlyoutTriggerContext, useFlyoutContext, useFlyoutContentContext, } from "./Flyout.context.js";
|
16
16
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
17
17
|
const FlyoutControlled = (props) => {
|
18
|
-
const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, fallbackAdjustLayout, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
|
18
|
+
const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, fallbackAdjustLayout, fallbackMinWidth, fallbackMinHeight, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
|
19
19
|
const fallbackPositions = props.fallbackPositions === false || forcePosition ? [] : props.fallbackPositions;
|
20
20
|
const onOpenRef = useHandlerRef(onOpen);
|
21
21
|
const onCloseRef = useHandlerRef(onClose);
|
@@ -34,7 +34,9 @@ const FlyoutControlled = (props) => {
|
|
34
34
|
* Resolving the same inside another Flyout.Content should reset the inheritance
|
35
35
|
* For example, if you have a tooltip -> popover inside another popover.content, tooltip shouldn't use its parent context anymore
|
36
36
|
*/
|
37
|
-
const isParentTriggerInsideFlyout =
|
37
|
+
const isParentTriggerInsideFlyout =
|
38
|
+
// eslint-disable-next-line react-hooks/refs
|
39
|
+
!!parentTriggerRef?.current && parentContentRef?.current?.contains(parentTriggerRef.current);
|
38
40
|
const tryParentTrigger = !parentContentRef || isParentTriggerInsideFlyout;
|
39
41
|
const triggerElRef = (tryParentTrigger && parentTriggerRef) || internalTriggerElRef;
|
40
42
|
const triggerBoundsRef = React.useRef(null);
|
@@ -53,16 +55,21 @@ const FlyoutControlled = (props) => {
|
|
53
55
|
// Touch devices trigger onMouseEnter but we don't need to apply regular hover timeouts
|
54
56
|
// So we're saving a flag on touch start and then change the mouse enter behavior
|
55
57
|
const hoverTriggeredWithTouchEventRef = React.useRef(false);
|
58
|
+
// eslint-disable-next-line react-hooks/refs
|
56
59
|
const flyout = useFlyout({
|
57
60
|
triggerElRef,
|
58
61
|
flyoutElRef,
|
62
|
+
// eslint-disable-next-line react-hooks/refs
|
59
63
|
triggerBounds: originCoordinates ?? triggerBoundsRef.current,
|
60
64
|
width,
|
61
65
|
position: passedPosition,
|
62
66
|
defaultActive: resolvedActive,
|
67
|
+
// eslint-disable-next-line react-hooks/refs
|
63
68
|
container: containerRef?.current,
|
64
69
|
fallbackPositions,
|
65
70
|
fallbackAdjustLayout,
|
71
|
+
fallbackMinWidth,
|
72
|
+
fallbackMinHeight,
|
66
73
|
contentGap,
|
67
74
|
contentShift,
|
68
75
|
});
|
@@ -322,9 +329,9 @@ const FlyoutControlled = (props) => {
|
|
322
329
|
handleContentMouseUp,
|
323
330
|
triggerType,
|
324
331
|
trapFocusMode,
|
325
|
-
contentGap,
|
326
332
|
contentClassName,
|
327
333
|
contentAttributes,
|
334
|
+
contentGap,
|
328
335
|
containerRef,
|
329
336
|
disableContentHover,
|
330
337
|
autoFocus,
|
@@ -1,3 +1,3 @@
|
|
1
1
|
export { default } from "./Flyout";
|
2
2
|
export { useFlyoutContext } from "./Flyout.context";
|
3
|
-
export type { Props as FlyoutProps, Instance as FlyoutInstance, TriggerProps as FlyoutTriggerProps, ContentProps as FlyoutContentProps, CloseReason as FlyoutCloseReason, } from "./Flyout.types";
|
3
|
+
export type { Props as FlyoutProps, Instance as FlyoutInstance, TriggerProps as FlyoutTriggerProps, ContentProps as FlyoutContentProps, CloseReason as FlyoutCloseReason, TriggerAttributes as FlyoutTriggerAttributes, } from "./Flyout.types";
|
@@ -33,6 +33,14 @@ export declare const fallbackAdjustLayout: {
|
|
33
33
|
name: string;
|
34
34
|
render: () => React.JSX.Element;
|
35
35
|
};
|
36
|
+
export declare const fallbackAdjustLayoutShift: {
|
37
|
+
name: string;
|
38
|
+
render: () => React.JSX.Element;
|
39
|
+
};
|
40
|
+
export declare const fallbackAdjustLayoutSize: {
|
41
|
+
name: string;
|
42
|
+
render: () => React.JSX.Element;
|
43
|
+
};
|
36
44
|
export declare const originCoordinates: {
|
37
45
|
name: string;
|
38
46
|
render: () => React.JSX.Element;
|