@toptal/picasso-tabs 5.0.15-alpha-MP-955-fix-section-closing-animation-d279e2398.0 → 5.0.15-alpha-ff-7-tabs-19babbfd6.8

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 (45) hide show
  1. package/dist-package/src/Tab/Tab.d.ts +3 -3
  2. package/dist-package/src/Tab/Tab.d.ts.map +1 -1
  3. package/dist-package/src/Tab/Tab.js +62 -14
  4. package/dist-package/src/Tab/Tab.js.map +1 -1
  5. package/dist-package/src/Tabs/Tabs.d.ts +11 -8
  6. package/dist-package/src/Tabs/Tabs.d.ts.map +1 -1
  7. package/dist-package/src/Tabs/Tabs.js +53 -16
  8. package/dist-package/src/Tabs/Tabs.js.map +1 -1
  9. package/dist-package/src/TabsCompound/index.d.ts +2 -4
  10. package/dist-package/src/TabsCompound/index.d.ts.map +1 -1
  11. package/dist-package/src/index.d.ts +0 -1
  12. package/dist-package/src/index.d.ts.map +1 -1
  13. package/dist-package/src/index.js +0 -1
  14. package/dist-package/src/index.js.map +1 -1
  15. package/package.json +14 -13
  16. package/src/Tab/Tab.tsx +99 -21
  17. package/src/Tabs/Tabs.tsx +88 -37
  18. package/src/Tabs/__snapshots__/test.tsx.snap +56 -71
  19. package/src/Tabs/test.tsx +4 -4
  20. package/src/index.ts +0 -1
  21. package/dist-package/src/Tab/styles.d.ts +0 -4
  22. package/dist-package/src/Tab/styles.d.ts.map +0 -1
  23. package/dist-package/src/Tab/styles.js +0 -95
  24. package/dist-package/src/Tab/styles.js.map +0 -1
  25. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts +0 -12
  26. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts.map +0 -1
  27. package/dist-package/src/TabScrollButton/TabScrollButton.js +0 -30
  28. package/dist-package/src/TabScrollButton/TabScrollButton.js.map +0 -1
  29. package/dist-package/src/TabScrollButton/index.d.ts +0 -5
  30. package/dist-package/src/TabScrollButton/index.d.ts.map +0 -1
  31. package/dist-package/src/TabScrollButton/index.js +0 -2
  32. package/dist-package/src/TabScrollButton/index.js.map +0 -1
  33. package/dist-package/src/Tabs/styles.d.ts +0 -4
  34. package/dist-package/src/Tabs/styles.d.ts.map +0 -1
  35. package/dist-package/src/Tabs/styles.js +0 -41
  36. package/dist-package/src/Tabs/styles.js.map +0 -1
  37. package/dist-package/src/Tabs/use-tab-action.d.ts +0 -5
  38. package/dist-package/src/Tabs/use-tab-action.d.ts.map +0 -1
  39. package/dist-package/src/Tabs/use-tab-action.js +0 -21
  40. package/dist-package/src/Tabs/use-tab-action.js.map +0 -1
  41. package/src/Tab/styles.ts +0 -107
  42. package/src/TabScrollButton/TabScrollButton.tsx +0 -59
  43. package/src/TabScrollButton/index.ts +0 -6
  44. package/src/Tabs/styles.ts +0 -45
  45. package/src/Tabs/use-tab-action.ts +0 -27
@@ -1,8 +1,8 @@
1
1
  import type { ReactNode, HTMLAttributes, ReactElement } from 'react';
2
2
  import React from 'react';
3
- import type { TabProps } from '@material-ui/core';
3
+ import type { TabProps } from '@mui/base/Tab';
4
4
  import type { BaseProps, TextLabelProps } from '@toptal/picasso-shared';
5
- export interface Props extends BaseProps, TextLabelProps, Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
5
+ export interface Props extends BaseProps, TextLabelProps, Omit<HTMLAttributes<HTMLButtonElement>, 'onChange'> {
6
6
  /**
7
7
  * If true, the tab will be disabled
8
8
  * @default false
@@ -22,6 +22,6 @@ export interface Props extends BaseProps, TextLabelProps, Omit<HTMLAttributes<HT
22
22
  onChange?: TabProps['onChange'];
23
23
  onClick?: TabProps['onClick'];
24
24
  }
25
- export declare const Tab: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
25
+ export declare const Tab: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLButtonElement>>;
26
26
  export default Tab;
27
27
  //# sourceMappingURL=Tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/Tab/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,KAAiC,MAAM,OAAO,CAAA;AAGrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AASvE,MAAM,WAAW,KACf,SAAQ,SAAS,EACf,cAAc,EACd,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,yFAAyF;IACzF,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEzB,wBAAwB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IAEjB,uBAAuB;IACvB,IAAI,CAAC,EAAE,YAAY,CAAA;IAEnB,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEtB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IAIpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;CAC9B;AAID,eAAO,MAAM,GAAG,8EA+Cd,CAAA;AAyDF,eAAe,GAAG,CAAA"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/Tab/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,KAAiC,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AASvE,MAAM,WAAW,KACf,SAAQ,SAAS,EACf,cAAc,EACd,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,yFAAyF;IACzF,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEzB,wBAAwB;IACxB,KAAK,CAAC,EAAE,SAAS,CAAA;IAEjB,uBAAuB;IACvB,IAAI,CAAC,EAAE,YAAY,CAAA;IAEnB,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEtB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IAIpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;CAC9B;AAuDD,eAAO,MAAM,GAAG,iFA4Ed,CAAA;AAyDF,eAAe,GAAG,CAAA"}
@@ -10,21 +10,62 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import React, { forwardRef, useContext } from 'react';
13
- import { makeStyles } from '@material-ui/core/styles';
14
- import { Tab as MUITab } from '@material-ui/core';
13
+ import { Tab as MUITab } from '@mui/base/Tab';
15
14
  import { useTitleCase } from '@toptal/picasso-shared';
16
15
  import { UserBadge } from '@toptal/picasso-user-badge';
17
- import styles from './styles';
18
- import { TabsOrientationContext } from '../Tabs/Tabs';
16
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge';
17
+ import { TabsContext } from '../Tabs/Tabs';
19
18
  import { TabLabel } from '../TabLabel';
20
19
  import { TabDescription } from '../TabDescription';
21
- const useStyles = makeStyles(styles, { name: 'PicassoTab' });
20
+ const getOpacityClass = (selected, disabled, orientation) => {
21
+ if (disabled) {
22
+ return 'opacity-50';
23
+ }
24
+ if (selected || orientation === 'vertical') {
25
+ return 'opacity-100 ';
26
+ }
27
+ return 'opacity-70';
28
+ };
29
+ const wrapperClassesByOrientation = {
30
+ horizontal: 'inline-flex items-center flex-col justify-center',
31
+ vertical: 'block',
32
+ };
33
+ const rootClassesByOrientation = (selected) => ({
34
+ horizontal: [
35
+ 'm-0 [&:not(:last-child)]:mr-8 pt-[0.5625rem] pb-[0.4375rem] px-0',
36
+ 'text-center bg-transparent transition-shadow z-10 rounded-none',
37
+ 'text-black',
38
+ selected && 'shadow-blue-500 shadow-[inset_0_-2px_0]',
39
+ ],
40
+ vertical: [
41
+ ' first:mt-4 last:mb-4 my-1 mx-0 py-2 px-4',
42
+ 'text-left rounded-l-sm rounded-r-none transition-all',
43
+ 'w-full overflow-hidden',
44
+ selected && 'shadow-1',
45
+ selected && [
46
+ 'before:absolute',
47
+ 'before:content-[""]',
48
+ 'before:bottom-0',
49
+ 'before:left-0',
50
+ 'before:top-0',
51
+ 'before:w-[3px]',
52
+ 'before:bg-blue-500',
53
+ ],
54
+ selected
55
+ ? 'bg-gray-50 text-black'
56
+ : 'bg-gray-100 hover:bg-gray-200 text-graphite-700 hover:text-black',
57
+ ],
58
+ });
59
+ const classesByVariant = {
60
+ scrollable: 'shrink-0 max-w-[264px]',
61
+ fullWidth: 'shrink flex-grow basis-0',
62
+ };
22
63
  export const Tab = forwardRef(function Tab(props, ref) {
23
- const { disabled, value, label, icon, selected, onChange, onClick, titleCase: propsTitleCase, description, avatar } = props, rest = __rest(props, ["disabled", "value", "label", "icon", "selected", "onChange", "onClick", "titleCase", "description", "avatar"]);
24
- const classes = useStyles();
64
+ const { disabled, value, label, icon, onChange, onClick, titleCase: propsTitleCase, description, avatar, className } = props, rest = __rest(props, ["disabled", "value", "label", "icon", "onChange", "onClick", "titleCase", "description", "avatar", "className"]);
25
65
  const titleCase = useTitleCase(propsTitleCase);
26
- const orientation = useContext(TabsOrientationContext);
27
- const labelComponent = getLabelComponent({
66
+ const { orientation, variant } = useContext(TabsContext);
67
+ const isHorizontal = orientation === 'horizontal';
68
+ const renderLabel = getLabelComponent({
28
69
  avatar,
29
70
  description,
30
71
  disabled,
@@ -32,11 +73,18 @@ export const Tab = forwardRef(function Tab(props, ref) {
32
73
  orientation,
33
74
  titleCase,
34
75
  });
35
- return (React.createElement(MUITab, Object.assign({ className: '' }, rest, { ref: ref, tabIndex: 0, disabled: disabled, label: labelComponent, icon: icon, value: value, selected: selected, onChange: onChange, onClick: onClick, classes: {
36
- root: classes[orientation],
37
- selected: classes.selected,
38
- wrapper: classes.wrapper,
39
- } })));
76
+ return (React.createElement(MUITab, Object.assign({ className: '' }, rest, { ref: ref, tabIndex: 0, disabled: disabled, value: value, onChange: onChange, onClick: onClick, slotProps: {
77
+ root: ownerState => {
78
+ return {
79
+ className: twMerge(getOpacityClass(ownerState.selected, ownerState.disabled, orientation), rootClassesByOrientation(ownerState.selected)[orientation], classesByVariant[variant], ownerState.disabled
80
+ ? 'cursor-default text-gray-500'
81
+ : 'cursor-pointer', ownerState.disabled && 'pointer-events-none', icon && isHorizontal && 'min-h-0 pt-[0.5625rem] pr-6', 'min-w-0 sm:min-w-[160px] md:min-w-[auto]', 'border-0 cursor-pointer inline-flex outline-none', 'items-center select-none align-middle appearance-none', 'justify-center no-underline [-webkit-tap-highlight-color:transparent]', 'normal-case whitespace-normal leading-4', 'relative ', className),
82
+ };
83
+ },
84
+ } }),
85
+ React.createElement("span", { className: twJoin('w-full', wrapperClassesByOrientation[orientation]) },
86
+ renderLabel,
87
+ icon && React.createElement("span", { className: 'absolute right-0 mb-0 h-4' }, icon))));
40
88
  });
41
89
  Tab.defaultProps = {};
42
90
  Tab.displayName = 'Tab';
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../src/Tab/Tab.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../src/Tab/Tab.tsx"],"names":[],"mappings":"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"}
@@ -1,23 +1,26 @@
1
- import type { ForwardedRef, ReactNode } from 'react';
1
+ import type { ReactNode } from 'react';
2
2
  import React from 'react';
3
- import { Tabs as MUITabs } from '@material-ui/core';
4
3
  import type { BaseProps } from '@toptal/picasso-shared';
5
- export declare type TabsValueType = string | number | false;
4
+ export declare type TabsValueType = string | number | null;
6
5
  export interface Props<V extends TabsValueType> extends BaseProps {
7
6
  /** Tabs content containing Tab components */
8
7
  children: ReactNode;
9
8
  /** Callback fired when the value changes. */
10
9
  onChange?: (event: React.ChangeEvent<{}> | null, value: V) => void;
11
- /** The value of the currently selected Tab. If you don't want any selected Tab, you can set this property to false. */
10
+ /**
11
+ * The value of the currently selected Tab.
12
+ * If you don't want any selected Tab, you can set this property to null.
13
+ */
12
14
  value: V;
13
15
  /** The tabs orientation (layout flow direction). */
14
16
  orientation?: 'horizontal' | 'vertical';
15
17
  /** Determines additional display behavior of the tabs */
16
18
  variant?: 'scrollable' | 'fullWidth';
17
19
  }
18
- export declare const TabsOrientationContext: React.Context<"horizontal" | "vertical">;
19
- export declare const Tabs: <V extends TabsValueType = TabsValueType>(props: Props<V> & {
20
- ref?: ForwardedRef<HTMLDivElement> | undefined;
21
- }) => ReturnType<typeof MUITabs>;
20
+ export declare const TabsContext: React.Context<{
21
+ orientation: 'horizontal' | 'vertical';
22
+ variant: 'scrollable' | 'fullWidth';
23
+ }>;
24
+ export declare const Tabs: React.ForwardRefExoticComponent<Props<TabsValueType> & React.RefAttributes<HTMLDivElement>>;
22
25
  export default Tabs;
23
26
  //# sourceMappingURL=Tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,KAAqB,MAAM,OAAO,CAAA;AAGzC,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAMvD,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;AAEnD,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,SAAS;IAC/D,6CAA6C;IAC7C,QAAQ,EAAE,SAAS,CAAA;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAElE,uHAAuH;IACvH,KAAK,EAAE,CAAC,CAAA;IAER,oDAAoD;IACpD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IAEvC,yDAAyD;IACzD,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAA;CACrC;AAMD,eAAO,MAAM,sBAAsB,0CAEpB,CAAA;AAEf,eAAO,MAAM,IAAI;;MAsCZ,WAAW,cAAc,CAAC,CAAA;AAE/B,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAA8B,MAAM,OAAO,CAAA;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAElD,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,SAAS;IAC/D,6CAA6C;IAC7C,QAAQ,EAAE,SAAS,CAAA;IAEnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAElE;;;OAGG;IACH,KAAK,EAAE,CAAC,CAAA;IAER,oDAAoD;IACpD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IAEvC,yDAAyD;IACzD,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAAA;CACrC;AAED,eAAO,MAAM,WAAW;iBACT,YAAY,GAAG,UAAU;aAC7B,YAAY,GAAG,WAAW;EACmB,CAAA;AAoCxD,eAAO,MAAM,IAAI,6FAyDhB,CAAA;AAID,eAAe,IAAI,CAAA"}
@@ -9,22 +9,59 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import React, { forwardRef } from 'react';
13
- import { makeStyles } from '@material-ui/core/styles';
14
- import { Tabs as MUITabs } from '@material-ui/core';
15
- import { TabScrollButton } from '../TabScrollButton';
16
- import styles from './styles';
17
- import useTabAction from './use-tab-action';
18
- const useStyles = makeStyles(styles, {
19
- name: 'Tabs',
20
- });
21
- export const TabsOrientationContext = React.createContext('horizontal');
22
- export const Tabs = forwardRef((props, ref) => {
23
- const { children, orientation = 'horizontal', onChange, value, variant = 'scrollable' } = props, rest = __rest(props, ["children", "orientation", "onChange", "value", "variant"]);
24
- const classes = useStyles(props);
25
- const action = useTabAction();
26
- return (React.createElement(TabsOrientationContext.Provider, { value: orientation },
27
- React.createElement(MUITabs, Object.assign({}, rest, { classes: { root: classes[orientation] }, ref: ref, onChange: onChange, value: value, action: action, scrollButtons: 'auto', ScrollButtonComponent: TabScrollButton, orientation: orientation, variant: variant, "data-component-type": 'tabs' }), children)));
12
+ import React, { forwardRef, useMemo } from 'react';
13
+ import { Tabs as MUITabs } from '@mui/base/Tabs';
14
+ import { TabsList } from '@mui/base/TabsList';
15
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge';
16
+ export const TabsContext = React.createContext({ orientation: 'horizontal', variant: 'scrollable' });
17
+ const indicatorClasses = [
18
+ 'after:absolute',
19
+ 'after:content-[""]',
20
+ 'after:bottom-0',
21
+ 'after:left-0',
22
+ 'after:right-0',
23
+ 'after:h-[1px]',
24
+ 'after:bg-gray-500',
25
+ 'after:z-0',
26
+ ];
27
+ const classesByOrientation = {
28
+ vertical: {
29
+ root: 'w-[200px] m-0 flex-col',
30
+ scroller: 'pl-2',
31
+ },
32
+ horizontal: {
33
+ root: '',
34
+ scroller: indicatorClasses,
35
+ },
36
+ };
37
+ const classesByVariant = {
38
+ scrollable: {
39
+ root: 'overflow-x-auto',
40
+ scroller: '',
41
+ },
42
+ fullWidth: {
43
+ root: '',
44
+ scroller: 'w-full overflow-hidden',
45
+ },
46
+ };
47
+ // eslint-disable-next-line react/display-name
48
+ export const Tabs = forwardRef(function Tabs(props, ref) {
49
+ const { children, orientation = 'horizontal', onChange, value, variant = 'scrollable', className } = props, rest = __rest(props, ["children", "orientation", "onChange", "value", "variant", "className"]);
50
+ const contextValue = useMemo(() => ({
51
+ orientation,
52
+ variant,
53
+ }), [orientation, variant]);
54
+ const isVertical = orientation === 'vertical';
55
+ return (React.createElement(TabsContext.Provider, { value: contextValue },
56
+ React.createElement(MUITabs, Object.assign({}, rest, { "data-component-type": 'tabs', slotProps: {
57
+ root: {
58
+ ref,
59
+ className: twMerge('relative min-h-0 flex overflow-hidden', classesByOrientation[orientation].root, classesByVariant[variant].root, className),
60
+ },
61
+ }, onChange: onChange, value: value, orientation: orientation }),
62
+ React.createElement("div", { className: twJoin(classesByVariant[variant].scroller, classesByOrientation[orientation].scroller, 'flex-auto inline-block relative whitespace-nowrap') },
63
+ React.createElement(TabsList, { className: twJoin('flex', isVertical && 'flex-col') }, children)))));
28
64
  });
65
+ Tabs.displayName = 'Tabs';
29
66
  export default Tabs;
30
67
  //# sourceMappingURL=Tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/Tabs/Tabs.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,YAAY,MAAM,kBAAkB,CAAA;AAqB3C,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,MAAM;CACb,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,aAAa,CAEvD,YAAY,CAAC,CAAA;AAEf,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,CACE,KAAe,EACf,GAAoC,EACpC,EAAE;IACF,MAAM,EACJ,QAAQ,EACR,WAAW,GAAG,YAAY,EAC1B,QAAQ,EACR,KAAK,EACL,OAAO,GAAG,YAAY,KAEpB,KAAK,EADJ,IAAI,UACL,KAAK,EAPH,2DAOL,CAAQ,CAAA;IACT,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAE7B,OAAO,CACL,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW;QACjD,oBAAC,OAAO,oBACF,IAAI,IACR,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EACvC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,aAAa,EAAC,MAAM,EACpB,qBAAqB,EAAE,eAAe,EACtC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,yBACI,MAAM,KAEzB,QAAQ,CACD,CACsB,CACnC,CAAA;AACH,CAAC,CAG4B,CAAA;AAE/B,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../src/Tabs/Tabs.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAwBhE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAG3C,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;AAExD,MAAM,gBAAgB,GAAG;IACvB,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,WAAW;CACZ,CAAA;AAED,MAAM,oBAAoB,GAAG;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,MAAM;KACjB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,gBAAgB;KAC3B;CACF,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,EAAE;KACb;IACD,SAAS,EAAE;QACT,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,wBAAwB;KACnC;CACF,CAAA;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAC5B,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACtB,MAAM,EACJ,QAAQ,EACR,WAAW,GAAG,YAAY,EAC1B,QAAQ,EACR,KAAK,EACL,OAAO,GAAG,YAAY,EACtB,SAAS,KAEP,KAAK,EADJ,IAAI,UACL,KAAK,EARH,wEAQL,CAAQ,CAAA;IAET,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC;QACL,WAAW;QACX,OAAO;KACR,CAAC,EACF,CAAC,WAAW,EAAE,OAAO,CAAC,CACvB,CAAA;IAED,MAAM,UAAU,GAAG,WAAW,KAAK,UAAU,CAAA;IAE7C,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY;QACvC,oBAAC,OAAO,oBACF,IAAI,2BACY,MAAM,EAC1B,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,GAAG;oBACH,SAAS,EAAE,OAAO,CAChB,uCAAuC,EACvC,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EACtC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAC9B,SAAS,CACV;iBACF;aACF,EACD,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW;YAExB,6BACE,SAAS,EAAE,MAAM,CACf,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAClC,oBAAoB,CAAC,WAAW,CAAC,CAAC,QAAQ,EAC1C,mDAAmD,CACpD;gBAED,oBAAC,QAAQ,IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,IAC1D,QAAQ,CACA,CACP,CACE,CACW,CACxB,CAAA;AACH,CAAC,CACF,CAAA;AAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;AAEzB,eAAe,IAAI,CAAA"}
@@ -1,7 +1,5 @@
1
1
  /// <reference types="react" />
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>>;
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>>;
6
4
  };
7
5
  //# 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,4 +1,3 @@
1
- export * from './TabScrollButton';
2
1
  export * from './Tabs';
3
2
  export * from './Tab';
4
3
  export * from './TabDescription';
@@ -1 +1 @@
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
+ {"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,4 +1,3 @@
1
- export * from './TabScrollButton';
2
1
  export * from './Tabs';
3
2
  export * from './Tab';
4
3
  export * from './TabDescription';
@@ -1 +1 @@
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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-tabs",
3
- "version": "5.0.15-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
3
+ "version": "5.0.15-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
4
4
  "description": "Toptal UI components library - Tabs",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,13 +22,14 @@
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-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
26
- "@toptal/picasso-icons": "1.12.2-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
27
- "@toptal/picasso-shared": "15.0.1-alpha-MP-955-fix-section-closing-animation-d279e2398.346+d279e2398",
28
- "@toptal/picasso-typography": "4.0.4-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
29
- "@toptal/picasso-typography-overflow": "4.0.4-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
30
- "@toptal/picasso-user-badge": "5.1.12-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
31
- "@toptal/picasso-utils": "3.1.1-alpha-MP-955-fix-section-closing-animation-d279e2398.0+d279e2398",
25
+ "@mui/base": "5.0.0-beta.58",
26
+ "@toptal/picasso-container": "3.1.3-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
27
+ "@toptal/picasso-icons": "1.12.2-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
28
+ "@toptal/picasso-shared": "15.0.1-alpha-ff-7-tabs-19babbfd6.354+19babbfd6",
29
+ "@toptal/picasso-typography": "4.0.4-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
30
+ "@toptal/picasso-typography-overflow": "4.0.4-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
31
+ "@toptal/picasso-user-badge": "5.1.12-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
32
+ "@toptal/picasso-utils": "3.1.1-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
32
33
  "ap-style-title-case": "^1.1.2"
33
34
  },
34
35
  "sideEffects": [
@@ -36,8 +37,8 @@
36
37
  "**/styles.js"
37
38
  ],
38
39
  "peerDependencies": {
39
- "@material-ui/core": "4.12.4",
40
40
  "@toptal/picasso-provider": "*",
41
+ "@toptal/picasso-tailwind": ">=2.6",
41
42
  "@toptal/picasso-tailwind-merge": "^2.0.0",
42
43
  "react": ">=16.12.0 < 19.0.0"
43
44
  },
@@ -45,14 +46,14 @@
45
46
  ".": "./dist-package/src/index.js"
46
47
  },
47
48
  "devDependencies": {
48
- "@material-ui/core": "4.12.4",
49
- "@toptal/picasso-provider": "5.0.1-alpha-MP-955-fix-section-closing-animation-d279e2398.267+d279e2398",
50
- "@toptal/picasso-test-utils": "1.1.2-alpha-MP-955-fix-section-closing-animation-d279e2398.346+d279e2398"
49
+ "@toptal/picasso-provider": "5.0.1-alpha-ff-7-tabs-19babbfd6.275+19babbfd6",
50
+ "@toptal/picasso-tailwind-merge": "2.0.4-alpha-ff-7-tabs-19babbfd6.8+19babbfd6",
51
+ "@toptal/picasso-test-utils": "1.1.2-alpha-ff-7-tabs-19babbfd6.354+19babbfd6"
51
52
  },
52
53
  "files": [
53
54
  "dist-package/**",
54
55
  "!dist-package/tsconfig.tsbuildinfo",
55
56
  "src"
56
57
  ],
57
- "gitHead": "d279e23984ca00e2493b5eb235b626e498018133"
58
+ "gitHead": "19babbfd627b4461663b6782aa7493f16f4181bc"
58
59
  }
package/src/Tab/Tab.tsx CHANGED
@@ -1,22 +1,20 @@
1
1
  import type { ReactNode, HTMLAttributes, ReactElement } from 'react'
2
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
+ import type { TabProps } from '@mui/base/Tab'
4
+ import { Tab as MUITab } from '@mui/base/Tab'
7
5
  import type { BaseProps, TextLabelProps } from '@toptal/picasso-shared'
8
6
  import { useTitleCase } from '@toptal/picasso-shared'
9
7
  import { UserBadge } from '@toptal/picasso-user-badge'
8
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge'
10
9
 
11
- import styles from './styles'
12
- import { TabsOrientationContext } from '../Tabs/Tabs'
10
+ import { TabsContext } from '../Tabs/Tabs'
13
11
  import { TabLabel } from '../TabLabel'
14
12
  import { TabDescription } from '../TabDescription'
15
13
 
16
14
  export interface Props
17
15
  extends BaseProps,
18
16
  TextLabelProps,
19
- Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
17
+ Omit<HTMLAttributes<HTMLButtonElement>, 'onChange'> {
20
18
  /**
21
19
  * If true, the tab will be disabled
22
20
  * @default false
@@ -45,27 +43,81 @@ export interface Props
45
43
  onClick?: TabProps['onClick']
46
44
  }
47
45
 
48
- const useStyles = makeStyles<Theme>(styles, { name: 'PicassoTab' })
46
+ const getOpacityClass = (
47
+ selected: boolean,
48
+ disabled: boolean,
49
+ orientation: 'horizontal' | 'vertical'
50
+ ) => {
51
+ if (disabled) {
52
+ return 'opacity-50'
53
+ }
54
+
55
+ if (selected || orientation === 'vertical') {
56
+ return 'opacity-100 '
57
+ }
49
58
 
50
- export const Tab = forwardRef<HTMLDivElement, Props>(function Tab(props, ref) {
59
+ return 'opacity-70'
60
+ }
61
+
62
+ const wrapperClassesByOrientation = {
63
+ horizontal: 'inline-flex items-center flex-col justify-center',
64
+ vertical: 'block',
65
+ }
66
+
67
+ const rootClassesByOrientation = (selected: boolean) => ({
68
+ horizontal: [
69
+ 'm-0 [&:not(:last-child)]:mr-8 pt-[0.5625rem] pb-[0.4375rem] px-0',
70
+ 'text-center bg-transparent transition-shadow z-10 rounded-none',
71
+ 'text-black',
72
+ selected && 'shadow-blue-500 shadow-[inset_0_-2px_0]',
73
+ ],
74
+ vertical: [
75
+ ' first:mt-4 last:mb-4 my-1 mx-0 py-2 px-4',
76
+ 'text-left rounded-l-sm rounded-r-none transition-all',
77
+ 'w-full overflow-hidden',
78
+ selected && 'shadow-1',
79
+ selected && [
80
+ 'before:absolute',
81
+ 'before:content-[""]',
82
+ 'before:bottom-0',
83
+ 'before:left-0',
84
+ 'before:top-0',
85
+ 'before:w-[3px]',
86
+ 'before:bg-blue-500',
87
+ ],
88
+ selected
89
+ ? 'bg-gray-50 text-black'
90
+ : 'bg-gray-100 hover:bg-gray-200 text-graphite-700 hover:text-black',
91
+ ],
92
+ })
93
+
94
+ const classesByVariant = {
95
+ scrollable: 'shrink-0 max-w-[264px]',
96
+ fullWidth: 'shrink flex-grow basis-0',
97
+ }
98
+
99
+ export const Tab = forwardRef<HTMLButtonElement, Props>(function Tab(
100
+ props,
101
+ ref
102
+ ) {
51
103
  const {
52
104
  disabled,
53
105
  value,
54
106
  label,
55
107
  icon,
56
- selected,
57
108
  onChange,
58
109
  onClick,
59
110
  titleCase: propsTitleCase,
60
111
  description,
61
112
  avatar,
113
+ className,
62
114
  ...rest
63
115
  } = props
64
- const classes = useStyles()
65
116
  const titleCase = useTitleCase(propsTitleCase)
66
- const orientation = useContext(TabsOrientationContext)
117
+ const { orientation, variant } = useContext(TabsContext)
118
+ const isHorizontal = orientation === 'horizontal'
67
119
 
68
- const labelComponent = getLabelComponent({
120
+ const renderLabel = getLabelComponent({
69
121
  avatar,
70
122
  description,
71
123
  disabled,
@@ -81,18 +133,44 @@ export const Tab = forwardRef<HTMLDivElement, Props>(function Tab(props, ref) {
81
133
  ref={ref}
82
134
  tabIndex={0}
83
135
  disabled={disabled}
84
- label={labelComponent}
85
- icon={icon}
86
136
  value={value}
87
- selected={selected}
88
137
  onChange={onChange}
89
138
  onClick={onClick}
90
- classes={{
91
- root: classes[orientation],
92
- selected: classes.selected,
93
- wrapper: classes.wrapper,
139
+ slotProps={{
140
+ root: ownerState => {
141
+ return {
142
+ className: twMerge(
143
+ getOpacityClass(
144
+ ownerState.selected,
145
+ ownerState.disabled,
146
+ orientation
147
+ ),
148
+ rootClassesByOrientation(ownerState.selected)[orientation],
149
+ classesByVariant[variant],
150
+ ownerState.disabled
151
+ ? 'cursor-default text-gray-500'
152
+ : 'cursor-pointer',
153
+ ownerState.disabled && 'pointer-events-none',
154
+ icon && isHorizontal && 'min-h-0 pt-[0.5625rem] pr-6',
155
+ 'min-w-0 sm:min-w-[160px] md:min-w-[auto]',
156
+ 'border-0 cursor-pointer inline-flex outline-none',
157
+ 'items-center select-none align-middle appearance-none',
158
+ 'justify-center no-underline [-webkit-tap-highlight-color:transparent]',
159
+ 'normal-case whitespace-normal leading-4',
160
+ 'relative ',
161
+ className
162
+ ),
163
+ }
164
+ },
94
165
  }}
95
- />
166
+ >
167
+ <span
168
+ className={twJoin('w-full', wrapperClassesByOrientation[orientation])}
169
+ >
170
+ {renderLabel}
171
+ {icon && <span className='absolute right-0 mb-0 h-4'>{icon}</span>}
172
+ </span>
173
+ </MUITab>
96
174
  )
97
175
  })
98
176