@zohodesk/components 1.6.13 → 1.6.15

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.
Files changed (87) hide show
  1. package/README.md +14 -0
  2. package/es/Avatar/Avatar.js +1 -2
  3. package/es/Button/css/cssJSLogic.js +4 -5
  4. package/es/DateTime/DateTime.js +3 -6
  5. package/es/DateTime/DateWidget.js +2 -5
  6. package/es/DateTime/YearView.js +5 -6
  7. package/es/DateTime/common.js +2 -9
  8. package/es/DateTime/dateFormatUtils/dateFormat.js +55 -76
  9. package/es/DateTime/dateFormatUtils/index.js +7 -12
  10. package/es/DateTime/dateFormatUtils/timeChange.js +3 -4
  11. package/es/DateTime/dateFormatUtils/yearChange.js +3 -4
  12. package/es/DropBox/DropBoxElement/css/cssJSLogic.js +5 -6
  13. package/es/Layout/utils.js +1 -2
  14. package/es/ListItem/ListContainer.js +4 -5
  15. package/es/Modal/Portal/Portal.js +4 -5
  16. package/es/MultiSelect/AdvancedGroupMultiSelect.js +91 -103
  17. package/es/MultiSelect/AdvancedMultiSelect.js +74 -80
  18. package/es/MultiSelect/MultiSelect.js +4 -13
  19. package/es/MultiSelect/Suggestions.js +14 -17
  20. package/es/Popup/Popup.js +1 -4
  21. package/es/Provider/IdProvider.js +4 -5
  22. package/es/Provider/LibraryContext.js +11 -12
  23. package/es/Provider/NumberGenerator/NumberGenerator.js +15 -17
  24. package/es/Provider/ZindexProvider.js +4 -5
  25. package/es/Responsive/CustomResponsive.js +8 -11
  26. package/es/Responsive/ResizeComponent.js +1 -3
  27. package/es/Responsive/Responsive.js +9 -12
  28. package/es/Responsive/sizeObservers.js +1 -5
  29. package/es/ResponsiveDropBox/ResponsiveDropBox.js +10 -14
  30. package/es/Select/GroupSelect.js +98 -103
  31. package/es/Select/Select.js +110 -114
  32. package/es/Select/SelectWithAvatar.js +91 -95
  33. package/es/Select/SelectWithIcon.js +104 -109
  34. package/es/Select/__tests__/Select.spec.js +6 -9
  35. package/es/Tab/Tab.js +29 -30
  36. package/es/Tab/TabContent.js +16 -19
  37. package/es/Tab/TabContentWrapper.js +19 -22
  38. package/es/Tab/TabWrapper.js +15 -16
  39. package/es/Tab/Tabs.js +80 -87
  40. package/es/Typography/css/cssJSLogic.js +4 -5
  41. package/es/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +1 -2
  42. package/es/utils/Common.js +10 -31
  43. package/es/utils/datetime/common.js +2 -6
  44. package/es/utils/dropDownUtils.js +7 -11
  45. package/es/utils/getInitial.js +1 -3
  46. package/es/v1/Button/Button.js +5 -3
  47. package/es/v1/Button/__tests__/Button.spec.js +5 -2
  48. package/es/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +8 -1
  49. package/es/v1/Button/css/cssJSLogic.js +11 -10
  50. package/es/v1/Label/css/cssJSLogic.js +4 -5
  51. package/es/v1/Switch/css/cssJSLogic.js +4 -5
  52. package/es/v1/helpers/colorHelpers/colorHelper.js +36 -44
  53. package/es/v1/helpers/colorHelpers/paletteUtilities.README.md +30 -30
  54. package/es/v1/{Button/_shared → shared}/Loader/Loader.js +3 -3
  55. package/es/v1/{Button/_shared → shared}/Loader/__tests__/Loader.spec.js +1 -1
  56. package/es/v1/shared/Loader/props/defaultProps.js +5 -0
  57. package/es/v1/{Button/_shared → shared}/Loader/props/propTypes.js +1 -1
  58. package/es/v1/{Button/_shared → shared}/SuccessTick/SuccessTick.js +3 -3
  59. package/es/v1/{Button/_shared → shared}/SuccessTick/__tests__/SuccessTick.spec.js +1 -1
  60. package/es/v1/shared/SuccessTick/props/defaultProps.js +5 -0
  61. package/es/v1/{Button/_shared → shared}/SuccessTick/props/propTypes.js +1 -1
  62. package/lib/Select/Select.js +3 -1
  63. package/lib/v1/Button/Button.js +5 -3
  64. package/lib/v1/Button/__tests__/Button.spec.js +5 -2
  65. package/lib/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +8 -1
  66. package/lib/v1/Button/css/cssJSLogic.js +9 -5
  67. package/lib/v1/helpers/colorHelpers/colorHelper.js +8 -5
  68. package/lib/v1/helpers/colorHelpers/paletteUtilities.README.md +30 -30
  69. package/lib/v1/{Button/_shared → shared}/Loader/Loader.js +5 -5
  70. package/lib/v1/{Button/_shared → shared}/Loader/__tests__/Loader.spec.js +1 -1
  71. package/lib/v1/{Button/_shared/SuccessTick → shared/Loader}/props/defaultProps.js +4 -1
  72. package/lib/v1/{Button/_shared → shared}/Loader/props/propTypes.js +1 -1
  73. package/lib/v1/{Button/_shared → shared}/SuccessTick/SuccessTick.js +5 -5
  74. package/lib/v1/{Button/_shared → shared}/SuccessTick/__tests__/SuccessTick.spec.js +1 -1
  75. package/lib/v1/{Button/_shared/Loader → shared/SuccessTick}/props/defaultProps.js +4 -1
  76. package/lib/v1/{Button/_shared → shared}/SuccessTick/props/propTypes.js +1 -1
  77. package/package.json +11 -10
  78. package/es/v1/Button/_shared/Loader/props/defaultProps.js +0 -4
  79. package/es/v1/Button/_shared/SuccessTick/props/defaultProps.js +0 -4
  80. /package/es/v1/{Button/_shared → shared}/Loader/Loader_v1.module.css +0 -0
  81. /package/es/v1/{Button/_shared → shared}/Loader/__tests__/__snapshots__/Loader.spec.js.snap +0 -0
  82. /package/es/v1/{Button/_shared → shared}/SuccessTick/SuccessTick_v1.module.css +0 -0
  83. /package/es/v1/{Button/_shared → shared}/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +0 -0
  84. /package/lib/v1/{Button/_shared → shared}/Loader/Loader_v1.module.css +0 -0
  85. /package/lib/v1/{Button/_shared → shared}/Loader/__tests__/__snapshots__/Loader.spec.js.snap +0 -0
  86. /package/lib/v1/{Button/_shared → shared}/SuccessTick/SuccessTick_v1.module.css +0 -0
  87. /package/lib/v1/{Button/_shared → shared}/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +0 -0
package/es/Tab/Tabs.js CHANGED
@@ -107,8 +107,7 @@ class Tabs extends React.Component {
107
107
  }
108
108
  }
109
109
 
110
- setMaxDim() {
111
- let totalDimension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
110
+ setMaxDim(totalDimension = 0) {
112
111
  let {
113
112
  selectedTab
114
113
  } = this.props; // let actual = Object.keys(tabDimensions).reduce(
@@ -409,10 +408,9 @@ class Tabs extends React.Component {
409
408
  togglePopup(e, boxPosition);
410
409
  }
411
410
 
412
- responsiveFunc(_ref) {
413
- let {
414
- mediaQueryOR
415
- } = _ref;
411
+ responsiveFunc({
412
+ mediaQueryOR
413
+ }) {
416
414
  return {
417
415
  tabletMode: mediaQueryOR([{
418
416
  maxWidth: 700
@@ -432,10 +430,9 @@ class Tabs extends React.Component {
432
430
  });
433
431
  }
434
432
 
435
- getMoreList(_ref2) {
436
- let {
437
- moreTabs
438
- } = _ref2;
433
+ getMoreList({
434
+ moreTabs
435
+ }) {
439
436
  const validElements = [];
440
437
  React.Children.map(moreTabs, child => {
441
438
  const isValidElement = /*#__PURE__*/React.isValidElement(child);
@@ -447,10 +444,9 @@ class Tabs extends React.Component {
447
444
  return validElements;
448
445
  }
449
446
 
450
- handleFilterSuggestions(_ref3) {
451
- let {
452
- moreTabs
453
- } = _ref3;
447
+ handleFilterSuggestions({
448
+ moreTabs
449
+ }) {
454
450
  const {
455
451
  showTitleInMoreOptions
456
452
  } = this.props;
@@ -582,82 +578,79 @@ class Tabs extends React.Component {
582
578
  })), isPopupOpen && /*#__PURE__*/React.createElement(ResponsiveReceiver, {
583
579
  query: this.responsiveFunc,
584
580
  responsiveId: "Helmet"
585
- }, _ref4 => {
581
+ }, ({
582
+ tabletMode
583
+ }) => /*#__PURE__*/React.createElement(ResponsiveDropBox, _extends({
584
+ isActive: isPopupReady,
585
+ isAnimate: true,
586
+ size: "medium",
587
+ customClass: {
588
+ customDropBoxWrap: `${moreContainerClass} ${popupClass}`
589
+ },
590
+ boxPosition: position,
591
+ getRef: getContainerRef,
592
+ isBoxPaddingNeed: false,
593
+ isArrow: false,
594
+ isAbsolutePositioningNeeded: isAbsolutePositioningNeeded,
595
+ isRestrictScroll: isRestrictScroll,
596
+ positionsOffset: positionsOffset,
597
+ targetOffset: targetOffset
598
+ }, DropBoxProps, {
599
+ isResponsivePadding: true,
600
+ needFocusScope: true,
601
+ dataId: `${dataId}_dropbox`,
602
+ onClick: removeClose,
603
+ onClose: this.togglePopup
604
+ }), getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(this.props), hasSearch ? /*#__PURE__*/React.createElement(Box, {
605
+ className: tabsStyle.search
606
+ }, /*#__PURE__*/React.createElement(TextBoxIcon, _extends({
607
+ placeHolder: placeHolderText,
608
+ onChange: this.handleChange,
609
+ value: searchValue,
610
+ onClear: this.handleSearchValueClear,
611
+ size: searchBoxSize,
612
+ customProps: {
613
+ TextBoxProps: {
614
+ 'data-a11y-autofocus': true
615
+ }
616
+ },
617
+ dataId: `${dataId}_search`,
618
+ autoComplete: false,
619
+ name: "search"
620
+ }, TextBoxIconProps))) : null, /*#__PURE__*/React.createElement(Box, {
621
+ flexible: true,
622
+ shrink: true,
623
+ scroll: "vertical",
624
+ className: `${tabsStyle.listWrapper} ${tabletMode ? '' : tabsStyle.menuBox} ${moreBoxClass}`,
625
+ onScroll: this.onScroll,
626
+ dataId: `${dataId}_Tabs`
627
+ }, moreTabsListItems.length ? moreTabsListItems.map(data => {
586
628
  let {
587
- tabletMode
588
- } = _ref4;
589
- return /*#__PURE__*/React.createElement(ResponsiveDropBox, _extends({
590
- isActive: isPopupReady,
591
- isAnimate: true,
592
- size: "medium",
629
+ text,
630
+ id,
631
+ title,
632
+ isLink,
633
+ href,
634
+ children,
635
+ dataId
636
+ } = data;
637
+ const value = text ? text : showTitleInMoreOptions ? title : null;
638
+ return /*#__PURE__*/React.createElement(ListItem, _extends({
639
+ key: id,
640
+ value: value,
641
+ onClick: this.moreTabSelect,
642
+ id: id,
643
+ title: title || text,
644
+ isLink: isLink,
645
+ href: href,
646
+ autoHover: true,
593
647
  customClass: {
594
- customDropBoxWrap: `${moreContainerClass} ${popupClass}`
595
- },
596
- boxPosition: position,
597
- getRef: getContainerRef,
598
- isBoxPaddingNeed: false,
599
- isArrow: false,
600
- isAbsolutePositioningNeeded: isAbsolutePositioningNeeded,
601
- isRestrictScroll: isRestrictScroll,
602
- positionsOffset: positionsOffset,
603
- targetOffset: targetOffset
604
- }, DropBoxProps, {
605
- isResponsivePadding: true,
606
- needFocusScope: true,
607
- dataId: `${dataId}_dropbox`,
608
- onClick: removeClose,
609
- onClose: this.togglePopup
610
- }), getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(this.props), hasSearch ? /*#__PURE__*/React.createElement(Box, {
611
- className: tabsStyle.search
612
- }, /*#__PURE__*/React.createElement(TextBoxIcon, _extends({
613
- placeHolder: placeHolderText,
614
- onChange: this.handleChange,
615
- value: searchValue,
616
- onClear: this.handleSearchValueClear,
617
- size: searchBoxSize,
618
- customProps: {
619
- TextBoxProps: {
620
- 'data-a11y-autofocus': true
621
- }
648
+ customListItem: menuItemClass
622
649
  },
623
- dataId: `${dataId}_search`,
624
- autoComplete: false,
625
- name: "search"
626
- }, TextBoxIconProps))) : null, /*#__PURE__*/React.createElement(Box, {
627
- flexible: true,
628
- shrink: true,
629
- scroll: "vertical",
630
- className: `${tabsStyle.listWrapper} ${tabletMode ? '' : tabsStyle.menuBox} ${moreBoxClass}`,
631
- onScroll: this.onScroll,
632
- dataId: `${dataId}_Tabs`
633
- }, moreTabsListItems.length ? moreTabsListItems.map(data => {
634
- let {
635
- text,
636
- id,
637
- title,
638
- isLink,
639
- href,
640
- children,
641
- dataId
642
- } = data;
643
- const value = text ? text : showTitleInMoreOptions ? title : null;
644
- return /*#__PURE__*/React.createElement(ListItem, _extends({
645
- key: id,
646
- value: value,
647
- onClick: this.moreTabSelect,
648
- id: id,
649
- title: title || text,
650
- isLink: isLink,
651
- href: href,
652
- autoHover: true,
653
- customClass: {
654
- customListItem: menuItemClass
655
- },
656
- target: "self",
657
- dataId: `${dataId}_Tab`
658
- }, ListItemProps), !showTitleInMoreOptions ? children : null);
659
- }) : this.renderEmptyState()));
660
- })) : null);
650
+ target: "self",
651
+ dataId: `${dataId}_Tab`
652
+ }, ListItemProps), !showTitleInMoreOptions ? children : null);
653
+ }) : this.renderEmptyState())))) : null);
661
654
  }
662
655
 
663
656
  render() {
@@ -1,10 +1,9 @@
1
1
  import { compileClassNames } from '@zohodesk/utils';
2
2
  import { letterspacingMapping, lineheightMapping } from "../utils";
3
- export default function cssJSLogic(_ref) {
4
- let {
5
- props,
6
- style
7
- } = _ref;
3
+ export default function cssJSLogic({
4
+ props,
5
+ style
6
+ }) {
8
7
  let {
9
8
  $flag_reset,
10
9
  shouldReset,
@@ -34,8 +34,7 @@ export default class VelocityAnimationGroup extends React.Component {
34
34
 
35
35
  if (postEnterStyles && typeof postEnterStyles === 'object') {
36
36
  elements.forEach(rootElement => {
37
- Object.entries(postEnterStyles).forEach(_ref => {
38
- let [cssProperty, cssValue] = _ref;
37
+ Object.entries(postEnterStyles).forEach(([cssProperty, cssValue]) => {
39
38
  rootElement.style[cssProperty] = cssValue;
40
39
  });
41
40
  });
@@ -49,14 +49,11 @@ export function encodeForHtml(str) {
49
49
 
50
50
  return str;
51
51
  }
52
- export function getListOfDetails() {
53
- let Obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
54
- let fn = arguments.length > 1 ? arguments[1] : undefined;
52
+ export function getListOfDetails(Obj = {}, fn) {
55
53
  const ids = Object.keys(Obj) || [];
56
54
  return ids.map(id => fn(Obj[id]));
57
55
  }
58
- export function capitalize() {
59
- let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
56
+ export function capitalize(value = '') {
60
57
  let newValue = '';
61
58
 
62
59
  for (let i = 0; i < value.length; i++) {
@@ -69,18 +66,12 @@ export function capitalize() {
69
66
 
70
67
  return newValue;
71
68
  }
72
- export function bind() {
73
- for (var _len = arguments.length, handlers = new Array(_len), _key = 0; _key < _len; _key++) {
74
- handlers[_key] = arguments[_key];
75
- }
76
-
69
+ export function bind(...handlers) {
77
70
  handlers.forEach(handler => {
78
71
  this[handler] = this[handler].bind(this);
79
72
  });
80
73
  }
81
- export function getFullName() {
82
- let firstName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
83
- let lastName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
74
+ export function getFullName(firstName = '', lastName = '') {
84
75
  let fullName = '';
85
76
 
86
77
  if (firstName !== null && firstName !== '') {
@@ -93,8 +84,7 @@ export function getFullName() {
93
84
 
94
85
  return fullName;
95
86
  }
96
- export function getStringifiedOutputForJson() {
97
- let input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
87
+ export function getStringifiedOutputForJson(input = {}) {
98
88
  const keys = Object.keys(input);
99
89
  const modifiedInput = keys.reduce((curr, next) => {
100
90
  const values = input[next] || [];
@@ -130,19 +120,14 @@ export function filterValue(obj, val) {
130
120
  });
131
121
  return result;
132
122
  }
133
- export function merge() {
134
- let oldObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
135
- let newObj = arguments.length > 1 ? arguments[1] : undefined;
123
+ export function merge(oldObj = {}, newObj) {
136
124
  const copyOfOld = Object.assign({}, oldObj);
137
125
  return Object.keys(newObj).reduce((res, key) => {
138
126
  res[key] = Object.assign({}, res[key] || {}, newObj[key]);
139
127
  return res;
140
128
  }, copyOfOld);
141
129
  }
142
- export function formatValue() {
143
- let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
144
- let valueField = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';
145
- let textField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'name';
130
+ export function formatValue(values = [], valueField = 'id', textField = 'name') {
146
131
  return values && values.map(value => {
147
132
  let formattedValue = value;
148
133
 
@@ -166,8 +151,7 @@ export function bytesToSize(bytes) {
166
151
  const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)), 10);
167
152
  return `${Math.round(bytes / Math.pow(1024, i), 2)} ${sizes[i]}`;
168
153
  }
169
- export function getMemSize(bytes) {
170
- let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : !0;
154
+ export function getMemSize(bytes, size = !0) {
171
155
  const thresh = size ? 1000 : 1024;
172
156
 
173
157
  if (Math.abs(bytes) < thresh) {
@@ -300,11 +284,7 @@ export const debounce = function (func, wait) {
300
284
  };
301
285
  };
302
286
  let timerId;
303
- export const throttle = function (func, wait) {
304
- for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
305
- args[_key2 - 2] = arguments[_key2];
306
- }
307
-
287
+ export const throttle = (func, wait, ...args) => {
308
288
  if (timerId) {
309
289
  return;
310
290
  }
@@ -374,8 +354,7 @@ export function getElementSpace(elementRef) {
374
354
  availableInsideSpace: availableInsideSpace
375
355
  };
376
356
  }
377
- export function getSearchString() {
378
- let charachers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
357
+ export function getSearchString(charachers = '') {
379
358
  return (charachers || '').toString().toLowerCase().trim(); //.replace(/\s+/g, '');
380
359
  }
381
360
  export function findScrollEnd(element) {
@@ -4,9 +4,7 @@ let dateFormat = {
4
4
  monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
5
5
  timeNames: ['a', 'p', 'am', 'pm', 'A', 'P', 'AM', 'PM']
6
6
  };
7
- export function pad(n) {
8
- let width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
9
- let z = arguments.length > 2 ? arguments[2] : undefined;
7
+ export function pad(n, width = 1, z) {
10
8
  z = z || '0';
11
9
  n = `${n}`;
12
10
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
@@ -90,9 +88,7 @@ export function replaceI18NValuesWithRegex(i18nStr, values) {
90
88
  export function unescapeUnicode(str) {
91
89
  return str.replace(/\\u([a-fA-F0-9]{4})/g, (g, m1) => String.fromCharCode(parseInt(m1, 16)));
92
90
  }
93
- export function getValues() {
94
- let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
95
- let diff = arguments.length > 1 ? arguments[1] : undefined;
91
+ export function getValues(params = [], diff) {
96
92
  return params.map(param => diff[param]);
97
93
  }
98
94
  export function getI18NValue(i18n) {
@@ -58,10 +58,7 @@ const getSearchFields = props => {
58
58
  // }
59
59
 
60
60
 
61
- export const isObjectContainsSearchString = function () {
62
- let searchFields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
63
- let searchStr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
64
- let obj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
61
+ export const isObjectContainsSearchString = (searchFields = [], searchStr = '', obj = {}) => {
65
62
  return searchFields.some(field => {
66
63
  const val = obj[field];
67
64
  if (val === null || val === undefined) return false;
@@ -444,13 +441,12 @@ export const makeGetOptionIdChange = () => createSelector([getOptions, getValueF
444
441
  return changedOptions;
445
442
  }, newOptions);
446
443
  });
447
- export const filterSelectedOptions = function () {
448
- let {
449
- selectedOptions = dummyArray,
450
- propSelectedOptions = dummyArray,
451
- disabledOptions = dummyArray,
452
- limit
453
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
444
+ export const filterSelectedOptions = ({
445
+ selectedOptions = dummyArray,
446
+ propSelectedOptions = dummyArray,
447
+ disabledOptions = dummyArray,
448
+ limit
449
+ } = {}) => {
454
450
  // eslint-disable-next-line no-param-reassign
455
451
  selectedOptions = selectedOptions || dummyArray; // eslint-disable-next-line no-param-reassign
456
452
 
@@ -1,6 +1,4 @@
1
- export function getInitial() {
2
- let firstName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
3
- let lastName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
1
+ export function getInitial(firstName = '', lastName = '') {
4
2
  let initial = '';
5
3
 
6
4
  if (firstName) {
@@ -11,8 +11,8 @@ import propTypes from "./props/propTypes";
11
11
  import defaultProps from "./props/defaultProps";
12
12
  import { DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
13
13
  import { ICON_PLACEMENT, LOADER_PLACEMENT, STATUS, TYPOGRAPHY_SIZE_MAP, VARIANT } from "./constants";
14
- import Loader from "./_shared/Loader/Loader";
15
- import SuccessTick from "./_shared/SuccessTick/SuccessTick";
14
+ import Loader from "../shared/Loader/Loader";
15
+ import SuccessTick from "../shared/SuccessTick/SuccessTick";
16
16
  import cssJSLogic from "./css/cssJSLogic";
17
17
 
18
18
  const getTypographySize = size => TYPOGRAPHY_SIZE_MAP[size] || '13';
@@ -70,7 +70,8 @@ const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
70
70
  successOverlayClass,
71
71
  contentWrapperClass,
72
72
  textClassName,
73
- buttonClassName
73
+ buttonClassName,
74
+ iconClassName
74
75
  } = classes;
75
76
  const showIcon = variant !== VARIANT.TEXT && (renderIcon || iconName);
76
77
 
@@ -134,6 +135,7 @@ const Button = /*#__PURE__*/forwardRef(function Button(props, ref) {
134
135
  }
135
136
 
136
137
  return /*#__PURE__*/React.createElement(Icon, _extends({}, iconProps, {
138
+ iconClass: iconClassName,
137
139
  name: iconName,
138
140
  size: iconSize,
139
141
  tagAttributes: iconTagAttributes,
@@ -218,13 +218,16 @@ describe('Button - Component', () => {
218
218
  }));
219
219
  expect(asFragment()).toMatchSnapshot();
220
220
  });
221
- test('Should apply customClass to wrapper and text', () => {
221
+ test('Should apply customClass to wrapper, text and icon', () => {
222
222
  const {
223
223
  asFragment
224
224
  } = render( /*#__PURE__*/React.createElement(Button, {
225
+ variant: "iconWithText",
226
+ iconName: "ZD-plus",
225
227
  customClass: {
226
228
  wrapper: 'customButtonClass',
227
- text: 'customTextClass'
229
+ text: 'customTextClass',
230
+ icon: 'customIconClass'
228
231
  }
229
232
  }, "Button"));
230
233
  expect(asFragment()).toMatchSnapshot();
@@ -27,7 +27,7 @@ exports[`Button - Component Should apply a11yAttributes to the button 1`] = `
27
27
  </DocumentFragment>
28
28
  `;
29
29
 
30
- exports[`Button - Component Should apply customClass to wrapper and text 1`] = `
30
+ exports[`Button - Component Should apply customClass to wrapper, text and icon 1`] = `
31
31
  <DocumentFragment>
32
32
  <button
33
33
  aria-busy="false"
@@ -42,6 +42,13 @@ exports[`Button - Component Should apply customClass to wrapper and text 1`] = `
42
42
  data-id="flex"
43
43
  data-test-id="flex"
44
44
  >
45
+ <i
46
+ aria-hidden="true"
47
+ class="zd_font_icons basic icon-plus customIconClass "
48
+ data-id="fontIcon"
49
+ data-selector-id="fontIcon"
50
+ style="--zd-iconfont-size: var(--zd_font_size16);"
51
+ />
45
52
  <div
46
53
  class="dotted size13 customTextClass"
47
54
  >
@@ -5,15 +5,11 @@ import getPaletteClasses from "../../helpers/colorHelpers/colorHelper";
5
5
  import { DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
6
6
  import { DISABLED_APPEARANCE, LOADER_PLACEMENT, SHAPE, SIZE, STATUS } from "../constants";
7
7
 
8
- const capitalize = function () {
9
- let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
10
- return value.charAt(0).toUpperCase() + value.slice(1);
11
- };
8
+ const capitalize = (value = '') => value.charAt(0).toUpperCase() + value.slice(1);
12
9
 
13
- export default function cssJSLogic(_ref) {
14
- let {
15
- props
16
- } = _ref;
10
+ export default function cssJSLogic({
11
+ props
12
+ }) {
17
13
  const {
18
14
  palette,
19
15
  bgAppearance,
@@ -31,7 +27,8 @@ export default function cssJSLogic(_ref) {
31
27
  } = props;
32
28
  const {
33
29
  wrapper: wrapperClass = '',
34
- text: textClassCustom = ''
30
+ text: textClassCustom = '',
31
+ icon: iconClassCustom = ''
35
32
  } = customClass;
36
33
  const isLoading = status === STATUS.LOADING;
37
34
  const isSuccess = status === STATUS.SUCCESS;
@@ -86,11 +83,15 @@ export default function cssJSLogic(_ref) {
86
83
  const textClassName = compileClassNames({
87
84
  [textClassCustom]: !!textClassCustom
88
85
  });
86
+ const iconClassName = compileClassNames({
87
+ [iconClassCustom]: !!iconClassCustom
88
+ });
89
89
  return {
90
90
  buttonClassName,
91
91
  textClassName,
92
92
  contentWrapperClass: overlayActive ? style.overlayHidden : style.contentWrapper,
93
93
  loaderOverlayClass: style.loaderOverlay,
94
- successOverlayClass: style.successOverlay
94
+ successOverlayClass: style.successOverlay,
95
+ iconClassName
95
96
  };
96
97
  }
@@ -1,10 +1,9 @@
1
1
  import compileClassNames from '@zohodesk/utils/es/compileClassNames';
2
2
  import commonStyle from "../../../common/common.module.css";
3
- export default function cssJSLogic(_ref) {
4
- let {
5
- style,
6
- props
7
- } = _ref;
3
+ export default function cssJSLogic({
4
+ style,
5
+ props
6
+ }) {
8
7
  const {
9
8
  shouldHighlightRequired,
10
9
  isRequired,
@@ -1,9 +1,8 @@
1
1
  import compileClassNames from '@zohodesk/utils/es/compileClassNames';
2
- export default function cssJSLogic(_ref) {
3
- let {
4
- props,
5
- style
6
- } = _ref;
2
+ export default function cssJSLogic({
3
+ props,
4
+ style
5
+ }) {
7
6
  const {
8
7
  size,
9
8
  isChecked,
@@ -48,37 +48,27 @@ const toBorderIntensity = (tone, hasState, isLighter) => {
48
48
  return `${tone}-${isLighter ? intensity.borderLight : intensity.base}`;
49
49
  };
50
50
 
51
- export const getBgClass = _ref => {
52
- let {
53
- state,
54
- tone,
55
- isLighter
56
- } = _ref;
57
- return paletteBgStyle[withState(state, `bg-${toBgIntensity(tone, !!state, isLighter)}`)];
58
- };
59
- export const getTextClass = _ref2 => {
60
- let {
61
- state,
62
- textTone
63
- } = _ref2;
64
- return paletteTextStyle[withState(state, `text-${toTextIntensity(textTone, !!state)}`)];
65
- };
66
- export const getBorderClass = _ref3 => {
67
- let {
68
- state,
69
- tone,
70
- isLighter
71
- } = _ref3;
72
- return paletteBorderStyle[withState(state, `border-${toBorderIntensity(tone, !!state, isLighter)}`)];
73
- };
74
-
75
- const buildPaletteClasses = (config, _ref4) => {
76
- let {
77
- bgAppearance,
78
- borderAppearance,
79
- paletteShade,
80
- isSelected
81
- } = _ref4;
51
+ export const getBgClass = ({
52
+ state,
53
+ tone,
54
+ isLighter
55
+ }) => paletteBgStyle[withState(state, `bg-${toBgIntensity(tone, !!state, isLighter)}`)];
56
+ export const getTextClass = ({
57
+ state,
58
+ textTone
59
+ }) => paletteTextStyle[withState(state, `text-${toTextIntensity(textTone, !!state)}`)];
60
+ export const getBorderClass = ({
61
+ state,
62
+ tone,
63
+ isLighter
64
+ }) => paletteBorderStyle[withState(state, `border-${toBorderIntensity(tone, !!state, isLighter)}`)];
65
+
66
+ const buildPaletteClasses = (config, {
67
+ bgAppearance,
68
+ borderAppearance,
69
+ paletteShade,
70
+ isSelected
71
+ }) => {
82
72
  const {
83
73
  tone,
84
74
  textTone,
@@ -117,7 +107,7 @@ const buildPaletteClasses = (config, _ref4) => {
117
107
  }) : '',
118
108
  text: isSelected ? getTextClass({
119
109
  state: 'selected',
120
- textTone: baseTextTone
110
+ textTone: hasBgState ? stateTextTone : baseTextTone
121
111
  }) : getTextClass({
122
112
  textTone: baseTextTone
123
113
  }),
@@ -133,11 +123,14 @@ const buildPaletteClasses = (config, _ref4) => {
133
123
  state: 'active',
134
124
  textTone: stateTextTone
135
125
  }),
136
- border: isSelected ? getBorderClass({
126
+ border: isSelected ? !hasBorderState ? getBorderClass({
127
+ tone: 'transparent'
128
+ }) : getBorderClass({
137
129
  state: 'selected',
138
- tone,
139
- isLighter
140
- }) : hasTransparentBorder ? paletteBorderStyle['border-transparent'] : getBorderClass({
130
+ tone
131
+ }) : hasTransparentBorder ? getBorderClass({
132
+ tone: 'transparent'
133
+ }) : getBorderClass({
141
134
  tone,
142
135
  isLighter
143
136
  }),
@@ -156,14 +149,13 @@ const buildPaletteClasses = (config, _ref4) => {
156
149
  };
157
150
  };
158
151
 
159
- const getPaletteClasses = _ref5 => {
160
- let {
161
- palette,
162
- bgAppearance,
163
- borderAppearance,
164
- paletteShade,
165
- isSelected
166
- } = _ref5;
152
+ const getPaletteClasses = ({
153
+ palette,
154
+ bgAppearance,
155
+ borderAppearance,
156
+ paletteShade,
157
+ isSelected
158
+ }) => {
167
159
  const config = PALETTE_CONFIG[palette];
168
160
  return config ? buildPaletteClasses(config, {
169
161
  bgAppearance,