@toptal/picasso-button 1.0.13-alpha-fx-5263-merge-feature-branch-d124b1f9a.10 → 1.0.13-alpha-fx-4593-migrate-tag-4f7c872c8.4

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 +47 -39
  3. package/dist-package/src/Button/Button.js.map +1 -1
  4. package/dist-package/src/Button/styles.d.ts +45 -19
  5. package/dist-package/src/Button/styles.d.ts.map +1 -1
  6. package/dist-package/src/Button/styles.js +178 -161
  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 +28 -20
  10. package/dist-package/src/ButtonAction/ButtonAction.js.map +1 -1
  11. package/dist-package/src/ButtonAction/styles.d.ts +3 -11
  12. package/dist-package/src/ButtonAction/styles.d.ts.map +1 -1
  13. package/dist-package/src/ButtonAction/styles.js +55 -36
  14. package/dist-package/src/ButtonAction/styles.js.map +1 -1
  15. package/dist-package/src/ButtonCircular/ButtonCircular.d.ts.map +1 -1
  16. package/dist-package/src/ButtonCircular/ButtonCircular.js +26 -12
  17. package/dist-package/src/ButtonCircular/ButtonCircular.js.map +1 -1
  18. package/dist-package/src/ButtonCircular/styles.d.ts +3 -15
  19. package/dist-package/src/ButtonCircular/styles.d.ts.map +1 -1
  20. package/dist-package/src/ButtonCircular/styles.js +57 -92
  21. package/dist-package/src/ButtonCircular/styles.js.map +1 -1
  22. package/dist-package/src/ButtonCompound/index.d.ts +1 -1
  23. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.d.ts.map +1 -1
  24. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js +13 -4
  25. package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js.map +1 -1
  26. package/dist-package/src/ButtonControlLabel/styles.d.ts +2 -2
  27. package/dist-package/src/ButtonControlLabel/styles.d.ts.map +1 -1
  28. package/dist-package/src/ButtonControlLabel/styles.js +25 -16
  29. package/dist-package/src/ButtonControlLabel/styles.js.map +1 -1
  30. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts +1 -1
  31. package/dist-package/src/ButtonGroup/ButtonGroup.d.ts.map +1 -1
  32. package/dist-package/src/ButtonGroup/ButtonGroup.js +27 -5
  33. package/dist-package/src/ButtonGroup/ButtonGroup.js.map +1 -1
  34. package/dist-package/src/ButtonGroup/styles.d.ts +2 -1
  35. package/dist-package/src/ButtonGroup/styles.d.ts.map +1 -1
  36. package/dist-package/src/ButtonGroup/styles.js +47 -20
  37. package/dist-package/src/ButtonGroup/styles.js.map +1 -1
  38. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts +1 -1
  39. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts.map +1 -1
  40. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js +12 -17
  41. package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js.map +1 -1
  42. package/dist-package/src/ButtonGroupItem/styles.d.ts +3 -13
  43. package/dist-package/src/ButtonGroupItem/styles.d.ts.map +1 -1
  44. package/dist-package/src/ButtonGroupItem/styles.js +17 -39
  45. package/dist-package/src/ButtonGroupItem/styles.js.map +1 -1
  46. package/dist-package/src/ButtonSplit/ButtonSplit.d.ts.map +1 -1
  47. package/dist-package/src/ButtonSplit/ButtonSplit.js +24 -28
  48. package/dist-package/src/ButtonSplit/ButtonSplit.js.map +1 -1
  49. package/dist-package/src/ButtonSplit/styles.d.ts +3 -9
  50. package/dist-package/src/ButtonSplit/styles.d.ts.map +1 -1
  51. package/dist-package/src/ButtonSplit/styles.js +50 -13
  52. package/dist-package/src/ButtonSplit/styles.js.map +1 -1
  53. package/package.json +15 -19
  54. package/src/Button/Button.tsx +100 -69
  55. package/src/Button/__snapshots__/test.tsx.snap +4 -8
  56. package/src/Button/styles.ts +221 -214
  57. package/src/Button/test.tsx +1 -3
  58. package/src/ButtonAction/ButtonAction.tsx +48 -36
  59. package/src/ButtonAction/styles.ts +57 -57
  60. package/src/ButtonCheckbox/__snapshots__/test.tsx.snap +3 -4
  61. package/src/ButtonCircular/ButtonCircular.tsx +37 -22
  62. package/src/ButtonCircular/styles.ts +75 -127
  63. package/src/ButtonControlLabel/ButtonControlLabel.tsx +16 -7
  64. package/src/ButtonControlLabel/styles.ts +26 -30
  65. package/src/ButtonGroup/ButtonGroup.tsx +44 -9
  66. package/src/ButtonGroup/__snapshots__/test.tsx.snap +7 -13
  67. package/src/ButtonGroup/styles.ts +63 -21
  68. package/src/ButtonGroupItem/ButtonGroupItem.tsx +15 -24
  69. package/src/ButtonGroupItem/styles.ts +28 -62
  70. package/src/ButtonRadio/__snapshots__/test.tsx.snap +3 -4
  71. package/src/ButtonSplit/ButtonSplit.tsx +42 -46
  72. package/src/ButtonSplit/__snapshots__/test.tsx.snap +9 -13
  73. package/src/ButtonSplit/styles.ts +56 -37
  74. package/dist-package/src/ButtonBase/ButtonBase.d.ts +0 -29
  75. package/dist-package/src/ButtonBase/ButtonBase.d.ts.map +0 -1
  76. package/dist-package/src/ButtonBase/ButtonBase.js +0 -78
  77. package/dist-package/src/ButtonBase/ButtonBase.js.map +0 -1
  78. package/dist-package/src/ButtonBase/index.d.ts +0 -5
  79. package/dist-package/src/ButtonBase/index.d.ts.map +0 -1
  80. package/dist-package/src/ButtonBase/index.js +0 -2
  81. package/dist-package/src/ButtonBase/index.js.map +0 -1
  82. package/dist-package/src/ButtonBase/styles.d.ts +0 -6
  83. package/dist-package/src/ButtonBase/styles.d.ts.map +0 -1
  84. package/dist-package/src/ButtonBase/styles.js +0 -29
  85. package/dist-package/src/ButtonBase/styles.js.map +0 -1
  86. package/src/ButtonBase/ButtonBase.tsx +0 -182
  87. package/src/ButtonBase/__snapshots__/test.tsx.snap +0 -262
  88. package/src/ButtonBase/index.ts +0 -5
  89. package/src/ButtonBase/styles.ts +0 -36
  90. package/src/ButtonBase/test.tsx +0 -212
@@ -1,29 +0,0 @@
1
- import type { ReactNode, ReactElement, MouseEvent, ElementType } from 'react';
2
- import type { StandardProps, ButtonOrAnchorProps, OverridableComponent, TextLabelProps } from '@toptal/picasso-shared';
3
- export declare type IconPositionType = 'left' | 'right';
4
- export interface Props extends StandardProps, TextLabelProps, ButtonOrAnchorProps {
5
- as?: ElementType;
6
- /** Disables button */
7
- disabled?: boolean;
8
- /** Content of Button component */
9
- children?: ReactNode;
10
- /** ClassName for the content */
11
- contentClassName?: string;
12
- /** Add an `<Icon />` along Button's children */
13
- icon?: ReactElement;
14
- /** Icon can be positioned on the left or right */
15
- iconPosition?: IconPositionType;
16
- /** Shows a loading indicator and disables click events */
17
- loading?: boolean;
18
- /** Callback invoked when component is clicked */
19
- onClick?: (event: MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => void;
20
- /** HTML Value of Button component */
21
- value?: string | number;
22
- /** HTML title of Button component */
23
- title?: string;
24
- /** HTML type of Button component */
25
- type?: 'button' | 'reset' | 'submit';
26
- }
27
- export declare const ButtonBase: OverridableComponent<Props>;
28
- export default ButtonBase;
29
- //# sourceMappingURL=ButtonBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ButtonBase.d.ts","sourceRoot":"","sources":["../../../src/ButtonBase/ButtonBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACf,MAAM,wBAAwB,CAAA;AAS/B,oBAAY,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/C,MAAM,WAAW,KACf,SAAQ,aAAa,EACnB,cAAc,EACd,mBAAmB;IACrB,EAAE,CAAC,EAAE,WAAW,CAAA;IAChB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,kDAAkD;IAClD,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,IAAI,CAAA;IAC5E,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oCAAoC;IACpC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;CACrC;AAyBD,eAAO,MAAM,UAAU,EAAE,oBAAoB,CAAC,KAAK,CA4FjD,CAAA;AAcF,eAAe,UAAU,CAAA"}
@@ -1,78 +0,0 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import React, { forwardRef } from 'react';
13
- import { twMerge } from 'tailwind-merge';
14
- import { useTitleCase } from '@toptal/picasso-shared';
15
- import { Button as MUIButtonBase } from '@mui/base/Button';
16
- import { Loader } from '@toptal/picasso-loader';
17
- import { Container } from '@toptal/picasso-container';
18
- import { noop, toTitleCase } from '@toptal/picasso-utils';
19
- import { createCoreClassNames } from './styles';
20
- const getClickHandler = (loading, handler) => loading ? noop : handler;
21
- const getIcon = ({ icon }) => {
22
- if (!icon) {
23
- return null;
24
- }
25
- return React.cloneElement(icon, {
26
- className: twMerge('text-[1.2em] flex-1', icon.props.className),
27
- key: 'button-icon',
28
- });
29
- };
30
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
- const isReactComponent = (component) => {
32
- return (component &&
33
- (component.$$typeof === Symbol.for('react.forward_ref') ||
34
- typeof component === 'function'));
35
- };
36
- export const ButtonBase = forwardRef(function ButtonBase(props, ref) {
37
- var _a, _b;
38
- const { icon, iconPosition, loading, children, className, contentClassName, style, disabled, onClick, title, value, type, as = 'button', titleCase: propsTitleCase } = props, rest = __rest(props, ["icon", "iconPosition", "loading", "children", "className", "contentClassName", "style", "disabled", "onClick", "title", "value", "type", "as", "titleCase"]);
39
- let RootElement = as;
40
- if (isReactComponent(RootElement)) {
41
- RootElement = forwardRef(
42
- // We don't need to pass ownerState to the root component
43
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
- (_a, rootRef) => {
45
- var { ownerState } = _a, restProps = __rest(_a, ["ownerState"]);
46
- const Root = as;
47
- return React.createElement(Root, Object.assign({ ref: rootRef }, restProps));
48
- });
49
- }
50
- const titleCase = useTitleCase(propsTitleCase);
51
- const finalChildren = [titleCase ? toTitleCase(children) : children];
52
- const rootElementName = as !== 'button' && ('href' in props || 'to' in props) ? 'a' : undefined;
53
- if (icon) {
54
- const iconComponent = getIcon({ icon });
55
- if (iconPosition === 'left') {
56
- finalChildren.unshift(iconComponent);
57
- }
58
- else {
59
- finalChildren.push(iconComponent);
60
- }
61
- }
62
- const finalClassName = twMerge(createCoreClassNames({ disabled }), className);
63
- return (React.createElement(MUIButtonBase, Object.assign({}, rest, { ref: ref, onClick: getClickHandler(loading, onClick), className: finalClassName, style: style, "aria-disabled": disabled, disabled: disabled, title: title, value: value, type: type, "data-component-type": 'button', tabIndex: ((_a = rest.tabIndex) !== null && _a !== void 0 ? _a : disabled) ? -1 : 0, role: (_b = rest.role) !== null && _b !== void 0 ? _b : 'button', rootElementName: rootElementName, slots: { root: RootElement } }),
64
- React.createElement(Container, { as: 'span', inline: true, flex: true, direction: 'row', alignItems: 'center', className: contentClassName }, finalChildren),
65
- loading && (React.createElement(Loader, { variant: 'inherit', className: 'absolute top-1/2 left-1/2 translate-x-[-50%] translate-y-[-50%]', inline: true, size: 'small' }))));
66
- });
67
- ButtonBase.defaultProps = {
68
- as: 'button',
69
- children: null,
70
- disabled: false,
71
- iconPosition: 'left',
72
- loading: false,
73
- onClick: noop,
74
- type: 'button',
75
- };
76
- ButtonBase.displayName = 'ButtonBase';
77
- export default ButtonBase;
78
- //# sourceMappingURL=ButtonBase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ButtonBase.js","sourceRoot":"","sources":["../../../src/ButtonBase/ButtonBase.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { Props } from './ButtonBase';
2
- export { default as ButtonBase } from './ButtonBase';
3
- export type { IconPositionType } from './ButtonBase';
4
- export declare type ButtonBaseProps = Props;
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ButtonBase/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,oBAAY,eAAe,GAAG,KAAK,CAAA"}
@@ -1,2 +0,0 @@
1
- export { default as ButtonBase } from './ButtonBase';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ButtonBase/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA"}
@@ -1,6 +0,0 @@
1
- export declare const createCoreClassNames: ({ disabled, loading, }: {
2
- disabled?: boolean | undefined;
3
- focused?: boolean | undefined;
4
- loading?: boolean | undefined;
5
- }) => string[];
6
- //# sourceMappingURL=styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/ButtonBase/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;MAO7B,MAAM,EA4BT,CAAA"}
@@ -1,29 +0,0 @@
1
- export const createCoreClassNames = ({ disabled, loading, }) => {
2
- const classNames = [
3
- 'text-lg',
4
- 'inline-flex',
5
- 'items-center',
6
- 'justify-center',
7
- 'select-none',
8
- 'appearance-none',
9
- 'm-0',
10
- 'relative',
11
- 'normal-case',
12
- 'align-middle',
13
- 'transition-colors',
14
- 'duration-350',
15
- 'ease-out',
16
- 'shrink-0',
17
- 'outline-none',
18
- '[&+&]:ml-4',
19
- ];
20
- if (!disabled && !loading) {
21
- classNames.push('cursor-pointer');
22
- }
23
- else {
24
- classNames.push('cursor-default');
25
- classNames.push('pointer-events-none');
26
- }
27
- return classNames;
28
- };
29
- //# sourceMappingURL=styles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/ButtonBase/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,QAAQ,EACR,OAAO,GAKR,EAAY,EAAE;IACb,MAAM,UAAU,GAAG;QACjB,SAAS;QACT,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,aAAa;QACb,iBAAiB;QACjB,KAAK;QACL,UAAU;QACV,aAAa;QACb,cAAc;QACd,mBAAmB;QACnB,cAAc;QACd,UAAU;QACV,UAAU;QACV,cAAc;QACd,YAAY;KACb,CAAA;IAED,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QACzB,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;KAClC;SAAM;QACL,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACjC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;KACvC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
@@ -1,182 +0,0 @@
1
- import type {
2
- ReactNode,
3
- ReactElement,
4
- MouseEvent,
5
- ElementType,
6
- FC,
7
- } from 'react'
8
- import React, { forwardRef } from 'react'
9
- import { twMerge } from 'tailwind-merge'
10
- import type {
11
- StandardProps,
12
- ButtonOrAnchorProps,
13
- OverridableComponent,
14
- TextLabelProps,
15
- } from '@toptal/picasso-shared'
16
- import { useTitleCase } from '@toptal/picasso-shared'
17
- import { Button as MUIButtonBase } from '@mui/base/Button'
18
- import { Loader } from '@toptal/picasso-loader'
19
- import { Container } from '@toptal/picasso-container'
20
- import { noop, toTitleCase } from '@toptal/picasso-utils'
21
-
22
- import { createCoreClassNames } from './styles'
23
-
24
- export type IconPositionType = 'left' | 'right'
25
-
26
- export interface Props
27
- extends StandardProps,
28
- TextLabelProps,
29
- ButtonOrAnchorProps {
30
- as?: ElementType
31
- /** Disables button */
32
- disabled?: boolean
33
- /** Content of Button component */
34
- children?: ReactNode
35
- /** ClassName for the content */
36
- contentClassName?: string
37
- /** Add an `<Icon />` along Button's children */
38
- icon?: ReactElement
39
- /** Icon can be positioned on the left or right */
40
- iconPosition?: IconPositionType
41
- /** Shows a loading indicator and disables click events */
42
- loading?: boolean
43
- /** Callback invoked when component is clicked */
44
- onClick?: (event: MouseEvent<HTMLButtonElement & HTMLAnchorElement>) => void
45
- /** HTML Value of Button component */
46
- value?: string | number
47
- /** HTML title of Button component */
48
- title?: string
49
- /** HTML type of Button component */
50
- type?: 'button' | 'reset' | 'submit'
51
- }
52
-
53
- const getClickHandler = (loading?: boolean, handler?: Props['onClick']) =>
54
- loading ? noop : handler
55
-
56
- const getIcon = ({ icon }: { icon?: ReactElement }) => {
57
- if (!icon) {
58
- return null
59
- }
60
-
61
- return React.cloneElement(icon, {
62
- className: twMerge('text-[1.2em] flex-1', icon.props.className),
63
- key: 'button-icon',
64
- })
65
- }
66
-
67
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
- const isReactComponent = (component: any) => {
69
- return (
70
- component &&
71
- (component.$$typeof === Symbol.for('react.forward_ref') ||
72
- typeof component === 'function')
73
- )
74
- }
75
-
76
- export const ButtonBase: OverridableComponent<Props> = forwardRef<
77
- HTMLButtonElement,
78
- Props
79
- >(function ButtonBase(props, ref) {
80
- const {
81
- icon,
82
- iconPosition,
83
- loading,
84
- children,
85
- className,
86
- contentClassName,
87
- style,
88
- disabled,
89
- onClick,
90
- title,
91
- value,
92
- type,
93
- as = 'button',
94
- titleCase: propsTitleCase,
95
- ...rest
96
- } = props
97
-
98
- let RootElement: ElementType | FC = as
99
-
100
- if (isReactComponent(RootElement)) {
101
- RootElement = forwardRef(
102
- // We don't need to pass ownerState to the root component
103
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
104
- ({ ownerState, ...restProps }: { ownerState: object }, rootRef) => {
105
- const Root = as
106
-
107
- return <Root ref={rootRef} {...restProps} />
108
- }
109
- )
110
- }
111
-
112
- const titleCase = useTitleCase(propsTitleCase)
113
- const finalChildren = [titleCase ? toTitleCase(children) : children]
114
- const rootElementName =
115
- as !== 'button' && ('href' in props || 'to' in props) ? 'a' : undefined
116
-
117
- if (icon) {
118
- const iconComponent = getIcon({ icon })
119
-
120
- if (iconPosition === 'left') {
121
- finalChildren.unshift(iconComponent)
122
- } else {
123
- finalChildren.push(iconComponent)
124
- }
125
- }
126
-
127
- const finalClassName = twMerge(createCoreClassNames({ disabled }), className)
128
-
129
- return (
130
- <MUIButtonBase
131
- {...rest}
132
- ref={ref}
133
- onClick={getClickHandler(loading, onClick)}
134
- className={finalClassName}
135
- style={style}
136
- aria-disabled={disabled}
137
- disabled={disabled}
138
- title={title}
139
- value={value}
140
- type={type}
141
- data-component-type='button'
142
- tabIndex={rest.tabIndex ?? disabled ? -1 : 0}
143
- role={rest.role ?? 'button'}
144
- rootElementName={rootElementName}
145
- slots={{ root: RootElement }}
146
- >
147
- <Container
148
- as='span'
149
- inline
150
- flex
151
- direction='row'
152
- alignItems='center'
153
- className={contentClassName}
154
- >
155
- {finalChildren}
156
- </Container>
157
-
158
- {loading && (
159
- <Loader
160
- variant='inherit'
161
- className='absolute top-1/2 left-1/2 translate-x-[-50%] translate-y-[-50%]'
162
- inline
163
- size='small'
164
- />
165
- )}
166
- </MUIButtonBase>
167
- )
168
- })
169
-
170
- ButtonBase.defaultProps = {
171
- as: 'button',
172
- children: null,
173
- disabled: false,
174
- iconPosition: 'left',
175
- loading: false,
176
- onClick: noop,
177
- type: 'button',
178
- }
179
-
180
- ButtonBase.displayName = 'ButtonBase'
181
-
182
- export default ButtonBase
@@ -1,262 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ButtonBase when "as" prop is passed when "as" prop does not equal "button" when "href" prop is passed renders Button as a link 1`] = `
4
- <div>
5
- <div
6
- class="Picasso-root"
7
- >
8
- <span
9
- aria-disabled="false"
10
- class="base-Button 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-pointer"
11
- data-component-type="button"
12
- href="/"
13
- role="button"
14
- tabindex="0"
15
- type="button"
16
- >
17
- <span
18
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
19
- >
20
- Click me!
21
- </span>
22
- </span>
23
- </div>
24
- </div>
25
- `;
26
-
27
- exports[`ButtonBase when "as" prop is passed when "as" prop does not equal "button" when "to" prop is passed renders Button as a link 1`] = `
28
- <div>
29
- <div
30
- class="Picasso-root"
31
- >
32
- <span
33
- aria-disabled="false"
34
- class="base-Button 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-pointer"
35
- data-component-type="button"
36
- role="button"
37
- tabindex="0"
38
- to="/"
39
- type="button"
40
- >
41
- <span
42
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
43
- >
44
- Click me!
45
- </span>
46
- </span>
47
- </div>
48
- </div>
49
- `;
50
-
51
- exports[`ButtonBase when "as" prop is passed when "as" prop equals "Link" component renders Button as a 1`] = `
52
- <div>
53
- <div
54
- class="Picasso-root"
55
- >
56
- <a
57
- aria-disabled="false"
58
- class="MuiTypography-root MuiLink-root MuiLink-underlineHover PicassoLink-root base-Button 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-pointer PicassoLink-blue MuiTypography-colorPrimary"
59
- data-component-type="button"
60
- href="URL"
61
- role="button"
62
- tabindex="0"
63
- type="button"
64
- >
65
- <span
66
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
67
- >
68
- Click me!
69
- </span>
70
- </a>
71
- </div>
72
- </div>
73
- `;
74
-
75
- exports[`ButtonBase when "as" prop is passed when "as" prop equals "Link" component when "disabled" prop is true renders Button as a and does not trigger onClick handler 1`] = `
76
- <div>
77
- <div
78
- class="Picasso-root"
79
- >
80
- <a
81
- aria-disabled="true"
82
- 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 PicassoLink-blue MuiTypography-colorPrimary"
83
- data-component-type="button"
84
- href="URL"
85
- role="button"
86
- tabindex="-1"
87
- type="button"
88
- >
89
- <span
90
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
91
- >
92
- Click me!
93
- </span>
94
- </a>
95
- </div>
96
- </div>
97
- `;
98
-
99
- exports[`ButtonBase when "as" prop is passed when "as" prop equals "a" renders Button as a 1`] = `
100
- <div>
101
- <div
102
- class="Picasso-root"
103
- >
104
- <a
105
- aria-disabled="false"
106
- class="base-Button 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-pointer"
107
- data-component-type="button"
108
- href="/"
109
- role="button"
110
- tabindex="0"
111
- type="button"
112
- >
113
- <span
114
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
115
- >
116
- Click me!
117
- </span>
118
- </a>
119
- </div>
120
- </div>
121
- `;
122
-
123
- exports[`ButtonBase when "disabled" prop is false renders Button and does not trigger onClick handler 1`] = `
124
- <div>
125
- <div
126
- class="Picasso-root"
127
- >
128
- <button
129
- aria-disabled="false"
130
- class="base-Button 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-pointer"
131
- data-component-type="button"
132
- role="button"
133
- tabindex="0"
134
- type="button"
135
- >
136
- <span
137
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
138
- >
139
- Click me!
140
- </span>
141
- </button>
142
- </div>
143
- </div>
144
- `;
145
-
146
- exports[`ButtonBase when "disabled" prop is true renders Button and does not trigger onClick handler 1`] = `
147
- <div>
148
- <div
149
- class="Picasso-root"
150
- >
151
- <button
152
- aria-disabled="true"
153
- 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"
154
- data-component-type="button"
155
- disabled=""
156
- role="button"
157
- tabindex="-1"
158
- type="button"
159
- >
160
- <span
161
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
162
- >
163
- Click me!
164
- </span>
165
- </button>
166
- </div>
167
- </div>
168
- `;
169
-
170
- exports[`ButtonBase when "loading" prop is true renders Button with loading state and does not trigger onClick handler 1`] = `
171
- <div>
172
- <div
173
- class="Picasso-root"
174
- >
175
- <button
176
- aria-disabled="false"
177
- class="base-Button 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-pointer"
178
- data-component-type="button"
179
- role="button"
180
- tabindex="0"
181
- type="button"
182
- >
183
- <span
184
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
185
- >
186
- Click me!
187
- </span>
188
- <div
189
- class="PicassoLoader-root absolute top-1/2 left-1/2 translate-x-[ translate-y-[ PicassoLoader-inline"
190
- >
191
- <div
192
- aria-valuenow="35"
193
- class="MuiCircularProgress-root PicassoCircularProgress-root PicassoLoader-spinnerInherit MuiCircularProgress-colorPrimary MuiCircularProgress-determinate"
194
- role="progressbar"
195
- style="width: 16px; height: 16px; transform: rotate(-90deg);"
196
- >
197
- <svg
198
- class="MuiCircularProgress-svg"
199
- viewBox="22 22 44 44"
200
- >
201
- <circle
202
- class="MuiCircularProgress-circle MuiCircularProgress-circleDeterminate"
203
- cx="44"
204
- cy="44"
205
- fill="none"
206
- r="20.2"
207
- stroke-width="3.6"
208
- style="stroke-dasharray: 126.920; stroke-dashoffset: 82.498px;"
209
- />
210
- </svg>
211
- </div>
212
- </div>
213
- </button>
214
- </div>
215
- </div>
216
- `;
217
-
218
- exports[`ButtonBase when "role" prop is passed renders Button with a custom role 1`] = `
219
- <div>
220
- <div
221
- class="Picasso-root"
222
- >
223
- <button
224
- aria-disabled="false"
225
- class="base-Button 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-pointer"
226
- data-component-type="button"
227
- role="custom"
228
- tabindex="0"
229
- type="button"
230
- >
231
- <span
232
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
233
- >
234
- Click me!
235
- </span>
236
- </button>
237
- </div>
238
- </div>
239
- `;
240
-
241
- exports[`ButtonBase when "titleCase" prop is true renders Button with transformed text to title case 1`] = `
242
- <div>
243
- <div
244
- class="Picasso-root"
245
- >
246
- <button
247
- aria-disabled="false"
248
- class="base-Button 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-pointer"
249
- data-component-type="button"
250
- role="button"
251
- tabindex="0"
252
- type="button"
253
- >
254
- <span
255
- class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline"
256
- >
257
- __TITLE_CASE__Test bk9
258
- </span>
259
- </button>
260
- </div>
261
- </div>
262
- `;
@@ -1,5 +0,0 @@
1
- import type { Props } from './ButtonBase'
2
-
3
- export { default as ButtonBase } from './ButtonBase'
4
- export type { IconPositionType } from './ButtonBase'
5
- export type ButtonBaseProps = Props
@@ -1,36 +0,0 @@
1
- export const createCoreClassNames = ({
2
- disabled,
3
- loading,
4
- }: {
5
- disabled?: boolean
6
- focused?: boolean
7
- loading?: boolean
8
- }): string[] => {
9
- const classNames = [
10
- 'text-lg',
11
- 'inline-flex',
12
- 'items-center',
13
- 'justify-center',
14
- 'select-none',
15
- 'appearance-none',
16
- 'm-0',
17
- 'relative',
18
- 'normal-case',
19
- 'align-middle',
20
- 'transition-colors',
21
- 'duration-350',
22
- 'ease-out',
23
- 'shrink-0',
24
- 'outline-none',
25
- '[&+&]:ml-4',
26
- ]
27
-
28
- if (!disabled && !loading) {
29
- classNames.push('cursor-pointer')
30
- } else {
31
- classNames.push('cursor-default')
32
- classNames.push('pointer-events-none')
33
- }
34
-
35
- return classNames
36
- }