@toptal/picasso-button 1.0.10-alpha-feature-migrate-buttons-6d6012711.21 → 1.0.10-alpha-FX-5195-fix-button-css-precedence-708c2336c.20
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 +0 -1
- package/dist-package/src/Button/Button.d.ts.map +1 -1
- package/dist-package/src/Button/Button.js +48 -42
- 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 +16 -19
- package/src/Button/Button.tsx +104 -70
- 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,32 @@
|
|
|
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
|
+
/* eslint-disable unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars */
|
|
21
|
+
import { Link } from '@toptal/picasso-link'
|
|
22
|
+
import { Typography } from '@toptal/picasso-typography'
|
|
23
|
+
/* eslint-enable */
|
|
16
24
|
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
createIconClassNames,
|
|
23
|
-
} from './styles'
|
|
25
|
+
import styles from './styles'
|
|
26
|
+
|
|
27
|
+
const useStyles = makeStyles<Theme, Props>(styles, {
|
|
28
|
+
name: 'PicassoButton',
|
|
29
|
+
})
|
|
24
30
|
|
|
25
31
|
export type VariantType =
|
|
26
32
|
| 'primary'
|
|
@@ -67,28 +73,31 @@ export interface Props
|
|
|
67
73
|
type?: 'button' | 'reset' | 'submit'
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
icon?: ReactElement
|
|
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,
|
|
78
83
|
iconPosition?: IconPositionType
|
|
79
|
-
|
|
80
|
-
}) => {
|
|
84
|
+
) => {
|
|
81
85
|
if (!icon) {
|
|
82
|
-
return
|
|
86
|
+
return null
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
const {
|
|
90
|
+
icon: iconClass,
|
|
91
|
+
iconLeft: iconLeftClass,
|
|
92
|
+
iconRight: iconRightClass,
|
|
93
|
+
} = classes
|
|
89
94
|
|
|
90
95
|
return React.cloneElement(icon, {
|
|
91
|
-
className:
|
|
96
|
+
className: cx(iconClass, icon.props.className, {
|
|
97
|
+
[iconLeftClass]: children && iconPosition === 'left',
|
|
98
|
+
[iconRightClass]: children && iconPosition === 'right',
|
|
99
|
+
}),
|
|
100
|
+
key: 'button-icon',
|
|
92
101
|
})
|
|
93
102
|
}
|
|
94
103
|
|
|
@@ -100,7 +109,9 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
100
109
|
icon,
|
|
101
110
|
iconPosition,
|
|
102
111
|
loading,
|
|
112
|
+
children,
|
|
103
113
|
className,
|
|
114
|
+
style,
|
|
104
115
|
fullWidth,
|
|
105
116
|
variant = 'primary',
|
|
106
117
|
size = 'medium',
|
|
@@ -108,63 +119,86 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
108
119
|
hovered,
|
|
109
120
|
disabled,
|
|
110
121
|
active,
|
|
122
|
+
onClick,
|
|
123
|
+
title,
|
|
124
|
+
value,
|
|
125
|
+
type,
|
|
126
|
+
as = 'button',
|
|
127
|
+
titleCase: propsTitleCase,
|
|
111
128
|
...rest
|
|
112
129
|
} = props
|
|
130
|
+
const classes = useStyles(props)
|
|
113
131
|
|
|
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
|
-
)
|
|
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)
|
|
141
145
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
medium: ['text-button-medium'],
|
|
148
|
-
large: ['text-button-large'],
|
|
146
|
+
if (iconPosition === 'left') {
|
|
147
|
+
finalChildren.unshift(iconComponent)
|
|
148
|
+
} else {
|
|
149
|
+
finalChildren.push(iconComponent)
|
|
150
|
+
}
|
|
149
151
|
}
|
|
150
152
|
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
|
155
167
|
)
|
|
156
168
|
|
|
157
169
|
return (
|
|
158
170
|
<ButtonBase
|
|
159
171
|
{...rest}
|
|
160
172
|
ref={ref}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
classes={{
|
|
174
|
+
root: rootClassName,
|
|
175
|
+
focusVisible: cx(classes.focusVisible),
|
|
176
|
+
}}
|
|
177
|
+
onClick={getClickHandler(loading, onClick)}
|
|
178
|
+
className={className}
|
|
179
|
+
style={style}
|
|
166
180
|
disabled={disabled}
|
|
167
|
-
|
|
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>
|
|
168
202
|
)
|
|
169
203
|
})
|
|
170
204
|
|
|
@@ -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>
|