@sproutsocial/racine 12.19.0 → 12.21.0
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/CHANGELOG.md +33 -0
- package/README.md +46 -44
- package/__flow__/Avatar/index.js +26 -26
- package/__flow__/Avatar/index.stories.js +8 -8
- package/__flow__/Avatar/index.test.js +13 -13
- package/__flow__/Badge/constants.js +14 -14
- package/__flow__/Badge/index.js +18 -18
- package/__flow__/Badge/index.stories.js +8 -8
- package/__flow__/Badge/index.test.js +43 -43
- package/__flow__/Badge/styles.js +13 -9
- package/__flow__/Banner/index.js +21 -21
- package/__flow__/Banner/index.stories.js +56 -68
- package/__flow__/Banner/index.test.js +32 -34
- package/__flow__/Banner/styles.js +4 -4
- package/__flow__/Box/index.js +4 -4
- package/__flow__/Box/index.stories.js +58 -51
- package/__flow__/Box/index.test.js +7 -7
- package/__flow__/Box/styles.js +6 -6
- package/__flow__/Breadcrumb/index.js +9 -13
- package/__flow__/Breadcrumb/index.stories.js +14 -14
- package/__flow__/Breadcrumb/index.test.js +20 -20
- package/__flow__/Breadcrumb/styles.js +5 -5
- package/__flow__/Button/index.js +23 -23
- package/__flow__/Button/index.stories.js +34 -34
- package/__flow__/Button/styles.js +11 -11
- package/__flow__/Card/index.js +7 -7
- package/__flow__/Card/index.stories.js +14 -14
- package/__flow__/Card/styles.js +7 -7
- package/__flow__/CharacterCounter/index.js +7 -7
- package/__flow__/CharacterCounter/index.stories.js +25 -26
- package/__flow__/CharacterCounter/index.test.js +11 -11
- package/__flow__/CharacterCounter/styles.js +3 -3
- package/__flow__/ChartLegend/index.js +7 -7
- package/__flow__/ChartLegend/index.stories.js +22 -22
- package/__flow__/ChartLegend/index.test.js +27 -27
- package/__flow__/ChartLegend/styles.js +7 -7
- package/__flow__/Checkbox/index.js +10 -10
- package/__flow__/Checkbox/index.stories.js +24 -24
- package/__flow__/Checkbox/index.test.js +25 -25
- package/__flow__/Checkbox/styles.js +27 -28
- package/__flow__/Collapsible/index.js +15 -15
- package/__flow__/Collapsible/index.stories.js +13 -13
- package/__flow__/Collapsible/index.test.js +27 -27
- package/__flow__/Collapsible/styles.js +5 -5
- package/__flow__/DatePicker/DateRangePicker.js +5 -8
- package/__flow__/DatePicker/DateRangePicker.stories.js +19 -19
- package/__flow__/DatePicker/DateRangePicker.test.js +21 -21
- package/__flow__/DatePicker/SingleDatePicker.js +6 -9
- package/__flow__/DatePicker/SingleDatePicker.stories.js +10 -10
- package/__flow__/DatePicker/SingleDatePicker.test.js +21 -23
- package/__flow__/DatePicker/StatefulDateRangePicker.js +6 -6
- package/__flow__/DatePicker/StatefulSingleDatePicker.js +3 -3
- package/__flow__/DatePicker/common.js +13 -13
- package/__flow__/DatePicker/index.js +3 -3
- package/__flow__/DatePicker/styles.js +42 -42
- package/__flow__/Drawer/SlideTransition.js +10 -10
- package/__flow__/Drawer/index.js +29 -29
- package/__flow__/Drawer/index.stories.js +58 -141
- package/__flow__/Drawer/index.test.js +28 -28
- package/__flow__/Drawer/styles.js +4 -4
- package/__flow__/EmptyState/index.js +5 -5
- package/__flow__/EmptyState/index.stories.js +10 -10
- package/__flow__/EmptyState/index.test.js +27 -27
- package/__flow__/EnumIllustrationNames.js +1 -1
- package/__flow__/Fieldset/index.js +14 -14
- package/__flow__/Fieldset/index.stories.js +19 -20
- package/__flow__/Fieldset/index.test.js +14 -14
- package/__flow__/Fieldset/styles.js +5 -5
- package/__flow__/FormField/index.js +14 -14
- package/__flow__/FormField/index.stories.js +31 -21
- package/__flow__/FormField/index.test.js +19 -19
- package/__flow__/Icon/deprecatedIcons.js +36 -36
- package/__flow__/Icon/index.js +17 -17
- package/__flow__/Icon/index.stories.js +62 -29
- package/__flow__/Icon/index.test.js +15 -15
- package/__flow__/Icon/styles.js +12 -23
- package/__flow__/IllustrationViewBoxes.js +1 -1
- package/__flow__/Image/index.js +6 -7
- package/__flow__/Image/index.stories.js +5 -5
- package/__flow__/Image/index.test.js +24 -24
- package/__flow__/Image/styles.js +6 -5
- package/__flow__/Indicator/index.js +7 -7
- package/__flow__/Indicator/index.stories.js +8 -14
- package/__flow__/Indicator/index.test.js +6 -6
- package/__flow__/Indicator/styles.js +6 -6
- package/__flow__/Input/index.js +37 -37
- package/__flow__/Input/index.stories.js +96 -189
- package/__flow__/Input/index.test.js +117 -117
- package/__flow__/Input/styles.js +13 -13
- package/__flow__/KeyboardKey/index.js +5 -5
- package/__flow__/KeyboardKey/index.stories.js +9 -12
- package/__flow__/KeyboardKey/index.test.js +7 -7
- package/__flow__/KeyboardKey/styles.js +4 -4
- package/__flow__/Label/index.js +6 -6
- package/__flow__/Label/index.stories.js +5 -7
- package/__flow__/Label/index.test.js +8 -8
- package/__flow__/Link/constants.js +4 -4
- package/__flow__/Link/index.js +11 -11
- package/__flow__/Link/index.stories.js +61 -102
- package/__flow__/Link/index.test.js +40 -40
- package/__flow__/Link/styles.js +6 -6
- package/__flow__/Listbox/index.js +16 -16
- package/__flow__/Listbox/index.stories.js +35 -35
- package/__flow__/Listbox/index.test.js +63 -65
- package/__flow__/Loader/index.js +12 -12
- package/__flow__/Loader/index.stories.js +10 -10
- package/__flow__/Loader/index.test.js +17 -17
- package/__flow__/Loader/styles.js +9 -13
- package/__flow__/LoaderButton/index.js +36 -18
- package/__flow__/LoaderButton/index.stories.js +35 -7
- package/__flow__/LoaderButton/index.test.js +15 -15
- package/__flow__/Menu/__snapshots__/index.test.js.snap +0 -9
- package/__flow__/Menu/constants.js +8 -8
- package/__flow__/Menu/descendants.js +89 -80
- package/__flow__/Menu/hooks.js +22 -22
- package/__flow__/Menu/index.flow.js +13 -13
- package/__flow__/Menu/index.js +56 -60
- package/__flow__/Menu/index.stories.js +19 -19
- package/__flow__/Menu/index.test.js +22 -22
- package/__flow__/Menu/names.js +4945 -4945
- package/__flow__/Menu/styles.js +5 -5
- package/__flow__/Message/index.js +33 -33
- package/__flow__/Message/index.stories.js +18 -13
- package/__flow__/Message/index.test.js +6 -6
- package/__flow__/Message/styles.js +15 -15
- package/__flow__/Modal/index.js +19 -19
- package/__flow__/Modal/index.stories.js +43 -43
- package/__flow__/Modal/index.test.js +29 -29
- package/__flow__/Modal/styles.js +27 -32
- package/__flow__/Numeral/index.js +22 -22
- package/__flow__/Numeral/index.stories.js +74 -74
- package/__flow__/Numeral/styles.js +3 -3
- package/__flow__/Numeral/tests/A11y.test.js +7 -7
- package/__flow__/Numeral/tests/abbreviate.test.js +40 -40
- package/__flow__/Numeral/tests/currency.test.js +24 -24
- package/__flow__/Numeral/tests/defaults.test.js +20 -20
- package/__flow__/Numeral/tests/invalid.test.js +9 -9
- package/__flow__/Numeral/tests/locale.test.js +38 -38
- package/__flow__/Numeral/tests/precision.test.js +76 -76
- package/__flow__/Numeral/tests/testNumeral.js +11 -11
- package/__flow__/Numeral/tests/zero.test.js +8 -8
- package/__flow__/OverflowList/index.flow.js +2 -2
- package/__flow__/OverflowList/index.js +12 -12
- package/__flow__/OverflowList/index.stories.js +10 -10
- package/__flow__/OverflowList/index.test.js +25 -25
- package/__flow__/OverflowList/styles.js +5 -5
- package/__flow__/PartnerLogo/TypePartnerNames.js +37 -37
- package/__flow__/PartnerLogo/index.js +21 -27
- package/__flow__/PartnerLogo/index.stories.js +52 -52
- package/__flow__/PartnerLogo/styles.js +12 -24
- package/__flow__/Popout/index.js +66 -67
- package/__flow__/Popout/index.stories.js +101 -82
- package/__flow__/Popout/index.test.js +43 -43
- package/__flow__/Popout/styles.js +4 -5
- package/__flow__/Portal/index.js +9 -9
- package/__flow__/Portal/index.stories.js +12 -12
- package/__flow__/Radio/index.js +4 -4
- package/__flow__/Radio/index.stories.js +11 -11
- package/__flow__/Radio/index.test.js +12 -12
- package/__flow__/Radio/styles.js +15 -16
- package/__flow__/SegmentedControl/index.js +7 -7
- package/__flow__/SegmentedControl/index.stories.js +7 -7
- package/__flow__/SegmentedControl/index.test.js +29 -29
- package/__flow__/SegmentedControl/styles.js +10 -9
- package/__flow__/Select/index.js +10 -10
- package/__flow__/Select/index.stories.js +33 -69
- package/__flow__/Select/index.test.js +14 -14
- package/__flow__/Select/styles.js +16 -16
- package/__flow__/Skeleton/index.js +4 -4
- package/__flow__/Skeleton/index.stories.js +5 -5
- package/__flow__/SpotIllustration/illustrationNames.js +118 -117
- package/__flow__/SpotIllustration/index.js +15 -11
- package/__flow__/SpotIllustration/index.stories.js +18 -18
- package/__flow__/SpotIllustration/spotIllustrations/molecule.svg +14 -0
- package/__flow__/Stack/index.js +43 -33
- package/__flow__/Stack/index.stories.js +41 -91
- package/__flow__/Stack/index.test.js +16 -7
- package/__flow__/Switch/index.js +8 -8
- package/__flow__/Switch/index.stories.js +5 -5
- package/__flow__/Switch/index.test.js +25 -29
- package/__flow__/Switch/styles.js +13 -9
- package/__flow__/Table/index.js +17 -17
- package/__flow__/Table/index.stories.js +99 -99
- package/__flow__/Table/index.test.js +32 -32
- package/__flow__/Table/styles.js +4 -4
- package/__flow__/TableCell/index.js +8 -7
- package/__flow__/TableCell/index.stories.js +20 -23
- package/__flow__/TableCell/index.test.js +11 -11
- package/__flow__/TableCell/styles.js +4 -5
- package/__flow__/TableHeaderCell/index.js +14 -14
- package/__flow__/TableHeaderCell/index.stories.js +35 -30
- package/__flow__/TableHeaderCell/index.test.js +11 -11
- package/__flow__/TableHeaderCell/styles.js +4 -4
- package/__flow__/TableRowAccordion/index.js +8 -8
- package/__flow__/TableRowAccordion/index.stories.js +36 -36
- package/__flow__/TableRowAccordion/index.test.js +28 -30
- package/__flow__/TableRowAccordion/styles.js +11 -7
- package/__flow__/Tabs/index.js +11 -11
- package/__flow__/Tabs/index.stories.js +28 -54
- package/__flow__/Tabs/index.test.js +54 -54
- package/__flow__/Tabs/styles.js +6 -7
- package/__flow__/Text/index.js +14 -14
- package/__flow__/Text/index.stories.js +84 -86
- package/__flow__/Text/index.test.js +29 -33
- package/__flow__/Text/styles.js +4 -4
- package/__flow__/Textarea/index.js +5 -5
- package/__flow__/Textarea/index.stories.js +54 -93
- package/__flow__/Textarea/index.test.js +30 -30
- package/__flow__/Textarea/styles.js +6 -6
- package/__flow__/ThemeProvider/index.js +4 -4
- package/__flow__/Toast/index.js +23 -23
- package/__flow__/Toast/index.stories.js +21 -21
- package/__flow__/Toast/styles.js +6 -6
- package/__flow__/ToggleHint/index.js +8 -8
- package/__flow__/ToggleHint/index.test.js +8 -8
- package/__flow__/ToggleHint/styles.js +8 -8
- package/__flow__/Token/index.js +10 -10
- package/__flow__/Token/index.stories.js +49 -54
- package/__flow__/Token/index.test.js +28 -28
- package/__flow__/Token/styles.js +11 -11
- package/__flow__/TokenInput/index.flow.js +1 -1
- package/__flow__/TokenInput/index.js +39 -39
- package/__flow__/TokenInput/index.stories.js +121 -128
- package/__flow__/TokenInput/styles.js +5 -5
- package/__flow__/TokenInput/tests/default/clicking.test.js +13 -13
- package/__flow__/TokenInput/tests/default/deleting.test.js +39 -39
- package/__flow__/TokenInput/tests/default/focusing.test.js +18 -18
- package/__flow__/TokenInput/tests/default/inputting.test.js +23 -23
- package/__flow__/TokenInput/tests/default/pasting.test.js +52 -52
- package/__flow__/TokenInput/tests/default/rendering.test.js +54 -54
- package/__flow__/TokenInput/util.js +4 -4
- package/__flow__/Tooltip/index.js +21 -21
- package/__flow__/Tooltip/index.stories.js +18 -18
- package/__flow__/Tooltip/index.test.js +54 -54
- package/__flow__/Tooltip/styles.js +4 -5
- package/__flow__/VisuallyHidden/index.js +3 -3
- package/__flow__/building-stories.stories.mdx +121 -0
- package/__flow__/dataviz/dataviz.stories.js +4 -4
- package/__flow__/dataviz/index.js +3 -3
- package/__flow__/index.js +72 -72
- package/__flow__/overview.stories.js +60 -0
- package/__flow__/setupTests.js +5 -5
- package/__flow__/systemProps/background.js +3 -3
- package/__flow__/systemProps/border.js +3 -3
- package/__flow__/systemProps/color.js +3 -3
- package/__flow__/systemProps/custom.js +3 -3
- package/__flow__/systemProps/flexbox.js +3 -3
- package/__flow__/systemProps/grid.js +3 -3
- package/__flow__/systemProps/index.js +14 -14
- package/__flow__/systemProps/layout.js +3 -3
- package/__flow__/systemProps/position.js +3 -3
- package/__flow__/systemProps/shadow.js +3 -3
- package/__flow__/systemProps/space.js +3 -7
- package/__flow__/systemProps/systemProps.js +14 -14
- package/__flow__/systemProps/tests/background.test.js +17 -17
- package/__flow__/systemProps/tests/border.test.js +61 -61
- package/__flow__/systemProps/tests/color.test.js +15 -15
- package/__flow__/systemProps/tests/custom.test.js +12 -12
- package/__flow__/systemProps/tests/flexbox.test.js +33 -33
- package/__flow__/systemProps/tests/grid.test.js +31 -31
- package/__flow__/systemProps/tests/layout.test.js +29 -29
- package/__flow__/systemProps/tests/position.test.js +19 -19
- package/__flow__/systemProps/tests/shadow.test.js +11 -11
- package/__flow__/systemProps/tests/space.test.js +11 -11
- package/__flow__/systemProps/tests/types.flow.js +18 -18
- package/__flow__/systemProps/tests/typography.test.js +21 -21
- package/__flow__/systemProps/tests/variant.test.js +9 -9
- package/__flow__/systemProps/types.flow.js +2 -2
- package/__flow__/systemProps/typography.js +4 -4
- package/__flow__/systemProps/variant.js +5 -5
- package/__flow__/themes/dark/dataviz-palette.js +21 -21
- package/__flow__/themes/dark/decorative-palettes.js +1 -1
- package/__flow__/themes/dark/theme.js +18 -18
- package/__flow__/themes/extendedThemes/README.md +1 -1
- package/__flow__/themes/extendedThemes/sproutTheme/dark/theme.js +16 -4
- package/__flow__/themes/extendedThemes/sproutTheme/index.js +2 -2
- package/__flow__/themes/extendedThemes/sproutTheme/light/theme.js +16 -4
- package/__flow__/themes/light/dataviz-palette.js +21 -21
- package/__flow__/themes/light/decorative-palettes.js +1 -1
- package/__flow__/themes/light/literal-colors.js +133 -133
- package/__flow__/themes/light/theme.js +53 -53
- package/__flow__/types/system-props.flow.js +5 -5
- package/__flow__/types/theme.colors.flow.js +2 -2
- package/__flow__/types/theme.flow.js +5 -5
- package/__flow__/utils/a11yTest.js +1 -1
- package/__flow__/utils/chartColors.js +1 -1
- package/__flow__/utils/constants.js +1 -1
- package/__flow__/utils/dataQaLabelQueries.js +2 -2
- package/__flow__/utils/hooks.js +17 -17
- package/__flow__/utils/index.js +4 -4
- package/__flow__/utils/innerText.js +9 -9
- package/__flow__/utils/mixins.js +6 -6
- package/__flow__/utils/react-testing-library.js +6 -6
- package/__flow__/utils/responsiveProps/index.js +3 -3
- package/__flow__/utils/responsiveProps/index.test.js +8 -8
- package/__flow__/utils/system-props.js +3 -3
- package/__flow__/utils/useInteractiveColor.js +5 -5
- package/__flow__/writing-good-stories.stories.mdx +3 -0
- package/bin/racine-codemod.js +12 -12
- package/codemods/__tests__/migrate-2.x-to-3.x.test.js +2 -2
- package/codemods/migrate-2.x-to-3.x.js +29 -30
- package/commonjs/Avatar/index.js +33 -53
- package/commonjs/Badge/constants.js +18 -15
- package/commonjs/Badge/index.js +14 -28
- package/commonjs/Badge/styles.js +3 -9
- package/commonjs/Banner/index.js +16 -37
- package/commonjs/Banner/styles.js +0 -5
- package/commonjs/Box/index.js +2 -9
- package/commonjs/Box/styles.js +0 -4
- package/commonjs/Breadcrumb/index.js +13 -29
- package/commonjs/Breadcrumb/styles.js +1 -4
- package/commonjs/Button/index.js +29 -43
- package/commonjs/Button/styles.js +6 -15
- package/commonjs/Card/index.js +16 -26
- package/commonjs/Card/styles.js +1 -5
- package/commonjs/CharacterCounter/index.js +6 -23
- package/commonjs/CharacterCounter/styles.js +0 -5
- package/commonjs/ChartLegend/index.js +5 -20
- package/commonjs/ChartLegend/styles.js +2 -11
- package/commonjs/Checkbox/index.js +30 -53
- package/commonjs/Checkbox/styles.js +14 -35
- package/commonjs/Collapsible/index.js +31 -54
- package/commonjs/Collapsible/styles.js +3 -6
- package/commonjs/DatePicker/DateRangePicker.js +4 -17
- package/commonjs/DatePicker/SingleDatePicker.js +3 -17
- package/commonjs/DatePicker/StatefulDateRangePicker.js +16 -31
- package/commonjs/DatePicker/StatefulSingleDatePicker.js +7 -20
- package/commonjs/DatePicker/common.js +8 -22
- package/commonjs/DatePicker/index.js +0 -5
- package/commonjs/DatePicker/styles.js +8 -25
- package/commonjs/Drawer/SlideTransition.js +8 -18
- package/commonjs/Drawer/index.js +51 -90
- package/commonjs/Drawer/styles.js +0 -8
- package/commonjs/EmptyState/index.js +8 -20
- package/commonjs/Fieldset/index.js +15 -32
- package/commonjs/Fieldset/styles.js +2 -7
- package/commonjs/FormField/index.js +19 -36
- package/commonjs/Icon/deprecatedIcons.js +36 -36
- package/commonjs/Icon/index.js +19 -37
- package/commonjs/Icon/styles.js +8 -19
- package/commonjs/IllustrationViewBoxes.js +1 -0
- package/commonjs/Image/index.js +13 -41
- package/commonjs/Image/styles.js +1 -7
- package/commonjs/Indicator/index.js +8 -26
- package/commonjs/Indicator/styles.js +1 -7
- package/commonjs/Input/index.js +80 -119
- package/commonjs/Input/styles.js +9 -19
- package/commonjs/KeyboardKey/index.js +3 -20
- package/commonjs/KeyboardKey/styles.js +0 -4
- package/commonjs/Label/index.js +7 -27
- package/commonjs/Link/constants.js +3 -4
- package/commonjs/Link/index.js +16 -28
- package/commonjs/Link/styles.js +1 -8
- package/commonjs/Listbox/index.js +15 -36
- package/commonjs/Loader/index.js +15 -31
- package/commonjs/Loader/styles.js +2 -13
- package/commonjs/LoaderButton/index.js +37 -39
- package/commonjs/Menu/constants.js +9 -8
- package/commonjs/Menu/descendants.js +70 -105
- package/commonjs/Menu/hooks.js +23 -41
- package/commonjs/Menu/index.flow.js +0 -7
- package/commonjs/Menu/index.js +94 -164
- package/commonjs/Menu/names.js +1 -1
- package/commonjs/Menu/styles.js +0 -6
- package/commonjs/Message/index.js +37 -70
- package/commonjs/Message/styles.js +9 -24
- package/commonjs/Modal/index.js +31 -54
- package/commonjs/Modal/styles.js +17 -36
- package/commonjs/Numeral/index.js +39 -67
- package/commonjs/Numeral/styles.js +0 -3
- package/commonjs/Numeral/tests/testNumeral.js +13 -31
- package/commonjs/OverflowList/index.flow.js +0 -2
- package/commonjs/OverflowList/index.js +27 -41
- package/commonjs/OverflowList/styles.js +0 -7
- package/commonjs/PartnerLogo/index.js +22 -37
- package/commonjs/PartnerLogo/styles.js +7 -17
- package/commonjs/Popout/index.js +95 -127
- package/commonjs/Popout/styles.js +0 -5
- package/commonjs/Portal/index.js +8 -31
- package/commonjs/Radio/index.js +18 -42
- package/commonjs/Radio/styles.js +9 -21
- package/commonjs/SegmentedControl/index.js +17 -37
- package/commonjs/SegmentedControl/styles.js +2 -12
- package/commonjs/Select/index.js +24 -47
- package/commonjs/Select/styles.js +12 -24
- package/commonjs/Skeleton/index.js +0 -5
- package/commonjs/SpotIllustration/illustrationNames.js +1 -1
- package/commonjs/SpotIllustration/index.js +5 -11
- package/commonjs/Stack/index.js +27 -42
- package/commonjs/Switch/index.js +17 -42
- package/commonjs/Switch/styles.js +3 -11
- package/commonjs/Table/index.js +26 -50
- package/commonjs/Table/styles.js +0 -4
- package/commonjs/TableCell/index.js +12 -30
- package/commonjs/TableCell/styles.js +0 -5
- package/commonjs/TableHeaderCell/index.js +27 -56
- package/commonjs/TableHeaderCell/styles.js +0 -6
- package/commonjs/TableRowAccordion/index.js +12 -37
- package/commonjs/TableRowAccordion/styles.js +2 -9
- package/commonjs/Tabs/index.js +16 -66
- package/commonjs/Tabs/styles.js +2 -11
- package/commonjs/Text/index.js +12 -25
- package/commonjs/Text/styles.js +1 -6
- package/commonjs/Textarea/index.js +31 -55
- package/commonjs/Textarea/styles.js +2 -9
- package/commonjs/ThemeProvider/index.js +1 -10
- package/commonjs/Toast/index.js +19 -42
- package/commonjs/Toast/styles.js +1 -7
- package/commonjs/ToggleHint/index.js +15 -39
- package/commonjs/ToggleHint/styles.js +2 -9
- package/commonjs/Token/index.js +15 -29
- package/commonjs/Token/styles.js +5 -12
- package/commonjs/TokenInput/index.js +70 -122
- package/commonjs/TokenInput/styles.js +1 -7
- package/commonjs/TokenInput/util.js +2 -7
- package/commonjs/Tooltip/index.js +40 -63
- package/commonjs/Tooltip/styles.js +1 -5
- package/commonjs/VisuallyHidden/index.js +0 -4
- package/commonjs/dataviz/index.js +0 -4
- package/commonjs/index.js +0 -129
- package/commonjs/systemProps/background.js +0 -1
- package/commonjs/systemProps/border.js +0 -1
- package/commonjs/systemProps/color.js +0 -1
- package/commonjs/systemProps/custom.js +0 -1
- package/commonjs/systemProps/flexbox.js +0 -1
- package/commonjs/systemProps/grid.js +0 -1
- package/commonjs/systemProps/index.js +0 -28
- package/commonjs/systemProps/layout.js +0 -1
- package/commonjs/systemProps/position.js +0 -1
- package/commonjs/systemProps/shadow.js +0 -1
- package/commonjs/systemProps/space.js +1 -2
- package/commonjs/systemProps/systemProps.js +0 -13
- package/commonjs/systemProps/tests/types.flow.js +25 -22
- package/commonjs/systemProps/typography.js +0 -1
- package/commonjs/systemProps/variant.js +2 -3
- package/commonjs/themes/dark/dataviz-palette.js +20 -22
- package/commonjs/themes/dark/decorative-palettes.js +0 -2
- package/commonjs/themes/dark/theme.js +15 -29
- package/commonjs/themes/extendedThemes/sproutTheme/dark/theme.js +14 -9
- package/commonjs/themes/extendedThemes/sproutTheme/index.js +0 -5
- package/commonjs/themes/extendedThemes/sproutTheme/light/theme.js +14 -9
- package/commonjs/themes/light/dataviz-palette.js +20 -22
- package/commonjs/themes/light/decorative-palettes.js +0 -2
- package/commonjs/themes/light/literal-colors.js +132 -134
- package/commonjs/themes/light/theme.js +45 -61
- package/commonjs/types/system-props.flow.js +1 -1
- package/commonjs/types/theme.colors.flow.js +0 -2
- package/commonjs/types/theme.flow.js +0 -1
- package/commonjs/utils/a11yTest.js +3 -10
- package/commonjs/utils/chartColors.js +0 -1
- package/commonjs/utils/constants.js +1 -1
- package/commonjs/utils/dataQaLabelQueries.js +12 -21
- package/commonjs/utils/hooks.js +39 -70
- package/commonjs/utils/index.js +2 -9
- package/commonjs/utils/innerText.js +10 -14
- package/commonjs/utils/mixins.js +2 -7
- package/commonjs/utils/react-testing-library.js +4 -26
- package/commonjs/utils/responsiveProps/index.js +1 -11
- package/commonjs/utils/system-props.js +2 -5
- package/commonjs/utils/useInteractiveColor.js +6 -8
- package/dist/illustration.svg +1 -1
- package/dist/illustrationList.js +1 -1
- package/dist/themes/dark/theme.scss +2 -2
- package/dist/themes/extendedThemes/sproutTheme/dark/theme.scss +26 -2
- package/dist/themes/extendedThemes/sproutTheme/light/theme.scss +26 -2
- package/dist/themes/light/theme.scss +2 -2
- package/lib/Avatar/index.js +40 -47
- package/lib/Badge/constants.js +19 -15
- package/lib/Badge/index.js +18 -25
- package/lib/Badge/styles.js +8 -6
- package/lib/Banner/index.js +20 -32
- package/lib/Banner/styles.js +3 -2
- package/lib/Box/index.js +4 -5
- package/lib/Box/styles.js +3 -2
- package/lib/Breadcrumb/index.js +19 -27
- package/lib/Breadcrumb/styles.js +3 -2
- package/lib/Button/index.js +31 -38
- package/lib/Button/styles.js +14 -11
- package/lib/Card/index.js +18 -24
- package/lib/Card/styles.js +5 -4
- package/lib/CharacterCounter/index.js +8 -20
- package/lib/CharacterCounter/styles.js +3 -2
- package/lib/ChartLegend/index.js +9 -17
- package/lib/ChartLegend/styles.js +5 -4
- package/lib/Checkbox/index.js +32 -51
- package/lib/Checkbox/styles.js +21 -26
- package/lib/Collapsible/index.js +36 -51
- package/lib/Collapsible/styles.js +6 -5
- package/lib/DatePicker/DateRangePicker.js +8 -14
- package/lib/DatePicker/SingleDatePicker.js +7 -13
- package/lib/DatePicker/StatefulDateRangePicker.js +19 -26
- package/lib/DatePicker/StatefulSingleDatePicker.js +9 -15
- package/lib/DatePicker/common.js +14 -13
- package/lib/DatePicker/index.js +2 -2
- package/lib/DatePicker/styles.js +12 -22
- package/lib/Drawer/SlideTransition.js +11 -14
- package/lib/Drawer/index.js +64 -88
- package/lib/Drawer/styles.js +4 -3
- package/lib/EmptyState/index.js +11 -17
- package/lib/Fieldset/index.js +19 -29
- package/lib/Fieldset/styles.js +5 -4
- package/lib/FormField/index.js +27 -33
- package/lib/Icon/deprecatedIcons.js +36 -36
- package/lib/Icon/index.js +25 -34
- package/lib/Icon/styles.js +12 -16
- package/lib/IllustrationViewBoxes.js +1 -0
- package/lib/Image/index.js +15 -38
- package/lib/Image/styles.js +4 -4
- package/lib/Indicator/index.js +11 -23
- package/lib/Indicator/styles.js +5 -5
- package/lib/Input/index.js +87 -115
- package/lib/Input/styles.js +13 -15
- package/lib/KeyboardKey/index.js +6 -17
- package/lib/KeyboardKey/styles.js +3 -2
- package/lib/Label/index.js +10 -24
- package/lib/Link/constants.js +5 -4
- package/lib/Link/index.js +18 -25
- package/lib/Link/styles.js +6 -5
- package/lib/Listbox/index.js +21 -29
- package/lib/Loader/index.js +17 -29
- package/lib/Loader/styles.js +6 -8
- package/lib/LoaderButton/index.js +45 -34
- package/lib/Menu/constants.js +10 -8
- package/lib/Menu/descendants.js +73 -94
- package/lib/Menu/hooks.js +28 -39
- package/lib/Menu/index.flow.js +6 -5
- package/lib/Menu/index.js +113 -150
- package/lib/Menu/names.js +1 -1
- package/lib/Menu/styles.js +4 -3
- package/lib/Message/index.js +42 -66
- package/lib/Message/styles.js +15 -23
- package/lib/Modal/index.js +38 -51
- package/lib/Modal/styles.js +23 -32
- package/lib/Numeral/index.js +45 -64
- package/lib/Numeral/styles.js +3 -2
- package/lib/Numeral/tests/testNumeral.js +17 -27
- package/lib/OverflowList/index.flow.js +2 -1
- package/lib/OverflowList/index.js +31 -38
- package/lib/OverflowList/styles.js +5 -4
- package/lib/PartnerLogo/index.js +26 -35
- package/lib/PartnerLogo/styles.js +11 -14
- package/lib/Popout/index.js +105 -121
- package/lib/Popout/styles.js +3 -3
- package/lib/Portal/index.js +11 -29
- package/lib/Radio/index.js +20 -40
- package/lib/Radio/styles.js +14 -14
- package/lib/SegmentedControl/index.js +21 -34
- package/lib/SegmentedControl/styles.js +7 -9
- package/lib/Select/index.js +27 -44
- package/lib/Select/styles.js +16 -20
- package/lib/Skeleton/index.js +7 -4
- package/lib/SpotIllustration/illustrationNames.js +2 -1
- package/lib/SpotIllustration/index.js +9 -10
- package/lib/Stack/index.js +31 -39
- package/lib/Switch/index.js +21 -39
- package/lib/Switch/styles.js +8 -7
- package/lib/Table/index.js +30 -40
- package/lib/Table/styles.js +3 -2
- package/lib/TableCell/index.js +14 -27
- package/lib/TableCell/styles.js +3 -3
- package/lib/TableHeaderCell/index.js +30 -52
- package/lib/TableHeaderCell/styles.js +3 -2
- package/lib/TableRowAccordion/index.js +16 -34
- package/lib/TableRowAccordion/styles.js +5 -3
- package/lib/Tabs/index.js +18 -63
- package/lib/Tabs/styles.js +6 -6
- package/lib/Text/index.js +15 -21
- package/lib/Text/styles.js +4 -3
- package/lib/Textarea/index.js +33 -53
- package/lib/Textarea/styles.js +6 -5
- package/lib/ThemeProvider/index.js +4 -7
- package/lib/Toast/index.js +26 -37
- package/lib/Toast/styles.js +5 -4
- package/lib/ToggleHint/index.js +18 -36
- package/lib/ToggleHint/styles.js +6 -5
- package/lib/Token/index.js +20 -26
- package/lib/Token/styles.js +10 -9
- package/lib/TokenInput/index.js +78 -118
- package/lib/TokenInput/styles.js +5 -4
- package/lib/TokenInput/util.js +5 -3
- package/lib/Tooltip/index.js +45 -60
- package/lib/Tooltip/styles.js +4 -4
- package/lib/VisuallyHidden/index.js +3 -2
- package/lib/dataviz/index.js +4 -3
- package/lib/index.js +66 -64
- package/lib/systemProps/background.js +3 -1
- package/lib/systemProps/border.js +3 -1
- package/lib/systemProps/color.js +3 -1
- package/lib/systemProps/custom.js +3 -1
- package/lib/systemProps/flexbox.js +3 -1
- package/lib/systemProps/grid.js +3 -1
- package/lib/systemProps/index.js +16 -14
- package/lib/systemProps/layout.js +3 -1
- package/lib/systemProps/position.js +3 -1
- package/lib/systemProps/shadow.js +3 -1
- package/lib/systemProps/space.js +2 -1
- package/lib/systemProps/systemProps.js +14 -13
- package/lib/systemProps/tests/types.flow.js +27 -22
- package/lib/systemProps/typography.js +3 -1
- package/lib/systemProps/variant.js +4 -3
- package/lib/themes/dark/dataviz-palette.js +23 -21
- package/lib/themes/dark/decorative-palettes.js +3 -1
- package/lib/themes/dark/theme.js +22 -25
- package/lib/themes/extendedThemes/sproutTheme/dark/theme.js +16 -7
- package/lib/themes/extendedThemes/sproutTheme/index.js +3 -2
- package/lib/themes/extendedThemes/sproutTheme/light/theme.js +16 -7
- package/lib/themes/light/dataviz-palette.js +23 -21
- package/lib/themes/light/decorative-palettes.js +3 -1
- package/lib/themes/light/literal-colors.js +135 -133
- package/lib/themes/light/theme.js +56 -57
- package/lib/types/system-props.flow.js +1 -1
- package/lib/types/theme.colors.flow.js +4 -2
- package/lib/types/theme.flow.js +3 -2
- package/lib/utils/a11yTest.js +5 -8
- package/lib/utils/chartColors.js +3 -1
- package/lib/utils/constants.js +3 -1
- package/lib/utils/dataQaLabelQueries.js +13 -21
- package/lib/utils/hooks.js +41 -64
- package/lib/utils/index.js +2 -5
- package/lib/utils/innerText.js +12 -14
- package/lib/utils/mixins.js +6 -5
- package/lib/utils/react-testing-library.js +10 -20
- package/lib/utils/responsiveProps/index.js +3 -8
- package/lib/utils/system-props.js +4 -3
- package/lib/utils/useInteractiveColor.js +10 -9
- package/package.json +6 -13
package/__flow__/Menu/hooks.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import {
|
|
3
|
-
import scrollIntoViewIfNeeded from
|
|
4
|
-
import {
|
|
2
|
+
import {createContext, useContext, useEffect} from 'react';
|
|
3
|
+
import scrollIntoViewIfNeeded from 'scroll-into-view-if-needed';
|
|
4
|
+
import {MENU_ROLES} from './constants';
|
|
5
5
|
import {
|
|
6
6
|
createDescendantContext,
|
|
7
7
|
useDescendantKeyDown,
|
|
8
8
|
usePrevious,
|
|
9
9
|
wrapEvent,
|
|
10
|
-
} from
|
|
10
|
+
} from './descendants';
|
|
11
11
|
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
12
|
+
import type {TypeDescendant} from './descendants';
|
|
13
|
+
import type {TypeMenuButtonContext, TypeMenuContext} from './index.flow';
|
|
14
14
|
|
|
15
15
|
export const MenuContext = createContext<TypeMenuContext>({
|
|
16
16
|
role: MENU_ROLES.MENU,
|
|
@@ -22,7 +22,7 @@ export const MenuContext = createContext<TypeMenuContext>({
|
|
|
22
22
|
onChange: undefined,
|
|
23
23
|
state: {
|
|
24
24
|
selectionIndex: 0,
|
|
25
|
-
filterQuery:
|
|
25
|
+
filterQuery: '',
|
|
26
26
|
filteredItems: null,
|
|
27
27
|
isFilterInputFocused: false,
|
|
28
28
|
},
|
|
@@ -46,7 +46,7 @@ export type TypeMenuDescendantProps = {|
|
|
|
46
46
|
export const MenuDescendantContext = createDescendantContext<
|
|
47
47
|
HTMLElement,
|
|
48
48
|
TypeMenuDescendantProps
|
|
49
|
-
>(
|
|
49
|
+
>('MenuDescendantContext');
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* When a user's typed input matches the string displayed in a menu item, it is
|
|
@@ -55,7 +55,7 @@ export const MenuDescendantContext = createDescendantContext<
|
|
|
55
55
|
*/
|
|
56
56
|
function filterItemsFromTypeahead(
|
|
57
57
|
items: TypeDescendant<HTMLElement, TypeMenuDescendantProps>[],
|
|
58
|
-
string: string =
|
|
58
|
+
string: string = ''
|
|
59
59
|
) {
|
|
60
60
|
if (!string) {
|
|
61
61
|
return null;
|
|
@@ -63,11 +63,11 @@ function filterItemsFromTypeahead(
|
|
|
63
63
|
|
|
64
64
|
return items
|
|
65
65
|
.filter(
|
|
66
|
-
({
|
|
66
|
+
({value, label}) =>
|
|
67
67
|
value?.toLowerCase().includes(string.toLocaleLowerCase()) ||
|
|
68
68
|
label?.toLowerCase().includes(string.toLocaleLowerCase())
|
|
69
69
|
)
|
|
70
|
-
.map(({
|
|
70
|
+
.map(({index}) => index);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
export function useMenuKeyDown() {
|
|
@@ -76,10 +76,10 @@ export function useMenuKeyDown() {
|
|
|
76
76
|
selectCallbacks,
|
|
77
77
|
setState,
|
|
78
78
|
multiselect,
|
|
79
|
-
state: {
|
|
79
|
+
state: {filterQuery, selectionIndex, filteredItems, isFilterInputFocused},
|
|
80
80
|
} = useContext(MenuContext);
|
|
81
|
-
const {
|
|
82
|
-
const {
|
|
81
|
+
const {closePopout, closeOnItemClick} = useContext(MenuButtonContext);
|
|
82
|
+
const {descendants: items} = useContext(MenuDescendantContext);
|
|
83
83
|
|
|
84
84
|
const shouldClosePopout = closeOnItemClick && !multiselect;
|
|
85
85
|
const prevMenuItemsLength = usePrevious(items.length);
|
|
@@ -132,25 +132,25 @@ export function useMenuKeyDown() {
|
|
|
132
132
|
selectionIndex: newFilteredItems[0],
|
|
133
133
|
});
|
|
134
134
|
} else if (!filterQuery && filteredItems !== null) {
|
|
135
|
-
setState({
|
|
135
|
+
setState({filteredItems: null});
|
|
136
136
|
}
|
|
137
137
|
}, [filterQuery, items, setState, filteredItems]);
|
|
138
138
|
|
|
139
|
-
const index = items.findIndex(({
|
|
139
|
+
const index = items.findIndex(({index}) => index === selectionIndex);
|
|
140
140
|
|
|
141
141
|
return {
|
|
142
142
|
activeDescendent: items[selectionIndex],
|
|
143
143
|
handleKeyDown: wrapEvent<SyntheticKeyboardEvent<>>(
|
|
144
144
|
function (event) {
|
|
145
|
-
const {
|
|
145
|
+
const {key} = event;
|
|
146
146
|
switch (key) {
|
|
147
|
-
case
|
|
147
|
+
case ' ':
|
|
148
148
|
if (isFilterInputFocused) {
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
// falls through
|
|
152
152
|
// eslint-disable-next-line no-fallthrough
|
|
153
|
-
case
|
|
153
|
+
case 'Enter':
|
|
154
154
|
const selected = items[selectionIndex];
|
|
155
155
|
|
|
156
156
|
if (selected) {
|
|
@@ -168,8 +168,8 @@ export function useMenuKeyDown() {
|
|
|
168
168
|
|
|
169
169
|
useDescendantKeyDown(MenuDescendantContext, {
|
|
170
170
|
currentIndex: index,
|
|
171
|
-
orientation:
|
|
172
|
-
key:
|
|
171
|
+
orientation: 'vertical',
|
|
172
|
+
key: 'option',
|
|
173
173
|
rotate: true,
|
|
174
174
|
filter: (option) =>
|
|
175
175
|
!option.disabled &&
|
|
@@ -177,7 +177,7 @@ export function useMenuKeyDown() {
|
|
|
177
177
|
// $FlowIssue
|
|
178
178
|
callback(item: TypeDescendant<HTMLElement, TypeMenuDescendantProps>) {
|
|
179
179
|
item.element && scrollIntoViewIfNeeded(item.element);
|
|
180
|
-
setState({
|
|
180
|
+
setState({selectionIndex: item.index});
|
|
181
181
|
},
|
|
182
182
|
})
|
|
183
183
|
),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import * as React from
|
|
3
|
-
import Box from
|
|
4
|
-
import Button from
|
|
5
|
-
import Popout, {
|
|
6
|
-
import {
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import Box from '../Box';
|
|
4
|
+
import Button from '../Button';
|
|
5
|
+
import Popout, {type EnumPlacements} from '../Popout';
|
|
6
|
+
import {MENU_ITEM_ROLES, MENU_ROLES} from './constants';
|
|
7
7
|
|
|
8
8
|
export type TypeMenuRoles = $Values<typeof MENU_ROLES>;
|
|
9
9
|
export type TypeMenuItemRoles = $Values<typeof MENU_ITEM_ROLES>;
|
|
@@ -43,7 +43,7 @@ export type TypeMenuProps = {
|
|
|
43
43
|
|
|
44
44
|
export type TypeListboxProps = {
|
|
45
45
|
...TypeMenuProps,
|
|
46
|
-
role?:
|
|
46
|
+
role?: 'listbox',
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export type TypeMenuItemProps = {
|
|
@@ -62,7 +62,7 @@ export type TypeMenuItemProps = {
|
|
|
62
62
|
elemAfter?: React.Node,
|
|
63
63
|
elemBefore?: React.Node,
|
|
64
64
|
as?: string,
|
|
65
|
-
|
|
65
|
+
'data-qa-menu-item'?: string,
|
|
66
66
|
alignItems?: string,
|
|
67
67
|
};
|
|
68
68
|
|
|
@@ -72,7 +72,7 @@ export type TypeMenuGroupProps = {
|
|
|
72
72
|
title?: React.Node,
|
|
73
73
|
titleAs?: string,
|
|
74
74
|
/** Use the flush appearance if you're using the menu outside of a popout */
|
|
75
|
-
appearance?:
|
|
75
|
+
appearance?: 'default' | 'flush',
|
|
76
76
|
disabled?: boolean,
|
|
77
77
|
};
|
|
78
78
|
|
|
@@ -85,8 +85,8 @@ export type TypeMenuButtonProps = {
|
|
|
85
85
|
...$Exact<React.ElementConfig<typeof Button>>,
|
|
86
86
|
...TypeMenuButtonContext,
|
|
87
87
|
id?: string,
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
'aria-labelledby'?: string,
|
|
89
|
+
'aria-label'?: string,
|
|
90
90
|
content: React.Node,
|
|
91
91
|
popoutProps?: $Shape<React.ElementConfig<typeof Popout>>,
|
|
92
92
|
placement?: EnumPlacements,
|
|
@@ -95,9 +95,9 @@ export type TypeMenuButtonProps = {
|
|
|
95
95
|
export type TypeListboxButtonProps = {
|
|
96
96
|
...$Exact<React.ElementConfig<typeof Button>>,
|
|
97
97
|
...TypeMenuButtonContext,
|
|
98
|
-
size?:
|
|
98
|
+
size?: 'large' | 'default' | 'small',
|
|
99
99
|
content: React.Node,
|
|
100
100
|
popoutProps?: $Shape<React.ElementConfig<typeof Popout>>,
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
'aria-label'?: string,
|
|
102
|
+
'aria-labelledby'?: string,
|
|
103
103
|
};
|
package/__flow__/Menu/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import * as React from
|
|
3
|
-
import styled from
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
4
|
import {
|
|
5
5
|
useCallback,
|
|
6
6
|
useContext,
|
|
@@ -8,21 +8,21 @@ import {
|
|
|
8
8
|
useMemo,
|
|
9
9
|
useRef,
|
|
10
10
|
useState,
|
|
11
|
-
} from
|
|
12
|
-
import uniqueId from
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
import Box from
|
|
17
|
-
import Button from
|
|
18
|
-
import Checkbox from
|
|
19
|
-
import Icon from
|
|
20
|
-
import Input from
|
|
21
|
-
import Popout from
|
|
22
|
-
import Radio from
|
|
23
|
-
import Text from
|
|
24
|
-
import {
|
|
25
|
-
import innerText from
|
|
11
|
+
} from 'react';
|
|
12
|
+
import uniqueId from 'lodash.uniqueid';
|
|
13
|
+
import {MenuItemContainer, MenuItemsContainer} from './styles';
|
|
14
|
+
import {MENU_ITEM_ROLES, MENU_ROLES} from './constants';
|
|
15
|
+
|
|
16
|
+
import Box from '../Box';
|
|
17
|
+
import Button from '../Button';
|
|
18
|
+
import Checkbox from '../Checkbox';
|
|
19
|
+
import Icon from '../Icon';
|
|
20
|
+
import Input from '../Input';
|
|
21
|
+
import Popout from '../Popout';
|
|
22
|
+
import Radio from '../Radio';
|
|
23
|
+
import Text from '../Text';
|
|
24
|
+
import {disabled} from '../utils/mixins';
|
|
25
|
+
import innerText from '../utils/innerText';
|
|
26
26
|
|
|
27
27
|
import type {
|
|
28
28
|
TypeMenuButtonProps,
|
|
@@ -31,20 +31,16 @@ import type {
|
|
|
31
31
|
TypeMenuItemRoles,
|
|
32
32
|
TypeMenuProps,
|
|
33
33
|
TypeMenuRoles,
|
|
34
|
-
} from
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
useDescendant,
|
|
39
|
-
useDescendants,
|
|
40
|
-
} from "./descendants";
|
|
41
|
-
import type { TypeMenuDescendantProps } from "./hooks";
|
|
34
|
+
} from './index.flow';
|
|
35
|
+
import {useTextContent} from '../utils/hooks';
|
|
36
|
+
import {DescendantProvider, useDescendant, useDescendants} from './descendants';
|
|
37
|
+
import type {TypeMenuDescendantProps} from './hooks';
|
|
42
38
|
import {
|
|
43
39
|
MenuButtonContext,
|
|
44
40
|
MenuContext,
|
|
45
41
|
MenuDescendantContext,
|
|
46
42
|
useMenuKeyDown,
|
|
47
|
-
} from
|
|
43
|
+
} from './hooks';
|
|
48
44
|
|
|
49
45
|
const noop = () => {};
|
|
50
46
|
|
|
@@ -63,7 +59,7 @@ const getMenuItemRole = (menuRole: ?TypeMenuRoles): TypeMenuItemRoles => {
|
|
|
63
59
|
function isValueSelected(menuValue, value) {
|
|
64
60
|
if (!menuValue) return false;
|
|
65
61
|
|
|
66
|
-
if (typeof menuValue ===
|
|
62
|
+
if (typeof menuValue === 'string') {
|
|
67
63
|
return Boolean(menuValue && value && menuValue === value);
|
|
68
64
|
} else if (Array.isArray(menuValue)) {
|
|
69
65
|
return menuValue.includes(value);
|
|
@@ -97,13 +93,13 @@ export const MenuItem = ({
|
|
|
97
93
|
selectCallbacks,
|
|
98
94
|
menuRef,
|
|
99
95
|
} = useContext(MenuContext);
|
|
100
|
-
const {
|
|
101
|
-
const {
|
|
96
|
+
const {selectionIndex, filteredItems} = menuState;
|
|
97
|
+
const {closePopout, closeOnItemClick} = useContext(MenuButtonContext);
|
|
102
98
|
const isSelected = selected || isValueSelected(value, valueProp);
|
|
103
99
|
const shouldClosePopout = closeOnItemClick && !multiselect;
|
|
104
100
|
const itemRole = roleProp || getMenuItemRole(menuRole);
|
|
105
|
-
const id = useMemo(() => idProp || uniqueId(
|
|
106
|
-
const textContent = useTextContent(
|
|
101
|
+
const id = useMemo(() => idProp || uniqueId('MenuItem-'), [idProp]);
|
|
102
|
+
const textContent = useTextContent('');
|
|
107
103
|
const label = labelProp || textContent.current;
|
|
108
104
|
const ref = useRef<HTMLDivElement | null>(null);
|
|
109
105
|
const index = useDescendant<HTMLElement, TypeMenuDescendantProps>(
|
|
@@ -143,7 +139,7 @@ export const MenuItem = ({
|
|
|
143
139
|
*/
|
|
144
140
|
useEffect(() => {
|
|
145
141
|
if (isCheckboxOrRadio && ref.current) {
|
|
146
|
-
const input = ref.current.querySelector(
|
|
142
|
+
const input = ref.current.querySelector('input');
|
|
147
143
|
if (input) {
|
|
148
144
|
input.tabIndex = -1;
|
|
149
145
|
}
|
|
@@ -223,7 +219,7 @@ export const MenuItem = ({
|
|
|
223
219
|
aria-label={labelProp}
|
|
224
220
|
value={valueProp}
|
|
225
221
|
data-value={valueProp}
|
|
226
|
-
forwardedAs={as ||
|
|
222
|
+
forwardedAs={as || 'li'}
|
|
227
223
|
aria-checked={isCheckboxOrRadio ? isSelected : undefined}
|
|
228
224
|
aria-selected={
|
|
229
225
|
itemRole === MENU_ITEM_ROLES.OPTION ? isSelected : undefined
|
|
@@ -243,14 +239,14 @@ export const MenuItem = ({
|
|
|
243
239
|
<div
|
|
244
240
|
ref={ref}
|
|
245
241
|
style={{
|
|
246
|
-
display:
|
|
247
|
-
alignItems: props.alignItems ||
|
|
248
|
-
justifyContent:
|
|
242
|
+
display: 'flex',
|
|
243
|
+
alignItems: props.alignItems || 'center',
|
|
244
|
+
justifyContent: 'space-between',
|
|
249
245
|
}}
|
|
250
246
|
>
|
|
251
247
|
{before}
|
|
252
248
|
<div
|
|
253
|
-
style={{
|
|
249
|
+
style={{flexGrow: 1, wordBreak: 'break-word', minWidth: 0}}
|
|
254
250
|
ref={textContent}
|
|
255
251
|
>
|
|
256
252
|
{children}
|
|
@@ -284,7 +280,7 @@ export const MenuGroup = ({
|
|
|
284
280
|
mt="-1px"
|
|
285
281
|
>
|
|
286
282
|
<Text
|
|
287
|
-
forwardedAs={titleAs ||
|
|
283
|
+
forwardedAs={titleAs || 'div'}
|
|
288
284
|
fontSize={200}
|
|
289
285
|
fontWeight={600}
|
|
290
286
|
mt={350}
|
|
@@ -312,12 +308,12 @@ export const MenuDivider = (props: any) => (
|
|
|
312
308
|
);
|
|
313
309
|
|
|
314
310
|
const MenuFilterInput = (props: React$ElementConfig<typeof Input>) => {
|
|
315
|
-
const {
|
|
316
|
-
const {
|
|
311
|
+
const {onChange, onFocus, onBlur} = props;
|
|
312
|
+
const {state, setState} = useContext(MenuContext);
|
|
317
313
|
const handleOnChange = useCallback(
|
|
318
314
|
(event, value) => {
|
|
319
315
|
onChange && onChange(event, value);
|
|
320
|
-
setState({
|
|
316
|
+
setState({filterQuery: value});
|
|
321
317
|
},
|
|
322
318
|
[setState, onChange]
|
|
323
319
|
);
|
|
@@ -325,7 +321,7 @@ const MenuFilterInput = (props: React$ElementConfig<typeof Input>) => {
|
|
|
325
321
|
const handleOnFocus = useCallback(
|
|
326
322
|
(event) => {
|
|
327
323
|
onFocus && onFocus(event);
|
|
328
|
-
setState({
|
|
324
|
+
setState({isFilterInputFocused: true});
|
|
329
325
|
},
|
|
330
326
|
[setState, onFocus]
|
|
331
327
|
);
|
|
@@ -333,7 +329,7 @@ const MenuFilterInput = (props: React$ElementConfig<typeof Input>) => {
|
|
|
333
329
|
const handleOnBlur = useCallback(
|
|
334
330
|
(event) => {
|
|
335
331
|
onBlur && onBlur(event);
|
|
336
|
-
setState({
|
|
332
|
+
setState({isFilterInputFocused: false});
|
|
337
333
|
},
|
|
338
334
|
[setState, onBlur]
|
|
339
335
|
);
|
|
@@ -356,7 +352,7 @@ const MenuItems = ({
|
|
|
356
352
|
innerRef,
|
|
357
353
|
...props
|
|
358
354
|
}: TypeMenuProps) => {
|
|
359
|
-
const {
|
|
355
|
+
const {handleKeyDown, activeDescendent} = useMenuKeyDown();
|
|
360
356
|
|
|
361
357
|
return (
|
|
362
358
|
<MenuItemsContainer
|
|
@@ -392,7 +388,7 @@ export const Menu = ({
|
|
|
392
388
|
>();
|
|
393
389
|
const [state, setState] = useState({
|
|
394
390
|
selectionIndex: 0,
|
|
395
|
-
filterQuery:
|
|
391
|
+
filterQuery: '',
|
|
396
392
|
filteredItems: null,
|
|
397
393
|
isFilterInputFocused: false,
|
|
398
394
|
});
|
|
@@ -400,7 +396,7 @@ export const Menu = ({
|
|
|
400
396
|
const menuRef = useRef(null);
|
|
401
397
|
const setContextState = useCallback(
|
|
402
398
|
(newState) => {
|
|
403
|
-
setState({
|
|
399
|
+
setState({...state, ...newState});
|
|
404
400
|
},
|
|
405
401
|
[state]
|
|
406
402
|
);
|
|
@@ -445,12 +441,12 @@ Menu.Radio = MenuRadio;
|
|
|
445
441
|
Menu.Divider = MenuDivider;
|
|
446
442
|
Menu.FilterInput = MenuFilterInput;
|
|
447
443
|
|
|
448
|
-
Menu.Group.displayName =
|
|
449
|
-
Menu.Item.displayName =
|
|
450
|
-
Menu.Checkbox.displayName =
|
|
451
|
-
Menu.Radio.displayName =
|
|
452
|
-
Menu.Divider.displayName =
|
|
453
|
-
Menu.FilterInput.displayName =
|
|
444
|
+
Menu.Group.displayName = 'Menu.Group';
|
|
445
|
+
Menu.Item.displayName = 'Menu.Item';
|
|
446
|
+
Menu.Checkbox.displayName = 'Menu.Checkbox';
|
|
447
|
+
Menu.Radio.displayName = 'Menu.Radio';
|
|
448
|
+
Menu.Divider.displayName = 'Menu.Divider';
|
|
449
|
+
Menu.FilterInput.displayName = 'Menu.FilterInput';
|
|
454
450
|
|
|
455
451
|
const CustomPopoutContent = styled(Popout.Content)`
|
|
456
452
|
padding: 0;
|
|
@@ -464,23 +460,23 @@ export const MenuButton = ({
|
|
|
464
460
|
children,
|
|
465
461
|
onClick,
|
|
466
462
|
closeOnItemClick = true,
|
|
467
|
-
id = uniqueId(
|
|
468
|
-
placement =
|
|
463
|
+
id = uniqueId('MenuButton-'),
|
|
464
|
+
placement = 'bottom',
|
|
469
465
|
...props
|
|
470
466
|
}: TypeMenuButtonProps) => {
|
|
471
467
|
const [isOpen, setIsOpen] = useState(false);
|
|
472
468
|
|
|
473
469
|
const closePopout = useCallback(() => setIsOpen(false), [setIsOpen]);
|
|
474
470
|
|
|
475
|
-
const ariaLabelledBy = props[
|
|
476
|
-
? `${props[
|
|
471
|
+
const ariaLabelledBy = props['aria-labelledby']
|
|
472
|
+
? `${props['aria-labelledby']} ${id}`
|
|
477
473
|
: undefined;
|
|
478
|
-
const ariaLabel = props[
|
|
479
|
-
? `${props[
|
|
474
|
+
const ariaLabel = props['aria-label']
|
|
475
|
+
? `${props['aria-label']} ${innerText(children)}`
|
|
480
476
|
: undefined;
|
|
481
477
|
|
|
482
478
|
return (
|
|
483
|
-
<MenuButtonContext.Provider value={{
|
|
479
|
+
<MenuButtonContext.Provider value={{closePopout, closeOnItemClick}}>
|
|
484
480
|
<Popout
|
|
485
481
|
isOpen={isOpen}
|
|
486
482
|
setIsOpen={setIsOpen}
|
|
@@ -497,7 +493,7 @@ export const MenuButton = ({
|
|
|
497
493
|
aria-label={ariaLabel?.trim()}
|
|
498
494
|
active={isOpen}
|
|
499
495
|
onKeyDown={(e) => {
|
|
500
|
-
if (e.key ===
|
|
496
|
+
if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
|
|
501
497
|
onClick && onClick(e);
|
|
502
498
|
setIsOpen(true);
|
|
503
499
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import React, {
|
|
3
|
-
import Menu, {
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
6
|
-
import OverflowList from
|
|
7
|
-
import Icon from
|
|
8
|
-
import {
|
|
9
|
-
import Text from
|
|
10
|
-
import Box from
|
|
2
|
+
import React, {useContext} from 'react';
|
|
3
|
+
import Menu, {MenuButton, MenuCheckbox} from './index';
|
|
4
|
+
import type {TypeMenuProps} from './index.flow';
|
|
5
|
+
import {MenuButtonContext} from './hooks';
|
|
6
|
+
import OverflowList from '../OverflowList';
|
|
7
|
+
import Icon from '../Icon';
|
|
8
|
+
import {names} from './names';
|
|
9
|
+
import Text from '../Text';
|
|
10
|
+
import Box from '../Box';
|
|
11
11
|
|
|
12
|
-
const fruit = [
|
|
13
|
-
const maybeFruit = [
|
|
12
|
+
const fruit = ['Apple', 'Banana', 'Blueberry', 'Orange'];
|
|
13
|
+
const maybeFruit = ['Tomato', 'Cucumber', 'Squash'];
|
|
14
14
|
|
|
15
15
|
export default {
|
|
16
|
-
title:
|
|
16
|
+
title: 'Components/Menu',
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
const BaseContents = () => (
|
|
@@ -95,7 +95,7 @@ const VirtualizedMenu = (props: TypeMenuProps) => {
|
|
|
95
95
|
export const defaultStory = () => <BaseMenu />;
|
|
96
96
|
|
|
97
97
|
defaultStory.story = {
|
|
98
|
-
name:
|
|
98
|
+
name: 'Default',
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
export const Popout = () => (
|
|
@@ -131,8 +131,8 @@ export const PropGetters = () => {
|
|
|
131
131
|
height="400px"
|
|
132
132
|
width="auto"
|
|
133
133
|
items={names}
|
|
134
|
-
getItemProps={({
|
|
135
|
-
ItemComponent={({
|
|
134
|
+
getItemProps={({item}) => ({key: item, item})}
|
|
135
|
+
ItemComponent={({item}) => (
|
|
136
136
|
<Menu.Item onClick={() => alert(item)}>{item}</Menu.Item>
|
|
137
137
|
)}
|
|
138
138
|
/>
|
|
@@ -151,7 +151,7 @@ export const PropGetters = () => {
|
|
|
151
151
|
};
|
|
152
152
|
|
|
153
153
|
const CloseOnClick = () => {
|
|
154
|
-
const {
|
|
154
|
+
const {closePopout} = useContext(MenuButtonContext);
|
|
155
155
|
return (
|
|
156
156
|
<Menu.Item
|
|
157
157
|
onClick={() => {
|
|
@@ -220,15 +220,15 @@ export const MenuWithIcons = (props: TypeMenuProps) => {
|
|
|
220
220
|
backgroundColor="container.background.base"
|
|
221
221
|
>
|
|
222
222
|
<Menu {...props}>
|
|
223
|
-
<Menu.Item key="positive" onClick={() => alert(
|
|
223
|
+
<Menu.Item key="positive" onClick={() => alert('positive')}>
|
|
224
224
|
<Icon name="flat-positive-sentiment" mr={200} color="icon.info" />
|
|
225
225
|
Positive
|
|
226
226
|
</Menu.Item>
|
|
227
|
-
<Menu.Item key="negative" onClick={() => alert(
|
|
227
|
+
<Menu.Item key="negative" onClick={() => alert('negative')}>
|
|
228
228
|
<Icon name="flat-negative-sentiment" mr={200} color="icon.error" />
|
|
229
229
|
Negative
|
|
230
230
|
</Menu.Item>
|
|
231
|
-
<Menu.Item key="neutral" onClick={() => alert(
|
|
231
|
+
<Menu.Item key="neutral" onClick={() => alert('neutral')}>
|
|
232
232
|
<Icon name="flat-neutral-sentiment" mr={200} />
|
|
233
233
|
Neutral
|
|
234
234
|
</Menu.Item>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import React from
|
|
2
|
+
import React from 'react';
|
|
3
3
|
import {
|
|
4
4
|
render,
|
|
5
5
|
cleanup,
|
|
6
6
|
fireEvent,
|
|
7
7
|
waitForElementToBeRemoved,
|
|
8
|
-
} from
|
|
9
|
-
import Icon from
|
|
8
|
+
} from '../utils/react-testing-library';
|
|
9
|
+
import Icon from '../Icon';
|
|
10
10
|
|
|
11
|
-
import Menu, {
|
|
12
|
-
import type {
|
|
13
|
-
import {
|
|
11
|
+
import Menu, {MenuButton} from './index';
|
|
12
|
+
import type {TypeMenuProps} from './index.flow';
|
|
13
|
+
import {MENU_ITEM_ROLES} from './constants';
|
|
14
14
|
|
|
15
|
-
const fruit = [
|
|
16
|
-
const maybeFruit = [
|
|
15
|
+
const fruit = ['Apple', 'Banana', 'Orange'];
|
|
16
|
+
const maybeFruit = ['Tomato', 'Cucumber', 'Squash'];
|
|
17
17
|
const mockOnClick = jest.fn();
|
|
18
18
|
|
|
19
19
|
export const AsMenu = (props: TypeMenuProps) => {
|
|
@@ -49,39 +49,39 @@ export const AsMenuButton = () => {
|
|
|
49
49
|
);
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
describe(
|
|
52
|
+
describe('Menu', () => {
|
|
53
53
|
afterEach(() => {
|
|
54
54
|
mockOnClick.mockClear();
|
|
55
55
|
cleanup();
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
-
describe(
|
|
59
|
-
it(
|
|
60
|
-
const {
|
|
58
|
+
describe('AsMenu', () => {
|
|
59
|
+
it('should render items with menuitem role', () => {
|
|
60
|
+
const {queryByRole, queryByDataQaLabel} = render(<AsMenu />);
|
|
61
61
|
const firstItem = queryByRole(MENU_ITEM_ROLES.MENUITEM, {
|
|
62
62
|
name: fruit[0],
|
|
63
63
|
});
|
|
64
64
|
|
|
65
65
|
expect(firstItem).toBeInTheDocument();
|
|
66
|
-
expect(queryByDataQaLabel({
|
|
66
|
+
expect(queryByDataQaLabel({'menu-item': fruit[0]})).toBeInTheDocument();
|
|
67
67
|
fireEvent.click(firstItem);
|
|
68
68
|
expect(mockOnClick).toHaveBeenCalled();
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
describe(
|
|
73
|
-
it(
|
|
72
|
+
describe('AsMenuButton', () => {
|
|
73
|
+
it('should match snapshot', () => {
|
|
74
74
|
expect(render(<AsMenuButton />).baseElement).toMatchSnapshot();
|
|
75
75
|
});
|
|
76
76
|
|
|
77
|
-
it(
|
|
78
|
-
const {
|
|
79
|
-
const menuButton = queryByLabelText(
|
|
77
|
+
it('should open the menu on click', async () => {
|
|
78
|
+
const {queryByLabelText, queryByRole} = render(<AsMenuButton />);
|
|
79
|
+
const menuButton = queryByLabelText('Open Menu');
|
|
80
80
|
|
|
81
81
|
expect(menuButton).toBeInTheDocument();
|
|
82
|
-
const item = queryByRole(MENU_ITEM_ROLES.MENUITEM, {
|
|
82
|
+
const item = queryByRole(MENU_ITEM_ROLES.MENUITEM, {name: fruit[0]});
|
|
83
83
|
expect(item).not.toBeInTheDocument();
|
|
84
|
-
expect(menuButton).toHaveAttribute(
|
|
84
|
+
expect(menuButton).toHaveAttribute('aria-haspopup', 'true');
|
|
85
85
|
|
|
86
86
|
// Clicking button opens popout and focuses first item
|
|
87
87
|
fireEvent.click(menuButton);
|
|
@@ -89,14 +89,14 @@ describe("Menu", () => {
|
|
|
89
89
|
name: fruit[0],
|
|
90
90
|
});
|
|
91
91
|
expect(firstItem).toBeInTheDocument();
|
|
92
|
-
expect(queryByRole(
|
|
92
|
+
expect(queryByRole('menu')).toBe(document.activeElement);
|
|
93
93
|
|
|
94
94
|
// Clicking calls onClick and closes popout
|
|
95
95
|
fireEvent.click(firstItem);
|
|
96
96
|
expect(mockOnClick).toHaveBeenCalled();
|
|
97
97
|
|
|
98
98
|
await waitForElementToBeRemoved(() =>
|
|
99
|
-
queryByRole(MENU_ITEM_ROLES.MENUITEM, {
|
|
99
|
+
queryByRole(MENU_ITEM_ROLES.MENUITEM, {name: fruit[0]})
|
|
100
100
|
);
|
|
101
101
|
});
|
|
102
102
|
});
|