@toptal/picasso-button 1.0.13 → 2.0.0

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 (90) hide show
  1. package/dist-package/src/Button/Button.d.ts.map +1 -1
  2. package/dist-package/src/Button/Button.js +39 -47
  3. package/dist-package/src/Button/Button.js.map +1 -1
  4. package/dist-package/src/Button/styles.d.ts +19 -45
  5. package/dist-package/src/Button/styles.d.ts.map +1 -1
  6. package/dist-package/src/Button/styles.js +161 -178
  7. package/dist-package/src/Button/styles.js.map +1 -1
  8. package/dist-package/src/ButtonAction/ButtonAction.d.ts.map +1 -1
  9. package/dist-package/src/ButtonAction/ButtonAction.js +20 -28
  10. package/dist-package/src/ButtonAction/ButtonAction.js.map +1 -1
  11. package/dist-package/src/ButtonAction/styles.d.ts +11 -3
  12. package/dist-package/src/ButtonAction/styles.d.ts.map +1 -1
  13. package/dist-package/src/ButtonAction/styles.js +36 -55
  14. package/dist-package/src/ButtonAction/styles.js.map +1 -1
  15. package/dist-package/src/ButtonBase/ButtonBase.d.ts +29 -0
  16. package/dist-package/src/ButtonBase/ButtonBase.d.ts.map +1 -0
  17. package/dist-package/src/ButtonBase/ButtonBase.js +82 -0
  18. package/dist-package/src/ButtonBase/ButtonBase.js.map +1 -0
  19. package/dist-package/src/ButtonBase/index.d.ts +5 -0
  20. package/dist-package/src/ButtonBase/index.d.ts.map +1 -0
  21. package/dist-package/src/ButtonBase/index.js +2 -0
  22. package/dist-package/src/ButtonBase/index.js.map +1 -0
  23. package/dist-package/src/ButtonBase/styles.d.ts +6 -0
  24. package/dist-package/src/ButtonBase/styles.d.ts.map +1 -0
  25. package/dist-package/src/ButtonBase/styles.js +29 -0
  26. package/dist-package/src/ButtonBase/styles.js.map +1 -0
  27. package/dist-package/src/ButtonCircular/ButtonCircular.d.ts.map +1 -1
  28. package/dist-package/src/ButtonCircular/ButtonCircular.js +12 -26
  29. package/dist-package/src/ButtonCircular/ButtonCircular.js.map +1 -1
  30. package/dist-package/src/ButtonCircular/styles.d.ts +15 -3
  31. package/dist-package/src/ButtonCircular/styles.d.ts.map +1 -1
  32. package/dist-package/src/ButtonCircular/styles.js +92 -57
  33. package/dist-package/src/ButtonCircular/styles.js.map +1 -1
  34. package/dist-package/src/ButtonCompound/index.d.ts +1 -1
  35. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.d.ts.map +1 -1
  36. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js +4 -13
  37. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js.map +1 -1
  38. package/dist-package/src/ButtonControlLabel/styles.d.ts +2 -2
  39. package/dist-package/src/ButtonControlLabel/styles.d.ts.map +1 -1
  40. package/dist-package/src/ButtonControlLabel/styles.js +16 -25
  41. package/dist-package/src/ButtonControlLabel/styles.js.map +1 -1
  42. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts +1 -1
  43. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  44. package/dist-package/src/ButtonGroup/ButtonGroup.js +5 -27
  45. package/dist-package/src/ButtonGroup/ButtonGroup.js.map +1 -1
  46. package/dist-package/src/ButtonGroup/styles.d.ts +1 -2
  47. package/dist-package/src/ButtonGroup/styles.d.ts.map +1 -1
  48. package/dist-package/src/ButtonGroup/styles.js +20 -47
  49. package/dist-package/src/ButtonGroup/styles.js.map +1 -1
  50. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts +1 -1
  51. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts.map +1 -1
  52. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js +17 -12
  53. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js.map +1 -1
  54. package/dist-package/src/ButtonGroupItem/styles.d.ts +13 -3
  55. package/dist-package/src/ButtonGroupItem/styles.d.ts.map +1 -1
  56. package/dist-package/src/ButtonGroupItem/styles.js +39 -17
  57. package/dist-package/src/ButtonGroupItem/styles.js.map +1 -1
  58. package/dist-package/src/ButtonSplit/ButtonSplit.d.ts.map +1 -1
  59. package/dist-package/src/ButtonSplit/ButtonSplit.js +28 -24
  60. package/dist-package/src/ButtonSplit/ButtonSplit.js.map +1 -1
  61. package/dist-package/src/ButtonSplit/styles.d.ts +9 -3
  62. package/dist-package/src/ButtonSplit/styles.d.ts.map +1 -1
  63. package/dist-package/src/ButtonSplit/styles.js +13 -50
  64. package/dist-package/src/ButtonSplit/styles.js.map +1 -1
  65. package/package.json +17 -13
  66. package/src/Button/Button.tsx +69 -100
  67. package/src/Button/__snapshots__/test.tsx.snap +8 -4
  68. package/src/Button/styles.ts +214 -221
  69. package/src/Button/test.tsx +3 -1
  70. package/src/ButtonAction/ButtonAction.tsx +36 -48
  71. package/src/ButtonAction/styles.ts +57 -57
  72. package/src/ButtonBase/ButtonBase.tsx +186 -0
  73. package/src/ButtonBase/__snapshots__/test.tsx.snap +286 -0
  74. package/src/ButtonBase/index.ts +5 -0
  75. package/src/ButtonBase/styles.ts +36 -0
  76. package/src/ButtonBase/test.tsx +230 -0
  77. package/src/ButtonCheckbox/__snapshots__/test.tsx.snap +4 -3
  78. package/src/ButtonCircular/ButtonCircular.tsx +22 -37
  79. package/src/ButtonCircular/styles.ts +127 -75
  80. package/src/ButtonControlLabel/ButtonControlLabel.tsx +7 -16
  81. package/src/ButtonControlLabel/styles.ts +30 -26
  82. package/src/ButtonGroup/ButtonGroup.tsx +9 -44
  83. package/src/ButtonGroup/__snapshots__/test.tsx.snap +13 -7
  84. package/src/ButtonGroup/styles.ts +21 -63
  85. package/src/ButtonGroupItem/ButtonGroupItem.tsx +24 -15
  86. package/src/ButtonGroupItem/styles.ts +62 -28
  87. package/src/ButtonRadio/__snapshots__/test.tsx.snap +4 -3
  88. package/src/ButtonSplit/ButtonSplit.tsx +46 -42
  89. package/src/ButtonSplit/__snapshots__/test.tsx.snap +13 -9
  90. package/src/ButtonSplit/styles.ts +37 -56
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ButtonGroupItem/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA;AAEzB,eAAe,CAAC,KAAY,EAAE,EAAE,CAC9B,YAAY,CAAC;IACX,IAAI,EAAE;QACJ,oFAAoF,EAClF;YACE,kEAAkE;YAClE,uCAAuC;YACvC,MAAM,EAAE,CAAC;SACV;QACH,SAAS,kCACJ,oBAAoB,CAAC,KAAK,CAAC,KAC9B,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC,EACxC,wBAAwB,EAAE,aAAa,CAAC,KAAK,CAAC,GAC/C;KACF;IACD,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;CACV,CAAC,CAAA"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ButtonGroupItem/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,EAC9C,QAAQ,EACR,OAAO,EACP,OAAO,EACP,MAAM,GAOP,EAAE,EAAE;IACH,MAAM,UAAU,GAAG;QACjB,cAAc;QACd,+BAA+B;QAC/B,6DAA6D;KAC9D,CAAA;IAED,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,IAAI,QAAQ,EAAE;QAC5C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACzB;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAC3C,QAAQ,EACR,OAAO,EACP,MAAM,GAMP,EAAY,EAAE;IACb,MAAM,UAAU,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAA;IAEzD,IAAI,QAAQ,EAAE;QACZ,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACrC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAEhC,IAAI,MAAM,EAAE;YACV,UAAU,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;SACvD;aAAM;YACL,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;SACnC;KACF;SAAM;QACL,UAAU,CAAC,IAAI,CACb,qEAAqE,CACtE,CAAA;QACD,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAErC,IAAI,OAAO,EAAE;YACX,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;SAC3C;aAAM,IAAI,MAAM,EAAE;YACjB,UAAU,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;YACjE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;SAC/B;aAAM;YACL,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;SAC9C;KACF;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonSplit.d.ts","sourceRoot":"","sources":["../../../src/ButtonSplit/ButtonSplit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,cAAc,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,KAAqB,MAAM,OAAO,CAAA;AAGzC,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAK5C,MAAM,WAAW,KACf,SAAQ,SAAS,EACf,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACjD,kCAAkC;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB,wDAAwD;IACxD,IAAI,EAAE,SAAS,CAAA;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAChC,wCAAwC;IACxC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,yBAAyB;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IACjC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,eAAe,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAC/C,iBAAiB,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACjD,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAiCD,eAAO,MAAM,WAAW,8EAmFvB,CAAA;AASD,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"ButtonSplit.d.ts","sourceRoot":"","sources":["../../../src/ButtonSplit/ButtonSplit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,cAAc,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAS5C,MAAM,WAAW,KACf,SAAQ,SAAS,EACf,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACjD,kCAAkC;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB,wDAAwD;IACxD,IAAI,EAAE,SAAS,CAAA;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAChC,wCAAwC;IACxC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1B,yBAAyB;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;IACjC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,eAAe,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAC/C,iBAAiB,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACjD,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AA0BD,eAAO,MAAM,WAAW,8EA4FvB,CAAA;AASD,eAAe,WAAW,CAAA"}
@@ -10,20 +10,13 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import React, { forwardRef } from 'react';
13
- import { makeStyles } from '@material-ui/core/styles';
14
- import cx from 'classnames';
13
+ import { twMerge } from 'tailwind-merge';
15
14
  import { ArrowDownMinor24, ArrowDownMinor16 } from '@toptal/picasso-icons';
16
15
  import { Dropdown } from '@toptal/picasso-dropdown';
17
16
  import { Button } from '../Button';
18
17
  import { ButtonGroup } from '../ButtonGroup';
19
- import styles from './styles';
20
- // Using { index: -1 } to inject CSS link to the bottom of the head
21
- // in order to prevent Button's styles to override ButtonSplit's ones
22
- // Related Jira issue: https://toptal-core.atlassian.net/browse/FX-1520
23
- const useStyles = makeStyles(styles, {
24
- name: 'PicassoButtonSplit',
25
- index: -1,
26
- });
18
+ import { createButtonGroupItemClassNames } from '../ButtonGroupItem/styles';
19
+ import { createActionButtonClassNames, createMenuButtonClassNames, } from './styles';
27
20
  const DropdownIcon = ({ size, className, }) => {
28
21
  if (size === 'large') {
29
22
  return React.createElement(ArrowDownMinor24, { className: className });
@@ -38,23 +31,34 @@ const EventStopPropagation = ({ children }) => {
38
31
  };
39
32
  export const ButtonSplit = forwardRef(function ButtonSplit(props, ref) {
40
33
  const { size = 'medium', menu, children, variant = 'primary', disabled, style, className, onClick, menuButtonProps, actionButtonProps, testIds = {} } = props, rest = __rest(props, ["size", "menu", "children", "variant", "disabled", "style", "className", "onClick", "menuButtonProps", "actionButtonProps", "testIds"]);
41
- const classes = useStyles();
42
- const commonClasses = cx(classes.button, {
43
- [classes.primaryVariant]: variant === 'primary',
44
- [classes.disabled]: disabled,
45
- });
46
- const renderMenuButton = ({ isOpen, disabled, }) => {
47
- const menuButton = (React.createElement(Button, Object.assign({}, menuButtonProps, { variant: variant, className: `${commonClasses} ${classes.menuButton} ${classes[`${size}Size`]}`, size: size, disabled: disabled, "data-testid": testIds.menuButton }),
48
- React.createElement(DropdownIcon, { className: cx({
49
- [classes.rotated]: isOpen,
50
- }), size: size })));
34
+ const renderMenuButton = ({ isOpen }) => {
35
+ const menuButtonClassName = twMerge(createButtonGroupItemClassNames({
36
+ active: menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.active,
37
+ hovered: menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.hovered,
38
+ disabled: (menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.disabled) || disabled,
39
+ focused: menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.focused,
40
+ }), createMenuButtonClassNames({
41
+ variant,
42
+ size,
43
+ disabled: (menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.disabled) || disabled,
44
+ }), menuButtonProps === null || menuButtonProps === void 0 ? void 0 : menuButtonProps.className);
45
+ const iconClassName = isOpen ? 'rotate-180' : '';
46
+ const menuButton = (React.createElement(Button, Object.assign({}, menuButtonProps, { variant: variant, className: menuButtonClassName, size: size, disabled: disabled, "data-testid": testIds.menuButton }),
47
+ React.createElement(DropdownIcon, { className: iconClassName, size: size })));
51
48
  return disabled ? (React.createElement(EventStopPropagation, null, menuButton)) : (menuButton);
52
49
  };
50
+ const actionButtonClassName = twMerge(createButtonGroupItemClassNames({
51
+ active: actionButtonProps === null || actionButtonProps === void 0 ? void 0 : actionButtonProps.active,
52
+ hovered: actionButtonProps === null || actionButtonProps === void 0 ? void 0 : actionButtonProps.hovered,
53
+ disabled: (actionButtonProps === null || actionButtonProps === void 0 ? void 0 : actionButtonProps.disabled) || disabled,
54
+ focused: actionButtonProps === null || actionButtonProps === void 0 ? void 0 : actionButtonProps.focused,
55
+ }), createActionButtonClassNames({
56
+ variant,
57
+ }), actionButtonProps === null || actionButtonProps === void 0 ? void 0 : actionButtonProps.className);
58
+ const dropdownClassName = twMerge('block cursor-pointer', disabled && '[&>div]:cursor-auto');
53
59
  return (React.createElement(ButtonGroup, Object.assign({}, rest, { ref: ref, style: style, className: className }),
54
- React.createElement(Button, Object.assign({}, actionButtonProps, { className: `${commonClasses} ${classes.actionButton}`, size: size, variant: variant, disabled: disabled, onClick: onClick, "data-testid": testIds.actionButton }), children),
55
- React.createElement(Dropdown, { content: menu, className: cx(classes.dropdown, {
56
- [classes.disabled]: disabled,
57
- }) }, ({ isOpen }) => renderMenuButton({ isOpen, disabled }))));
60
+ React.createElement(Button, Object.assign({}, actionButtonProps, { className: actionButtonClassName, size: size, variant: variant, disabled: disabled, onClick: onClick, "data-testid": testIds.actionButton }), children),
61
+ React.createElement(Dropdown, { content: menu, className: dropdownClassName }, ({ isOpen }) => renderMenuButton({ isOpen }))));
58
62
  });
59
63
  ButtonSplit.defaultProps = {
60
64
  size: 'medium',
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonSplit.js","sourceRoot":"","sources":["../../../src/ButtonSplit/ButtonSplit.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ButtonSplit.js","sourceRoot":"","sources":["../../../src/ButtonSplit/ButtonSplit.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
- import type { Theme } from '@material-ui/core/styles';
2
- declare const _default: ({ palette }: Theme) => import("@material-ui/styles").StyleRules<{}, "disabled" | "actionButton" | "menuButton" | "primaryVariant" | "smallSize" | "mediumSize" | "largeSize" | "dropdown" | "rotated">;
3
- export default _default;
1
+ import type { SizeType } from '@toptal/picasso-shared';
2
+ export declare const createActionButtonClassNames: ({ variant, }: {
3
+ variant?: "primary" | "secondary" | undefined;
4
+ }) => string;
5
+ export declare const createMenuButtonClassNames: ({ variant, size, disabled, }: {
6
+ variant?: "primary" | "secondary" | undefined;
7
+ size: SizeType<'small' | 'medium' | 'large'>;
8
+ disabled?: boolean | undefined;
9
+ }) => string;
4
10
  //# sourceMappingURL=styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/ButtonSplit/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;sCAGxB,KAAK;AAAlC,wBAuDI"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/ButtonSplit/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGtD,eAAO,MAAM,4BAA4B;;YAUxC,CAAA;AAWD,eAAO,MAAM,0BAA0B;;UAM/B,SAAS,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;;YAS7C,CAAA"}
@@ -1,51 +1,14 @@
1
- import { createStyles } from '@material-ui/core/styles';
2
- export default ({ palette }) => createStyles({
3
- actionButton: {
4
- borderTopRightRadius: 0,
5
- borderBottomRightRadius: 0,
6
- },
7
- menuButton: {
8
- minWidth: '2em',
9
- paddingLeft: '0.5em',
10
- paddingRight: '0.5em',
11
- borderTopLeftRadius: 0,
12
- borderBottomLeftRadius: 0,
13
- marginLeft: 0,
14
- },
15
- primaryVariant: {
16
- '&$actionButton': {
17
- borderRight: `1px solid ${palette.blue.darker}`,
18
- },
19
- '&$menuButton': {
20
- borderLeft: `1px solid ${palette.blue.darker}`,
21
- '&$disabled': {
22
- borderLeftColor: palette.grey.main,
23
- },
24
- },
25
- },
26
- smallSize: {
27
- minWidth: '1.5em',
28
- paddingLeft: '0.25em',
29
- paddingRight: '0.25em',
30
- },
31
- mediumSize: {},
32
- largeSize: {
33
- minWidth: '3em',
34
- paddingLeft: '0.75em',
35
- paddingRight: '0.75em',
36
- },
37
- dropdown: {
38
- display: 'block',
39
- cursor: 'pointer',
40
- },
41
- disabled: {
42
- // override dropdown anchor styles
43
- '& > div': {
44
- cursor: 'auto',
45
- },
46
- },
47
- rotated: {
48
- transform: 'rotate(180deg)',
49
- },
50
- });
1
+ import { twMerge } from 'tailwind-merge';
2
+ export const createActionButtonClassNames = ({ variant, }) => {
3
+ return twMerge('transition-[color,background]', variant === 'primary' &&
4
+ 'border-r border-l-0 border-y-0 border-solid border-blue-700');
5
+ };
6
+ const menuButtonSizeClassNames = {
7
+ small: 'min-w-[1.5em] px-[0.25em]',
8
+ medium: 'min-w-[2em] px-[0.5em]',
9
+ large: 'min-w-[3em] px-[0.75em]',
10
+ };
11
+ export const createMenuButtonClassNames = ({ variant, size, disabled, }) => {
12
+ return twMerge(menuButtonSizeClassNames[size], variant === 'primary' && 'border-l border-r-0 border-y-0 border-solid', variant === 'primary' && disabled && 'border-gray-500', variant === 'primary' && !disabled && 'border-blue-700');
13
+ };
51
14
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ButtonSplit/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,eAAe,CAAC,EAAE,OAAO,EAAS,EAAE,EAAE,CACpC,YAAY,CAAC;IACX,YAAY,EAAE;QACZ,oBAAoB,EAAE,CAAC;QACvB,uBAAuB,EAAE,CAAC;KAC3B;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,OAAO;QACpB,YAAY,EAAE,OAAO;QACrB,mBAAmB,EAAE,CAAC;QACtB,sBAAsB,EAAE,CAAC;QACzB,UAAU,EAAE,CAAC;KACd;IAED,cAAc,EAAE;QACd,gBAAgB,EAAE;YAChB,WAAW,EAAE,aAAa,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;SAChD;QACD,cAAc,EAAE;YACd,UAAU,EAAE,aAAa,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;YAE9C,YAAY,EAAE;gBACZ,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;aACnC;SACF;KACF;IAED,SAAS,EAAE;QACT,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,QAAQ;KACvB;IACD,UAAU,EAAE,EAAE;IACd,SAAS,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,QAAQ;QACrB,YAAY,EAAE,QAAQ;KACvB;IAED,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,SAAS;KAClB;IAED,QAAQ,EAAE;QACR,kCAAkC;QAClC,SAAS,EAAE;YACT,MAAM,EAAE,MAAM;SACf;KACF;IAED,OAAO,EAAE;QACP,SAAS,EAAE,gBAAgB;KAC5B;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ButtonSplit/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAC3C,OAAO,GAGR,EAAE,EAAE;IACH,OAAO,OAAO,CACZ,+BAA+B,EAC/B,OAAO,KAAK,SAAS;QACnB,6DAA6D,CAChE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,wBAAwB,GAG1B;IACF,KAAK,EAAE,2BAA2B;IAClC,MAAM,EAAE,wBAAwB;IAChC,KAAK,EAAE,yBAAyB;CACjC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,OAAO,EACP,IAAI,EACJ,QAAQ,GAKT,EAAE,EAAE;IACH,OAAO,OAAO,CACZ,wBAAwB,CAAC,IAAI,CAAC,EAC9B,OAAO,KAAK,SAAS,IAAI,6CAA6C,EACtE,OAAO,KAAK,SAAS,IAAI,QAAQ,IAAI,iBAAiB,EACtD,OAAO,KAAK,SAAS,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CACxD,CAAA;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-button",
3
- "version": "1.0.13",
3
+ "version": "2.0.0",
4
4
  "description": "Toptal UI components library - Button",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,17 +22,19 @@
22
22
  },
23
23
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
24
24
  "dependencies": {
25
- "@toptal/picasso-checkbox": "2.0.0",
26
- "@toptal/picasso-container": "1.0.2",
27
- "@toptal/picasso-dropdown": "2.0.1",
28
- "@toptal/picasso-icons": "1.1.0",
29
- "@toptal/picasso-loader": "1.0.2",
30
- "@toptal/picasso-radio": "2.0.0",
31
- "@toptal/picasso-shared": "14.0.1",
32
- "@toptal/picasso-utils": "1.0.2",
33
- "@toptal/picasso-link": "1.0.2",
25
+ "@toptal/picasso-checkbox": "2.0.1",
26
+ "@toptal/picasso-container": "1.0.3",
27
+ "@toptal/picasso-dropdown": "2.0.2",
28
+ "@toptal/picasso-icons": "1.1.1",
29
+ "@toptal/picasso-loader": "1.0.3",
30
+ "@toptal/picasso-radio": "2.0.1",
31
+ "@toptal/picasso-shared": "15.0.0",
32
+ "@toptal/picasso-utils": "1.0.3",
33
+ "@toptal/picasso-link": "1.0.3",
34
34
  "ap-style-title-case": "^1.1.2",
35
- "classnames": "^2.5.1"
35
+ "@mui/base": "5.0.0-beta.40",
36
+ "classnames": "^2.5.1",
37
+ "tailwind-merge": "^2.2.2"
36
38
  },
37
39
  "sideEffects": [
38
40
  "**/styles.ts",
@@ -40,15 +42,17 @@
40
42
  ],
41
43
  "peerDependencies": {
42
44
  "@material-ui/core": "4.12.4",
45
+ "@toptal/picasso-tailwind": "^2.5.0",
43
46
  "@toptal/picasso-provider": "*",
44
- "react": ">=16.12.0 < 19.0.0"
47
+ "react": ">=16.12.0 < 19.0.0",
48
+ "tailwindcss": ">=3"
45
49
  },
46
50
  "exports": {
47
51
  ".": "./dist-package/src/index.js"
48
52
  },
49
53
  "devDependencies": {
50
54
  "@toptal/picasso-provider": "4.2.1",
51
- "@toptal/picasso-test-utils": "1.1.0"
55
+ "@toptal/picasso-test-utils": "1.1.1"
52
56
  },
53
57
  "files": [
54
58
  "dist-package/**",
@@ -1,33 +1,30 @@
1
1
  import type { ReactNode, ReactElement, MouseEvent, ElementType } from 'react'
2
2
  import React, { forwardRef } from 'react'
3
3
  import cx from 'classnames'
4
+ import { twMerge } from 'tailwind-merge'
4
5
  import type {
5
6
  StandardProps,
6
7
  SizeType,
7
8
  ButtonOrAnchorProps,
8
9
  OverridableComponent,
9
10
  TextLabelProps,
10
- Classes,
11
11
  } from '@toptal/picasso-shared'
12
- import { useTitleCase } from '@toptal/picasso-shared'
13
- import type { Theme } from '@material-ui/core'
14
- import { makeStyles, ButtonBase } from '@material-ui/core'
15
- import { Loader } from '@toptal/picasso-loader'
16
- import { Container } from '@toptal/picasso-container'
17
- import { noop, toTitleCase } from '@toptal/picasso-utils'
12
+ import { noop } from '@toptal/picasso-utils'
18
13
  // we need to ensure the correct order of styles import
19
14
  // TODO: [FX-4614] To be removed when Link component is migrated to tailwind
20
15
  import { Link } from '@toptal/picasso-link'
21
16
 
22
- import styles from './styles'
17
+ import { ButtonBase } from '../ButtonBase'
18
+ import {
19
+ createVariantClassNames,
20
+ createCoreClassNames,
21
+ createSizeClassNames,
22
+ createIconClassNames,
23
+ } from './styles'
23
24
 
24
25
  // HACK: This statement is only used to prevent webpack from tree shaking the import
25
26
  void Link
26
27
 
27
- const useStyles = makeStyles<Theme, Props>(styles, {
28
- name: 'PicassoButton',
29
- })
30
-
31
28
  export type VariantType =
32
29
  | 'primary'
33
30
  | 'negative'
@@ -73,31 +70,28 @@ export interface Props
73
70
  type?: 'button' | 'reset' | 'submit'
74
71
  }
75
72
 
76
- const getClickHandler = (loading?: boolean, handler?: Props['onClick']) =>
77
- loading ? noop : handler
78
-
79
- const getIcon = (
80
- classes: Classes,
81
- children: ReactNode,
82
- icon?: ReactElement,
73
+ const getIcon = ({
74
+ children,
75
+ icon,
76
+ iconPosition,
77
+ size,
78
+ }: {
79
+ children: ReactNode
80
+ icon?: ReactElement
83
81
  iconPosition?: IconPositionType
84
- ) => {
82
+ size: SizeType<'small' | 'medium' | 'large'>
83
+ }) => {
85
84
  if (!icon) {
86
- return null
85
+ return undefined
87
86
  }
88
87
 
89
- const {
90
- icon: iconClass,
91
- iconLeft: iconLeftClass,
92
- iconRight: iconRightClass,
93
- } = classes
88
+ const iconClassNames = createIconClassNames({
89
+ size,
90
+ iconPosition: children && iconPosition ? iconPosition : undefined,
91
+ })
94
92
 
95
93
  return React.cloneElement(icon, {
96
- className: cx(iconClass, icon.props.className, {
97
- [iconLeftClass]: children && iconPosition === 'left',
98
- [iconRightClass]: children && iconPosition === 'right',
99
- }),
100
- key: 'button-icon',
94
+ className: twMerge(iconClassNames, icon.props.className),
101
95
  })
102
96
  }
103
97
 
@@ -109,9 +103,7 @@ export const Button: OverridableComponent<Props> = forwardRef<
109
103
  icon,
110
104
  iconPosition,
111
105
  loading,
112
- children,
113
106
  className,
114
- style,
115
107
  fullWidth,
116
108
  variant = 'primary',
117
109
  size = 'medium',
@@ -119,86 +111,63 @@ export const Button: OverridableComponent<Props> = forwardRef<
119
111
  hovered,
120
112
  disabled,
121
113
  active,
122
- onClick,
123
- title,
124
- value,
125
- type,
126
- as = 'button',
127
- titleCase: propsTitleCase,
128
114
  ...rest
129
115
  } = props
130
- const classes = useStyles(props)
131
116
 
132
- const {
133
- root: rootClass,
134
- hidden: hiddenClass,
135
- loader: loaderClass,
136
- content: contentClass,
137
- } = classes
138
-
139
- const titleCase = useTitleCase(propsTitleCase)
140
-
141
- const finalChildren = [titleCase ? toTitleCase(children) : children]
142
-
143
- if (icon) {
144
- const iconComponent = getIcon(classes, children, icon, iconPosition)
117
+ const iconComponent = getIcon({
118
+ children: rest.children,
119
+ icon,
120
+ iconPosition,
121
+ size,
122
+ })
123
+ const coreClassNames = createCoreClassNames({
124
+ disabled,
125
+ focused,
126
+ hovered,
127
+ active,
128
+ })
129
+ const variantClassNames = createVariantClassNames(variant, {
130
+ disabled,
131
+ focused,
132
+ hovered,
133
+ active,
134
+ })
135
+ const sizeClassNames = createSizeClassNames(size)
136
+
137
+ const finalClassName = twMerge(
138
+ coreClassNames,
139
+ variantClassNames,
140
+ sizeClassNames,
141
+ fullWidth ? 'w-full' : '',
142
+ className
143
+ )
145
144
 
146
- if (iconPosition === 'left') {
147
- finalChildren.unshift(iconComponent)
148
- } else {
149
- finalChildren.push(iconComponent)
150
- }
145
+ const contentSizeClassNames: Record<
146
+ SizeType<'small' | 'medium' | 'large'>,
147
+ string[]
148
+ > = {
149
+ small: ['text-button-small'],
150
+ medium: ['text-button-medium'],
151
+ large: ['text-button-large'],
151
152
  }
152
153
 
153
- const variantClassName = classes[variant]
154
- const sizeClassName = classes[size]
155
-
156
- const rootClassName = cx(
157
- {
158
- [classes.fullWidth]: fullWidth,
159
- [classes.active]: active,
160
- [classes.focused]: focused,
161
- [classes.hovered]: hovered,
162
- [classes.disabled]: disabled,
163
- },
164
- sizeClassName,
165
- variantClassName,
166
- rootClass
154
+ const contentClassName = cx(
155
+ 'font-semibold whitespace-nowrap',
156
+ contentSizeClassNames[size],
157
+ loading ? 'opacity-0' : ''
167
158
  )
168
159
 
169
160
  return (
170
161
  <ButtonBase
171
162
  {...rest}
172
163
  ref={ref}
173
- classes={{
174
- root: rootClassName,
175
- focusVisible: cx(classes.focusVisible),
176
- }}
177
- onClick={getClickHandler(loading, onClick)}
178
- className={className}
179
- style={style}
164
+ className={finalClassName}
165
+ contentClassName={contentClassName}
166
+ icon={iconComponent}
167
+ iconPosition={iconPosition}
168
+ loading={loading}
180
169
  disabled={disabled}
181
- title={title}
182
- value={value}
183
- type={type}
184
- component={as}
185
- data-component-type='button'
186
- >
187
- <Container
188
- as='span'
189
- inline
190
- flex
191
- direction='row'
192
- alignItems='center'
193
- className={cx({ [hiddenClass]: loading }, contentClass)}
194
- >
195
- {finalChildren}
196
- </Container>
197
-
198
- {loading && (
199
- <Loader variant='inherit' className={loaderClass} inline size='small' />
200
- )}
201
- </ButtonBase>
170
+ />
202
171
  )
203
172
  })
204
173
 
@@ -7,13 +7,15 @@ exports[`Button disabled button as link renders disabled version 1`] = `
7
7
  >
8
8
  <a
9
9
  aria-disabled="true"
10
- class="MuiTypography-root MuiLink-root MuiLink-underlineHover PicassoLink-root MuiButtonBase-root PicassoButton-disabled PicassoButton-medium PicassoButton-primary PicassoButton-root Mui-disabled PicassoLink-blue MuiTypography-colorPrimary"
10
+ class="MuiTypography-root MuiLink-root MuiLink-underlineHover PicassoLink-root base-Button base- text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [&+&]:ml-4 cursor-default pointer-events no-underline rounded-sm shadow-none border-none text-white visited:text-white bg-gray min-w h-8 py-0 px-4 PicassoLink-blue MuiTypography-colorPrimary"
11
11
  data-component-type="button"
12
+ href="URL"
12
13
  role="button"
13
14
  tabindex="-1"
15
+ type="button"
14
16
  >
15
17
  <span
16
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
18
+ class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline font-semibold whitespace-nowrap text-button"
17
19
  >
18
20
  Click me!
19
21
  </span>
@@ -28,14 +30,16 @@ exports[`Button disabled button renders disabled version 1`] = `
28
30
  class="Picasso-root"
29
31
  >
30
32
  <button
31
- class="MuiButtonBase-root PicassoButton-disabled PicassoButton-medium PicassoButton-primary PicassoButton-root Mui-disabled"
33
+ aria-disabled="true"
34
+ class="base-Button base- text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [&+&]:ml-4 cursor-default pointer-events no-underline rounded-sm shadow-none border-none text-white visited:text-white bg-gray min-w h-8 py-0 px-4"
32
35
  data-component-type="button"
33
36
  disabled=""
37
+ role="button"
34
38
  tabindex="-1"
35
39
  type="button"
36
40
  >
37
41
  <span
38
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
42
+ class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline font-semibold whitespace-nowrap text-button"
39
43
  >
40
44
  Click me!
41
45
  </span>