@toptal/picasso-tabs 5.0.15-alpha-ff-7-tabs-17eb872bb.13 → 5.0.15-alpha-bill-root-ref-context-42c3d2541.6
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/Tab/Tab.d.ts +8 -5
- package/dist-package/src/Tab/Tab.d.ts.map +1 -1
- package/dist-package/src/Tab/Tab.js +16 -61
- package/dist-package/src/Tab/Tab.js.map +1 -1
- package/dist-package/src/Tab/styles.d.ts +4 -0
- package/dist-package/src/Tab/styles.d.ts.map +1 -0
- package/dist-package/src/Tab/styles.js +95 -0
- package/dist-package/src/Tab/styles.js.map +1 -0
- package/dist-package/src/TabScrollButton/TabScrollButton.d.ts +12 -0
- package/dist-package/src/TabScrollButton/TabScrollButton.d.ts.map +1 -0
- package/dist-package/src/TabScrollButton/TabScrollButton.js +30 -0
- package/dist-package/src/TabScrollButton/TabScrollButton.js.map +1 -0
- package/dist-package/src/TabScrollButton/index.d.ts +5 -0
- package/dist-package/src/TabScrollButton/index.d.ts.map +1 -0
- package/dist-package/src/TabScrollButton/index.js +2 -0
- package/dist-package/src/TabScrollButton/index.js.map +1 -0
- package/dist-package/src/Tabs/Tabs.d.ts +9 -12
- package/dist-package/src/Tabs/Tabs.d.ts.map +1 -1
- package/dist-package/src/Tabs/Tabs.js +16 -68
- package/dist-package/src/Tabs/Tabs.js.map +1 -1
- package/dist-package/src/Tabs/index.d.ts +2 -3
- package/dist-package/src/Tabs/index.d.ts.map +1 -1
- package/dist-package/src/Tabs/index.js.map +1 -1
- package/dist-package/src/Tabs/styles.d.ts +4 -0
- package/dist-package/src/Tabs/styles.d.ts.map +1 -0
- package/dist-package/src/Tabs/styles.js +41 -0
- package/dist-package/src/Tabs/styles.js.map +1 -0
- package/dist-package/src/Tabs/use-tab-action.d.ts +5 -0
- package/dist-package/src/Tabs/use-tab-action.d.ts.map +1 -0
- package/dist-package/src/Tabs/use-tab-action.js +21 -0
- package/dist-package/src/Tabs/use-tab-action.js.map +1 -0
- package/dist-package/src/TabsCompound/index.d.ts +4 -2
- package/dist-package/src/TabsCompound/index.d.ts.map +1 -1
- package/dist-package/src/index.d.ts +1 -0
- package/dist-package/src/index.d.ts.map +1 -1
- package/dist-package/src/index.js +1 -0
- package/dist-package/src/index.js.map +1 -1
- package/package.json +13 -13
- package/src/Tab/Tab.tsx +51 -121
- package/src/Tab/__snapshots__/test.tsx.snap +45 -29
- package/src/Tab/story/IconOrBadge.example.tsx +3 -8
- package/src/Tab/styles.ts +107 -0
- package/src/TabScrollButton/TabScrollButton.tsx +59 -0
- package/src/TabScrollButton/index.ts +6 -0
- package/src/Tabs/Tabs.tsx +42 -125
- package/src/Tabs/__snapshots__/test.tsx.snap +76 -45
- package/src/Tabs/index.ts +2 -3
- package/src/Tabs/story/Default.example.tsx +2 -4
- package/src/Tabs/styles.ts +45 -0
- package/src/Tabs/test.tsx +4 -4
- package/src/Tabs/use-tab-action.ts +27 -0
- package/src/index.ts +1 -0
- package/dist-package/src/Tabs/TabsContext.d.ts +0 -11
- package/dist-package/src/Tabs/TabsContext.d.ts.map +0 -1
- package/dist-package/src/Tabs/TabsContext.js +0 -15
- package/dist-package/src/Tabs/TabsContext.js.map +0 -1
- package/src/Tabs/TabsContext.tsx +0 -27
@@ -1,5 +1,7 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
-
export declare const TabsCompound:
|
3
|
-
|
2
|
+
export declare const TabsCompound: (<V extends import("../Tabs").TabsValueType = import("../Tabs").TabsValueType>(props: import("../Tabs/Tabs").Props<V> & {
|
3
|
+
ref?: import("react").ForwardedRef<HTMLDivElement> | undefined;
|
4
|
+
}) => JSX.Element) & {
|
5
|
+
Tab: import("react").ForwardRefExoticComponent<import("../Tab/Tab").Props & import("react").RefAttributes<HTMLDivElement>>;
|
4
6
|
};
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/TabsCompound/index.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,YAAY
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/TabsCompound/index.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,YAAY;;;;CAEvB,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@toptal/picasso-tabs",
|
3
|
-
"version": "5.0.15-alpha-
|
3
|
+
"version": "5.0.15-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
4
4
|
"description": "Toptal UI components library - Tabs",
|
5
5
|
"publishConfig": {
|
6
6
|
"access": "public"
|
@@ -22,13 +22,13 @@
|
|
22
22
|
},
|
23
23
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
|
24
24
|
"dependencies": {
|
25
|
-
"@toptal/picasso-container": "3.1.3-alpha-
|
26
|
-
"@toptal/picasso-icons": "1.12.2-alpha-
|
27
|
-
"@toptal/picasso-shared": "15.0.1-alpha-
|
28
|
-
"@toptal/picasso-typography": "4.0.4-alpha-
|
29
|
-
"@toptal/picasso-typography-overflow": "4.0.4-alpha-
|
30
|
-
"@toptal/picasso-user-badge": "5.1.12-alpha-
|
31
|
-
"@toptal/picasso-utils": "3.1.1-alpha-
|
25
|
+
"@toptal/picasso-container": "3.1.3-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
26
|
+
"@toptal/picasso-icons": "1.12.2-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
27
|
+
"@toptal/picasso-shared": "15.0.1-alpha-bill-root-ref-context-42c3d2541.352+42c3d2541",
|
28
|
+
"@toptal/picasso-typography": "4.0.4-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
29
|
+
"@toptal/picasso-typography-overflow": "4.0.4-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
30
|
+
"@toptal/picasso-user-badge": "5.1.12-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
31
|
+
"@toptal/picasso-utils": "3.1.1-alpha-bill-root-ref-context-42c3d2541.6+42c3d2541",
|
32
32
|
"ap-style-title-case": "^1.1.2"
|
33
33
|
},
|
34
34
|
"sideEffects": [
|
@@ -36,8 +36,8 @@
|
|
36
36
|
"**/styles.js"
|
37
37
|
],
|
38
38
|
"peerDependencies": {
|
39
|
+
"@material-ui/core": "4.12.4",
|
39
40
|
"@toptal/picasso-provider": "*",
|
40
|
-
"@toptal/picasso-tailwind": ">=2.6",
|
41
41
|
"@toptal/picasso-tailwind-merge": "^2.0.0",
|
42
42
|
"react": ">=16.12.0 < 19.0.0"
|
43
43
|
},
|
@@ -45,14 +45,14 @@
|
|
45
45
|
".": "./dist-package/src/index.js"
|
46
46
|
},
|
47
47
|
"devDependencies": {
|
48
|
-
"@
|
49
|
-
"@toptal/picasso-
|
50
|
-
"@toptal/picasso-test-utils": "1.1.2-alpha-
|
48
|
+
"@material-ui/core": "4.12.4",
|
49
|
+
"@toptal/picasso-provider": "5.0.1-alpha-bill-root-ref-context-42c3d2541.273+42c3d2541",
|
50
|
+
"@toptal/picasso-test-utils": "1.1.2-alpha-bill-root-ref-context-42c3d2541.352+42c3d2541"
|
51
51
|
},
|
52
52
|
"files": [
|
53
53
|
"dist-package/**",
|
54
54
|
"!dist-package/tsconfig.tsbuildinfo",
|
55
55
|
"src"
|
56
56
|
],
|
57
|
-
"gitHead": "
|
57
|
+
"gitHead": "42c3d25418e033ebaef1ab9907cbc5e3f1a95279"
|
58
58
|
}
|
package/src/Tab/Tab.tsx
CHANGED
@@ -1,26 +1,30 @@
|
|
1
1
|
import type { ReactNode, HTMLAttributes, ReactElement } from 'react'
|
2
|
-
import React, { forwardRef } from 'react'
|
2
|
+
import React, { forwardRef, useContext } from 'react'
|
3
|
+
import type { Theme } from '@material-ui/core/styles'
|
4
|
+
import { makeStyles } from '@material-ui/core/styles'
|
5
|
+
import type { TabProps } from '@material-ui/core'
|
6
|
+
import { Tab as MUITab } from '@material-ui/core'
|
3
7
|
import type { BaseProps, TextLabelProps } from '@toptal/picasso-shared'
|
4
8
|
import { useTitleCase } from '@toptal/picasso-shared'
|
5
9
|
import { UserBadge } from '@toptal/picasso-user-badge'
|
6
|
-
import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge'
|
7
10
|
|
8
|
-
import
|
11
|
+
import styles from './styles'
|
12
|
+
import { TabsOrientationContext } from '../Tabs/Tabs'
|
9
13
|
import { TabLabel } from '../TabLabel'
|
10
14
|
import { TabDescription } from '../TabDescription'
|
11
15
|
|
12
16
|
export interface Props
|
13
17
|
extends BaseProps,
|
14
18
|
TextLabelProps,
|
15
|
-
Omit<HTMLAttributes<
|
19
|
+
Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
16
20
|
/**
|
17
21
|
* If true, the tab will be disabled
|
18
22
|
* @default false
|
19
23
|
*/
|
20
24
|
disabled?: boolean
|
21
25
|
|
22
|
-
/**
|
23
|
-
value?:
|
26
|
+
/** You can provide your own value. Otherwise, we fallback to the child position index */
|
27
|
+
value?: TabProps['value']
|
24
28
|
|
25
29
|
/** The label element */
|
26
30
|
label?: ReactNode
|
@@ -36,97 +40,32 @@ export interface Props
|
|
36
40
|
|
37
41
|
// Properties below are managed by Tabs component
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
selected?: boolean
|
44
|
+
onChange?: TabProps['onChange']
|
45
|
+
onClick?: TabProps['onClick']
|
42
46
|
}
|
43
47
|
|
44
|
-
const
|
45
|
-
selected: boolean,
|
46
|
-
disabled: boolean,
|
47
|
-
orientation: 'horizontal' | 'vertical'
|
48
|
-
) => {
|
49
|
-
if (disabled) {
|
50
|
-
return 'opacity-50'
|
51
|
-
}
|
52
|
-
if (selected || orientation === 'vertical') {
|
53
|
-
return 'opacity-100 '
|
54
|
-
}
|
55
|
-
|
56
|
-
return 'opacity-70'
|
57
|
-
}
|
58
|
-
|
59
|
-
const wrapperClassesByOrientation = {
|
60
|
-
horizontal: 'inline-flex flex-row items-center justify-center',
|
61
|
-
vertical: 'block',
|
62
|
-
}
|
63
|
-
|
64
|
-
const rootClassesByOrientation = (selected: boolean) => ({
|
65
|
-
horizontal: [
|
66
|
-
'm-0 [&:not(:last-child)]:mr-8 pt-0 pb-[0.4375rem] px-0',
|
67
|
-
'text-center bg-transparent transition-shadow z-10 rounded-none',
|
68
|
-
'text-black',
|
69
|
-
selected && 'shadow-blue-500 shadow-[inset_0_-2px_0]',
|
70
|
-
],
|
71
|
-
vertical: [
|
72
|
-
' first:mt-4 last:mb-4 my-1 mx-0 py-2 px-4',
|
73
|
-
'text-left rounded-l-sm rounded-r-none transition-all',
|
74
|
-
'w-full overflow-hidden',
|
75
|
-
selected && 'shadow-1',
|
76
|
-
selected && [
|
77
|
-
'before:absolute',
|
78
|
-
'before:content-[""]',
|
79
|
-
'before:bottom-0',
|
80
|
-
'before:left-0',
|
81
|
-
'before:top-0',
|
82
|
-
'before:w-[3px]',
|
83
|
-
'before:bg-blue-500',
|
84
|
-
],
|
85
|
-
selected
|
86
|
-
? 'bg-gray-50 text-black'
|
87
|
-
: 'bg-gray-100 hover:bg-gray-200 text-graphite-700 hover:text-black',
|
88
|
-
],
|
89
|
-
})
|
90
|
-
|
91
|
-
const classesByVariant = {
|
92
|
-
scrollable: 'shrink-0 max-w-[264px]',
|
93
|
-
fullWidth: 'shrink flex-grow basis-0',
|
94
|
-
}
|
48
|
+
const useStyles = makeStyles<Theme>(styles, { name: 'PicassoTab' })
|
95
49
|
|
96
|
-
export const Tab = forwardRef<
|
97
|
-
props,
|
98
|
-
ref
|
99
|
-
) {
|
50
|
+
export const Tab = forwardRef<HTMLDivElement, Props>(function Tab(props, ref) {
|
100
51
|
const {
|
101
52
|
disabled,
|
102
53
|
value,
|
103
54
|
label,
|
104
55
|
icon,
|
56
|
+
selected,
|
57
|
+
onChange,
|
58
|
+
onClick,
|
105
59
|
titleCase: propsTitleCase,
|
106
60
|
description,
|
107
61
|
avatar,
|
108
|
-
className,
|
109
|
-
onClick,
|
110
62
|
...rest
|
111
63
|
} = props
|
64
|
+
const classes = useStyles()
|
112
65
|
const titleCase = useTitleCase(propsTitleCase)
|
113
|
-
const
|
114
|
-
value: selectedValue,
|
115
|
-
onChange,
|
116
|
-
orientation,
|
117
|
-
variant,
|
118
|
-
} = useTabsContext()
|
119
|
-
const isHorizontal = orientation === 'horizontal'
|
120
|
-
const selected = value === selectedValue
|
121
|
-
|
122
|
-
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
123
|
-
if (!disabled && onChange) {
|
124
|
-
onChange(event, value as TabsValueType)
|
125
|
-
}
|
126
|
-
onClick?.(event)
|
127
|
-
}
|
66
|
+
const orientation = useContext(TabsOrientationContext)
|
128
67
|
|
129
|
-
const
|
68
|
+
const labelComponent = getLabelComponent({
|
130
69
|
avatar,
|
131
70
|
description,
|
132
71
|
disabled,
|
@@ -136,44 +75,39 @@ export const Tab = forwardRef<HTMLButtonElement, Props>(function Tab(
|
|
136
75
|
})
|
137
76
|
|
138
77
|
return (
|
139
|
-
<
|
140
|
-
className=
|
141
|
-
|
142
|
-
rootClassesByOrientation(selected)[orientation],
|
143
|
-
classesByVariant[variant],
|
144
|
-
disabled ? 'cursor-default text-gray-500' : 'cursor-pointer',
|
145
|
-
disabled && 'pointer-events-none',
|
146
|
-
icon && isHorizontal && 'min-h-0 pt-0 pr-6',
|
147
|
-
'min-w-0 sm:min-w-[160px] md:min-w-[auto]',
|
148
|
-
'border-0 cursor-pointer inline-flex outline-none',
|
149
|
-
'items-center select-none align-middle appearance-none',
|
150
|
-
'justify-center no-underline [-webkit-tap-highlight-color:transparent]',
|
151
|
-
'normal-case whitespace-normal leading-4',
|
152
|
-
'relative ',
|
153
|
-
className
|
154
|
-
)}
|
78
|
+
<MUITab
|
79
|
+
className=''
|
80
|
+
{...rest}
|
155
81
|
ref={ref}
|
156
|
-
tabIndex={
|
82
|
+
tabIndex={0}
|
157
83
|
disabled={disabled}
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
{
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
</span>
|
171
|
-
</button>
|
84
|
+
label={labelComponent}
|
85
|
+
icon={icon}
|
86
|
+
value={value}
|
87
|
+
selected={selected}
|
88
|
+
onChange={onChange}
|
89
|
+
onClick={onClick}
|
90
|
+
classes={{
|
91
|
+
root: classes[orientation],
|
92
|
+
selected: classes.selected,
|
93
|
+
wrapper: classes.wrapper,
|
94
|
+
}}
|
95
|
+
/>
|
172
96
|
)
|
173
97
|
})
|
174
98
|
|
99
|
+
Tab.defaultProps = {}
|
100
|
+
|
175
101
|
Tab.displayName = 'Tab'
|
176
102
|
|
103
|
+
type GetLabelComponentProps = {
|
104
|
+
avatar?: string | null
|
105
|
+
description?: string
|
106
|
+
disabled?: boolean
|
107
|
+
label?: React.ReactNode
|
108
|
+
orientation: 'horizontal' | 'vertical'
|
109
|
+
titleCase?: boolean
|
110
|
+
}
|
177
111
|
const getLabelComponent = ({
|
178
112
|
avatar,
|
179
113
|
description,
|
@@ -181,19 +115,14 @@ const getLabelComponent = ({
|
|
181
115
|
label,
|
182
116
|
orientation,
|
183
117
|
titleCase,
|
184
|
-
}: {
|
185
|
-
avatar?: string | null
|
186
|
-
description?: string
|
187
|
-
disabled?: boolean
|
188
|
-
label?: React.ReactNode
|
189
|
-
orientation: 'horizontal' | 'vertical'
|
190
|
-
titleCase?: boolean
|
191
|
-
}): React.ReactNode => {
|
118
|
+
}: GetLabelComponentProps): React.ReactNode => {
|
192
119
|
if (!label) {
|
193
120
|
return null
|
194
121
|
}
|
122
|
+
|
195
123
|
const isHorizontal = orientation === 'horizontal'
|
196
124
|
const isCustomLabel = typeof label !== 'string'
|
125
|
+
|
197
126
|
const Label = () => (
|
198
127
|
<TabLabel titleCase={titleCase} label={label} orientation={orientation} />
|
199
128
|
)
|
@@ -201,6 +130,7 @@ const getLabelComponent = ({
|
|
201
130
|
if (isHorizontal || isCustomLabel) {
|
202
131
|
return <Label />
|
203
132
|
}
|
133
|
+
|
204
134
|
if (typeof avatar === 'undefined') {
|
205
135
|
return (
|
206
136
|
<>
|
@@ -6,29 +6,31 @@ exports[`Tab Tab disabled tab 1`] = `
|
|
6
6
|
class="Picasso-root"
|
7
7
|
>
|
8
8
|
<div
|
9
|
-
|
10
|
-
class="relative min-h flex overflow-hidden overflow-x"
|
9
|
+
class="MuiTabs-root Tabs-horizontal"
|
11
10
|
data-component-type="tabs"
|
12
11
|
>
|
13
12
|
<div
|
14
|
-
class="
|
13
|
+
class="MuiTabs-scrollable"
|
14
|
+
style="width: 99px; height: 99px; position: absolute; top: -9999px; overflow: scroll;"
|
15
|
+
/>
|
16
|
+
<div
|
17
|
+
class="MuiTabs-scroller MuiTabs-scrollable"
|
18
|
+
style="margin-bottom: 0px;"
|
15
19
|
>
|
16
20
|
<div
|
17
|
-
class="
|
21
|
+
class="MuiTabs-flexContainer"
|
18
22
|
role="tablist"
|
19
|
-
tabindex="-1"
|
20
23
|
>
|
21
24
|
<button
|
22
|
-
aria-disabled="true"
|
23
25
|
aria-selected="false"
|
24
|
-
class="
|
26
|
+
class="MuiButtonBase-root MuiTab-root PicassoTab-horizontal MuiTab-textColorInherit Mui-disabled Mui-disabled"
|
25
27
|
disabled=""
|
26
28
|
role="tab"
|
27
29
|
tabindex="-1"
|
28
30
|
type="button"
|
29
31
|
>
|
30
32
|
<span
|
31
|
-
class="
|
33
|
+
class="MuiTab-wrapper PicassoTab-wrapper"
|
32
34
|
>
|
33
35
|
<div
|
34
36
|
class="m-0 text-sm text-inherit font-semibold leading-[1.1rem]"
|
@@ -38,6 +40,10 @@ exports[`Tab Tab disabled tab 1`] = `
|
|
38
40
|
</span>
|
39
41
|
</button>
|
40
42
|
</div>
|
43
|
+
<span
|
44
|
+
class="PrivateTabIndicator-root PrivateTabIndicator-colorSecondary MuiTabs-indicator"
|
45
|
+
style="left: 0px; width: 0px;"
|
46
|
+
/>
|
41
47
|
</div>
|
42
48
|
</div>
|
43
49
|
</div>
|
@@ -50,27 +56,30 @@ exports[`Tab Tab renders 1`] = `
|
|
50
56
|
class="Picasso-root"
|
51
57
|
>
|
52
58
|
<div
|
53
|
-
|
54
|
-
class="relative min-h flex overflow-hidden overflow-x"
|
59
|
+
class="MuiTabs-root Tabs-horizontal"
|
55
60
|
data-component-type="tabs"
|
56
61
|
>
|
57
62
|
<div
|
58
|
-
class="
|
63
|
+
class="MuiTabs-scrollable"
|
64
|
+
style="width: 99px; height: 99px; position: absolute; top: -9999px; overflow: scroll;"
|
65
|
+
/>
|
66
|
+
<div
|
67
|
+
class="MuiTabs-scroller MuiTabs-scrollable"
|
68
|
+
style="margin-bottom: 0px;"
|
59
69
|
>
|
60
70
|
<div
|
61
|
-
class="
|
71
|
+
class="MuiTabs-flexContainer"
|
62
72
|
role="tablist"
|
63
|
-
tabindex="-1"
|
64
73
|
>
|
65
74
|
<button
|
66
75
|
aria-selected="false"
|
67
|
-
class="
|
76
|
+
class="MuiButtonBase-root MuiTab-root PicassoTab-horizontal MuiTab-textColorInherit"
|
68
77
|
role="tab"
|
69
78
|
tabindex="0"
|
70
79
|
type="button"
|
71
80
|
>
|
72
81
|
<span
|
73
|
-
class="
|
82
|
+
class="MuiTab-wrapper PicassoTab-wrapper"
|
74
83
|
>
|
75
84
|
<div
|
76
85
|
class="m-0 text-sm text-inherit font-semibold leading-[1.1rem]"
|
@@ -80,6 +89,10 @@ exports[`Tab Tab renders 1`] = `
|
|
80
89
|
</span>
|
81
90
|
</button>
|
82
91
|
</div>
|
92
|
+
<span
|
93
|
+
class="PrivateTabIndicator-root PrivateTabIndicator-colorSecondary MuiTabs-indicator"
|
94
|
+
style="left: 0px; width: 0px;"
|
95
|
+
/>
|
83
96
|
</div>
|
84
97
|
</div>
|
85
98
|
</div>
|
@@ -92,43 +105,46 @@ exports[`Tab Tab tab with icon 1`] = `
|
|
92
105
|
class="Picasso-root"
|
93
106
|
>
|
94
107
|
<div
|
95
|
-
|
96
|
-
class="relative min-h flex overflow-hidden overflow-x"
|
108
|
+
class="MuiTabs-root Tabs-horizontal"
|
97
109
|
data-component-type="tabs"
|
98
110
|
>
|
99
111
|
<div
|
100
|
-
class="
|
112
|
+
class="MuiTabs-scrollable"
|
113
|
+
style="width: 99px; height: 99px; position: absolute; top: -9999px; overflow: scroll;"
|
114
|
+
/>
|
115
|
+
<div
|
116
|
+
class="MuiTabs-scroller MuiTabs-scrollable"
|
117
|
+
style="margin-bottom: 0px;"
|
101
118
|
>
|
102
119
|
<div
|
103
|
-
class="
|
120
|
+
class="MuiTabs-flexContainer"
|
104
121
|
role="tablist"
|
105
|
-
tabindex="-1"
|
106
122
|
>
|
107
123
|
<button
|
108
124
|
aria-selected="false"
|
109
|
-
class="
|
125
|
+
class="MuiButtonBase-root MuiTab-root PicassoTab-horizontal MuiTab-textColorInherit MuiTab-labelIcon"
|
110
126
|
role="tab"
|
111
127
|
tabindex="0"
|
112
128
|
type="button"
|
113
129
|
>
|
114
130
|
<span
|
115
|
-
class="
|
131
|
+
class="MuiTab-wrapper PicassoTab-wrapper"
|
116
132
|
>
|
133
|
+
<div
|
134
|
+
id="Icon"
|
135
|
+
/>
|
117
136
|
<div
|
118
137
|
class="m-0 text-sm text-inherit font-semibold leading-[1.1rem]"
|
119
138
|
>
|
120
139
|
Tab Label
|
121
140
|
</div>
|
122
|
-
<span
|
123
|
-
class="absolute right-0 mb-0"
|
124
|
-
>
|
125
|
-
<div
|
126
|
-
id="Icon"
|
127
|
-
/>
|
128
|
-
</span>
|
129
141
|
</span>
|
130
142
|
</button>
|
131
143
|
</div>
|
144
|
+
<span
|
145
|
+
class="PrivateTabIndicator-root PrivateTabIndicator-colorSecondary MuiTabs-indicator"
|
146
|
+
style="left: 0px; width: 0px;"
|
147
|
+
/>
|
132
148
|
</div>
|
133
149
|
</div>
|
134
150
|
</div>
|
@@ -3,12 +3,10 @@ import { Container, Tabs, Tooltip, Badge } from '@toptal/picasso'
|
|
3
3
|
import { SPACING_4 } from '@toptal/picasso-utils'
|
4
4
|
import { Exclamation16 } from '@toptal/picasso-icons'
|
5
5
|
|
6
|
-
import type { TabsValueType } from '../../Tabs/TabsContext'
|
7
|
-
|
8
6
|
const Example = () => {
|
9
|
-
const [value, setValue] = React.useState
|
7
|
+
const [value, setValue] = React.useState(0)
|
10
8
|
|
11
|
-
const handleChange = (_: React.ChangeEvent<{}>, newValue:
|
9
|
+
const handleChange = (_: React.ChangeEvent<{}>, newValue: number) => {
|
12
10
|
setValue(newValue)
|
13
11
|
}
|
14
12
|
|
@@ -26,10 +24,7 @@ const Example = () => {
|
|
26
24
|
}
|
27
25
|
/>
|
28
26
|
<Tabs.Tab label='Label' />
|
29
|
-
<Tabs.Tab
|
30
|
-
label='Label'
|
31
|
-
icon={<Badge content={10} variant='white' className='mt-[1px]' />}
|
32
|
-
/>
|
27
|
+
<Tabs.Tab label='Label' icon={<Badge content={10} variant='white' />} />
|
33
28
|
</Tabs>
|
34
29
|
|
35
30
|
{value === 0 && (
|
@@ -0,0 +1,107 @@
|
|
1
|
+
import type { Theme } from '@material-ui/core/styles'
|
2
|
+
import { createStyles } from '@material-ui/core/styles'
|
3
|
+
import { rem } from '@toptal/picasso-shared'
|
4
|
+
import { PicassoProvider } from '@toptal/picasso-provider'
|
5
|
+
|
6
|
+
PicassoProvider.override(({ breakpoints, palette }: Theme) => ({
|
7
|
+
MuiTab: {
|
8
|
+
root: {
|
9
|
+
minHeight: 0,
|
10
|
+
minWidth: 0,
|
11
|
+
lineHeight: 1,
|
12
|
+
textTransform: 'none',
|
13
|
+
padding: `${rem('9px')} 0 ${rem('7px')}`,
|
14
|
+
overflow: 'initial',
|
15
|
+
|
16
|
+
[breakpoints.up('md')]: {
|
17
|
+
padding: undefined,
|
18
|
+
},
|
19
|
+
|
20
|
+
color: palette.grey.dark,
|
21
|
+
|
22
|
+
[breakpoints.up('md')]: {
|
23
|
+
minWidth: 'auto',
|
24
|
+
fontSize: '1rem',
|
25
|
+
},
|
26
|
+
},
|
27
|
+
labelIcon: {
|
28
|
+
minHeight: 0,
|
29
|
+
paddingRight: '1.5rem',
|
30
|
+
paddingTop: rem('9px'),
|
31
|
+
'& $wrapper > *:first-child': {
|
32
|
+
position: 'absolute',
|
33
|
+
right: 0,
|
34
|
+
marginBottom: 0,
|
35
|
+
},
|
36
|
+
},
|
37
|
+
selected: {
|
38
|
+
color: palette.common.black,
|
39
|
+
},
|
40
|
+
textColorInherit: {
|
41
|
+
'&$disabled': {
|
42
|
+
color: palette.grey.main,
|
43
|
+
},
|
44
|
+
},
|
45
|
+
disabled: {},
|
46
|
+
},
|
47
|
+
}))
|
48
|
+
|
49
|
+
export default ({ sizes, palette, shadows, transitions }: Theme) =>
|
50
|
+
createStyles({
|
51
|
+
horizontal: {
|
52
|
+
paddingTop: 0,
|
53
|
+
'&:not(:last-child)': {
|
54
|
+
marginRight: '2em',
|
55
|
+
},
|
56
|
+
},
|
57
|
+
vertical: {
|
58
|
+
width: '100%',
|
59
|
+
borderRadius: `${sizes.borderRadius.small} 0 0 ${sizes.borderRadius.small}`,
|
60
|
+
margin: '0.25rem 0',
|
61
|
+
overflow: 'hidden',
|
62
|
+
padding: '0.5rem 1rem',
|
63
|
+
transition: `all ${transitions.duration.short}ms ${transitions.easing.easeInOut}`,
|
64
|
+
textAlign: 'left',
|
65
|
+
backgroundColor: palette.grey.lighter,
|
66
|
+
opacity: 1,
|
67
|
+
color: palette.grey.dark,
|
68
|
+
|
69
|
+
'&:first-child': {
|
70
|
+
marginTop: '1rem',
|
71
|
+
},
|
72
|
+
|
73
|
+
'&:last-child': {
|
74
|
+
marginBottom: '1rem',
|
75
|
+
},
|
76
|
+
|
77
|
+
'&:hover': {
|
78
|
+
color: palette.common.black,
|
79
|
+
},
|
80
|
+
|
81
|
+
'&:hover:not($selected)': {
|
82
|
+
backgroundColor: palette.grey.lighter2,
|
83
|
+
},
|
84
|
+
|
85
|
+
'& $wrapper': {
|
86
|
+
display: 'block',
|
87
|
+
},
|
88
|
+
},
|
89
|
+
selected: {
|
90
|
+
'&$vertical': {
|
91
|
+
color: palette.common.black,
|
92
|
+
boxShadow: shadows[1],
|
93
|
+
backgroundColor: palette.grey.lightest,
|
94
|
+
|
95
|
+
'&::before': {
|
96
|
+
content: '""',
|
97
|
+
background: palette.blue.main,
|
98
|
+
position: 'absolute',
|
99
|
+
left: 0,
|
100
|
+
top: 0,
|
101
|
+
bottom: 0,
|
102
|
+
width: '3px',
|
103
|
+
},
|
104
|
+
},
|
105
|
+
},
|
106
|
+
wrapper: {},
|
107
|
+
})
|