wcz-layout 8.0.0 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts +1 -0
- package/dist/components.js +45 -71
- package/dist/components.js.map +1 -1
- package/dist/hooks.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +53 -83
- package/dist/index.js.map +1 -1
- package/dist/middleware.js +1 -1
- package/dist/middleware.js.map +1 -1
- package/dist/{msalClient-d7_QeRNu.d.ts → msalClient-MNN6BwL6.d.ts} +2 -2
- package/dist/{queries-e7HNiutf.js → queries-JPqCc5Tb.js} +2 -2
- package/dist/{queries-e7HNiutf.js.map → queries-JPqCc5Tb.js.map} +1 -1
- package/dist/query.js +1 -1
- package/dist/{utils-Dz7akq1k.js → utils-CqQKSaSs.js} +46 -24
- package/dist/utils-CqQKSaSs.js.map +1 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +6 -6
- package/dist/utils-Dz7akq1k.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["queryCollectionOptions","createCollection","axios","z","getAccessToken","queryClient","api","create","baseURL","interceptors","request","use","config","accessToken","headers","set","userPhotoSchema","object","id","string","photoUrl","UserPhoto","infer","fetchProfilePhoto","Promise","Array","response","get","responseType","base64","btoa","Uint8Array","data","reduce","byte","String","fromCodePoint","userPhotoCollection","queryKey","schema","queryFn","getKey","item","staleTime","Infinity","gcTime","Avatar","useLiveSuspenseQuery","FC","userPhotoCollection","UserAvatar","$","_c","$i","Symbol","for","data","_temp","t0","photoUrl","t1","width","xs","sm","height","t2","q","from","todo","findOne","AuthenticatedTemplate","UnauthenticatedTemplate","useMsal","AccountCircle","ArrowBack","Brightness4","ChevronRight","DarkMode","Done","LightMode","Login","Logout","SettingsBrightness","Translate","Box","IconButton","List","ListItem","ListItemButton","ListItemIcon","ListItemText","ListSubheader","Menu","useColorScheme","rootRouteId","useMatch","FC","Fragment","useState","useTranslation","UserAvatar","TabType","capitalize","value","charAt","toUpperCase","slice","ToolbarAccount","$","_c","$i","Symbol","for","anchorElement","setAnchorElement","tab","setTab","open","Boolean","t","i18n","mode","setMode","instance","t0","from","rootMatch","user","context","T0","closeMenu","openMenu","settings","t1","t2","theme","supportedLanguages","Array","isArray","options","supportedLngs","filter","_temp","languageDisplayNames","Intl","DisplayNames","language","type","t3","t4","icon","label","t5","t6","t7","t8","t9","colorModes","t10","event","currentTarget","t11","undefined","setTimeout","t12","newTab","changeTab","t13","backgroundColor","t14","t15","t16","t17","py","t18","t19","t20","find","m","t21","t22","t23","t24","t25","t26","t27","t28","t29","of","t30","t31","t32","display","alignItems","px","cursor","t33","mr","t34","t35","t36","map","t37","modeValue","Icon","t38","t39","t40","t41","languageCode","changeLanguage","finally","resolvedLanguage","width","xs","sm","height","name","employeeId","department","logoutRedirect","postLogoutRedirectUri","loginRedirect","lng","Chip","Stack","Typography","useRouter","z","FC","clientEnv","RouterIconButton","PRODUCTION_ENV","getEnv","url","string","refine","u","split","length","transform","toUpperCase","catch","parse","AppTitle","$","_c","$i","Symbol","for","router","t0","origin","env","isProduction","t1","alignItems","flexGrow","t2","t3","VITE_APP_TITLE","t4","t5","LinkOptions","NavigationBase","hidden","NavigationBaseItem","title","icon","React","ReactNode","NavigationPageItem","Pick","kind","NavigationPageGroup","children","Array","NavigationItem","NavigationDivider","NavigationHeader","Navigation","isPageItem","item","isPageGroup","isDivider","isHeader","ExpandMoreIcon","Collapse","Grow","Avatar","Box","ListItem","ListItemButton","ListItemIcon","ListItemText","Paper","styled","Typography","Fragment","useState","MINI_WIDTH","isPageGroup","NavigationItem","NavigationPageGroup","NavigationPageItem","FC","ReactNode","SxProps","Theme","RouterListItemButton","ICON_SIZE","getSelectedColor","theme","vars","palette","primary","dark","getActionActiveColor","action","active","StyledNavButton","borderRadius","Number","shape","color","backgroundColor","routerButtonSx","IconOrAvatar","item","collapsed","t0","$","_c","$i","Symbol","for","icon","t1","position","left","top","transform","t2","display","alignItems","justifyContent","minWidth","t3","t4","title","width","height","fontSize","split","slice","map","_temp","join","t5","t6","bottom","fontWeight","textAlign","whiteSpace","overflow","textOverflow","maxWidth","t7","MiniPopoverProps","open","children","MiniPopover","pl","pb","pt","maxHeight","overflowY","overscrollBehavior","NavigationListItemProps","isOpen","selected","disabled","isSidebarFullyExpanded","isSidebarFullyCollapsed","onClick","renderNested","sub","Array","onClose","NavigationListItem","undefined","hoveredMiniItemId","setHoveredMiniItemId","groupItem","itemId","to","href","right","ml","transition","transitions","create","easing","sharp","duration","chevronSx","shouldJustExpand","px","sx","buttonProps","t8","noWrap","flex","t9","t10","buttonContent","t11","onMouseEnter","onMouseLeave","t12","py","overflowX","t13","params","search","t14","t15","listItem","t16","t17","word","charAt","toUpperCase","Divider","List","ListSubheader","Fragment","useEffect","useState","NavigationListItem","MINI_WIDTH","FC","ReactNode","isPageItem","isPageGroup","isDivider","isHeader","Navigation","NavigationItem","NavigationPageGroup","NavigationPageItem","NavigationListProps","subNavigation","depth","collapsed","isPopover","isSidebarFullyExpanded","isSidebarFullyCollapsed","renderItem","item","context","activePath","onClose","NavigationList","t0","$","_c","$i","Symbol","for","t1","t2","undefined","t3","openKeys","setOpenKeys","t4","t5","t6","key","previous","includes","filter","k","toggleKey","t7","children","renderNested","t8","filteredNavigation","_temp","t9","t10","t11","t12","t13","t14","padding","mt","mb","pl","minWidth","width","map","navItem","index","fontSize","fontWeight","height","px","overflow","textOverflow","whiteSpace","zIndex","bgcolor","position","title","nextItem","mx","key_0","uniqueItemKey","selected","to","nav","hidden","Box","useLocation","NavigationList","FC","isHeader","Navigation","NavigationContentProps","navigation","collapsed","expanded","setExpanded","open","showPermanent","NavigationContent","t0","$","_c","$i","Symbol","for","location","t1","t2","t3","height","display","flexDirection","justifyContent","overflow","scrollbarGutter","overflowX","pt","t4","t5","undefined","t6","pathname","t7","Drawer","Fragment","NavigationContent","FC","Navigation","MINI_WIDTH","EXPANDED_WIDTH","TOOLBAR_HEIGHT","NavigationRailProps","navigation","expanded","setExpanded","open","NavigationRail","t0","$","_c","$i","Symbol","for","t1","xs","sm","t2","t3","theme","position","top","height","width","background","borderTop","borderColor","vars","palette","divider","boxShadow","t4","display","t5","t6","t7","t8","t9","t10","t11","t12","InteractionType","MsalAuthenticationTemplate","Menu","MenuOpen","AppBar","Box","CssBaseline","IconButton","InitColorSchemeScript","Toolbar","styled","useMatches","FC","ReactNode","Fragment","useState","Platform","LayoutOptions","Navigation","ToolbarAccount","AppTitle","NavigationRail","NAVIGATION_STORAGE_KEY","getInitialNavigationOpen","isWindows","isMacOS","localStorage","getItem","saveNavigationState","value","setItem","String","DrawerHeader","theme","display","alignItems","justifyContent","padding","spacing","mixins","toolbar","LayoutProps","navigation","options","children","Layout","t0","$","_c","$i","Symbol","for","navigationOpen","setNavigationOpen","matches","t1","publicRoutes","currentRoutePath","at","fullPath","includes","isPublicRoute","showShell","t2","t3","t4","height","maxHeight","overflow","width","t5","borderBottom","borderColor","boxShadow","_temp","marginRight","t6","newValue_0","newValue","t7","flexGrow","flexDirection","minWidth","t8","t9","flex","position","t10","Redirect","t11","t12","t13","previous","useEventCallback","useId","useRef","useState","DialogsContext","DialogComponent","OpenDialog","OpenDialogOptions","DialogStackEntry","key","open","promise","Promise","TResult","Component","TPayload","payload","onClose","result","resolve","DialogProviderProps","children","React","ReactNode","DialogsProvider","Readonly","stack","setStack","Array","keyPrefix","nextId","dialogMetadata","WeakMap","requestDialog","options","resolveImpl","current","newEntry","set","previousStack","removeDialogFromStack","dialog","filter","entry","delete","closeDialogUi","map","setTimeout","closeDialog","entryToClose","get","Error","close","EventMessage","EventType","InteractionStatus","MsalProvider","useMsal","useNavigate","useRouter","FC","ReactNode","useEffect","useRef","useState","pca","subscribeToTokenInteractionRequired","TanStackNavigationClient","MsalAuthProviderProps","children","MsalAuthEffects","$","_c","$i","Symbol","for","accounts","inProgress","instance","router","pendingScopes","setPendingScopes","previousInProgress","navigate","setNavigationClient","t0","t1","callbackId","addEventCallback","event","eventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","LOGOUT_SUCCESS","invalidate","removeEventCallback","t2","t3","wasInteracting","current","None","t4","t5","t6","t7","account","getActiveAccount","acquireTokenRedirect","scopes","catch","_temp","MsalAuthProvider","Alert","Snackbar","useEffect","useRef","useState","SnackbarOrigin","AlertColor","NotificationOptions","NotificationContext","Notification","message","severity","autoHideDuration","NotificationProviderProps","children","React","ReactNode","snackbarOrigin","STACK_INTERVAL","NotificationProvider","FC","t0","$","_c","$i","Symbol","for","t1","queue","setQueue","current","setCurrent","open","Boolean","processingTimeout","t2","prevQueue","length","next","rest","processQueue","t3","t4","setTimeout","clearTimeout","t5","options","notification","prev","notify","t6","t7","t8","_event","reason","t9","t10","undefined","t11","t12","Theme","ThemeProvider","LocalizationProvider","AdapterDayjs","dayjs","i18n","LanguageDetector","FC","ReactNode","useEffect","initReactI18next","resources","z","Layout","LayoutOptions","Navigation","DialogsProvider","MsalAuthProvider","NotificationProvider","YEAR_IN_MINUTES","setLocale","language","config","core","locales","locale","use","init","fallbackLng","supportedLngs","Object","keys","detection","caches","cookieMinutes","interpolation","escapeValue","resolvedLanguage","on","ProvidersProps","options","navigation","theme","children","LayoutProvider","t0","$","_c","$i","Symbol","for","t1","_temp","t2","snackbarOrigin","t3","t4","t5","navigator","serviceWorker","register"],"sources":["../src/lib/db/collections/userCollection.ts","../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/MsalAuthProvider.tsx","../src/providers/NotificationProvider.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import { queryCollectionOptions } from \"@tanstack/query-db-collection\";\nimport { createCollection } from \"@tanstack/react-db\";\nimport axios from \"axios\";\nimport * as z from \"zod\";\nimport { getAccessToken } from \"~/lib/auth/msalClient\";\nimport { queryClient } from \"~/lib/queryClient\";\n\nexport const api = axios.create({\n baseURL: \"https://graph.microsoft.com/v1.0\",\n});\n\napi.interceptors.request.use(async (config) => {\n const accessToken = await getAccessToken(\"graph\");\n config.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return config;\n});\n\nconst userPhotoSchema = z.object({\n id: z.string(),\n photoUrl: z.string(),\n});\n\ntype UserPhoto = z.infer<typeof userPhotoSchema>;\n\nconst fetchProfilePhoto = async (): Promise<Array<UserPhoto>> => {\n const response = await api.get(\"/me/photo/$value\", {\n responseType: \"arraybuffer\",\n });\n\n const base64 = btoa(\n new Uint8Array(response.data).reduce((data, byte) => data + String.fromCodePoint(byte), \"\"),\n );\n\n return [\n {\n id: \"me\",\n photoUrl: `data:image/jpeg;base64,${base64}`,\n },\n ];\n};\n\nexport const userPhotoCollection = createCollection(\n queryCollectionOptions({\n queryKey: [\"graph\", \"me\", \"photo\"],\n schema: userPhotoSchema,\n queryFn: fetchProfilePhoto,\n getKey: (item) => item.id,\n queryClient,\n staleTime: Infinity,\n gcTime: Infinity,\n }),\n);\n","import { Avatar } from \"@mui/material\";\nimport { useLiveSuspenseQuery } from \"@tanstack/react-db\";\nimport { FC } from \"react\";\nimport { userPhotoCollection } from \"~/lib/db/collections/userCollection\";\n\nexport const UserAvatar: FC = () => {\n const { data } = useLiveSuspenseQuery((q) => q.from({ todo: userPhotoCollection }).findOne());\n\n return (\n <Avatar src={data?.photoUrl} sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\n );\n};\n","import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from \"@azure/msal-react\";\nimport 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 { 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 { instance } = useMsal();\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 }}>\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 }}>\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}>\n <AuthenticatedTemplate>\n <UserAvatar />\n </AuthenticatedTemplate>\n <UnauthenticatedTemplate>\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\n </UnauthenticatedTemplate>\n </IconButton>\n\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\n <Box sx={{ width: 240 }}>\n <List disablePadding>\n <AuthenticatedTemplate>\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={() => instance.logoutRedirect({ postLogoutRedirectUri: \"/\" })}\n >\n <ListItemIcon>\n <Logout color=\"error\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.Logout\")} />\n </ListItemButton>\n </AuthenticatedTemplate>\n\n <UnauthenticatedTemplate>\n <ListItemButton onClick={() => instance.loginRedirect()}>\n <ListItemIcon>\n <Login color=\"success\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.LogIn\")} />\n </ListItemButton>\n </UnauthenticatedTemplate>\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 { Chip, Stack, Typography } from \"@mui/material\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport z from \"zod\";\nimport type { FC } from \"react\";\nimport { clientEnv } from \"~/env\";\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=\"app-logo\" loading=\"lazy\" />\n </RouterIconButton>\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\n {!isProduction && <Chip size=\"small\" label={env} color=\"primary\" />}\n </Stack>\n );\n};\n","import { 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 {...buttonProps} onClick={shouldJustExpand ? () => onClick?.(item) : undefined}>\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 {\n isPageItem,\n isPageGroup,\n isDivider,\n isHeader,\n} 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?: (item: NavigationPageItem | NavigationPageGroup, context: { collapsed: boolean }) => 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 sx={{ mx: 1, mt: 1, mb: nextItem && isHeader(nextItem) && !collapsed ? 0 : 1 }} />\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={isPageGroup(navItem) && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\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 { InteractionType } from \"@azure/msal-browser\";\nimport { MsalAuthenticationTemplate } from \"@azure/msal-react\";\nimport 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 Toolbar,\n} from \"@mui/material\";\nimport { styled } from \"@mui/material/styles\";\nimport { useMatches } from \"@tanstack/react-router\";\nimport type { FC, ReactNode } from \"react\";\nimport { Fragment, 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(getInitialNavigationOpen);\n const matches = useMatches();\n const currentRoutePath = matches.at(-1)?.fullPath;\n const isPublicRoute = options?.publicRoutes?.includes(currentRoutePath) ?? false;\n const showShell = options?.showShell ?? true;\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 {navigation && (\n <IconButton\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 <ToolbarAccount />\n </Toolbar>\n </AppBar>\n )}\n\n {navigation && 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\" }}>\n {isPublicRoute ? (\n children\n ) : (\n <MsalAuthenticationTemplate interactionType={InteractionType.Redirect}>\n {children}\n </MsalAuthenticationTemplate>\n )}\n </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 type { EventMessage } from \"@azure/msal-browser\";\nimport { EventType, InteractionStatus } from \"@azure/msal-browser\";\nimport { MsalProvider, useMsal } from \"@azure/msal-react\";\nimport { useNavigate, useRouter } from \"@tanstack/react-router\";\nimport type { FC, ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n pca,\n subscribeToTokenInteractionRequired,\n TanStackNavigationClient,\n} from \"~/lib/auth/msalClient\";\n\ninterface MsalAuthProviderProps {\n children: ReactNode;\n}\n\nconst MsalAuthEffects: FC = () => {\n const { accounts, inProgress, instance } = useMsal();\n const router = useRouter();\n const [pendingScopes, setPendingScopes] = useState<Array<string> | null>(null);\n const previousInProgress = useRef(inProgress);\n const navigate = useNavigate();\n pca.setNavigationClient(new TanStackNavigationClient(navigate));\n\n useEffect(() => {\n const callbackId = instance.addEventCallback((event: EventMessage) => {\n if (\n event.eventType === EventType.LOGIN_SUCCESS ||\n event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS ||\n event.eventType === EventType.LOGOUT_SUCCESS\n ) {\n void router.invalidate();\n }\n });\n\n return () => {\n if (callbackId) {\n instance.removeEventCallback(callbackId);\n }\n };\n }, [instance, router]);\n\n useEffect(() => {\n const wasInteracting = previousInProgress.current !== InteractionStatus.None;\n previousInProgress.current = inProgress;\n\n if (wasInteracting && inProgress === InteractionStatus.None) {\n void router.invalidate();\n }\n }, [inProgress, router]);\n\n useEffect(() => subscribeToTokenInteractionRequired(setPendingScopes), []);\n\n useEffect(() => {\n if (!pendingScopes || inProgress !== InteractionStatus.None) {\n return;\n }\n\n const account = instance.getActiveAccount() ?? accounts[0];\n if (!account) {\n return;\n }\n\n setPendingScopes(null);\n void instance.acquireTokenRedirect({ scopes: pendingScopes, account }).catch(() => undefined);\n }, [accounts, inProgress, instance, pendingScopes]);\n\n return null;\n};\n\nexport const MsalAuthProvider: FC<MsalAuthProviderProps> = ({ children }) => (\n <MsalProvider instance={pca}>\n <MsalAuthEffects />\n {children}\n </MsalProvider>\n);\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 type { Theme } from \"@mui/material\";\nimport { ThemeProvider } from \"@mui/material\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport dayjs from \"dayjs\";\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport type { FC, ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport { initReactI18next } from \"react-i18next\";\nimport { resources } from \"virtual:wcz-layout\";\nimport z from \"zod\";\nimport { Layout } from \"~/components/core/Layout\";\nimport type { LayoutOptions } from \"~/models/LayoutOptions\";\nimport type { Navigation } from \"~/models/Navigation\";\nimport { DialogsProvider } from \"./DialogsProvider\";\nimport { MsalAuthProvider } from \"./MsalAuthProvider\";\nimport { NotificationProvider } from \"./NotificationProvider\";\n\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\n\nconst setLocale = (language: string) => {\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\n dayjs.locale(language);\n};\n\nawait i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: \"en\",\n supportedLngs: Object.keys(resources),\n detection: {\n caches: [\"cookie\"],\n cookieMinutes: YEAR_IN_MINUTES,\n },\n interpolation: { escapeValue: false },\n });\n\nsetLocale(i18n.resolvedLanguage ?? i18n.language);\n\ni18n.on(\"languageChanged\", (language) => {\n setLocale(language);\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 useEffect(() => {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.register(\"/sw.js\");\n }\n }, []);\n\n return (\n <ThemeProvider theme={theme}>\n <LocalizationProvider\n key={i18n.language}\n dateAdapter={AdapterDayjs}\n adapterLocale={i18n.language}\n >\n <NotificationProvider snackbarOrigin={options?.snackbarOrigin}>\n <DialogsProvider>\n <MsalAuthProvider>\n <Layout navigation={navigation} options={options}>\n {children}\n </Layout>\n </MsalAuthProvider>\n </DialogsProvider>\n </NotificationProvider>\n </LocalizationProvider>\n </ThemeProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["queryCollectionOptions","createCollection","axios","z","getAccessToken","queryClient","api","create","baseURL","interceptors","request","use","config","accessToken","headers","set","userPhotoSchema","object","id","string","photoUrl","UserPhoto","infer","fetchProfilePhoto","Promise","Array","response","get","responseType","base64","btoa","Uint8Array","data","reduce","byte","String","fromCodePoint","userPhotoCollection","queryKey","schema","queryFn","getKey","item","staleTime","Infinity","gcTime","Avatar","useLiveSuspenseQuery","FC","userPhotoCollection","UserAvatar","$","_c","$i","Symbol","for","data","_temp","t0","photoUrl","t1","width","xs","sm","height","t2","q","from","todo","findOne","AuthenticatedTemplate","UnauthenticatedTemplate","useMsal","AccountCircle","ArrowBack","Brightness4","ChevronRight","DarkMode","Done","LightMode","Login","Logout","SettingsBrightness","Translate","Box","IconButton","List","ListItem","ListItemButton","ListItemIcon","ListItemText","ListSubheader","Menu","useColorScheme","rootRouteId","useMatch","FC","Fragment","useState","useTranslation","UserAvatar","TabType","capitalize","value","charAt","toUpperCase","slice","ToolbarAccount","$","_c","$i","Symbol","for","anchorElement","setAnchorElement","tab","setTab","open","Boolean","t","i18n","mode","setMode","instance","t0","from","rootMatch","user","context","T0","closeMenu","openMenu","settings","t1","t2","theme","supportedLanguages","Array","isArray","options","supportedLngs","filter","_temp","languageDisplayNames","Intl","DisplayNames","language","type","t3","t4","icon","label","t5","t6","t7","t8","t9","colorModes","t10","event","currentTarget","t11","undefined","setTimeout","t12","newTab","changeTab","t13","backgroundColor","t14","t15","t16","t17","py","t18","t19","t20","find","m","t21","t22","t23","t24","t25","t26","t27","t28","t29","of","t30","t31","t32","display","alignItems","px","cursor","t33","mr","t34","t35","t36","map","t37","modeValue","Icon","t38","t39","t40","t41","languageCode","changeLanguage","finally","resolvedLanguage","width","xs","sm","height","name","employeeId","department","logoutRedirect","postLogoutRedirectUri","loginRedirect","lng","Chip","Stack","Typography","useRouter","z","FC","clientEnv","RouterIconButton","PRODUCTION_ENV","getEnv","url","string","refine","u","split","length","transform","toUpperCase","catch","parse","AppTitle","$","_c","$i","Symbol","for","router","t0","origin","env","isProduction","t1","alignItems","flexGrow","t2","t3","VITE_APP_TITLE","t4","t5","LinkOptions","NavigationBase","hidden","NavigationBaseItem","title","icon","React","ReactNode","NavigationPageItem","Pick","kind","NavigationPageGroup","children","Array","NavigationItem","NavigationDivider","NavigationHeader","Navigation","isPageItem","item","isPageGroup","isDivider","isHeader","ExpandMoreIcon","Collapse","Grow","Avatar","Box","ListItem","ListItemButton","ListItemIcon","ListItemText","Paper","styled","Typography","Fragment","useState","MINI_WIDTH","isPageGroup","NavigationItem","NavigationPageGroup","NavigationPageItem","FC","ReactNode","SxProps","Theme","RouterListItemButton","ICON_SIZE","getSelectedColor","theme","vars","palette","primary","dark","getActionActiveColor","action","active","StyledNavButton","borderRadius","Number","shape","color","backgroundColor","routerButtonSx","IconOrAvatar","item","collapsed","t0","$","_c","$i","Symbol","for","icon","t1","position","left","top","transform","t2","display","alignItems","justifyContent","minWidth","t3","t4","title","width","height","fontSize","split","slice","map","_temp","join","t5","t6","bottom","fontWeight","textAlign","whiteSpace","overflow","textOverflow","maxWidth","t7","MiniPopoverProps","open","children","MiniPopover","pl","pb","pt","maxHeight","overflowY","overscrollBehavior","NavigationListItemProps","isOpen","selected","disabled","isSidebarFullyExpanded","isSidebarFullyCollapsed","onClick","renderNested","sub","Array","onClose","NavigationListItem","undefined","hoveredMiniItemId","setHoveredMiniItemId","groupItem","itemId","to","href","right","ml","transition","transitions","create","easing","sharp","duration","chevronSx","shouldJustExpand","px","sx","buttonProps","t8","noWrap","flex","t9","t10","buttonContent","t11","onMouseEnter","onMouseLeave","t12","py","overflowX","t13","params","search","t14","t15","listItem","t16","t17","word","charAt","toUpperCase","Divider","List","ListSubheader","Fragment","useEffect","useState","NavigationListItem","MINI_WIDTH","FC","ReactNode","isPageItem","isPageGroup","isDivider","isHeader","Navigation","NavigationItem","NavigationPageGroup","NavigationPageItem","NavigationListProps","subNavigation","depth","collapsed","isPopover","isSidebarFullyExpanded","isSidebarFullyCollapsed","renderItem","item","context","activePath","onClose","NavigationList","t0","$","_c","$i","Symbol","for","t1","t2","undefined","t3","openKeys","setOpenKeys","t4","t5","t6","key","previous","includes","filter","k","toggleKey","t7","children","renderNested","t8","filteredNavigation","_temp","t9","t10","t11","t12","t13","t14","padding","mt","mb","pl","minWidth","width","map","navItem","index","fontSize","fontWeight","height","px","overflow","textOverflow","whiteSpace","zIndex","bgcolor","position","title","nextItem","mx","key_0","uniqueItemKey","selected","to","nav","hidden","Box","useLocation","NavigationList","FC","isHeader","Navigation","NavigationContentProps","navigation","collapsed","expanded","setExpanded","open","showPermanent","NavigationContent","t0","$","_c","$i","Symbol","for","location","t1","t2","t3","height","display","flexDirection","justifyContent","overflow","scrollbarGutter","overflowX","pt","t4","t5","undefined","t6","pathname","t7","Drawer","Fragment","NavigationContent","FC","Navigation","MINI_WIDTH","EXPANDED_WIDTH","TOOLBAR_HEIGHT","NavigationRailProps","navigation","expanded","setExpanded","open","NavigationRail","t0","$","_c","$i","Symbol","for","t1","xs","sm","t2","t3","theme","position","top","height","width","background","borderTop","borderColor","vars","palette","divider","boxShadow","t4","display","t5","t6","t7","t8","t9","t10","t11","t12","InteractionType","MsalAuthenticationTemplate","Menu","MenuOpen","AppBar","Box","CssBaseline","IconButton","InitColorSchemeScript","Toolbar","styled","useMatches","FC","ReactNode","Fragment","useState","Platform","LayoutOptions","Navigation","ToolbarAccount","AppTitle","NavigationRail","NAVIGATION_STORAGE_KEY","getInitialNavigationOpen","isWindows","isMacOS","localStorage","getItem","saveNavigationState","value","setItem","String","DrawerHeader","theme","display","alignItems","justifyContent","padding","spacing","mixins","toolbar","LayoutProps","navigation","options","children","Layout","t0","$","_c","$i","Symbol","for","navigationOpen","setNavigationOpen","matches","t1","publicRoutes","currentRoutePath","at","fullPath","includes","isPublicRoute","showShell","t2","t3","t4","height","maxHeight","overflow","width","t5","borderBottom","borderColor","boxShadow","_temp","marginRight","t6","newValue_0","newValue","t7","flexGrow","flexDirection","minWidth","t8","t9","flex","position","t10","Redirect","t11","t12","t13","previous","useEventCallback","useId","useRef","useState","DialogsContext","DialogComponent","OpenDialog","OpenDialogOptions","DialogStackEntry","key","open","promise","Promise","TResult","Component","TPayload","payload","onClose","result","resolve","DialogProviderProps","children","React","ReactNode","DialogsProvider","Readonly","stack","setStack","Array","keyPrefix","nextId","dialogMetadata","WeakMap","requestDialog","options","resolveImpl","current","newEntry","set","previousStack","removeDialogFromStack","dialog","filter","entry","delete","closeDialogUi","map","setTimeout","closeDialog","entryToClose","get","Error","close","EventMessage","EventType","InteractionStatus","MsalProvider","useMsal","useNavigate","useRouter","FC","ReactNode","useEffect","useRef","pca","TanStackNavigationClient","MsalAuthProviderProps","children","MsalAuthEffects","$","_c","$i","Symbol","for","inProgress","instance","router","previousInProgress","navigate","t0","t1","setNavigationClient","t2","t3","callbackId","addEventCallback","event","eventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","LOGOUT_SUCCESS","invalidate","removeEventCallback","t4","t5","wasInteracting","current","None","MsalAuthProvider","Alert","Snackbar","useEffect","useRef","useState","SnackbarOrigin","AlertColor","NotificationOptions","NotificationContext","Notification","message","severity","autoHideDuration","NotificationProviderProps","children","React","ReactNode","snackbarOrigin","STACK_INTERVAL","NotificationProvider","FC","t0","$","_c","$i","Symbol","for","t1","queue","setQueue","current","setCurrent","open","Boolean","processingTimeout","t2","prevQueue","length","next","rest","processQueue","t3","t4","setTimeout","clearTimeout","t5","options","notification","prev","notify","t6","t7","t8","_event","reason","t9","t10","undefined","t11","t12","Theme","ThemeProvider","LocalizationProvider","AdapterDayjs","dayjs","i18n","LanguageDetector","FC","ReactNode","useEffect","initReactI18next","resources","z","Layout","LayoutOptions","Navigation","DialogsProvider","MsalAuthProvider","NotificationProvider","YEAR_IN_MINUTES","setLocale","language","config","core","locales","locale","use","init","fallbackLng","supportedLngs","Object","keys","detection","caches","cookieMinutes","interpolation","escapeValue","resolvedLanguage","on","ProvidersProps","options","navigation","theme","children","LayoutProvider","t0","$","_c","$i","Symbol","for","t1","_temp","t2","snackbarOrigin","t3","t4","t5","navigator","serviceWorker","register"],"sources":["../src/lib/db/collections/userCollection.ts","../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/MsalAuthProvider.tsx","../src/providers/NotificationProvider.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import { queryCollectionOptions } from \"@tanstack/query-db-collection\";\nimport { createCollection } from \"@tanstack/react-db\";\nimport axios from \"axios\";\nimport * as z from \"zod\";\nimport { getAccessToken } from \"~/lib/auth/msalClient\";\nimport { queryClient } from \"~/lib/queryClient\";\n\nexport const api = axios.create({\n baseURL: \"https://graph.microsoft.com/v1.0\",\n});\n\napi.interceptors.request.use(async (config) => {\n const accessToken = await getAccessToken(\"graph\");\n config.headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return config;\n});\n\nconst userPhotoSchema = z.object({\n id: z.string(),\n photoUrl: z.string(),\n});\n\ntype UserPhoto = z.infer<typeof userPhotoSchema>;\n\nconst fetchProfilePhoto = async (): Promise<Array<UserPhoto>> => {\n const response = await api.get(\"/me/photo/$value\", {\n responseType: \"arraybuffer\",\n });\n\n const base64 = btoa(\n new Uint8Array(response.data).reduce((data, byte) => data + String.fromCodePoint(byte), \"\"),\n );\n\n return [\n {\n id: \"me\",\n photoUrl: `data:image/jpeg;base64,${base64}`,\n },\n ];\n};\n\nexport const userPhotoCollection = createCollection(\n queryCollectionOptions({\n queryKey: [\"graph\", \"me\", \"photo\"],\n schema: userPhotoSchema,\n queryFn: fetchProfilePhoto,\n getKey: (item) => item.id,\n queryClient,\n staleTime: Infinity,\n gcTime: Infinity,\n }),\n);\n","import { Avatar } from \"@mui/material\";\nimport { useLiveSuspenseQuery } from \"@tanstack/react-db\";\nimport { FC } from \"react\";\nimport { userPhotoCollection } from \"~/lib/db/collections/userCollection\";\n\nexport const UserAvatar: FC = () => {\n const { data } = useLiveSuspenseQuery((q) => q.from({ todo: userPhotoCollection }).findOne());\n\n return (\n <Avatar src={data?.photoUrl} sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\n );\n};\n","import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from \"@azure/msal-react\";\nimport 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 { 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 { instance } = useMsal();\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 }}>\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 }}>\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}>\n <AuthenticatedTemplate>\n <UserAvatar />\n </AuthenticatedTemplate>\n <UnauthenticatedTemplate>\n <AccountCircle sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 } }} />\n </UnauthenticatedTemplate>\n </IconButton>\n\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\n <Box sx={{ width: 240 }}>\n <List disablePadding>\n <AuthenticatedTemplate>\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={() => instance.logoutRedirect({ postLogoutRedirectUri: \"/\" })}\n >\n <ListItemIcon>\n <Logout color=\"error\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.Logout\")} />\n </ListItemButton>\n </AuthenticatedTemplate>\n\n <UnauthenticatedTemplate>\n <ListItemButton onClick={() => instance.loginRedirect()}>\n <ListItemIcon>\n <Login color=\"success\" />\n </ListItemIcon>\n <ListItemText primary={t(\"Layout.LogIn\")} />\n </ListItemButton>\n </UnauthenticatedTemplate>\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 { Chip, Stack, Typography } from \"@mui/material\";\nimport { useRouter } from \"@tanstack/react-router\";\nimport z from \"zod\";\nimport type { FC } from \"react\";\nimport { clientEnv } from \"~/env\";\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=\"app-logo\" loading=\"lazy\" />\n </RouterIconButton>\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\n {!isProduction && <Chip size=\"small\" label={env} color=\"primary\" />}\n </Stack>\n );\n};\n","import { 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 {...buttonProps} onClick={shouldJustExpand ? () => onClick?.(item) : undefined}>\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 {\n isPageItem,\n isPageGroup,\n isDivider,\n isHeader,\n} 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?: (item: NavigationPageItem | NavigationPageGroup, context: { collapsed: boolean }) => 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 sx={{ mx: 1, mt: 1, mb: nextItem && isHeader(nextItem) && !collapsed ? 0 : 1 }} />\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={isPageGroup(navItem) && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\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 { InteractionType } from \"@azure/msal-browser\";\nimport { MsalAuthenticationTemplate } from \"@azure/msal-react\";\nimport 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 Toolbar,\n} from \"@mui/material\";\nimport { styled } from \"@mui/material/styles\";\nimport { useMatches } from \"@tanstack/react-router\";\nimport type { FC, ReactNode } from \"react\";\nimport { Fragment, 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(getInitialNavigationOpen);\n const matches = useMatches();\n const currentRoutePath = matches.at(-1)?.fullPath;\n const isPublicRoute = options?.publicRoutes?.includes(currentRoutePath) ?? false;\n const showShell = options?.showShell ?? true;\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 {navigation && (\n <IconButton\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 <ToolbarAccount />\n </Toolbar>\n </AppBar>\n )}\n\n {navigation && 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\" }}>\n {isPublicRoute ? (\n children\n ) : (\n <MsalAuthenticationTemplate interactionType={InteractionType.Redirect}>\n {children}\n </MsalAuthenticationTemplate>\n )}\n </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 type { EventMessage } from \"@azure/msal-browser\";\nimport { EventType, InteractionStatus } from \"@azure/msal-browser\";\nimport { MsalProvider, useMsal } from \"@azure/msal-react\";\nimport { useNavigate, useRouter } from \"@tanstack/react-router\";\nimport type { FC, ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\nimport { pca, TanStackNavigationClient } from \"~/lib/auth/msalClient\";\n\ninterface MsalAuthProviderProps {\n children: ReactNode;\n}\n\nconst MsalAuthEffects: FC = () => {\n const { inProgress, instance } = useMsal();\n const router = useRouter();\n const previousInProgress = useRef(inProgress);\n const navigate = useNavigate();\n\n useEffect(() => {\n pca.setNavigationClient(new TanStackNavigationClient(navigate));\n }, [navigate]);\n\n useEffect(() => {\n const callbackId = instance.addEventCallback((event: EventMessage) => {\n if (\n event.eventType === EventType.LOGIN_SUCCESS ||\n event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS ||\n event.eventType === EventType.LOGOUT_SUCCESS\n ) {\n void router.invalidate();\n }\n });\n\n return () => {\n if (callbackId) {\n instance.removeEventCallback(callbackId);\n }\n };\n }, [instance, router]);\n\n useEffect(() => {\n const wasInteracting = previousInProgress.current !== InteractionStatus.None;\n previousInProgress.current = inProgress;\n\n if (wasInteracting && inProgress === InteractionStatus.None) {\n void router.invalidate();\n }\n }, [inProgress, router]);\n\n return null;\n};\n\nexport const MsalAuthProvider: FC<MsalAuthProviderProps> = ({ children }) => (\n <MsalProvider instance={pca}>\n <MsalAuthEffects />\n {children}\n </MsalProvider>\n);\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 type { Theme } from \"@mui/material\";\nimport { ThemeProvider } from \"@mui/material\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\nimport dayjs from \"dayjs\";\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport type { FC, ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport { initReactI18next } from \"react-i18next\";\nimport { resources } from \"virtual:wcz-layout\";\nimport z from \"zod\";\nimport { Layout } from \"~/components/core/Layout\";\nimport type { LayoutOptions } from \"~/models/LayoutOptions\";\nimport type { Navigation } from \"~/models/Navigation\";\nimport { DialogsProvider } from \"./DialogsProvider\";\nimport { MsalAuthProvider } from \"./MsalAuthProvider\";\nimport { NotificationProvider } from \"./NotificationProvider\";\n\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\n\nconst setLocale = (language: string) => {\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\n dayjs.locale(language);\n};\n\nawait i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: \"en\",\n supportedLngs: Object.keys(resources),\n detection: {\n caches: [\"cookie\"],\n cookieMinutes: YEAR_IN_MINUTES,\n },\n interpolation: { escapeValue: false },\n });\n\nsetLocale(i18n.resolvedLanguage ?? i18n.language);\n\ni18n.on(\"languageChanged\", (language) => {\n setLocale(language);\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 useEffect(() => {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.register(\"/sw.js\");\n }\n }, []);\n\n return (\n <ThemeProvider theme={theme}>\n <LocalizationProvider\n key={i18n.language}\n dateAdapter={AdapterDayjs}\n adapterLocale={i18n.language}\n >\n <NotificationProvider snackbarOrigin={options?.snackbarOrigin}>\n <DialogsProvider>\n <MsalAuthProvider>\n <Layout navigation={navigation} options={options}>\n {children}\n </Layout>\n </MsalAuthProvider>\n </DialogsProvider>\n </NotificationProvider>\n </LocalizationProvider>\n </ThemeProvider>\n );\n};\n"],"mappings":"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"}
|
package/dist/middleware.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as buildUser, m as serverEnv, u as getAccessToken } from "./utils-CqQKSaSs.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { createMiddleware } from "@tanstack/react-start";
|
|
4
4
|
import * as jose from "jose";
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","names":["createMiddleware","jose","scopes","definedScopes","permissions","TokenPayload","User","serverEnv","getAccessToken","buildUser","requiredAuthenticationMiddleware","server","user","next","request","accessToken","headers","get","startsWith","Response","json","message","status","tokenPayload","verifyToken","substring","error","Error","context","publicAuthenticationMiddleware","authenticationMiddleware","options","optional","authorizationMiddleware","permissionKey","middleware","hasPermission","name","serverFnAccessTokenMiddleware","scopeKey","type","client","Authorization","token","Promise","payload","jwtVerify","getJWKS","issuer","ENTRA_TENANT_ID","audience","ENTRA_CLIENT_ID","jwksCache","ReturnType","createRemoteJWKSet","URL","createMiddleware","z","validationMiddleware","schema","ZodType","T","server","next","request","json","result","safeParse","success","fieldErrors","flattenError","error","firstFieldName","Object","keys","firstErrorMessage","name","charAt","toUpperCase","slice","message","replace","toLowerCase","Response","status","context","data"],"sources":["../src/middleware/authMiddleware.ts","../src/middleware/validationMiddleware.ts"],"sourcesContent":["import { createMiddleware } from \"@tanstack/react-start\";\nimport * as jose from \"jose\";\nimport type { scopes as definedScopes, permissions } from \"virtual:wcz-layout\";\nimport type { TokenPayload } from \"~/models/TokenPayload\";\nimport type { User } from \"~/models/User\";\nimport { serverEnv } from \"~/env\";\nimport { getAccessToken } from \"~/lib/auth/msalClient\";\nimport { buildUser } from \"~/lib/utils\";\n\nconst requiredAuthenticationMiddleware = createMiddleware().server<{ user: User }>(\n async ({ next, request }) => {\n const accessToken = request.headers.get(\"Authorization\");\n\n if (!accessToken?.startsWith(\"Bearer\"))\n throw Response.json(\n { message: \"Unauthorized: Invalid Authorization header\" },\n { status: 401 },\n );\n\n let tokenPayload: TokenPayload;\n try {\n tokenPayload = await verifyToken(accessToken.substring(7));\n } catch (error) {\n throw Response.json(\n { message: error instanceof Error ? error.message : \"Unauthorized: Invalid access token\" },\n { status: 401 },\n );\n }\n\n const user = buildUser(tokenPayload);\n\n return next({ context: { user } });\n },\n);\n\nconst publicAuthenticationMiddleware = createMiddleware().server<{ user: User | null }>(\n async ({ next, request }) => {\n const accessToken = request.headers.get(\"Authorization\");\n\n if (!accessToken?.startsWith(\"Bearer\")) return next({ context: { user: null } });\n\n let tokenPayload: TokenPayload;\n try {\n tokenPayload = await verifyToken(accessToken.substring(7));\n } catch (error) {\n throw Response.json(\n { message: error instanceof Error ? error.message : \"Unauthorized: Invalid access token\" },\n { status: 401 },\n );\n }\n\n const user = buildUser(tokenPayload);\n\n return next({ context: { user } });\n },\n);\n\nexport function authenticationMiddleware(options?: {\n optional?: false;\n}): typeof requiredAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options: {\n optional: true;\n}): typeof publicAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options: {\n optional: boolean;\n}): typeof requiredAuthenticationMiddleware | typeof publicAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options?: { optional?: boolean }) {\n return options?.optional ? publicAuthenticationMiddleware : requiredAuthenticationMiddleware;\n}\n\nexport const authorizationMiddleware = (permissionKey: keyof typeof permissions) =>\n createMiddleware()\n .middleware([authenticationMiddleware()])\n .server(async ({ next, context }) => {\n if (context.user.hasPermission(permissionKey)) return next();\n throw Response.json(\n {\n message: `Forbidden: User ${context.user.name} is not authorized to access this resource`,\n },\n { status: 403 },\n );\n });\n\nexport const serverFnAccessTokenMiddleware = (scopeKey: keyof typeof definedScopes) =>\n createMiddleware({ type: \"function\" }).client(async ({ next }) => {\n try {\n const accessToken = await getAccessToken(scopeKey);\n return next({\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n } catch {\n return next();\n }\n });\n\nasync function verifyToken(token: string): Promise<TokenPayload> {\n const { payload } = await jose.jwtVerify(token, getJWKS(), {\n issuer: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/v2.0`,\n audience: serverEnv.ENTRA_CLIENT_ID,\n });\n return payload as unknown as TokenPayload;\n}\n\nlet jwksCache: ReturnType<typeof jose.createRemoteJWKSet> | null = null;\n\nfunction getJWKS() {\n jwksCache ??= jose.createRemoteJWKSet(\n new URL(`https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/discovery/v2.0/keys`),\n );\n return jwksCache;\n}\n","import { createMiddleware } from \"@tanstack/react-start\";\nimport { z } from \"zod\";\n\nexport const validationMiddleware = <T>(schema: z.ZodType<T>) =>\n createMiddleware().server(async ({ next, request }) => {\n const json = await request.json();\n const result = schema.safeParse(json);\n if (!result.success) {\n const { fieldErrors } = z.flattenError(result.error);\n const firstFieldName = Object.keys(fieldErrors)[0];\n const firstErrorMessage = fieldErrors[firstFieldName as keyof typeof fieldErrors]?.[0];\n\n if (firstFieldName && firstErrorMessage) {\n const name = firstFieldName.charAt(0).toUpperCase() + firstFieldName.slice(1);\n const message = firstErrorMessage.replace(/^Invalid input:\\s*/i, \"\").toLowerCase();\n return Response.json({ message: `${name} - ${message}` }, { status: 400 });\n }\n\n return Response.json({ message: \"Validation failed\" }, { status: 400 });\n }\n return await next({ context: { data: result.data } });\n });\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"middleware.js","names":["createMiddleware","jose","scopes","definedScopes","permissions","TokenPayload","User","serverEnv","getAccessToken","buildUser","requiredAuthenticationMiddleware","server","user","next","request","accessToken","headers","get","startsWith","Response","json","message","status","tokenPayload","verifyToken","substring","error","Error","context","publicAuthenticationMiddleware","authenticationMiddleware","options","optional","authorizationMiddleware","permissionKey","middleware","hasPermission","name","serverFnAccessTokenMiddleware","scopeKey","type","client","Authorization","token","Promise","payload","jwtVerify","getJWKS","issuer","ENTRA_TENANT_ID","audience","ENTRA_CLIENT_ID","jwksCache","ReturnType","createRemoteJWKSet","URL","createMiddleware","z","validationMiddleware","schema","ZodType","T","server","next","request","json","result","safeParse","success","fieldErrors","flattenError","error","firstFieldName","Object","keys","firstErrorMessage","name","charAt","toUpperCase","slice","message","replace","toLowerCase","Response","status","context","data"],"sources":["../src/middleware/authMiddleware.ts","../src/middleware/validationMiddleware.ts"],"sourcesContent":["import { createMiddleware } from \"@tanstack/react-start\";\r\nimport * as jose from \"jose\";\r\nimport type { scopes as definedScopes, permissions } from \"virtual:wcz-layout\";\r\nimport type { TokenPayload } from \"~/models/TokenPayload\";\r\nimport type { User } from \"~/models/User\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { getAccessToken } from \"~/lib/auth/msalClient\";\r\nimport { buildUser } from \"~/lib/utils\";\r\n\r\nconst requiredAuthenticationMiddleware = createMiddleware().server<{ user: User }>(\r\n async ({ next, request }) => {\r\n const accessToken = request.headers.get(\"Authorization\");\r\n\r\n if (!accessToken?.startsWith(\"Bearer\"))\r\n throw Response.json(\r\n { message: \"Unauthorized: Invalid Authorization header\" },\r\n { status: 401 },\r\n );\r\n\r\n let tokenPayload: TokenPayload;\r\n try {\r\n tokenPayload = await verifyToken(accessToken.substring(7));\r\n } catch (error) {\r\n throw Response.json(\r\n { message: error instanceof Error ? error.message : \"Unauthorized: Invalid access token\" },\r\n { status: 401 },\r\n );\r\n }\r\n\r\n const user = buildUser(tokenPayload);\r\n\r\n return next({ context: { user } });\r\n },\r\n);\r\n\r\nconst publicAuthenticationMiddleware = createMiddleware().server<{ user: User | null }>(\r\n async ({ next, request }) => {\r\n const accessToken = request.headers.get(\"Authorization\");\r\n\r\n if (!accessToken?.startsWith(\"Bearer\")) return next({ context: { user: null } });\r\n\r\n let tokenPayload: TokenPayload;\r\n try {\r\n tokenPayload = await verifyToken(accessToken.substring(7));\r\n } catch (error) {\r\n throw Response.json(\r\n { message: error instanceof Error ? error.message : \"Unauthorized: Invalid access token\" },\r\n { status: 401 },\r\n );\r\n }\r\n\r\n const user = buildUser(tokenPayload);\r\n\r\n return next({ context: { user } });\r\n },\r\n);\r\n\r\nexport function authenticationMiddleware(options?: {\r\n optional?: false;\r\n}): typeof requiredAuthenticationMiddleware;\r\n\r\nexport function authenticationMiddleware(options: {\r\n optional: true;\r\n}): typeof publicAuthenticationMiddleware;\r\n\r\nexport function authenticationMiddleware(options: {\r\n optional: boolean;\r\n}): typeof requiredAuthenticationMiddleware | typeof publicAuthenticationMiddleware;\r\n\r\nexport function authenticationMiddleware(options?: { optional?: boolean }) {\r\n return options?.optional ? publicAuthenticationMiddleware : requiredAuthenticationMiddleware;\r\n}\r\n\r\nexport const authorizationMiddleware = (permissionKey: keyof typeof permissions) =>\r\n createMiddleware()\r\n .middleware([authenticationMiddleware()])\r\n .server(async ({ next, context }) => {\r\n if (context.user.hasPermission(permissionKey)) return next();\r\n throw Response.json(\r\n {\r\n message: `Forbidden: User ${context.user.name} is not authorized to access this resource`,\r\n },\r\n { status: 403 },\r\n );\r\n });\r\n\r\nexport const serverFnAccessTokenMiddleware = (scopeKey: keyof typeof definedScopes) =>\r\n createMiddleware({ type: \"function\" }).client(async ({ next }) => {\r\n try {\r\n const accessToken = await getAccessToken(scopeKey);\r\n return next({\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n });\r\n } catch {\r\n return next();\r\n }\r\n });\r\n\r\nasync function verifyToken(token: string): Promise<TokenPayload> {\r\n const { payload } = await jose.jwtVerify(token, getJWKS(), {\r\n issuer: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/v2.0`,\r\n audience: serverEnv.ENTRA_CLIENT_ID,\r\n });\r\n return payload as unknown as TokenPayload;\r\n}\r\n\r\nlet jwksCache: ReturnType<typeof jose.createRemoteJWKSet> | null = null;\r\n\r\nfunction getJWKS() {\r\n jwksCache ??= jose.createRemoteJWKSet(\r\n new URL(`https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/discovery/v2.0/keys`),\r\n );\r\n return jwksCache;\r\n}\r\n","import { createMiddleware } from \"@tanstack/react-start\";\nimport { z } from \"zod\";\n\nexport const validationMiddleware = <T>(schema: z.ZodType<T>) =>\n createMiddleware().server(async ({ next, request }) => {\n const json = await request.json();\n const result = schema.safeParse(json);\n if (!result.success) {\n const { fieldErrors } = z.flattenError(result.error);\n const firstFieldName = Object.keys(fieldErrors)[0];\n const firstErrorMessage = fieldErrors[firstFieldName as keyof typeof fieldErrors]?.[0];\n\n if (firstFieldName && firstErrorMessage) {\n const name = firstFieldName.charAt(0).toUpperCase() + firstFieldName.slice(1);\n const message = firstErrorMessage.replace(/^Invalid input:\\s*/i, \"\").toLowerCase();\n return Response.json({ message: `${name} - ${message}` }, { status: 400 });\n }\n\n return Response.json({ message: \"Validation failed\" }, { status: 400 });\n }\n return await next({ context: { data: result.data } });\n });\n"],"mappings":"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"}
|
|
@@ -8,9 +8,9 @@ import * as _$_tanstack_start_fn_stubs0 from "@tanstack/start-fn-stubs";
|
|
|
8
8
|
declare const getUser: _$_tanstack_start_fn_stubs0.IsomorphicFn<[], null, Promise<User | null>>;
|
|
9
9
|
/**
|
|
10
10
|
* Token Acquisition: Get authenticated access token.
|
|
11
|
-
* Use when: Making API calls from the browser to secured endpoints
|
|
11
|
+
* Use when: Making API calls from the browser to secured endpoints.
|
|
12
12
|
*/
|
|
13
13
|
declare const getAccessToken: (scopeKey: keyof typeof scopes) => Promise<string>;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { getUser as n, getAccessToken as t };
|
|
16
|
-
//# sourceMappingURL=msalClient-
|
|
16
|
+
//# sourceMappingURL=msalClient-MNN6BwL6.d.ts.map
|