@toptal/picasso-menu 1.0.17 → 2.0.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/Menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAKzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAQvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,WAAW,KAAM,SAAQ,SAAS,EAAE,cAAc,CAAC,gBAAgB,CAAC;IACxE,oDAAoD;IACpD,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAMD,eAAO,MAAM,IAAI,gFA4Cf,CAAA;AASF,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/Menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAOvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,WAAW,KAAM,SAAQ,SAAS,EAAE,cAAc,CAAC,gBAAgB,CAAC;IACxE,oDAAoD;IACpD,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,eAAO,MAAM,IAAI,gFAmGf,CAAA;AASF,eAAe,IAAI,CAAA"}
@@ -10,29 +10,59 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import React, { forwardRef } from 'react';
13
- import cx from 'classnames';
14
- import { MenuList as MUIMenuList } from '@material-ui/core';
15
- import { makeStyles } from '@material-ui/core/styles';
13
+ import { twMerge } from '@toptal/picasso-tailwind-merge';
16
14
  import { BackMinor16 } from '@toptal/picasso-icons';
17
15
  import { Typography } from '@toptal/picasso-typography';
18
16
  import { MenuItem } from '../MenuItem';
19
17
  import { useMenu } from './hooks';
20
18
  import MenuContext from './MenuContext';
21
- import styles from './styles';
22
- const useStyles = makeStyles(styles, {
23
- name: 'PicassoMenu',
24
- });
25
19
  export const Menu = forwardRef(function Menu(props, ref) {
26
- const { children, className, style, variant, allowNestedNavigation, testIds } = props, rest = __rest(props, ["children", "className", "style", "variant", "allowNestedNavigation", "testIds"]);
27
- const classes = useStyles();
20
+ const { children, className, style, variant, allowNestedNavigation, testIds, role = 'menu' } = props, rest = __rest(props, ["children", "className", "style", "variant", "allowNestedNavigation", "testIds", "role"]);
28
21
  const { context, innerMenu, hasBackButton } = useMenu({ variant });
29
22
  const { onBackClick, onMenuMouseLeave } = context;
30
- return (React.createElement(MenuContext.Provider, { value: context }, innerMenu !== null && innerMenu !== void 0 ? innerMenu : (React.createElement(MUIMenuList, Object.assign({}, rest, { ref: ref, className: cx(classes.root, className), style: style, onMouseLeave: onMenuMouseLeave }),
23
+ let activeItemIndex = -1;
24
+ // Find the first selected or first non-disabled item
25
+ React.Children.map(children, (child, index) => {
26
+ if (!React.isValidElement(child)) {
27
+ return;
28
+ }
29
+ if (process.env.NODE_ENV !== 'production') {
30
+ // check if child is a fragment
31
+ if (child.type === React.Fragment) {
32
+ console.error([
33
+ "The Menu component doesn't accept a Fragment as a child.",
34
+ 'Consider providing an array instead.',
35
+ ].join('\n'));
36
+ }
37
+ }
38
+ if (!child.props.disabled) {
39
+ if (child.props.selected) {
40
+ activeItemIndex = index;
41
+ }
42
+ else if (activeItemIndex === -1) {
43
+ activeItemIndex = index;
44
+ }
45
+ }
46
+ });
47
+ const items = React.Children.map(children, (child, index) => {
48
+ if (!React.isValidElement(child)) {
49
+ return;
50
+ }
51
+ if (index === activeItemIndex) {
52
+ const newChildProps = {};
53
+ if (child.props.tabIndex === undefined) {
54
+ newChildProps.tabIndex = 0;
55
+ }
56
+ return React.cloneElement(child, newChildProps);
57
+ }
58
+ return child;
59
+ });
60
+ return (React.createElement(MenuContext.Provider, { value: context }, innerMenu !== null && innerMenu !== void 0 ? innerMenu : (React.createElement("ul", Object.assign({}, rest, { ref: ref, className: twMerge('relative list-none', 'outline-none shadow-1', 'py-2 px-0 m-0', 'rounded-sm', className), style: style, onMouseLeave: onMenuMouseLeave, role: role, tabIndex: -1 }),
31
61
  hasBackButton && allowNestedNavigation && (React.createElement(MenuItem, { key: 'back', "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.menuItem, onClick: onBackClick },
32
62
  React.createElement(Typography, { size: 'xsmall', color: 'dark-grey', variant: 'body' },
33
- React.createElement(BackMinor16, { className: classes.backButtonIcon }),
63
+ React.createElement(BackMinor16, { className: '-mt-[1px] mr-1 -ml-[5px] align-middle' }),
34
64
  "Back"))),
35
- children))));
65
+ items))));
36
66
  });
37
67
  Menu.defaultProps = {
38
68
  variant: 'slide',
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/Menu/Menu.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,MAAM,MAAM,UAAU,CAAA;AAa7B,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,aAAa;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAA0B,SAAS,IAAI,CACnE,KAAK,EACL,GAAG;IAEH,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAO,EACP,qBAAqB,EACrB,OAAO,KAEL,KAAK,EADJ,IAAI,UACL,KAAK,EARH,iFAQL,CAAQ,CAAA;IACT,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAClE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA;IAEjD,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,IACjC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,CACZ,oBAAC,WAAW,oBACN,IAAI,IACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EACtC,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,gBAAgB;QAE7B,aAAa,IAAI,qBAAqB,IAAI,CACzC,oBAAC,QAAQ,IACP,GAAG,EAAC,MAAM,iBACG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAC9B,OAAO,EAAE,WAAW;YAEpB,oBAAC,UAAU,IAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,WAAW,EAAC,OAAO,EAAC,MAAM;gBACxD,oBAAC,WAAW,IAAC,SAAS,EAAE,OAAO,CAAC,cAAc,GAAI;uBAEvC,CACJ,CACZ;QACA,QAAQ,CACG,CACf,CACoB,CACxB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,YAAY,GAAG;IAClB,OAAO,EAAE,OAAO;IAChB,qBAAqB,EAAE,IAAI;CAC5B,CAAA;AAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;AAEzB,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../src/Menu/Menu.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.d.ts","sourceRoot":"","sources":["../../../src/MenuItem/MenuItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,OAAO,CAAA;AACd,OAAO,KAA6B,MAAM,OAAO,CAAA;AAKjD,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAA;AAQ/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAKjE,oBAAY,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,oBAAY,kBAAkB,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAC9D,cAAc,CAAC,cAAc,CAAC,GAC9B,mBAAmB,CAAA;AAErB,MAAM,WAAW,KAAM,SAAQ,SAAS,EAAE,cAAc,EAAE,kBAAkB;IAC1E,2CAA2C;IAC3C,EAAE,CAAC,EAAE,WAAW,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gCAAgC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAA;IAC5C,wBAAwB;IACxB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,iCAAiC;IACjC,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,OAAO,MAAM,CAAC,CAAA;IACjD,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAA;IACpE,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAA;CAC1E;AAMD,eAAO,MAAM,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CAwI/C,CAAA;AAUF,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"MenuItem.d.ts","sourceRoot":"","sources":["../../../src/MenuItem/MenuItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,OAAO,CAAA;AACd,OAAO,KAA6B,MAAM,OAAO,CAAA;AAEjD,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,wBAAwB,CAAA;AAO/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAIjE,oBAAY,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,oBAAY,kBAAkB,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAC9D,cAAc,CAAC,cAAc,CAAC,GAC9B,mBAAmB,CAAA;AAErB,MAAM,WAAW,KAAM,SAAQ,SAAS,EAAE,cAAc,EAAE,kBAAkB;IAC1E,2CAA2C;IAC3C,EAAE,CAAC,EAAE,WAAW,CAAA;IAChB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gCAAgC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAA;IAC5C,wBAAwB;IACxB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,iCAAiC;IACjC,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,OAAO,MAAM,CAAC,CAAA;IACjD,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAA;IACpE,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,CAAA;CAC1E;AAgDD,eAAO,MAAM,QAAQ,EAAE,oBAAoB,CAAC,KAAK,CA6I/C,CAAA;AAUF,eAAe,QAAQ,CAAA"}
@@ -10,24 +10,42 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import React, { forwardRef, useRef } from 'react';
13
- import cx from 'classnames';
14
- import { makeStyles } from '@material-ui/core/styles';
15
- import { MenuItem as MUIMenuItem } from '@material-ui/core';
13
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge';
16
14
  import { useTitleCase } from '@toptal/picasso-shared';
17
- import { Container } from '@toptal/picasso-container';
18
15
  import { ChevronMinor16, CheckMinor16 } from '@toptal/picasso-icons';
19
16
  import { Paper } from '@toptal/picasso-paper';
20
17
  import { Popper } from '@toptal/picasso-popper';
21
18
  import { Link } from '@toptal/picasso-link';
22
19
  import { ClickAwayListener, toTitleCase } from '@toptal/picasso-utils';
23
20
  import { useMenuItem } from './hooks';
24
- import styles from './styles';
25
- const useStyles = makeStyles(styles, {
26
- name: 'PicassoMenuItem',
27
- });
21
+ const getFontColor = ({ variant, highlighted, }) => {
22
+ if (variant === 'light') {
23
+ return 'text-black';
24
+ }
25
+ if (variant === 'dark') {
26
+ return ['focus:text-white', highlighted ? 'text-white' : 'text-gray-500'];
27
+ }
28
+ };
29
+ const getBackgroundAndActionStyles = ({ variant, highlighted, nonSelectable, }) => {
30
+ let bgColor = 'bg-transparent';
31
+ let actionBgColor;
32
+ if (variant === 'dark') {
33
+ actionBgColor =
34
+ !nonSelectable && 'hover:bg-graphite-700 focus:bg-graphite-700';
35
+ if (highlighted) {
36
+ bgColor = 'bg-graphite-700';
37
+ }
38
+ }
39
+ if (variant === 'light') {
40
+ actionBgColor = !nonSelectable && 'hover:bg-blue-100 focus:bg-blue-100';
41
+ if (highlighted) {
42
+ bgColor = 'bg-blue-100';
43
+ }
44
+ }
45
+ return [bgColor, actionBgColor];
46
+ };
28
47
  export const MenuItem = forwardRef(function MenuItem(props, ref) {
29
- const { as = 'li', children, description, className, disabled, disableGutters, menu, titleCase: propTitleCase, selected, checkmarked, style, value, variant = 'light', nonSelectable, onClick, onMouseEnter, icon, avatar } = props, rest = __rest(props, ["as", "children", "description", "className", "disabled", "disableGutters", "menu", "titleCase", "selected", "checkmarked", "style", "value", "variant", "nonSelectable", "onClick", "onMouseEnter", "icon", "avatar"]);
30
- const classes = useStyles();
48
+ const { as = 'li', children, description, className, disabled, disableGutters, menu, titleCase: propTitleCase, selected, checkmarked, style, value, variant = 'light', role = 'menuitem', nonSelectable, onClick, onMouseEnter, icon, avatar, tabIndex: tabIndexProp } = props, rest = __rest(props, ["as", "children", "description", "className", "disabled", "disableGutters", "menu", "titleCase", "selected", "checkmarked", "style", "value", "variant", "role", "nonSelectable", "onClick", "onMouseEnter", "icon", "avatar", "tabIndex"]);
31
49
  const anchorRef = useRef(null);
32
50
  const titleCase = useTitleCase(propTitleCase);
33
51
  const { isOpened, onItemClick, onItemMouseEnter, onAwayClick } = useMenuItem({
@@ -35,32 +53,28 @@ export const MenuItem = forwardRef(function MenuItem(props, ref) {
35
53
  onClick,
36
54
  onMouseEnter,
37
55
  });
56
+ const highlighted = selected || isOpened;
38
57
  const isLink = as === Link && rest.href;
58
+ const Component = isLink ? 'a' : as || 'li';
39
59
  const isIconWrapperVisible = checkmarked !== undefined || icon;
60
+ let tabIndex;
61
+ if (!disabled) {
62
+ tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;
63
+ }
40
64
  return (React.createElement(React.Fragment, null,
41
- React.createElement(MUIMenuItem, Object.assign({}, rest, { ref: ref,
65
+ React.createElement(Component, Object.assign({ ref: ref, role: role, tabIndex: tabIndex,
42
66
  // replace Picasso Link with Anchor to not applying Picasso
43
67
  // Link component styles, this is the only difference between them now
44
- component: isLink ? 'a' : as, classes: {
45
- gutters: classes.gutters,
46
- selected: classes.selected,
47
- }, className: cx(classes.root, classes[variant], className, {
48
- [classes.nonSelectable]: nonSelectable,
49
- [classes.disabled]: disabled,
50
- }), disabled: disabled, disableGutters: disableGutters, onClick: onItemClick, onMouseEnter: onItemMouseEnter, style: style, value: value, selected: selected || isOpened }),
51
- React.createElement(Container, { ref: anchorRef, className: classes.itemWrapper, flex: true, direction: 'row' },
52
- avatar && React.createElement(Container, { right: 'xsmall' }, avatar),
53
- React.createElement(Container, { flex: true, direction: 'column', className: classes.content },
54
- React.createElement(Container, { flex: true, alignItems: 'center' },
55
- isIconWrapperVisible && (React.createElement(Container, { className: classes.iconContainer, flex: true, inline: true, right: 'xsmall' }, checkmarked ? React.createElement(CheckMinor16, null) : icon)),
56
- typeof children === 'string' ? (React.createElement("span", { className: cx(classes.stringContent, {
57
- [classes.stringContentSemibold]: checkmarked,
58
- }), style: style }, titleCase ? toTitleCase(children) : children)) : (children),
59
- menu && (React.createElement(Container, { flex: true, inline: true, left: 'xsmall' },
68
+ className: twMerge(getFontColor({ variant, highlighted }), getBackgroundAndActionStyles({ variant, highlighted, nonSelectable }), disableGutters ? 'p-0' : 'px-4 py-[0.375rem]', 'min-w-[9rem] w-auto min-h-[unset] sm:min-h-[auto] md:min-h-0 relative cursor-pointer', 'transition-colors duration-150 ease-in-out', 'overflow-hidden whitespace-normal text-left no-underline', 'flex items-center justify-start', 'outline-none appearance-none leading-4', className, disabled && 'text-gray-600 opacity-100 pointer-events-none'), "aria-disabled": Boolean(disabled), disabled: disabled, onClick: onItemClick, onMouseEnter: onItemMouseEnter, style: style, value: value }, rest),
69
+ React.createElement("div", { ref: anchorRef, className: 'flex flex-1 max-w-full' },
70
+ avatar && React.createElement("div", { className: 'mr-2' }, avatar),
71
+ React.createElement("div", { className: 'flex flex-col flex-1 min-w-0' },
72
+ React.createElement("div", { className: 'flex items-center' },
73
+ isIconWrapperVisible && (React.createElement("div", { className: 'w-4 inline-flex mr-2' }, checkmarked ? React.createElement(CheckMinor16, null) : icon)),
74
+ typeof children === 'string' ? (React.createElement("span", { className: twJoin('flex-1 text-md leading-5', checkmarked && 'text-semibold'), style: style }, titleCase ? toTitleCase(children) : children)) : (children),
75
+ menu && (React.createElement("div", { className: 'inline-flex ml-2' },
60
76
  React.createElement(ChevronMinor16, { color: '' })))),
61
- description && (React.createElement(Container, { className: cx(classes.description, {
62
- [classes.descriptionDisabled]: disabled,
63
- }), left: isIconWrapperVisible ? 'medium' : undefined, top: 0.25 }, description))))),
77
+ description && (React.createElement("div", { className: twJoin('text-2xs mt-1', !disabled && 'text-graphite-700', isIconWrapperVisible && 'ml-6') }, description))))),
64
78
  menu && isOpened && (React.createElement(Popper, { anchorEl: anchorRef.current, placement: 'right-start', open: true, autoWidth: false, enableCompactMode: true, popperOptions: {
65
79
  modifiers: {
66
80
  offset: {
@@ -69,7 +83,7 @@ export const MenuItem = forwardRef(function MenuItem(props, ref) {
69
83
  },
70
84
  } },
71
85
  React.createElement(ClickAwayListener, { onClickAway: onAwayClick },
72
- React.createElement(Paper, { className: classes.paper }, menu))))));
86
+ React.createElement(Paper, { className: 'max-h-[14.75rem] overflow-y-auto' }, menu))))));
73
87
  });
74
88
  MenuItem.defaultProps = {
75
89
  as: 'li',
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../src/MenuItem/MenuItem.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../src/MenuItem/MenuItem.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-menu",
3
- "version": "1.0.17",
3
+ "version": "2.0.0",
4
4
  "description": "Toptal UI components library - Menu",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,24 +22,24 @@
22
22
  },
23
23
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
24
24
  "dependencies": {
25
- "@toptal/picasso-avatar": "4.0.0",
26
- "@toptal/picasso-container": "1.0.3",
25
+ "@toptal/picasso-avatar": "5.0.0",
26
+ "@toptal/picasso-container": "2.0.0",
27
27
  "@toptal/picasso-icons": "1.5.0",
28
- "@toptal/picasso-link": "1.0.3",
29
- "@toptal/picasso-paper": "2.0.4",
28
+ "@toptal/picasso-link": "2.0.0",
29
+ "@toptal/picasso-paper": "3.0.0",
30
30
  "@toptal/picasso-popper": "1.0.3",
31
31
  "@toptal/picasso-shared": "15.0.0",
32
- "@toptal/picasso-typography": "2.0.2",
32
+ "@toptal/picasso-typography": "3.0.0",
33
33
  "@toptal/picasso-utils": "1.0.3",
34
- "classnames": "^2.5.1"
34
+ "@mui/base": "5.0.0-beta.40"
35
35
  },
36
36
  "sideEffects": [
37
37
  "**/styles.ts",
38
38
  "**/styles.js"
39
39
  ],
40
40
  "peerDependencies": {
41
- "@material-ui/core": "4.12.4",
42
- "@toptal/picasso-provider": "*",
41
+ "@toptal/picasso-tailwind-merge": "^1.0.1",
42
+ "@toptal/picasso-tailwind": ">=2.7",
43
43
  "react": ">=16.12.0 < 19.0.0"
44
44
  },
45
45
  "exports": {
@@ -47,7 +47,8 @@
47
47
  "./styles": "./dist-package/src/styles.js"
48
48
  },
49
49
  "devDependencies": {
50
- "@toptal/picasso-provider": "4.2.1",
50
+ "@toptal/picasso-tailwind-merge": "1.2.0",
51
+ "@toptal/picasso-provider": "5.0.0",
51
52
  "@toptal/picasso-test-utils": "1.1.1"
52
53
  },
53
54
  "files": [
package/src/Menu/Menu.tsx CHANGED
@@ -1,9 +1,6 @@
1
1
  import type { HTMLAttributes } from 'react'
2
2
  import React, { forwardRef } from 'react'
3
- import cx from 'classnames'
4
- import { MenuList as MUIMenuList } from '@material-ui/core'
5
- import type { Theme } from '@material-ui/core/styles'
6
- import { makeStyles } from '@material-ui/core/styles'
3
+ import { twMerge } from '@toptal/picasso-tailwind-merge'
7
4
  import type { BaseProps } from '@toptal/picasso-shared'
8
5
  import { BackMinor16 } from '@toptal/picasso-icons'
9
6
  import { Typography } from '@toptal/picasso-typography'
@@ -11,7 +8,6 @@ import { Typography } from '@toptal/picasso-typography'
11
8
  import { MenuItem } from '../MenuItem'
12
9
  import { useMenu } from './hooks'
13
10
  import MenuContext from './MenuContext'
14
- import styles from './styles'
15
11
  import type { MenuVariant } from './types'
16
12
 
17
13
  export interface Props extends BaseProps, HTMLAttributes<HTMLUListElement> {
@@ -24,10 +20,6 @@ export interface Props extends BaseProps, HTMLAttributes<HTMLUListElement> {
24
20
  }
25
21
  }
26
22
 
27
- const useStyles = makeStyles<Theme>(styles, {
28
- name: 'PicassoMenu',
29
- })
30
-
31
23
  export const Menu = forwardRef<HTMLUListElement, Props>(function Menu(
32
24
  props,
33
25
  ref
@@ -39,21 +31,76 @@ export const Menu = forwardRef<HTMLUListElement, Props>(function Menu(
39
31
  variant,
40
32
  allowNestedNavigation,
41
33
  testIds,
34
+ role = 'menu',
42
35
  ...rest
43
36
  } = props
44
- const classes = useStyles()
45
37
  const { context, innerMenu, hasBackButton } = useMenu({ variant })
46
38
  const { onBackClick, onMenuMouseLeave } = context
47
39
 
40
+ let activeItemIndex = -1
41
+
42
+ // Find the first selected or first non-disabled item
43
+ React.Children.map(children, (child, index) => {
44
+ if (!React.isValidElement(child)) {
45
+ return
46
+ }
47
+
48
+ if (process.env.NODE_ENV !== 'production') {
49
+ // check if child is a fragment
50
+ if (child.type === React.Fragment) {
51
+ console.error(
52
+ [
53
+ "The Menu component doesn't accept a Fragment as a child.",
54
+ 'Consider providing an array instead.',
55
+ ].join('\n')
56
+ )
57
+ }
58
+ }
59
+
60
+ if (!child.props.disabled) {
61
+ if (child.props.selected) {
62
+ activeItemIndex = index
63
+ } else if (activeItemIndex === -1) {
64
+ activeItemIndex = index
65
+ }
66
+ }
67
+ })
68
+
69
+ const items = React.Children.map(children, (child, index) => {
70
+ if (!React.isValidElement(child)) {
71
+ return
72
+ }
73
+
74
+ if (index === activeItemIndex) {
75
+ const newChildProps: { tabIndex?: number } = {}
76
+
77
+ if (child.props.tabIndex === undefined) {
78
+ newChildProps.tabIndex = 0
79
+ }
80
+
81
+ return React.cloneElement(child, newChildProps)
82
+ }
83
+
84
+ return child
85
+ })
86
+
48
87
  return (
49
88
  <MenuContext.Provider value={context}>
50
89
  {innerMenu ?? (
51
- <MUIMenuList
90
+ <ul
52
91
  {...rest}
53
92
  ref={ref}
54
- className={cx(classes.root, className)}
93
+ className={twMerge(
94
+ 'relative list-none',
95
+ 'outline-none shadow-1',
96
+ 'py-2 px-0 m-0',
97
+ 'rounded-sm',
98
+ className
99
+ )}
55
100
  style={style}
56
101
  onMouseLeave={onMenuMouseLeave}
102
+ role={role}
103
+ tabIndex={-1}
57
104
  >
58
105
  {hasBackButton && allowNestedNavigation && (
59
106
  <MenuItem
@@ -62,13 +109,13 @@ export const Menu = forwardRef<HTMLUListElement, Props>(function Menu(
62
109
  onClick={onBackClick}
63
110
  >
64
111
  <Typography size='xsmall' color='dark-grey' variant='body'>
65
- <BackMinor16 className={classes.backButtonIcon} />
112
+ <BackMinor16 className='-mt-[1px] mr-1 -ml-[5px] align-middle' />
66
113
  Back
67
114
  </Typography>
68
115
  </MenuItem>
69
116
  )}
70
- {children}
71
- </MUIMenuList>
117
+ {items}
118
+ </ul>
72
119
  )}
73
120
  </MenuContext.Provider>
74
121
  )
@@ -6,27 +6,27 @@ exports[`Menu renders 1`] = `
6
6
  class="Picasso-root"
7
7
  >
8
8
  <ul
9
- class="MuiList-root PicassoMenu-root"
9
+ class="relative list-none outline-none shadow-1 py-2 px-0 m-0 rounded-sm"
10
10
  role="menu"
11
11
  tabindex="-1"
12
12
  >
13
13
  <li
14
14
  aria-disabled="false"
15
- class="MuiButtonBase-root MuiListItem-root MuiMenuItem-root PicassoMenuItem-root PicassoMenuItem-light MuiMenuItem-gutters PicassoMenuItem-gutters MuiListItem-gutters MuiListItem-button"
15
+ class="text-black bg-transparent hover:bg-blue focus:bg-blue px-4 py-[0.375rem] min-w w-auto min-h sm:min-h md:min-h relative cursor-pointer transition-colors duration-150 ease-in overflow-hidden whitespace-normal text-left no-underline flex items-center justify-start outline-none appearance-none leading-4"
16
16
  role="menuitem"
17
17
  tabindex="0"
18
18
  >
19
19
  <div
20
- class="PicassoContainer-flex PicassoMenuItem-itemWrapper"
20
+ class="flex flex-1 max-w"
21
21
  >
22
22
  <div
23
- class="PicassoContainer-flex PicassoContainer-column PicassoMenuItem-content"
23
+ class="flex flex-col flex-1 min-w"
24
24
  >
25
25
  <div
26
- class="PicassoContainer-centerAlignItems PicassoContainer-flex"
26
+ class="flex items-center"
27
27
  >
28
28
  <span
29
- class="PicassoMenuItem-stringContent"
29
+ class="flex-1 text-md leading-5"
30
30
  >
31
31
  1
32
32
  </span>
@@ -36,21 +36,21 @@ exports[`Menu renders 1`] = `
36
36
  </li>
37
37
  <li
38
38
  aria-disabled="false"
39
- class="MuiButtonBase-root MuiListItem-root MuiMenuItem-root PicassoMenuItem-root PicassoMenuItem-light MuiMenuItem-gutters PicassoMenuItem-gutters MuiListItem-gutters MuiListItem-button"
39
+ class="text-black bg-transparent hover:bg-blue focus:bg-blue px-4 py-[0.375rem] min-w w-auto min-h sm:min-h md:min-h relative cursor-pointer transition-colors duration-150 ease-in overflow-hidden whitespace-normal text-left no-underline flex items-center justify-start outline-none appearance-none leading-4"
40
40
  role="menuitem"
41
41
  tabindex="-1"
42
42
  >
43
43
  <div
44
- class="PicassoContainer-flex PicassoMenuItem-itemWrapper"
44
+ class="flex flex-1 max-w"
45
45
  >
46
46
  <div
47
- class="PicassoContainer-flex PicassoContainer-column PicassoMenuItem-content"
47
+ class="flex flex-col flex-1 min-w"
48
48
  >
49
49
  <div
50
- class="PicassoContainer-centerAlignItems PicassoContainer-flex"
50
+ class="flex items-center"
51
51
  >
52
52
  <span
53
- class="PicassoMenuItem-stringContent"
53
+ class="flex-1 text-md leading-5"
54
54
  >
55
55
  2
56
56
  </span>