@toptal/picasso-button 1.0.10-alpha-feature-migrate-buttons-d11d10471.27 → 1.0.10-alpha-FX-5195-fix-button-css-precedence-cf39d169d.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-package/src/Button/Button.d.ts.map +1 -1
- package/dist-package/src/Button/Button.js +47 -39
- package/dist-package/src/Button/Button.js.map +1 -1
- package/dist-package/src/Button/styles.d.ts +45 -19
- package/dist-package/src/Button/styles.d.ts.map +1 -1
- package/dist-package/src/Button/styles.js +178 -160
- package/dist-package/src/Button/styles.js.map +1 -1
- package/dist-package/src/ButtonAction/ButtonAction.d.ts.map +1 -1
- package/dist-package/src/ButtonAction/ButtonAction.js +28 -20
- package/dist-package/src/ButtonAction/ButtonAction.js.map +1 -1
- package/dist-package/src/ButtonAction/styles.d.ts +3 -11
- package/dist-package/src/ButtonAction/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonAction/styles.js +55 -36
- package/dist-package/src/ButtonAction/styles.js.map +1 -1
- package/dist-package/src/ButtonCircular/ButtonCircular.d.ts.map +1 -1
- package/dist-package/src/ButtonCircular/ButtonCircular.js +26 -12
- package/dist-package/src/ButtonCircular/ButtonCircular.js.map +1 -1
- package/dist-package/src/ButtonCircular/styles.d.ts +3 -15
- package/dist-package/src/ButtonCircular/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonCircular/styles.js +57 -92
- package/dist-package/src/ButtonCircular/styles.js.map +1 -1
- package/dist-package/src/ButtonCompound/index.d.ts +1 -1
- package/dist-package/src/ButtonControlLabel/styles.d.ts +1 -1
- package/dist-package/src/ButtonGroup/ButtonGroup.d.ts +1 -1
- package/dist-package/src/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist-package/src/ButtonGroup/ButtonGroup.js +27 -5
- package/dist-package/src/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist-package/src/ButtonGroup/styles.d.ts +2 -1
- package/dist-package/src/ButtonGroup/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonGroup/styles.js +47 -20
- package/dist-package/src/ButtonGroup/styles.js.map +1 -1
- package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts +1 -1
- package/dist-package/src/ButtonGroupItem/ButtonGroupItem.d.ts.map +1 -1
- package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js +12 -17
- package/dist-package/src/ButtonGroupItem/ButtonGroupItem.js.map +1 -1
- package/dist-package/src/ButtonGroupItem/styles.d.ts +3 -13
- package/dist-package/src/ButtonGroupItem/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonGroupItem/styles.js +17 -39
- package/dist-package/src/ButtonGroupItem/styles.js.map +1 -1
- package/dist-package/src/ButtonSplit/ButtonSplit.d.ts.map +1 -1
- package/dist-package/src/ButtonSplit/ButtonSplit.js +24 -28
- package/dist-package/src/ButtonSplit/ButtonSplit.js.map +1 -1
- package/dist-package/src/ButtonSplit/styles.d.ts +3 -9
- package/dist-package/src/ButtonSplit/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonSplit/styles.js +50 -13
- package/dist-package/src/ButtonSplit/styles.js.map +1 -1
- package/package.json +15 -19
- package/src/Button/Button.tsx +100 -69
- package/src/Button/__snapshots__/test.tsx.snap +5 -6
- package/src/Button/styles.ts +221 -213
- package/src/Button/test.tsx +1 -3
- package/src/ButtonAction/ButtonAction.tsx +48 -36
- package/src/ButtonAction/styles.ts +57 -57
- package/src/ButtonCheckbox/__snapshots__/test.tsx.snap +3 -3
- package/src/ButtonCircular/ButtonCircular.tsx +37 -22
- package/src/ButtonCircular/styles.ts +75 -127
- package/src/ButtonGroup/ButtonGroup.tsx +44 -9
- package/src/ButtonGroup/__snapshots__/test.tsx.snap +7 -7
- package/src/ButtonGroup/styles.ts +63 -21
- package/src/ButtonGroupItem/ButtonGroupItem.tsx +15 -24
- package/src/ButtonGroupItem/styles.ts +28 -62
- package/src/ButtonRadio/__snapshots__/test.tsx.snap +3 -3
- package/src/ButtonSplit/ButtonSplit.tsx +42 -46
- package/src/ButtonSplit/__snapshots__/test.tsx.snap +9 -9
- package/src/ButtonSplit/styles.ts +56 -37
- package/dist-package/src/ButtonBase/ButtonBase.d.ts +0 -29
- package/dist-package/src/ButtonBase/ButtonBase.d.ts.map +0 -1
- package/dist-package/src/ButtonBase/ButtonBase.js +0 -78
- package/dist-package/src/ButtonBase/ButtonBase.js.map +0 -1
- package/dist-package/src/ButtonBase/index.d.ts +0 -5
- package/dist-package/src/ButtonBase/index.d.ts.map +0 -1
- package/dist-package/src/ButtonBase/index.js +0 -2
- package/dist-package/src/ButtonBase/index.js.map +0 -1
- package/dist-package/src/ButtonBase/styles.d.ts +0 -6
- package/dist-package/src/ButtonBase/styles.d.ts.map +0 -1
- package/dist-package/src/ButtonBase/styles.js +0 -29
- package/dist-package/src/ButtonBase/styles.js.map +0 -1
- package/src/ButtonBase/ButtonBase.tsx +0 -182
- package/src/ButtonBase/index.ts +0 -5
- package/src/ButtonBase/styles.ts +0 -36
package/src/Button/Button.tsx
CHANGED
|
@@ -1,26 +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'
|
|
5
4
|
import type {
|
|
6
5
|
StandardProps,
|
|
7
6
|
SizeType,
|
|
8
7
|
ButtonOrAnchorProps,
|
|
9
8
|
OverridableComponent,
|
|
10
9
|
TextLabelProps,
|
|
10
|
+
Classes,
|
|
11
11
|
} from '@toptal/picasso-shared'
|
|
12
|
-
import {
|
|
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'
|
|
13
18
|
// we need to ensure the correct order of styles import
|
|
14
19
|
// @TODO: to be removed when the component is migrated in FX-4614
|
|
15
20
|
import '@toptal/picasso-link'
|
|
16
21
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
createIconClassNames,
|
|
23
|
-
} from './styles'
|
|
22
|
+
import styles from './styles'
|
|
23
|
+
|
|
24
|
+
const useStyles = makeStyles<Theme, Props>(styles, {
|
|
25
|
+
name: 'PicassoButton',
|
|
26
|
+
})
|
|
24
27
|
|
|
25
28
|
export type VariantType =
|
|
26
29
|
| 'primary'
|
|
@@ -67,28 +70,31 @@ export interface Props
|
|
|
67
70
|
type?: 'button' | 'reset' | 'submit'
|
|
68
71
|
}
|
|
69
72
|
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
icon?: ReactElement
|
|
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,
|
|
78
80
|
iconPosition?: IconPositionType
|
|
79
|
-
|
|
80
|
-
}) => {
|
|
81
|
+
) => {
|
|
81
82
|
if (!icon) {
|
|
82
|
-
return
|
|
83
|
+
return null
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
const {
|
|
87
|
+
icon: iconClass,
|
|
88
|
+
iconLeft: iconLeftClass,
|
|
89
|
+
iconRight: iconRightClass,
|
|
90
|
+
} = classes
|
|
89
91
|
|
|
90
92
|
return React.cloneElement(icon, {
|
|
91
|
-
className:
|
|
93
|
+
className: cx(iconClass, icon.props.className, {
|
|
94
|
+
[iconLeftClass]: children && iconPosition === 'left',
|
|
95
|
+
[iconRightClass]: children && iconPosition === 'right',
|
|
96
|
+
}),
|
|
97
|
+
key: 'button-icon',
|
|
92
98
|
})
|
|
93
99
|
}
|
|
94
100
|
|
|
@@ -100,7 +106,9 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
100
106
|
icon,
|
|
101
107
|
iconPosition,
|
|
102
108
|
loading,
|
|
109
|
+
children,
|
|
103
110
|
className,
|
|
111
|
+
style,
|
|
104
112
|
fullWidth,
|
|
105
113
|
variant = 'primary',
|
|
106
114
|
size = 'medium',
|
|
@@ -108,63 +116,86 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
108
116
|
hovered,
|
|
109
117
|
disabled,
|
|
110
118
|
active,
|
|
119
|
+
onClick,
|
|
120
|
+
title,
|
|
121
|
+
value,
|
|
122
|
+
type,
|
|
123
|
+
as = 'button',
|
|
124
|
+
titleCase: propsTitleCase,
|
|
111
125
|
...rest
|
|
112
126
|
} = props
|
|
127
|
+
const classes = useStyles(props)
|
|
113
128
|
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
disabled,
|
|
128
|
-
focused,
|
|
129
|
-
hovered,
|
|
130
|
-
active,
|
|
131
|
-
})
|
|
132
|
-
const sizeClassNames = createSizeClassNames(size)
|
|
133
|
-
|
|
134
|
-
const finalClassName = twMerge(
|
|
135
|
-
coreClassNames,
|
|
136
|
-
variantClassNames,
|
|
137
|
-
sizeClassNames,
|
|
138
|
-
fullWidth ? 'w-full' : '',
|
|
139
|
-
className
|
|
140
|
-
)
|
|
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
|
+
|
|
140
|
+
if (icon) {
|
|
141
|
+
const iconComponent = getIcon(classes, children, icon, iconPosition)
|
|
141
142
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
medium: ['text-button-medium'],
|
|
148
|
-
large: ['text-button-large'],
|
|
143
|
+
if (iconPosition === 'left') {
|
|
144
|
+
finalChildren.unshift(iconComponent)
|
|
145
|
+
} else {
|
|
146
|
+
finalChildren.push(iconComponent)
|
|
147
|
+
}
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
|
155
164
|
)
|
|
156
165
|
|
|
157
166
|
return (
|
|
158
167
|
<ButtonBase
|
|
159
168
|
{...rest}
|
|
160
169
|
ref={ref}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
170
|
+
classes={{
|
|
171
|
+
root: rootClassName,
|
|
172
|
+
focusVisible: cx(classes.focusVisible),
|
|
173
|
+
}}
|
|
174
|
+
onClick={getClickHandler(loading, onClick)}
|
|
175
|
+
className={className}
|
|
176
|
+
style={style}
|
|
166
177
|
disabled={disabled}
|
|
167
|
-
|
|
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>
|
|
168
199
|
)
|
|
169
200
|
})
|
|
170
201
|
|
|
@@ -7,14 +7,13 @@ 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
|
|
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"
|
|
11
11
|
data-component-type="button"
|
|
12
|
-
|
|
12
|
+
role="button"
|
|
13
13
|
tabindex="-1"
|
|
14
|
-
type="button"
|
|
15
14
|
>
|
|
16
15
|
<span
|
|
17
|
-
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline
|
|
16
|
+
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
|
|
18
17
|
>
|
|
19
18
|
Click me!
|
|
20
19
|
</span>
|
|
@@ -29,14 +28,14 @@ exports[`Button disabled button renders disabled version 1`] = `
|
|
|
29
28
|
class="Picasso-root"
|
|
30
29
|
>
|
|
31
30
|
<button
|
|
32
|
-
class="
|
|
31
|
+
class="MuiButtonBase-root PicassoButton-disabled PicassoButton-medium PicassoButton-primary PicassoButton-root Mui-disabled"
|
|
33
32
|
data-component-type="button"
|
|
34
33
|
disabled=""
|
|
35
34
|
tabindex="-1"
|
|
36
35
|
type="button"
|
|
37
36
|
>
|
|
38
37
|
<span
|
|
39
|
-
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline
|
|
38
|
+
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
|
|
40
39
|
>
|
|
41
40
|
Click me!
|
|
42
41
|
</span>
|