wcz-layout
Version:
1 lines • 75.9 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":["modeValue","label","languageCode","openMenu","anchorElement","open","closeMenu","env","children","open","key","navigation","collapsed","expanded","navigation","expanded","setExpanded","navigation","navigationOpen","newValue","children","previousStack","dialog","entry","key","Component","payload","promise","result","open","snackbarOrigin","children","children","navigation","options","AdapterDayjs","emotionCache","i18n","theme"],"sources":["../src/components/core/account/UserAvatar.tsx","../src/components/core/account/UserMenu.tsx","../src/components/core/AppTitle.tsx","../src/models/Navigation.ts","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationContent.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/Layout.tsx","../src/providers/DialogsProvider.tsx","../src/providers/NotificationProvider.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import { Avatar } from \"@mui/material\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { createServerFn } from \"@tanstack/react-start\";\nimport axios from \"axios\";\nimport type { FC } from \"react\";\nimport { OFFLINE_PHOTO_KEY, withOfflineFallback } from \"~/lib/auth/offline\";\nimport { getAccessToken } from \"~/lib/auth/user\";\n\nconst getProfilePhoto = createServerFn({ method: \"GET\" }).handler(async (): Promise<string> => {\n const accessToken = await getAccessToken(\"graph\");\n try {\n const response = await axios.get<ArrayBuffer>(\n \"https://graph.microsoft.com/v1.0/me/photos/240x240/$value\",\n {\n responseType: \"arraybuffer\",\n headers: { Authorization: `Bearer ${accessToken}` },\n },\n );\n return `data:image/jpeg;base64,${Buffer.from(response.data).toString(\"base64\")}`;\n } catch (error) {\n if (axios.isAxiosError(error) && error.response?.status === 404) return \"\";\n throw new Error(\"Failed to fetch profile photo\");\n }\n});\n\nexport const UserAvatar: FC = () => {\n const { data: photoUrl } = useQuery({\n queryKey: [\"graph\", \"me\", \"photo\"],\n queryFn: () => withOfflineFallback(OFFLINE_PHOTO_KEY, () => getProfilePhoto()),\n staleTime: Infinity,\n gcTime: Infinity,\n networkMode: \"offlineFirst\",\n });\n\n return (\n <Avatar\n alt=\"User profile photo\"\n src={photoUrl || undefined}\n sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }}\n />\n );\n};\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\nimport DarkMode from \"@mui/icons-material/DarkMode\";\nimport Done from \"@mui/icons-material/Done\";\nimport LightMode from \"@mui/icons-material/LightMode\";\nimport Login from \"@mui/icons-material/Login\";\nimport Logout from \"@mui/icons-material/Logout\";\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\nimport Translate from \"@mui/icons-material/Translate\";\nimport {\n Box,\n IconButton,\n List,\n ListItem,\n ListItemButton,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n Menu,\n useColorScheme,\n} from \"@mui/material\";\nimport { rootRouteId, useMatch } from \"@tanstack/react-router\";\nimport type { FC } from \"react\";\nimport { Fragment, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { clearSessionSnapshot } from \"~/lib/auth/offline\";\nimport { UserAvatar } from \"./UserAvatar\";\n\ntype TabType = \"settings\" | \"theme\" | \"language\";\nconst capitalize = (value: string | undefined) =>\n value && value.charAt(0).toUpperCase() + value.slice(1);\n\nexport const ToolbarAccount: FC = () => {\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\n const [tab, setTab] = useState<TabType>(\"settings\");\n const open = Boolean(anchorElement);\n const { t, i18n } = useTranslation();\n const { mode, setMode } = useColorScheme();\n const rootMatch = useMatch({ from: rootRouteId });\n const user = rootMatch.context.user;\n\n const supportedLanguages = (\n Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []\n ).filter((lng) => lng !== \"cimode\");\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\n\n const colorModes: Array<{\n mode: Exclude<typeof mode, undefined>;\n icon: typeof LightMode;\n label: string;\n }> = [\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\n ];\n\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) =>\n setAnchorElement(event.currentTarget);\n const closeMenu = () => {\n setAnchorElement(undefined);\n setTimeout(() => setTab(\"settings\"), 300);\n };\n\n const changeTab = (newTab: TabType) => () => setTab(newTab);\n\n const settings = (\n <List\n component=\"nav\"\n subheader={\n <ListSubheader sx={{ backgroundColor: \"transparent\" }}>\n {t(\"Layout.Settings\")}\n </ListSubheader>\n }\n >\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\n <ListItemIcon>\n <Brightness4 />\n </ListItemIcon>\n <ListItemText\n primary={t(\"Layout.Appearance\")}\n secondary={colorModes.find((m) => m.mode === mode)?.label ?? t(\"Layout.System\")}\n />\n <ChevronRight />\n </ListItemButton>\n\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\n <ListItemIcon>\n <Translate />\n </ListItemIcon>\n <ListItemText\n primary={t(\"Layout.Language\")}\n secondary={capitalize(languageDisplayNames.of(i18n.language))}\n />\n <ChevronRight />\n </ListItemButton>\n </List>\n );\n\n const theme = (\n <List\n subheader={\n <ListSubheader\n onClick={changeTab(\"settings\")}\n sx={{\n backgroundColor: \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n px: 1,\n cursor: \"pointer\",\n }}\n >\n <IconButton size=\"small\" sx={{ mr: 0.5 }} aria-label=\"Back\">\n <ArrowBack fontSize=\"small\" />\n </IconButton>{\" \"}\n {t(\"Layout.Appearance\")}\n </ListSubheader>\n }\n >\n {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\n <ListItemButton\n key={modeValue}\n onClick={() => {\n setMode(modeValue);\n closeMenu();\n }}\n selected={mode === modeValue}\n >\n <ListItemIcon>\n <Icon />\n </ListItemIcon>\n <ListItemText primary={label} />\n </ListItemButton>\n ))}\n </List>\n );\n\n const language = (\n <List\n subheader={\n <ListSubheader\n onClick={changeTab(\"settings\")}\n sx={{\n backgroundColor: \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n px: 1,\n cursor: \"pointer\",\n }}\n >\n <IconButton size=\"small\" sx={{ mr: 0.5 }} aria-label=\"Back\">\n <ArrowBack fontSize=\"small\" />\n </IconButton>{\" \"}\n {t(\"Layout.Language\")}\n </ListSubheader>\n }\n >\n {supportedLanguages.map((languageCode) => (\n <ListItemButton\n key={languageCode}\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\n selected={i18n.resolvedLanguage === languageCode}\n >\n <ListItemIcon>{i18n.resolvedLanguage === languageCode && <Done />}</ListItemIcon>\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\n </ListItemButton>\n ))}\n </List>\n );\n\n return (\n <Fragment>\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu} aria-label=\"Account\">\n {user ? (\n <UserAvatar />\n ) : (\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\n )}\n </IconButton>\n\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\n <Box sx={{ width: 240 }}>\n <List disablePadding>\n {user ? (\n <Fragment>\n <ListItem>\n <ListItemText\n primary={user.name}\n secondary={\n <span>\n {user.employeeId && <span>{user.employeeId}</span>}\n {user.employeeId && <br />}\n {user.department && <span>{user.department}</span>}\n </span>\n }\n />\n </ListItem>\n <ListItemButton\n onClick={() => {\n clearSessionSnapshot();\n location.href = \"/auth/logout\";\n }}\n >\n <ListItemIcon>\n <Logout color=\"error\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.Logout\")} />\n </ListItemButton>\n </Fragment>\n ) : (\n <ListItemButton\n onClick={() => {\n const returnTo = location.pathname + location.search;\n location.href = `/auth/login?returnTo=${encodeURIComponent(returnTo)}`;\n }}\n >\n <ListItemIcon>\n <Login color=\"success\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.LogIn\")} />\n </ListItemButton>\n )}\n </List>\n\n {tab === \"settings\" && settings}\n {tab === \"theme\" && theme}\n {tab === \"language\" && language}\n </Box>\n </Menu>\n </Fragment>\n );\n};\n","import { Box, Chip, Stack, Typography } from \"@mui/material\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport z from \"zod\";\nimport type { FC } from \"react\";\nimport { manifest } from \"virtual:wcz-layout\";\nimport { RouterIconButton } from \"~/components/router/RouterIconButton\";\n\nconst PRODUCTION_ENV = \"PRD\";\n\nconst getEnv = (url: string | undefined) =>\n z\n .string()\n .refine((u) => u.split(\"-\").length > 2)\n .transform((u) => u.split(\"-\")[2].toUpperCase())\n .catch(\"LOCALHOST\")\n .parse(url);\n\nexport const AppTitle: FC = () => {\n const router = useRouter();\n const env = getEnv(router.origin);\n const isProduction = env === PRODUCTION_ENV;\n\n return (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: \"center\", flexGrow: 1 }}>\n <RouterIconButton to=\"/\" size=\"small\">\n <img src=\"/favicon-32x32.png\" alt={manifest.name} loading=\"lazy\" />\n </RouterIconButton>\n <Typography variant=\"h6\">\n <Box component=\"span\" sx={{ display: { xs: \"inline\", sm: \"none\" } }}>\n {manifest.short_name ?? manifest.name}\n </Box>\n <Box component=\"span\" sx={{ display: { xs: \"none\", sm: \"inline\" } }}>\n {manifest.name}\n </Box>\n </Typography>\n {!isProduction && <Chip size=\"small\" label={env} color=\"primary\" />}\n </Stack>\n );\n};\n","import type { LinkOptions } from \"@tanstack/react-router\";\n\ntype NavigationBase = { hidden?: boolean };\n\ntype NavigationBaseItem = NavigationBase & {\n title: string;\n icon: React.ReactNode;\n};\n\nexport type NavigationPageItem = NavigationBaseItem &\n Pick<LinkOptions, \"to\" | \"href\" | \"params\" | \"search\"> & { kind: \"item\" };\n\nexport type NavigationPageGroup = NavigationBaseItem & {\n kind: \"group\";\n children: Array<NavigationItem>;\n};\n\nexport type NavigationDivider = NavigationBase & { kind: \"divider\" };\n\nexport type NavigationHeader = NavigationBase & {\n kind: \"header\";\n title: string;\n};\n\nexport type NavigationItem =\n | NavigationPageItem\n | NavigationPageGroup\n | NavigationDivider\n | NavigationHeader;\n\nexport type Navigation = Array<NavigationItem>;\n\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem =>\n item.kind === \"item\";\nexport const isPageGroup = (item: NavigationItem): item is NavigationPageGroup =>\n item.kind === \"group\";\nexport const isDivider = (item: NavigationItem): item is NavigationDivider =>\n item.kind === \"divider\";\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => item.kind === \"header\";\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Collapse, Grow } from \"@mui/material\";\nimport Avatar from \"@mui/material/Avatar\";\nimport Box from \"@mui/material/Box\";\nimport ListItem from \"@mui/material/ListItem\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport Paper from \"@mui/material/Paper\";\nimport { styled } from \"@mui/material/styles\";\nimport Typography from \"@mui/material/Typography\";\nimport { Fragment, useState } from \"react\";\nimport { MINI_WIDTH } from \"./NavigationRail\";\nimport { isPageGroup } from \"~/models/Navigation\";\nimport type { NavigationItem, NavigationPageGroup, NavigationPageItem } from \"~/models/Navigation\";\nimport type { FC, ReactNode } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material/styles\";\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\n\nconst ICON_SIZE = 34;\n\nconst getSelectedColor = (theme: Theme) =>\n theme.vars?.palette.primary.dark ?? theme.palette.primary.dark;\n\nconst getActionActiveColor = (theme: Theme) =>\n theme.vars?.palette.action.active ?? theme.palette.action.active;\n\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\n borderRadius: Number(theme.shape.borderRadius) * 2,\n \"&.Mui-selected\": {\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\n color: getSelectedColor(theme),\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: getSelectedColor(theme),\n },\n \"& .MuiTouchRipple-child\": {\n backgroundColor: getSelectedColor(theme),\n },\n },\n \"& .MuiSvgIcon-root\": {\n color: getActionActiveColor(theme),\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: getActionActiveColor(theme),\n },\n}));\n\nconst routerButtonSx: SxProps<Theme> = (theme: Theme) => ({\n borderRadius: 2,\n \"&.Mui-selected\": {\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\n color: getSelectedColor(theme),\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: getSelectedColor(theme),\n },\n \"& .MuiTouchRipple-child\": {\n backgroundColor: getSelectedColor(theme),\n },\n },\n \"& .MuiSvgIcon-root\": {\n color: getActionActiveColor(theme),\n },\n \"& .MuiAvatar-root\": {\n backgroundColor: getActionActiveColor(theme),\n },\n});\n\nconst IconOrAvatar: FC<{ item: NavigationPageItem | NavigationPageGroup; collapsed?: boolean }> = ({\n item,\n collapsed,\n}) => {\n if (item.icon || collapsed) {\n return (\n <Box\n sx={\n collapsed\n ? {\n position: \"absolute\",\n left: \"50%\",\n top: \"calc(50% - 6px)\",\n transform: \"translate(-50%, -50%)\",\n }\n : {}\n }\n >\n <ListItemIcon\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: ICON_SIZE,\n }}\n >\n {item.icon ?? null}\n {!item.icon && collapsed ? (\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>\n {item.title\n .split(\" \")\n .slice(0, 2)\n .map((word) => word.charAt(0).toUpperCase())\n .join(\"\")}\n </Avatar>\n ) : null}\n </ListItemIcon>\n {collapsed ? (\n <Typography\n variant=\"caption\"\n sx={{\n position: \"absolute\",\n bottom: -18,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n fontSize: 10,\n fontWeight: 500,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: MINI_WIDTH - 28,\n }}\n >\n {item.title}\n </Typography>\n ) : null}\n </Box>\n );\n }\n return null;\n};\n\ninterface MiniPopoverProps {\n open: boolean;\n children?: ReactNode;\n}\n\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, children }) => (\n <Grow in={open}>\n <Box\n sx={{\n position: \"fixed\",\n left: MINI_WIDTH,\n pl: \"2px\",\n pb: \"10px\",\n }}\n >\n <Paper\n sx={{\n pt: 0.5,\n pb: 0.5,\n transform: \"translateY(calc(50% - 30px))\",\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n }}\n >\n {children}\n </Paper>\n </Box>\n </Grow>\n);\n\ninterface NavigationListItemProps {\n item: NavigationPageItem | NavigationPageGroup;\n isOpen?: boolean;\n selected?: boolean;\n disabled?: boolean;\n collapsed?: boolean;\n isSidebarFullyExpanded?: boolean;\n isSidebarFullyCollapsed?: boolean;\n onClick?: (item: NavigationPageItem | NavigationPageGroup) => void;\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\n onClose?: () => void;\n}\n\nexport const NavigationListItem: FC<NavigationListItemProps> = ({\n item,\n isOpen,\n selected,\n disabled,\n collapsed,\n isSidebarFullyExpanded = true,\n isSidebarFullyCollapsed,\n onClick,\n renderNested,\n onClose,\n}) => {\n const [hoveredMiniItemId, setHoveredMiniItemId] = useState<string | null>(null);\n const groupItem = isPageGroup(item);\n const itemId = groupItem ? `group-${item.title}` : `item-${item.to ?? item.href ?? item.title}`;\n\n const chevronSx: SxProps<Theme> = (theme: Theme) => {\n if (collapsed && isSidebarFullyCollapsed && groupItem) {\n return {\n fontSize: 18,\n position: \"absolute\",\n top: \"41.5%\",\n right: \"2px\",\n transform: \"translateY(-50%) rotate(-90deg)\",\n };\n }\n if (!collapsed && isSidebarFullyExpanded && groupItem) {\n return {\n ml: 0.5,\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\n transition: theme.transitions.create(\"transform\", {\n easing: theme.transitions.easing.sharp,\n duration: 100,\n }),\n };\n }\n return { display: \"none\" };\n };\n\n const shouldJustExpand = groupItem && !collapsed;\n\n const buttonProps = {\n selected,\n disabled,\n sx: { px: 1.4, height: collapsed ? 60 : 48 },\n };\n\n const buttonContent = (\n <>\n <IconOrAvatar item={item} collapsed={collapsed} />\n {!collapsed && (\n <ListItemText\n primary={item.title}\n slotProps={{ primary: { noWrap: true, title: item.title } }}\n sx={{\n ml: 1.2,\n flex: 1,\n minWidth: 0,\n \"& .MuiTypography-root\": {\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n }}\n />\n )}\n {groupItem ? <ExpandMoreIcon sx={chevronSx} /> : null}\n </>\n );\n\n const listItem = (\n <ListItem\n {...(groupItem && collapsed\n ? {\n onMouseEnter: () => {\n setHoveredMiniItemId(itemId);\n },\n onMouseLeave: () => {\n setHoveredMiniItemId(null);\n },\n }\n : {})}\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\n >\n {groupItem ? (\n <StyledNavButton\n {...buttonProps}\n onClick={shouldJustExpand ? () => onClick?.(item) : undefined}\n >\n {buttonContent}\n </StyledNavButton>\n ) : (\n <RouterListItemButton\n {...buttonProps}\n to={item.to}\n href={item.href}\n params={item.params}\n search={item.search}\n onClick={onClose}\n sx={[buttonProps.sx, routerButtonSx]}\n >\n {buttonContent}\n </RouterListItemButton>\n )}\n\n {groupItem && collapsed ? (\n <MiniPopover open={itemId === hoveredMiniItemId}>\n {renderNested?.(item.children)}\n </MiniPopover>\n ) : null}\n </ListItem>\n );\n\n return (\n <Fragment key={itemId}>\n {listItem}\n {groupItem && !collapsed ? (\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n {renderNested?.(item.children)}\n </Collapse>\n ) : null}\n </Fragment>\n );\n};\n","import Divider from \"@mui/material/Divider\";\nimport List from \"@mui/material/List\";\nimport ListSubheader from \"@mui/material/ListSubheader\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { NavigationListItem } from \"./NavigationListItem\";\nimport { MINI_WIDTH } from \"./NavigationRail\";\nimport type { FC, ReactNode } from \"react\";\nimport { isPageItem, isPageGroup, isDivider, isHeader } from \"~/models/Navigation\";\nimport type {\n Navigation,\n NavigationItem,\n NavigationPageGroup,\n NavigationPageItem,\n} from \"~/models/Navigation\";\n\ninterface NavigationListProps {\n subNavigation: Navigation;\n depth?: number;\n collapsed?: boolean;\n isPopover?: boolean;\n isSidebarFullyExpanded?: boolean;\n isSidebarFullyCollapsed?: boolean;\n renderItem?: (\n item: NavigationPageItem | NavigationPageGroup,\n context: { collapsed: boolean },\n ) => ReactNode;\n activePath?: string | null;\n onClose?: () => void;\n}\n\nexport const NavigationList: FC<NavigationListProps> = ({\n subNavigation,\n depth = 0,\n collapsed,\n isPopover,\n isSidebarFullyExpanded = true,\n isSidebarFullyCollapsed,\n renderItem,\n activePath,\n onClose,\n}) => {\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\n\n useEffect(() => {\n if (collapsed) setOpenKeys([]);\n }, [collapsed]);\n\n const toggleKey = (key: string) =>\n setOpenKeys((previous) =>\n previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key],\n );\n\n const renderNested = (children: Array<NavigationItem>) => (\n <NavigationList\n subNavigation={children}\n depth={depth + 1}\n isPopover={collapsed}\n activePath={activePath}\n onClose={onClose}\n />\n );\n\n const filteredNavigation = subNavigation.filter((nav) => !nav.hidden);\n\n return (\n <List\n sx={{\n padding: 0,\n mt: isPopover && depth === 1 ? 0.5 : 0,\n mb: depth === 0 && !isPopover ? 4 : 0.5,\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\n minWidth: isPopover && depth === 1 ? 240 : \"auto\",\n width: collapsed ? MINI_WIDTH : \"auto\",\n }}\n >\n {filteredNavigation.map((navItem, index) => {\n if (isHeader(navItem)) {\n return (\n <ListSubheader\n key={`subheader-${depth}-${index}`}\n sx={{\n fontSize: 12,\n fontWeight: \"700\",\n height: collapsed ? 0 : 40,\n px: 2,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n zIndex: 2,\n bgcolor: \"transparent\",\n position: \"static\",\n }}\n >\n {navItem.title}\n </ListSubheader>\n );\n }\n\n if (isDivider(navItem)) {\n const nextItem = filteredNavigation[index + 1];\n return (\n <li key={`divider-${depth}-${index}`}>\n <Divider\n sx={{ mx: 1, mt: 1, mb: nextItem && isHeader(nextItem) && !collapsed ? 0 : 1 }}\n />\n </li>\n );\n }\n\n if (!isPageItem(navItem) && !isPageGroup(navItem)) return null;\n\n const key = `item-${depth}-${index}`;\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\n const selected = isPageItem(navItem) && navItem.to === activePath;\n\n if (renderItem)\n return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\n\n return (\n <NavigationListItem\n key={key}\n item={navItem}\n isOpen={openKeys.includes(uniqueItemKey)}\n selected={selected}\n collapsed={collapsed}\n isSidebarFullyExpanded={isSidebarFullyExpanded}\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\n onClick={\n isPageGroup(navItem) && !collapsed ? () => toggleKey(uniqueItemKey) : undefined\n }\n renderNested={renderNested}\n onClose={onClose}\n />\n );\n })}\n </List>\n );\n};\n","import Box from \"@mui/material/Box\";\nimport { useLocation } from \"@tanstack/react-router\";\nimport { NavigationList } from \"./NavigationList\";\nimport type { FC } from \"react\";\nimport { isHeader } from \"~/models/Navigation\";\nimport type { Navigation } from \"~/models/Navigation\";\n\ninterface NavigationContentProps {\n navigation: Navigation;\n collapsed: boolean;\n expanded: boolean;\n setExpanded: (open: boolean) => void;\n showPermanent: boolean;\n}\n\nexport const NavigationContent: FC<NavigationContentProps> = ({\n navigation,\n collapsed,\n expanded,\n setExpanded,\n showPermanent,\n}) => {\n const location = useLocation();\n\n return (\n <Box\n component=\"nav\"\n sx={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n overflow: \"auto\",\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\n overflowX: \"hidden\",\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\n }}\n >\n <NavigationList\n subNavigation={navigation}\n collapsed={collapsed}\n isSidebarFullyExpanded={expanded}\n isSidebarFullyCollapsed={!expanded}\n activePath={location.pathname}\n onClose={showPermanent ? undefined : () => setExpanded(false)}\n />\n </Box>\n );\n};\n","import Drawer from \"@mui/material/Drawer\";\nimport { Fragment } from \"react\";\nimport { NavigationContent } from \"./NavigationContent\";\nimport type { FC } from \"react\";\nimport type { Navigation } from \"~/models/Navigation\";\n\nexport const MINI_WIDTH = 84;\nexport const EXPANDED_WIDTH = 320;\nexport const TOOLBAR_HEIGHT = 64;\n\ninterface NavigationRailProps {\n navigation: Navigation;\n expanded: boolean;\n setExpanded: (open: boolean) => void;\n}\n\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => (\n <Fragment>\n <Drawer\n variant=\"permanent\"\n sx={{\n display: { xs: \"none\", sm: \"block\" },\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\n [\"& .MuiDrawer-paper\"]: (theme) => ({\n position: \"absolute\",\n top: `${TOOLBAR_HEIGHT}px`,\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\n background: \"transparent\",\n borderTop: \"1px solid\",\n borderColor: theme.vars?.palette.divider ?? theme.palette.divider,\n boxShadow: \"none\",\n }),\n }}\n >\n <NavigationContent\n navigation={navigation}\n collapsed={!expanded}\n expanded={expanded}\n setExpanded={setExpanded}\n showPermanent={true}\n />\n </Drawer>\n\n <Drawer\n open={expanded}\n onClose={() => setExpanded(false)}\n sx={{\n display: { xs: \"block\", sm: \"none\" },\n \"& .MuiDrawer-paper\": {\n width: \"min(280px, calc(100vw - 56px))\",\n },\n }}\n >\n <NavigationContent\n navigation={navigation}\n collapsed={false}\n expanded={expanded}\n setExpanded={setExpanded}\n showPermanent={false}\n />\n </Drawer>\n </Fragment>\n);\n","import Menu from \"@mui/icons-material/Menu\";\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\nimport {\n AppBar,\n Box,\n CssBaseline,\n IconButton,\n InitColorSchemeScript,\n Stack,\n Toolbar,\n} from \"@mui/material\";\nimport { styled } from \"@mui/material/styles\";\nimport type { FC, ReactNode } from \"react\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { Platform } from \"~/lib/utils\";\nimport type { LayoutOptions } from \"~/models/LayoutOptions\";\nimport type { Navigation } from \"~/models/Navigation\";\nimport { ToolbarAccount } from \"./account/UserMenu\";\nimport { AppTitle } from \"./AppTitle\";\nimport { NavigationRail } from \"./navigation/NavigationRail\";\n\nconst NAVIGATION_STORAGE_KEY = \"navigation-open\";\n\nconst getInitialNavigationOpen = (): boolean => {\n if (Platform.isWindows || Platform.isMacOS)\n return localStorage.getItem(NAVIGATION_STORAGE_KEY) === \"true\";\n return false;\n};\n\nconst saveNavigationState = (value: boolean): void => {\n if (Platform.isWindows || Platform.isMacOS) {\n localStorage.setItem(NAVIGATION_STORAGE_KEY, String(value));\n }\n};\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n ...theme.mixins.toolbar,\n}));\n\ninterface LayoutProps {\n navigation: Navigation | undefined;\n options: LayoutOptions | undefined;\n children: ReactNode;\n}\n\nexport const Layout: FC<LayoutProps> = ({ navigation, options, children }) => {\n const [navigationOpen, setNavigationOpen] = useState(false);\n const showNavigation = navigation?.some((item) => item.hidden !== true);\n const showShell = options?.showShell ?? true;\n\n useEffect(() => {\n if (getInitialNavigationOpen()) setNavigationOpen(true);\n }, []);\n\n return (\n <Fragment>\n <InitColorSchemeScript />\n <CssBaseline />\n\n <Box\n sx={{\n display: \"flex\",\n height: \"100dvh\",\n maxHeight: \"100dvh\",\n overflow: \"hidden\",\n width: \"100%\",\n }}\n >\n {showShell && (\n <AppBar\n color=\"transparent\"\n position=\"fixed\"\n sx={{\n borderBottom: \"1px solid\",\n borderColor: \"var(--mui-palette-divider)\",\n boxShadow: \"none\",\n }}\n >\n <Toolbar>\n {showNavigation && (\n <IconButton\n aria-label=\"Toggle navigation\"\n onClick={() => {\n setNavigationOpen((previous) => {\n const newValue = !previous;\n saveNavigationState(newValue);\n return newValue;\n });\n }}\n sx={{ marginRight: 2 }}\n >\n {navigationOpen ? <MenuOpen /> : <Menu />}\n </IconButton>\n )}\n\n <AppTitle />\n\n {options?.appBarActions && (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: \"center\", mr: 1 }}>\n {options.appBarActions}\n </Stack>\n )}\n\n <ToolbarAccount />\n </Toolbar>\n </AppBar>\n )}\n\n {showNavigation && showShell && (\n <NavigationRail\n navigation={navigation!}\n expanded={navigationOpen}\n setExpanded={(newValue) => {\n setNavigationOpen(newValue);\n saveNavigationState(newValue);\n }}\n />\n )}\n\n <Box\n component=\"main\"\n sx={{\n flexGrow: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 0,\n height: \"100%\",\n overflow: \"hidden\",\n }}\n >\n {showShell && <DrawerHeader />}\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>{children}</Box>\n </Box>\n </Box>\n </Fragment>\n );\n};\n","import useEventCallback from \"@mui/utils/useEventCallback\";\nimport { useId, useRef, useState } from \"react\";\nimport { DialogsContext } from \"../contexts/DialogsContext\";\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/useDialogs\";\n\ninterface DialogStackEntry<TPayload, TResult> {\n key: string;\n open: boolean;\n promise: Promise<TResult>;\n Component: DialogComponent<TPayload, TResult>;\n payload: TPayload;\n onClose: (result: TResult) => Promise<void>;\n resolve: (result: TResult) => void;\n}\n\nexport interface DialogProviderProps {\n children?: React.ReactNode;\n}\n\nfunction DialogsProvider({ children }: Readonly<DialogProviderProps>) {\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\n const keyPrefix = useId();\n const nextId = useRef(0);\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\n\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\n Component: DialogComponent<TPayload, TResult>,\n payload: TPayload,\n options: OpenDialogOptions<TResult> = {},\n ) {\n const { onClose = async () => {} } = options;\n\n let resolve: (result: TResult) => void;\n const promise = new Promise<TResult>((resolveImpl) => {\n resolve = resolveImpl;\n });\n\n const key = `${keyPrefix}-${nextId.current}`;\n nextId.current += 1;\n\n const newEntry: DialogStackEntry<TPayload, TResult> = {\n key,\n open: true,\n promise,\n Component,\n payload,\n onClose,\n resolve: resolve!,\n };\n\n dialogMetadata.current.set(promise, newEntry);\n\n setStack((previousStack) => [...previousStack, newEntry]);\n\n return promise;\n });\n\n const removeDialogFromStack = (dialog: Promise<any>) => {\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\n dialogMetadata.current.delete(dialog);\n };\n\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\n setStack((previousStack) =>\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\n );\n\n setTimeout(() => removeDialogFromStack(dialog), 1000);\n });\n\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\n dialog: Promise<TResult>,\n result: TResult,\n ) {\n const entryToClose = dialogMetadata.current.get(dialog);\n if (!entryToClose) {\n throw new Error(\"Dialog not found in stack\");\n }\n\n try {\n await entryToClose.onClose(result);\n } finally {\n entryToClose.resolve(result);\n closeDialogUi(dialog);\n }\n\n return dialog;\n });\n\n return (\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\n {children}\n {stack.map(({ key, open, Component, payload, promise }) => (\n <Component\n key={key}\n payload={payload}\n open={open}\n onClose={async (result) => {\n await closeDialog(promise, result);\n }}\n />\n ))}\n </DialogsContext.Provider>\n );\n}\n\nexport { DialogsProvider };\n","import Alert from \"@mui/material/Alert\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SnackbarOrigin } from \"@mui/material/Snackbar\";\nimport type { AlertColor } from \"@mui/material/Alert\";\nimport type { NotificationOptions } from \"~/contexts/NotificationContext\";\nimport { NotificationContext } from \"~/contexts/NotificationContext\";\n\ninterface Notification {\n message: string;\n severity?: AlertColor;\n autoHideDuration: number;\n}\n\ninterface NotificationProviderProps {\n children: React.ReactNode;\n snackbarOrigin?: SnackbarOrigin;\n}\n\nconst STACK_INTERVAL = 1000;\n\nexport const NotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n snackbarOrigin,\n}) => {\n const [queue, setQueue] = useState<Array<Notification>>([]);\n const [current, setCurrent] = useState<Notification | null>(null);\n const open = Boolean(current);\n const processingTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const processQueue = () => {\n setQueue((prevQueue) => {\n if (prevQueue.length === 0) return prevQueue;\n\n const [next, ...rest] = prevQueue;\n setCurrent(next);\n return rest;\n });\n };\n\n useEffect(() => {\n if (!open && queue.length > 0) {\n processingTimeout.current = setTimeout(processQueue, current ? STACK_INTERVAL : 0);\n }\n\n return () => {\n if (processingTimeout.current) {\n clearTimeout(processingTimeout.current);\n }\n };\n }, [open, queue.length, current]);\n\n const notify = (message: string, options?: NotificationOptions) => {\n const notification: Notification = {\n message,\n severity: options?.severity,\n autoHideDuration: options?.autoHideDuration ?? 5000,\n };\n\n setQueue((prev) => [...prev, notification]);\n };\n\n return (\n <NotificationContext value={{ notify }}>\n {children}\n <Snackbar\n open={open}\n autoHideDuration={current?.autoHideDuration}\n onClose={(_event, reason) => {\n if (reason === \"clickaway\") return;\n setCurrent(null);\n }}\n anchorOrigin={snackbarOrigin}\n message={current?.message}\n >\n {current?.severity ? (\n <Alert onClose={() => setCurrent(null)} severity={current.severity} variant=\"filled\">\n {current.message}\n </Alert>\n ) : undefined}\n </Snackbar>\n </NotificationContext>\n );\n};\n","import createCache from \"@emotion/cache\";\nimport { CacheProvider } from \"@emotion/react\";\nimport type { Theme } from \"@mui/material\";\nimport { ThemeProvider } from \"@mui/material\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers-pro\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers-pro/AdapterDayjs\";\nimport dayjs from \"dayjs\";\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport type { FC, ReactNode } from \"react\";\nimport { Fragment, useEffect } from \"react\";\nimport { I18nextProvider, initReactI18next, useTranslation } from \"react-i18next\";\nimport { resources } from \"virtual:wcz-layout\";\nimport z from \"zod\";\nimport { Layout } from \"~/components/core/Layout\";\nimport { userQueryOptions } from \"~/lib/auth/user\";\nimport type { LayoutOptions } from \"~/models/LayoutOptions\";\nimport type { Navigation } from \"~/models/Navigation\";\nimport { DialogsProvider } from \"./DialogsProvider\";\nimport { NotificationProvider } from \"./NotificationProvider\";\n\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\nconst LANGUAGE_COOKIE = \"i18next\";\n\nconst normalizeLocale = (locale: string) => locale.replace(/[^a-z]/gi, \"\").toLowerCase();\n\nconst zodLocales = new Map(\n Object.entries(z.core.locales).map(([locale, createLocale]) => [\n normalizeLocale(locale),\n createLocale,\n ]),\n);\n\nconst setLocale = (language: string) => {\n const baseLanguage = language.split(/[-_]/)[0];\n const createLocale =\n zodLocales.get(normalizeLocale(language)) ??\n zodLocales.get(normalizeLocale(baseLanguage)) ??\n z.core.locales.en;\n\n z.config(createLocale());\n // dayjs keeps the previous locale when it ships no data for the language — fall back like zod.\n if (!dayjs.locale(language).startsWith(baseLanguage)) dayjs.locale(\"en\");\n};\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n lng: \"en\",\n fallbackLng: \"en\",\n supportedLngs: Object.keys(resources),\n // `caches: []` on purpose: i18next persists whatever language it inits with,\n // which here is the pinned one — it would bury the user's actual choice.\n detection: { caches: [] },\n interpolation: { escapeValue: false },\n });\n\nsetLocale(i18n.resolvedLanguage ?? i18n.language);\n\ni18n.on(\"languageChanged\", (language) => {\n setLocale(language);\n if (typeof document !== \"undefined\")\n document.cookie = `${LANGUAGE_COOKIE}=${language};path=/;max-age=${YEAR_IN_SECONDS};SameSite=Lax`;\n});\n\ninterface ProvidersProps {\n options?: LayoutOptions;\n navigation?: Navigation;\n theme: Theme;\n children: ReactNode;\n}\n\nexport const LayoutProvider: FC<ProvidersProps> = ({ options, navigation, theme, children }) => {\n const emotionCache = createCache({ key: \"css\" });\n\n const { i18n: activeI18n } = useTranslation();\n\n useQuery(userQueryOptions);\n\n // Post-hydration: run the detector (cookie, then browser language) and switch.\n // No-op when it resolves to the language we already rendered.\n useEffect(() => {\n void i18n.changeLanguage();\n }, []);\n\n useEffect(() => {\n if (\"serviceWorker\" in navigator) {\n void navigator.serviceWorker.register(\"/sw.js\");\n }\n }, []);\n\n return (\n <CacheProvider value={emotionCache}>\n <I18nextProvider i18n={i18n}>\n <ThemeProvider theme={theme}>\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={activeI18n.language}>\n <NotificationProvider snackbarOrigin={options?.snackbarOrigin}>\n <DialogsProvider>\n <Layout navigation={navigation} options={options}>\n <Fragment key={activeI18n.language}>{children}</Fragment>\n </Layout>\n </DialogsProvider>\n </NotificationProvider>\n </LocalizationProvider>\n </ThemeProvider>\n </I18nextProvider>\n </CacheProvider>\n );\n};\n"],"mappings":"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"}