@xyo-network/react-appbar 2.25.38 → 2.25.41

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.
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const DefaultMenuItems: React.FC;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import SettingsIcon from '@mui/icons-material/Settings';
3
+ import { List, ListItem, ListItemIcon, ListItemText } from '@mui/material';
4
+ import { ListItemButtonEx } from '@xyo-network/react-shared';
5
+ export const DefaultMenuItems = () => {
6
+ return (_jsx(List, { children: _jsx(ListItem, { disablePadding: true, children: _jsxs(ListItemButtonEx, { to: "/settings", children: [_jsx(ListItemIcon, { children: _jsx(SettingsIcon, {}) }), _jsx(ListItemText, { primary: "Settings" })] }) }) }));
7
+ };
8
+ //# sourceMappingURL=DefaultMenuItems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultMenuItems.js","sourceRoot":"","sources":["../../../../../src/components/Toolbar/System/DefaultMenuItems.tsx"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAa,GAAG,EAAE;IAC7C,OAAO,CACL,KAAC,IAAI,cACH,KAAC,QAAQ,IAAC,cAAc,kBACtB,MAAC,gBAAgB,IAAC,EAAE,EAAC,WAAW,aAC9B,KAAC,YAAY,cACX,KAAC,YAAY,KAAG,GACH,EACf,KAAC,YAAY,IAAC,OAAO,EAAC,UAAU,GAAG,IAClB,GACV,GACN,CACR,CAAA;AACH,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- /// <reference types="react" />
2
1
  import { FlexBoxProps } from '@xylabs/sdk-react';
2
+ import { ReactNode } from 'react';
3
3
  import { To } from 'react-router-dom';
4
4
  export interface SiteMenuItem {
5
5
  name: string;
@@ -9,6 +9,7 @@ export interface SiteMenuItem {
9
9
  }
10
10
  export interface SiteMenuProps extends FlexBoxProps {
11
11
  hideSettingsMenuItem?: boolean;
12
- menuItems?: SiteMenuItem[];
12
+ menu?: ReactNode;
13
+ side?: 'left' | 'right' | 'top' | 'bottom';
13
14
  }
14
15
  export declare const SiteMenu: React.FC<SiteMenuProps>;
@@ -1,35 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Menu as MenuIcon } from '@mui/icons-material';
3
- import { Menu, MenuItem } from '@mui/material';
4
- import { FlexRow, LinkEx } from '@xylabs/sdk-react';
5
- import { useRef, useState } from 'react';
6
- import { useNavigate } from 'react-router-dom';
7
- export const SiteMenu = ({ hideSettingsMenuItem, menuItems, ...props }) => {
8
- const [menuElement, setMenuElement] = useState(null);
9
- const open = Boolean(menuElement);
10
- const navigate = useNavigate();
11
- const handleMenuClose = () => {
12
- setMenuElement(null);
13
- };
14
- const ref = useRef(null);
15
- return (_jsxs(FlexRow, { alignItems: "stretch", ...props, children: [_jsx(LinkEx, { color: "inherit", onClick: () => {
16
- setMenuElement(ref.current);
17
- }, children: _jsx("div", { style: { alignItems: 'center', cursor: 'pointer', display: 'flex' }, ref: ref, children: _jsx(MenuIcon, { fontSize: "large" }) }) }), _jsxs(Menu, { anchorEl: menuElement, open: open, onClose: handleMenuClose, children: [menuItems?.map(({ name, to, href, onClick }) => {
18
- return (_jsx(MenuItem, { onClick: () => {
19
- if (onClick) {
20
- onClick();
21
- }
22
- else if (to) {
23
- navigate(to);
24
- }
25
- else if (href) {
26
- window.open(href);
27
- }
28
- handleMenuClose();
29
- }, disableRipple: true, children: name }, name));
30
- }), hideSettingsMenuItem ? null : (_jsx(MenuItem, { onClick: () => {
31
- navigate('/settings');
32
- handleMenuClose();
33
- }, disableRipple: true, children: "Settings" }))] })] }));
2
+ import MenuIcon from '@mui/icons-material/Menu';
3
+ import { Box, IconButton, SwipeableDrawer } from '@mui/material';
4
+ import { FlexRow } from '@xylabs/sdk-react';
5
+ import { useState } from 'react';
6
+ import { DefaultMenuItems } from './DefaultMenuItems';
7
+ export const SiteMenu = ({ side, menu, ...props }) => {
8
+ const [open, setOpen] = useState(false);
9
+ return (_jsxs(FlexRow, { alignItems: "stretch", ...props, children: [_jsx(IconButton, { size: "small", color: "inherit", onClick: () => {
10
+ setOpen(!open);
11
+ }, children: _jsx(MenuIcon, { fontSize: "large" }) }), _jsx(SwipeableDrawer, { anchor: side ?? 'left', open: open, onClose: () => setOpen(false), onOpen: () => setOpen(true), children: _jsx(Box, { width: "auto", role: "presentation", onClick: () => setOpen(false), onKeyDown: () => setOpen(false), children: menu ?? _jsx(DefaultMenuItems, {}) }) })] }));
34
12
  };
35
13
  //# sourceMappingURL=SiteMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SiteMenu.js","sourceRoot":"","sources":["../../../../../src/components/Toolbar/System/SiteMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAM,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAclD,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACjG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAA;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACjC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,cAAc,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAExB,OAAO,CACL,MAAC,OAAO,IAAC,UAAU,EAAC,SAAS,KAAK,KAAK,aACrC,KAAC,MAAM,IACL,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;oBACZ,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC7B,CAAC,YAED,cAAK,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,YAChF,KAAC,QAAQ,IAAC,QAAQ,EAAC,OAAO,GAAG,GACzB,GACC,EACT,MAAC,IAAI,IAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,aAC9D,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;wBAC9C,OAAO,CACL,KAAC,QAAQ,IAEP,OAAO,EAAE,GAAG,EAAE;gCACZ,IAAI,OAAO,EAAE;oCACX,OAAO,EAAE,CAAA;iCACV;qCAAM,IAAI,EAAE,EAAE;oCACb,QAAQ,CAAC,EAAE,CAAC,CAAA;iCACb;qCAAM,IAAI,IAAI,EAAE;oCACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iCAClB;gCACD,eAAe,EAAE,CAAA;4BACnB,CAAC,EACD,aAAa,kBAEZ,IAAI,IAbA,IAAI,CAcA,CACZ,CAAA;oBACH,CAAC,CAAC,EACD,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,WAAW,CAAC,CAAA;4BACrB,eAAe,EAAE,CAAA;wBACnB,CAAC,EACD,aAAa,+BAGJ,CACZ,IACI,IACC,CACX,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"SiteMenu.js","sourceRoot":"","sources":["../../../../../src/components/Toolbar/System/SiteMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,QAAQ,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAgB,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAerD,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC5E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,OAAO,CACL,MAAC,OAAO,IAAC,UAAU,EAAC,SAAS,KAAK,KAAK,aACrC,KAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,CAAC,IAAI,CAAC,CAAA;gBAChB,CAAC,YAED,KAAC,QAAQ,IAAC,QAAQ,EAAC,OAAO,GAAG,GAClB,EACb,KAAC,eAAe,IAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,YAC7G,KAAC,GAAG,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,YACjG,IAAI,IAAI,KAAC,gBAAgB,KAAG,GACzB,GACU,IACV,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -1,14 +1,13 @@
1
- /// <reference types="react" />
2
1
  import { ToolbarProps } from '@mui/material';
3
2
  import { SelectExProps } from '@xylabs/sdk-react';
4
3
  import { NetworkSelectExProps } from '@xyo-network/react-network';
5
- import { SiteMenuProps } from './SiteMenu';
4
+ import { ReactNode } from 'react';
6
5
  export interface SystemToolbarProps extends ToolbarProps {
7
6
  networkSelectProps?: NetworkSelectExProps;
8
7
  archiveSelectProps?: SelectExProps<string>;
9
8
  hideNetworkSelect?: boolean;
10
9
  hideArchiveSelect?: boolean;
11
- siteMenuProps?: SiteMenuProps;
10
+ menuItems?: ReactNode;
12
11
  darkModeButton?: boolean;
13
12
  authButton?: boolean;
14
13
  noMenu?: boolean;
@@ -6,7 +6,7 @@ import { AuthStatusIconButton } from '@xyo-network/react-auth';
6
6
  import { NetworkSelectEx } from '@xyo-network/react-network';
7
7
  import { DarkModeIconButton } from '@xyo-network/react-shared';
8
8
  import { SiteMenu } from './SiteMenu';
9
- export const SystemToolbar = ({ children, networkSelectProps, archiveSelectProps, hideNetworkSelect, hideArchiveSelect, siteMenuProps, darkModeButton = false, authButton = false, noMenu = false, ...props }) => {
10
- return (_jsxs(Toolbar, { ...props, children: [hideNetworkSelect ? null : (_jsx(FlexRow, { marginX: 0.5, maxWidth: 120, children: _jsx(Paper, { variant: "elevation", children: _jsx(NetworkSelectEx, { fullWidth: true, ...networkSelectProps }) }) })), hideArchiveSelect ? null : (_jsx(FlexRow, { marginX: 0.5, maxWidth: 120, children: _jsx(Paper, { variant: "elevation", children: _jsx(ArchiveSelectEx, { fullWidth: true, ...archiveSelectProps }) }) })), children, authButton ? _jsx(AuthStatusIconButton, { color: "inherit" }) : null, darkModeButton ? _jsx(DarkModeIconButton, { color: "inherit" }) : null, noMenu ? null : _jsx(SiteMenu, { ...siteMenuProps })] }));
9
+ export const SystemToolbar = ({ children, networkSelectProps, archiveSelectProps, hideNetworkSelect, hideArchiveSelect, menuItems, darkModeButton = false, authButton = false, noMenu = false, ...props }) => {
10
+ return (_jsxs(Toolbar, { ...props, children: [hideNetworkSelect ? null : (_jsx(FlexRow, { marginX: 0.5, maxWidth: 120, children: _jsx(Paper, { variant: "elevation", children: _jsx(NetworkSelectEx, { fullWidth: true, ...networkSelectProps }) }) })), hideArchiveSelect ? null : (_jsx(FlexRow, { marginX: 0.5, maxWidth: 120, children: _jsx(Paper, { variant: "elevation", children: _jsx(ArchiveSelectEx, { fullWidth: true, ...archiveSelectProps }) }) })), children, authButton ? _jsx(AuthStatusIconButton, { color: "inherit" }) : null, darkModeButton ? _jsx(DarkModeIconButton, { color: "inherit" }) : null, noMenu ? null : _jsx(SiteMenu, { menu: menuItems })] }));
11
11
  };
12
12
  //# sourceMappingURL=SystemToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemToolbar.js","sourceRoot":"","sources":["../../../../../src/components/Toolbar/System/SystemToolbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAwB,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAA;AAapD,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,KAAK,EACd,GAAG,KAAK,EACT,EAAE,EAAE;IACH,OAAO,CACL,MAAC,OAAO,OAAK,KAAK,aACf,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1B,KAAC,OAAO,IAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAClC,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,YACxB,KAAC,eAAe,IAAC,SAAS,WAAK,kBAAkB,GAAI,GAC/C,GACA,CACX,EACA,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1B,KAAC,OAAO,IAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAClC,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,YACxB,KAAC,eAAe,IAAC,SAAS,WAAK,kBAAkB,GAAI,GAC/C,GACA,CACX,EACA,QAAQ,EACR,UAAU,CAAC,CAAC,CAAC,KAAC,oBAAoB,IAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAC5D,cAAc,CAAC,CAAC,CAAC,KAAC,kBAAkB,IAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAC9D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,OAAK,aAAa,GAAI,IACxC,CACX,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"SystemToolbar.js","sourceRoot":"","sources":["../../../../../src/components/Toolbar/System/SystemToolbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAiB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAwB,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAarC,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,EAC1D,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,KAAK,EAClB,MAAM,GAAG,KAAK,EACd,GAAG,KAAK,EACT,EAAE,EAAE;IACH,OAAO,CACL,MAAC,OAAO,OAAK,KAAK,aACf,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1B,KAAC,OAAO,IAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAClC,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,YACxB,KAAC,eAAe,IAAC,SAAS,WAAK,kBAAkB,GAAI,GAC/C,GACA,CACX,EACA,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1B,KAAC,OAAO,IAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAClC,KAAC,KAAK,IAAC,OAAO,EAAC,WAAW,YACxB,KAAC,eAAe,IAAC,SAAS,WAAK,kBAAkB,GAAI,GAC/C,GACA,CACX,EACA,QAAQ,EACR,UAAU,CAAC,CAAC,CAAC,KAAC,oBAAoB,IAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAC5D,cAAc,CAAC,CAAC,CAAC,KAAC,kBAAkB,IAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAC9D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,SAAS,GAAI,IACtC,CACX,CAAA;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@emotion/react": "^11.9.0",
14
14
  "@emotion/styled": "^11.8.1",
15
- "@mui/icons-material": "^5.8.2",
16
- "@mui/material": "^5.8.2",
17
- "@xylabs/sdk-react": "^2.13.2",
18
- "@xyo-network/core": "^2.20.43",
19
- "@xyo-network/react-archive": "^2.25.38",
20
- "@xyo-network/react-archivist-api": "^2.25.38",
21
- "@xyo-network/react-auth": "^2.25.38",
22
- "@xyo-network/react-network": "^2.25.38",
23
- "@xyo-network/react-shared": "^2.25.38",
24
- "@xyo-network/react-theme": "^2.25.38",
15
+ "@mui/icons-material": "^5.8.3",
16
+ "@mui/material": "^5.8.3",
17
+ "@xylabs/sdk-react": "^2.13.7",
18
+ "@xyo-network/core": "^2.20.44",
19
+ "@xyo-network/react-archive": "^2.25.41",
20
+ "@xyo-network/react-archivist-api": "^2.25.41",
21
+ "@xyo-network/react-auth": "^2.25.41",
22
+ "@xyo-network/react-network": "^2.25.41",
23
+ "@xyo-network/react-shared": "^2.25.41",
24
+ "@xyo-network/react-theme": "^2.25.41",
25
25
  "lodash": "^4.17.21",
26
26
  "react": "^18.1.0",
27
27
  "react-dom": "^18.1.0",
@@ -33,14 +33,14 @@
33
33
  "devDependencies": {
34
34
  "@babel/core": "^7.18.2",
35
35
  "@babel/preset-env": "^7.18.2",
36
- "@storybook/addons": "^6.5.7",
37
- "@storybook/api": "^6.5.7",
38
- "@storybook/components": "^6.5.7",
39
- "@storybook/core-events": "^6.5.7",
40
- "@storybook/react": "^6.5.7",
41
- "@storybook/theming": "^6.5.7",
36
+ "@storybook/addons": "^6.5.8",
37
+ "@storybook/api": "^6.5.8",
38
+ "@storybook/components": "^6.5.8",
39
+ "@storybook/core-events": "^6.5.8",
40
+ "@storybook/react": "^6.5.8",
41
+ "@storybook/theming": "^6.5.8",
42
42
  "@types/lodash": "^4.14.182",
43
- "@xylabs/sdk-react": "^2.13.2",
43
+ "@xylabs/sdk-react": "^2.13.7",
44
44
  "@xylabs/ts-scripts": "^1.0.66",
45
45
  "@xylabs/tsconfig": "^1.0.13",
46
46
  "axios": "^0.27.2",
@@ -105,6 +105,6 @@
105
105
  },
106
106
  "sideEffects": false,
107
107
  "types": "dist/esm/index.d.ts",
108
- "version": "2.25.38",
108
+ "version": "2.25.41",
109
109
  "packageManager": "yarn@3.1.1"
110
110
  }
@@ -0,0 +1,18 @@
1
+ import SettingsIcon from '@mui/icons-material/Settings'
2
+ import { List, ListItem, ListItemIcon, ListItemText } from '@mui/material'
3
+ import { ListItemButtonEx } from '@xyo-network/react-shared'
4
+
5
+ export const DefaultMenuItems: React.FC = () => {
6
+ return (
7
+ <List>
8
+ <ListItem disablePadding>
9
+ <ListItemButtonEx to="/settings">
10
+ <ListItemIcon>
11
+ <SettingsIcon />
12
+ </ListItemIcon>
13
+ <ListItemText primary="Settings" />
14
+ </ListItemButtonEx>
15
+ </ListItem>
16
+ </List>
17
+ )
18
+ }
@@ -1,8 +1,10 @@
1
- import { Menu as MenuIcon } from '@mui/icons-material'
2
- import { Menu, MenuItem } from '@mui/material'
3
- import { FlexBoxProps, FlexRow, LinkEx } from '@xylabs/sdk-react'
4
- import { useRef, useState } from 'react'
5
- import { To, useNavigate } from 'react-router-dom'
1
+ import MenuIcon from '@mui/icons-material/Menu'
2
+ import { Box, IconButton, SwipeableDrawer } from '@mui/material'
3
+ import { FlexBoxProps, FlexRow } from '@xylabs/sdk-react'
4
+ import { ReactNode, useState } from 'react'
5
+ import { To } from 'react-router-dom'
6
+
7
+ import { DefaultMenuItems } from './DefaultMenuItems'
6
8
 
7
9
  export interface SiteMenuItem {
8
10
  name: string
@@ -13,65 +15,29 @@ export interface SiteMenuItem {
13
15
 
14
16
  export interface SiteMenuProps extends FlexBoxProps {
15
17
  hideSettingsMenuItem?: boolean
16
- menuItems?: SiteMenuItem[]
18
+ menu?: ReactNode
19
+ side?: 'left' | 'right' | 'top' | 'bottom'
17
20
  }
18
21
 
19
- export const SiteMenu: React.FC<SiteMenuProps> = ({ hideSettingsMenuItem, menuItems, ...props }) => {
20
- const [menuElement, setMenuElement] = useState<HTMLButtonElement | null>(null)
21
- const open = Boolean(menuElement)
22
- const navigate = useNavigate()
23
-
24
- const handleMenuClose = () => {
25
- setMenuElement(null)
26
- }
27
-
28
- const ref = useRef(null)
22
+ export const SiteMenu: React.FC<SiteMenuProps> = ({ side, menu, ...props }) => {
23
+ const [open, setOpen] = useState(false)
29
24
 
30
25
  return (
31
26
  <FlexRow alignItems="stretch" {...props}>
32
- <LinkEx
27
+ <IconButton
28
+ size="small"
33
29
  color="inherit"
34
30
  onClick={() => {
35
- setMenuElement(ref.current)
31
+ setOpen(!open)
36
32
  }}
37
33
  >
38
- <div style={{ alignItems: 'center', cursor: 'pointer', display: 'flex' }} ref={ref}>
39
- <MenuIcon fontSize="large" />
40
- </div>
41
- </LinkEx>
42
- <Menu anchorEl={menuElement} open={open} onClose={handleMenuClose}>
43
- {menuItems?.map(({ name, to, href, onClick }) => {
44
- return (
45
- <MenuItem
46
- key={name}
47
- onClick={() => {
48
- if (onClick) {
49
- onClick()
50
- } else if (to) {
51
- navigate(to)
52
- } else if (href) {
53
- window.open(href)
54
- }
55
- handleMenuClose()
56
- }}
57
- disableRipple
58
- >
59
- {name}
60
- </MenuItem>
61
- )
62
- })}
63
- {hideSettingsMenuItem ? null : (
64
- <MenuItem
65
- onClick={() => {
66
- navigate('/settings')
67
- handleMenuClose()
68
- }}
69
- disableRipple
70
- >
71
- Settings
72
- </MenuItem>
73
- )}
74
- </Menu>
34
+ <MenuIcon fontSize="large" />
35
+ </IconButton>
36
+ <SwipeableDrawer anchor={side ?? 'left'} open={open} onClose={() => setOpen(false)} onOpen={() => setOpen(true)}>
37
+ <Box width="auto" role="presentation" onClick={() => setOpen(false)} onKeyDown={() => setOpen(false)}>
38
+ {menu ?? <DefaultMenuItems />}
39
+ </Box>
40
+ </SwipeableDrawer>
75
41
  </FlexRow>
76
42
  )
77
43
  }
@@ -4,15 +4,16 @@ import { ArchiveSelectEx } from '@xyo-network/react-archive'
4
4
  import { AuthStatusIconButton } from '@xyo-network/react-auth'
5
5
  import { NetworkSelectEx, NetworkSelectExProps } from '@xyo-network/react-network'
6
6
  import { DarkModeIconButton } from '@xyo-network/react-shared'
7
+ import { ReactNode } from 'react'
7
8
 
8
- import { SiteMenu, SiteMenuProps } from './SiteMenu'
9
+ import { SiteMenu } from './SiteMenu'
9
10
 
10
11
  export interface SystemToolbarProps extends ToolbarProps {
11
12
  networkSelectProps?: NetworkSelectExProps
12
13
  archiveSelectProps?: SelectExProps<string>
13
14
  hideNetworkSelect?: boolean
14
15
  hideArchiveSelect?: boolean
15
- siteMenuProps?: SiteMenuProps
16
+ menuItems?: ReactNode
16
17
  darkModeButton?: boolean
17
18
  authButton?: boolean
18
19
  noMenu?: boolean
@@ -24,7 +25,7 @@ export const SystemToolbar: React.FC<SystemToolbarProps> = ({
24
25
  archiveSelectProps,
25
26
  hideNetworkSelect,
26
27
  hideArchiveSelect,
27
- siteMenuProps,
28
+ menuItems,
28
29
  darkModeButton = false,
29
30
  authButton = false,
30
31
  noMenu = false,
@@ -49,7 +50,7 @@ export const SystemToolbar: React.FC<SystemToolbarProps> = ({
49
50
  {children}
50
51
  {authButton ? <AuthStatusIconButton color="inherit" /> : null}
51
52
  {darkModeButton ? <DarkModeIconButton color="inherit" /> : null}
52
- {noMenu ? null : <SiteMenu {...siteMenuProps} />}
53
+ {noMenu ? null : <SiteMenu menu={menuItems} />}
53
54
  </Toolbar>
54
55
  )
55
56
  }