@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.
- package/README.md +7 -0
- package/assets/Appearance/dark/mode/Component_v1_DarkMode.module.css +68 -0
- package/assets/Appearance/light/mode/Component_v1_LightMode.module.css +68 -0
- package/assets/Appearance/pureDark/mode/Component_v1_PureDarkMode.module.css +68 -0
- package/es/Buttongroup/Buttongroup.module.css +10 -30
- package/es/CheckBox/CheckBox.module.css +3 -10
- package/es/DateTime/DateTime.module.css +22 -35
- package/es/DateTime/YearView.module.css +8 -10
- package/es/DropBox/DropBoxElement/css/DropBoxElement.module.css +3 -2
- package/es/DropDown/DropDown.module.css +2 -1
- package/es/DropDown/DropDownItem.module.css +1 -8
- package/es/DropDown/DropDownSeparator.module.css +2 -1
- package/es/ListItem/ListItem.module.css +4 -15
- package/es/MultiSelect/MobileHeader/MobileHeader.module.css +3 -2
- package/es/MultiSelect/MultiSelect.module.css +21 -34
- package/es/MultiSelect/SelectedOptions.module.css +6 -10
- package/es/Radio/Radio.module.css +3 -3
- package/es/ResponsiveDropBox/ResponsiveDropBox.module.css +1 -1
- package/es/Ribbon/Ribbon.module.css +9 -12
- package/es/Select/Select.module.css +22 -17
- package/es/Switch/Switch.module.css +1 -8
- package/es/Tab/Tab.module.css +8 -15
- package/es/Tab/Tabs.module.css +12 -22
- package/es/Tag/Tag.module.css +4 -3
- package/es/Tooltip/Tooltip.module.css +3 -2
- package/es/shared/ArrowIcon/ArrowIcon.module.css +3 -2
- package/es/v1/Button/Button.js +201 -0
- package/es/v1/Button/README.md +110 -0
- package/es/v1/Button/__tests__/Button.spec.js +272 -0
- package/es/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1160 -0
- package/es/v1/Button/_shared/Loader/Loader.js +33 -0
- package/es/v1/Button/_shared/Loader/Loader.module.css +42 -0
- package/es/v1/Button/_shared/Loader/__tests__/Loader.spec.js +21 -0
- package/es/v1/Button/_shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap +49 -0
- package/es/v1/Button/_shared/Loader/props/defaultProps.js +4 -0
- package/es/v1/Button/_shared/Loader/props/propTypes.js +7 -0
- package/es/v1/Button/_shared/SuccessTick/SuccessTick.js +25 -0
- package/es/v1/Button/_shared/SuccessTick/SuccessTick.module.css +21 -0
- package/es/v1/Button/_shared/SuccessTick/__tests__/SuccessTick.spec.js +21 -0
- package/es/v1/Button/_shared/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +31 -0
- package/es/v1/Button/_shared/SuccessTick/props/defaultProps.js +4 -0
- package/es/v1/Button/_shared/SuccessTick/props/propTypes.js +7 -0
- package/es/v1/Button/constants/index.js +82 -0
- package/es/v1/Button/css/Button_v1.module.css +119 -0
- package/es/v1/Button/css/cssJSLogic.js +96 -0
- package/es/v1/Button/index.js +2 -0
- package/es/v1/Button/props/defaultProps.js +26 -0
- package/es/v1/Button/props/propTypes.js +43 -0
- package/es/v1/helpers/colorHelpers/background/backgroundColor.module.css +629 -0
- package/es/v1/helpers/colorHelpers/border/borderColor.module.css +489 -0
- package/es/v1/helpers/colorHelpers/colorHelper.js +176 -0
- package/es/v1/helpers/colorHelpers/constants/index.js +79 -0
- package/es/v1/helpers/colorHelpers/index.js +4 -0
- package/es/v1/helpers/colorHelpers/paletteUtilities.README.md +415 -0
- package/es/v1/helpers/colorHelpers/text/textColor.module.css +368 -0
- package/lib/Buttongroup/Buttongroup.module.css +10 -30
- package/lib/CheckBox/CheckBox.module.css +3 -10
- package/lib/DateTime/DateTime.module.css +22 -35
- package/lib/DateTime/YearView.module.css +8 -10
- package/lib/DropBox/DropBoxElement/css/DropBoxElement.module.css +3 -2
- package/lib/DropDown/DropDown.module.css +2 -1
- package/lib/DropDown/DropDownItem.module.css +1 -8
- package/lib/DropDown/DropDownSeparator.module.css +2 -1
- package/lib/ListItem/ListItem.module.css +4 -15
- package/lib/MultiSelect/MobileHeader/MobileHeader.module.css +3 -2
- package/lib/MultiSelect/MultiSelect.module.css +21 -34
- package/lib/MultiSelect/SelectedOptions.module.css +6 -10
- package/lib/Radio/Radio.module.css +3 -3
- package/lib/ResponsiveDropBox/ResponsiveDropBox.module.css +1 -1
- package/lib/Ribbon/Ribbon.module.css +9 -12
- package/lib/Select/Select.module.css +22 -17
- package/lib/Switch/Switch.module.css +1 -8
- package/lib/Tab/Tab.module.css +8 -15
- package/lib/Tab/Tabs.module.css +12 -22
- package/lib/Tag/Tag.module.css +4 -3
- package/lib/Tooltip/Tooltip.module.css +3 -2
- package/lib/shared/ArrowIcon/ArrowIcon.module.css +3 -2
- package/lib/v1/Button/Button.js +239 -0
- package/lib/v1/Button/README.md +110 -0
- package/lib/v1/Button/__tests__/Button.spec.js +293 -0
- package/lib/v1/Button/__tests__/__snapshots__/Button.spec.js.snap +1160 -0
- package/lib/v1/Button/_shared/Loader/Loader.js +43 -0
- package/lib/v1/Button/_shared/Loader/Loader.module.css +42 -0
- package/lib/v1/Button/_shared/Loader/__tests__/Loader.spec.js +28 -0
- package/lib/v1/Button/_shared/Loader/__tests__/__snapshots__/Loader.spec.js.snap +49 -0
- package/lib/v1/Button/_shared/Loader/props/defaultProps.js +11 -0
- package/lib/v1/Button/_shared/Loader/props/propTypes.js +18 -0
- package/lib/v1/Button/_shared/SuccessTick/SuccessTick.js +35 -0
- package/lib/v1/Button/_shared/SuccessTick/SuccessTick.module.css +21 -0
- package/lib/v1/Button/_shared/SuccessTick/__tests__/SuccessTick.spec.js +28 -0
- package/lib/v1/Button/_shared/SuccessTick/__tests__/__snapshots__/SuccessTick.spec.js.snap +31 -0
- package/lib/v1/Button/_shared/SuccessTick/props/defaultProps.js +11 -0
- package/lib/v1/Button/_shared/SuccessTick/props/propTypes.js +18 -0
- package/lib/v1/Button/constants/index.js +114 -0
- package/lib/v1/Button/css/Button_v1.module.css +119 -0
- package/lib/v1/Button/css/cssJSLogic.js +88 -0
- package/lib/v1/Button/index.js +21 -0
- package/lib/v1/Button/props/defaultProps.js +36 -0
- package/lib/v1/Button/props/propTypes.js +56 -0
- package/lib/v1/helpers/colorHelpers/background/backgroundColor.module.css +629 -0
- package/lib/v1/helpers/colorHelpers/border/borderColor.module.css +489 -0
- package/lib/v1/helpers/colorHelpers/colorHelper.js +190 -0
- package/lib/v1/helpers/colorHelpers/constants/index.js +87 -0
- package/lib/v1/helpers/colorHelpers/index.js +57 -0
- package/lib/v1/helpers/colorHelpers/paletteUtilities.README.md +415 -0
- package/lib/v1/helpers/colorHelpers/text/textColor.module.css +368 -0
- 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,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,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,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;
|