@dxc-technology/halstack-react 0.0.0-4e1277a → 0.0.0-4e3dbad
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/BackgroundColorContext.js +1 -1
- package/HalstackContext.d.ts +42 -5
- package/HalstackContext.js +28 -18
- package/accordion/Accordion.accessibility.test.d.ts +1 -0
- package/accordion/Accordion.accessibility.test.js +71 -0
- package/accordion/Accordion.js +16 -30
- package/accordion/Accordion.stories.tsx +7 -49
- package/accordion/Accordion.test.d.ts +1 -0
- package/accordion/Accordion.test.js +3 -3
- package/accordion/types.d.ts +1 -1
- package/accordion-group/AccordionGroup.accessibility.test.d.ts +1 -0
- package/accordion-group/AccordionGroup.accessibility.test.js +82 -0
- package/accordion-group/AccordionGroup.js +1 -1
- package/accordion-group/AccordionGroup.stories.tsx +23 -23
- package/accordion-group/AccordionGroup.test.d.ts +1 -0
- package/accordion-group/AccordionGroup.test.js +5 -9
- package/accordion-group/AccordionGroupAccordion.js +1 -1
- package/accordion-group/types.d.ts +1 -1
- package/action-icon/ActionIcon.accessibility.test.d.ts +1 -0
- package/action-icon/ActionIcon.accessibility.test.js +63 -0
- package/action-icon/ActionIcon.js +4 -3
- package/action-icon/ActionIcon.stories.tsx +3 -3
- package/action-icon/ActionIcon.test.d.ts +1 -0
- package/action-icon/ActionIcon.test.js +1 -1
- package/action-icon/types.d.ts +1 -1
- package/alert/Alert.accessibility.test.d.ts +1 -0
- package/alert/Alert.accessibility.test.js +95 -0
- package/alert/Alert.js +21 -72
- package/alert/Alert.test.d.ts +1 -0
- package/alert/Alert.test.js +1 -1
- package/badge/Badge.accessibility.test.d.ts +1 -0
- package/badge/Badge.accessibility.test.js +129 -0
- package/badge/Badge.js +6 -4
- package/badge/Badge.stories.tsx +11 -11
- package/badge/Badge.test.d.ts +1 -0
- package/badge/Badge.test.js +2 -2
- package/badge/types.d.ts +1 -1
- package/bar-chart/BarChart.d.ts +4 -0
- package/bar-chart/BarChart.js +152 -0
- package/bar-chart/BarChart.stories.tsx +281 -0
- package/bar-chart/BarChart.test.d.ts +1 -0
- package/bar-chart/BarChart.test.js +194 -0
- package/bar-chart/theme.d.ts +3 -0
- package/bar-chart/theme.js +31 -0
- package/bar-chart/types.d.ts +118 -0
- package/bar-chart/types.js +5 -0
- package/bleed/Bleed.stories.tsx +0 -1
- package/box/Box.accessibility.test.d.ts +1 -0
- package/box/Box.accessibility.test.js +33 -0
- package/box/Box.js +1 -1
- package/box/Box.test.d.ts +1 -0
- package/box/Box.test.js +1 -1
- package/breadcrumbs/Breadcrumbs.accessibility.test.d.ts +1 -0
- package/breadcrumbs/Breadcrumbs.accessibility.test.js +96 -0
- package/breadcrumbs/Breadcrumbs.d.ts +4 -0
- package/breadcrumbs/Breadcrumbs.js +79 -0
- package/breadcrumbs/Breadcrumbs.stories.tsx +194 -0
- package/breadcrumbs/Breadcrumbs.test.d.ts +1 -0
- package/breadcrumbs/Breadcrumbs.test.js +168 -0
- package/breadcrumbs/Item.d.ts +4 -0
- package/breadcrumbs/Item.js +52 -0
- package/breadcrumbs/dropdownTheme.d.ts +53 -0
- package/breadcrumbs/dropdownTheme.js +62 -0
- package/breadcrumbs/types.d.ts +40 -0
- package/breadcrumbs/types.js +5 -0
- package/bulleted-list/BulletedList.accessibility.test.d.ts +1 -0
- package/bulleted-list/BulletedList.accessibility.test.js +119 -0
- package/bulleted-list/BulletedList.js +7 -4
- package/bulleted-list/BulletedList.stories.tsx +1 -1
- package/button/Button.accessibility.test.d.ts +1 -0
- package/button/Button.accessibility.test.js +127 -0
- package/button/Button.js +2 -2
- package/button/Button.stories.tsx +3 -4
- package/button/Button.test.d.ts +1 -0
- package/button/Button.test.js +1 -1
- package/card/Card.accessibility.test.d.ts +1 -0
- package/card/Card.accessibility.test.js +36 -0
- package/card/Card.js +3 -2
- package/card/Card.stories.tsx +1 -1
- package/card/Card.test.d.ts +1 -0
- package/card/Card.test.js +1 -1
- package/checkbox/Checkbox.accessibility.test.d.ts +1 -0
- package/checkbox/Checkbox.accessibility.test.js +87 -0
- package/checkbox/Checkbox.js +10 -13
- package/checkbox/Checkbox.test.d.ts +1 -0
- package/checkbox/Checkbox.test.js +1 -1
- package/chip/Chip.accessibility.test.d.ts +1 -0
- package/chip/Chip.accessibility.test.js +67 -0
- package/chip/Chip.js +11 -6
- package/chip/Chip.stories.tsx +6 -25
- package/chip/Chip.test.d.ts +1 -0
- package/chip/Chip.test.js +5 -5
- package/common/coreTokens.d.ts +0 -1
- package/common/coreTokens.js +3 -4
- package/common/variables.d.ts +48 -5
- package/common/variables.js +110 -73
- package/container/Container.stories.tsx +3 -3
- package/container/types.d.ts +113 -11
- package/contextual-menu/ContextualMenu.accessibility.test.d.ts +1 -0
- package/contextual-menu/ContextualMenu.accessibility.test.js +98 -0
- package/contextual-menu/ContextualMenu.d.ts +3 -5
- package/contextual-menu/ContextualMenu.js +118 -53
- package/contextual-menu/ContextualMenu.stories.tsx +124 -75
- package/contextual-menu/ContextualMenu.test.d.ts +1 -0
- package/contextual-menu/ContextualMenu.test.js +200 -24
- package/contextual-menu/GroupItem.d.ts +4 -0
- package/contextual-menu/GroupItem.js +67 -0
- package/contextual-menu/ItemAction.d.ts +4 -0
- package/contextual-menu/ItemAction.js +88 -0
- package/contextual-menu/MenuItem.d.ts +4 -0
- package/contextual-menu/MenuItem.js +29 -0
- package/contextual-menu/SingleItem.d.ts +4 -0
- package/contextual-menu/SingleItem.js +38 -0
- package/contextual-menu/types.d.ts +54 -11
- package/date-input/Calendar.js +47 -31
- package/date-input/DateInput.accessibility.test.d.ts +1 -0
- package/date-input/DateInput.accessibility.test.js +229 -0
- package/date-input/DateInput.js +28 -23
- package/date-input/DateInput.stories.tsx +18 -12
- package/date-input/DateInput.test.d.ts +1 -0
- package/date-input/DateInput.test.js +39 -39
- package/date-input/DatePicker.js +13 -7
- package/date-input/YearPicker.js +10 -5
- package/dialog/Dialog.accessibility.test.d.ts +1 -0
- package/dialog/Dialog.accessibility.test.js +69 -0
- package/dialog/Dialog.js +9 -20
- package/dialog/Dialog.stories.tsx +8 -4
- package/dialog/Dialog.test.d.ts +1 -0
- package/dialog/Dialog.test.js +112 -49
- package/divider/Divider.accessibility.test.d.ts +1 -0
- package/divider/Divider.accessibility.test.js +33 -0
- package/divider/Divider.stories.tsx +2 -1
- package/divider/Divider.test.d.ts +1 -0
- package/dropdown/Dropdown.accessibility.test.d.ts +1 -0
- package/dropdown/Dropdown.accessibility.test.js +183 -0
- package/dropdown/Dropdown.js +31 -66
- package/dropdown/Dropdown.stories.tsx +16 -27
- package/dropdown/Dropdown.test.d.ts +1 -0
- package/dropdown/Dropdown.test.js +101 -72
- package/dropdown/DropdownMenu.js +4 -4
- package/dropdown/DropdownMenuItem.js +8 -4
- package/dropdown/types.d.ts +2 -4
- package/file-input/FileInput.accessibility.test.d.ts +1 -0
- package/file-input/FileInput.accessibility.test.js +167 -0
- package/file-input/FileInput.js +6 -47
- package/file-input/FileInput.test.d.ts +1 -0
- package/file-input/FileInput.test.js +51 -106
- package/file-input/FileItem.js +18 -28
- package/file-input/types.d.ts +0 -4
- package/footer/Footer.accessibility.test.d.ts +1 -0
- package/footer/Footer.accessibility.test.js +125 -0
- package/footer/Footer.js +8 -6
- package/footer/Footer.stories.tsx +40 -3
- package/footer/Footer.test.d.ts +1 -0
- package/footer/Footer.test.js +1 -1
- package/footer/Icons.js +2 -30
- package/footer/types.d.ts +1 -1
- package/grid/Grid.stories.tsx +3 -1
- package/header/Header.accessibility.test.d.ts +1 -0
- package/header/Header.accessibility.test.js +94 -0
- package/header/Header.js +12 -22
- package/header/Header.stories.tsx +17 -1
- package/header/Header.test.d.ts +1 -0
- package/header/Header.test.js +1 -1
- package/header/Icons.js +1 -6
- package/heading/Heading.accessibility.test.d.ts +1 -0
- package/heading/Heading.accessibility.test.js +33 -0
- package/heading/Heading.js +1 -1
- package/heading/Heading.test.d.ts +1 -0
- package/heading/Heading.test.js +1 -14
- package/icon/Icon.accessibility.test.d.ts +1 -0
- package/icon/Icon.accessibility.test.js +30 -0
- package/icon/Icon.js +1 -1
- package/icon/Icon.stories.tsx +6 -4
- package/image/Image.accessibility.test.d.ts +1 -0
- package/image/Image.accessibility.test.js +56 -0
- package/image/Image.js +1 -1
- package/layout/ApplicationLayout.js +9 -6
- package/layout/Icons.d.ts +0 -1
- package/layout/Icons.js +1 -11
- package/link/Link.accessibility.test.d.ts +1 -0
- package/link/Link.accessibility.test.js +108 -0
- package/link/Link.js +8 -6
- package/link/Link.stories.tsx +4 -4
- package/link/Link.test.d.ts +1 -0
- package/link/Link.test.js +1 -1
- package/link/types.d.ts +1 -1
- package/main.d.ts +3 -1
- package/main.js +15 -1
- package/nav-tabs/NavTabs.accessibility.test.d.ts +1 -0
- package/nav-tabs/NavTabs.accessibility.test.js +44 -0
- package/nav-tabs/NavTabs.js +19 -4
- package/nav-tabs/NavTabs.stories.tsx +41 -23
- package/nav-tabs/NavTabs.test.d.ts +1 -0
- package/nav-tabs/NavTabs.test.js +10 -9
- package/nav-tabs/Tab.js +17 -18
- package/nav-tabs/types.d.ts +1 -1
- package/number-input/NumberInput.accessibility.test.d.ts +1 -0
- package/number-input/NumberInput.accessibility.test.js +227 -0
- package/number-input/NumberInput.js +6 -3
- package/number-input/NumberInput.stories.tsx +11 -16
- package/number-input/NumberInput.test.d.ts +1 -0
- package/number-input/NumberInput.test.js +6 -7
- package/package.json +34 -28
- package/paginator/Paginator.accessibility.test.d.ts +1 -0
- package/paginator/Paginator.accessibility.test.js +78 -0
- package/paginator/Paginator.js +13 -10
- package/paginator/Paginator.test.d.ts +1 -0
- package/paginator/Paginator.test.js +2 -3
- package/paragraph/Paragraph.accessibility.test.d.ts +1 -0
- package/paragraph/Paragraph.accessibility.test.js +28 -0
- package/password-input/PasswordInput.accessibility.test.d.ts +1 -0
- package/password-input/PasswordInput.accessibility.test.js +152 -0
- package/password-input/PasswordInput.js +11 -8
- package/password-input/PasswordInput.stories.tsx +10 -1
- package/password-input/PasswordInput.test.d.ts +1 -0
- package/password-input/PasswordInput.test.js +6 -7
- package/progress-bar/ProgressBar.accessibility.test.d.ts +1 -0
- package/progress-bar/ProgressBar.accessibility.test.js +35 -0
- package/progress-bar/ProgressBar.js +6 -4
- package/progress-bar/ProgressBar.test.d.ts +1 -0
- package/progress-bar/ProgressBar.test.js +1 -1
- package/quick-nav/QuickNav.accessibility.test.d.ts +1 -0
- package/quick-nav/QuickNav.accessibility.test.js +57 -0
- package/quick-nav/QuickNav.js +1 -1
- package/radio-group/Radio.js +6 -9
- package/radio-group/RadioGroup.accessibility.test.d.ts +1 -0
- package/radio-group/RadioGroup.accessibility.test.js +97 -0
- package/radio-group/RadioGroup.js +14 -16
- package/radio-group/RadioGroup.test.d.ts +1 -0
- package/radio-group/RadioGroup.test.js +3 -5
- package/resultset-table/ResultsetTable.accessibility.test.d.ts +1 -0
- package/resultset-table/ResultsetTable.accessibility.test.js +284 -0
- package/resultset-table/ResultsetTable.d.ts +1 -1
- package/resultset-table/ResultsetTable.js +47 -15
- package/resultset-table/ResultsetTable.stories.tsx +19 -3
- package/resultset-table/ResultsetTable.test.d.ts +1 -0
- package/resultset-table/ResultsetTable.test.js +111 -32
- package/resultset-table/types.d.ts +41 -13
- package/select/Listbox.d.ts +3 -3
- package/select/Listbox.js +33 -29
- package/select/Option.d.ts +3 -3
- package/select/Option.js +21 -15
- package/select/Select.accessibility.test.d.ts +1 -0
- package/select/Select.accessibility.test.js +227 -0
- package/select/Select.js +85 -192
- package/select/Select.stories.tsx +74 -117
- package/select/Select.test.d.ts +1 -0
- package/select/Select.test.js +348 -550
- package/select/selectUtils.d.ts +41 -0
- package/select/selectUtils.js +129 -0
- package/select/types.d.ts +1 -1
- package/sidenav/Sidenav.accessibility.test.d.ts +1 -0
- package/sidenav/Sidenav.accessibility.test.js +59 -0
- package/sidenav/Sidenav.js +16 -12
- package/sidenav/Sidenav.stories.tsx +5 -10
- package/sidenav/Sidenav.test.d.ts +1 -0
- package/sidenav/Sidenav.test.js +1 -1
- package/sidenav/types.d.ts +2 -2
- package/slider/Slider.accessibility.test.d.ts +1 -0
- package/slider/Slider.accessibility.test.js +103 -0
- package/slider/Slider.js +11 -13
- package/slider/Slider.stories.tsx +180 -0
- package/slider/Slider.test.d.ts +1 -0
- package/slider/Slider.test.js +13 -11
- package/spinner/Spinner.accessibility.test.d.ts +1 -0
- package/spinner/Spinner.accessibility.test.js +96 -0
- package/spinner/Spinner.d.ts +1 -1
- package/spinner/Spinner.js +32 -47
- package/spinner/Spinner.test.d.ts +1 -0
- package/spinner/Spinner.test.js +1 -1
- package/status-light/StatusLight.accessibility.test.d.ts +1 -0
- package/status-light/StatusLight.accessibility.test.js +157 -0
- package/status-light/StatusLight.test.d.ts +1 -0
- package/status-light/StatusLight.test.js +1 -1
- package/switch/Switch.accessibility.test.d.ts +1 -0
- package/switch/Switch.accessibility.test.js +98 -0
- package/switch/Switch.js +6 -9
- package/switch/Switch.stories.tsx +12 -0
- package/switch/Switch.test.d.ts +1 -0
- package/switch/Switch.test.js +1 -1
- package/table/Table.accessibility.test.d.ts +1 -0
- package/table/Table.accessibility.test.js +92 -0
- package/table/Table.js +2 -11
- package/table/Table.stories.tsx +15 -10
- package/table/Table.test.d.ts +1 -0
- package/table/Table.test.js +2 -4
- package/table/types.d.ts +1 -15
- package/tabs/Tab.js +6 -5
- package/tabs/Tabs.accessibility.test.d.ts +1 -0
- package/tabs/Tabs.accessibility.test.js +56 -0
- package/tabs/Tabs.js +9 -20
- package/tabs/Tabs.stories.tsx +7 -3
- package/tabs/Tabs.test.d.ts +1 -0
- package/tabs/Tabs.test.js +20 -38
- package/tabs/types.d.ts +2 -2
- package/tag/Tag.accessibility.test.d.ts +1 -0
- package/tag/Tag.accessibility.test.js +69 -0
- package/tag/Tag.js +7 -7
- package/tag/Tag.stories.tsx +5 -8
- package/tag/Tag.test.d.ts +1 -0
- package/tag/Tag.test.js +5 -13
- package/tag/types.d.ts +2 -2
- package/text-input/Suggestion.js +1 -1
- package/text-input/Suggestions.js +17 -7
- package/text-input/TextInput.accessibility.test.d.ts +1 -0
- package/text-input/TextInput.accessibility.test.js +320 -0
- package/text-input/TextInput.js +56 -73
- package/text-input/TextInput.stories.tsx +20 -8
- package/text-input/TextInput.test.d.ts +1 -0
- package/text-input/TextInput.test.js +2 -3
- package/textarea/Textarea.accessibility.test.d.ts +1 -0
- package/textarea/Textarea.accessibility.test.js +155 -0
- package/textarea/Textarea.js +14 -13
- package/textarea/Textarea.test.d.ts +1 -0
- package/textarea/Textarea.test.js +1 -1
- package/toggle-group/ToggleGroup.accessibility.test.d.ts +1 -0
- package/toggle-group/ToggleGroup.accessibility.test.js +107 -0
- package/toggle-group/ToggleGroup.js +10 -12
- package/toggle-group/ToggleGroup.stories.tsx +4 -4
- package/toggle-group/ToggleGroup.test.d.ts +1 -0
- package/toggle-group/ToggleGroup.test.js +1 -1
- package/toggle-group/types.d.ts +2 -2
- package/tooltip/Tooltip.accessibility.test.d.ts +1 -0
- package/tooltip/Tooltip.accessibility.test.js +144 -0
- package/tooltip/Tooltip.d.ts +4 -0
- package/tooltip/Tooltip.js +50 -0
- package/tooltip/Tooltip.stories.tsx +111 -0
- package/tooltip/Tooltip.test.d.ts +1 -0
- package/tooltip/Tooltip.test.js +112 -0
- package/tooltip/types.d.ts +16 -0
- package/tooltip/types.js +5 -0
- package/typography/Typography.accessibility.test.d.ts +1 -0
- package/typography/Typography.accessibility.test.js +339 -0
- package/typography/Typography.stories.tsx +1 -3
- package/typography/Typography.test.js +23 -0
- package/useTheme.d.ts +31 -5
- package/useTranslatedLabels.d.ts +11 -0
- package/utils/BaseTypography.js +45 -41
- package/utils/FocusLock.js +3 -2
- package/utils/useWidth.d.ts +2 -0
- package/utils/useWidth.js +30 -0
- package/wizard/Wizard.accessibility.test.d.ts +1 -0
- package/wizard/Wizard.accessibility.test.js +55 -0
- package/wizard/Wizard.js +14 -25
- package/wizard/Wizard.stories.tsx +20 -1
- package/wizard/Wizard.test.d.ts +1 -0
- package/wizard/Wizard.test.js +1 -1
- package/wizard/types.d.ts +1 -1
- package/contextual-menu/MenuItemAction.d.ts +0 -4
- package/contextual-menu/MenuItemAction.js +0 -46
- package/date-input/Icons.d.ts +0 -6
- package/date-input/Icons.js +0 -58
- package/paginator/Icons.d.ts +0 -5
- package/paginator/Icons.js +0 -40
- package/password-input/Icons.d.ts +0 -6
- package/password-input/Icons.js +0 -35
- package/select/Icons.d.ts +0 -10
- package/select/Icons.js +0 -89
- package/sidenav/Icons.d.ts +0 -7
- package/sidenav/Icons.js +0 -47
- package/text-input/Icons.d.ts +0 -8
- package/text-input/Icons.js +0 -56
|
@@ -1,32 +1,36 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import Title from "../../.storybook/components/Title";
|
|
3
|
-
import DxcContextualMenu from "./ContextualMenu";
|
|
3
|
+
import DxcContextualMenu, { ContextualMenuContext } from "./ContextualMenu";
|
|
4
4
|
import DxcContainer from "../container/Container";
|
|
5
|
-
import
|
|
5
|
+
import SingleItem from "./SingleItem";
|
|
6
6
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
7
|
+
import DxcBadge from "../badge/Badge";
|
|
8
|
+
import { disabledRules } from "../../test/accessibility/rules/specific/contextual-menu/disabledRules";
|
|
9
|
+
import preview from "../../.storybook/preview";
|
|
10
|
+
import { ThemeProvider } from "styled-components";
|
|
11
|
+
import useTheme from "../useTheme";
|
|
7
12
|
|
|
8
13
|
export default {
|
|
9
14
|
title: "Contextual Menu",
|
|
10
15
|
component: DxcContextualMenu,
|
|
16
|
+
parameters: {
|
|
17
|
+
// TODO: REMOVE
|
|
18
|
+
a11y: {
|
|
19
|
+
config: {
|
|
20
|
+
rules: [
|
|
21
|
+
...disabledRules.map((ruleId) => ({ id: ruleId, reviewOnFail: true })),
|
|
22
|
+
...preview?.parameters?.a11y?.config?.rules,
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
11
27
|
};
|
|
12
28
|
|
|
13
|
-
const key_icon = (
|
|
14
|
-
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
|
|
15
|
-
<path d="M280-400q-33 0-56.5-23.5T200-480q0-33 23.5-56.5T280-560q33 0 56.5 23.5T360-480q0 33-23.5 56.5T280-400Zm0 160q-100 0-170-70T40-480q0-100 70-170t170-70q67 0 121.5 33t86.5 87h352l120 120-180 180-80-60-80 60-85-60h-47q-32 54-86.5 87T280-240Zm0-80q56 0 98.5-34t56.5-86h125l58 41 82-61 71 55 75-75-40-40H435q-14-52-56.5-86T280-640q-66 0-113 47t-47 113q0 66 47 113t113 47Z" />
|
|
16
|
-
</svg>
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
const fav_icon = (
|
|
20
|
-
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
|
|
21
|
-
<path d="m480-120-58-52q-101-91-167-157T150-447.5Q111-500 95.5-544T80-634q0-94 63-157t157-63q52 0 99 22t81 62q34-40 81-62t99-22q94 0 157 63t63 157q0 46-15.5 90T810-447.5Q771-395 705-329T538-172l-58 52Zm0-108q96-86 158-147.5t98-107q36-45.5 50-81t14-70.5q0-60-40-100t-100-40q-47 0-87 26.5T518-680h-76q-15-41-55-67.5T300-774q-60 0-100 40t-40 100q0 35 14 70.5t50 81q36 45.5 98 107T480-228Zm0-273Z" />
|
|
22
|
-
</svg>
|
|
23
|
-
);
|
|
24
|
-
|
|
25
29
|
const items = [{ label: "Item 1" }, { label: "Item 2" }, { label: "Item 3" }, { label: "Item 4" }];
|
|
26
30
|
|
|
27
31
|
const sections = [
|
|
28
32
|
{
|
|
29
|
-
title: "
|
|
33
|
+
title: "Section title",
|
|
30
34
|
items: [{ label: "Approved locations" }, { label: "Approved locations" }, { label: "Approved locations" }],
|
|
31
35
|
},
|
|
32
36
|
{
|
|
@@ -34,32 +38,65 @@ const sections = [
|
|
|
34
38
|
},
|
|
35
39
|
];
|
|
36
40
|
|
|
41
|
+
const groupItems = [
|
|
42
|
+
{
|
|
43
|
+
title: "Section 1",
|
|
44
|
+
items: [
|
|
45
|
+
{
|
|
46
|
+
label: "Grouped Item 1",
|
|
47
|
+
icon: "favorite",
|
|
48
|
+
items: [
|
|
49
|
+
{ label: "Item 1" },
|
|
50
|
+
{
|
|
51
|
+
label: "Grouped Item 2",
|
|
52
|
+
items: [
|
|
53
|
+
{
|
|
54
|
+
label: "Item 2",
|
|
55
|
+
icon: "bookmark",
|
|
56
|
+
badge: <DxcBadge color="purple" label="Experimental" />,
|
|
57
|
+
},
|
|
58
|
+
{ label: "Selected Item 3", selectedByDefault: true },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
badge: <DxcBadge color="green" label="New" />,
|
|
63
|
+
},
|
|
64
|
+
{ label: "Item 4", icon: "key" },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
title: "Section 2",
|
|
69
|
+
items: [
|
|
70
|
+
{ label: "Item 5" },
|
|
71
|
+
{ label: "Grouped Item 6", items: [{ label: "Item 7" }, { label: "Item 8" }] },
|
|
72
|
+
{ label: "Item 9" },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
|
|
37
77
|
const itemsWithIcon = [
|
|
38
78
|
{
|
|
39
79
|
label: "Item 1",
|
|
40
|
-
icon:
|
|
80
|
+
icon: (
|
|
81
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
|
|
82
|
+
<path d="M200-120v-640q0-33 23.5-56.5T280-840h400q33 0 56.5 23.5T760-760v640L480-240 200-120Zm80-122 200-86 200 86v-518H280v518Zm0-518h400-400Z" />
|
|
83
|
+
</svg>
|
|
84
|
+
),
|
|
41
85
|
},
|
|
42
86
|
{
|
|
43
87
|
label: "Item 2",
|
|
44
|
-
icon:
|
|
88
|
+
icon: "star",
|
|
45
89
|
},
|
|
46
90
|
];
|
|
47
91
|
|
|
48
|
-
const
|
|
92
|
+
const itemsWithBadge = [
|
|
49
93
|
{
|
|
50
94
|
label: "Item 1",
|
|
51
|
-
|
|
95
|
+
badge: <DxcBadge color="green" label="New" />,
|
|
52
96
|
},
|
|
53
97
|
{
|
|
54
98
|
label: "Item 2",
|
|
55
|
-
|
|
56
|
-
<svg width="12" height="12" viewBox="0 0 12 12" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
57
|
-
<path
|
|
58
|
-
d="M10.6667 10.6667H1.33333V1.33333H6V0H1.33333C0.593333 0 0 0.6 0 1.33333V10.6667C0 11.4 0.593333 12 1.33333 12H10.6667C11.4 12 12 11.4 12 10.6667V6H10.6667V10.6667ZM7.33333 0V1.33333H9.72667L3.17333 7.88667L4.11333 8.82667L10.6667 2.27333V4.66667H12V0H7.33333Z"
|
|
59
|
-
fill="#323232"
|
|
60
|
-
/>
|
|
61
|
-
</svg>
|
|
62
|
-
),
|
|
99
|
+
badge: <DxcBadge color="purple" label="Experimental" />,
|
|
63
100
|
},
|
|
64
101
|
];
|
|
65
102
|
|
|
@@ -78,7 +115,7 @@ const sectionsWithScroll = [
|
|
|
78
115
|
{ label: "Approved locations" },
|
|
79
116
|
{ label: "Approved locations" },
|
|
80
117
|
{ label: "Approved locations" },
|
|
81
|
-
{ label: "Approved locations" },
|
|
118
|
+
{ label: "Approved locations", selectedByDefault: true },
|
|
82
119
|
],
|
|
83
120
|
},
|
|
84
121
|
];
|
|
@@ -86,20 +123,16 @@ const sectionsWithScroll = [
|
|
|
86
123
|
const itemsWithTruncatedText = [
|
|
87
124
|
{
|
|
88
125
|
label: "Item with a very long label that should be truncated",
|
|
89
|
-
|
|
90
|
-
icon:
|
|
126
|
+
badge: <DxcBadge color="green" label="New" />,
|
|
127
|
+
icon: (
|
|
128
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
|
|
129
|
+
<path d="M200-120v-640q0-33 23.5-56.5T280-840h400q33 0 56.5 23.5T760-760v640L480-240 200-120Zm80-122 200-86 200 86v-518H280v518Zm0-518h400-400Z" />
|
|
130
|
+
</svg>
|
|
131
|
+
),
|
|
91
132
|
},
|
|
92
133
|
{
|
|
93
134
|
label: "Item 2",
|
|
94
|
-
|
|
95
|
-
<svg width="12" height="12" viewBox="0 0 12 12" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
96
|
-
<path
|
|
97
|
-
d="M10.6667 10.6667H1.33333V1.33333H6V0H1.33333C0.593333 0 0 0.6 0 1.33333V10.6667C0 11.4 0.593333 12 1.33333 12H10.6667C11.4 12 12 11.4 12 10.6667V6H10.6667V10.6667ZM7.33333 0V1.33333H9.72667L3.17333 7.88667L4.11333 8.82667L10.6667 2.27333V4.66667H12V0H7.33333Z"
|
|
98
|
-
fill="#323232"
|
|
99
|
-
/>
|
|
100
|
-
</svg>
|
|
101
|
-
),
|
|
102
|
-
icon: fav_icon,
|
|
135
|
+
icon: "favorite",
|
|
103
136
|
},
|
|
104
137
|
];
|
|
105
138
|
|
|
@@ -115,16 +148,22 @@ export const Chromatic = () => (
|
|
|
115
148
|
<DxcContextualMenu items={sections} />
|
|
116
149
|
</DxcContainer>
|
|
117
150
|
</ExampleContainer>
|
|
151
|
+
<Title title="With group items" theme="light" level={3} />
|
|
152
|
+
<ExampleContainer>
|
|
153
|
+
<DxcContainer width="300px">
|
|
154
|
+
<DxcContextualMenu items={groupItems} />
|
|
155
|
+
</DxcContainer>
|
|
156
|
+
</ExampleContainer>
|
|
118
157
|
<Title title="With icons" theme="light" level={3} />
|
|
119
158
|
<ExampleContainer>
|
|
120
159
|
<DxcContainer width="300px">
|
|
121
|
-
<DxcContextualMenu items={itemsWithIcon}
|
|
160
|
+
<DxcContextualMenu items={itemsWithIcon} />
|
|
122
161
|
</DxcContainer>
|
|
123
162
|
</ExampleContainer>
|
|
124
|
-
<Title title="With
|
|
163
|
+
<Title title="With badge" theme="light" level={3} />
|
|
125
164
|
<ExampleContainer>
|
|
126
165
|
<DxcContainer width="300px">
|
|
127
|
-
<DxcContextualMenu items={
|
|
166
|
+
<DxcContextualMenu items={itemsWithBadge} />
|
|
128
167
|
</DxcContainer>
|
|
129
168
|
</ExampleContainer>
|
|
130
169
|
<Title title="With label truncated" theme="light" level={3} />
|
|
@@ -133,7 +172,7 @@ export const Chromatic = () => (
|
|
|
133
172
|
<DxcContextualMenu items={itemsWithTruncatedText} />
|
|
134
173
|
</DxcContainer>
|
|
135
174
|
</ExampleContainer>
|
|
136
|
-
<Title title="With scroll" theme="light" level={3} />
|
|
175
|
+
<Title title="With auto-scroll" theme="light" level={3} />
|
|
137
176
|
<ExampleContainer>
|
|
138
177
|
<DxcContainer height="300px" width="300px">
|
|
139
178
|
<DxcContextualMenu items={sectionsWithScroll} />
|
|
@@ -148,35 +187,45 @@ export const Chromatic = () => (
|
|
|
148
187
|
</>
|
|
149
188
|
);
|
|
150
189
|
|
|
151
|
-
export const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
190
|
+
export const SingleItemStates = () => {
|
|
191
|
+
const colorsTheme = useTheme();
|
|
192
|
+
|
|
193
|
+
return (
|
|
194
|
+
<ThemeProvider theme={colorsTheme.contextualMenu}>
|
|
195
|
+
<DxcContainer width="300px">
|
|
196
|
+
<ContextualMenuContext.Provider value={{ selectedItemId: -1, setSelectedItemId: () => {} }}>
|
|
197
|
+
<Title title="Default" theme="light" level={3} />
|
|
198
|
+
<ExampleContainer>
|
|
199
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
200
|
+
</ExampleContainer>
|
|
201
|
+
<Title title="Focus" theme="light" level={3} />
|
|
202
|
+
<ExampleContainer pseudoState="pseudo-focus">
|
|
203
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
204
|
+
</ExampleContainer>
|
|
205
|
+
<Title title="Hover" theme="light" level={3} />
|
|
206
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
207
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
208
|
+
</ExampleContainer>
|
|
209
|
+
<Title title="Active" theme="light" level={3} />
|
|
210
|
+
<ExampleContainer pseudoState="pseudo-active">
|
|
211
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
212
|
+
</ExampleContainer>
|
|
213
|
+
</ContextualMenuContext.Provider>
|
|
214
|
+
<ContextualMenuContext.Provider value={{ selectedItemId: 0, setSelectedItemId: () => {} }}>
|
|
215
|
+
<Title title="Selected" theme="light" level={3} />
|
|
216
|
+
<ExampleContainer>
|
|
217
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
218
|
+
</ExampleContainer>
|
|
219
|
+
<Title title="Selected hover" theme="light" level={3} />
|
|
220
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
221
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
222
|
+
</ExampleContainer>
|
|
223
|
+
<Title title="Selected active" theme="light" level={3} />
|
|
224
|
+
<ExampleContainer pseudoState="pseudo-active">
|
|
225
|
+
<SingleItem {...items[0]} id={0} depthLevel={0} />
|
|
226
|
+
</ExampleContainer>
|
|
227
|
+
</ContextualMenuContext.Provider>
|
|
228
|
+
</DxcContainer>
|
|
229
|
+
</ThemeProvider>
|
|
230
|
+
);
|
|
231
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
4
6
|
var _react = _interopRequireDefault(require("react"));
|
|
5
7
|
var _react2 = require("@testing-library/react");
|
|
6
|
-
var
|
|
8
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
9
|
+
var _ContextualMenu = _interopRequireDefault(require("./ContextualMenu"));
|
|
7
10
|
var items = [{
|
|
8
11
|
label: "Item 1"
|
|
9
12
|
}, {
|
|
@@ -31,39 +34,212 @@ var sections = [{
|
|
|
31
34
|
label: "Approved locations"
|
|
32
35
|
}]
|
|
33
36
|
}];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
var groups = [{
|
|
38
|
+
label: "Grouped Item 1",
|
|
39
|
+
items: [{
|
|
40
|
+
label: "Item 1"
|
|
41
|
+
}, {
|
|
42
|
+
label: "Grouped Item 2",
|
|
43
|
+
items: [{
|
|
44
|
+
label: "Item 2"
|
|
45
|
+
}, {
|
|
46
|
+
label: "Item 3"
|
|
47
|
+
}]
|
|
48
|
+
}]
|
|
49
|
+
}, {
|
|
50
|
+
label: "Item 4",
|
|
51
|
+
icon: "key"
|
|
52
|
+
}, {
|
|
53
|
+
label: "Grouped Item 3",
|
|
54
|
+
items: [{
|
|
55
|
+
label: "Item 6"
|
|
56
|
+
}, {
|
|
57
|
+
label: "Item 7"
|
|
58
|
+
}]
|
|
59
|
+
}, {
|
|
60
|
+
label: "Item 8"
|
|
61
|
+
}];
|
|
62
|
+
describe("Contextual menu component tests", function () {
|
|
63
|
+
test("Single - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
64
|
+
var _render, getAllByRole, getByRole, actions;
|
|
65
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
66
|
+
while (1) switch (_context.prev = _context.next) {
|
|
67
|
+
case 0:
|
|
68
|
+
_render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
69
|
+
items: items
|
|
70
|
+
})), getAllByRole = _render.getAllByRole, getByRole = _render.getByRole;
|
|
71
|
+
expect(getAllByRole("menuitem").length).toBe(4);
|
|
72
|
+
actions = getAllByRole("button");
|
|
73
|
+
_context.next = 5;
|
|
74
|
+
return _userEvent["default"].click(actions[0]);
|
|
75
|
+
case 5:
|
|
76
|
+
expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
|
|
77
|
+
expect(getByRole("menu")).toBeTruthy();
|
|
78
|
+
case 7:
|
|
79
|
+
case "end":
|
|
80
|
+
return _context.stop();
|
|
81
|
+
}
|
|
82
|
+
}, _callee);
|
|
83
|
+
})));
|
|
84
|
+
test("Single - An item can appear as selected by default by using the attribute selectedByDefault", function () {
|
|
85
|
+
var test = [{
|
|
86
|
+
label: "Tested item",
|
|
87
|
+
selectedByDefault: true
|
|
88
|
+
}];
|
|
89
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
90
|
+
items: test
|
|
39
91
|
})),
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
expect(
|
|
43
|
-
var actions = getAllByRole("button");
|
|
44
|
-
expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
|
|
45
|
-
expect(getByRole("menu")).toBeTruthy();
|
|
92
|
+
getByRole = _render2.getByRole;
|
|
93
|
+
var item = getByRole("button");
|
|
94
|
+
expect(item.getAttribute("aria-selected")).toBeTruthy();
|
|
46
95
|
});
|
|
47
|
-
test("
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
|
|
96
|
+
test("Group - Group items collapse when clicked", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
97
|
+
var _render3, queryByText, getByText;
|
|
98
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
99
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
100
|
+
case 0:
|
|
101
|
+
_render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
102
|
+
items: groups
|
|
103
|
+
})), queryByText = _render3.queryByText, getByText = _render3.getByText;
|
|
104
|
+
_context2.next = 3;
|
|
105
|
+
return _userEvent["default"].click(getByText("Grouped Item 1"));
|
|
106
|
+
case 3:
|
|
107
|
+
expect(getByText("Item 1")).toBeTruthy();
|
|
108
|
+
expect(getByText("Grouped Item 2")).toBeTruthy();
|
|
109
|
+
_context2.next = 7;
|
|
110
|
+
return _userEvent["default"].click(getByText("Grouped Item 2"));
|
|
111
|
+
case 7:
|
|
112
|
+
expect(getByText("Item 2")).toBeTruthy();
|
|
113
|
+
expect(getByText("Item 3")).toBeTruthy();
|
|
114
|
+
_context2.next = 11;
|
|
115
|
+
return _userEvent["default"].click(getByText("Grouped Item 1"));
|
|
116
|
+
case 11:
|
|
117
|
+
expect(queryByText("Item 1")).toBeFalsy();
|
|
118
|
+
expect(queryByText("Item 2")).toBeFalsy();
|
|
119
|
+
expect(queryByText("Item 3")).toBeFalsy();
|
|
120
|
+
case 14:
|
|
121
|
+
case "end":
|
|
122
|
+
return _context2.stop();
|
|
123
|
+
}
|
|
124
|
+
}, _callee2);
|
|
125
|
+
})));
|
|
126
|
+
test("Group - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
127
|
+
var _render4, getAllByRole, group1, optionToBeClicked;
|
|
128
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
129
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
130
|
+
case 0:
|
|
131
|
+
_render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
132
|
+
items: groups
|
|
133
|
+
})), getAllByRole = _render4.getAllByRole;
|
|
134
|
+
group1 = getAllByRole("button")[0];
|
|
135
|
+
_context3.next = 4;
|
|
136
|
+
return _userEvent["default"].click(group1);
|
|
137
|
+
case 4:
|
|
138
|
+
expect(group1.getAttribute("aria-expanded")).toBeTruthy();
|
|
139
|
+
expect(group1.getAttribute("aria-controls")).toBe(getAllByRole("list")[0].id);
|
|
140
|
+
_context3.next = 8;
|
|
141
|
+
return _userEvent["default"].click(getAllByRole("button")[2]);
|
|
142
|
+
case 8:
|
|
143
|
+
_context3.next = 10;
|
|
144
|
+
return _userEvent["default"].click(getAllByRole("button")[6]);
|
|
145
|
+
case 10:
|
|
146
|
+
expect(getAllByRole("menuitem").length).toBe(10);
|
|
147
|
+
optionToBeClicked = getAllByRole("button")[4];
|
|
148
|
+
_context3.next = 14;
|
|
149
|
+
return _userEvent["default"].click(optionToBeClicked);
|
|
150
|
+
case 14:
|
|
151
|
+
expect(optionToBeClicked.getAttribute("aria-selected")).toBeTruthy();
|
|
152
|
+
case 15:
|
|
153
|
+
case "end":
|
|
154
|
+
return _context3.stop();
|
|
155
|
+
}
|
|
156
|
+
}, _callee3);
|
|
157
|
+
})));
|
|
158
|
+
test("Group - A grouped item, selected by default, must be visible (expanded group) in the first render of the component", function () {
|
|
159
|
+
var test = [{
|
|
160
|
+
label: "Grouped item",
|
|
161
|
+
items: [{
|
|
162
|
+
label: "Tested item",
|
|
163
|
+
selectedByDefault: true
|
|
164
|
+
}]
|
|
165
|
+
}];
|
|
166
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
167
|
+
items: test
|
|
51
168
|
})),
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
expect(
|
|
56
|
-
expect(getAllByRole("group").length).toBe(2);
|
|
169
|
+
getByText = _render5.getByText,
|
|
170
|
+
getAllByRole = _render5.getAllByRole;
|
|
171
|
+
expect(getByText("Tested item")).toBeTruthy();
|
|
172
|
+
expect(getAllByRole("button")[1].getAttribute("aria-selected")).toBeTruthy();
|
|
57
173
|
});
|
|
58
|
-
test("
|
|
174
|
+
test("Group - Collapsed groups render as selected when containing a selected item", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
175
|
+
var _render6, getAllByRole, group1, group2, item;
|
|
176
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
177
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
178
|
+
case 0:
|
|
179
|
+
_render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
180
|
+
items: groups
|
|
181
|
+
})), getAllByRole = _render6.getAllByRole;
|
|
182
|
+
group1 = getAllByRole("button")[0];
|
|
183
|
+
_context4.next = 4;
|
|
184
|
+
return _userEvent["default"].click(group1);
|
|
185
|
+
case 4:
|
|
186
|
+
group2 = getAllByRole("button")[2];
|
|
187
|
+
_context4.next = 7;
|
|
188
|
+
return _userEvent["default"].click(group2);
|
|
189
|
+
case 7:
|
|
190
|
+
item = getAllByRole("button")[3];
|
|
191
|
+
_context4.next = 10;
|
|
192
|
+
return _userEvent["default"].click(item);
|
|
193
|
+
case 10:
|
|
194
|
+
expect(item.getAttribute("aria-selected")).toBeTruthy();
|
|
195
|
+
expect(group1.getAttribute("aria-selected")).toBe("false");
|
|
196
|
+
expect(group2.getAttribute("aria-selected")).toBe("false");
|
|
197
|
+
_context4.next = 15;
|
|
198
|
+
return _userEvent["default"].click(group2);
|
|
199
|
+
case 15:
|
|
200
|
+
expect(group2.getAttribute("aria-selected")).toBe("true");
|
|
201
|
+
_context4.next = 18;
|
|
202
|
+
return _userEvent["default"].click(group1);
|
|
203
|
+
case 18:
|
|
204
|
+
expect(group1.getAttribute("aria-selected")).toBe("true");
|
|
205
|
+
case 19:
|
|
206
|
+
case "end":
|
|
207
|
+
return _context4.stop();
|
|
208
|
+
}
|
|
209
|
+
}, _callee4);
|
|
210
|
+
})));
|
|
211
|
+
test("Sections - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
212
|
+
var _render7, getAllByRole, actions, section;
|
|
213
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
214
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
215
|
+
case 0:
|
|
216
|
+
_render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
217
|
+
items: sections
|
|
218
|
+
})), getAllByRole = _render7.getAllByRole;
|
|
219
|
+
expect(getAllByRole("menuitem").length).toBe(6);
|
|
220
|
+
actions = getAllByRole("button");
|
|
221
|
+
_context5.next = 5;
|
|
222
|
+
return _userEvent["default"].click(actions[0]);
|
|
223
|
+
case 5:
|
|
224
|
+
expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
|
|
225
|
+
expect(getAllByRole("group").length).toBe(2);
|
|
226
|
+
section = getAllByRole("group")[0];
|
|
227
|
+
expect(section.getAttribute("aria-labelledby")).toBe("Team repositories");
|
|
228
|
+
case 9:
|
|
229
|
+
case "end":
|
|
230
|
+
return _context5.stop();
|
|
231
|
+
}
|
|
232
|
+
}, _callee5);
|
|
233
|
+
})));
|
|
234
|
+
test("The onSelect event from each item is called correctly", function () {
|
|
59
235
|
var test = [{
|
|
60
236
|
label: "Tested item",
|
|
61
237
|
onSelect: jest.fn()
|
|
62
238
|
}];
|
|
63
|
-
var
|
|
239
|
+
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
|
|
64
240
|
items: test
|
|
65
241
|
})),
|
|
66
|
-
getByRole =
|
|
242
|
+
getByRole = _render8.getByRole;
|
|
67
243
|
var item = getByRole("button");
|
|
68
244
|
_react2.fireEvent.click(item);
|
|
69
245
|
expect(test[0].onSelect).toHaveBeenCalled();
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
+
var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
|
|
16
|
+
var _MenuItem = _interopRequireDefault(require("./MenuItem"));
|
|
17
|
+
var _ItemAction = _interopRequireDefault(require("./ItemAction"));
|
|
18
|
+
var _ContextualMenu = require("./ContextualMenu");
|
|
19
|
+
var _Icon = _interopRequireDefault(require("../icon/Icon"));
|
|
20
|
+
var _templateObject;
|
|
21
|
+
var _excluded = ["items"];
|
|
22
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
23
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
24
|
+
var isGroupSelected = function isGroupSelected(items, selectedItemId) {
|
|
25
|
+
return items.some(function (item) {
|
|
26
|
+
if ("items" in item) return isGroupSelected(item.items, selectedItemId);else if (selectedItemId !== -1) return item.id === selectedItemId;else return item.selectedByDefault;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
var GroupItem = function GroupItem(_ref) {
|
|
30
|
+
var items = _ref.items,
|
|
31
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
32
|
+
var groupMenuId = "group-menu-".concat(props.label);
|
|
33
|
+
var _useContext = (0, _react.useContext)(_ContextualMenu.ContextualMenuContext),
|
|
34
|
+
selectedItemId = _useContext.selectedItemId;
|
|
35
|
+
var groupSelected = (0, _react.useMemo)(function () {
|
|
36
|
+
return isGroupSelected(items, selectedItemId);
|
|
37
|
+
}, [items, selectedItemId]);
|
|
38
|
+
var _useState = (0, _react.useState)(groupSelected && selectedItemId === -1 ? true : false),
|
|
39
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
40
|
+
isOpen = _useState2[0],
|
|
41
|
+
setIsOpen = _useState2[1];
|
|
42
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_ItemAction["default"], (0, _extends2["default"])({
|
|
43
|
+
"aria-controls": groupMenuId,
|
|
44
|
+
"aria-expanded": isOpen ? true : undefined,
|
|
45
|
+
"aria-selected": groupSelected && !isOpen,
|
|
46
|
+
collapseIcon: isOpen ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
|
|
47
|
+
icon: "filled_expand_less"
|
|
48
|
+
}) : /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
|
|
49
|
+
icon: "filled_expand_more"
|
|
50
|
+
}),
|
|
51
|
+
onClick: function onClick() {
|
|
52
|
+
setIsOpen(function (isOpen) {
|
|
53
|
+
return !isOpen;
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
selected: groupSelected && !isOpen
|
|
57
|
+
}, props)), isOpen && /*#__PURE__*/_react["default"].createElement(ItemsList, {
|
|
58
|
+
id: groupMenuId
|
|
59
|
+
}, items.map(function (item) {
|
|
60
|
+
return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
|
|
61
|
+
item: item,
|
|
62
|
+
depthLevel: props.depthLevel + 1
|
|
63
|
+
});
|
|
64
|
+
})));
|
|
65
|
+
};
|
|
66
|
+
var ItemsList = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0;\n display: grid;\n gap: ", ";\n list-style: none;\n"])), _coreTokens["default"].spacing_4);
|
|
67
|
+
var _default = exports["default"] = /*#__PURE__*/_react["default"].memo(GroupItem);
|