@toptal/picasso-button 1.0.13-alpha-fx-5263-merge-feature-branch-d124b1f9a.10 → 1.0.13-alpha-fx-4594-migrate-griditem-4e798b92d.27
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 -161
- 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/ButtonControlLabel.d.ts.map +1 -1
- package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js +13 -4
- package/dist-package/src/ButtonControlLabel/ButtonControlLabel.js.map +1 -1
- package/dist-package/src/ButtonControlLabel/styles.d.ts +2 -2
- package/dist-package/src/ButtonControlLabel/styles.d.ts.map +1 -1
- package/dist-package/src/ButtonControlLabel/styles.js +25 -16
- package/dist-package/src/ButtonControlLabel/styles.js.map +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 +4 -8
- package/src/Button/styles.ts +221 -214
- 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 -4
- package/src/ButtonCircular/ButtonCircular.tsx +37 -22
- package/src/ButtonCircular/styles.ts +75 -127
- package/src/ButtonControlLabel/ButtonControlLabel.tsx +16 -7
- package/src/ButtonControlLabel/styles.ts +26 -30
- package/src/ButtonGroup/ButtonGroup.tsx +44 -9
- package/src/ButtonGroup/__snapshots__/test.tsx.snap +7 -13
- 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 -4
- package/src/ButtonSplit/ButtonSplit.tsx +42 -46
- package/src/ButtonSplit/__snapshots__/test.tsx.snap +9 -13
- 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/__snapshots__/test.tsx.snap +0 -262
- package/src/ButtonBase/index.ts +0 -5
- package/src/ButtonBase/styles.ts +0 -36
- package/src/ButtonBase/test.tsx +0 -212
package/src/Button/Button.tsx
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
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: [FX-4614] To be removed when Link component is migrated to tailwind
|
|
15
20
|
import { Link } from '@toptal/picasso-link'
|
|
16
21
|
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
createVariantClassNames,
|
|
20
|
-
createCoreClassNames,
|
|
21
|
-
createSizeClassNames,
|
|
22
|
-
createIconClassNames,
|
|
23
|
-
} from './styles'
|
|
22
|
+
import styles from './styles'
|
|
24
23
|
|
|
25
24
|
// HACK: This statement is only used to prevent webpack from tree shaking the import
|
|
26
25
|
void Link
|
|
27
26
|
|
|
27
|
+
const useStyles = makeStyles<Theme, Props>(styles, {
|
|
28
|
+
name: 'PicassoButton',
|
|
29
|
+
})
|
|
30
|
+
|
|
28
31
|
export type VariantType =
|
|
29
32
|
| 'primary'
|
|
30
33
|
| 'negative'
|
|
@@ -70,28 +73,31 @@ export interface Props
|
|
|
70
73
|
type?: 'button' | 'reset' | 'submit'
|
|
71
74
|
}
|
|
72
75
|
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
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,
|
|
81
83
|
iconPosition?: IconPositionType
|
|
82
|
-
|
|
83
|
-
}) => {
|
|
84
|
+
) => {
|
|
84
85
|
if (!icon) {
|
|
85
|
-
return
|
|
86
|
+
return null
|
|
86
87
|
}
|
|
87
88
|
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
const {
|
|
90
|
+
icon: iconClass,
|
|
91
|
+
iconLeft: iconLeftClass,
|
|
92
|
+
iconRight: iconRightClass,
|
|
93
|
+
} = classes
|
|
92
94
|
|
|
93
95
|
return React.cloneElement(icon, {
|
|
94
|
-
className:
|
|
96
|
+
className: cx(iconClass, icon.props.className, {
|
|
97
|
+
[iconLeftClass]: children && iconPosition === 'left',
|
|
98
|
+
[iconRightClass]: children && iconPosition === 'right',
|
|
99
|
+
}),
|
|
100
|
+
key: 'button-icon',
|
|
95
101
|
})
|
|
96
102
|
}
|
|
97
103
|
|
|
@@ -103,7 +109,9 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
103
109
|
icon,
|
|
104
110
|
iconPosition,
|
|
105
111
|
loading,
|
|
112
|
+
children,
|
|
106
113
|
className,
|
|
114
|
+
style,
|
|
107
115
|
fullWidth,
|
|
108
116
|
variant = 'primary',
|
|
109
117
|
size = 'medium',
|
|
@@ -111,63 +119,86 @@ export const Button: OverridableComponent<Props> = forwardRef<
|
|
|
111
119
|
hovered,
|
|
112
120
|
disabled,
|
|
113
121
|
active,
|
|
122
|
+
onClick,
|
|
123
|
+
title,
|
|
124
|
+
value,
|
|
125
|
+
type,
|
|
126
|
+
as = 'button',
|
|
127
|
+
titleCase: propsTitleCase,
|
|
114
128
|
...rest
|
|
115
129
|
} = props
|
|
130
|
+
const classes = useStyles(props)
|
|
116
131
|
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
)
|
|
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)
|
|
144
145
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
medium: ['text-button-medium'],
|
|
151
|
-
large: ['text-button-large'],
|
|
146
|
+
if (iconPosition === 'left') {
|
|
147
|
+
finalChildren.unshift(iconComponent)
|
|
148
|
+
} else {
|
|
149
|
+
finalChildren.push(iconComponent)
|
|
150
|
+
}
|
|
152
151
|
}
|
|
153
152
|
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
158
167
|
)
|
|
159
168
|
|
|
160
169
|
return (
|
|
161
170
|
<ButtonBase
|
|
162
171
|
{...rest}
|
|
163
172
|
ref={ref}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
173
|
+
classes={{
|
|
174
|
+
root: rootClassName,
|
|
175
|
+
focusVisible: cx(classes.focusVisible),
|
|
176
|
+
}}
|
|
177
|
+
onClick={getClickHandler(loading, onClick)}
|
|
178
|
+
className={className}
|
|
179
|
+
style={style}
|
|
169
180
|
disabled={disabled}
|
|
170
|
-
|
|
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>
|
|
171
202
|
)
|
|
172
203
|
})
|
|
173
204
|
|
|
@@ -7,15 +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
|
-
href="URL"
|
|
13
12
|
role="button"
|
|
14
13
|
tabindex="-1"
|
|
15
|
-
type="button"
|
|
16
14
|
>
|
|
17
15
|
<span
|
|
18
|
-
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline
|
|
16
|
+
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
|
|
19
17
|
>
|
|
20
18
|
Click me!
|
|
21
19
|
</span>
|
|
@@ -30,16 +28,14 @@ exports[`Button disabled button renders disabled version 1`] = `
|
|
|
30
28
|
class="Picasso-root"
|
|
31
29
|
>
|
|
32
30
|
<button
|
|
33
|
-
|
|
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"
|
|
31
|
+
class="MuiButtonBase-root PicassoButton-disabled PicassoButton-medium PicassoButton-primary PicassoButton-root Mui-disabled"
|
|
35
32
|
data-component-type="button"
|
|
36
33
|
disabled=""
|
|
37
|
-
role="button"
|
|
38
34
|
tabindex="-1"
|
|
39
35
|
type="button"
|
|
40
36
|
>
|
|
41
37
|
<span
|
|
42
|
-
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline
|
|
38
|
+
class="PicassoContainer-centerAlignItems PicassoContainer-flex PicassoContainer-inline PicassoButton-content"
|
|
43
39
|
>
|
|
44
40
|
Click me!
|
|
45
41
|
</span>
|