@toptal/picasso 22.4.2 → 24.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.
- package/AccountSelect/AccountSelect.js +3 -3
- package/AccountSelect/AccountSelect.js.map +1 -1
- package/AccountSelect/styles.d.ts +1 -1
- package/AccountSelect/styles.js +3 -0
- package/AccountSelect/styles.js.map +1 -1
- package/Autocomplete/Autocomplete.js +1 -1
- package/Autocomplete/Autocomplete.js.map +1 -1
- package/Autocomplete/NoOptionsMenuItem.js +1 -1
- package/Autocomplete/NoOptionsMenuItem.js.map +1 -1
- package/Autocomplete/OtherOptionMenuItem.js +1 -1
- package/Autocomplete/OtherOptionMenuItem.js.map +1 -1
- package/Badge/Badge.js +2 -2
- package/Badge/Badge.js.map +1 -1
- package/Logo/Logo.js +2 -2
- package/Logo/Logo.js.map +1 -1
- package/Menu/styles.d.ts +2 -1
- package/Menu/styles.js +4 -2
- package/Menu/styles.js.map +1 -1
- package/MenuItem/MenuItem.d.ts +1 -3
- package/MenuItem/MenuItem.js +2 -6
- package/MenuItem/MenuItem.js.map +1 -1
- package/MenuItem/styles.d.ts +1 -1
- package/MenuItem/styles.js +2 -12
- package/MenuItem/styles.js.map +1 -1
- package/NonNativeSelect/NonNativeSelect.js +3 -3
- package/NonNativeSelect/NonNativeSelect.js.map +1 -1
- package/NonNativeSelect/styles.d.ts +1 -1
- package/NonNativeSelect/styles.js +3 -0
- package/NonNativeSelect/styles.js.map +1 -1
- package/NonNativeSelectOption/NonNativeSelectOption.d.ts +1 -3
- package/NonNativeSelectOption/NonNativeSelectOption.js +2 -2
- package/NonNativeSelectOption/NonNativeSelectOption.js.map +1 -1
- package/NonNativeSelectOptions/NonNativeSelectOptions.d.ts +2 -2
- package/NonNativeSelectOptions/NonNativeSelectOptions.js +4 -7
- package/NonNativeSelectOptions/NonNativeSelectOptions.js.map +1 -1
- package/Page/Page.d.ts +2 -2
- package/Page/Page.js +1 -1
- package/Page/Page.js.map +1 -1
- package/{Sidebar/Sidebar.d.ts → PageSidebar/PageSidebar.d.ts} +13 -5
- package/{Sidebar/Sidebar.js → PageSidebar/PageSidebar.js} +33 -25
- package/PageSidebar/PageSidebar.js.map +1 -0
- package/PageSidebar/SidebarContextProvider.d.ts +12 -0
- package/PageSidebar/SidebarContextProvider.js +19 -0
- package/PageSidebar/SidebarContextProvider.js.map +1 -0
- package/PageSidebar/index.d.ts +5 -0
- package/PageSidebar/index.js +3 -0
- package/PageSidebar/index.js.map +1 -0
- package/PageSidebar/styles.d.ts +3 -0
- package/{Sidebar → PageSidebar}/styles.js +38 -2
- package/PageSidebar/styles.js.map +1 -0
- package/{Sidebar → PageSidebar}/types.d.ts +2 -0
- package/{Sidebar → PageSidebar}/types.js +0 -0
- package/{Sidebar → PageSidebar}/types.js.map +1 -1
- package/SidebarItem/SidebarItem.d.ts +4 -31
- package/SidebarItem/SidebarItem.js +19 -72
- package/SidebarItem/SidebarItem.js.map +1 -1
- package/SidebarItem/SidebarItemAccordion.d.ts +3 -0
- package/SidebarItem/SidebarItemAccordion.js +30 -0
- package/SidebarItem/SidebarItemAccordion.js.map +1 -0
- package/SidebarItem/SidebarItemBasic.d.ts +3 -0
- package/SidebarItem/SidebarItemBasic.js +12 -0
- package/SidebarItem/SidebarItemBasic.js.map +1 -0
- package/SidebarItem/SidebarItemCompact.d.ts +3 -0
- package/SidebarItem/SidebarItemCompact.js +19 -0
- package/SidebarItem/SidebarItemCompact.js.map +1 -0
- package/SidebarItem/SidebarItemHeader.d.ts +3 -0
- package/SidebarItem/SidebarItemHeader.js +46 -0
- package/SidebarItem/SidebarItemHeader.js.map +1 -0
- package/SidebarItem/SubMenuContextProvider.d.ts +16 -0
- package/SidebarItem/SubMenuContextProvider.js +12 -0
- package/SidebarItem/SubMenuContextProvider.js.map +1 -0
- package/SidebarItem/index.d.ts +3 -2
- package/SidebarItem/index.js +2 -1
- package/SidebarItem/index.js.map +1 -1
- package/SidebarItem/styles.d.ts +1 -1
- package/SidebarItem/styles.js +16 -15
- package/SidebarItem/styles.js.map +1 -1
- package/SidebarItem/types.d.ts +37 -0
- package/SidebarItem/types.js +2 -0
- package/SidebarItem/types.js.map +1 -0
- package/SidebarItemContent/SidebarItemContent.d.ts +14 -0
- package/SidebarItemContent/SidebarItemContent.js +64 -0
- package/SidebarItemContent/SidebarItemContent.js.map +1 -0
- package/SidebarItemContent/index.d.ts +4 -0
- package/SidebarItemContent/index.js +2 -0
- package/SidebarItemContent/index.js.map +1 -0
- package/SidebarItemContent/styles.d.ts +2 -0
- package/SidebarItemContent/styles.js +17 -0
- package/SidebarItemContent/styles.js.map +1 -0
- package/SidebarLogo/SidebarLogo.d.ts +5 -1
- package/SidebarLogo/SidebarLogo.js +14 -2
- package/SidebarLogo/SidebarLogo.js.map +1 -1
- package/SidebarLogo/styles.d.ts +2 -0
- package/SidebarLogo/styles.js +8 -0
- package/SidebarLogo/styles.js.map +1 -0
- package/SidebarMenu/SidebarMenu.js +24 -16
- package/SidebarMenu/SidebarMenu.js.map +1 -1
- package/index.d.ts +1 -2
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/utils/get-react-node-text-content.d.ts +15 -0
- package/utils/get-react-node-text-content.js +32 -0
- package/utils/get-react-node-text-content.js.map +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/index.js.map +1 -1
- package/Sidebar/Sidebar.js.map +0 -1
- package/Sidebar/index.d.ts +0 -4
- package/Sidebar/index.js +0 -2
- package/Sidebar/index.js.map +0 -1
- package/Sidebar/styles.d.ts +0 -3
- package/Sidebar/styles.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react';
|
|
2
1
|
import { BaseProps, StandardProps } from '@toptal/picasso-shared';
|
|
3
|
-
import {
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
|
+
import { VariantType } from './types';
|
|
4
4
|
export interface SmallScreenSidebarWrapperProps extends StandardProps {
|
|
5
5
|
children?: ReactNode;
|
|
6
6
|
}
|
|
@@ -9,12 +9,20 @@ export interface Props extends BaseProps {
|
|
|
9
9
|
variant?: VariantType;
|
|
10
10
|
/** Content */
|
|
11
11
|
children?: ReactNode;
|
|
12
|
+
/** Indicates Sidebar is collapsible */
|
|
13
|
+
collapsible?: boolean;
|
|
14
|
+
/** Indicates Sidebar is collapsed as default */
|
|
15
|
+
defaultCollapsed?: boolean;
|
|
16
|
+
/** Callback to notify when sidebar is having collapsed or default state */
|
|
17
|
+
testIds?: {
|
|
18
|
+
collapseButton?: string;
|
|
19
|
+
container?: string;
|
|
20
|
+
};
|
|
12
21
|
}
|
|
13
|
-
export declare const
|
|
14
|
-
export declare const Sidebar: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
export declare const PageSidebar: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
|
|
15
23
|
declare const _default: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>> & {
|
|
16
24
|
Menu: React.ForwardRefExoticComponent<import("../SidebarMenu/SidebarMenu").Props & React.RefAttributes<HTMLUListElement>>;
|
|
17
|
-
Item: import("@toptal/picasso-shared").OverridableComponent<import("../SidebarItem/
|
|
25
|
+
Item: import("@toptal/picasso-shared").OverridableComponent<import("../SidebarItem/types").Props>;
|
|
18
26
|
Logo: React.ForwardRefExoticComponent<import("../SidebarLogo/SidebarLogo").Props & React.RefAttributes<HTMLDivElement>>;
|
|
19
27
|
};
|
|
20
28
|
export default _default;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import React, { forwardRef, useState } from 'react';
|
|
2
1
|
import { makeStyles } from '@material-ui/core/styles';
|
|
3
|
-
import cx from 'classnames';
|
|
4
2
|
import { useSidebar } from '@toptal/picasso-provider';
|
|
3
|
+
import cx from 'classnames';
|
|
4
|
+
import React, { forwardRef, useCallback, useEffect, useState } from 'react';
|
|
5
5
|
import Button from '../Button';
|
|
6
6
|
import Container from '../Container';
|
|
7
7
|
import Dropdown from '../Dropdown';
|
|
8
|
-
import {
|
|
9
|
-
import { useBreakpoint, useIsomorphicLayoutEffect } from '../utils';
|
|
10
|
-
import SidebarMenu from '../SidebarMenu';
|
|
8
|
+
import { BackMinor16, ChevronRight16, Close16, Overview16 } from '../Icon';
|
|
11
9
|
import SidebarItem from '../SidebarItem';
|
|
12
10
|
import SidebarLogo from '../SidebarLogo';
|
|
11
|
+
import SidebarMenu from '../SidebarMenu';
|
|
12
|
+
import { noop, useBreakpoint } from '../utils';
|
|
13
|
+
import { SidebarContextProvider } from './SidebarContextProvider';
|
|
13
14
|
import styles from './styles';
|
|
14
15
|
const SmallScreenSidebarWrapper = ({ classes, children }) => {
|
|
15
16
|
var _a;
|
|
@@ -26,42 +27,49 @@ const SmallScreenSidebarWrapper = ({ classes, children }) => {
|
|
|
26
27
|
}, onOpen: handleShowSidebar, onClose: handleHideSidebar },
|
|
27
28
|
React.createElement(Button.Circular, { icon: showSidebar ? React.createElement(Close16, null) : React.createElement(Overview16, null), variant: 'transparent' })));
|
|
28
29
|
};
|
|
29
|
-
export const SidebarContext = React.createContext({
|
|
30
|
-
expandedItemKey: null,
|
|
31
|
-
setExpandedItemKey: () => { }
|
|
32
|
-
});
|
|
33
30
|
const useStyles = makeStyles(styles, {
|
|
34
|
-
name: '
|
|
31
|
+
name: 'PageSidebar'
|
|
35
32
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const { children, variant = 'light', className, style } = props;
|
|
33
|
+
export const PageSidebar = forwardRef(function Sidebar(props, ref) {
|
|
34
|
+
const { children, variant = 'light', className, style, collapsible, defaultCollapsed, testIds } = props;
|
|
39
35
|
const classes = useStyles();
|
|
40
36
|
const { setHasSidebar } = useSidebar();
|
|
41
|
-
|
|
37
|
+
const [isCollapsed, setIsCollapsed] = useState(!!defaultCollapsed);
|
|
38
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
39
|
+
const [expandedItemKey, setExpandedItemKey] = useState(null);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
// Clear expanded submenu on sidebar collapse
|
|
42
|
+
if (isCollapsed) {
|
|
43
|
+
setExpandedItemKey(null);
|
|
44
|
+
}
|
|
45
|
+
}, [isCollapsed]);
|
|
46
|
+
useEffect(() => {
|
|
42
47
|
setHasSidebar(true);
|
|
43
48
|
return function cleanup() {
|
|
44
49
|
setHasSidebar(false);
|
|
45
50
|
};
|
|
46
51
|
}, [setHasSidebar]);
|
|
47
52
|
const isCompactLayout = useBreakpoint(['small', 'medium']);
|
|
48
|
-
const
|
|
49
|
-
|
|
53
|
+
const handleCollapseButtonClick = useCallback(() => {
|
|
54
|
+
setIsCollapsed(previousState => !previousState);
|
|
55
|
+
}, [setIsCollapsed]);
|
|
56
|
+
const sidebar = (React.createElement(Container, { ref: ref, flex: true, direction: 'column', style: style, className: cx(classes.root, className, classes[variant], {
|
|
57
|
+
[classes.rootCollapsed]: collapsible && isCollapsed
|
|
58
|
+
}), "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.container, onMouseEnter: collapsible ? () => setIsHovered(true) : noop, onMouseLeave: collapsible ? () => setIsHovered(false) : noop },
|
|
50
59
|
React.createElement("div", { className: classes.spacer }),
|
|
51
|
-
React.createElement(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
} }, children)));
|
|
60
|
+
collapsible && (React.createElement(Button.Circular, { className: cx(classes.collapseButton, {
|
|
61
|
+
[classes.buttonVisible]: isHovered
|
|
62
|
+
}), onClick: handleCollapseButtonClick, icon: isCollapsed ? React.createElement(ChevronRight16, null) : React.createElement(BackMinor16, null), "aria-label": 'collapse sidebar', variant: 'primary', "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.collapseButton })),
|
|
63
|
+
React.createElement(SidebarContextProvider, { isCollapsed: isCollapsed, isHovered: isHovered, variant: variant, expandedItemKey: expandedItemKey, setExpandedItemKey: setExpandedItemKey }, children)));
|
|
56
64
|
return isCompactLayout ? (React.createElement(SmallScreenSidebarWrapper, { classes: classes }, sidebar)) : (sidebar);
|
|
57
65
|
});
|
|
58
|
-
|
|
66
|
+
PageSidebar.defaultProps = {
|
|
59
67
|
variant: 'light'
|
|
60
68
|
};
|
|
61
|
-
|
|
62
|
-
export default Object.assign(
|
|
69
|
+
PageSidebar.displayName = 'PageSidebar';
|
|
70
|
+
export default Object.assign(PageSidebar, {
|
|
63
71
|
Menu: SidebarMenu,
|
|
64
72
|
Item: SidebarItem,
|
|
65
73
|
Logo: SidebarLogo
|
|
66
74
|
});
|
|
67
|
-
//# sourceMappingURL=
|
|
75
|
+
//# sourceMappingURL=PageSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageSidebar.js","sourceRoot":"","sources":["../../src/PageSidebar/PageSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SidebarContextProps, VariantType } from './types';
|
|
3
|
+
export interface Props {
|
|
4
|
+
variant?: VariantType;
|
|
5
|
+
isCollapsed: boolean;
|
|
6
|
+
isHovered: boolean;
|
|
7
|
+
expandedItemKey: number | null;
|
|
8
|
+
setExpandedItemKey: (expanded: number | null) => void;
|
|
9
|
+
children?: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare const SidebarContextProvider: ({ children, isCollapsed, variant, expandedItemKey, setExpandedItemKey, isHovered }: Props) => JSX.Element;
|
|
12
|
+
export declare const useSidebarContext: () => SidebarContextProps;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { noop } from '../utils';
|
|
3
|
+
const SidebarContext = React.createContext({
|
|
4
|
+
expandedItemKey: null,
|
|
5
|
+
setExpandedItemKey: noop,
|
|
6
|
+
isHovered: false,
|
|
7
|
+
isCollapsed: false
|
|
8
|
+
});
|
|
9
|
+
export const SidebarContextProvider = ({ children, isCollapsed, variant, expandedItemKey, setExpandedItemKey, isHovered }) => {
|
|
10
|
+
return (React.createElement(SidebarContext.Provider, { value: {
|
|
11
|
+
expandedItemKey,
|
|
12
|
+
setExpandedItemKey,
|
|
13
|
+
isCollapsed,
|
|
14
|
+
isHovered,
|
|
15
|
+
variant
|
|
16
|
+
} }, children));
|
|
17
|
+
};
|
|
18
|
+
export const useSidebarContext = () => useContext(SidebarContext);
|
|
19
|
+
//# sourceMappingURL=SidebarContextProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarContextProvider.js","sourceRoot":"","sources":["../../src/PageSidebar/SidebarContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,UAAU,EAAE,MAAM,OAAO,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAG/B,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAsB;IAC9D,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,IAAI;IACxB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAA;AAWF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,QAAQ,EACR,WAAW,EACX,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,SAAS,EACH,EAAE,EAAE;IACV,OAAO,CACL,oBAAC,cAAc,CAAC,QAAQ,IACtB,KAAK,EAAE;YACL,eAAe;YACf,kBAAkB;YAClB,WAAW;YACX,SAAS;YACT,OAAO;SACR,IAEA,QAAQ,CACe,CAC3B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { OmitInternalProps } from '@toptal/picasso-shared';
|
|
2
|
+
import { Props } from './PageSidebar';
|
|
3
|
+
export { default } from './PageSidebar';
|
|
4
|
+
export declare type PageSidebarProps = OmitInternalProps<Props>;
|
|
5
|
+
export { SidebarContextProvider, useSidebarContext, Props as SidebarContextProviderProps } from './SidebarContextProvider';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/PageSidebar/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAGvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAElB,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Theme } from '@material-ui/core/styles';
|
|
2
|
+
declare const _default: ({ palette, screens, zIndex, transitions }: Theme) => import("@material-ui/styles").StyleRules<{}, "dark" | "light" | "root" | "spacer" | "responsiveWrapper" | "responsiveWrapperContent" | "collapseButton" | "buttonVisible" | "rootCollapsed">;
|
|
3
|
+
export default _default;
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { createStyles } from '@material-ui/core/styles';
|
|
2
|
-
|
|
2
|
+
// decided to use a custom shadow for the sidebar's collapse button
|
|
3
|
+
const COLLAPSE_BUTTON_SHADOW = '0 0 0 1px rgba(0, 0, 0, 0.04), 0 0 8px 0 rgba(0, 0, 0, 0.16)';
|
|
4
|
+
export default ({ palette, screens, zIndex, transitions }) => createStyles({
|
|
3
5
|
root: {
|
|
4
6
|
height: '100%',
|
|
5
7
|
width: '14.75rem',
|
|
6
8
|
boxShadow: `inset -1px 0px 0px 0px ${palette.grey.darker}`,
|
|
7
|
-
padding: '1rem 0',
|
|
9
|
+
padding: '1rem 0 0.5rem',
|
|
8
10
|
fontSize: '1rem',
|
|
11
|
+
position: 'relative',
|
|
12
|
+
transition: `width ${transitions.duration.enteringScreen}ms ease-in-out`,
|
|
9
13
|
[screens('small', 'medium')]: {
|
|
10
14
|
width: '100vw',
|
|
11
15
|
overflowY: 'scroll'
|
|
16
|
+
},
|
|
17
|
+
'&::before': {
|
|
18
|
+
position: 'absolute',
|
|
19
|
+
content: '""',
|
|
20
|
+
left: 0,
|
|
21
|
+
top: 0,
|
|
22
|
+
width: '15.50rem',
|
|
23
|
+
height: '100%'
|
|
12
24
|
}
|
|
13
25
|
},
|
|
14
26
|
responsiveWrapper: {
|
|
@@ -43,6 +55,30 @@ export default ({ palette, screens, zIndex }) => createStyles({
|
|
|
43
55
|
dark: {
|
|
44
56
|
boxShadow: `inset -1px 0px 0px 0px ${palette.grey.darker}`,
|
|
45
57
|
backgroundColor: palette.grey.darker
|
|
58
|
+
},
|
|
59
|
+
collapseButton: {
|
|
60
|
+
position: 'absolute',
|
|
61
|
+
right: '-0.75rem',
|
|
62
|
+
top: '0.75rem',
|
|
63
|
+
visibility: 'hidden',
|
|
64
|
+
color: palette.grey.dark,
|
|
65
|
+
backgroundColor: palette.common.white,
|
|
66
|
+
borderRadius: '50%',
|
|
67
|
+
boxShadow: COLLAPSE_BUTTON_SHADOW,
|
|
68
|
+
'&:hover': {
|
|
69
|
+
color: palette.common.white,
|
|
70
|
+
backgroundColor: palette.primary.main
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
buttonVisible: {
|
|
74
|
+
visibility: 'visible'
|
|
75
|
+
},
|
|
76
|
+
rootCollapsed: {
|
|
77
|
+
width: '5rem',
|
|
78
|
+
transition: `width ${transitions.duration.leavingScreen}ms ease-in-out`,
|
|
79
|
+
'&::before': {
|
|
80
|
+
width: '5.75rem'
|
|
81
|
+
}
|
|
46
82
|
}
|
|
47
83
|
});
|
|
48
84
|
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/PageSidebar/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE9D,mEAAmE;AACnE,MAAM,sBAAsB,GAC1B,8DAA8D,CAAA;AAEhE,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAS,EAAE,EAAE,CAClE,YAAY,CAAC;IACX,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,0BAA0B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;QAC1D,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,SAAS,WAAW,CAAC,QAAQ,CAAC,cAAc,gBAAgB;QAExE,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE;YAC5B,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,QAAQ;SACpB;QAED,WAAW,EAAE;YACX,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,MAAM;SACf;KACF;IACD,iBAAiB,EAAE;QACjB,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB;IACD,wBAAwB,EAAE;QACxB,SAAS,EAAE,sBAAsB;QAEjC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE;YAC5B,SAAS,EAAE,oBAAoB,CAAC,+BAA+B;SAChE;QAED,uDAAuD;QACvD,2DAA2D;QAC3D,uCAAuC,EAAE;YACvC,SAAS,EAAE,sBAAsB;YAEjC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE;gBAC5B,SAAS,EAAE,oBAAoB,CAAC,+BAA+B;aAChE;SACF;KACF;IACD,MAAM,EAAE;QACN,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,MAAM;KACf;IACD,KAAK,EAAE;QACL,SAAS,EAAE,0BAA0B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC5D,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;KACtC;IACD,IAAI,EAAE;QACJ,SAAS,EAAE,0BAA0B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;QAC1D,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;KACrC;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,SAAS;QACd,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;QACxB,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QACrC,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,sBAAsB;QAEjC,SAAS,EAAE;YACT,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;YAC3B,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;SACtC;KACF;IACD,aAAa,EAAE;QACb,UAAU,EAAE,SAAS;KACtB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,SAAS,WAAW,CAAC,QAAQ,CAAC,aAAa,gBAAgB;QAEvE,WAAW,EAAE;YACX,KAAK,EAAE,SAAS;SACjB;KACF;CACF,CAAC,CAAA"}
|
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/PageSidebar/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,33 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { MenuItemAttributes } from '../MenuItem';
|
|
5
|
-
import { VariantType } from '../Sidebar/types';
|
|
6
|
-
export declare const SubMenuContext: React.Context<{
|
|
7
|
-
parentSidebarItemIndex?: number | null | undefined;
|
|
8
|
-
}>;
|
|
9
|
-
export interface Props extends BaseProps, TextLabelProps, MenuItemAttributes {
|
|
10
|
-
/** Pass icon to be used as part of item */
|
|
11
|
-
icon?: ReactElement;
|
|
12
|
-
/** Highlights the item as selected */
|
|
13
|
-
selected?: boolean;
|
|
14
|
-
/** Whether to render disabled item */
|
|
15
|
-
disabled?: boolean;
|
|
16
|
-
/** If item has menu defines can menu be collapsed */
|
|
17
|
-
collapsible?: boolean;
|
|
18
|
-
/** Renders nested sidebar menu */
|
|
19
|
-
menu?: ReactElement;
|
|
20
|
-
/** Component name to render the menu item as */
|
|
21
|
-
as?: ElementType<MenuItemProps>;
|
|
22
|
-
variant?: VariantType;
|
|
23
|
-
isExpanded?: boolean;
|
|
24
|
-
expand?: (index: number | null) => void;
|
|
25
|
-
index?: number | null;
|
|
26
|
-
/** Callback when item is clicked */
|
|
27
|
-
onClick?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
28
|
-
/** Callback when item is hovered */
|
|
29
|
-
onMouseEnter?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
|
|
30
|
-
}
|
|
31
|
-
export declare const SidebarItem: OverridableComponent<Props>;
|
|
1
|
+
import { OverridableComponent } from '@toptal/picasso-shared';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
import { Props } from './types';
|
|
32
4
|
export declare const getSelectedSubMenu: (sidebarItem: ReactElement<Props>) => {} | null | undefined;
|
|
5
|
+
export declare const SidebarItem: OverridableComponent<Props>;
|
|
33
6
|
export default SidebarItem;
|
|
@@ -1,75 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import React, { forwardRef, memo, useMemo } from 'react';
|
|
13
|
-
import { makeStyles } from '@material-ui/core/styles';
|
|
14
|
-
import cx from 'classnames';
|
|
15
|
-
import { useTitleCase } from '@toptal/picasso-shared';
|
|
16
|
-
import Container from '../Container';
|
|
17
|
-
import Typography from '../Typography';
|
|
18
|
-
import Accordion from '../Accordion';
|
|
19
|
-
import MenuItem from '../MenuItem';
|
|
20
|
-
import { ArrowDownMinor16 } from '../Icon';
|
|
21
|
-
import styles from './styles';
|
|
1
|
+
import React, { forwardRef, memo } from 'react';
|
|
22
2
|
import noop from '../utils/noop';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
const useStyles = makeStyles(styles, {
|
|
27
|
-
name: 'PicassoSidebarItem'
|
|
28
|
-
});
|
|
29
|
-
export const SidebarItem = memo(forwardRef(function SidebarItem(props, ref) {
|
|
30
|
-
const { as, children, className, collapsible, disabled, expand = noop, icon, index, isExpanded, menu, onClick = noop, selected, style, titleCase: propsTitleCase, variant = 'light' } = props, rest = __rest(props, ["as", "children", "className", "collapsible", "disabled", "expand", "icon", "index", "isExpanded", "menu", "onClick", "selected", "style", "titleCase", "variant"]);
|
|
31
|
-
const classes = useStyles();
|
|
32
|
-
const hasIcon = Boolean(icon);
|
|
33
|
-
const hasMenu = Boolean(menu);
|
|
34
|
-
const subMenu = useMemo(() => (React.createElement(SubMenuContext.Provider, { value: {
|
|
35
|
-
parentSidebarItemIndex: index
|
|
36
|
-
} }, menu)), [index, menu]);
|
|
37
|
-
const titleCase = useTitleCase(propsTitleCase);
|
|
38
|
-
const handleMenuItemClick = (event) => {
|
|
39
|
-
if (!hasMenu) {
|
|
40
|
-
onClick(event);
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
const handleAccordionChange = (event, expansion) => {
|
|
44
|
-
event.stopPropagation();
|
|
45
|
-
if (expansion) {
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
47
|
-
expand(index);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const resolvedChildren = typeof children === 'string' ? (React.createElement(Typography, { className: classes.labelContent, color: 'inherit', size: 'medium', titleCase: titleCase, noWrap: true }, children)) : (children);
|
|
51
|
-
const menuItem = (React.createElement(MenuItem, Object.assign({}, rest, { as: as, ref: ref, style: style, className: cx(classes.root, classes.noWrap, classes.roundedBorder, classes[variant], {
|
|
52
|
-
[classes.selected]: !hasMenu && selected,
|
|
53
|
-
[classes.collapsible]: hasMenu && collapsible
|
|
54
|
-
}, className), onClick: handleMenuItemClick, selected: !hasMenu && selected, disabled: disabled, variant: variant, nonSelectable: true }),
|
|
55
|
-
React.createElement(Container, { className: classes.noWrap, inline: true, flex: true, alignItems: 'center' },
|
|
56
|
-
icon,
|
|
57
|
-
React.createElement(Container, { className: cx(classes.label, classes.noWrap, {
|
|
58
|
-
[classes.withIcon]: hasIcon
|
|
59
|
-
}), flex: true, alignItems: 'center' }, resolvedChildren))));
|
|
60
|
-
if (hasMenu && collapsible) {
|
|
61
|
-
return (React.createElement(Accordion, { onChange: handleAccordionChange, classes: {
|
|
62
|
-
summary: classes.collapsibleWrapper,
|
|
63
|
-
details: hasIcon ? classes.nestedMenuWithIcon : classes.nestedMenu,
|
|
64
|
-
content: classes.content
|
|
65
|
-
}, content: subMenu, borders: 'none', disabled: disabled, expanded: isExpanded, expandIcon: React.createElement(ArrowDownMinor16, { className: cx(classes.expandIcon, classes[`${variant}ExpandIcon`], {
|
|
66
|
-
[classes.expandIconDisabled]: disabled
|
|
67
|
-
}) }) }, menuItem));
|
|
68
|
-
}
|
|
69
|
-
return (React.createElement(React.Fragment, null,
|
|
70
|
-
menuItem,
|
|
71
|
-
hasMenu && (React.createElement("div", { className: hasIcon ? classes.nestedMenuWithIcon : classes.nestedMenu }, subMenu))));
|
|
72
|
-
}));
|
|
3
|
+
import { SidebarItemBasic } from './SidebarItemBasic';
|
|
4
|
+
import { SidebarItemCompact } from './SidebarItemCompact';
|
|
5
|
+
import { SidebarItemAccordion } from './SidebarItemAccordion';
|
|
73
6
|
export const getSelectedSubMenu = (sidebarItem) => {
|
|
74
7
|
const menu = sidebarItem.props.menu;
|
|
75
8
|
if (!menu) {
|
|
@@ -78,11 +11,25 @@ export const getSelectedSubMenu = (sidebarItem) => {
|
|
|
78
11
|
const subMenuItems = React.Children.toArray(menu.props.children);
|
|
79
12
|
return subMenuItems.find(menuChild => menuChild.props.selected);
|
|
80
13
|
};
|
|
14
|
+
export const SidebarItem = memo(forwardRef(function SidebarItem(props, ref) {
|
|
15
|
+
const { compact, collapsible, menu } = props;
|
|
16
|
+
const hasMenu = menu != null;
|
|
17
|
+
let SidebarItemImpl = SidebarItemBasic;
|
|
18
|
+
if (hasMenu && compact) {
|
|
19
|
+
SidebarItemImpl = SidebarItemCompact;
|
|
20
|
+
}
|
|
21
|
+
else if (hasMenu && collapsible) {
|
|
22
|
+
SidebarItemImpl = SidebarItemAccordion;
|
|
23
|
+
}
|
|
24
|
+
return React.createElement(SidebarItemImpl, Object.assign({}, props, { ref: ref }));
|
|
25
|
+
}));
|
|
81
26
|
SidebarItem.defaultProps = {
|
|
82
27
|
collapsible: false,
|
|
83
28
|
onClick: noop,
|
|
84
29
|
selected: false,
|
|
85
|
-
expand: noop
|
|
30
|
+
expand: noop,
|
|
31
|
+
variant: 'light',
|
|
32
|
+
compact: false
|
|
86
33
|
};
|
|
87
34
|
SidebarItem.displayName = 'SidebarItem';
|
|
88
35
|
export default SidebarItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarItem.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SidebarItem.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAgB,MAAM,OAAO,CAAA;AAE7D,OAAO,IAAI,MAAM,eAAe,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAG7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAgC,EAAE,EAAE;IACrE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAA;IAEnC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEhE,OAAO,YAAY,CAAC,IAAI,CACtB,SAAS,CAAC,EAAE,CAAE,SAAiC,CAAC,KAAK,CAAC,QAAQ,CAC/D,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAgC,IAAI,CAC1D,UAAU,CAAqB,SAAS,WAAW,CAAC,KAAK,EAAE,GAAG;IAC5D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAE5C,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,CAAA;IAE5B,IAAI,eAAe,GAAG,gBAAgB,CAAA;IAEtC,IAAI,OAAO,IAAI,OAAO,EAAE;QACtB,eAAe,GAAG,kBAAkB,CAAA;KACrC;SAAM,IAAI,OAAO,IAAI,WAAW,EAAE;QACjC,eAAe,GAAG,oBAAoB,CAAA;KACvC;IAED,OAAO,oBAAC,eAAe,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AACjD,CAAC,CAAC,CACH,CAAA;AAED,WAAW,CAAC,YAAY,GAAG;IACzB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,KAAK;CACf,CAAA;AAED,WAAW,CAAC,WAAW,GAAG,aAAa,CAAA;AAEvC,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
import cx from 'classnames';
|
|
3
|
+
import React, { forwardRef, useCallback } from 'react';
|
|
4
|
+
import Accordion from '../Accordion';
|
|
5
|
+
import { ArrowDownMinor16 } from '../Icon';
|
|
6
|
+
import styles from './styles';
|
|
7
|
+
import { SubMenuContextProvider } from './SubMenuContextProvider';
|
|
8
|
+
import { SidebarItemHeader } from './SidebarItemHeader';
|
|
9
|
+
const useStyles = makeStyles(styles, {
|
|
10
|
+
name: 'PicassoSidebarItemAccordion'
|
|
11
|
+
});
|
|
12
|
+
export const SidebarItemAccordion = forwardRef(function SidebarItemAccordion(props, ref) {
|
|
13
|
+
const { expand, index, menu, disabled, variant, isExpanded, icon, compact } = props;
|
|
14
|
+
const classes = useStyles();
|
|
15
|
+
const handleAccordionChange = useCallback((event, isAccordionExpanded) => {
|
|
16
|
+
event.stopPropagation();
|
|
17
|
+
if (isAccordionExpanded) {
|
|
18
|
+
expand === null || expand === void 0 ? void 0 : expand(index !== null && index !== void 0 ? index : null);
|
|
19
|
+
}
|
|
20
|
+
}, [index, expand]);
|
|
21
|
+
const content = (React.createElement(SubMenuContextProvider, { parentMenu: { icon, compact }, parentSidebarItemIndex: index }, menu));
|
|
22
|
+
return (React.createElement(Accordion, { onChange: handleAccordionChange, classes: {
|
|
23
|
+
summary: classes.collapsibleWrapper,
|
|
24
|
+
content: classes.content
|
|
25
|
+
}, content: content, borders: 'none', disabled: disabled, expanded: isExpanded, expandIcon: React.createElement(ArrowDownMinor16, { className: cx(classes.expandIcon, classes[`${variant}ExpandIcon`], {
|
|
26
|
+
[classes.expandIconDisabled]: disabled
|
|
27
|
+
}) }) },
|
|
28
|
+
React.createElement(SidebarItemHeader, Object.assign({}, props, { ref: ref }))));
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=SidebarItemAccordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItemAccordion.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItemAccordion.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,KAAK,EAAE,EAAe,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEnE,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,6BAA6B;CACpC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAC5C,SAAS,oBAAoB,CAAC,KAAY,EAAE,GAAG;IAC7C,MAAM,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,IAAI,EACJ,OAAO,EACR,GAAG,KAAK,CAAA;IAET,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,KAAsB,EAAE,mBAA4B,EAAE,EAAE;QACvD,KAAK,CAAC,eAAe,EAAE,CAAA;QAEvB,IAAI,mBAAmB,EAAE;YACvB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,CAAC,CAAA;SACxB;IACH,CAAC,EACD,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB,CAAA;IAED,MAAM,OAAO,GAAG,CACd,oBAAC,sBAAsB,IACrB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAC7B,sBAAsB,EAAE,KAAK,IAE5B,IAAI,CACkB,CAC1B,CAAA;IAED,OAAO,CACL,oBAAC,SAAS,IACR,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC,kBAAkB;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,EACD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAC,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,UAAU,EACpB,UAAU,EACR,oBAAC,gBAAgB,IACf,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,OAAO,YAAY,CAAC,EAAE;gBACjE,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,QAAQ;aACvC,CAAC,GACF;QAGJ,oBAAC,iBAAiB,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,IAAI,CAChC,CACb,CAAA;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { SidebarItemHeader } from './SidebarItemHeader';
|
|
3
|
+
import { SubMenuContextProvider } from './SubMenuContextProvider';
|
|
4
|
+
export const SidebarItemBasic = forwardRef(function BasicSidebarItem(props, ref) {
|
|
5
|
+
const { menu, index, icon, compact } = props;
|
|
6
|
+
const hasMenu = menu != null;
|
|
7
|
+
return (React.createElement(React.Fragment, null,
|
|
8
|
+
React.createElement(SidebarItemHeader, Object.assign({}, props, { ref: ref })),
|
|
9
|
+
hasMenu && (React.createElement("div", null,
|
|
10
|
+
React.createElement(SubMenuContextProvider, { parentMenu: { icon, compact }, parentSidebarItemIndex: index }, menu)))));
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=SidebarItemBasic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItemBasic.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItemBasic.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CACxC,SAAS,gBAAgB,CAAC,KAAY,EAAE,GAAG;IACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAE5C,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,CAAA;IAE5B,OAAO,CACL;QACE,oBAAC,iBAAiB,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,IAAI;QACzC,OAAO,IAAI,CACV;YACE,oBAAC,sBAAsB,IACrB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAC7B,sBAAsB,EAAE,KAAK,IAE5B,IAAI,CACkB,CACrB,CACP,CACA,CACJ,CAAA;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import Container from '../Container';
|
|
4
|
+
import Dropdown from '../Dropdown';
|
|
5
|
+
import styles from './styles';
|
|
6
|
+
import { SubMenuContextProvider } from './SubMenuContextProvider';
|
|
7
|
+
import { SidebarItemHeader } from './SidebarItemHeader';
|
|
8
|
+
const useStyles = makeStyles(styles, {
|
|
9
|
+
name: 'PicassoSidebarItemCompact'
|
|
10
|
+
});
|
|
11
|
+
export const SidebarItemCompact = forwardRef(function CompactSidebarItem(props, ref) {
|
|
12
|
+
const { menu, index, compact, icon } = props;
|
|
13
|
+
const classes = useStyles();
|
|
14
|
+
const subMenu = (React.createElement(SubMenuContextProvider, { parentMenu: { compact, icon }, parentSidebarItemIndex: index }, menu));
|
|
15
|
+
return (React.createElement(Dropdown, { placement: 'right-start', content: subMenu },
|
|
16
|
+
React.createElement(Container, { className: classes.collapsibleWrapper },
|
|
17
|
+
React.createElement(SidebarItemHeader, Object.assign({}, props, { ref: ref })))));
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=SidebarItemCompact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItemCompact.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItemCompact.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,QAAQ,MAAM,aAAa,CAAA;AAClC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,2BAA2B;CAClC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAC1C,SAAS,kBAAkB,CAAC,KAAY,EAAE,GAAG;IAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAE5C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,MAAM,OAAO,GAAG,CACd,oBAAC,sBAAsB,IACrB,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAC7B,sBAAsB,EAAE,KAAK,IAE5B,IAAI,CACkB,CAC1B,CAAA;IAED,OAAO,CACL,oBAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO;QAChD,oBAAC,SAAS,IAAC,SAAS,EAAE,OAAO,CAAC,kBAAkB;YAC9C,oBAAC,iBAAiB,oBAAK,KAAK,IAAE,GAAG,EAAE,GAAG,IAAI,CAChC,CACH,CACZ,CAAA;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
13
|
+
import cx from 'classnames';
|
|
14
|
+
import React, { forwardRef, useCallback } from 'react';
|
|
15
|
+
import MenuItem from '../MenuItem';
|
|
16
|
+
import SidebarItemContent from '../SidebarItemContent';
|
|
17
|
+
import styles from './styles';
|
|
18
|
+
import { useSubMenuContext } from './SubMenuContextProvider';
|
|
19
|
+
const useStyles = makeStyles(styles, {
|
|
20
|
+
name: 'PicassoSidebarItemHeader'
|
|
21
|
+
});
|
|
22
|
+
export const SidebarItemHeader = forwardRef(function SidebarItemHeader(props, ref) {
|
|
23
|
+
const { className, disabled, menu, selected, compact, variant = 'light', onClick, collapsible, testIds,
|
|
24
|
+
// these props are being destructured only for the purpose of excluding them from `...rest`
|
|
25
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
26
|
+
icon, isSubMenu, badge, isExpanded, expand, index } = props,
|
|
27
|
+
/* eslint-enable */
|
|
28
|
+
rest = __rest(props, ["className", "disabled", "menu", "selected", "compact", "variant", "onClick", "collapsible", "testIds", "icon", "isSubMenu", "badge", "isExpanded", "expand", "index"]);
|
|
29
|
+
const classes = useStyles();
|
|
30
|
+
const { parentMenu } = useSubMenuContext();
|
|
31
|
+
const hasMenu = menu != null;
|
|
32
|
+
const handleMenuItemClick = useCallback((event) => {
|
|
33
|
+
if (!hasMenu) {
|
|
34
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
35
|
+
}
|
|
36
|
+
}, [hasMenu, onClick]);
|
|
37
|
+
const subMenuClass = parentMenu &&
|
|
38
|
+
(parentMenu.icon ? classes.nestedMenuWithIcon : classes.nestedMenu);
|
|
39
|
+
return (React.createElement(MenuItem, Object.assign({}, rest, { classes: classes, ref: ref, className: cx(classes.root, classes.noWrap, classes.roundedBorder, classes[variant], {
|
|
40
|
+
[classes.compact]: compact,
|
|
41
|
+
[classes.selected]: !hasMenu && selected,
|
|
42
|
+
[classes.collapsible]: hasMenu && (collapsible || compact)
|
|
43
|
+
}, (parentMenu === null || parentMenu === void 0 ? void 0 : parentMenu.compact) ? classes.nestedMenuNoMargin : subMenuClass, className), onClick: handleMenuItemClick, selected: !hasMenu && selected, disabled: disabled, variant: variant, nonSelectable: true, "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.header }),
|
|
44
|
+
React.createElement(SidebarItemContent, Object.assign({}, props))));
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=SidebarItemHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItemHeader.js","sourceRoot":"","sources":["../../src/SidebarItem/SidebarItemHeader.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAS,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,QAAQ,MAAM,aAAa,CAAA;AAClC,OAAO,kBAAkB,MAAM,uBAAuB,CAAA;AACtD,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE;IAC1C,IAAI,EAAE,0BAA0B;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CACzC,SAAS,iBAAiB,CAAC,KAAY,EAAE,GAAG;IAC1C,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,OAAO,GAAG,OAAO,EACjB,OAAO,EACP,WAAW,EACX,OAAO;IACP,2FAA2F;IAC3F,sDAAsD;IACtD,IAAI,EACJ,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,KAAK,KAGH,KAAK;IAFP,mBAAmB;IAChB,IAAI,UACL,KAAK,EApBH,uKAoBL,CAAQ,CAAA;IAET,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,MAAM,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAAA;IAE1C,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,CAAA;IAE5B,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,KAAgD,EAAE,EAAE;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAA;SACjB;IACH,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,CAAC,CACnB,CAAA;IAED,MAAM,YAAY,GAChB,UAAU;QACV,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAErE,OAAO,CACL,oBAAC,QAAQ,oBACH,IAAI,IACR,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,OAAO,CAAC,EAChB;YACE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO;YAC1B,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,IAAI,QAAQ;YACxC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC;SAC3D,EACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,EAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,EAC/D,SAAS,CACV,EACD,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,OAAO,IAAI,QAAQ,EAC9B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,aAAa,uBACA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;QAE5B,oBAAC,kBAAkB,oBAAK,KAAK,EAAI,CACxB,CACZ,CAAA;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface ContextProps {
|
|
3
|
+
parentSidebarItemIndex?: number | null;
|
|
4
|
+
isSubMenu: boolean;
|
|
5
|
+
parentMenu: {
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
compact?: boolean;
|
|
8
|
+
} | null;
|
|
9
|
+
}
|
|
10
|
+
export interface Props {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
parentSidebarItemIndex?: number | null;
|
|
13
|
+
parentMenu: ContextProps['parentMenu'];
|
|
14
|
+
}
|
|
15
|
+
export declare const SubMenuContextProvider: ({ children, parentMenu, parentSidebarItemIndex }: Props) => JSX.Element;
|
|
16
|
+
export declare const useSubMenuContext: () => ContextProps;
|