@zohodesk/components 1.6.24 → 1.6.26
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 +2042 -0
- package/README.md +16 -2027
- package/assets/Appearance/dark/mode/Component_DarkMode.module.css +321 -330
- package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +64 -79
- package/assets/Appearance/dark/themes/blue/blue_ComponentTheme_DarkTheme.module.css +29 -33
- package/assets/Appearance/dark/themes/blue/blue_componentsCTA_DarkModifyCategory.module.css +13 -13
- package/assets/Appearance/dark/themes/green/green_ComponentTheme_DarkTheme.module.css +29 -33
- package/assets/Appearance/dark/themes/green/green_componentsCTA_DarkModifyCategory.module.css +13 -13
- package/assets/Appearance/dark/themes/orange/orange_ComponentTheme_DarkTheme.module.css +29 -33
- package/assets/Appearance/dark/themes/orange/orange_componentsCTA_DarkModifyCategory.module.css +13 -13
- package/assets/Appearance/dark/themes/red/red_ComponentTheme_DarkTheme.module.css +29 -33
- package/assets/Appearance/dark/themes/red/red_componentsCTA_DarkModifyCategory.module.css +13 -13
- package/assets/Appearance/dark/themes/yellow/yellow_ComponentTheme_DarkTheme.module.css +29 -33
- package/assets/Appearance/dark/themes/yellow/yellow_componentsCTA_DarkModifyCategory.module.css +13 -13
- package/assets/Appearance/light/mode/Component_LightMode.module.css +321 -330
- package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +64 -79
- package/assets/Appearance/light/themes/blue/blue_ComponentTheme_LightTheme.module.css +29 -33
- package/assets/Appearance/light/themes/blue/blue_componentsCTA_LightModifyCategory.module.css +13 -13
- package/assets/Appearance/light/themes/green/green_ComponentTheme_LightTheme.module.css +29 -33
- package/assets/Appearance/light/themes/green/green_componentsCTA_LightModifyCategory.module.css +13 -13
- package/assets/Appearance/light/themes/orange/orange_ComponentTheme_LightTheme.module.css +29 -33
- package/assets/Appearance/light/themes/orange/orange_componentsCTA_LightModifyCategory.module.css +13 -13
- package/assets/Appearance/light/themes/red/red_ComponentTheme_LightTheme.module.css +29 -33
- package/assets/Appearance/light/themes/red/red_componentsCTA_LightModifyCategory.module.css +13 -13
- package/assets/Appearance/light/themes/yellow/yellow_ComponentTheme_LightTheme.module.css +29 -33
- package/assets/Appearance/light/themes/yellow/yellow_componentsCTA_LightModifyCategory.module.css +13 -13
- package/assets/Appearance/pureDark/mode/Component_PureDarkMode.module.css +321 -330
- package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +64 -79
- package/assets/Appearance/pureDark/themes/blue/blue_ComponentTheme_PureDarkTheme.module.css +29 -33
- package/assets/Appearance/pureDark/themes/blue/blue_componentsCTA_PureDarkModifyCategory.module.css +13 -13
- package/assets/Appearance/pureDark/themes/green/green_ComponentTheme_PureDarkTheme.module.css +29 -33
- package/assets/Appearance/pureDark/themes/green/green_componentsCTA_PureDarkModifyCategory.module.css +13 -13
- package/assets/Appearance/pureDark/themes/orange/orange_ComponentTheme_PureDarkTheme.module.css +29 -33
- package/assets/Appearance/pureDark/themes/orange/orange_componentsCTA_PureDarkModifyCategory.module.css +13 -13
- package/assets/Appearance/pureDark/themes/red/red_ComponentTheme_PureDarkTheme.module.css +29 -33
- package/assets/Appearance/pureDark/themes/red/red_componentsCTA_PureDarkModifyCategory.module.css +13 -13
- package/assets/Appearance/pureDark/themes/yellow/yellow_ComponentTheme_PureDarkTheme.module.css +29 -33
- package/assets/Appearance/pureDark/themes/yellow/yellow_componentsCTA_PureDarkModifyCategory.module.css +13 -13
- package/es/Accordion/Accordion.js +1 -6
- package/es/Accordion/AccordionItem.js +1 -6
- package/es/Animation/Animation.js +1 -8
- package/es/AppContainer/AppContainer.js +1 -6
- package/es/AppContainer/__tests__/__snapshots__/AppContainer.spec.js.snap +16 -16
- package/es/Avatar/Avatar.js +1 -6
- package/es/AvatarTeam/AvatarTeam.js +1 -7
- package/es/Button/Button.js +1 -6
- package/es/Buttongroup/Buttongroup.js +1 -14
- package/es/Card/Card.js +1 -9
- package/es/Card/__tests__/__snapshots__/Card.spec.js.snap +17 -17
- package/es/Card/__tests__/__snapshots__/CardContent.spec.js.snap +12 -12
- package/es/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +4 -4
- package/es/CheckBox/CheckBox.js +1 -6
- package/es/CheckBox/__tests__/__snapshots__/CheckBox.spec.js.snap +88 -88
- package/es/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +48 -48
- package/es/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +30 -30
- package/es/DateTime/DateWidget.js +0 -10
- package/es/DateTime/__tests__/__snapshots__/CalendarView.spec.js.snap +49 -49
- package/es/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +93 -93
- package/es/DateTime/__tests__/__snapshots__/DateTimePopupFooter.spec.js.snap +1 -1
- package/es/DateTime/__tests__/__snapshots__/DateTimePopupHeader.spec.js.snap +8 -8
- package/es/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +7 -7
- package/es/DateTime/__tests__/__snapshots__/DaysRow.spec.js.snap +1 -1
- package/es/DateTime/__tests__/__snapshots__/Time.spec.js.snap +28 -28
- package/es/DropDown/DropDownHeading.js +1 -6
- package/es/DropDown/__tests__/__snapshots__/DropDown.spec.js.snap +2 -2
- package/es/Heading/Heading.js +1 -6
- package/es/Label/Label.js +1 -6
- package/es/Label/__tests__/__snapshots__/Label.spec.js.snap +4 -4
- package/es/ListItem/ListContainer.js +1 -6
- package/es/ListItem/ListItem.js +1 -6
- package/es/ListItem/ListItemWithAvatar.js +1 -6
- package/es/ListItem/ListItemWithCheckBox.js +1 -6
- package/es/ListItem/ListItemWithIcon.js +1 -6
- package/es/ListItem/ListItemWithRadio.js +1 -6
- package/es/ListItem/__tests__/__snapshots__/ListContainer.spec.js.snap +2 -2
- package/es/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +16 -16
- package/es/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +41 -41
- package/es/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +62 -62
- package/es/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +41 -41
- package/es/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +62 -62
- package/es/Modal/Modal.js +1 -8
- package/es/MultiSelect/AdvancedGroupMultiSelect.js +1 -7
- package/es/MultiSelect/AdvancedMultiSelect.js +1 -9
- package/es/MultiSelect/MobileHeader/__tests__/__snapshots__/MobileHeader.spec.js.snap +3 -3
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +6 -6
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +50 -50
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +35 -35
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +7 -7
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +8 -8
- package/es/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +4 -4
- package/es/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +47 -47
- package/es/Radio/__tests__/__snapshots__/Radio.spec.js.snap +94 -94
- package/es/ResponsiveDropBox/__tests__/__snapshots__/ResponsiveDropBox.spec.js.snap +1 -1
- package/es/RippleEffect/RippleEffect.js +1 -6
- package/es/Select/GroupSelect.js +1 -8
- package/es/Select/Select.js +1 -10
- package/es/Select/SelectWithAvatar.js +1 -9
- package/es/Select/SelectWithIcon.js +1 -7
- package/es/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +7 -7
- package/es/Select/__tests__/__snapshots__/Select.spec.js.snap +831 -831
- package/es/Select/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +2 -2
- package/es/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +10 -10
- package/es/Switch/Switch.js +1 -6
- package/es/Switch/__tests__/__snapshots__/Switch.spec.js.snap +44 -44
- package/es/Tab/Tab.js +1 -6
- package/es/Tab/__tests__/__snapshots__/Tab.spec.js.snap +2 -2
- package/es/Tab/__tests__/__snapshots__/TabContent.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/TabContentWrapper.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/TabLayout.spec.js.snap +40 -40
- package/es/Tab/__tests__/__snapshots__/TabWrapper.spec.js.snap +1 -1
- package/es/Tab/__tests__/__snapshots__/Tabs.spec.js.snap +4 -4
- package/es/Tag/Tag.js +1 -6
- package/es/Tag/__tests__/__snapshots__/Tag.spec.js.snap +94 -94
- package/es/TextBox/TextBox.js +1 -8
- package/es/TextBoxIcon/TextBoxIcon.js +1 -8
- package/es/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +167 -167
- package/es/Textarea/Textarea.js +1 -8
- package/es/Tooltip/Tooltip.js +1 -8
- package/es/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +1 -5
- package/es/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +1 -5
- package/es/semantic/Button/Button.js +1 -6
- package/es/shared/ArrowIcon/__tests__/__snapshots__/ArrowIcon.spec.js.snap +20 -20
- package/es/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +19 -19
- package/es/v1/Button/Button.js +198 -114
- package/es/v1/Button/README.md +110 -44
- package/es/v1/Button/__tests__/Button.spec.js +139 -48
- package/es/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1236 -340
- package/es/v1/Button/constants/index.js +29 -23
- package/es/v1/Button/constants/presets.js +160 -0
- package/es/v1/Button/css/Button_v1.module.css +33 -16
- package/es/v1/Button/css/cssJSLogic.js +56 -29
- package/es/v1/Button/props/defaultProps.js +5 -6
- package/es/v1/Button/props/propTypes.js +26 -8
- package/es/v1/Label/__tests__/__snapshots__/Label.spec.js.snap +24 -24
- package/es/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +14 -14
- package/es/v1/helpers/colorHelpers/__tests__/colorHelper.spec.js +357 -0
- package/es/v1/helpers/colorHelpers/background/backgroundColor.module.css +38 -534
- package/es/v1/helpers/colorHelpers/border/borderColor.module.css +28 -412
- package/es/v1/helpers/colorHelpers/colorHelper.js +120 -139
- package/es/v1/helpers/colorHelpers/constants/index.js +45 -4
- package/es/v1/helpers/colorHelpers/index.js +0 -1
- package/es/v1/helpers/colorHelpers/paletteUtilities.README.md +141 -336
- package/es/v1/helpers/colorHelpers/text/textColor.module.css +79 -295
- package/es/v1/shared/{Loader/Loader.js → Spinner/Spinner.js} +5 -5
- package/es/v1/shared/{Loader/__tests__/Loader.spec.js → Spinner/__tests__/Spinner.spec.js} +4 -4
- package/{lib/v1/shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap → es/v1/shared/Spinner/__tests__/__snapshots__/Spinner.spec.js.snap} +2 -2
- package/lib/Accordion/Accordion.js +1 -6
- package/lib/Accordion/AccordionItem.js +1 -6
- package/lib/Animation/Animation.js +1 -8
- package/lib/AppContainer/AppContainer.js +1 -6
- package/lib/AppContainer/__tests__/__snapshots__/AppContainer.spec.js.snap +16 -16
- package/lib/Avatar/Avatar.js +1 -6
- package/lib/AvatarTeam/AvatarTeam.js +1 -7
- package/lib/Button/Button.js +1 -7
- package/lib/Buttongroup/Buttongroup.js +1 -14
- package/lib/Card/Card.js +1 -8
- package/lib/Card/__tests__/__snapshots__/Card.spec.js.snap +17 -17
- package/lib/Card/__tests__/__snapshots__/CardContent.spec.js.snap +12 -12
- package/lib/Card/__tests__/__snapshots__/CardHeader.spec.js.snap +4 -4
- package/lib/CheckBox/CheckBox.js +1 -6
- package/lib/CheckBox/__tests__/__snapshots__/CheckBox.spec.js.snap +88 -88
- package/lib/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +48 -48
- package/lib/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +30 -30
- package/lib/DateTime/DateWidget.js +0 -10
- package/lib/DateTime/__tests__/__snapshots__/CalendarView.spec.js.snap +49 -49
- package/lib/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +93 -93
- package/lib/DateTime/__tests__/__snapshots__/DateTimePopupFooter.spec.js.snap +1 -1
- package/lib/DateTime/__tests__/__snapshots__/DateTimePopupHeader.spec.js.snap +8 -8
- package/lib/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +7 -7
- package/lib/DateTime/__tests__/__snapshots__/DaysRow.spec.js.snap +1 -1
- package/lib/DateTime/__tests__/__snapshots__/Time.spec.js.snap +28 -28
- package/lib/DropDown/DropDownHeading.js +1 -6
- package/lib/DropDown/__tests__/__snapshots__/DropDown.spec.js.snap +2 -2
- package/lib/Heading/Heading.js +1 -6
- package/lib/Label/Label.js +1 -6
- package/lib/Label/__tests__/__snapshots__/Label.spec.js.snap +4 -4
- package/lib/ListItem/ListContainer.js +1 -7
- package/lib/ListItem/ListItem.js +1 -6
- package/lib/ListItem/ListItemWithAvatar.js +1 -6
- package/lib/ListItem/ListItemWithCheckBox.js +1 -6
- package/lib/ListItem/ListItemWithIcon.js +1 -6
- package/lib/ListItem/ListItemWithRadio.js +1 -6
- package/lib/ListItem/__tests__/__snapshots__/ListContainer.spec.js.snap +2 -2
- package/lib/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +16 -16
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +41 -41
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +62 -62
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +41 -41
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +62 -62
- package/lib/Modal/Modal.js +1 -8
- package/lib/MultiSelect/AdvancedGroupMultiSelect.js +1 -7
- package/lib/MultiSelect/AdvancedMultiSelect.js +1 -9
- package/lib/MultiSelect/MobileHeader/__tests__/__snapshots__/MobileHeader.spec.js.snap +3 -3
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +6 -6
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +50 -50
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +35 -35
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectHeader.spec.js.snap +7 -7
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +8 -8
- package/lib/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +4 -4
- package/lib/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +47 -47
- package/lib/Radio/__tests__/__snapshots__/Radio.spec.js.snap +94 -94
- package/lib/ResponsiveDropBox/__tests__/__snapshots__/ResponsiveDropBox.spec.js.snap +1 -1
- package/lib/RippleEffect/RippleEffect.js +1 -6
- package/lib/Select/GroupSelect.js +1 -9
- package/lib/Select/Select.js +1 -11
- package/lib/Select/SelectWithAvatar.js +1 -9
- package/lib/Select/SelectWithIcon.js +1 -7
- package/lib/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +7 -7
- package/lib/Select/__tests__/__snapshots__/Select.spec.js.snap +831 -831
- package/lib/Select/__tests__/__snapshots__/SelectWithAvatar.spec.js.snap +2 -2
- package/lib/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +10 -10
- package/lib/Switch/Switch.js +1 -6
- package/lib/Switch/__tests__/__snapshots__/Switch.spec.js.snap +44 -44
- package/lib/Tab/Tab.js +1 -6
- package/lib/Tab/__tests__/__snapshots__/Tab.spec.js.snap +2 -2
- package/lib/Tab/__tests__/__snapshots__/TabContent.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/TabContentWrapper.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/TabLayout.spec.js.snap +40 -40
- package/lib/Tab/__tests__/__snapshots__/TabWrapper.spec.js.snap +1 -1
- package/lib/Tab/__tests__/__snapshots__/Tabs.spec.js.snap +4 -4
- package/lib/Tag/Tag.js +1 -6
- package/lib/Tag/__tests__/__snapshots__/Tag.spec.js.snap +94 -94
- package/lib/TextBox/TextBox.js +1 -8
- package/lib/TextBoxIcon/TextBoxIcon.js +1 -8
- package/lib/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +167 -167
- package/lib/Textarea/Textarea.js +1 -8
- package/lib/Tooltip/Tooltip.js +1 -8
- package/lib/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +1 -5
- package/lib/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +1 -5
- package/lib/semantic/Button/Button.js +1 -6
- package/lib/shared/ArrowIcon/__tests__/__snapshots__/ArrowIcon.spec.js.snap +20 -20
- package/lib/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +19 -19
- package/lib/v1/Button/Button.js +208 -124
- package/lib/v1/Button/README.md +110 -44
- package/lib/v1/Button/__tests__/Button.spec.js +195 -88
- package/lib/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1236 -340
- package/lib/v1/Button/constants/index.js +34 -31
- package/lib/v1/Button/constants/presets.js +179 -0
- package/lib/v1/Button/css/Button_v1.module.css +33 -16
- package/lib/v1/Button/css/cssJSLogic.js +45 -25
- package/lib/v1/Button/props/defaultProps.js +4 -5
- package/lib/v1/Button/props/propTypes.js +41 -7
- package/lib/v1/Label/__tests__/__snapshots__/Label.spec.js.snap +24 -24
- package/lib/v1/Switch/__tests__/__snapshots__/Switch.spec.js.snap +14 -14
- package/lib/v1/helpers/colorHelpers/__tests__/colorHelper.spec.js +363 -0
- package/lib/v1/helpers/colorHelpers/background/backgroundColor.module.css +38 -534
- package/lib/v1/helpers/colorHelpers/border/borderColor.module.css +28 -412
- package/lib/v1/helpers/colorHelpers/colorHelper.js +130 -153
- package/lib/v1/helpers/colorHelpers/constants/index.js +45 -4
- package/lib/v1/helpers/colorHelpers/index.js +2 -24
- package/lib/v1/helpers/colorHelpers/paletteUtilities.README.md +141 -336
- package/lib/v1/helpers/colorHelpers/text/textColor.module.css +79 -295
- package/lib/v1/shared/{Loader/Loader.js → Spinner/Spinner.js} +8 -8
- package/lib/v1/shared/{Loader/__tests__/Loader.spec.js → Spinner/__tests__/Spinner.spec.js} +4 -4
- package/{es/v1/shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap → lib/v1/shared/Spinner/__tests__/__snapshots__/Spinner.spec.js.snap} +2 -2
- package/package.json +19 -19
- /package/es/v1/shared/{Loader/Loader_v1.module.css → Spinner/Spinner_v1.module.css} +0 -0
- /package/es/v1/shared/{Loader → Spinner}/props/defaultProps.js +0 -0
- /package/es/v1/shared/{Loader → Spinner}/props/propTypes.js +0 -0
- /package/lib/v1/shared/{Loader/Loader_v1.module.css → Spinner/Spinner_v1.module.css} +0 -0
- /package/lib/v1/shared/{Loader → Spinner}/props/defaultProps.js +0 -0
- /package/lib/v1/shared/{Loader → Spinner}/props/propTypes.js +0 -0
package/es/v1/Button/Button.js
CHANGED
|
@@ -6,31 +6,31 @@ import React, { forwardRef, memo, useMemo } from 'react';
|
|
|
6
6
|
import { withComponentRegistrar } from '@zohodesk/dotkit/es/react/ComponentRegistry';
|
|
7
7
|
import Icon from '@zohodesk/icons/es/Icon';
|
|
8
8
|
import Flex from '@zohodesk/layout/es/Flex/Flex';
|
|
9
|
-
import
|
|
10
|
-
import { isRenderable } from '@zohodesk/utils/es/renderNode';
|
|
11
|
-
import renderNode from '@zohodesk/utils/es/renderNode';
|
|
12
|
-
import propTypes from "./props/propTypes";
|
|
13
|
-
import defaultProps from "./props/defaultProps";
|
|
9
|
+
import renderNode, { isRenderable } from '@zohodesk/utils/es/renderNode';
|
|
14
10
|
import { DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
|
|
15
11
|
import { ICON_PLACEMENT, LOADER_PLACEMENT, STATUS, TYPOGRAPHY_SIZE_MAP, VARIANT } from "./constants";
|
|
16
|
-
import
|
|
12
|
+
import Typography from "../../Typography/Typography";
|
|
13
|
+
import Spinner from "../shared/Spinner/Spinner";
|
|
17
14
|
import SuccessTick from "../shared/SuccessTick/SuccessTick";
|
|
18
15
|
import cssJSLogic from "./css/cssJSLogic";
|
|
16
|
+
import propTypes from "./props/propTypes";
|
|
17
|
+
import defaultProps from "./props/defaultProps";
|
|
19
18
|
|
|
20
19
|
const getTypographySize = size => TYPOGRAPHY_SIZE_MAP[size] || '13';
|
|
21
20
|
|
|
22
|
-
const
|
|
21
|
+
export const ButtonPresentational = /*#__PURE__*/forwardRef(function ButtonPresentational(props, ref) {
|
|
23
22
|
const {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
isLoading,
|
|
24
|
+
isSuccess,
|
|
25
|
+
isDisabled,
|
|
26
|
+
isDisabledState,
|
|
27
|
+
overlayActive,
|
|
27
28
|
variant,
|
|
28
|
-
|
|
29
|
+
iconPlacement,
|
|
29
30
|
loaderPlacement,
|
|
30
31
|
size,
|
|
31
32
|
iconName,
|
|
32
33
|
iconSize,
|
|
33
|
-
iconPlacement,
|
|
34
34
|
renderIcon,
|
|
35
35
|
renderBefore,
|
|
36
36
|
renderAfter,
|
|
@@ -38,131 +38,107 @@ const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
|
|
|
38
38
|
renderSuccess,
|
|
39
39
|
children,
|
|
40
40
|
type,
|
|
41
|
-
onClick,
|
|
42
|
-
isDisabled,
|
|
43
|
-
isReadOnly,
|
|
44
41
|
isSelected,
|
|
45
|
-
shape,
|
|
46
|
-
paletteShade,
|
|
47
|
-
disabledAppearance,
|
|
48
42
|
title,
|
|
49
43
|
customProps,
|
|
50
44
|
customAttributes,
|
|
51
45
|
a11yAttributes,
|
|
52
46
|
customId,
|
|
53
|
-
testId
|
|
47
|
+
testId,
|
|
48
|
+
dataSelectorId,
|
|
49
|
+
handleClick,
|
|
50
|
+
classNames
|
|
54
51
|
} = props;
|
|
55
|
-
const isLoading = status === STATUS.LOADING;
|
|
56
|
-
const isSuccess = status === STATUS.SUCCESS;
|
|
57
|
-
const isDisabledState = isDisabled || isLoading;
|
|
58
|
-
const isInteractionDisabled = isDisabledState || isReadOnly;
|
|
59
|
-
const overlayActive = (isLoading || isSuccess) && loaderPlacement === LOADER_PLACEMENT.OVERLAY;
|
|
60
|
-
const {
|
|
61
|
-
text: contentProps = DUMMY_OBJECT,
|
|
62
|
-
icon: iconProps = DUMMY_OBJECT
|
|
63
|
-
} = customProps;
|
|
64
|
-
const iconTagAttributes = useMemo(() => ({ ...(iconProps.tagAttributes || DUMMY_OBJECT),
|
|
65
|
-
'data-test-id': testId ? `${testId}_icon` : undefined
|
|
66
|
-
}), [iconProps.tagAttributes, testId]);
|
|
67
|
-
const classes = useMemo(() => cssJSLogic({
|
|
68
|
-
props
|
|
69
|
-
}), [palette, bgAppearance, borderAppearance, paletteShade, size, variant, status, isDisabled, isReadOnly, isSelected, shape, loaderPlacement, disabledAppearance, props.customClass]);
|
|
70
52
|
const {
|
|
71
53
|
loaderOverlayClass,
|
|
72
54
|
successOverlayClass,
|
|
73
55
|
contentWrapperClass,
|
|
74
56
|
textClassName,
|
|
75
57
|
buttonClassName,
|
|
76
|
-
iconClassName
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
58
|
+
iconClassName,
|
|
59
|
+
loaderClassName,
|
|
60
|
+
successClassName
|
|
61
|
+
} = classNames;
|
|
62
|
+
const {
|
|
63
|
+
text: contentProps = DUMMY_OBJECT,
|
|
64
|
+
icon: iconProps = DUMMY_OBJECT
|
|
65
|
+
} = customProps || DUMMY_OBJECT;
|
|
66
|
+
const {
|
|
67
|
+
button: buttonAttributes = DUMMY_OBJECT,
|
|
68
|
+
contentWrapper: contentWrapperAttributes = DUMMY_OBJECT,
|
|
69
|
+
loader: loaderAttributes = DUMMY_OBJECT,
|
|
70
|
+
success: successAttributes = DUMMY_OBJECT,
|
|
71
|
+
icon: iconAttributes = DUMMY_OBJECT,
|
|
72
|
+
text: textAttributes = DUMMY_OBJECT
|
|
73
|
+
} = customAttributes || DUMMY_OBJECT;
|
|
74
|
+
const iconTagAttributes = { ...iconAttributes,
|
|
75
|
+
...(testId && {
|
|
76
|
+
'data-test-id': `${testId}_icon`
|
|
77
|
+
})
|
|
86
78
|
};
|
|
87
79
|
|
|
88
80
|
const _renderLoader = () => {
|
|
89
|
-
if (!isLoading)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
status
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const loaderClassName = loaderPlacement === LOADER_PLACEMENT.OVERLAY ? loaderOverlayClass : '';
|
|
81
|
+
if (!isLoading) return null;
|
|
82
|
+
const isOverlay = loaderPlacement === LOADER_PLACEMENT.OVERLAY;
|
|
83
|
+
const hasCustomLoader = isRenderable(renderLoader);
|
|
84
|
+
if (hasCustomLoader && !isOverlay) return renderNode(renderLoader, {
|
|
85
|
+
status: STATUS.LOADING
|
|
86
|
+
});
|
|
100
87
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
101
88
|
$ui_displayMode: "flex",
|
|
102
89
|
$ui_alignItems: "center",
|
|
103
90
|
$ui_justifyContent: "center",
|
|
104
|
-
$ui_className:
|
|
105
|
-
testId: testId ? `${testId}_loader` : undefined
|
|
106
|
-
|
|
91
|
+
$ui_className: isOverlay ? loaderOverlayClass : '',
|
|
92
|
+
testId: testId ? `${testId}_loader` : undefined,
|
|
93
|
+
customId: customId ? `${customId}_loader` : undefined,
|
|
94
|
+
$tagAttributes_container: hasCustomLoader ? undefined : loaderAttributes
|
|
95
|
+
}, hasCustomLoader ? renderNode(renderLoader, {
|
|
96
|
+
status: STATUS.LOADING
|
|
97
|
+
}) : /*#__PURE__*/React.createElement(Spinner, {
|
|
98
|
+
customClass: loaderClassName
|
|
99
|
+
}));
|
|
107
100
|
};
|
|
108
101
|
|
|
109
102
|
const _renderSuccess = () => {
|
|
110
|
-
if (!isSuccess)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
status
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const successClassName = loaderPlacement === LOADER_PLACEMENT.OVERLAY ? successOverlayClass : '';
|
|
103
|
+
if (!isSuccess) return null;
|
|
104
|
+
const isOverlay = loaderPlacement === LOADER_PLACEMENT.OVERLAY;
|
|
105
|
+
const hasCustomSuccess = isRenderable(renderSuccess);
|
|
106
|
+
if (hasCustomSuccess && !isOverlay) return renderNode(renderSuccess, {
|
|
107
|
+
status: STATUS.SUCCESS
|
|
108
|
+
});
|
|
121
109
|
return /*#__PURE__*/React.createElement(Flex, {
|
|
122
110
|
$ui_displayMode: "flex",
|
|
123
111
|
$ui_alignItems: "center",
|
|
124
112
|
$ui_justifyContent: "center",
|
|
125
|
-
$ui_className:
|
|
126
|
-
testId: testId ? `${testId}_success` : undefined
|
|
127
|
-
|
|
113
|
+
$ui_className: isOverlay ? successOverlayClass : '',
|
|
114
|
+
testId: testId ? `${testId}_success` : undefined,
|
|
115
|
+
customId: customId ? `${customId}_success` : undefined,
|
|
116
|
+
$tagAttributes_container: hasCustomSuccess ? undefined : successAttributes
|
|
117
|
+
}, hasCustomSuccess ? renderNode(renderSuccess, {
|
|
118
|
+
status: STATUS.SUCCESS
|
|
119
|
+
}) : /*#__PURE__*/React.createElement(SuccessTick, {
|
|
120
|
+
customClass: successClassName
|
|
121
|
+
}));
|
|
128
122
|
};
|
|
129
123
|
|
|
130
124
|
const _renderIconNode = () => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
125
|
+
const showIcon = variant !== VARIANT.TEXT && (renderIcon || iconName);
|
|
126
|
+
if (!showIcon) return null;
|
|
127
|
+
if (isRenderable(renderIcon)) return renderNode(renderIcon, {
|
|
128
|
+
iconName,
|
|
129
|
+
iconSize
|
|
130
|
+
});
|
|
139
131
|
return /*#__PURE__*/React.createElement(Icon, _extends({}, iconProps, {
|
|
140
132
|
iconClass: iconClassName,
|
|
141
133
|
name: iconName,
|
|
142
134
|
size: iconSize,
|
|
143
135
|
tagAttributes: iconTagAttributes,
|
|
144
|
-
dataId:
|
|
136
|
+
dataId: customId ? `${customId}_icon` : undefined
|
|
145
137
|
}));
|
|
146
138
|
};
|
|
147
139
|
|
|
148
|
-
const _renderBeforeNode = () => {
|
|
149
|
-
if (!isRenderable(renderBefore)) {
|
|
150
|
-
return null;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return renderNode(renderBefore, props);
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
const _renderAfterNode = () => {
|
|
157
|
-
if (!isRenderable(renderAfter)) {
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return renderNode(renderAfter, props);
|
|
162
|
-
};
|
|
163
|
-
|
|
164
140
|
const _renderContent = () => {
|
|
165
|
-
const shouldShowText = variant !== VARIANT.ICON && children
|
|
141
|
+
const shouldShowText = variant !== VARIANT.ICON && children != null && (typeof children !== 'string' || children.trim() !== '');
|
|
166
142
|
const showLoaderStart = isLoading && loaderPlacement === LOADER_PLACEMENT.START;
|
|
167
143
|
const showLoaderAfter = isLoading && loaderPlacement === LOADER_PLACEMENT.END;
|
|
168
144
|
const showSuccessStart = isSuccess && loaderPlacement === LOADER_PLACEMENT.START;
|
|
@@ -173,30 +149,138 @@ const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
|
|
|
173
149
|
$flag_shrink: true,
|
|
174
150
|
$ui_alignItems: "center",
|
|
175
151
|
$ui_justifyContent: "center",
|
|
176
|
-
$ui_className: contentWrapperClass
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
152
|
+
$ui_className: contentWrapperClass,
|
|
153
|
+
$tagAttributes_container: contentWrapperAttributes
|
|
154
|
+
}, showLoaderStart ? _renderLoader() : null, showSuccessStart ? _renderSuccess() : null, isRenderable(renderBefore) ? renderNode(renderBefore, props) : null, iconPlacement === ICON_PLACEMENT.START ? _renderIconNode() : null, shouldShowText ? typeof children === 'string' ? /*#__PURE__*/React.createElement(Typography, _extends({
|
|
155
|
+
size: getTypographySize(size)
|
|
156
|
+
}, contentProps, {
|
|
157
|
+
tagAttributes: textAttributes,
|
|
158
|
+
customClass: textClassName,
|
|
159
|
+
isDotted: true
|
|
160
|
+
}), children) : children : null, iconPlacement === ICON_PLACEMENT.END ? _renderIconNode() : null, isRenderable(renderAfter) ? renderNode(renderAfter, props) : null, showLoaderAfter ? _renderLoader() : null, showSuccessAfter ? _renderSuccess() : null);
|
|
182
161
|
};
|
|
183
162
|
|
|
184
|
-
const containerAttributes = { ...
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
163
|
+
const containerAttributes = { ...buttonAttributes,
|
|
164
|
+
...(customId && {
|
|
165
|
+
'data-id': isDisabled ? `${customId}_disabled` : customId
|
|
166
|
+
}),
|
|
167
|
+
...(testId && {
|
|
168
|
+
'data-test-id': isDisabled ? `${testId}_disabled` : testId
|
|
169
|
+
}),
|
|
170
|
+
...(dataSelectorId && {
|
|
171
|
+
'data-selector-id': dataSelectorId
|
|
172
|
+
}),
|
|
173
|
+
...(title && {
|
|
174
|
+
'data-title': title
|
|
175
|
+
})
|
|
188
176
|
};
|
|
189
|
-
return /*#__PURE__*/React.createElement("button", _extends({}, containerAttributes,
|
|
177
|
+
return /*#__PURE__*/React.createElement("button", _extends({}, containerAttributes, {
|
|
178
|
+
"aria-busy": isLoading,
|
|
179
|
+
"aria-disabled": isDisabledState,
|
|
180
|
+
"aria-pressed": isSelected
|
|
181
|
+
}, a11yAttributes, {
|
|
190
182
|
ref: ref,
|
|
191
183
|
type: type,
|
|
192
184
|
className: cn(buttonClassName),
|
|
193
|
-
|
|
194
|
-
"aria-disabled": isDisabledState,
|
|
195
|
-
"aria-readonly": isReadOnly,
|
|
196
|
-
"aria-pressed": isSelected,
|
|
197
|
-
onClick: _handleClick
|
|
185
|
+
onClick: handleClick
|
|
198
186
|
}), _renderContent(), overlayActive ? isLoading ? _renderLoader() : _renderSuccess() : null);
|
|
199
187
|
});
|
|
188
|
+
ButtonPresentational.displayName = 'ButtonPresentational';
|
|
189
|
+
const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
|
|
190
|
+
const {
|
|
191
|
+
palette,
|
|
192
|
+
appearance,
|
|
193
|
+
hoverAppearance,
|
|
194
|
+
selectedAppearance,
|
|
195
|
+
variant,
|
|
196
|
+
status,
|
|
197
|
+
loaderPlacement,
|
|
198
|
+
size,
|
|
199
|
+
iconName,
|
|
200
|
+
iconSize,
|
|
201
|
+
iconPlacement,
|
|
202
|
+
renderIcon,
|
|
203
|
+
renderBefore,
|
|
204
|
+
renderAfter,
|
|
205
|
+
renderLoader,
|
|
206
|
+
renderSuccess,
|
|
207
|
+
children,
|
|
208
|
+
type,
|
|
209
|
+
onClick,
|
|
210
|
+
isDisabled,
|
|
211
|
+
isSelected,
|
|
212
|
+
shape,
|
|
213
|
+
disabledAppearance,
|
|
214
|
+
title,
|
|
215
|
+
customProps,
|
|
216
|
+
customAttributes,
|
|
217
|
+
a11yAttributes,
|
|
218
|
+
customId,
|
|
219
|
+
testId,
|
|
220
|
+
dataSelectorId,
|
|
221
|
+
customClass
|
|
222
|
+
} = props;
|
|
223
|
+
const isLoading = status === STATUS.LOADING;
|
|
224
|
+
const isSuccess = status === STATUS.SUCCESS;
|
|
225
|
+
const isDisabledState = isDisabled || isLoading;
|
|
226
|
+
const overlayActive = (isLoading || isSuccess) && loaderPlacement === LOADER_PLACEMENT.OVERLAY;
|
|
227
|
+
const classNames = useMemo(() => cssJSLogic({
|
|
228
|
+
props: {
|
|
229
|
+
palette,
|
|
230
|
+
appearance,
|
|
231
|
+
hoverAppearance,
|
|
232
|
+
selectedAppearance,
|
|
233
|
+
size,
|
|
234
|
+
variant,
|
|
235
|
+
status,
|
|
236
|
+
isDisabled,
|
|
237
|
+
isSelected,
|
|
238
|
+
shape,
|
|
239
|
+
loaderPlacement,
|
|
240
|
+
disabledAppearance,
|
|
241
|
+
customClass
|
|
242
|
+
}
|
|
243
|
+
}), [palette, appearance, hoverAppearance, selectedAppearance, size, variant, status, isDisabled, isSelected, shape, loaderPlacement, disabledAppearance, customClass]);
|
|
244
|
+
|
|
245
|
+
const handleClick = event => {
|
|
246
|
+
if (isDisabledState) return;
|
|
247
|
+
onClick(event);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
const essentials = {
|
|
251
|
+
isLoading,
|
|
252
|
+
isSuccess,
|
|
253
|
+
isDisabled,
|
|
254
|
+
isDisabledState,
|
|
255
|
+
overlayActive,
|
|
256
|
+
variant,
|
|
257
|
+
iconPlacement,
|
|
258
|
+
loaderPlacement,
|
|
259
|
+
size,
|
|
260
|
+
iconName,
|
|
261
|
+
iconSize,
|
|
262
|
+
renderIcon,
|
|
263
|
+
renderBefore,
|
|
264
|
+
renderAfter,
|
|
265
|
+
renderLoader,
|
|
266
|
+
renderSuccess,
|
|
267
|
+
children,
|
|
268
|
+
type,
|
|
269
|
+
isSelected,
|
|
270
|
+
title,
|
|
271
|
+
customProps,
|
|
272
|
+
customAttributes,
|
|
273
|
+
a11yAttributes,
|
|
274
|
+
customId,
|
|
275
|
+
testId,
|
|
276
|
+
dataSelectorId,
|
|
277
|
+
handleClick
|
|
278
|
+
};
|
|
279
|
+
return /*#__PURE__*/React.createElement(ButtonPresentational, _extends({}, essentials, {
|
|
280
|
+
classNames: classNames,
|
|
281
|
+
ref: ref
|
|
282
|
+
}));
|
|
283
|
+
});
|
|
200
284
|
Button.propTypes = propTypes;
|
|
201
285
|
Button.defaultProps = defaultProps;
|
|
202
286
|
Button.displayName = 'Button';
|
package/es/v1/Button/README.md
CHANGED
|
@@ -18,93 +18,159 @@ import Button from '@zohodesk/components/es/v1/Button/Button';
|
|
|
18
18
|
</Button>
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
### With Palette
|
|
21
|
+
### With Palette
|
|
22
22
|
|
|
23
23
|
```jsx
|
|
24
|
-
<Button palette="
|
|
24
|
+
<Button palette="brand">Save</Button>
|
|
25
25
|
<Button palette="danger">Delete</Button>
|
|
26
26
|
<Button palette="success">Confirm</Button>
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
### With Appearance
|
|
30
|
+
|
|
31
|
+
`appearance`, `hoverAppearance`, and `selectedAppearance` are objects with optional `bg`, `border`, and `text` keys. Each key accepts `true` (use palette color), `false` (suppress), or a palette name string.
|
|
32
|
+
|
|
33
|
+
```jsx
|
|
34
|
+
<Button palette="brand" appearance={{ bg: false, border: true }}>
|
|
35
|
+
Ghost
|
|
36
|
+
</Button>
|
|
37
|
+
|
|
38
|
+
<Button
|
|
39
|
+
palette="brand"
|
|
40
|
+
appearance={{ bg: false, border: true }}
|
|
41
|
+
hoverAppearance={{ bg: false, border: true }}
|
|
42
|
+
selectedAppearance={{ bg: false, border: true }}
|
|
43
|
+
>
|
|
44
|
+
Ghost with states
|
|
45
|
+
</Button>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Using Presets
|
|
49
|
+
|
|
50
|
+
```jsx
|
|
51
|
+
import {
|
|
52
|
+
BRAND_GHOST,
|
|
53
|
+
BRAND_TEXT_ONLY,
|
|
54
|
+
SECONDARY_GHOST_BRAND_TINTED_ONSELECT,
|
|
55
|
+
SECONDARY_GHOST_CANCEL,
|
|
56
|
+
BRAND_TINTED_OUTLINE,
|
|
57
|
+
BRAND_TEXT_TINTED_HOVER
|
|
58
|
+
} from '@zohodesk/components/es/v1/Button/constants/presets';
|
|
59
|
+
|
|
60
|
+
<Button {...BRAND_GHOST}>Brand Ghost</Button>
|
|
61
|
+
<Button {...BRAND_TEXT_ONLY}>Brand Text Only</Button>
|
|
62
|
+
<Button {...SECONDARY_GHOST_BRAND_TINTED_ONSELECT}>Secondary Ghost</Button>
|
|
63
|
+
```
|
|
64
|
+
|
|
29
65
|
### With Icon
|
|
30
66
|
|
|
31
67
|
```jsx
|
|
32
68
|
<Button variant="icon" iconName="ZD-plus" iconSize={20} />
|
|
33
69
|
|
|
34
|
-
<Button variant="iconWithText" iconName="ZD-plus" iconPlacement="
|
|
70
|
+
<Button variant="iconWithText" iconName="ZD-plus" iconPlacement="start">
|
|
35
71
|
Add Item
|
|
36
72
|
</Button>
|
|
37
73
|
```
|
|
38
74
|
|
|
39
|
-
### Loading State
|
|
75
|
+
### Loading / Success State
|
|
40
76
|
|
|
41
77
|
```jsx
|
|
42
|
-
<Button status="loading" loaderPlacement="overlay">
|
|
43
|
-
|
|
44
|
-
</Button>
|
|
45
|
-
|
|
46
|
-
<Button status="loading" loaderPlacement="start">
|
|
47
|
-
Loading
|
|
48
|
-
</Button>
|
|
78
|
+
<Button status="loading" loaderPlacement="overlay">Saving...</Button>
|
|
79
|
+
<Button status="loading" loaderPlacement="start">Loading</Button>
|
|
80
|
+
<Button status="success">Done</Button>
|
|
49
81
|
```
|
|
50
82
|
|
|
51
|
-
### Disabled
|
|
83
|
+
### Disabled
|
|
52
84
|
|
|
53
85
|
```jsx
|
|
54
86
|
<Button isDisabled>Disabled</Button>
|
|
55
|
-
<Button
|
|
87
|
+
<Button isDisabled disabledAppearance="strike">Disabled Strike</Button>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Shape
|
|
91
|
+
|
|
92
|
+
```jsx
|
|
93
|
+
<Button shape="pill">Pill</Button>
|
|
94
|
+
<Button shape="rectangle">Rectangle</Button>
|
|
95
|
+
<Button shape="roundedRectangle">Rounded</Button>
|
|
56
96
|
```
|
|
57
97
|
|
|
58
98
|
## Props
|
|
59
99
|
|
|
60
100
|
| Prop | Type | Default | Description |
|
|
61
101
|
|---|---|---|---|
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `borderAppearance` | `oneOf: default, onHover, none` | `default` | Border behavior |
|
|
102
|
+
| `palette` | `oneOf: brand, brandLighter, info, infoLighter, secondary, secondaryLighter, danger, dangerLighter, success, successLighter, warning, warningLighter` | `''` | Color palette |
|
|
103
|
+
| `appearance` | `{ bg?, border?, text? }` | `{ bg: true, text: true }` | Color treatments at rest. Values: `true`, `false`, or a palette name |
|
|
104
|
+
| `hoverAppearance` | `{ bg?, border?, text? }` | `{ bg: true, text: true }` | Color treatments on hover/focus/active |
|
|
105
|
+
| `selectedAppearance` | `{ bg?, border?, text? }` | `{ bg: true, text: true }` | Color treatments when `isSelected` is true |
|
|
67
106
|
| `variant` | `oneOf: text, icon, iconWithText` | `text` | Display variant |
|
|
68
107
|
| `size` | `oneOf: small, medium, large, full` | `medium` | Size variant |
|
|
69
108
|
| `status` | `oneOf: default, loading, success` | `default` | Status state |
|
|
70
|
-
| `loaderPlacement` | `oneOf: start, end, overlay` | `overlay` | Where loader appears |
|
|
109
|
+
| `loaderPlacement` | `oneOf: start, end, overlay` | `overlay` | Where the loader appears |
|
|
110
|
+
| `shape` | `oneOf: pill, rectangle, roundedRectangle` | `roundedRectangle` | Border shape |
|
|
71
111
|
| `iconName` | `string` | — | Icon name from `@zohodesk/icons` |
|
|
72
112
|
| `iconSize` | `number` | `16` | Icon size in pixels |
|
|
73
|
-
| `iconPlacement` | `oneOf:
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
113
|
+
| `iconPlacement` | `oneOf: start, end` | `start` | Icon position relative to text |
|
|
114
|
+
| `disabledAppearance` | `oneOf: none, dull, strike` | `dull` | Visual style when disabled |
|
|
115
|
+
| `isDisabled` | `bool` | `false` | Disables the button |
|
|
116
|
+
| `isSelected` | `bool` | `false` | Selected/pressed state (`aria-pressed`) |
|
|
117
|
+
| `type` | `oneOf: button, submit, reset` | `button` | HTML button type |
|
|
118
|
+
| `onClick` | `func` | — | Click handler (suppressed when disabled or loading) |
|
|
119
|
+
| `title` | `string` | — | Tooltip / `data-title` attribute |
|
|
120
|
+
| `children` | `node` | — | Button label content |
|
|
76
121
|
| `renderIcon` | `node \| func` | — | Custom icon render slot |
|
|
77
122
|
| `renderBefore` | `node \| func` | — | Slot before main content |
|
|
78
123
|
| `renderAfter` | `node \| func` | — | Slot after main content |
|
|
79
124
|
| `renderLoader` | `node \| func` | — | Custom loader render slot |
|
|
80
125
|
| `renderSuccess` | `node \| func` | — | Custom success render slot |
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
|
|
126
|
+
| `customId` | `string` | — | `data-id` attribute |
|
|
127
|
+
| `testId` | `string` | — | `data-test-id` attribute |
|
|
128
|
+
| `dataSelectorId` | `string` | — | `data-selector-id` attribute |
|
|
129
|
+
| `a11yAttributes` | `object` | `{}` | Extra ARIA/accessibility attributes spread onto `<button>` |
|
|
130
|
+
| `customClass` | `{ wrapper?, text?, icon?, loader?, success? }` | `{}` | CSS class overrides per part |
|
|
131
|
+
| `customProps` | `{ text?, icon? }` | `{}` | Extra props forwarded to text/icon sub-elements |
|
|
132
|
+
| `customAttributes` | `{ button?, contentWrapper?, loader?, success?, icon?, text? }` | `{}` | Extra HTML attributes per internal element |
|
|
133
|
+
|
|
134
|
+
## Presets
|
|
135
|
+
|
|
136
|
+
Ready-made palette + appearance combinations exported from `constants/presets`:
|
|
137
|
+
|
|
138
|
+
| Name | Palette | Appearance | Description |
|
|
139
|
+
|---|---|---|---|
|
|
140
|
+
| `BRAND_GHOST` | `brand` | `{ bg: false, border: true }` | Transparent bg, brand border |
|
|
141
|
+
| `BRAND_TEXT_ONLY` | `brand` | `{ bg: false }` | Text only, no border |
|
|
142
|
+
| `BRAND_TINTED_OUTLINE` | `brandLighter` | `{ border: true }` | Tinted fill, brand border |
|
|
143
|
+
| `SUCCESS_GHOST` | `success` | `{ bg: false, border: true }` | Transparent bg, success border |
|
|
144
|
+
| `SUCCESS_TEXT_ONLY` | `success` | `{ bg: false }` | Text only, no border |
|
|
145
|
+
| `SUCCESS_TINTED_OUTLINE` | `successLighter` | `{ border: true }` | Tinted fill, success border |
|
|
146
|
+
| `SECONDARY_GHOST_BRAND_TINTED_ONSELECT` | `secondary` | `{ bg: false, border: true }` | Secondary ghost; selected state switches to brand tint |
|
|
147
|
+
| `SECONDARY_GHOST_CANCEL` | `secondary` | `{ bg: false, border: true }` | Secondary ghost without a selected state; cancel / dismiss buttons |
|
|
148
|
+
| `BLACK_TEXT_BRAND_ONHOVER` | `brand` | `{ bg: false, text: 'black' }` | Black text, brand color on hover |
|
|
149
|
+
| `BRAND_BG_ONSELECT` | `brand` | `{ bg: false, border: true }` | Ghost without a defined selected state |
|
|
150
|
+
| `BRAND_TEXT_TINTED_HOVER` | `brandLighter` | `{ bg: false }` | Ghost that becomes tinted on hover |
|
|
151
|
+
| `BRAND_TEXT_TINTED_DANGER_HOVER` | `brandLighter` | `{ bg: false }` | Ghost that becomes danger-tinted on hover |
|
|
89
152
|
|
|
90
153
|
## Customization
|
|
91
154
|
|
|
92
155
|
### Parts
|
|
93
156
|
|
|
94
|
-
| Part | Element | Description |
|
|
157
|
+
| Part key | Element | Description |
|
|
95
158
|
|---|---|---|
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
98
|
-
|
|
99
|
-
|
|
159
|
+
| `button` | `<button>` | Outermost button element |
|
|
160
|
+
| `contentWrapper` | Inner `<Flex>` | Wraps icon + text content |
|
|
161
|
+
| `text` | `<Typography>` | Text label |
|
|
162
|
+
| `icon` | `<Icon>` | Icon element |
|
|
163
|
+
| `loader` | `<Flex>` | Loader wrapper |
|
|
164
|
+
| `success` | `<Flex>` | Success tick wrapper |
|
|
100
165
|
|
|
101
|
-
|
|
166
|
+
Pass class overrides via `customClass`, extra props via `customProps`, or arbitrary HTML attributes via `customAttributes`.
|
|
102
167
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
168
|
+
```jsx
|
|
169
|
+
<Button
|
|
170
|
+
customClass={{ wrapper: 'myBtn', text: 'myBtnText' }}
|
|
171
|
+
customAttributes={{ button: { 'data-analytics': 'save' } }}
|
|
172
|
+
a11yAttributes={{ 'aria-label': 'Save document' }}
|
|
173
|
+
>
|
|
174
|
+
Save
|
|
175
|
+
</Button>
|
|
176
|
+
```
|