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,7 @@ import Popover from "../../Popover/index.js";
|
|
4
4
|
import Button from "../../Button/index.js";
|
5
5
|
import View from "../../View/index.js";
|
6
6
|
import useResponsiveClientValue from "../../../hooks/useResponsiveClientValue.js";
|
7
|
+
import { expect, fn, userEvent, waitFor, within } from "storybook/test";
|
7
8
|
export default {
|
8
9
|
title: "Components/Tooltip",
|
9
10
|
component: Tooltip,
|
@@ -29,122 +30,153 @@ const DemoResponsive = (props) => {
|
|
29
30
|
{(attributes) => <Button attributes={attributes}>Show tooltip</Button>}
|
30
31
|
</Tooltip>);
|
31
32
|
};
|
32
|
-
export const position =
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
<
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
33
|
+
export const position = {
|
34
|
+
name: "position",
|
35
|
+
render: () => (<Example>
|
36
|
+
<Example.Item title="position: bottom-start">
|
37
|
+
<View direction="row" gap={2}>
|
38
|
+
<Demo position="bottom-start" text="Tooltip 1"/>
|
39
|
+
<Demo position="bottom-start" text="Tooltip 2"/>
|
40
|
+
<Demo position="bottom-start" text="Tooltip 3"/>
|
41
|
+
</View>
|
42
|
+
</Example.Item>
|
43
|
+
<Example.Item title="position: bottom">
|
44
|
+
<Demo position="bottom"/>
|
45
|
+
</Example.Item>
|
46
|
+
<Example.Item title="position: bottom-end">
|
47
|
+
<Demo position="bottom-end"/>
|
48
|
+
</Example.Item>
|
49
|
+
<Example.Item title="position: top-start">
|
50
|
+
<Demo position="top-start"/>
|
51
|
+
</Example.Item>
|
52
|
+
<Example.Item title="position: top">
|
53
|
+
<Demo position="top"/>
|
54
|
+
</Example.Item>
|
55
|
+
<Example.Item title="position: top-end">
|
56
|
+
<Demo position="top-end"/>
|
57
|
+
</Example.Item>
|
55
58
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
<Example.Item title="position: start">
|
60
|
+
<View align="end">
|
61
|
+
<Demo position="start"/>
|
62
|
+
</View>
|
63
|
+
</Example.Item>
|
61
64
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
<Example.Item title="position: start-top">
|
66
|
+
<View align="end">
|
67
|
+
<Demo position="start-top"/>
|
68
|
+
</View>
|
69
|
+
</Example.Item>
|
67
70
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
71
|
+
<Example.Item title="position: start-bottom">
|
72
|
+
<View align="end">
|
73
|
+
<Demo position="start-bottom"/>
|
74
|
+
</View>
|
75
|
+
</Example.Item>
|
73
76
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
+
<Example.Item title="position: end">
|
78
|
+
<Demo position="end"/>
|
79
|
+
</Example.Item>
|
77
80
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
+
<Example.Item title="position: end-top">
|
82
|
+
<Demo position="end-top"/>
|
83
|
+
</Example.Item>
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
</
|
85
|
+
<Example.Item title="position: end-bottom">
|
86
|
+
<Demo position="end-bottom"/>
|
87
|
+
</Example.Item>
|
88
|
+
</Example>),
|
89
|
+
};
|
90
|
+
export const color = {
|
91
|
+
name: "color",
|
92
|
+
render: () => (<Example>
|
93
|
+
<Example.Item title="color: inverted">
|
94
|
+
<Demo color="inverted" position="bottom"/>
|
95
|
+
</Example.Item>
|
96
|
+
<Example.Item title="color: dark">
|
97
|
+
<Demo color="dark" position="bottom"/>
|
98
|
+
</Example.Item>
|
99
|
+
</Example>),
|
100
|
+
};
|
101
|
+
export const defaultActive = {
|
102
|
+
name: "uncontrolled",
|
103
|
+
args: {
|
104
|
+
handleOpen: fn(),
|
105
|
+
handleClose: fn(),
|
106
|
+
},
|
107
|
+
render: (args) => (<Tooltip text="Content" onOpen={args.handleOpen} onClose={args.handleClose}>
|
108
|
+
{(attributes) => <Button attributes={attributes}>Trigger</Button>}
|
109
|
+
</Tooltip>),
|
110
|
+
play: async ({ canvasElement, args }) => {
|
111
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
112
|
+
const trigger = canvas.getAllByRole("button")[0];
|
113
|
+
await userEvent.hover(trigger);
|
114
|
+
await waitFor(() => {
|
115
|
+
expect(args.handleOpen).toHaveBeenCalledTimes(1);
|
116
|
+
expect(args.handleOpen).toHaveBeenCalledWith();
|
117
|
+
});
|
118
|
+
const item = canvas.getByText("Content");
|
119
|
+
expect(item).toBeInTheDocument();
|
120
|
+
await userEvent.unhover(trigger);
|
121
|
+
await waitFor(() => {
|
122
|
+
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
123
|
+
expect(args.handleClose).toHaveBeenCalledWith({});
|
124
|
+
expect(item).not.toBeInTheDocument();
|
125
|
+
});
|
126
|
+
},
|
127
|
+
};
|
128
|
+
export const edgeCases = {
|
129
|
+
name: "test: edge cases",
|
130
|
+
render: () => (<Example>
|
131
|
+
<Example.Item title="responsive visibility">
|
132
|
+
<DemoResponsive text="Responsive"/>
|
133
|
+
</Example.Item>
|
107
134
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
<Popover.Trigger>
|
112
|
-
{(popoverAttributes) => (<Button attributes={{ ...attributes, ...popoverAttributes }}>Action</Button>)}
|
113
|
-
</Popover.Trigger>
|
114
|
-
<Popover.Content>Popover</Popover.Content>
|
115
|
-
</Popover>)}
|
116
|
-
</Tooltip>
|
117
|
-
</Example.Item>
|
135
|
+
<Example.Item title="without text">
|
136
|
+
<Tooltip>{() => <Button>Button</Button>}</Tooltip>
|
137
|
+
</Example.Item>
|
118
138
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
{(tooltipAttributes) => (<Popover position="bottom" width="300px">
|
139
|
+
<Example.Item title="tooltip with popover">
|
140
|
+
<Tooltip text="Tooltip" position="top">
|
141
|
+
{(attributes) => (<Popover position="bottom">
|
123
142
|
<Popover.Trigger>
|
124
|
-
{(
|
125
|
-
Tooltip with popover
|
126
|
-
</Button>)}
|
143
|
+
{(popoverAttributes) => (<Button attributes={{ ...attributes, ...popoverAttributes }}>Action</Button>)}
|
127
144
|
</Popover.Trigger>
|
128
|
-
<Popover.Content>
|
129
|
-
<View gap={2} align="center" direction="row" justify="space-between">
|
130
|
-
Popover content
|
131
|
-
<Popover position="bottom" width="300px">
|
132
|
-
<Popover.Trigger>
|
133
|
-
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
134
|
-
</Popover.Trigger>
|
135
|
-
<Popover.Content>
|
136
|
-
<Popover.Dismissible align="center" closeAriaLabel="Close">
|
137
|
-
Another popover content
|
138
|
-
</Popover.Dismissible>
|
139
|
-
</Popover.Content>
|
140
|
-
</Popover>
|
141
|
-
</View>
|
142
|
-
</Popover.Content>
|
145
|
+
<Popover.Content>Popover</Popover.Content>
|
143
146
|
</Popover>)}
|
144
147
|
</Tooltip>
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
148
|
+
</Example.Item>
|
149
|
+
|
150
|
+
<Example.Item title="nested popovers inside a tooltip">
|
151
|
+
<View direction="row" gap={2}>
|
152
|
+
<Tooltip position="top" text="Hello">
|
153
|
+
{(tooltipAttributes) => (<Popover position="bottom" width="300px">
|
154
|
+
<Popover.Trigger>
|
155
|
+
{(attributes) => (<Button attributes={{ ...tooltipAttributes, ...attributes }}>
|
156
|
+
Tooltip with popover
|
157
|
+
</Button>)}
|
158
|
+
</Popover.Trigger>
|
159
|
+
<Popover.Content>
|
160
|
+
<View gap={2} align="center" direction="row" justify="space-between">
|
161
|
+
Popover content
|
162
|
+
<Popover position="bottom" width="300px">
|
163
|
+
<Popover.Trigger>
|
164
|
+
{(attributes) => <Button attributes={attributes}>Open</Button>}
|
165
|
+
</Popover.Trigger>
|
166
|
+
<Popover.Content>
|
167
|
+
<Popover.Dismissible align="center" closeAriaLabel="Close">
|
168
|
+
Another popover content
|
169
|
+
</Popover.Dismissible>
|
170
|
+
</Popover.Content>
|
171
|
+
</Popover>
|
172
|
+
</View>
|
173
|
+
</Popover.Content>
|
174
|
+
</Popover>)}
|
175
|
+
</Tooltip>
|
176
|
+
<Tooltip position="top" text="Hello">
|
177
|
+
{(tooltipAttributes) => <Button attributes={tooltipAttributes}>Just a tooltip</Button>}
|
178
|
+
</Tooltip>
|
179
|
+
</View>
|
180
|
+
</Example.Item>
|
181
|
+
</Example>),
|
182
|
+
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { createElement as _createElement } from "react";
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
3
|
-
import React from "react";
|
3
|
+
import React, { isValidElement } from "react";
|
4
4
|
import { classNames, responsiveClassNames, responsiveVariables } from "../../utilities/props.js";
|
5
5
|
import Divider from "../Divider/index.js";
|
6
6
|
import Hidden from "../Hidden/index.js";
|
@@ -100,13 +100,15 @@ const View = (props) => {
|
|
100
100
|
return (_jsx("div", { className: dividerClassName, children: _jsx(Divider, { vertical: isDividerVertical, blank: true }) }, `${key}-divider`));
|
101
101
|
};
|
102
102
|
const renderItem = ({ className, child, index }) => {
|
103
|
-
const
|
104
|
-
const
|
103
|
+
const isElement = isValidElement(child);
|
104
|
+
const isItem = isElement && child.type === ViewItem;
|
105
|
+
const isView = isElement && child.type === View;
|
105
106
|
const key = child.key;
|
106
107
|
const dividerElement = !!index && divided && renderDivider({ className, key });
|
107
108
|
let itemElement;
|
108
109
|
if (isItem) {
|
109
110
|
itemElement = React.cloneElement(child, {
|
111
|
+
// @ts-expect-error -- child is guaranteed to be an element
|
110
112
|
className: classNames(className, child.props.className),
|
111
113
|
});
|
112
114
|
}
|
@@ -120,10 +122,13 @@ const View = (props) => {
|
|
120
122
|
itemElement = (_jsx("div", { className: className, children: child }, key));
|
121
123
|
}
|
122
124
|
// Passing grow here because it's responsive and nowrap should follow it
|
125
|
+
// @ts-expect-error -- child is guaranteed to be an element
|
123
126
|
if ((isItem || isView) && child.props?.grow) {
|
127
|
+
// @ts-expect-error -- child is guaranteed to be an element
|
124
128
|
nowrap = child.props.grow;
|
125
129
|
isFlex = true;
|
126
130
|
}
|
131
|
+
// @ts-expect-error -- child is guaranteed to be an element
|
127
132
|
if (isItem && child.props?.gap === "auto")
|
128
133
|
nowrap = true;
|
129
134
|
return (_jsxs(React.Fragment, { children: [dividerElement, itemElement] }, key ? `${key}-fragment` : undefined));
|
@@ -134,8 +139,10 @@ const View = (props) => {
|
|
134
139
|
if (!child)
|
135
140
|
return null;
|
136
141
|
const usedIndex = renderedItemIndex;
|
142
|
+
// eslint-disable-next-line react-hooks/immutability
|
137
143
|
renderedItemIndex += 1;
|
138
|
-
if (child.type === Hidden) {
|
144
|
+
if (isValidElement(child) && child.type === Hidden) {
|
145
|
+
// @ts-expect-error -- child is guaranteed to be an element
|
139
146
|
const { children: hiddenChild, ...hiddenProps } = child.props;
|
140
147
|
const key = child.key || index;
|
141
148
|
return (_createElement(Hidden, { ...hiddenProps, key: key }, renderItem({ child: hiddenChild, index: usedIndex })));
|
@@ -87,7 +87,7 @@ export type Props<TagName extends keyof React.JSX.IntrinsicElements = "div"> = {
|
|
87
87
|
/** z-index style */
|
88
88
|
zIndex?: number;
|
89
89
|
/** Shadow style, based on the shadow tokens */
|
90
|
-
shadow?: "raised" | "overlay"
|
90
|
+
shadow?: "raised" | "overlay";
|
91
91
|
/** Overflow style */
|
92
92
|
overflow?: "hidden" | "auto";
|
93
93
|
/** Add transition for the properties */
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import { type ViewProps } from "./..";
|
3
|
+
import { StoryObj } from "@storybook/react-vite";
|
3
4
|
declare const _default: {
|
4
5
|
title: string;
|
5
6
|
component: {
|
@@ -137,3 +138,6 @@ export declare const testComposition: {
|
|
137
138
|
name: string;
|
138
139
|
render: () => React.JSX.Element;
|
139
140
|
};
|
141
|
+
export declare const asProp: StoryObj;
|
142
|
+
export declare const className: StoryObj;
|
143
|
+
export declare const itemClassName: StoryObj;
|
@@ -9,6 +9,7 @@ import MenuItem from "../../MenuItem/index.js";
|
|
9
9
|
import Button from "../../Button/index.js";
|
10
10
|
import IconPlus from "../../../icons/Plus.js";
|
11
11
|
import useToggle from "../../../hooks/useToggle.js";
|
12
|
+
import { expect } from "storybook/test";
|
12
13
|
export default {
|
13
14
|
title: "Utility components/View",
|
14
15
|
component: View,
|
@@ -1288,3 +1289,41 @@ export const testComposition = {
|
|
1288
1289
|
</Example.Item>
|
1289
1290
|
</Example>),
|
1290
1291
|
};
|
1292
|
+
export const asProp = {
|
1293
|
+
name: "as",
|
1294
|
+
render: () => (<View as="ul">
|
1295
|
+
<View.Item as="li">Content</View.Item>
|
1296
|
+
</View>),
|
1297
|
+
play: async ({ canvas }) => {
|
1298
|
+
const list = canvas.getByRole("list");
|
1299
|
+
const item = canvas.getByRole("listitem");
|
1300
|
+
expect(list).toBeInTheDocument();
|
1301
|
+
expect(item).toBeInTheDocument();
|
1302
|
+
},
|
1303
|
+
};
|
1304
|
+
export const className = {
|
1305
|
+
name: "className, attributes",
|
1306
|
+
render: () => (<div data-testid="root">
|
1307
|
+
<View className="test-classname" attributes={{ id: "test-id" }}>
|
1308
|
+
Content
|
1309
|
+
</View>
|
1310
|
+
</div>),
|
1311
|
+
play: async ({ canvas }) => {
|
1312
|
+
const root = canvas.getByTestId("root").firstChild;
|
1313
|
+
expect(root).toHaveClass("test-classname");
|
1314
|
+
expect(root).toHaveAttribute("id", "test-id");
|
1315
|
+
},
|
1316
|
+
};
|
1317
|
+
export const itemClassName = {
|
1318
|
+
name: "item className, attributes",
|
1319
|
+
render: () => (<div data-testid="root">
|
1320
|
+
<View.Item className="test-classname" attributes={{ id: "test-id" }}>
|
1321
|
+
Content
|
1322
|
+
</View.Item>
|
1323
|
+
</div>),
|
1324
|
+
play: async ({ canvas }) => {
|
1325
|
+
const root = canvas.getByTestId("root").firstChild;
|
1326
|
+
expect(root).toHaveClass("test-classname");
|
1327
|
+
expect(root).toHaveAttribute("id", "test-id");
|
1328
|
+
},
|
1329
|
+
};
|
@@ -10,7 +10,9 @@ const Expandable = (props) => {
|
|
10
10
|
const rootRef = React.useRef(null);
|
11
11
|
const mountedRef = React.useRef(false);
|
12
12
|
const [animatedHeight, setAnimatedHeight] = React.useState(active ? "auto" : null);
|
13
|
-
const contentClassNames = classNames(s.root,
|
13
|
+
const contentClassNames = classNames(s.root,
|
14
|
+
// eslint-disable-next-line react-hooks/refs
|
15
|
+
mountedRef.current && animatedHeight !== "auto" && s["--animated"]);
|
14
16
|
const handleTransitionEnd = (e) => {
|
15
17
|
if (e.propertyName !== "height")
|
16
18
|
return;
|
@@ -18,18 +18,20 @@ const Portal = (props) => {
|
|
18
18
|
const { children, targetRef } = props;
|
19
19
|
const mountedToggle = useToggle();
|
20
20
|
const rootRef = React.useRef(null);
|
21
|
+
// eslint-disable-next-line react-hooks/refs
|
21
22
|
const rootNode = rootRef.current?.getRootNode();
|
22
23
|
const isShadowDom = rootNode instanceof ShadowRoot;
|
23
24
|
const defaultTargetEl = isShadowDom ? rootNode : document.body;
|
24
25
|
/**
|
25
26
|
* Check for parent portal to render inside it
|
26
|
-
* To avoid z-
|
27
|
+
* To avoid z-index issues
|
27
28
|
* Example:
|
28
29
|
* Dropdown rendered on the page should render under the modal
|
29
30
|
* Dropdown inside the modal should render above it
|
30
31
|
*/
|
31
32
|
const portal = usePortalScope();
|
32
33
|
const nextScopeRef = targetRef || portal.scopeRef;
|
34
|
+
// eslint-disable-next-line react-hooks/refs
|
33
35
|
const targetEl = nextScopeRef?.current || defaultTargetEl;
|
34
36
|
useIsomorphicLayoutEffect(() => {
|
35
37
|
mountedToggle.activate();
|
@@ -37,6 +39,7 @@ const Portal = (props) => {
|
|
37
39
|
}, []);
|
38
40
|
/* Preserve the current theme when rendered in body */
|
39
41
|
return [
|
42
|
+
// eslint-disable-next-line react-hooks/refs
|
40
43
|
ReactDOM.createPortal(_jsx(Theme, { children: children }), targetEl),
|
41
44
|
// Make sure this element doesn't affect components using :last-child when their children use portals
|
42
45
|
!mountedToggle.active && _jsx("div", { ref: rootRef, className: s.root }, "root"),
|
@@ -4,7 +4,6 @@
|
|
4
4
|
*/
|
5
5
|
import React from "react";
|
6
6
|
import useElementId from "../useElementId.js";
|
7
|
-
import { onNextFrame } from "../../utilities/animation.js";
|
8
7
|
let queue = {};
|
9
8
|
let latestId = null;
|
10
9
|
const removeFromQueue = (id) => {
|
@@ -23,12 +22,12 @@ const addToQueue = (id, contentRef, triggerRef) => {
|
|
23
22
|
latestId = id;
|
24
23
|
};
|
25
24
|
const useIsDismissible = (args) => {
|
26
|
-
const { active, contentRef, triggerRef } = args;
|
25
|
+
const { active, contentRef, triggerRef, hasTrigger = true } = args;
|
27
26
|
const id = useElementId();
|
28
27
|
React.useEffect(() => {
|
29
28
|
if (!active)
|
30
29
|
return;
|
31
|
-
|
30
|
+
addToQueue(id, contentRef, triggerRef);
|
32
31
|
return () => removeFromQueue(id);
|
33
32
|
}, [active, id, contentRef, triggerRef]);
|
34
33
|
return React.useCallback(() => {
|
@@ -38,10 +37,11 @@ const useIsDismissible = (args) => {
|
|
38
37
|
const latestTrigger = latest?.triggerRef?.current;
|
39
38
|
const prev = latest?.parentId ? queue[latest.parentId] : undefined;
|
40
39
|
const prevContent = prev?.contentRef.current;
|
40
|
+
const nested = prevContent && latestTrigger && prevContent.contains(latestTrigger);
|
41
41
|
// Don't block independently rendered components that are not nested in each other
|
42
|
-
if (
|
42
|
+
if (hasTrigger && !nested)
|
43
43
|
return true;
|
44
|
-
return latestId === id;
|
45
|
-
}, [id, active]);
|
44
|
+
return !latestId || latestId === id;
|
45
|
+
}, [id, active, hasTrigger]);
|
46
46
|
};
|
47
47
|
export default useIsDismissible;
|
@@ -5,7 +5,7 @@ import useDrag from "../_private/useDrag.js";
|
|
5
5
|
import useToggle from "../useToggle.js";
|
6
6
|
import Button from "../../components/Button/index.js";
|
7
7
|
export default {
|
8
|
-
title: "Internal/
|
8
|
+
title: "Internal/useDrag",
|
9
9
|
parameters: {
|
10
10
|
chromatic: { disableSnapshot: true },
|
11
11
|
},
|
@@ -2,9 +2,6 @@ import { StoryObj } from "@storybook/react-vite";
|
|
2
2
|
declare const _default: {
|
3
3
|
title: string;
|
4
4
|
parameters: {
|
5
|
-
iframe: {
|
6
|
-
url: string;
|
7
|
-
};
|
8
5
|
chromatic: {
|
9
6
|
disableSnapshot: boolean;
|
10
7
|
};
|
@@ -12,5 +9,7 @@ declare const _default: {
|
|
12
9
|
};
|
13
10
|
export default _default;
|
14
11
|
export declare const base: StoryObj;
|
15
|
-
export declare const
|
16
|
-
export declare const
|
12
|
+
export declare const horizontal: StoryObj;
|
13
|
+
export declare const vertical: StoryObj;
|
14
|
+
export declare const circular: StoryObj;
|
15
|
+
export declare const disabled: StoryObj;
|
@@ -0,0 +1,128 @@
|
|
1
|
+
import React, { useRef } from "react";
|
2
|
+
import { expect, userEvent } from "storybook/test";
|
3
|
+
import View from "../../components/View/index.js";
|
4
|
+
import Button from "../../components/Button/index.js";
|
5
|
+
import useKeyboardArrowNavigation from "../useKeyboardArrowNavigation.js";
|
6
|
+
export default {
|
7
|
+
title: "Hooks/useKeyboardArrowNavigation",
|
8
|
+
parameters: {
|
9
|
+
chromatic: { disableSnapshot: true },
|
10
|
+
},
|
11
|
+
};
|
12
|
+
export const base = {
|
13
|
+
name: "base",
|
14
|
+
render: () => {
|
15
|
+
const ref = useRef(null);
|
16
|
+
useKeyboardArrowNavigation({ ref });
|
17
|
+
return (<View gap={2} direction="row" attributes={{ ref }}>
|
18
|
+
<Button onClick={() => { }}>Action 1</Button>
|
19
|
+
<Button onClick={() => { }}>Action 2</Button>
|
20
|
+
<Button onClick={() => { }}>Action 3</Button>
|
21
|
+
</View>);
|
22
|
+
},
|
23
|
+
play: async ({ canvas }) => {
|
24
|
+
const buttons = canvas.getAllByRole("button");
|
25
|
+
buttons[0].focus();
|
26
|
+
await userEvent.keyboard("{ArrowRight/}");
|
27
|
+
expect(document.activeElement).toBe(buttons[1]);
|
28
|
+
await userEvent.keyboard("{ArrowDown/}");
|
29
|
+
expect(document.activeElement).toBe(buttons[2]);
|
30
|
+
await userEvent.keyboard("{ArrowUp/}");
|
31
|
+
expect(document.activeElement).toBe(buttons[1]);
|
32
|
+
await userEvent.keyboard("{ArrowLeft/}");
|
33
|
+
expect(document.activeElement).toBe(buttons[0]);
|
34
|
+
},
|
35
|
+
};
|
36
|
+
export const horizontal = {
|
37
|
+
name: "orientation: horizontal",
|
38
|
+
render: () => {
|
39
|
+
const ref = useRef(null);
|
40
|
+
useKeyboardArrowNavigation({ ref, orientation: "horizontal" });
|
41
|
+
return (<View gap={2} direction="row" attributes={{ ref }}>
|
42
|
+
<Button onClick={() => { }}>Action 1</Button>
|
43
|
+
<Button onClick={() => { }}>Action 2</Button>
|
44
|
+
<Button onClick={() => { }}>Action 3</Button>
|
45
|
+
</View>);
|
46
|
+
},
|
47
|
+
play: async ({ canvas }) => {
|
48
|
+
const buttons = canvas.getAllByRole("button");
|
49
|
+
expect(buttons[0]).toHaveAttribute("tabindex", "0");
|
50
|
+
expect(buttons[1]).toHaveAttribute("tabindex", "-1");
|
51
|
+
expect(buttons[2]).toHaveAttribute("tabindex", "-1");
|
52
|
+
buttons[0].focus();
|
53
|
+
await userEvent.keyboard("{ArrowRight/}");
|
54
|
+
expect(document.activeElement).toBe(buttons[1]);
|
55
|
+
await userEvent.keyboard("{ArrowLeft/}");
|
56
|
+
expect(document.activeElement).toBe(buttons[0]);
|
57
|
+
await userEvent.keyboard("{ArrowDown/}");
|
58
|
+
expect(document.activeElement).toBe(buttons[0]);
|
59
|
+
await userEvent.keyboard("{ArrowUp/}");
|
60
|
+
expect(document.activeElement).toBe(buttons[0]);
|
61
|
+
},
|
62
|
+
};
|
63
|
+
export const vertical = {
|
64
|
+
name: "orientation: vertical",
|
65
|
+
render: () => {
|
66
|
+
const ref = useRef(null);
|
67
|
+
useKeyboardArrowNavigation({ ref, orientation: "vertical" });
|
68
|
+
return (<View gap={2} direction="column" attributes={{ ref }}>
|
69
|
+
<Button onClick={() => { }}>Action 1</Button>
|
70
|
+
<Button onClick={() => { }}>Action 2</Button>
|
71
|
+
<Button onClick={() => { }}>Action 3</Button>
|
72
|
+
</View>);
|
73
|
+
},
|
74
|
+
play: async ({ canvas }) => {
|
75
|
+
const buttons = canvas.getAllByRole("button");
|
76
|
+
buttons[0].focus();
|
77
|
+
await userEvent.keyboard("{ArrowDown/}");
|
78
|
+
expect(document.activeElement).toBe(buttons[1]);
|
79
|
+
await userEvent.keyboard("{ArrowUp/}");
|
80
|
+
expect(document.activeElement).toBe(buttons[0]);
|
81
|
+
await userEvent.keyboard("{ArrowRight/}");
|
82
|
+
expect(document.activeElement).toBe(buttons[0]);
|
83
|
+
await userEvent.keyboard("{ArrowLeft/}");
|
84
|
+
expect(document.activeElement).toBe(buttons[0]);
|
85
|
+
},
|
86
|
+
};
|
87
|
+
export const circular = {
|
88
|
+
name: "circular",
|
89
|
+
render: () => {
|
90
|
+
const ref = useRef(null);
|
91
|
+
useKeyboardArrowNavigation({ ref, circular: true });
|
92
|
+
return (<View gap={2} direction="row" attributes={{ ref }}>
|
93
|
+
<Button onClick={() => { }}>Action 1</Button>
|
94
|
+
<Button onClick={() => { }}>Action 2</Button>
|
95
|
+
<Button onClick={() => { }}>Action 3</Button>
|
96
|
+
</View>);
|
97
|
+
},
|
98
|
+
play: async ({ canvas }) => {
|
99
|
+
const buttons = canvas.getAllByRole("button");
|
100
|
+
buttons[0].focus();
|
101
|
+
await userEvent.keyboard("{ArrowRight/}");
|
102
|
+
await userEvent.keyboard("{ArrowRight/}");
|
103
|
+
expect(document.activeElement).toBe(buttons[2]);
|
104
|
+
await userEvent.keyboard("{ArrowRight/}");
|
105
|
+
expect(document.activeElement).toBe(buttons[0]);
|
106
|
+
await userEvent.keyboard("{ArrowLeft/}");
|
107
|
+
expect(document.activeElement).toBe(buttons[2]);
|
108
|
+
},
|
109
|
+
};
|
110
|
+
export const disabled = {
|
111
|
+
name: "disabled",
|
112
|
+
render: () => {
|
113
|
+
const ref = useRef(null);
|
114
|
+
useKeyboardArrowNavigation({ ref, disabled: true });
|
115
|
+
return (<View gap={2} direction="row" attributes={{ ref }}>
|
116
|
+
<Button onClick={() => { }}>Action 1</Button>
|
117
|
+
<Button onClick={() => { }}>Action 2</Button>
|
118
|
+
<Button onClick={() => { }}>Action 3</Button>
|
119
|
+
</View>);
|
120
|
+
},
|
121
|
+
play: async ({ canvas }) => {
|
122
|
+
const buttons = canvas.getAllByRole("button");
|
123
|
+
buttons[0].focus();
|
124
|
+
await userEvent.keyboard("{ArrowRight/}");
|
125
|
+
expect(document.activeElement).toBe(buttons[0]);
|
126
|
+
expect(buttons[0]).not.toHaveAttribute("tabindex");
|
127
|
+
},
|
128
|
+
};
|