@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.
Files changed (57) hide show
  1. package/dist-package/src/Tab/Tab.d.ts +8 -5
  2. package/dist-package/src/Tab/Tab.d.ts.map +1 -1
  3. package/dist-package/src/Tab/Tab.js +16 -61
  4. package/dist-package/src/Tab/Tab.js.map +1 -1
  5. package/dist-package/src/Tab/styles.d.ts +4 -0
  6. package/dist-package/src/Tab/styles.d.ts.map +1 -0
  7. package/dist-package/src/Tab/styles.js +95 -0
  8. package/dist-package/src/Tab/styles.js.map +1 -0
  9. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts +12 -0
  10. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts.map +1 -0
  11. package/dist-package/src/TabScrollButton/TabScrollButton.js +30 -0
  12. package/dist-package/src/TabScrollButton/TabScrollButton.js.map +1 -0
  13. package/dist-package/src/TabScrollButton/index.d.ts +5 -0
  14. package/dist-package/src/TabScrollButton/index.d.ts.map +1 -0
  15. package/dist-package/src/TabScrollButton/index.js +2 -0
  16. package/dist-package/src/TabScrollButton/index.js.map +1 -0
  17. package/dist-package/src/Tabs/Tabs.d.ts +9 -12
  18. package/dist-package/src/Tabs/Tabs.d.ts.map +1 -1
  19. package/dist-package/src/Tabs/Tabs.js +16 -68
  20. package/dist-package/src/Tabs/Tabs.js.map +1 -1
  21. package/dist-package/src/Tabs/index.d.ts +2 -3
  22. package/dist-package/src/Tabs/index.d.ts.map +1 -1
  23. package/dist-package/src/Tabs/index.js.map +1 -1
  24. package/dist-package/src/Tabs/styles.d.ts +4 -0
  25. package/dist-package/src/Tabs/styles.d.ts.map +1 -0
  26. package/dist-package/src/Tabs/styles.js +41 -0
  27. package/dist-package/src/Tabs/styles.js.map +1 -0
  28. package/dist-package/src/Tabs/use-tab-action.d.ts +5 -0
  29. package/dist-package/src/Tabs/use-tab-action.d.ts.map +1 -0
  30. package/dist-package/src/Tabs/use-tab-action.js +21 -0
  31. package/dist-package/src/Tabs/use-tab-action.js.map +1 -0
  32. package/dist-package/src/TabsCompound/index.d.ts +4 -2
  33. package/dist-package/src/TabsCompound/index.d.ts.map +1 -1
  34. package/dist-package/src/index.d.ts +1 -0
  35. package/dist-package/src/index.d.ts.map +1 -1
  36. package/dist-package/src/index.js +1 -0
  37. package/dist-package/src/index.js.map +1 -1
  38. package/package.json +13 -13
  39. package/src/Tab/Tab.tsx +51 -121
  40. package/src/Tab/__snapshots__/test.tsx.snap +45 -29
  41. package/src/Tab/story/IconOrBadge.example.tsx +3 -8
  42. package/src/Tab/styles.ts +107 -0
  43. package/src/TabScrollButton/TabScrollButton.tsx +59 -0
  44. package/src/TabScrollButton/index.ts +6 -0
  45. package/src/Tabs/Tabs.tsx +42 -125
  46. package/src/Tabs/__snapshots__/test.tsx.snap +76 -45
  47. package/src/Tabs/index.ts +2 -3
  48. package/src/Tabs/story/Default.example.tsx +2 -4
  49. package/src/Tabs/styles.ts +45 -0
  50. package/src/Tabs/test.tsx +4 -4
  51. package/src/Tabs/use-tab-action.ts +27 -0
  52. package/src/index.ts +1 -0
  53. package/dist-package/src/Tabs/TabsContext.d.ts +0 -11
  54. package/dist-package/src/Tabs/TabsContext.d.ts.map +0 -1
  55. package/dist-package/src/Tabs/TabsContext.js +0 -15
  56. package/dist-package/src/Tabs/TabsContext.js.map +0 -1
  57. package/src/Tabs/TabsContext.tsx +0 -27
@@ -1,5 +1,7 @@
1
1
  /// <reference types="react" />
2
- export declare const TabsCompound: import("react").ForwardRefExoticComponent<import("../Tabs/Tabs").Props<import("../Tabs").TabsValueType> & import("react").RefAttributes<HTMLDivElement>> & {
3
- Tab: import("react").ForwardRefExoticComponent<import("../Tab/Tab").Props & import("react").RefAttributes<HTMLButtonElement>>;
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;;CAEvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/TabsCompound/index.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,YAAY;;;;CAEvB,CAAA"}
@@ -1,3 +1,4 @@
1
+ export * from './TabScrollButton';
1
2
  export * from './Tabs';
2
3
  export * from './Tab';
3
4
  export * from './TabDescription';
@@ -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,3 +1,4 @@
1
+ export * from './TabScrollButton';
1
2
  export * from './Tabs';
2
3
  export * from './Tab';
3
4
  export * from './TabDescription';
@@ -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-ff-7-tabs-17eb872bb.13+17eb872bb",
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-ff-7-tabs-17eb872bb.13+17eb872bb",
26
- "@toptal/picasso-icons": "1.12.2-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
27
- "@toptal/picasso-shared": "15.0.1-alpha-ff-7-tabs-17eb872bb.359+17eb872bb",
28
- "@toptal/picasso-typography": "4.0.4-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
29
- "@toptal/picasso-typography-overflow": "4.0.4-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
30
- "@toptal/picasso-user-badge": "5.1.12-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
31
- "@toptal/picasso-utils": "3.1.1-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
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
- "@toptal/picasso-provider": "5.0.1-alpha-ff-7-tabs-17eb872bb.280+17eb872bb",
49
- "@toptal/picasso-tailwind-merge": "2.0.4-alpha-ff-7-tabs-17eb872bb.13+17eb872bb",
50
- "@toptal/picasso-test-utils": "1.1.2-alpha-ff-7-tabs-17eb872bb.359+17eb872bb"
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": "17eb872bb0410897243666d7cc7a58eb1479ed78"
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 { useTabsContext, type TabsValueType } from '../Tabs/TabsContext'
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<HTMLButtonElement>, 'onChange'> {
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
- /** The value of the tab */
23
- value?: TabsValueType
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
- // selected?: boolean
40
- // onChange?: TabProps['onChange']
41
- // onClick?: TabProps['onClick']
43
+ selected?: boolean
44
+ onChange?: TabProps['onChange']
45
+ onClick?: TabProps['onClick']
42
46
  }
43
47
 
44
- const getOpacityClass = (
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<HTMLButtonElement, Props>(function Tab(
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 renderLabel = getLabelComponent({
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
- <button
140
- className={twMerge(
141
- getOpacityClass(selected, !!disabled, orientation),
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={disabled ? -1 : 0}
82
+ tabIndex={0}
157
83
  disabled={disabled}
158
- onClick={handleClick}
159
- role='tab'
160
- aria-selected={selected}
161
- aria-disabled={disabled}
162
- type='button'
163
- {...rest}
164
- >
165
- <span
166
- className={twJoin('w-full', wrapperClassesByOrientation[orientation])}
167
- >
168
- {renderLabel}
169
- {icon && <span className='absolute right-0 mb-0'>{icon}</span>}
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
- aria-orientation="horizontal"
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="after:absolute after:content-[""] after:bottom-0 after:left-0 after:right-0 after:h-[1px] after:bg-gray after:z-0 flex-auto inline-block relative whitespace-nowrap"
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="flex"
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="opacity-50 m-0 [&:not(:last-child)]:mr-8 pt-0 pb-[0.4375rem] px-0 text-center bg-transparent transition-shadow z-10 rounded-none shrink-0 max-w text-gray pointer-events min-w sm:min-w md:min-w border-0 cursor-pointer inline-flex outline-none items-center select-none align-middle appearance-none justify-center no-underline [-webkit-tap-highlight normal-case whitespace-normal leading-4 relative"
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="w-full inline-flex flex-row items-center justify-center"
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
- aria-orientation="horizontal"
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="after:absolute after:content-[""] after:bottom-0 after:left-0 after:right-0 after:h-[1px] after:bg-gray after:z-0 flex-auto inline-block relative whitespace-nowrap"
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="flex"
71
+ class="MuiTabs-flexContainer"
62
72
  role="tablist"
63
- tabindex="-1"
64
73
  >
65
74
  <button
66
75
  aria-selected="false"
67
- class="opacity-70 m-0 [&:not(:last-child)]:mr-8 pt-0 pb-[0.4375rem] px-0 text-center bg-transparent transition-shadow z-10 rounded-none text-black shrink-0 max-w min-w sm:min-w md:min-w border-0 cursor-pointer inline-flex outline-none items-center select-none align-middle appearance-none justify-center no-underline [-webkit-tap-highlight normal-case whitespace-normal leading-4 relative"
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="w-full inline-flex flex-row items-center justify-center"
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
- aria-orientation="horizontal"
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="after:absolute after:content-[""] after:bottom-0 after:left-0 after:right-0 after:h-[1px] after:bg-gray after:z-0 flex-auto inline-block relative whitespace-nowrap"
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="flex"
120
+ class="MuiTabs-flexContainer"
104
121
  role="tablist"
105
- tabindex="-1"
106
122
  >
107
123
  <button
108
124
  aria-selected="false"
109
- class="opacity-70 m-0 [&:not(:last-child)]:mr-8 pb-[0.4375rem] px-0 text-center bg-transparent transition-shadow z-10 rounded-none text-black shrink-0 max-w min-h pt-0 pr-6 min-w sm:min-w md:min-w border-0 cursor-pointer inline-flex outline-none items-center select-none align-middle appearance-none justify-center no-underline [-webkit-tap-highlight normal-case whitespace-normal leading-4 relative"
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="w-full inline-flex flex-row items-center justify-center"
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<TabsValueType>(0)
7
+ const [value, setValue] = React.useState(0)
10
8
 
11
- const handleChange = (_: React.ChangeEvent<{}>, newValue: TabsValueType) => {
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
+ })