@toptal/picasso-button 1.0.10-alpha-fx-4594-migrate-griditem-ed2d15f1b.27 → 1.0.10-alpha-feature-tw-snackbar-6db9f2db9.17

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 (91) hide show
  1. package/dist-package/src/Button/Button.d.ts +0 -1
  2. package/dist-package/src/Button/Button.d.ts.map +1 -1
  3. package/dist-package/src/Button/Button.js +43 -49
  4. package/dist-package/src/Button/Button.js.map +1 -1
  5. package/dist-package/src/Button/styles.d.ts +19 -45
  6. package/dist-package/src/Button/styles.d.ts.map +1 -1
  7. package/dist-package/src/Button/styles.js +161 -178
  8. package/dist-package/src/Button/styles.js.map +1 -1
  9. package/dist-package/src/ButtonAction/ButtonAction.d.ts.map +1 -1
  10. package/dist-package/src/ButtonAction/ButtonAction.js +20 -28
  11. package/dist-package/src/ButtonAction/ButtonAction.js.map +1 -1
  12. package/dist-package/src/ButtonAction/styles.d.ts +11 -3
  13. package/dist-package/src/ButtonAction/styles.d.ts.map +1 -1
  14. package/dist-package/src/ButtonAction/styles.js +36 -55
  15. package/dist-package/src/ButtonAction/styles.js.map +1 -1
  16. package/dist-package/src/ButtonBase/ButtonBase.d.ts +29 -0
  17. package/dist-package/src/ButtonBase/ButtonBase.d.ts.map +1 -0
  18. package/dist-package/src/ButtonBase/ButtonBase.js +82 -0
  19. package/dist-package/src/ButtonBase/ButtonBase.js.map +1 -0
  20. package/dist-package/src/ButtonBase/index.d.ts +5 -0
  21. package/dist-package/src/ButtonBase/index.d.ts.map +1 -0
  22. package/dist-package/src/ButtonBase/index.js +2 -0
  23. package/dist-package/src/ButtonBase/index.js.map +1 -0
  24. package/dist-package/src/ButtonBase/styles.d.ts +6 -0
  25. package/dist-package/src/ButtonBase/styles.d.ts.map +1 -0
  26. package/dist-package/src/ButtonBase/styles.js +29 -0
  27. package/dist-package/src/ButtonBase/styles.js.map +1 -0
  28. package/dist-package/src/ButtonCircular/ButtonCircular.d.ts.map +1 -1
  29. package/dist-package/src/ButtonCircular/ButtonCircular.js +12 -26
  30. package/dist-package/src/ButtonCircular/ButtonCircular.js.map +1 -1
  31. package/dist-package/src/ButtonCircular/styles.d.ts +15 -3
  32. package/dist-package/src/ButtonCircular/styles.d.ts.map +1 -1
  33. package/dist-package/src/ButtonCircular/styles.js +92 -57
  34. package/dist-package/src/ButtonCircular/styles.js.map +1 -1
  35. package/dist-package/src/ButtonCompound/index.d.ts +1 -1
  36. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.d.ts.map +1 -1
  37. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js +4 -13
  38. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js.map +1 -1
  39. package/dist-package/src/ButtonControlLabel/styles.d.ts +2 -2
  40. package/dist-package/src/ButtonControlLabel/styles.d.ts.map +1 -1
  41. package/dist-package/src/ButtonControlLabel/styles.js +16 -25
  42. package/dist-package/src/ButtonControlLabel/styles.js.map +1 -1
  43. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts +1 -1
  44. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  45. package/dist-package/src/ButtonGroup/ButtonGroup.js +5 -27
  46. package/dist-package/src/ButtonGroup/ButtonGroup.js.map +1 -1
  47. package/dist-package/src/ButtonGroup/styles.d.ts +1 -2
  48. package/dist-package/src/ButtonGroup/styles.d.ts.map +1 -1
  49. package/dist-package/src/ButtonGroup/styles.js +20 -47
  50. package/dist-package/src/ButtonGroup/styles.js.map +1 -1
  51. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts +1 -1
  52. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts.map +1 -1
  53. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js +17 -12
  54. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js.map +1 -1
  55. package/dist-package/src/ButtonGroupItem/styles.d.ts +13 -3
  56. package/dist-package/src/ButtonGroupItem/styles.d.ts.map +1 -1
  57. package/dist-package/src/ButtonGroupItem/styles.js +39 -17
  58. package/dist-package/src/ButtonGroupItem/styles.js.map +1 -1
  59. package/dist-package/src/ButtonSplit/ButtonSplit.d.ts.map +1 -1
  60. package/dist-package/src/ButtonSplit/ButtonSplit.js +28 -24
  61. package/dist-package/src/ButtonSplit/ButtonSplit.js.map +1 -1
  62. package/dist-package/src/ButtonSplit/styles.d.ts +9 -3
  63. package/dist-package/src/ButtonSplit/styles.d.ts.map +1 -1
  64. package/dist-package/src/ButtonSplit/styles.js +13 -50
  65. package/dist-package/src/ButtonSplit/styles.js.map +1 -1
  66. package/package.json +17 -15
  67. package/src/Button/Button.tsx +73 -101
  68. package/src/Button/__snapshots__/test.tsx.snap +8 -4
  69. package/src/Button/styles.ts +214 -221
  70. package/src/Button/test.tsx +3 -1
  71. package/src/ButtonAction/ButtonAction.tsx +36 -48
  72. package/src/ButtonAction/styles.ts +57 -57
  73. package/src/ButtonBase/ButtonBase.tsx +186 -0
  74. package/src/ButtonBase/__snapshots__/test.tsx.snap +286 -0
  75. package/src/ButtonBase/index.ts +5 -0
  76. package/src/ButtonBase/styles.ts +36 -0
  77. package/src/ButtonBase/test.tsx +230 -0
  78. package/src/ButtonCheckbox/__snapshots__/test.tsx.snap +4 -3
  79. package/src/ButtonCircular/ButtonCircular.tsx +22 -37
  80. package/src/ButtonCircular/styles.ts +127 -75
  81. package/src/ButtonControlLabel/ButtonControlLabel.tsx +7 -16
  82. package/src/ButtonControlLabel/styles.ts +30 -26
  83. package/src/ButtonGroup/ButtonGroup.tsx +9 -44
  84. package/src/ButtonGroup/__snapshots__/test.tsx.snap +13 -7
  85. package/src/ButtonGroup/styles.ts +21 -63
  86. package/src/ButtonGroupItem/ButtonGroupItem.tsx +24 -15
  87. package/src/ButtonGroupItem/styles.ts +62 -28
  88. package/src/ButtonRadio/__snapshots__/test.tsx.snap +4 -3
  89. package/src/ButtonSplit/ButtonSplit.tsx +46 -42
  90. package/src/ButtonSplit/__snapshots__/test.tsx.snap +13 -9
  91. 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.10-alpha-fx-4594-migrate-griditem-ed2d15f1b.27+ed2d15f1b",
3
+ "version": "1.0.10-alpha-feature-tw-snackbar-6db9f2db9.17+6db9f2db9",
4
4
  "description": "Toptal UI components library - Button",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,38 +22,40 @@
22
22
  },
23
23
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
24
24
  "dependencies": {
25
- "@toptal/picasso-checkbox": "1.0.7-alpha-fx-4594-migrate-griditem-ed2d15f1b.35+ed2d15f1b",
26
- "@toptal/picasso-container": "1.0.3-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
27
- "@toptal/picasso-dropdown": "2.0.1-alpha-fx-4594-migrate-griditem-ed2d15f1b.38+ed2d15f1b",
28
- "@toptal/picasso-icons": "1.0.3-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
29
- "@toptal/picasso-link": "1.0.3-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
30
- "@toptal/picasso-loader": "1.0.3-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
31
- "@toptal/picasso-radio": "1.0.7-alpha-fx-4594-migrate-griditem-ed2d15f1b.35+ed2d15f1b",
32
- "@toptal/picasso-shared": "14.0.2-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
33
- "@toptal/picasso-utils": "1.0.3-alpha-fx-4594-migrate-griditem-ed2d15f1b.64+ed2d15f1b",
25
+ "@mui/base": "5.0.0-beta.40",
26
+ "@toptal/picasso-checkbox": "1.0.7-alpha-feature-tw-snackbar-6db9f2db9.25+6db9f2db9",
27
+ "@toptal/picasso-container": "1.0.3-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
28
+ "@toptal/picasso-dropdown": "2.0.1-alpha-feature-tw-snackbar-6db9f2db9.28+6db9f2db9",
29
+ "@toptal/picasso-icons": "1.0.3-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
30
+ "@toptal/picasso-link": "1.0.3-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
31
+ "@toptal/picasso-loader": "1.0.3-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
32
+ "@toptal/picasso-radio": "1.0.7-alpha-feature-tw-snackbar-6db9f2db9.25+6db9f2db9",
33
+ "@toptal/picasso-shared": "14.0.2-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
34
+ "@toptal/picasso-utils": "1.0.3-alpha-feature-tw-snackbar-6db9f2db9.54+6db9f2db9",
34
35
  "ap-style-title-case": "^1.1.2",
35
- "classnames": "^2.5.1"
36
+ "classnames": "^2.5.1",
37
+ "tailwind-merge": "^2.2.2"
36
38
  },
37
39
  "sideEffects": [
38
40
  "**/styles.ts",
39
41
  "**/styles.js"
40
42
  ],
41
43
  "peerDependencies": {
42
- "@material-ui/core": "4.12.4",
43
44
  "@toptal/picasso-provider": "*",
45
+ "@toptal/picasso-tailwind": ">=2.5.0",
44
46
  "react": ">=16.12.0 < 19.0.0"
45
47
  },
46
48
  "exports": {
47
49
  ".": "./dist-package/src/index.js"
48
50
  },
49
51
  "devDependencies": {
50
- "@toptal/picasso-provider": "4.2.1-alpha-fx-4594-migrate-griditem-ed2d15f1b.35+ed2d15f1b",
51
- "@toptal/picasso-test-utils": "1.1.1-alpha-fx-4594-migrate-griditem-ed2d15f1b.56+ed2d15f1b"
52
+ "@toptal/picasso-provider": "4.2.1-alpha-feature-tw-snackbar-6db9f2db9.25+6db9f2db9",
53
+ "@toptal/picasso-test-utils": "1.1.1-alpha-feature-tw-snackbar-6db9f2db9.46+6db9f2db9"
52
54
  },
53
55
  "files": [
54
56
  "dist-package/**",
55
57
  "!dist-package/tsconfig.tsbuildinfo",
56
58
  "src"
57
59
  ],
58
- "gitHead": "ed2d15f1b86c331b6a0c02a29980ceecb8664433"
60
+ "gitHead": "6db9f2db95067775f723c4c62c59948813dd5f15"
59
61
  }
@@ -1,29 +1,29 @@
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
- // @TODO: to be removed when the component is migrated in FX-4614
20
- import '@toptal/picasso-link'
14
+ // TODO: [FX-4614] To be removed when Link component is migrated to tailwind
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
- const useStyles = makeStyles<Theme, Props>(styles, {
25
- name: 'PicassoButton',
26
- })
25
+ // HACK: This statement is only used to prevent webpack from tree shaking the import
26
+ void Link
27
27
 
28
28
  export type VariantType =
29
29
  | 'primary'
@@ -70,31 +70,28 @@ export interface Props
70
70
  type?: 'button' | 'reset' | 'submit'
71
71
  }
72
72
 
73
- const getClickHandler = (loading?: boolean, handler?: Props['onClick']) =>
74
- loading ? noop : handler
75
-
76
- const getIcon = (
77
- classes: Classes,
78
- children: ReactNode,
79
- icon?: ReactElement,
73
+ const getIcon = ({
74
+ children,
75
+ icon,
76
+ iconPosition,
77
+ size,
78
+ }: {
79
+ children: ReactNode
80
+ icon?: ReactElement
80
81
  iconPosition?: IconPositionType
81
- ) => {
82
+ size: SizeType<'small' | 'medium' | 'large'>
83
+ }) => {
82
84
  if (!icon) {
83
- return null
85
+ return undefined
84
86
  }
85
87
 
86
- const {
87
- icon: iconClass,
88
- iconLeft: iconLeftClass,
89
- iconRight: iconRightClass,
90
- } = classes
88
+ const iconClassNames = createIconClassNames({
89
+ size,
90
+ iconPosition: children && iconPosition ? iconPosition : undefined,
91
+ })
91
92
 
92
93
  return React.cloneElement(icon, {
93
- className: cx(iconClass, icon.props.className, {
94
- [iconLeftClass]: children && iconPosition === 'left',
95
- [iconRightClass]: children && iconPosition === 'right',
96
- }),
97
- key: 'button-icon',
94
+ className: twMerge(iconClassNames, icon.props.className),
98
95
  })
99
96
  }
100
97
 
@@ -106,9 +103,7 @@ export const Button: OverridableComponent<Props> = forwardRef<
106
103
  icon,
107
104
  iconPosition,
108
105
  loading,
109
- children,
110
106
  className,
111
- style,
112
107
  fullWidth,
113
108
  variant = 'primary',
114
109
  size = 'medium',
@@ -116,86 +111,63 @@ export const Button: OverridableComponent<Props> = forwardRef<
116
111
  hovered,
117
112
  disabled,
118
113
  active,
119
- onClick,
120
- title,
121
- value,
122
- type,
123
- as = 'button',
124
- titleCase: propsTitleCase,
125
114
  ...rest
126
115
  } = props
127
- const classes = useStyles(props)
128
-
129
- const {
130
- root: rootClass,
131
- hidden: hiddenClass,
132
- loader: loaderClass,
133
- content: contentClass,
134
- } = classes
135
-
136
- const titleCase = useTitleCase(propsTitleCase)
137
-
138
- const finalChildren = [titleCase ? toTitleCase(children) : children]
139
116
 
140
- if (icon) {
141
- 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
+ )
142
144
 
143
- if (iconPosition === 'left') {
144
- finalChildren.unshift(iconComponent)
145
- } else {
146
- finalChildren.push(iconComponent)
147
- }
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'],
148
152
  }
149
153
 
150
- const variantClassName = classes[variant]
151
- const sizeClassName = classes[size]
152
-
153
- const rootClassName = cx(
154
- {
155
- [classes.fullWidth]: fullWidth,
156
- [classes.active]: active,
157
- [classes.focused]: focused,
158
- [classes.hovered]: hovered,
159
- [classes.disabled]: disabled,
160
- },
161
- sizeClassName,
162
- variantClassName,
163
- rootClass
154
+ const contentClassName = cx(
155
+ 'font-semibold whitespace-nowrap',
156
+ contentSizeClassNames[size],
157
+ loading ? 'opacity-0' : ''
164
158
  )
165
159
 
166
160
  return (
167
161
  <ButtonBase
168
162
  {...rest}
169
163
  ref={ref}
170
- classes={{
171
- root: rootClassName,
172
- focusVisible: cx(classes.focusVisible),
173
- }}
174
- onClick={getClickHandler(loading, onClick)}
175
- className={className}
176
- style={style}
164
+ className={finalClassName}
165
+ contentClassName={contentClassName}
166
+ icon={iconComponent}
167
+ iconPosition={iconPosition}
168
+ loading={loading}
177
169
  disabled={disabled}
178
- title={title}
179
- value={value}
180
- type={type}
181
- component={as}
182
- data-component-type='button'
183
- >
184
- <Container
185
- as='span'
186
- inline
187
- flex
188
- direction='row'
189
- alignItems='center'
190
- className={cx({ [hiddenClass]: loading }, contentClass)}
191
- >
192
- {finalChildren}
193
- </Container>
194
-
195
- {loading && (
196
- <Loader variant='inherit' className={loaderClass} inline size='small' />
197
- )}
198
- </ButtonBase>
170
+ />
199
171
  )
200
172
  })
201
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>