@zohodesk/components 1.6.8 → 1.6.11

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 (107) hide show
  1. package/README.md +7 -0
  2. package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +68 -0
  3. package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +68 -0
  4. package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +68 -0
  5. package/es/Buttongroup/Buttongroup.module.css +10 -30
  6. package/es/CheckBox/CheckBox.module.css +3 -10
  7. package/es/DateTime/DateTime.module.css +22 -35
  8. package/es/DateTime/YearView.module.css +8 -10
  9. package/es/DropBox/DropBoxElement/css/DropBoxElement.module.css +3 -2
  10. package/es/DropDown/DropDown.module.css +2 -1
  11. package/es/DropDown/DropDownItem.module.css +1 -8
  12. package/es/DropDown/DropDownSeparator.module.css +2 -1
  13. package/es/ListItem/ListItem.module.css +4 -15
  14. package/es/MultiSelect/MobileHeader/MobileHeader.module.css +3 -2
  15. package/es/MultiSelect/MultiSelect.module.css +21 -34
  16. package/es/MultiSelect/SelectedOptions.module.css +6 -10
  17. package/es/Radio/Radio.module.css +3 -3
  18. package/es/ResponsiveDropBox/ResponsiveDropBox.module.css +1 -1
  19. package/es/Ribbon/Ribbon.module.css +9 -12
  20. package/es/Select/Select.module.css +22 -17
  21. package/es/Switch/Switch.module.css +1 -8
  22. package/es/Tab/Tab.module.css +8 -15
  23. package/es/Tab/Tabs.module.css +12 -22
  24. package/es/Tag/Tag.module.css +4 -3
  25. package/es/Tooltip/Tooltip.module.css +3 -2
  26. package/es/shared/ArrowIcon/ArrowIcon.module.css +3 -2
  27. package/es/v1/Button/Button.js +201 -0
  28. package/es/v1/Button/README.md +110 -0
  29. package/es/v1/Button/__tests__/Button.spec.js +272 -0
  30. package/es/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1160 -0
  31. package/es/v1/Button/_shared/Loader/Loader.js +33 -0
  32. package/es/v1/Button/_shared/Loader/Loader.module.css +42 -0
  33. package/es/v1/Button/_shared/Loader/__tests__/Loader.spec.js +21 -0
  34. package/es/v1/Button/_shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap +49 -0
  35. package/es/v1/Button/_shared/Loader/props/defaultProps.js +4 -0
  36. package/es/v1/Button/_shared/Loader/props/propTypes.js +7 -0
  37. package/es/v1/Button/_shared/SuccessTick/SuccessTick.js +25 -0
  38. package/es/v1/Button/_shared/SuccessTick/SuccessTick.module.css +21 -0
  39. package/es/v1/Button/_shared/SuccessTick/__tests__/SuccessTick.spec.js +21 -0
  40. package/es/v1/Button/_shared/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +31 -0
  41. package/es/v1/Button/_shared/SuccessTick/props/defaultProps.js +4 -0
  42. package/es/v1/Button/_shared/SuccessTick/props/propTypes.js +7 -0
  43. package/es/v1/Button/constants/index.js +82 -0
  44. package/es/v1/Button/css/Button_v1.module.css +119 -0
  45. package/es/v1/Button/css/cssJSLogic.js +96 -0
  46. package/es/v1/Button/index.js +2 -0
  47. package/es/v1/Button/props/defaultProps.js +26 -0
  48. package/es/v1/Button/props/propTypes.js +43 -0
  49. package/es/v1/helpers/colorHelpers/background/backgroundColor.module.css +629 -0
  50. package/es/v1/helpers/colorHelpers/border/borderColor.module.css +489 -0
  51. package/es/v1/helpers/colorHelpers/colorHelper.js +176 -0
  52. package/es/v1/helpers/colorHelpers/constants/index.js +79 -0
  53. package/es/v1/helpers/colorHelpers/index.js +4 -0
  54. package/es/v1/helpers/colorHelpers/paletteUtilities.README.md +415 -0
  55. package/es/v1/helpers/colorHelpers/text/textColor.module.css +368 -0
  56. package/lib/Buttongroup/Buttongroup.module.css +10 -30
  57. package/lib/CheckBox/CheckBox.module.css +3 -10
  58. package/lib/DateTime/DateTime.module.css +22 -35
  59. package/lib/DateTime/YearView.module.css +8 -10
  60. package/lib/DropBox/DropBoxElement/css/DropBoxElement.module.css +3 -2
  61. package/lib/DropDown/DropDown.module.css +2 -1
  62. package/lib/DropDown/DropDownItem.module.css +1 -8
  63. package/lib/DropDown/DropDownSeparator.module.css +2 -1
  64. package/lib/ListItem/ListItem.module.css +4 -15
  65. package/lib/MultiSelect/MobileHeader/MobileHeader.module.css +3 -2
  66. package/lib/MultiSelect/MultiSelect.module.css +21 -34
  67. package/lib/MultiSelect/SelectedOptions.module.css +6 -10
  68. package/lib/Radio/Radio.module.css +3 -3
  69. package/lib/ResponsiveDropBox/ResponsiveDropBox.module.css +1 -1
  70. package/lib/Ribbon/Ribbon.module.css +9 -12
  71. package/lib/Select/Select.module.css +22 -17
  72. package/lib/Switch/Switch.module.css +1 -8
  73. package/lib/Tab/Tab.module.css +8 -15
  74. package/lib/Tab/Tabs.module.css +12 -22
  75. package/lib/Tag/Tag.module.css +4 -3
  76. package/lib/Tooltip/Tooltip.module.css +3 -2
  77. package/lib/shared/ArrowIcon/ArrowIcon.module.css +3 -2
  78. package/lib/v1/Button/Button.js +239 -0
  79. package/lib/v1/Button/README.md +110 -0
  80. package/lib/v1/Button/__tests__/Button.spec.js +293 -0
  81. package/lib/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1160 -0
  82. package/lib/v1/Button/_shared/Loader/Loader.js +43 -0
  83. package/lib/v1/Button/_shared/Loader/Loader.module.css +42 -0
  84. package/lib/v1/Button/_shared/Loader/__tests__/Loader.spec.js +28 -0
  85. package/lib/v1/Button/_shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap +49 -0
  86. package/lib/v1/Button/_shared/Loader/props/defaultProps.js +11 -0
  87. package/lib/v1/Button/_shared/Loader/props/propTypes.js +18 -0
  88. package/lib/v1/Button/_shared/SuccessTick/SuccessTick.js +35 -0
  89. package/lib/v1/Button/_shared/SuccessTick/SuccessTick.module.css +21 -0
  90. package/lib/v1/Button/_shared/SuccessTick/__tests__/SuccessTick.spec.js +28 -0
  91. package/lib/v1/Button/_shared/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +31 -0
  92. package/lib/v1/Button/_shared/SuccessTick/props/defaultProps.js +11 -0
  93. package/lib/v1/Button/_shared/SuccessTick/props/propTypes.js +18 -0
  94. package/lib/v1/Button/constants/index.js +114 -0
  95. package/lib/v1/Button/css/Button_v1.module.css +119 -0
  96. package/lib/v1/Button/css/cssJSLogic.js +88 -0
  97. package/lib/v1/Button/index.js +21 -0
  98. package/lib/v1/Button/props/defaultProps.js +36 -0
  99. package/lib/v1/Button/props/propTypes.js +56 -0
  100. package/lib/v1/helpers/colorHelpers/background/backgroundColor.module.css +629 -0
  101. package/lib/v1/helpers/colorHelpers/border/borderColor.module.css +489 -0
  102. package/lib/v1/helpers/colorHelpers/colorHelper.js +190 -0
  103. package/lib/v1/helpers/colorHelpers/constants/index.js +87 -0
  104. package/lib/v1/helpers/colorHelpers/index.js +57 -0
  105. package/lib/v1/helpers/colorHelpers/paletteUtilities.README.md +415 -0
  106. package/lib/v1/helpers/colorHelpers/text/textColor.module.css +368 -0
  107. package/package.json +4 -4
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import style from "./Loader.module.css";
3
+ import propTypes from "./props/propTypes";
4
+ import defaultProps from "./props/defaultProps";
5
+
6
+ const Loader = props => {
7
+ const {
8
+ customClass
9
+ } = props;
10
+ const {
11
+ customWrapperClass = ''
12
+ } = customClass;
13
+ return /*#__PURE__*/React.createElement("svg", {
14
+ className: `${style.spinner} ${customWrapperClass}`,
15
+ viewBox: "0 0 24 24",
16
+ role: "img",
17
+ "aria-hidden": "true"
18
+ }, /*#__PURE__*/React.createElement("circle", {
19
+ className: style.spinnerTrack,
20
+ cx: "12",
21
+ cy: "12",
22
+ r: "10"
23
+ }), /*#__PURE__*/React.createElement("circle", {
24
+ className: style.spinnerHead,
25
+ cx: "12",
26
+ cy: "12",
27
+ r: "10"
28
+ }));
29
+ };
30
+
31
+ Loader.propTypes = propTypes;
32
+ Loader.defaultProps = defaultProps;
33
+ export default Loader;
@@ -0,0 +1,42 @@
1
+ .spinner {
2
+ width: var(--local-loader-size, var(--zd_size16));
3
+ height: var(--local-loader-size, var(--zd_size16));
4
+ display: block;
5
+ }
6
+
7
+ .spinnerTrack {
8
+ fill: none;
9
+ stroke: currentColor;
10
+ opacity: 0.2;
11
+ stroke-width: 3px;
12
+ }
13
+
14
+ .spinnerHead {
15
+ fill: none;
16
+ stroke: currentColor;
17
+ stroke-width: 3px;
18
+ stroke-linecap: round;
19
+ stroke-dasharray: 60;
20
+ stroke-dashoffset: 45;
21
+ transform-origin: 50% 50%;
22
+ }
23
+
24
+ [dir=ltr] .spinnerHead {
25
+ animation: spin-ltr 0.9s linear infinite;
26
+ }
27
+
28
+ [dir=rtl] .spinnerHead {
29
+ animation: spin-rtl 0.9s linear infinite;
30
+ }
31
+
32
+ @keyframes spin-ltr {
33
+ to {
34
+ transform: rotate(360deg);
35
+ }
36
+ }
37
+
38
+ @keyframes spin-rtl {
39
+ to {
40
+ transform: rotate(-360deg);
41
+ }
42
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import Loader from "../Loader";
4
+ describe('Loader', () => {
5
+ test('renders default snapshot', () => {
6
+ const {
7
+ asFragment
8
+ } = render( /*#__PURE__*/React.createElement(Loader, null));
9
+ expect(asFragment()).toMatchSnapshot();
10
+ });
11
+ test('renders with customClass', () => {
12
+ const {
13
+ asFragment
14
+ } = render( /*#__PURE__*/React.createElement(Loader, {
15
+ customClass: {
16
+ customWrapperClass: 'my-custom-class'
17
+ }
18
+ }));
19
+ expect(asFragment()).toMatchSnapshot();
20
+ });
21
+ });
@@ -0,0 +1,49 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Loader renders default snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <svg
6
+ aria-hidden="true"
7
+ class="spinner "
8
+ role="img"
9
+ viewBox="0 0 24 24"
10
+ >
11
+ <circle
12
+ class="spinnerTrack"
13
+ cx="12"
14
+ cy="12"
15
+ r="10"
16
+ />
17
+ <circle
18
+ class="spinnerHead"
19
+ cx="12"
20
+ cy="12"
21
+ r="10"
22
+ />
23
+ </svg>
24
+ </DocumentFragment>
25
+ `;
26
+
27
+ exports[`Loader renders with customClass 1`] = `
28
+ <DocumentFragment>
29
+ <svg
30
+ aria-hidden="true"
31
+ class="spinner my-custom-class"
32
+ role="img"
33
+ viewBox="0 0 24 24"
34
+ >
35
+ <circle
36
+ class="spinnerTrack"
37
+ cx="12"
38
+ cy="12"
39
+ r="10"
40
+ />
41
+ <circle
42
+ class="spinnerHead"
43
+ cx="12"
44
+ cy="12"
45
+ r="10"
46
+ />
47
+ </svg>
48
+ </DocumentFragment>
49
+ `;
@@ -0,0 +1,4 @@
1
+ const defaultProps = {
2
+ customClass: {}
3
+ };
4
+ export default defaultProps;
@@ -0,0 +1,7 @@
1
+ import PropTypes from 'prop-types';
2
+ const propTypes = {
3
+ customClass: PropTypes.shape({
4
+ customWrapperClass: PropTypes.string
5
+ })
6
+ };
7
+ export default propTypes;
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import style from "./SuccessTick.module.css";
3
+ import propTypes from "./props/propTypes";
4
+ import defaultProps from "./props/defaultProps";
5
+
6
+ const SuccessTick = props => {
7
+ const {
8
+ customClass
9
+ } = props;
10
+ const {
11
+ customWrapperClass = ''
12
+ } = customClass;
13
+ return /*#__PURE__*/React.createElement("svg", {
14
+ className: `${style.tick} ${customWrapperClass}`,
15
+ viewBox: "0 0 24 24",
16
+ role: "img",
17
+ "aria-hidden": "true"
18
+ }, /*#__PURE__*/React.createElement("path", {
19
+ d: "M4 12l5 5L20 6"
20
+ }));
21
+ };
22
+
23
+ SuccessTick.propTypes = propTypes;
24
+ SuccessTick.defaultProps = defaultProps;
25
+ export default SuccessTick;
@@ -0,0 +1,21 @@
1
+ .tick {
2
+ width: var(--local-tick-size, var(--zd_size16));
3
+ height: var(--local-tick-size, var(--zd_size16));
4
+ stroke: currentColor;
5
+ stroke-width: 2.5px;
6
+ stroke-linecap: round;
7
+ stroke-linejoin: round;
8
+ fill: none;
9
+ stroke-dasharray: 24;
10
+ stroke-dashoffset: 24;
11
+ }[dir=ltr] .tick {
12
+ animation: drawTick 0.3s ease-out forwards;
13
+ }[dir=rtl] .tick {
14
+ animation: drawTick 0.3s ease-out forwards;
15
+ }
16
+
17
+ @keyframes drawTick {
18
+ to {
19
+ stroke-dashoffset: 0;
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import SuccessTick from "../SuccessTick";
4
+ describe('SuccessTick', () => {
5
+ test('renders default snapshot', () => {
6
+ const {
7
+ asFragment
8
+ } = render( /*#__PURE__*/React.createElement(SuccessTick, null));
9
+ expect(asFragment()).toMatchSnapshot();
10
+ });
11
+ test('renders with customClass', () => {
12
+ const {
13
+ asFragment
14
+ } = render( /*#__PURE__*/React.createElement(SuccessTick, {
15
+ customClass: {
16
+ customWrapperClass: 'my-custom-class'
17
+ }
18
+ }));
19
+ expect(asFragment()).toMatchSnapshot();
20
+ });
21
+ });
@@ -0,0 +1,31 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`SuccessTick renders default snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <svg
6
+ aria-hidden="true"
7
+ class="tick "
8
+ role="img"
9
+ viewBox="0 0 24 24"
10
+ >
11
+ <path
12
+ d="M4 12l5 5L20 6"
13
+ />
14
+ </svg>
15
+ </DocumentFragment>
16
+ `;
17
+
18
+ exports[`SuccessTick renders with customClass 1`] = `
19
+ <DocumentFragment>
20
+ <svg
21
+ aria-hidden="true"
22
+ class="tick my-custom-class"
23
+ role="img"
24
+ viewBox="0 0 24 24"
25
+ >
26
+ <path
27
+ d="M4 12l5 5L20 6"
28
+ />
29
+ </svg>
30
+ </DocumentFragment>
31
+ `;
@@ -0,0 +1,4 @@
1
+ const defaultProps = {
2
+ customClass: {}
3
+ };
4
+ export default defaultProps;
@@ -0,0 +1,7 @@
1
+ import PropTypes from 'prop-types';
2
+ const propTypes = {
3
+ customClass: PropTypes.shape({
4
+ customWrapperClass: PropTypes.string
5
+ })
6
+ };
7
+ export default propTypes;
@@ -0,0 +1,82 @@
1
+ export const PALETTE = {
2
+ DEFAULT: 'default',
3
+ PRIMARY: 'primary',
4
+ SECONDARY: 'secondary',
5
+ DANGER: 'danger',
6
+ SUCCESS: 'success'
7
+ };
8
+ export const BG_APPEARANCE = {
9
+ DEFAULT: 'default',
10
+ ON_HOVER: 'onHover',
11
+ NONE: 'none'
12
+ };
13
+ export const BORDER_APPEARANCE = {
14
+ DEFAULT: 'default',
15
+ ON_HOVER: 'onHover',
16
+ NONE: 'none'
17
+ };
18
+ export const VARIANT = {
19
+ TEXT: 'text',
20
+ ICON: 'icon',
21
+ ICON_WITH_TEXT: 'iconWithText'
22
+ };
23
+ export const SIZE = {
24
+ SMALL: 'small',
25
+ MEDIUM: 'medium',
26
+ LARGE: 'large',
27
+ FULL: 'full'
28
+ };
29
+ export const STATUS = {
30
+ DEFAULT: 'default',
31
+ LOADING: 'loading',
32
+ SUCCESS: 'success'
33
+ };
34
+ export const LOADER_PLACEMENT = {
35
+ START: 'start',
36
+ END: 'end',
37
+ OVERLAY: 'overlay'
38
+ };
39
+ export const ICON_PLACEMENT = {
40
+ LEFT: 'left',
41
+ RIGHT: 'right'
42
+ };
43
+ export const PALETTE_SHADE = {
44
+ DEFAULT: 'default',
45
+ LIGHTER: 'lighter'
46
+ };
47
+ export const SHAPE = {
48
+ PILL: 'pill',
49
+ RECTANGLE: 'rectangle',
50
+ ROUNDED_RECTANGLE: 'roundedRectangle'
51
+ };
52
+ export const DISABLED_APPEARANCE = {
53
+ NONE: 'none',
54
+ DULL: 'dull',
55
+ STRIKE: 'strike'
56
+ };
57
+ export const BUTTON_TYPE = {
58
+ BUTTON: 'button',
59
+ SUBMIT: 'submit',
60
+ RESET: 'reset'
61
+ };
62
+ export const TYPOGRAPHY_SIZE_MAP = {
63
+ [SIZE.SMALL]: '10',
64
+ [SIZE.MEDIUM]: '13',
65
+ [SIZE.LARGE]: '14',
66
+ [SIZE.FULL]: '14'
67
+ };
68
+ /** Default values referenced by both defaultProps and cssJSLogic */
69
+
70
+ export const DEFAULT_PALETTE = PALETTE.DEFAULT;
71
+ export const DEFAULT_BG_APPEARANCE = BG_APPEARANCE.DEFAULT;
72
+ export const DEFAULT_BORDER_APPEARANCE = BORDER_APPEARANCE.DEFAULT;
73
+ export const DEFAULT_VARIANT = VARIANT.TEXT;
74
+ export const DEFAULT_SIZE = SIZE.MEDIUM;
75
+ export const DEFAULT_STATUS = STATUS.DEFAULT;
76
+ export const DEFAULT_LOADER_PLACEMENT = LOADER_PLACEMENT.OVERLAY;
77
+ export const DEFAULT_ICON_PLACEMENT = ICON_PLACEMENT.LEFT;
78
+ export const DEFAULT_ICON_SIZE = 16;
79
+ export const DEFAULT_PALETTE_SHADE = PALETTE_SHADE.DEFAULT;
80
+ export const DEFAULT_SHAPE = SHAPE.ROUNDED_RECTANGLE;
81
+ export const DEFAULT_DISABLED_APPEARANCE = DISABLED_APPEARANCE.DULL;
82
+ export const DEFAULT_BUTTON_TYPE = BUTTON_TYPE.BUTTON;
@@ -0,0 +1,119 @@
1
+ .varClass {
2
+ --local-button-border-style: solid;
3
+ --local-button-border-width: 1px;
4
+ --local-button-radius: 4px;
5
+ --local-button-gap: var(--zd_size8);
6
+ --local-button-padding-block: var(--zd_size6);
7
+ --local-button-padding-inline: var(--zd_size15);
8
+ --local-button-font-size: var(--zd_font_size13);
9
+ --local-loader-size: 16px;
10
+ --local-tick-size: 16px;
11
+ --local-button-height: auto;
12
+ --local-button-width: auto;
13
+ --local-button-overlay-opacity: 0.48;
14
+ --local-button-transition-duration: var(--zd_transition3);
15
+ }
16
+
17
+ .button {
18
+ composes: varClass;
19
+ composes: posrel pointer from '../../../common/common.module.css';
20
+ padding-block: var(--local-button-padding-block);
21
+ padding-inline: var(--local-button-padding-inline);
22
+ font-size: var(--local-button-font-size);
23
+ height: var(--local-button-height);
24
+ width: var(--local-button-width);
25
+ border-radius: var(--local-button-radius);
26
+ border-style: var(--local-button-border-style);
27
+ border-width: var(--local-button-border-width);
28
+ transition-duration: var(--local-button-transition-duration);
29
+ transition-timing-function: ease;
30
+ background-image: none;
31
+ }
32
+
33
+ .disabledPointer {
34
+ cursor: not-allowed;
35
+ }
36
+
37
+ .disabledOpac {
38
+ opacity: var(--local-button-overlay-opacity);
39
+ }
40
+
41
+ .loading {
42
+ cursor: progress;
43
+ }
44
+
45
+ .sizeSmall {
46
+ --local-button-padding-block: var(--zd_size4);
47
+ --local-button-padding-inline: var(--zd_size7);
48
+ --local-loader-size: 14px;
49
+ --local-tick-size: 14px;
50
+ }
51
+
52
+ .sizeMedium {
53
+ --local-button-padding-block: var(--zd_size6);
54
+ --local-button-padding-inline: var(--zd_size15);
55
+ --local-loader-size: 16px;
56
+ --local-tick-size: 16px;
57
+ }
58
+
59
+ .sizeLarge {
60
+ --local-button-padding-block: var(--zd_size9);
61
+ --local-button-padding-inline: var(--zd_size14);
62
+ --local-loader-size: 18px;
63
+ --local-tick-size: 18px;
64
+ }
65
+
66
+ .sizeFull {
67
+ --local-button-height: 100%;
68
+ --local-button-width: 100%;
69
+ }
70
+
71
+ .shapeRoundedRectangle {
72
+ --local-button-radius: 4px;
73
+ }
74
+
75
+ .shapePill {
76
+ --local-button-radius: 50px;
77
+ }
78
+
79
+ .shapeRectangle {
80
+ --local-button-radius: 0;
81
+ }
82
+
83
+ .loaderOverlay {
84
+ inset: 0 ;
85
+ composes: posab from '../../../common/common.module.css';
86
+ }
87
+
88
+ .contentWrapper {
89
+ gap: var(--local-button-gap);
90
+ }
91
+
92
+
93
+ .overlayHidden {
94
+ composes: contentWrapper;
95
+ visibility: hidden;
96
+ opacity: 0;
97
+ }
98
+
99
+ .strike::after {
100
+ content: '';
101
+ position: absolute;
102
+ inset: 0 ;
103
+ pointer-events: none;
104
+ border-radius: var(--local-button-radius);
105
+ }
106
+
107
+ [dir=ltr] .strike::after {
108
+ background-image: repeating-linear-gradient(120deg, currentColor 0 1px, var(--dot_mirror) 1px 8px);
109
+ }
110
+
111
+ [dir=rtl] .strike::after {
112
+ background-image: repeating-linear-gradient(-120deg, currentColor 0 1px, var(--dot_mirror) 1px 8px);
113
+ }
114
+
115
+ .successOverlay {
116
+ inset: 0 ;
117
+ composes: posab from '../../../common/common.module.css';
118
+ }
119
+
@@ -0,0 +1,96 @@
1
+ import style from "./Button_v1.module.css";
2
+ import compileClassNames from '@zohodesk/utils/es/compileClassNames';
3
+ import buttonResetStyle from "../../../semantic/Button/semanticButton.module.css";
4
+ import getPaletteClasses from "../../helpers/colorHelpers/colorHelper";
5
+ import { DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
6
+ import { DISABLED_APPEARANCE, LOADER_PLACEMENT, SHAPE, SIZE, STATUS } from "../constants";
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
+ };
12
+
13
+ export default function cssJSLogic(_ref) {
14
+ let {
15
+ props
16
+ } = _ref;
17
+ const {
18
+ palette,
19
+ bgAppearance,
20
+ borderAppearance,
21
+ paletteShade,
22
+ size,
23
+ status,
24
+ isDisabled,
25
+ isReadOnly,
26
+ isSelected,
27
+ shape,
28
+ loaderPlacement,
29
+ disabledAppearance,
30
+ customClass = DUMMY_OBJECT
31
+ } = props;
32
+ const {
33
+ wrapper: wrapperClass = '',
34
+ text: textClassCustom = ''
35
+ } = customClass;
36
+ const isLoading = status === STATUS.LOADING;
37
+ const isSuccess = status === STATUS.SUCCESS;
38
+ const isInteractive = !isDisabled && !isReadOnly;
39
+ const overlayActive = (isLoading || isSuccess) && loaderPlacement === LOADER_PLACEMENT.OVERLAY;
40
+ const {
41
+ bg,
42
+ hoverBg,
43
+ focusBg,
44
+ activeBg,
45
+ text,
46
+ hoverText,
47
+ focusText,
48
+ activeText,
49
+ border,
50
+ hoverBorder,
51
+ focusBorder,
52
+ activeBorder
53
+ } = getPaletteClasses({
54
+ palette,
55
+ bgAppearance,
56
+ borderAppearance,
57
+ paletteShade,
58
+ isSelected
59
+ });
60
+ const sizeClass = size ? style[`size${capitalize(size)}`] : '';
61
+ const shapeClass = shape ? style[`shape${capitalize(shape)}`] : '';
62
+ const shouldStrike = disabledAppearance === DISABLED_APPEARANCE.STRIKE && isDisabled;
63
+ const buttonClassName = compileClassNames({
64
+ [buttonResetStyle.buttonReset]: true,
65
+ [style.button]: true,
66
+ [bg]: !!bg,
67
+ [hoverBg]: !!hoverBg && isInteractive,
68
+ [focusBg]: !!focusBg && isInteractive,
69
+ [activeBg]: !!activeBg && isInteractive,
70
+ [text]: !!text,
71
+ [hoverText]: !!hoverText && isInteractive,
72
+ [focusText]: !!focusText && isInteractive,
73
+ [activeText]: !!activeText && isInteractive,
74
+ [border]: !!border,
75
+ [hoverBorder]: !!hoverBorder && isInteractive,
76
+ [focusBorder]: !!focusBorder && isInteractive,
77
+ [activeBorder]: !!activeBorder && isInteractive,
78
+ [sizeClass]: !!sizeClass,
79
+ [shapeClass]: !!shapeClass,
80
+ [style.disabledOpac]: isReadOnly || isDisabled && disabledAppearance === DISABLED_APPEARANCE.DULL,
81
+ [style.disabledPointer]: isReadOnly || isDisabled,
82
+ [style.loading]: isLoading,
83
+ [style.strike]: shouldStrike,
84
+ [wrapperClass]: !!wrapperClass
85
+ });
86
+ const textClassName = compileClassNames({
87
+ [textClassCustom]: !!textClassCustom
88
+ });
89
+ return {
90
+ buttonClassName,
91
+ textClassName,
92
+ contentWrapperClass: overlayActive ? style.overlayHidden : style.contentWrapper,
93
+ loaderOverlayClass: style.loaderOverlay,
94
+ successOverlayClass: style.successOverlay
95
+ };
96
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from "./Button";
2
+ export { default as Button } from "./Button";
@@ -0,0 +1,26 @@
1
+ import { DUMMY_FUNCTION, DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
2
+ import { DEFAULT_PALETTE, DEFAULT_BG_APPEARANCE, DEFAULT_BORDER_APPEARANCE, DEFAULT_VARIANT, DEFAULT_SIZE, DEFAULT_STATUS, DEFAULT_LOADER_PLACEMENT, DEFAULT_ICON_PLACEMENT, DEFAULT_ICON_SIZE, DEFAULT_PALETTE_SHADE, DEFAULT_SHAPE, DEFAULT_DISABLED_APPEARANCE, DEFAULT_BUTTON_TYPE } from "../constants";
3
+ const defaultProps = {
4
+ palette: DEFAULT_PALETTE,
5
+ bgAppearance: DEFAULT_BG_APPEARANCE,
6
+ borderAppearance: DEFAULT_BORDER_APPEARANCE,
7
+ variant: DEFAULT_VARIANT,
8
+ size: DEFAULT_SIZE,
9
+ status: DEFAULT_STATUS,
10
+ loaderPlacement: DEFAULT_LOADER_PLACEMENT,
11
+ iconPlacement: DEFAULT_ICON_PLACEMENT,
12
+ iconSize: DEFAULT_ICON_SIZE,
13
+ paletteShade: DEFAULT_PALETTE_SHADE,
14
+ disabledAppearance: DEFAULT_DISABLED_APPEARANCE,
15
+ isDisabled: false,
16
+ isReadOnly: false,
17
+ isSelected: false,
18
+ shape: DEFAULT_SHAPE,
19
+ type: DEFAULT_BUTTON_TYPE,
20
+ onClick: DUMMY_FUNCTION,
21
+ customClass: DUMMY_OBJECT,
22
+ customProps: DUMMY_OBJECT,
23
+ customAttributes: DUMMY_OBJECT,
24
+ a11yAttributes: DUMMY_OBJECT
25
+ };
26
+ export default defaultProps;
@@ -0,0 +1,43 @@
1
+ import PropTypes from 'prop-types';
2
+ import { PALETTE, BG_APPEARANCE, BORDER_APPEARANCE, VARIANT, SIZE, STATUS, LOADER_PLACEMENT, ICON_PLACEMENT, PALETTE_SHADE, SHAPE, DISABLED_APPEARANCE, BUTTON_TYPE } from "../constants";
3
+ const renderSlotType = PropTypes.oneOfType([PropTypes.node, PropTypes.func]);
4
+ const propTypes = {
5
+ palette: PropTypes.oneOf(Object.values(PALETTE)),
6
+ bgAppearance: PropTypes.oneOf(Object.values(BG_APPEARANCE)),
7
+ borderAppearance: PropTypes.oneOf(Object.values(BORDER_APPEARANCE)),
8
+ variant: PropTypes.oneOf(Object.values(VARIANT)),
9
+ size: PropTypes.oneOf(Object.values(SIZE)),
10
+ status: PropTypes.oneOf(Object.values(STATUS)),
11
+ loaderPlacement: PropTypes.oneOf(Object.values(LOADER_PLACEMENT)),
12
+ iconName: PropTypes.string,
13
+ iconSize: PropTypes.number,
14
+ iconPlacement: PropTypes.oneOf(Object.values(ICON_PLACEMENT)),
15
+ paletteShade: PropTypes.oneOf(Object.values(PALETTE_SHADE)),
16
+ disabledAppearance: PropTypes.oneOf(Object.values(DISABLED_APPEARANCE)),
17
+ renderIcon: renderSlotType,
18
+ renderBefore: renderSlotType,
19
+ renderAfter: renderSlotType,
20
+ renderLoader: renderSlotType,
21
+ renderSuccess: renderSlotType,
22
+ children: PropTypes.node,
23
+ type: PropTypes.oneOf(Object.values(BUTTON_TYPE)),
24
+ onClick: PropTypes.func,
25
+ isDisabled: PropTypes.bool,
26
+ isReadOnly: PropTypes.bool,
27
+ isSelected: PropTypes.bool,
28
+ shape: PropTypes.oneOf(Object.values(SHAPE)),
29
+ title: PropTypes.string,
30
+ customClass: PropTypes.shape({
31
+ wrapper: PropTypes.string,
32
+ text: PropTypes.string
33
+ }),
34
+ customProps: PropTypes.shape({
35
+ text: PropTypes.object,
36
+ icon: PropTypes.object
37
+ }),
38
+ customAttributes: PropTypes.object,
39
+ a11yAttributes: PropTypes.object,
40
+ customId: PropTypes.string,
41
+ testId: PropTypes.string
42
+ };
43
+ export default propTypes;