@zohodesk/components 1.6.25 → 1.6.27
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 +2046 -0
- package/README.md +16 -2031
- package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +5 -20
- package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +5 -20
- package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +5 -20
- 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 +1 -11
- package/es/DateTime/DateWidget.module.css +3 -0
- 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 +197 -113
- 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/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 +1 -11
- package/lib/DateTime/DateWidget.module.css +3 -0
- 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 +207 -123
- 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/package.json +16 -16
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";
|
|
12
|
+
import Typography from "../../Typography/Typography";
|
|
16
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
|
+
```
|