@visin/frontend-core 1.3.0 → 1.4.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.
@@ -2,11 +2,6 @@ import { ReactNode } from 'react';
2
2
  interface NavItemBase {
3
3
  text: string;
4
4
  icon: ReactNode;
5
- /**
6
- * Heading this item is listed under. Consecutive items sharing a group are
7
- * drawn together beneath one heading; an item without one gets no heading.
8
- */
9
- group?: string;
10
5
  }
11
6
  /** A section of the current app, navigated to client-side. */
12
7
  export interface AppLayoutInternalNavItem extends NavItemBase {
@@ -19,6 +14,21 @@ export interface AppLayoutExternalNavItem extends NavItemBase {
19
14
  path?: undefined;
20
15
  }
21
16
  export type AppLayoutNavItem = AppLayoutInternalNavItem | AppLayoutExternalNavItem;
17
+ /**
18
+ * A top-level entry of the menu. The rail (a tab bar on phones) lists groups;
19
+ * the group being shown lists its sections in a bar above the content.
20
+ */
21
+ export interface AppLayoutNavGroup {
22
+ label: string;
23
+ icon: ReactNode;
24
+ /** In menu order. Choosing the group opens the first. */
25
+ items: AppLayoutNavItem[];
26
+ /**
27
+ * Further path prefixes that belong to the group without being one of its
28
+ * sections — a training's epochs, a benchmark — so it stays highlighted there.
29
+ */
30
+ match?: string[];
31
+ }
22
32
  export interface AppLayoutUser {
23
33
  name?: string;
24
34
  email?: string;
@@ -26,50 +36,47 @@ export interface AppLayoutUser {
26
36
  }
27
37
  export interface AppLayoutProps {
28
38
  children: ReactNode;
29
- /** Shown in the mobile app bar and as the fallback desktop page title. */
39
+ /** The page title where no section names the page. */
30
40
  appName: string;
31
41
  /** Static description shown under the desktop page title. */
32
42
  subtitle: string;
33
- navItems: AppLayoutNavItem[];
43
+ navGroups: AppLayoutNavGroup[];
44
+ /**
45
+ * Account's sections: listed in the account menu, and in the section bar
46
+ * while one of them is shown. Empty where Account is unreachable, leaving the
47
+ * menu only Logout.
48
+ */
49
+ accountItems?: AppLayoutNavItem[];
34
50
  user: AppLayoutUser | null;
35
51
  onLogout: () => void;
36
52
  /** Max width of the centered content column. Defaults to 800. */
37
53
  maxContentWidth?: number;
38
54
  /**
39
- * False shows a Login button in place of the user block. Defaults to true —
40
- * only vision-front serves anonymous visitors.
55
+ * False shows Login in place of Account. Defaults to true — account-front
56
+ * serves no anonymous visitors.
41
57
  */
42
58
  isAuthenticated?: boolean;
43
59
  /** Required when `isAuthenticated` can be false. */
44
60
  onLogin?: () => void;
45
- /** Adds an "Account" entry to the user menu, linking to account-front. */
46
- accountUrl?: string;
47
- /**
48
- * Adds an "Account" entry to the user menu that routes client-side, for an
49
- * app that serves Account itself (shell-front). Takes precedence over
50
- * `accountUrl`.
51
- */
52
- accountPath?: string;
53
- /** Lets the desktop drawer collapse to an icon rail. Defaults to false. */
54
- collapsible?: boolean;
55
61
  /**
56
62
  * False drops the page title/subtitle header, for apps whose pages render
57
63
  * their own headings. Defaults to true.
58
64
  */
59
65
  showPageHeader?: boolean;
66
+ /** Where the rail's logo leads, for an app with a home page (shell-front). Otherwise it is only a logo. */
67
+ homePath?: string;
60
68
  }
61
69
  /**
62
- * The single sidebar/appbar shell behind every Visin front: dark drawer with
63
- * nav items, mobile temporary drawer, a user block pinned to the drawer
64
- * bottom, and a content column. vision-front used to carry its own
65
- * near-duplicate of this so it could collapse the drawer and serve anonymous
66
- * visitors; those are now options here, so navigation looks and behaves
67
- * identically across apps.
70
+ * The navigation behind every Visin front. Groups sit in a rail beside the
71
+ * content, or in a tab bar under it on phones where it stays in reach of a
72
+ * thumb; the shown group's sections sit in a bar above the content, or in a
73
+ * dropdown on phones. Account is the last entry of the rail and the only place
74
+ * account actions live.
68
75
  *
69
- * Account, Logout and Login all live in the drawer's user block, never in a
70
- * page header: a header user block costs every page a band of vertical space
71
- * and puts account actions somewhere different from the navigation.
76
+ * Every entry carries a visible label. The sidebar this replaced hid its menu
77
+ * behind a burger button on phones, and collapsed on desktop to an icon rail
78
+ * that relied on the reader recognising the icons.
72
79
  */
73
- export declare function AppLayout({ children, appName, subtitle, navItems, user, onLogout, maxContentWidth, isAuthenticated, onLogin, accountUrl, accountPath, collapsible, showPageHeader }: AppLayoutProps): import("react").JSX.Element;
80
+ export declare function AppLayout({ children, appName, subtitle, navGroups, accountItems, user, onLogout, maxContentWidth, isAuthenticated, onLogin, showPageHeader, homePath }: AppLayoutProps): import("react").JSX.Element;
74
81
  export {};
75
82
  //# sourceMappingURL=AppLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/components/AppLayout/AppLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AAoCxD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,wBAAwB,CAAC;AAEnF,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,eAAqB,EACrB,eAAsB,EACtB,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAmB,EACnB,cAAqB,EACtB,EAAE,cAAc,+BAkWhB"}
1
+ {"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/components/AppLayout/AppLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AA4BxD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,wBAAwB,CAAC;AAEnF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B;;;;OAIG;IACH,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,eAAqB,EACrB,eAAsB,EACtB,OAAO,EACP,cAAqB,EACrB,QAAQ,EACT,EAAE,cAAc,+BAyVhB"}
@@ -1,168 +1,203 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { Box, Drawer, List, Typography, Divider, ListItem, ListItemButton, ListItemIcon, ListItemText, Avatar, Menu, MenuItem, useTheme, CssBaseline, AppBar, Toolbar, IconButton } from '@mui/material';
3
+ import { Avatar, Box, Button, ButtonBase, CssBaseline, Divider, Drawer, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, Typography, useMediaQuery, useTheme } from '@mui/material';
4
4
  import { alpha } from '@mui/material/styles';
5
- import { Menu as MenuIcon, Logout, Person, Login, ChevronLeft, ChevronRight, ExpandMore, AccountCircle } from '@mui/icons-material';
6
- import { Link, useLocation, useNavigate } from 'react-router-dom';
7
- const DRAWER_WIDTH = 260;
8
- const COLLAPSED_DRAWER_WIDTH = 88;
5
+ import { ExpandMore, Login, Logout, Person } from '@mui/icons-material';
6
+ import { Link, useLocation } from 'react-router-dom';
7
+ const RAIL_WIDTH = 88;
8
+ /** Height the phone tab bar covers at the foot of the screen, above the safe-area inset. */
9
+ const TAB_BAR_HEIGHT = 72;
10
+ const CHROME_BG = '#111827';
11
+ const CHROME_BORDER = 'rgba(255,255,255,0.1)';
12
+ const ownsPath = (prefix, pathname) => pathname === prefix || pathname.startsWith(`${prefix}/`);
13
+ // A router link for a local section, a plain anchor — a full page load — for a
14
+ // sibling app's.
15
+ const linkProps = (item) => item.path !== undefined ? { component: Link, to: item.path } : { component: 'a', href: item.href };
9
16
  /**
10
- * The single sidebar/appbar shell behind every Visin front: dark drawer with
11
- * nav items, mobile temporary drawer, a user block pinned to the drawer
12
- * bottom, and a content column. vision-front used to carry its own
13
- * near-duplicate of this so it could collapse the drawer and serve anonymous
14
- * visitors; those are now options here, so navigation looks and behaves
15
- * identically across apps.
17
+ * The navigation behind every Visin front. Groups sit in a rail beside the
18
+ * content, or in a tab bar under it on phones where it stays in reach of a
19
+ * thumb; the shown group's sections sit in a bar above the content, or in a
20
+ * dropdown on phones. Account is the last entry of the rail and the only place
21
+ * account actions live.
16
22
  *
17
- * Account, Logout and Login all live in the drawer's user block, never in a
18
- * page header: a header user block costs every page a band of vertical space
19
- * and puts account actions somewhere different from the navigation.
23
+ * Every entry carries a visible label. The sidebar this replaced hid its menu
24
+ * behind a burger button on phones, and collapsed on desktop to an icon rail
25
+ * that relied on the reader recognising the icons.
20
26
  */
21
- export function AppLayout({ children, appName, subtitle, navItems, user, onLogout, maxContentWidth = 800, isAuthenticated = true, onLogin, accountUrl, accountPath, collapsible = false, showPageHeader = true }) {
22
- const location = useLocation();
23
- const navigate = useNavigate();
24
- const hasAccountEntry = Boolean(accountPath || accountUrl);
27
+ export function AppLayout({ children, appName, subtitle, navGroups, accountItems = [], user, onLogout, maxContentWidth = 800, isAuthenticated = true, onLogin, showPageHeader = true, homePath }) {
28
+ const { pathname } = useLocation();
25
29
  const theme = useTheme();
26
- const [anchorElUser, setAnchorElUser] = useState(null);
27
- const [mobileOpen, setMobileOpen] = useState(false);
28
- const [desktopOpen, setDesktopOpen] = useState(true);
29
- const drawerWidth = collapsible && !desktopOpen ? COLLAPSED_DRAWER_WIDTH : DRAWER_WIDTH;
30
- const handleDrawerToggle = () => setMobileOpen(!mobileOpen);
31
- const handleOpenUserMenu = (event) => setAnchorElUser(event.currentTarget);
32
- const handleCloseUserMenu = () => setAnchorElUser(null);
33
- // An exact match always wins; a prefix match only counts if no other nav
34
- // item is an exact match for the current path (avoids '/jobs' lighting up
35
- // while on '/jobs/new'). External items are never active — they belong to a
36
- // different app.
30
+ // Read synchronously. The default first pass assumes a wide screen, which
31
+ // would draw the rail on a phone for a frame before swapping in the tab bar.
32
+ const mobile = useMediaQuery(theme.breakpoints.down('sm'), { noSsr: true });
33
+ const [accountAnchor, setAccountAnchor] = useState(null);
34
+ const [sectionAnchor, setSectionAnchor] = useState(null);
35
+ const closeAccount = () => setAccountAnchor(null);
36
+ const closeSections = () => setSectionAnchor(null);
37
+ const allItems = [...navGroups.flatMap((group) => group.items), ...accountItems];
38
+ // An exact match always wins; a prefix match only counts if no other item is
39
+ // an exact match for the current path (avoids '/jobs' lighting up while on
40
+ // '/jobs/new'). External items are never active — they belong to a different
41
+ // app.
37
42
  const isActive = (item) => item.path !== undefined &&
38
- (location.pathname === item.path ||
39
- (location.pathname.startsWith(item.path + '/') &&
40
- !navItems.some((other) => other.path !== item.path && other.path === location.pathname)));
41
- const activeItem = navItems.find(isActive);
42
- // The mobile drawer is temporary and always renders expanded — collapsing to
43
- // an icon rail only makes sense for the permanent desktop one.
44
- const renderDrawer = (variant) => {
45
- const collapsed = variant === 'desktop' && collapsible && !desktopOpen;
46
- const showCollapseToggle = variant === 'desktop' && collapsible;
47
- return (_jsxs(Box, { sx: { height: '100%', display: 'flex', flexDirection: 'column', bgcolor: '#111827', color: '#fff' }, children: [_jsxs(Box, { sx: {
48
- p: 3,
49
- display: 'flex',
50
- alignItems: 'center',
51
- gap: 2,
52
- justifyContent: collapsed ? 'center' : 'space-between'
53
- }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Box, { component: "img", src: "/logo.svg", alt: "Visin Logo", sx: { width: 32, height: 32, flexShrink: 0 } }), !collapsed && (_jsx(Typography, { variant: "h6", sx: { fontWeight: 700, color: 'inherit', letterSpacing: '-0.5px' }, children: "Visin" }))] }), showCollapseToggle && (_jsx(IconButton, { onClick: () => setDesktopOpen(!desktopOpen), "aria-label": collapsed ? 'expand navigation' : 'collapse navigation', sx: { color: 'rgba(255,255,255,0.5)', display: { xs: 'none', sm: 'flex' }, p: 0.5 }, children: collapsed ? _jsx(ChevronRight, {}) : _jsx(ChevronLeft, {}) }))] }), _jsx(List, { sx: { px: 2, flexGrow: 1, overflowY: 'auto' }, children: navItems.map((item, index) => {
54
- const active = isActive(item);
55
- // An external item is a plain anchor: it belongs to a sibling app,
56
- // so it needs a full page load, not a client-side route change. It
57
- // is otherwise drawn exactly like a local one — the menu is one
58
- // product, not a list of apps.
59
- const linkProps = item.path !== undefined
60
- ? { component: Link, to: item.path }
61
- : { component: 'a', href: item.href };
62
- const startsGroup = item.group !== undefined && item.group !== navItems[index - 1]?.group;
63
- return (_jsxs(ListItem, { disablePadding: true, sx: { mb: 0.5, display: 'block' }, children: [startsGroup &&
64
- (collapsed ? (
65
- // The icon rail has no room for a label; a rule still shows
66
- // where one group ends.
67
- index > 0 && _jsx(Divider, { sx: { my: 1.5, mx: 1, borderColor: 'rgba(255,255,255,0.1)' } })) : (_jsx(Typography, { component: "div", sx: {
68
- px: 2,
69
- pt: index > 0 ? 2 : 0,
70
- pb: 1,
71
- fontSize: '0.7rem',
72
- fontWeight: 600,
73
- letterSpacing: '0.08em',
74
- textTransform: 'uppercase',
75
- color: 'rgba(255,255,255,0.4)'
76
- }, children: item.group }))), _jsxs(ListItemButton, { ...linkProps, selected: active, onClick: () => setMobileOpen(false), sx: {
77
- borderRadius: 2,
78
- py: 1.2,
79
- justifyContent: collapsed ? 'center' : 'initial',
80
- color: 'rgba(255,255,255,0.7)',
81
- '&.Mui-selected': {
82
- bgcolor: alpha(theme.palette.primary.main, 0.15),
83
- color: theme.palette.primary.light,
84
- '&:hover': {
85
- bgcolor: alpha(theme.palette.primary.main, 0.25)
86
- },
87
- '& .MuiListItemIcon-root': {
88
- color: theme.palette.primary.light
89
- }
90
- },
91
- '&:hover': {
92
- bgcolor: 'rgba(255,255,255,0.05)',
93
- color: '#fff',
94
- '& .MuiListItemIcon-root': {
95
- color: '#fff'
96
- }
97
- }
98
- }, children: [_jsx(ListItemIcon, { sx: {
99
- minWidth: collapsed ? 0 : 40,
100
- justifyContent: 'center',
101
- color: active ? 'inherit' : 'rgba(255,255,255,0.5)'
102
- }, children: item.icon }), !collapsed && (_jsx(ListItemText, { primary: item.text, slotProps: {
103
- primary: { sx: { fontWeight: active ? 600 : 500, fontSize: '0.925rem' } }
104
- } }))] })] }, item.text));
105
- }) }), _jsx(Divider, { sx: { mx: 2, borderColor: 'rgba(255,255,255,0.1)' } }), _jsx(Box, { sx: { p: 2 }, children: isAuthenticated ? (_jsxs(ListItemButton, { onClick: handleOpenUserMenu, "aria-label": "open user menu", sx: {
106
- borderRadius: 2,
107
- justifyContent: collapsed ? 'center' : 'initial',
108
- px: collapsed ? 1 : 2,
109
- '&:hover': { bgcolor: 'rgba(255,255,255,0.05)' }
110
- }, children: [_jsx(Avatar, { src: user?.picture, sx: { width: 32, height: 32, mr: collapsed ? 0 : 2, bgcolor: theme.palette.secondary.main }, children: user?.name?.charAt(0) || _jsx(Person, { fontSize: "small" }) }), !collapsed && (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: { flexGrow: 1, minWidth: 0 }, children: [_jsx(Typography, { variant: "body2", noWrap: true, sx: { fontWeight: 600 }, children: user?.name || 'User' }), _jsx(Typography, { variant: "caption", noWrap: true, sx: { color: 'rgba(255,255,255,0.5)', display: 'block' }, children: user?.email })] }), _jsx(ExpandMore, { sx: { color: 'rgba(255,255,255,0.5)' } })] }))] })) : (_jsxs(ListItemButton, { onClick: onLogin, sx: {
111
- borderRadius: 2,
112
- justifyContent: collapsed ? 'center' : 'initial',
113
- px: collapsed ? 1 : 2,
114
- color: 'rgba(255,255,255,0.7)',
115
- '&:hover': { bgcolor: 'rgba(255,255,255,0.05)', color: '#fff' }
116
- }, children: [_jsx(ListItemIcon, { sx: { minWidth: collapsed ? 0 : 40, justifyContent: 'center', color: 'rgba(255,255,255,0.5)' }, children: _jsx(Login, {}) }), !collapsed && (_jsx(ListItemText, { primary: "Login", slotProps: { primary: { sx: { fontWeight: 600, fontSize: '0.925rem' } } } }))] })) })] }));
43
+ (pathname === item.path ||
44
+ (pathname.startsWith(item.path + '/') &&
45
+ !allItems.some((other) => other.path !== item.path && other.path === pathname)));
46
+ const activeItem = allItems.find(isActive);
47
+ const accountGroup = { label: 'Account', icon: null, items: accountItems };
48
+ const activeGroup = [...navGroups, accountGroup].find((group) => group.items.some(isActive) || (group.match ?? []).some((prefix) => ownsPath(prefix, pathname)));
49
+ // A group of one has nothing to choose between.
50
+ const sectionGroup = activeGroup && activeGroup.items.length > 1 ? activeGroup : null;
51
+ const initial = user?.name?.charAt(0) || _jsx(Person, { fontSize: "small" });
52
+ const menuItem = (item, onClose) => (_jsxs(MenuItem, { ...linkProps(item), selected: isActive(item), onClick: onClose, children: [_jsx(ListItemIcon, { children: item.icon }), _jsx(ListItemText, { children: item.text })] }, item.text));
53
+ const railEntries = (_jsxs(_Fragment, { children: [navGroups.map((group) => (_jsx(NavButton, { label: group.label, icon: group.icon, target: group.items[0], active: group === activeGroup, current: group === activeGroup, mobile: mobile }, group.label))), !mobile && _jsx(Box, { sx: { flex: 1 } }), isAuthenticated ? (_jsx(NavButton, { label: "Account", icon: _jsx(Avatar, { src: user?.picture, alt: "", sx: { width: 26, height: 26, fontSize: '0.8rem', bgcolor: theme.palette.secondary.main }, children: initial }), active: Boolean(accountAnchor) || activeGroup === accountGroup, current: activeGroup === accountGroup, mobile: mobile, onClick: (event) => setAccountAnchor(event.currentTarget), expanded: Boolean(accountAnchor) })) : (_jsx(NavButton, { label: "Login", icon: _jsx(Login, {}), active: false, current: false, mobile: mobile, onClick: onLogin }))] }));
54
+ // An array rather than a fragment: Menu and MenuList walk their direct
55
+ // children to manage focus.
56
+ const accountMenuItems = [
57
+ _jsxs(MenuItem, { disabled: true, sx: { gap: 1.5, py: 1.25, '&.Mui-disabled': { opacity: 1 } }, children: [_jsx(Avatar, { src: user?.picture, alt: "", sx: { width: 36, height: 36, bgcolor: theme.palette.secondary.main }, children: initial }), _jsxs(Box, { sx: { minWidth: 0 }, children: [_jsx(Typography, { noWrap: true, sx: { fontWeight: 700 }, children: user?.name || 'User' }), user?.email && (_jsx(Typography, { noWrap: true, variant: "body2", sx: { color: 'text.secondary' }, children: user.email }))] })] }, "who"),
58
+ _jsx(Divider, {}, "who-divider"),
59
+ ...accountItems.map((item) => menuItem(item, closeAccount)),
60
+ ...(accountItems.length > 0 ? [_jsx(Divider, {}, "logout-divider")] : []),
61
+ _jsxs(MenuItem, { onClick: () => {
62
+ closeAccount();
63
+ onLogout();
64
+ }, children: [_jsx(ListItemIcon, { children: _jsx(Logout, { fontSize: "small" }) }), _jsx(ListItemText, { children: "Logout" })] }, "logout")
65
+ ];
66
+ const accountMenu = mobile ? (_jsxs(Drawer, { anchor: "bottom", open: Boolean(accountAnchor), onClose: closeAccount, slotProps: {
67
+ paper: {
68
+ sx: {
69
+ borderTopLeftRadius: 20,
70
+ borderTopRightRadius: 20,
71
+ maxHeight: '85dvh',
72
+ pb: 'calc(8px + env(safe-area-inset-bottom))'
73
+ }
74
+ }
75
+ }, children: [_jsx(Box, { "aria-hidden": true, sx: { width: 36, height: 4, borderRadius: 2, bgcolor: 'divider', mx: 'auto', mt: 1.25 } }), _jsx(MenuList, { "aria-label": "Account", autoFocusItem: Boolean(accountAnchor), children: accountMenuItems })] })) : (_jsx(Menu, { anchorEl: accountAnchor, open: Boolean(accountAnchor), onClose: closeAccount, anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'bottom', horizontal: 'left' }, slotProps: {
76
+ paper: { sx: { ml: 1, minWidth: 240, maxWidth: 320, borderRadius: 3 } },
77
+ list: { 'aria-label': 'Account' }
78
+ }, children: accountMenuItems }));
79
+ const sectionBarSx = {
80
+ display: 'flex',
81
+ alignItems: 'center',
82
+ borderBottom: 1,
83
+ borderColor: 'divider',
84
+ bgcolor: 'background.paper'
117
85
  };
118
- return (_jsxs(Box, { sx: { display: 'flex', minHeight: '100vh', bgcolor: 'background.default' }, children: [_jsx(CssBaseline, {}), _jsx(AppBar, { position: "fixed", sx: {
119
- display: { sm: 'none' },
120
- bgcolor: '#111827',
121
- color: '#fff',
122
- boxShadow: 'none',
123
- borderBottom: '1px solid rgba(255,255,255,0.1)'
124
- }, children: _jsxs(Toolbar, { children: [_jsx(IconButton, { color: "inherit", "aria-label": "open drawer", edge: "start", onClick: handleDrawerToggle, sx: { mr: 2 }, children: _jsx(MenuIcon, {}) }), _jsx(Typography, { variant: "h6", noWrap: true, component: "div", sx: { fontWeight: 700, flexGrow: 1 }, children: appName })] }) }), _jsxs(Box, { component: "nav", sx: { width: { sm: drawerWidth }, flexShrink: { sm: 0 }, transition: 'width 0.2s' }, children: [_jsx(Drawer, { variant: "temporary", open: mobileOpen, onClose: handleDrawerToggle, ModalProps: { keepMounted: true }, sx: {
125
- display: { xs: 'block', sm: 'none' },
126
- '& .MuiDrawer-paper': {
127
- boxSizing: 'border-box',
128
- width: DRAWER_WIDTH,
129
- borderRight: 'none',
130
- bgcolor: '#111827',
131
- color: '#fff'
132
- }
133
- }, children: renderDrawer('mobile') }), _jsx(Drawer, { variant: "permanent", sx: {
134
- display: { xs: 'none', sm: 'block' },
135
- '& .MuiDrawer-paper': {
136
- boxSizing: 'border-box',
137
- width: drawerWidth,
138
- borderRight: '1px solid rgba(255,255,255,0.1)',
139
- bgcolor: '#111827',
140
- color: '#fff',
141
- transition: 'width 0.2s',
142
- overflowX: 'hidden'
143
- }
144
- }, open: true, children: renderDrawer('desktop') })] }), _jsxs(Menu, { anchorEl: anchorElUser, open: Boolean(anchorElUser), onClose: handleCloseUserMenu, transformOrigin: { horizontal: 'left', vertical: 'bottom' }, anchorOrigin: { horizontal: 'left', vertical: 'top' }, slotProps: {
145
- paper: { sx: { minWidth: 200, borderRadius: 2, boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)' } }
146
- }, children: [hasAccountEntry && (_jsxs(MenuItem, { onClick: () => {
147
- handleCloseUserMenu();
148
- if (accountPath) {
149
- navigate(accountPath);
150
- }
151
- else if (accountUrl) {
152
- window.location.href = accountUrl;
153
- }
154
- }, sx: { py: 1.5 }, children: [_jsx(ListItemIcon, { children: _jsx(AccountCircle, { fontSize: "small" }) }), "Account"] })), hasAccountEntry && _jsx(Divider, {}), _jsxs(MenuItem, { onClick: () => {
155
- handleCloseUserMenu();
156
- onLogout();
157
- }, sx: { py: 1.5 }, children: [_jsx(ListItemIcon, { children: _jsx(Logout, { fontSize: "small" }) }), "Logout"] })] }), _jsx(Box, { component: "main", sx: {
158
- flexGrow: 1,
159
- p: { xs: 2, sm: 4, md: 8 },
160
- width: { sm: `calc(100% - ${drawerWidth}px)` },
161
- transition: 'width 0.2s',
162
- mt: { xs: 7, sm: 0 },
86
+ const sectionBar = sectionGroup &&
87
+ (mobile ? (_jsxs(Box, { component: "nav", "aria-label": sectionGroup.label, sx: { ...sectionBarSx, minHeight: 52, px: 1 }, children: [_jsx(Button, { onClick: (event) => setSectionAnchor(event.currentTarget), endIcon: _jsx(ExpandMore, {}), "aria-haspopup": "menu", "aria-expanded": Boolean(sectionAnchor), sx: {
88
+ textTransform: 'none',
89
+ fontWeight: 700,
90
+ fontSize: '1rem',
91
+ color: 'text.primary',
92
+ borderRadius: 2,
93
+ minWidth: 0,
94
+ maxWidth: '100%'
95
+ }, children: _jsx(Box, { component: "span", sx: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: sectionGroup.items.find(isActive)?.text ?? sectionGroup.label }) }), _jsx(Menu, { anchorEl: sectionAnchor, open: Boolean(sectionAnchor), onClose: closeSections, anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, slotProps: { paper: { sx: { minWidth: 220, borderRadius: 3 } } }, children: sectionGroup.items.map((item) => menuItem(item, closeSections)) })] })) : (_jsx(Box, { component: "nav", "aria-label": sectionGroup.label, sx: { ...sectionBarSx, gap: 1, minHeight: 56, px: { sm: 3, md: 7 }, overflowX: 'auto' }, children: sectionGroup.items.map((item) => {
96
+ const active = isActive(item);
97
+ return (_jsx(Button, { ...linkProps(item), startIcon: item.icon, "aria-current": active ? 'page' : undefined, sx: {
98
+ flexShrink: 0,
99
+ px: 2,
100
+ borderRadius: 2,
101
+ textTransform: 'none',
102
+ fontWeight: active ? 700 : 500,
103
+ color: active ? 'primary.main' : 'text.secondary',
104
+ bgcolor: active ? alpha(theme.palette.primary.main, 0.08) : 'transparent',
105
+ '&:hover': { bgcolor: active ? alpha(theme.palette.primary.main, 0.14) : 'action.hover' }
106
+ }, children: item.text }, item.text));
107
+ }) })));
108
+ // On a phone the section dropdown already names the page.
109
+ const pageHeader = showPageHeader && !(mobile && sectionGroup) && (_jsxs(Box, { sx: { mb: { xs: 3, sm: 6 } }, children: [_jsx(Typography, { variant: "h4", sx: { fontWeight: 700, letterSpacing: '-1px', mb: 1, fontSize: { xs: '1.5rem', sm: '2.125rem' } }, children: activeItem?.text || appName }), _jsx(Typography, { variant: "body1", sx: { color: 'text.secondary', display: { xs: 'none', sm: 'block' } }, children: subtitle })] }));
110
+ return (_jsxs(Box, { sx: { display: 'flex', minHeight: '100vh', bgcolor: 'background.default' }, children: [_jsx(CssBaseline, {}), !mobile && (_jsxs(Box, { component: "nav", "aria-label": "Main", sx: {
111
+ width: RAIL_WIDTH,
112
+ flexShrink: 0,
113
+ // Stays on screen while the page scrolls; flex-start, or the row
114
+ // stretches it to the page's height and there is nothing to stick.
115
+ position: 'sticky',
116
+ top: 0,
117
+ alignSelf: 'flex-start',
118
+ height: '100vh',
163
119
  display: 'flex',
164
120
  flexDirection: 'column',
165
- alignItems: 'center'
166
- }, children: _jsxs(Box, { sx: { width: '100%', maxWidth: maxContentWidth }, children: [showPageHeader && (_jsxs(Box, { sx: { display: { xs: 'none', sm: 'block' }, mb: 6 }, children: [_jsx(Typography, { variant: "h4", sx: { fontWeight: 700, letterSpacing: '-1px', mb: 1 }, children: activeItem?.text || appName }), _jsx(Typography, { variant: "body1", sx: { color: 'text.secondary' }, children: subtitle })] })), children] }) })] }));
121
+ gap: 1,
122
+ px: 0.5,
123
+ py: 2,
124
+ overflowY: 'auto',
125
+ bgcolor: CHROME_BG,
126
+ color: '#fff',
127
+ borderRight: `1px solid ${CHROME_BORDER}`
128
+ }, children: [homePath ? (_jsx(ButtonBase, { component: Link, to: homePath, "aria-label": "Visin home", disableRipple: true, sx: {
129
+ alignSelf: 'center',
130
+ mb: 2,
131
+ p: 0.5,
132
+ borderRadius: '10px',
133
+ '&.Mui-focusVisible': { outline: `2px solid ${theme.palette.primary.light}`, outlineOffset: 1 }
134
+ }, children: _jsx(Box, { component: "img", src: "/logo.svg", alt: "Visin", sx: { display: 'block', width: 32, height: 32 } }) })) : (_jsx(Box, { component: "img", src: "/logo.svg", alt: "Visin", sx: { width: 32, height: 32, mx: 'auto', mb: 2.5, mt: 0.5 } })), railEntries] })), _jsxs(Box, { sx: { flexGrow: 1, minWidth: 0, display: 'flex', flexDirection: 'column' }, children: [sectionBar, _jsx(Box, { component: "main", sx: {
135
+ flexGrow: 1,
136
+ p: { xs: 2, sm: 4, md: 8 },
137
+ // Clear of the fixed tab bar. On the padding rather than a spacer,
138
+ // since the workbench sizes its frame to what main's padding leaves.
139
+ ...(mobile && { pb: `calc(${TAB_BAR_HEIGHT}px + ${theme.spacing(2)} + env(safe-area-inset-bottom))` }),
140
+ display: 'flex',
141
+ flexDirection: 'column',
142
+ alignItems: 'center'
143
+ }, children: _jsxs(Box, { sx: { width: '100%', maxWidth: maxContentWidth }, children: [pageHeader, children] }) })] }), mobile && (_jsx(Box, { component: "nav", "aria-label": "Main", sx: {
144
+ position: 'fixed',
145
+ left: 0,
146
+ right: 0,
147
+ bottom: 0,
148
+ zIndex: theme.zIndex.appBar,
149
+ display: 'flex',
150
+ px: 0.5,
151
+ pt: 0.75,
152
+ pb: 'calc(6px + env(safe-area-inset-bottom))',
153
+ bgcolor: CHROME_BG,
154
+ color: '#fff',
155
+ borderTop: `1px solid ${CHROME_BORDER}`
156
+ }, children: railEntries })), isAuthenticated && accountMenu] }));
157
+ }
158
+ function NavButton({ label, icon, active, current, mobile, target, onClick, expanded }) {
159
+ const theme = useTheme();
160
+ const sx = {
161
+ flex: mobile ? 1 : 'none',
162
+ minWidth: 0,
163
+ display: 'flex',
164
+ flexDirection: 'column',
165
+ alignItems: 'center',
166
+ gap: 0.5,
167
+ py: 0.5,
168
+ borderRadius: 3,
169
+ color: active ? '#fff' : 'rgba(255,255,255,0.6)',
170
+ WebkitTapHighlightColor: 'transparent',
171
+ '& .nav-pill': {
172
+ width: 56,
173
+ height: 32,
174
+ borderRadius: 999,
175
+ display: 'grid',
176
+ placeItems: 'center',
177
+ color: active ? theme.palette.primary.light : 'inherit',
178
+ bgcolor: active ? alpha(theme.palette.primary.main, 0.22) : 'transparent',
179
+ transition: 'background-color .2s ease, color .2s ease, transform .15s ease'
180
+ },
181
+ '&:hover': { color: '#fff' },
182
+ '&:hover .nav-pill': {
183
+ bgcolor: active ? alpha(theme.palette.primary.main, 0.32) : 'rgba(255,255,255,0.08)'
184
+ },
185
+ '&:active .nav-pill': { transform: 'scale(0.94)' },
186
+ '&.Mui-focusVisible .nav-pill': { outline: `2px solid ${theme.palette.primary.light}`, outlineOffset: 1 }
187
+ };
188
+ const body = (_jsxs(_Fragment, { children: [_jsx(Box, { className: "nav-pill", "aria-hidden": true, children: icon }), _jsx(Box, { component: "span", sx: {
189
+ maxWidth: '100%',
190
+ fontSize: mobile ? 11 : 11.5,
191
+ fontWeight: active ? 700 : 500,
192
+ lineHeight: 1.2,
193
+ whiteSpace: 'nowrap',
194
+ overflow: 'hidden',
195
+ textOverflow: 'ellipsis'
196
+ }, children: label })] }));
197
+ const ariaCurrent = current ? 'true' : undefined;
198
+ if (target) {
199
+ return (_jsx(ButtonBase, { ...linkProps(target), "aria-current": ariaCurrent, disableRipple: true, sx: sx, children: body }));
200
+ }
201
+ return (_jsx(ButtonBase, { onClick: onClick, "aria-current": ariaCurrent, "aria-haspopup": expanded === undefined ? undefined : 'menu', "aria-expanded": expanded, disableRipple: true, sx: sx, children: body }));
167
202
  }
168
203
  //# sourceMappingURL=AppLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppLayout.js","sourceRoot":"","sources":["../../../src/components/AppLayout/AppLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AppLayout.js","sourceRoot":"","sources":["../../../src/components/AppLayout/AppLayout.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export { AppLayout } from './AppLayout';
2
- export type { AppLayoutProps, AppLayoutNavItem, AppLayoutInternalNavItem, AppLayoutExternalNavItem, AppLayoutUser } from './AppLayout';
2
+ export type { AppLayoutProps, AppLayoutNavGroup, AppLayoutNavItem, AppLayoutInternalNavItem, AppLayoutExternalNavItem, AppLayoutUser } from './AppLayout';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AppLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AppLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,aAAa,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,9 +5,9 @@ export type { LoaderProps } from './components/Loader';
5
5
  export { ErrorPage } from './components/ErrorPage';
6
6
  export type { ErrorPageProps } from './components/ErrorPage';
7
7
  export { AppLayout } from './components/AppLayout';
8
- export type { AppLayoutProps, AppLayoutNavItem, AppLayoutInternalNavItem, AppLayoutExternalNavItem, AppLayoutUser } from './components/AppLayout';
9
- export { createVisinNavItems, createAccountNavItems } from './navigation';
10
- export type { VisinApp, VisinAppUrls } from './navigation';
8
+ export type { AppLayoutProps, AppLayoutNavGroup, AppLayoutNavItem, AppLayoutInternalNavItem, AppLayoutExternalNavItem, AppLayoutUser } from './components/AppLayout';
9
+ export { createVisinNavigation } from './navigation';
10
+ export type { VisinApp, VisinAppUrls, VisinNavigation } from './navigation';
11
11
  export { createProtectedRoute } from './components/ProtectedRoute';
12
12
  export type { ProtectedRouteProps, ProtectedRouteAuth } from './components/ProtectedRoute';
13
13
  export { createLoginRedirect } from './components/LoginRedirect';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ export { createApiClient, ApiError } from './apiClient';
3
3
  export { Loader } from './components/Loader';
4
4
  export { ErrorPage } from './components/ErrorPage';
5
5
  export { AppLayout } from './components/AppLayout';
6
- export { createVisinNavItems, createAccountNavItems } from './navigation';
6
+ export { createVisinNavigation } from './navigation';
7
7
  export { createProtectedRoute } from './components/ProtectedRoute';
8
8
  export { createLoginRedirect } from './components/LoginRedirect';
9
9
  export { createAuthService } from './auth/authService';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAQnD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AASnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,27 +1,28 @@
1
- import type { AppLayoutNavItem } from './components/AppLayout';
1
+ import type { AppLayoutNavGroup, AppLayoutNavItem } from './components/AppLayout';
2
2
  /** The fronts whose sections make up the shared menu. */
3
- export type VisinApp = 'vision' | 'label';
3
+ export type VisinApp = 'vision' | 'label' | 'account';
4
4
  export interface VisinAppUrls {
5
5
  /** Base URL of vision-front, e.g. https://ml.example.com */
6
6
  vision?: string;
7
7
  /** Base URL of label-front, e.g. https://label.example.com */
8
8
  label?: string;
9
+ /** Base URL of account-front, e.g. https://account.example.com */
10
+ account?: string;
11
+ }
12
+ export interface VisinNavigation {
13
+ groups: AppLayoutNavGroup[];
14
+ accountItems: AppLayoutNavItem[];
9
15
  }
10
16
  /**
11
17
  * Builds the shared menu. `localApps` are the apps whose sections are routes of
12
- * the page drawing the menu: one app in a standalone front, both in shell-front
13
- * (which renders every app on one page), and none in account-front, where every
14
- * entry links across. Every other app's sections are absolute links to that app.
18
+ * the page drawing the menu: one app in a standalone front, all of them in
19
+ * shell-front (which renders every app on one page). Every other app's sections
20
+ * are absolute links to that app.
15
21
  *
16
- * A non-local app with no URL configured has its group omitted, rather than
22
+ * A non-local app with no URL configured has its sections omitted, rather than
17
23
  * rendered as dead links into the current origin — a missing `LABEL_FRONT_URL`
18
- * should hide Labeling, not leave entries that 404 inside Vision.
19
- */
20
- export declare function createVisinNavItems(localApps: VisinApp | readonly VisinApp[] | null, urls: VisinAppUrls): AppLayoutNavItem[];
21
- /**
22
- * Account's own sections, under an Account heading, as local routes. Shown only
23
- * while the user is in Account (account-front, or shell-front's Account routes);
24
- * everywhere else Account is a single entry in the user menu.
24
+ * should hide Jobs and Bundles, not leave entries that 404 inside Vision. A
25
+ * group left with no sections is omitted with them.
25
26
  */
26
- export declare function createAccountNavItems(): AppLayoutNavItem[];
27
+ export declare function createVisinNavigation(localApps: VisinApp | readonly VisinApp[] | null, urls: VisinAppUrls): VisinNavigation;
27
28
  //# sourceMappingURL=navigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,yDAAyD;AACzD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsDD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,GAAG,IAAI,EAChD,IAAI,EAAE,YAAY,GACjB,gBAAgB,EAAE,CAmBpB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,EAAE,CAE1D"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAElF,yDAAyD;AACzD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAiED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,GAAG,IAAI,EAChD,IAAI,EAAE,YAAY,GACjB,eAAe,CAqBjB"}
@@ -1,76 +1,78 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Folder, ModelTraining, Storage, Assignment, Inventory2, Person, Groups, Key, Link as LinkIcon, Insights } from '@mui/icons-material';
2
+ import { Assignment, Folder, FolderCopy, Groups, Insights, Inventory2, Key, Label, Link as LinkIcon, ModelTraining, Person, PhotoLibrary, Storage } from '@mui/icons-material';
3
3
  /**
4
- * The whole menu, in the order every app shows it. It used to list only the
5
- * current app's sections plus one link across, so following that link swapped
6
- * the entire sidebar out from under the user. Now every app renders the same
7
- * groups in the same places; crossing apps changes which item is highlighted,
4
+ * The whole menu, grouped by what the user is doing. Every app renders the same
5
+ * groups in the same places; crossing apps changes which entry is highlighted,
8
6
  * never what the menu contains.
9
7
  */
10
8
  const NAV_GROUPS = [
11
9
  {
12
- app: 'vision',
13
- label: 'Vision',
10
+ label: 'Projects',
11
+ icon: _jsx(Folder, {}),
14
12
  sections: [
15
- { text: 'Projects', icon: _jsx(Folder, {}), path: '/projects' },
16
- { text: 'Trainings', icon: _jsx(ModelTraining, {}), path: '/trainings' },
17
- { text: 'Datasets', icon: _jsx(Storage, {}), path: '/datasets' }
18
- ]
13
+ // Not "Projects": the group already says so, and the bar under it would
14
+ // read Projects, Projects.
15
+ { app: 'vision', text: 'All projects', icon: _jsx(FolderCopy, {}), path: '/projects' },
16
+ { app: 'vision', text: 'Trainings', icon: _jsx(ModelTraining, {}), path: '/trainings' }
17
+ ],
18
+ pages: {
19
+ app: 'vision',
20
+ paths: ['/comparisons', '/epochs', '/configs', '/test-results', '/visualizations', '/benchmarks']
21
+ }
22
+ },
23
+ {
24
+ label: 'Data',
25
+ icon: _jsx(Storage, {}),
26
+ sections: [{ app: 'vision', text: 'Datasets', icon: _jsx(PhotoLibrary, {}), path: '/datasets' }]
19
27
  },
20
28
  {
21
- app: 'label',
22
- label: 'Labeling',
23
- // "New job" is deliberately not here: it is an action on the Jobs list, not a
24
- // section of the app, and a nav entry for it made the menu read as three
25
- // destinations when there are two.
29
+ label: 'Labels',
30
+ icon: _jsx(Label, {}),
31
+ // A bundle is the image set a job is labelled from, so it sits beside the
32
+ // jobs rather than with Datasets. "New job" is deliberately not here: it is
33
+ // an action on the Jobs list, not a section.
26
34
  sections: [
27
- { text: 'Jobs', icon: _jsx(Assignment, {}), path: '/jobs' },
28
- { text: 'Bundles', icon: _jsx(Inventory2, {}), path: '/bundles' }
35
+ { app: 'label', text: 'Jobs', icon: _jsx(Assignment, {}), path: '/jobs' },
36
+ { app: 'label', text: 'Bundles', icon: _jsx(Inventory2, {}), path: '/bundles' }
29
37
  ]
30
38
  }
31
39
  ];
32
40
  const ACCOUNT_SECTIONS = [
33
- { text: 'Profile', icon: _jsx(Person, {}), path: '/account/profile' },
34
- { text: 'Groups', icon: _jsx(Groups, {}), path: '/account/groups' },
35
- { text: 'API keys', icon: _jsx(Key, {}), path: '/account/api-keys' },
36
- { text: 'Connected apps', icon: _jsx(LinkIcon, {}), path: '/account/connections' },
37
- { text: 'Assistant activity', icon: _jsx(Insights, {}), path: '/account/activity' }
41
+ { app: 'account', text: 'Profile', icon: _jsx(Person, {}), path: '/account/profile' },
42
+ { app: 'account', text: 'Groups', icon: _jsx(Groups, {}), path: '/account/groups' },
43
+ { app: 'account', text: 'API keys', icon: _jsx(Key, {}), path: '/account/api-keys' },
44
+ { app: 'account', text: 'Connected apps', icon: _jsx(LinkIcon, {}), path: '/account/connections' },
45
+ { app: 'account', text: 'Assistant activity', icon: _jsx(Insights, {}), path: '/account/activity' }
38
46
  ];
39
47
  const stripTrailingSlash = (url) => url.replace(/\/$/, '');
40
48
  /**
41
49
  * Builds the shared menu. `localApps` are the apps whose sections are routes of
42
- * the page drawing the menu: one app in a standalone front, both in shell-front
43
- * (which renders every app on one page), and none in account-front, where every
44
- * entry links across. Every other app's sections are absolute links to that app.
50
+ * the page drawing the menu: one app in a standalone front, all of them in
51
+ * shell-front (which renders every app on one page). Every other app's sections
52
+ * are absolute links to that app.
45
53
  *
46
- * A non-local app with no URL configured has its group omitted, rather than
54
+ * A non-local app with no URL configured has its sections omitted, rather than
47
55
  * rendered as dead links into the current origin — a missing `LABEL_FRONT_URL`
48
- * should hide Labeling, not leave entries that 404 inside Vision.
56
+ * should hide Jobs and Bundles, not leave entries that 404 inside Vision. A
57
+ * group left with no sections is omitted with them.
49
58
  */
50
- export function createVisinNavItems(localApps, urls) {
59
+ export function createVisinNavigation(localApps, urls) {
51
60
  const local = new Set(localApps === null ? [] : typeof localApps === 'string' ? [localApps] : localApps);
52
- return NAV_GROUPS.flatMap(({ app, label, sections }) => {
61
+ const toItems = ({ app, text, icon, path }) => {
53
62
  if (local.has(app)) {
54
- return sections.map(({ text, icon, path }) => ({ text, icon, path, group: label }));
63
+ return [{ text, icon, path }];
55
64
  }
56
65
  const baseUrl = urls[app];
57
- if (!baseUrl) {
66
+ return baseUrl ? [{ text, icon, href: `${stripTrailingSlash(baseUrl)}${path}` }] : [];
67
+ };
68
+ const groups = NAV_GROUPS.flatMap(({ label, icon, sections, pages }) => {
69
+ const items = sections.flatMap(toItems);
70
+ if (items.length === 0) {
58
71
  return [];
59
72
  }
60
- return sections.map(({ text, icon, path }) => ({
61
- text,
62
- icon,
63
- href: `${stripTrailingSlash(baseUrl)}${path}`,
64
- group: label
65
- }));
73
+ // Another app's pages never render on this one, so only local ones can match.
74
+ return [{ label, icon, items, match: pages && local.has(pages.app) ? pages.paths : [] }];
66
75
  });
67
- }
68
- /**
69
- * Account's own sections, under an Account heading, as local routes. Shown only
70
- * while the user is in Account (account-front, or shell-front's Account routes);
71
- * everywhere else Account is a single entry in the user menu.
72
- */
73
- export function createAccountNavItems() {
74
- return ACCOUNT_SECTIONS.map(({ text, icon, path }) => ({ text, icon, path, group: 'Account' }));
76
+ return { groups, accountItems: ACCOUNT_SECTIONS.flatMap(toItems) };
75
77
  }
76
78
  //# sourceMappingURL=navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visin/frontend-core",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Shared frontend auth/API-client logic for Visin frontends",
5
5
  "author": "Toomas Tahves",
6
6
  "license": "MIT",