wcz-test 6.13.1 → 6.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/providers/DialogsProvider.tsx","../src/components/core/AppTitle.tsx","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/ToolbarAccount.tsx","../src/components/core/Layout.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["import useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { useId, useRef, useState } from \"react\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\r\n\r\ninterface DialogStackEntry<TPayload, TResult> {\r\n key: string;\r\n open: boolean;\r\n promise: Promise<TResult>;\r\n Component: DialogComponent<TPayload, TResult>;\r\n payload: TPayload;\r\n onClose: (result: TResult) => Promise<void>;\r\n resolve: (result: TResult) => void;\r\n}\r\n\r\nexport interface DialogProviderProps {\r\n children?: React.ReactNode;\r\n unmountAfter?: number;\r\n}\r\n\r\nfunction DialogsProvider({ children, unmountAfter = 1000 }: Readonly<DialogProviderProps>) {\r\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\r\n const keyPrefix = useId();\r\n const nextId = useRef(0);\r\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\r\n\r\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload: TPayload,\r\n options: OpenDialogOptions<TResult> = {},\r\n ) {\r\n const { onClose = async () => { } } = options;\r\n\r\n let resolve: (result: TResult) => void;\r\n const promise = new Promise<TResult>((resolveImpl) => {\r\n resolve = resolveImpl;\r\n });\r\n\r\n const key = `${keyPrefix}-${nextId.current}`;\r\n nextId.current += 1;\r\n\r\n const newEntry: DialogStackEntry<TPayload, TResult> = {\r\n key,\r\n open: true,\r\n promise,\r\n Component,\r\n payload,\r\n onClose,\r\n resolve: resolve!,\r\n };\r\n\r\n dialogMetadata.current.set(promise, newEntry);\r\n\r\n setStack((previousStack) => [...previousStack, newEntry]);\r\n\r\n return promise;\r\n });\r\n\r\n const removeDialogFromStack = (dialog: Promise<any>) => {\r\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\r\n dialogMetadata.current.delete(dialog);\r\n };\r\n\r\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\r\n setStack((previousStack) =>\r\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\r\n );\r\n\r\n setTimeout(() => removeDialogFromStack(dialog), unmountAfter);\r\n });\r\n\r\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\r\n dialog: Promise<TResult>,\r\n result: TResult,\r\n ) {\r\n const entryToClose = dialogMetadata.current.get(dialog);\r\n if (!entryToClose) {\r\n throw new Error(\"Dialog not found in stack\");\r\n }\r\n\r\n try {\r\n await entryToClose.onClose(result);\r\n } finally {\r\n entryToClose.resolve(result);\r\n closeDialogUi(dialog);\r\n }\r\n\r\n return dialog;\r\n });\r\n\r\n return (\r\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\r\n {children}\r\n {stack.map(({ key, open, Component, payload, promise }) => (\r\n <Component\r\n key={key}\r\n payload={payload}\r\n open={open}\r\n onClose={async (result) => {\r\n await closeDialog(promise, result);\r\n }}\r\n />\r\n ))}\r\n </DialogsContext.Provider>\r\n );\r\n}\r\n\r\nexport { DialogsProvider };\r\n\r\n","import { Chip, Stack, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nexport const AppTitle: FC = () => {\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} flexGrow={1}>\r\n <img src=\"/favicon-32x32.png\" alt=\"app-logo\" loading=\"lazy\" />\r\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\r\n {import.meta.env.DEV && <Chip size=\"small\" label=\"TEST\" color=\"info\" />}\r\n </Stack>\r\n );\r\n};\r\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { Collapse } from \"@mui/material\";\r\nimport Avatar from \"@mui/material/Avatar\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemButton from \"@mui/material/ListItemButton\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport Popper from \"@mui/material/Popper\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\r\n\r\nconst ICON_SIZE = 34;\r\n\r\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst StyledRouterButton = styled(RouterListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst IconOrAvatar: FC<{ item: NavigationPageItem; collapsed?: boolean }> = ({ item, collapsed }) => {\r\n if (item.icon || collapsed) {\r\n return (\r\n <Box sx={collapsed ? { position: \"absolute\", left: \"50%\", top: \"calc(50% - 6px)\", transform: \"translate(-50%, -50%)\" } : {}}>\r\n <ListItemIcon sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minWidth: ICON_SIZE }}>\r\n {item.icon ?? null}\r\n {!item.icon && collapsed ? (\r\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>{item.title}</Avatar>\r\n ) : null}\r\n </ListItemIcon>\r\n {collapsed ? (\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n position: \"absolute\",\r\n bottom: -18,\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n fontSize: 10,\r\n fontWeight: 500,\r\n textAlign: \"center\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: MINI_WIDTH - 28,\r\n }}\r\n >\r\n {item.title}\r\n </Typography>\r\n ) : null}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\ninterface MiniPopoverProps {\r\n open: boolean;\r\n anchorEl: HTMLElement | null;\r\n children?: ReactNode;\r\n}\r\n\r\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, anchorEl, children }) => (\r\n <Popper\r\n open={open}\r\n anchorEl={anchorEl}\r\n placement=\"right-start\"\r\n modifiers={[\r\n { name: \"offset\", options: { offset: [6, 0] } },\r\n { name: \"preventOverflow\", options: { padding: 8 } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"right-end\", \"left-start\"] } },\r\n ]}\r\n >\r\n <Paper\r\n sx={{\r\n pt: 0.5,\r\n pb: 0.5,\r\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\r\n overflowY: \"auto\",\r\n overscrollBehavior: \"contain\",\r\n }}\r\n >\r\n {children}\r\n </Paper>\r\n </Popper>\r\n);\r\n\r\ninterface NavigationListItemProps {\r\n item: NavigationPageItem;\r\n isOpen?: boolean;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n collapsed?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n onClick?: (item: NavigationPageItem) => void;\r\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationListItem: FC<NavigationListItemProps> = ({ item, isOpen, selected, disabled, collapsed, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, onClick, renderNested, onClose }) => {\r\n const [hoveredPopoverItem, setHoveredPopoverItem] = useState<string | null>(null);\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\r\n\r\n const chevronSx: SxProps<Theme> = () => {\r\n if (collapsed && isSidebarFullyCollapsed && item.children) {\r\n return {\r\n fontSize: 18,\r\n position: \"absolute\",\r\n top: \"41.5%\",\r\n right: \"2px\",\r\n transform: \"translateY(-50%) rotate(-90deg)\",\r\n };\r\n }\r\n if (!collapsed && isSidebarFullyExpanded && item.children) {\r\n return {\r\n ml: 0.5,\r\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\r\n };\r\n }\r\n return { display: \"none\" };\r\n };\r\n\r\n const shouldJustExpand = item.children && !collapsed;\r\n\r\n const buttonProps = {\r\n selected,\r\n disabled,\r\n sx: { px: 1.4, height: collapsed ? 60 : 48 }\r\n };\r\n\r\n const buttonContent = (\r\n <>\r\n <IconOrAvatar item={item} collapsed={collapsed} />\r\n {!collapsed && (\r\n <ListItemText\r\n primary={item.title}\r\n slotProps={{ primary: { noWrap: true, title: item.title } }}\r\n sx={{ ml: 1.2, flex: 1, minWidth: 0, \"& .MuiTypography-root\": { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" } }}\r\n />\r\n )}\r\n {item.children ? <ExpandMoreIcon sx={chevronSx} /> : null}\r\n </>\r\n );\r\n\r\n const listItem = (\r\n <ListItem\r\n {...(item.children && collapsed\r\n ? {\r\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorElement(event.currentTarget);\r\n setHoveredPopoverItem(item.title);\r\n },\r\n onMouseLeave: () => {\r\n setHoveredPopoverItem(null);\r\n },\r\n }\r\n : {})}\r\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\r\n >\r\n {shouldJustExpand ? (\r\n <StyledNavButton {...buttonProps} onClick={() => onClick?.(item)}>\r\n {buttonContent}\r\n </StyledNavButton>\r\n ) : (\r\n <StyledRouterButton\r\n {...buttonProps}\r\n to={item.to}\r\n href={item.href}\r\n params={item.params as any}\r\n search={item.search as any}\r\n onClick={onClose}\r\n >\r\n {buttonContent}\r\n </StyledRouterButton>\r\n )}\r\n\r\n {item.children && collapsed ? (\r\n <MiniPopover open={item.title === hoveredPopoverItem} anchorEl={anchorElement}>\r\n {renderNested?.(item.children)}\r\n </MiniPopover>\r\n ) : null}\r\n </ListItem>\r\n );\r\n\r\n return (\r\n <Fragment key={item.to}>\r\n {listItem}\r\n {item.children && !collapsed ? (\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n {renderNested?.(item.children)}\r\n </Collapse>\r\n ) : null}\r\n </Fragment>\r\n );\r\n};\r\n","import Divider from \"@mui/material/Divider\";\r\nimport List from \"@mui/material/List\";\r\nimport ListSubheader from \"@mui/material/ListSubheader\";\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { NavigationListItem } from \"./NavigationListItem\";\r\nimport { EXPANDED_WIDTH, MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation, NavigationDivider, NavigationHeader, NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\n\r\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem => !(\"kind\" in item);\r\nexport const isDivider = (item: NavigationItem): item is NavigationDivider => \"kind\" in item && item.kind === \"divider\";\r\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => \"kind\" in item && item.kind === \"header\";\r\n\r\ninterface NavigationListProps {\r\n subNavigation: Navigation;\r\n depth?: number;\r\n collapsed?: boolean;\r\n isPopover?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n expandedWidth: number | string;\r\n renderItem?: (item: NavigationPageItem, context: { collapsed: boolean }) => ReactNode;\r\n activePath?: string | null;\r\n onNavigate: (item: NavigationPageItem) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationList: FC<NavigationListProps> = ({ subNavigation, depth = 0, collapsed, isPopover, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, expandedWidth, renderItem, activePath, onNavigate, onClose }) => {\r\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\r\n\r\n useEffect(() => {\r\n if (collapsed) setOpenKeys([]);\r\n }, [collapsed]);\r\n\r\n const toggleKey = (key: string) =>\r\n setOpenKeys((previous) => (previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key]));\r\n\r\n const renderNested = (children: Array<NavigationItem>) => <NavigationList\r\n subNavigation={children}\r\n depth={depth + 1}\r\n isPopover={collapsed}\r\n expandedWidth={expandedWidth}\r\n activePath={activePath}\r\n onNavigate={onNavigate}\r\n onClose={onClose}\r\n />;\r\n\r\n const filteredNavigation = subNavigation.filter(nav => !nav.hidden);\r\n\r\n return (\r\n <List\r\n sx={{\r\n padding: 0,\r\n mt: isPopover && depth === 1 ? 0.5 : 0,\r\n mb: depth === 0 && !isPopover ? 4 : 0.5,\r\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\r\n minWidth: isPopover && depth === 1 ? EXPANDED_WIDTH : \"auto\",\r\n width: collapsed ? MINI_WIDTH : \"auto\",\r\n }}\r\n >\r\n {filteredNavigation.map((navItem, index) => {\r\n if (isHeader(navItem)) {\r\n return (\r\n <ListSubheader\r\n key={`subheader-${depth}-${index}`}\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: \"700\",\r\n height: collapsed ? 0 : 40,\r\n px: 2,\r\n minWidth: expandedWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n zIndex: 2,\r\n bgcolor: \"transparent\",\r\n position: \"static\"\r\n }}\r\n >\r\n {navItem.title}\r\n </ListSubheader>\r\n );\r\n }\r\n\r\n if (isDivider(navItem)) {\r\n const nextItem = filteredNavigation[index + 1];\r\n return (\r\n <li key={`divider-${depth}-${index}`}>\r\n <Divider sx={{ mx: 1, mt: 1, mb: isHeader(nextItem) && !collapsed ? 0 : 1 }} />\r\n </li>\r\n );\r\n }\r\n\r\n if (!isPageItem(navItem)) return null;\r\n\r\n const key = `item-${depth}-${index}`;\r\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\r\n\r\n if (renderItem) return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\r\n\r\n return <NavigationListItem\r\n key={key}\r\n item={navItem}\r\n isOpen={openKeys.includes(uniqueItemKey)}\r\n selected={activePath === navItem.to}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={isSidebarFullyExpanded}\r\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\r\n onClick={navItem.children && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\r\n renderNested={renderNested}\r\n onClose={onClose}\r\n />;\r\n })}\r\n </List>\r\n );\r\n};","import { useMediaQuery } from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Drawer from \"@mui/material/Drawer\";\r\nimport { useTheme } from \"@mui/material/styles\";\r\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\";\r\nimport { NavigationList, isHeader } from \"./NavigationList\";\r\nimport type { FC } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nexport const MINI_WIDTH = 84;\r\nexport const EXPANDED_WIDTH = 320;\r\nexport const TOOLBAR_HEIGHT = 64;\r\n\r\ninterface NavigationRailProps {\r\n navigation: Navigation;\r\n expanded: boolean;\r\n setExpanded: (open: boolean) => void;\r\n}\r\n\r\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => {\r\n const navigate = useNavigate();\r\n const routerState = useRouterState();\r\n const theme = useTheme();\r\n const showPermanent = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n\r\n const drawerContent = (collapsed: boolean) => (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n overflow: \"auto\",\r\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\r\n overflowX: \"hidden\",\r\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\r\n }}\r\n >\r\n <NavigationList\r\n subNavigation={navigation}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={expanded}\r\n isSidebarFullyCollapsed={!expanded}\r\n expandedWidth={EXPANDED_WIDTH}\r\n activePath={routerState.location.pathname}\r\n onNavigate={navigate}\r\n onClose={!showPermanent ? () => setExpanded(false) : undefined}\r\n />\r\n </Box>\r\n );\r\n\r\n if (showPermanent)\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n [\"& .MuiDrawer-paper\"]: {\r\n position: \"absolute\",\r\n top: `${TOOLBAR_HEIGHT}px`,\r\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n borderTop: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n },\r\n }}\r\n >\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n\r\n return (\r\n <Drawer open={expanded} onClose={() => setExpanded(false)}>\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n};\r\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\r\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\r\nimport DarkMode from \"@mui/icons-material/DarkMode\";\r\nimport LightMode from \"@mui/icons-material/LightMode\";\r\nimport Login from \"@mui/icons-material/Login\";\r\nimport Logout from \"@mui/icons-material/Logout\";\r\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\r\nimport Translate from \"@mui/icons-material/Translate\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, Typography, useColorScheme } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Done from \"@mui/icons-material/Done\";\r\nimport type { FC } from \"react\";\r\nimport type { User } from \"~/models/User\";\r\nimport { authClient } from \"~/lib/auth/auth-client\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\n\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\nconst capitalize = (value: string | undefined) => value && value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const ToolbarAccount: FC = () => {\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\r\n const [tab, setTab] = useState<TabType>(\"settings\");\r\n const open = Boolean(anchorElement);\r\n const { t, i18n } = useTranslation();\r\n const { mode, setMode } = useColorScheme();\r\n const { data: session } = authClient.useSession();\r\n const { alert } = useDialogs();\r\n\r\n const supportedLanguages = (Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []).filter(lng => lng !== \"cimode\");\r\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\r\n\r\n const colorModes: Array<{ mode: \"light\" | \"dark\" | \"system\"; icon: typeof LightMode; label: string }> = [\r\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\r\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\r\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\r\n ];\r\n\r\n const user = {\r\n name: \"Dalibor Homola\",\r\n employeeId: \"C2503017\",\r\n department: \"IT\",\r\n } as User;\r\n\r\n const usernameInitials = () => {\r\n if (!user.name) return \"\";\r\n const splittedName: Array<string> = user.name.split(\" \");\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorElement(event.currentTarget);\r\n const closeMenu = () => { setAnchorElement(undefined); setTimeout(() => setTab(\"settings\"), 300); };\r\n\r\n const changeTab = (newTab: TabType) => () => setTab(newTab);\r\n\r\n const settings = (\r\n <List component=\"nav\" subheader={<ListSubheader sx={{ backgroundColor: \"transparent\" }}>{t(\"Layout.Settings\")}</ListSubheader>}>\r\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Brightness4 />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Appearance\")} secondary={colorModes.find((m) => m.mode === mode)?.label} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n\r\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Translate />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Language\")} secondary={capitalize(languageDisplayNames.of(i18n.language))} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const theme = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Appearance\")}\r\n </ListSubheader>\r\n }>\r\n {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\r\n <ListItemButton\r\n key={modeValue}\r\n onClick={() => {\r\n setMode(modeValue);\r\n closeMenu();\r\n }}\r\n selected={mode === modeValue}\r\n >\r\n <ListItemIcon>\r\n <Icon />\r\n </ListItemIcon>\r\n <ListItemText primary={label} />\r\n </ListItemButton>\r\n ))}\r\n </List>\r\n );\r\n\r\n const language = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Language\")}\r\n </ListSubheader>\r\n }>\r\n {supportedLanguages.map((languageCode) =>\r\n <ListItemButton\r\n key={languageCode}\r\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\r\n selected={i18n.resolvedLanguage === languageCode}\r\n >\r\n <ListItemIcon>\r\n {i18n.resolvedLanguage === languageCode && <Done />}\r\n </ListItemIcon>\r\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\r\n </ListItemButton>\r\n )}\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {user.name ?\r\n <Avatar sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 }, bgcolor: \"primary.main\" }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", lineHeight: 0 }}>\r\n {usernameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle fontSize=\"large\" />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: 240 }}>\r\n <List>\r\n {session ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.employeeId}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signOut({}, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\r\n <ListItemIcon><Logout color=\"error\" /></ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Logout\")} />\r\n </ListItemButton>\r\n </Fragment>\r\n :\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signIn.social({ provider: \"microsoft\" }, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\r\n <ListItemIcon><Login color=\"success\" /></ListItemIcon>\r\n <ListItemText primary={t(\"Layout.LogIn\")} />\r\n </ListItemButton>\r\n }\r\n </List>\r\n\r\n {tab === \"settings\" && settings}\r\n {tab === \"theme\" && theme}\r\n {tab === \"language\" && language}\r\n </Box>\r\n </Menu>\r\n </Fragment>\r\n );\r\n};\r\n","import Menu from \"@mui/icons-material/Menu\";\r\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\r\nimport { AppBar, Box, CssBaseline, IconButton, InitColorSchemeScript, LinearProgress, Toolbar } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { createIsomorphicFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport { AppTitle } from \"./AppTitle\";\r\nimport { NavigationRail } from \"./navigation/NavigationRail\";\r\nimport { ToolbarAccount } from \"./ToolbarAccount\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\r\n\r\nconst getNavigationOpenStatus = createIsomorphicFn()\r\n .server(() => {\r\n const cookie = getCookie(\"navigationOpen\");\r\n return cookie === \"true\";\r\n })\r\n .client(() => {\r\n const cookie = document.cookie\r\n .split(\"; \")\r\n .find(row => row.startsWith(\"navigationOpen=\"));\r\n return cookie ? cookie.split(\"=\")[1] === \"true\" : false;\r\n });\r\n\r\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n ...theme.mixins.toolbar,\r\n}));\r\n\r\ninterface LayoutProps {\r\n navigation: Navigation | undefined;\r\n children: ReactNode;\r\n}\r\n\r\nexport const Layout: FC<LayoutProps> = (props) => {\r\n const [navigationOpen, setNavigationOpen] = useState(getNavigationOpenStatus);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n\r\n return (\r\n <Fragment>\r\n <InitColorSchemeScript />\r\n <CssBaseline />\r\n\r\n <Box sx={{ display: \"flex\", height: \"100dvh\", maxHeight: \"100dvh\", overflow: \"hidden\", width: \"100%\" }}>\r\n <AppBar\r\n color=\"transparent\"\r\n position=\"fixed\"\r\n sx={theme => ({\r\n borderBottom: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n boxShadow: \"none\",\r\n })}>\r\n <Toolbar>\r\n {props.navigation &&\r\n <IconButton\r\n onClick={() => {\r\n setNavigationOpen(previous => {\r\n const newValue = !previous;\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n return newValue;\r\n });\r\n }}\r\n sx={{ marginRight: 2 }}\r\n >\r\n {navigationOpen ? <MenuOpen /> : <Menu />}\r\n </IconButton>\r\n }\r\n\r\n <AppTitle />\r\n\r\n <ToolbarAccount />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n {props.navigation &&\r\n <NavigationRail\r\n navigation={props.navigation}\r\n expanded={navigationOpen}\r\n setExpanded={newValue => {\r\n setNavigationOpen(newValue);\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n }}\r\n />\r\n }\r\n\r\n <Box component=\"main\" sx={{ flexGrow: 1, display: \"flex\", flexDirection: \"column\", minWidth: 0, height: \"100%\", overflow: \"hidden\" }}>\r\n <DrawerHeader />\r\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>\r\n {props.children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </Fragment>\r\n );\r\n};\r\n","import { ThemeProvider } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { createServerFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport dayjs from \"dayjs\";\r\nimport i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { useEffect, useEffectEvent } from \"react\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { resources } from \"virtual:wcz-layout\";\r\nimport z from \"zod\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport type { CssVarsThemeOptions } from \"@mui/material\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport { useGetTheme } from \"~/hooks/ThemeHook\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\n\r\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n supportedLngs: Object.keys(resources),\r\n detection: {\r\n caches: [\"cookie\"],\r\n cookieMinutes: YEAR_IN_MINUTES,\r\n },\r\n interpolation: { escapeValue: false },\r\n });\r\n\r\ninterface ProvidersProps {\r\n navigation?: Navigation;\r\n theme?: Pick<CssVarsThemeOptions, \"colorSchemes\" | \"components\">;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = ({ navigation, theme, children }) => {\r\n const createdTheme = useGetTheme(theme);\r\n\r\n const languageChangedHandler = useEffectEvent(() => {\r\n z.config(z.core.locales[i18n.language as keyof typeof z.core.locales]());\r\n dayjs.locale(i18n.language);\r\n });\r\n\r\n useEffect(() => {\r\n languageChangedHandler();\r\n\r\n i18n.on(\"languageChanged\", languageChangedHandler);\r\n return () => { i18n.off(\"languageChanged\", languageChangedHandler); };\r\n }, []);\r\n\r\n return (\r\n <ThemeProvider theme={createdTheme}>\r\n <LocalizationProvider key={i18n.language} dateAdapter={AdapterDayjs} adapterLocale={i18n.language}>\r\n <DialogsProvider>\r\n <Layout navigation={navigation}>\r\n {children}\r\n </Layout>\r\n </DialogsProvider>\r\n </LocalizationProvider>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport const setSSRLanguage = createServerFn().handler(async () => {\r\n const language = getCookie(i18n.services.languageDetector.options.lookupCookie) || \"en\";\r\n dayjs.locale(language);\r\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\r\n await i18n.changeLanguage(language);\r\n});\r\n"],"names":["closeDialogUi","closeDialog","Typography","Fragment","i18n","List","ListSubheader","ListItemButton","ListItemIcon","ListItemText","Avatar","Box","ListItem","Menu","z"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","../src/providers/DialogsProvider.tsx","../src/components/core/AppTitle.tsx","../src/components/core/navigation/NavigationListItem.tsx","../src/components/core/navigation/NavigationList.tsx","../src/components/core/navigation/NavigationRail.tsx","../src/components/core/ToolbarAccount.tsx","../src/components/core/Layout.tsx","../src/providers/LayoutProvider.tsx"],"sourcesContent":["const {\n slice,\n forEach\n} = [];\nfunction defaults(obj) {\n forEach.call(slice.call(arguments, 1), source => {\n if (source) {\n for (const prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction hasXSS(input) {\n if (typeof input !== 'string') return false;\n\n // Common XSS attack patterns\n const xssPatterns = [/<\\s*script.*?>/i, /<\\s*\\/\\s*script\\s*>/i, /<\\s*img.*?on\\w+\\s*=/i, /<\\s*\\w+\\s*on\\w+\\s*=.*?>/i, /javascript\\s*:/i, /vbscript\\s*:/i, /expression\\s*\\(/i, /eval\\s*\\(/i, /alert\\s*\\(/i, /document\\.cookie/i, /document\\.write\\s*\\(/i, /window\\.location/i, /innerHTML/i];\n return xssPatterns.some(pattern => pattern.test(input));\n}\n\n// eslint-disable-next-line no-control-regex\nconst fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\nconst serializeCookie = function (name, val) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n path: '/'\n };\n const opt = options;\n const value = encodeURIComponent(val);\n let str = `${name}=${value}`;\n if (opt.maxAge > 0) {\n const maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += `; Max-Age=${Math.floor(maxAge)}`;\n }\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n str += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n str += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n str += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n if (opt.sameSite) {\n const sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n if (opt.partitioned) str += '; Partitioned';\n return str;\n};\nconst cookie = {\n create(name, value, minutes, domain) {\n let cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, value, cookieOptions);\n },\n read(name) {\n const nameEQ = `${name}=`;\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n remove(name, domain) {\n this.create(name, '', -1, domain);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n // Deconstruct the options object and extract the lookupCookie property\n lookup(_ref) {\n let {\n lookupCookie\n } = _ref;\n if (lookupCookie && typeof document !== 'undefined') {\n return cookie.read(lookupCookie) || undefined;\n }\n return undefined;\n },\n // Deconstruct the options object and extract the lookupCookie, cookieMinutes, cookieDomain, and cookieOptions properties\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupCookie,\n cookieMinutes,\n cookieDomain,\n cookieOptions\n } = _ref2;\n if (lookupCookie && typeof document !== 'undefined') {\n cookie.create(lookupCookie, lng, cookieMinutes, cookieDomain, cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n // Deconstruct the options object and extract the lookupQuerystring property\n lookup(_ref) {\n let {\n lookupQuerystring\n } = _ref;\n let found;\n if (typeof window !== 'undefined') {\n let {\n search\n } = window.location;\n if (!window.location.search && window.location.hash?.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n const query = search.substring(1);\n const params = query.split('&');\n for (let i = 0; i < params.length; i++) {\n const pos = params[i].indexOf('=');\n if (pos > 0) {\n const key = params[i].substring(0, pos);\n if (key === lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n return found;\n }\n};\n\nvar hash = {\n name: 'hash',\n // Deconstruct the options object and extract the lookupHash property and the lookupFromHashIndex property\n lookup(_ref) {\n let {\n lookupHash,\n lookupFromHashIndex\n } = _ref;\n let found;\n if (typeof window !== 'undefined') {\n const {\n hash\n } = window.location;\n if (hash && hash.length > 2) {\n const query = hash.substring(1);\n if (lookupHash) {\n const params = query.split('&');\n for (let i = 0; i < params.length; i++) {\n const pos = params[i].indexOf('=');\n if (pos > 0) {\n const key = params[i].substring(0, pos);\n if (key === lookupHash) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n if (found) return found;\n if (!found && lookupFromHashIndex > -1) {\n const language = hash.match(/\\/([a-zA-Z-]*)/g);\n if (!Array.isArray(language)) return undefined;\n const index = typeof lookupFromHashIndex === 'number' ? lookupFromHashIndex : 0;\n return language[index]?.replace('/', '');\n }\n }\n }\n return found;\n }\n};\n\nlet hasLocalStorageSupport = null;\nconst localStorageAvailable = () => {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n try {\n hasLocalStorageSupport = typeof window !== 'undefined' && window.localStorage !== null;\n if (!hasLocalStorageSupport) {\n return false;\n }\n const testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n return hasLocalStorageSupport;\n};\nvar localStorage = {\n name: 'localStorage',\n // Deconstruct the options object and extract the lookupLocalStorage property\n lookup(_ref) {\n let {\n lookupLocalStorage\n } = _ref;\n if (lookupLocalStorage && localStorageAvailable()) {\n return window.localStorage.getItem(lookupLocalStorage) || undefined; // Undefined ensures type consistency with the previous version of this function\n }\n return undefined;\n },\n // Deconstruct the options object and extract the lookupLocalStorage property\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupLocalStorage\n } = _ref2;\n if (lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(lookupLocalStorage, lng);\n }\n }\n};\n\nlet hasSessionStorageSupport = null;\nconst sessionStorageAvailable = () => {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n try {\n hasSessionStorageSupport = typeof window !== 'undefined' && window.sessionStorage !== null;\n if (!hasSessionStorageSupport) {\n return false;\n }\n const testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n return hasSessionStorageSupport;\n};\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup(_ref) {\n let {\n lookupSessionStorage\n } = _ref;\n if (lookupSessionStorage && sessionStorageAvailable()) {\n return window.sessionStorage.getItem(lookupSessionStorage) || undefined;\n }\n return undefined;\n },\n cacheUserLanguage(lng, _ref2) {\n let {\n lookupSessionStorage\n } = _ref2;\n if (lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup(options) {\n const found = [];\n if (typeof navigator !== 'undefined') {\n const {\n languages,\n userLanguage,\n language\n } = navigator;\n if (languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (let i = 0; i < languages.length; i++) {\n found.push(languages[i]);\n }\n }\n if (userLanguage) {\n found.push(userLanguage);\n }\n if (language) {\n found.push(language);\n }\n }\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n // Deconstruct the options object and extract the htmlTag property\n lookup(_ref) {\n let {\n htmlTag\n } = _ref;\n let found;\n const internalHtmlTag = htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n if (internalHtmlTag && typeof internalHtmlTag.getAttribute === 'function') {\n found = internalHtmlTag.getAttribute('lang');\n }\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n // Deconstruct the options object and extract the lookupFromPathIndex property\n lookup(_ref) {\n let {\n lookupFromPathIndex\n } = _ref;\n if (typeof window === 'undefined') return undefined;\n const language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n if (!Array.isArray(language)) return undefined;\n const index = typeof lookupFromPathIndex === 'number' ? lookupFromPathIndex : 0;\n return language[index]?.replace('/', '');\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup(_ref) {\n let {\n lookupFromSubdomainIndex\n } = _ref;\n // If given get the subdomain index else 1\n const internalLookupFromSubdomainIndex = typeof lookupFromSubdomainIndex === 'number' ? lookupFromSubdomainIndex + 1 : 1;\n // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group match which should be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n const language = typeof window !== 'undefined' && window.location?.hostname?.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i);\n\n // if there is no match (null) return undefined\n if (!language) return undefined;\n // return the given group match\n return language[internalLookupFromSubdomainIndex];\n }\n};\n\n// some environments, throws when accessing document.cookie\nlet canCookies = false;\ntry {\n // eslint-disable-next-line no-unused-expressions\n document.cookie;\n canCookies = true;\n // eslint-disable-next-line no-empty\n} catch (e) {}\nconst order = ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'];\nif (!canCookies) order.splice(1, 1);\nconst getDefaults = () => ({\n order,\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'],\n // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n\n convertDetectedLanguage: l => l\n});\nclass Browser {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n init() {\n let services = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n languageUtils: {}\n };\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults());\n if (typeof this.options.convertDetectedLanguage === 'string' && this.options.convertDetectedLanguage.indexOf('15897') > -1) {\n this.options.convertDetectedLanguage = l => l.replace('-', '_');\n }\n\n // backwards compatibility\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n this.addDetector(hash);\n }\n addDetector(detector) {\n this.detectors[detector.name] = detector;\n return this;\n }\n detect() {\n let detectionOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.order;\n let detected = [];\n detectionOrder.forEach(detectorName => {\n if (this.detectors[detectorName]) {\n let lookup = this.detectors[detectorName].lookup(this.options);\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n detected = detected.filter(d => d !== undefined && d !== null && !hasXSS(d)).map(d => this.options.convertDetectedLanguage(d));\n if (this.services && this.services.languageUtils && this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n cacheUserLanguage(lng) {\n let caches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(cacheName => {\n if (this.detectors[cacheName]) this.detectors[cacheName].cacheUserLanguage(lng, this.options);\n });\n }\n}\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","import useEventCallback from \"@mui/utils/useEventCallback\";\r\nimport { useId, useRef, useState } from \"react\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\nimport type { DialogComponent, OpenDialog, OpenDialogOptions } from \"../hooks/DialogsHooks\";\r\n\r\ninterface DialogStackEntry<TPayload, TResult> {\r\n key: string;\r\n open: boolean;\r\n promise: Promise<TResult>;\r\n Component: DialogComponent<TPayload, TResult>;\r\n payload: TPayload;\r\n onClose: (result: TResult) => Promise<void>;\r\n resolve: (result: TResult) => void;\r\n}\r\n\r\nexport interface DialogProviderProps {\r\n children?: React.ReactNode;\r\n unmountAfter?: number;\r\n}\r\n\r\nfunction DialogsProvider({ children, unmountAfter = 1000 }: Readonly<DialogProviderProps>) {\r\n const [stack, setStack] = useState<Array<DialogStackEntry<any, any>>>([]);\r\n const keyPrefix = useId();\r\n const nextId = useRef(0);\r\n const dialogMetadata = useRef(new WeakMap<Promise<any>, DialogStackEntry<any, any>>());\r\n\r\n const requestDialog = useEventCallback<OpenDialog>(function open<TPayload, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload: TPayload,\r\n options: OpenDialogOptions<TResult> = {},\r\n ) {\r\n const { onClose = async () => { } } = options;\r\n\r\n let resolve: (result: TResult) => void;\r\n const promise = new Promise<TResult>((resolveImpl) => {\r\n resolve = resolveImpl;\r\n });\r\n\r\n const key = `${keyPrefix}-${nextId.current}`;\r\n nextId.current += 1;\r\n\r\n const newEntry: DialogStackEntry<TPayload, TResult> = {\r\n key,\r\n open: true,\r\n promise,\r\n Component,\r\n payload,\r\n onClose,\r\n resolve: resolve!,\r\n };\r\n\r\n dialogMetadata.current.set(promise, newEntry);\r\n\r\n setStack((previousStack) => [...previousStack, newEntry]);\r\n\r\n return promise;\r\n });\r\n\r\n const removeDialogFromStack = (dialog: Promise<any>) => {\r\n setStack((previousStack) => previousStack.filter((entry) => entry.promise !== dialog));\r\n dialogMetadata.current.delete(dialog);\r\n };\r\n\r\n const closeDialogUi = useEventCallback(function closeDialogUi<TResult>(dialog: Promise<TResult>) {\r\n setStack((previousStack) =>\r\n previousStack.map((entry) => (entry.promise === dialog ? { ...entry, open: false } : entry)),\r\n );\r\n\r\n setTimeout(() => removeDialogFromStack(dialog), unmountAfter);\r\n });\r\n\r\n const closeDialog = useEventCallback(async function closeDialog<TResult>(\r\n dialog: Promise<TResult>,\r\n result: TResult,\r\n ) {\r\n const entryToClose = dialogMetadata.current.get(dialog);\r\n if (!entryToClose) {\r\n throw new Error(\"Dialog not found in stack\");\r\n }\r\n\r\n try {\r\n await entryToClose.onClose(result);\r\n } finally {\r\n entryToClose.resolve(result);\r\n closeDialogUi(dialog);\r\n }\r\n\r\n return dialog;\r\n });\r\n\r\n return (\r\n <DialogsContext.Provider value={{ open: requestDialog, close: closeDialog }}>\r\n {children}\r\n {stack.map(({ key, open, Component, payload, promise }) => (\r\n <Component\r\n key={key}\r\n payload={payload}\r\n open={open}\r\n onClose={async (result) => {\r\n await closeDialog(promise, result);\r\n }}\r\n />\r\n ))}\r\n </DialogsContext.Provider>\r\n );\r\n}\r\n\r\nexport { DialogsProvider };\r\n\r\n","import { Chip, Stack, Typography } from \"@mui/material\";\r\nimport type { FC } from \"react\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nexport const AppTitle: FC = () => {\r\n return (\r\n <Stack direction=\"row\" alignItems=\"center\" spacing={2} flexGrow={1}>\r\n <img src=\"/favicon-32x32.png\" alt=\"app-logo\" loading=\"lazy\" />\r\n <Typography variant=\"h6\">{clientEnv.VITE_APP_TITLE}</Typography>\r\n {import.meta.env.DEV && <Chip size=\"small\" label=\"TEST\" color=\"info\" />}\r\n </Stack>\r\n );\r\n};\r\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\r\nimport { Collapse } from \"@mui/material\";\r\nimport Avatar from \"@mui/material/Avatar\";\r\nimport Box from \"@mui/material/Box\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemButton from \"@mui/material/ListItemButton\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport Popper from \"@mui/material/Popper\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { SxProps, Theme } from \"@mui/material/styles\";\r\nimport { RouterListItemButton } from \"~/components/router/RouterListItemButton\";\r\n\r\nconst ICON_SIZE = 34;\r\n\r\nconst StyledNavButton = styled(ListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst StyledRouterButton = styled(RouterListItemButton)(({ theme }) => ({\r\n borderRadius: 8,\r\n \"&.Mui-selected\": {\r\n \"& .MuiListItemIcon-root, & .MuiTypography-root, & .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n \"& .MuiTouchRipple-child\": {\r\n backgroundColor: (theme.vars ?? theme).palette.primary.dark,\r\n },\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n color: (theme.vars ?? theme).palette.action.active,\r\n },\r\n \"& .MuiAvatar-root\": {\r\n backgroundColor: (theme.vars ?? theme).palette.action.active,\r\n },\r\n}));\r\n\r\nconst IconOrAvatar: FC<{ item: NavigationPageItem; collapsed?: boolean }> = ({ item, collapsed }) => {\r\n if (item.icon || collapsed) {\r\n return (\r\n <Box sx={collapsed ? { position: \"absolute\", left: \"50%\", top: \"calc(50% - 6px)\", transform: \"translate(-50%, -50%)\" } : {}}>\r\n <ListItemIcon sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minWidth: ICON_SIZE }}>\r\n {item.icon ?? null}\r\n {!item.icon && collapsed ? (\r\n <Avatar sx={{ width: ICON_SIZE - 7, height: ICON_SIZE - 7, fontSize: 12 }}>{item.title}</Avatar>\r\n ) : null}\r\n </ListItemIcon>\r\n {collapsed ? (\r\n <Typography\r\n variant=\"caption\"\r\n sx={{\r\n position: \"absolute\",\r\n bottom: -18,\r\n left: \"50%\",\r\n transform: \"translateX(-50%)\",\r\n fontSize: 10,\r\n fontWeight: 500,\r\n textAlign: \"center\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n maxWidth: MINI_WIDTH - 28,\r\n }}\r\n >\r\n {item.title}\r\n </Typography>\r\n ) : null}\r\n </Box>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\ninterface MiniPopoverProps {\r\n open: boolean;\r\n anchorEl: HTMLElement | null;\r\n children?: ReactNode;\r\n}\r\n\r\nconst MiniPopover: FC<MiniPopoverProps> = ({ open, anchorEl, children }) => (\r\n <Popper\r\n open={open}\r\n anchorEl={anchorEl}\r\n placement=\"right-start\"\r\n modifiers={[\r\n { name: \"offset\", options: { offset: [6, 0] } },\r\n { name: \"preventOverflow\", options: { padding: 8 } },\r\n { name: \"flip\", options: { fallbackPlacements: [\"right-end\", \"left-start\"] } },\r\n ]}\r\n >\r\n <Paper\r\n sx={{\r\n pt: 0.5,\r\n pb: 0.5,\r\n maxHeight: \"min(calc(100vh - 100px), 560px)\",\r\n overflowY: \"auto\",\r\n overscrollBehavior: \"contain\",\r\n }}\r\n >\r\n {children}\r\n </Paper>\r\n </Popper>\r\n);\r\n\r\ninterface NavigationListItemProps {\r\n item: NavigationPageItem;\r\n isOpen?: boolean;\r\n selected?: boolean;\r\n disabled?: boolean;\r\n collapsed?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n onClick?: (item: NavigationPageItem) => void;\r\n renderNested?: (sub: Array<NavigationItem>) => ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationListItem: FC<NavigationListItemProps> = ({ item, isOpen, selected, disabled, collapsed, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, onClick, renderNested, onClose }) => {\r\n const [hoveredPopoverItem, setHoveredPopoverItem] = useState<string | null>(null);\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\r\n\r\n const chevronSx: SxProps<Theme> = () => {\r\n if (collapsed && isSidebarFullyCollapsed && item.children) {\r\n return {\r\n fontSize: 18,\r\n position: \"absolute\",\r\n top: \"41.5%\",\r\n right: \"2px\",\r\n transform: \"translateY(-50%) rotate(-90deg)\",\r\n };\r\n }\r\n if (!collapsed && isSidebarFullyExpanded && item.children) {\r\n return {\r\n ml: 0.5,\r\n transform: `rotate(${isOpen ? 0 : -90}deg)`,\r\n };\r\n }\r\n return { display: \"none\" };\r\n };\r\n\r\n const shouldJustExpand = item.children && !collapsed;\r\n\r\n const buttonProps = {\r\n selected,\r\n disabled,\r\n sx: { px: 1.4, height: collapsed ? 60 : 48 }\r\n };\r\n\r\n const buttonContent = (\r\n <>\r\n <IconOrAvatar item={item} collapsed={collapsed} />\r\n {!collapsed && (\r\n <ListItemText\r\n primary={item.title}\r\n slotProps={{ primary: { noWrap: true, title: item.title } }}\r\n sx={{ ml: 1.2, flex: 1, minWidth: 0, \"& .MuiTypography-root\": { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" } }}\r\n />\r\n )}\r\n {item.children ? <ExpandMoreIcon sx={chevronSx} /> : null}\r\n </>\r\n );\r\n\r\n const listItem = (\r\n <ListItem\r\n {...(item.children && collapsed\r\n ? {\r\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorElement(event.currentTarget);\r\n setHoveredPopoverItem(item.title);\r\n },\r\n onMouseLeave: () => {\r\n setHoveredPopoverItem(null);\r\n },\r\n }\r\n : {})}\r\n sx={{ py: 0, px: 1, overflowX: \"hidden\" }}\r\n >\r\n {shouldJustExpand ? (\r\n <StyledNavButton {...buttonProps} onClick={() => onClick?.(item)}>\r\n {buttonContent}\r\n </StyledNavButton>\r\n ) : (\r\n <StyledRouterButton\r\n {...buttonProps}\r\n to={item.to}\r\n href={item.href}\r\n params={item.params as any}\r\n search={item.search as any}\r\n onClick={onClose}\r\n >\r\n {buttonContent}\r\n </StyledRouterButton>\r\n )}\r\n\r\n {item.children && collapsed ? (\r\n <MiniPopover open={item.title === hoveredPopoverItem} anchorEl={anchorElement}>\r\n {renderNested?.(item.children)}\r\n </MiniPopover>\r\n ) : null}\r\n </ListItem>\r\n );\r\n\r\n return (\r\n <Fragment key={item.to}>\r\n {listItem}\r\n {item.children && !collapsed ? (\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n {renderNested?.(item.children)}\r\n </Collapse>\r\n ) : null}\r\n </Fragment>\r\n );\r\n};\r\n","import Divider from \"@mui/material/Divider\";\r\nimport List from \"@mui/material/List\";\r\nimport ListSubheader from \"@mui/material/ListSubheader\";\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { NavigationListItem } from \"./NavigationListItem\";\r\nimport { EXPANDED_WIDTH, MINI_WIDTH } from \"./NavigationRail\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation, NavigationDivider, NavigationHeader, NavigationItem, NavigationPageItem } from \"~/models/Navigation\";\r\n\r\nexport const isPageItem = (item: NavigationItem): item is NavigationPageItem => !(\"kind\" in item);\r\nexport const isDivider = (item: NavigationItem): item is NavigationDivider => \"kind\" in item && item.kind === \"divider\";\r\nexport const isHeader = (item: NavigationItem): item is NavigationHeader => \"kind\" in item && item.kind === \"header\";\r\n\r\ninterface NavigationListProps {\r\n subNavigation: Navigation;\r\n depth?: number;\r\n collapsed?: boolean;\r\n isPopover?: boolean;\r\n isSidebarFullyExpanded?: boolean;\r\n isSidebarFullyCollapsed?: boolean;\r\n expandedWidth: number | string;\r\n renderItem?: (item: NavigationPageItem, context: { collapsed: boolean }) => ReactNode;\r\n activePath?: string | null;\r\n onNavigate: (item: NavigationPageItem) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const NavigationList: FC<NavigationListProps> = ({ subNavigation, depth = 0, collapsed, isPopover, isSidebarFullyExpanded = true, isSidebarFullyCollapsed, expandedWidth, renderItem, activePath, onNavigate, onClose }) => {\r\n const [openKeys, setOpenKeys] = useState<Array<string>>([]);\r\n\r\n useEffect(() => {\r\n if (collapsed) setOpenKeys([]);\r\n }, [collapsed]);\r\n\r\n const toggleKey = (key: string) =>\r\n setOpenKeys((previous) => (previous.includes(key) ? previous.filter((k) => k !== key) : [...previous, key]));\r\n\r\n const renderNested = (children: Array<NavigationItem>) => <NavigationList\r\n subNavigation={children}\r\n depth={depth + 1}\r\n isPopover={collapsed}\r\n expandedWidth={expandedWidth}\r\n activePath={activePath}\r\n onNavigate={onNavigate}\r\n onClose={onClose}\r\n />;\r\n\r\n const filteredNavigation = subNavigation.filter(nav => !nav.hidden);\r\n\r\n return (\r\n <List\r\n sx={{\r\n padding: 0,\r\n mt: isPopover && depth === 1 ? 0.5 : 0,\r\n mb: depth === 0 && !isPopover ? 4 : 0.5,\r\n pl: (isPopover ? 1 : 2) * (isPopover ? depth - 1 : depth),\r\n minWidth: isPopover && depth === 1 ? EXPANDED_WIDTH : \"auto\",\r\n width: collapsed ? MINI_WIDTH : \"auto\",\r\n }}\r\n >\r\n {filteredNavigation.map((navItem, index) => {\r\n if (isHeader(navItem)) {\r\n return (\r\n <ListSubheader\r\n key={`subheader-${depth}-${index}`}\r\n sx={{\r\n fontSize: 12,\r\n fontWeight: \"700\",\r\n height: collapsed ? 0 : 40,\r\n px: 2,\r\n minWidth: expandedWidth,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n zIndex: 2,\r\n bgcolor: \"transparent\",\r\n position: \"static\"\r\n }}\r\n >\r\n {navItem.title}\r\n </ListSubheader>\r\n );\r\n }\r\n\r\n if (isDivider(navItem)) {\r\n const nextItem = filteredNavigation[index + 1];\r\n return (\r\n <li key={`divider-${depth}-${index}`}>\r\n <Divider sx={{ mx: 1, mt: 1, mb: isHeader(nextItem) && !collapsed ? 0 : 1 }} />\r\n </li>\r\n );\r\n }\r\n\r\n if (!isPageItem(navItem)) return null;\r\n\r\n const key = `item-${depth}-${index}`;\r\n const uniqueItemKey = `${depth}-${index}-${navItem.title}`;\r\n\r\n if (renderItem) return <Fragment key={key}>{renderItem(navItem, { collapsed: !!collapsed })}</Fragment>;\r\n\r\n return <NavigationListItem\r\n key={key}\r\n item={navItem}\r\n isOpen={openKeys.includes(uniqueItemKey)}\r\n selected={activePath === navItem.to}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={isSidebarFullyExpanded}\r\n isSidebarFullyCollapsed={isSidebarFullyCollapsed}\r\n onClick={navItem.children && !collapsed ? () => toggleKey(uniqueItemKey) : undefined}\r\n renderNested={renderNested}\r\n onClose={onClose}\r\n />;\r\n })}\r\n </List>\r\n );\r\n};","import { useMediaQuery } from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Drawer from \"@mui/material/Drawer\";\r\nimport { useTheme } from \"@mui/material/styles\";\r\nimport { useNavigate, useRouterState } from \"@tanstack/react-router\";\r\nimport { NavigationList, isHeader } from \"./NavigationList\";\r\nimport type { FC } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nexport const MINI_WIDTH = 84;\r\nexport const EXPANDED_WIDTH = 320;\r\nexport const TOOLBAR_HEIGHT = 64;\r\n\r\ninterface NavigationRailProps {\r\n navigation: Navigation;\r\n expanded: boolean;\r\n setExpanded: (open: boolean) => void;\r\n}\r\n\r\nexport const NavigationRail: FC<NavigationRailProps> = ({ navigation, expanded, setExpanded }) => {\r\n const navigate = useNavigate();\r\n const routerState = useRouterState();\r\n const theme = useTheme();\r\n const showPermanent = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n\r\n const drawerContent = (collapsed: boolean) => (\r\n <Box\r\n component=\"nav\"\r\n sx={{\r\n height: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"space-between\",\r\n overflow: \"auto\",\r\n scrollbarGutter: collapsed ? \"stable\" : \"auto\",\r\n overflowX: \"hidden\",\r\n pt: navigation[0] && isHeader(navigation[0]) && !collapsed ? 0 : 2,\r\n }}\r\n >\r\n <NavigationList\r\n subNavigation={navigation}\r\n collapsed={collapsed}\r\n isSidebarFullyExpanded={expanded}\r\n isSidebarFullyCollapsed={!expanded}\r\n expandedWidth={EXPANDED_WIDTH}\r\n activePath={routerState.location.pathname}\r\n onNavigate={navigate}\r\n onClose={!showPermanent ? () => setExpanded(false) : undefined}\r\n />\r\n </Box>\r\n );\r\n\r\n if (showPermanent)\r\n return (\r\n <Drawer\r\n variant=\"permanent\"\r\n sx={{\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n [\"& .MuiDrawer-paper\"]: {\r\n position: \"absolute\",\r\n top: `${TOOLBAR_HEIGHT}px`,\r\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\r\n width: expanded ? EXPANDED_WIDTH : MINI_WIDTH,\r\n borderTop: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n },\r\n }}\r\n >\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n\r\n return (\r\n <Drawer open={expanded} onClose={() => setExpanded(false)}>\r\n {drawerContent(!expanded)}\r\n </Drawer>\r\n );\r\n};\r\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\r\nimport ArrowBack from \"@mui/icons-material/ArrowBack\";\r\nimport Brightness4 from \"@mui/icons-material/Brightness4\";\r\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\r\nimport DarkMode from \"@mui/icons-material/DarkMode\";\r\nimport LightMode from \"@mui/icons-material/LightMode\";\r\nimport Login from \"@mui/icons-material/Login\";\r\nimport Logout from \"@mui/icons-material/Logout\";\r\nimport SettingsBrightness from \"@mui/icons-material/SettingsBrightness\";\r\nimport Translate from \"@mui/icons-material/Translate\";\r\nimport { Avatar, Box, IconButton, List, ListItem, ListItemButton, ListItemIcon, ListItemText, ListSubheader, Menu, Typography, useColorScheme } from \"@mui/material\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Done from \"@mui/icons-material/Done\";\r\nimport type { FC } from \"react\";\r\nimport type { User } from \"~/models/User\";\r\nimport { authClient } from \"~/lib/auth/auth-client\";\r\nimport { useDialogs } from \"~/hooks/DialogsHooks\";\r\n\r\ntype TabType = \"settings\" | \"theme\" | \"language\";\r\n\r\nconst capitalize = (value: string | undefined) => value && value.charAt(0).toUpperCase() + value.slice(1);\r\n\r\nexport const ToolbarAccount: FC = () => {\r\n const [anchorElement, setAnchorElement] = useState<HTMLElement>();\r\n const [tab, setTab] = useState<TabType>(\"settings\");\r\n const open = Boolean(anchorElement);\r\n const { t, i18n } = useTranslation();\r\n const { mode, setMode } = useColorScheme();\r\n const { data: session } = authClient.useSession();\r\n const { alert } = useDialogs();\r\n\r\n const supportedLanguages = (Array.isArray(i18n.options.supportedLngs) ? i18n.options.supportedLngs : []).filter(lng => lng !== \"cimode\");\r\n const languageDisplayNames = new Intl.DisplayNames([i18n.language], { type: \"language\" });\r\n\r\n const colorModes: Array<{ mode: \"light\" | \"dark\" | \"system\"; icon: typeof LightMode; label: string }> = [\r\n { mode: \"light\", icon: LightMode, label: t(\"Layout.Light\") },\r\n { mode: \"dark\", icon: DarkMode, label: t(\"Layout.Dark\") },\r\n { mode: \"system\", icon: SettingsBrightness, label: t(\"Layout.System\") },\r\n ];\r\n\r\n const user = {\r\n name: \"Dalibor Homola\",\r\n employeeId: \"C2503017\",\r\n department: \"IT\",\r\n } as User;\r\n\r\n const usernameInitials = () => {\r\n if (!user.name) return \"\";\r\n const splittedName: Array<string> = user.name.split(\" \");\r\n return `${splittedName[0][0]}${splittedName.length > 1 ? splittedName[1][0] : \"\"}`;\r\n };\r\n\r\n const openMenu = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => setAnchorElement(event.currentTarget);\r\n const closeMenu = () => { setAnchorElement(undefined); setTimeout(() => setTab(\"settings\"), 300); };\r\n\r\n const changeTab = (newTab: TabType) => () => setTab(newTab);\r\n\r\n const settings = (\r\n <List component=\"nav\" subheader={<ListSubheader sx={{ backgroundColor: \"transparent\" }}>{t(\"Layout.Settings\")}</ListSubheader>}>\r\n <ListItemButton onClick={changeTab(\"theme\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Brightness4 />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Appearance\")} secondary={colorModes.find((m) => m.mode === mode)?.label} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n\r\n <ListItemButton onClick={changeTab(\"language\")} sx={{ py: 0.3 }}>\r\n <ListItemIcon>\r\n <Translate />\r\n </ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Language\")} secondary={capitalize(languageDisplayNames.of(i18n.language))} />\r\n <ChevronRight />\r\n </ListItemButton>\r\n </List>\r\n );\r\n\r\n const theme = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Appearance\")}\r\n </ListSubheader>\r\n }>\r\n {colorModes.map(({ mode: modeValue, icon: Icon, label }) => (\r\n <ListItemButton\r\n key={modeValue}\r\n onClick={() => {\r\n setMode(modeValue);\r\n closeMenu();\r\n }}\r\n selected={mode === modeValue}\r\n >\r\n <ListItemIcon>\r\n <Icon />\r\n </ListItemIcon>\r\n <ListItemText primary={label} />\r\n </ListItemButton>\r\n ))}\r\n </List>\r\n );\r\n\r\n const language = (\r\n <List subheader={\r\n <ListSubheader onClick={changeTab(\"settings\")} sx={{ backgroundColor: \"transparent\", display: \"flex\", alignItems: \"center\", px: 1, cursor: \"pointer\" }}>\r\n <IconButton size=\"small\" sx={{ mr: 0.5 }}>\r\n <ArrowBack fontSize=\"small\" />\r\n </IconButton> {t(\"Layout.Language\")}\r\n </ListSubheader>\r\n }>\r\n {supportedLanguages.map((languageCode) =>\r\n <ListItemButton\r\n key={languageCode}\r\n onClick={() => i18n.changeLanguage(languageCode).finally(() => closeMenu())}\r\n selected={i18n.resolvedLanguage === languageCode}\r\n >\r\n <ListItemIcon>\r\n {i18n.resolvedLanguage === languageCode && <Done />}\r\n </ListItemIcon>\r\n <ListItemText primary={capitalize(languageDisplayNames.of(languageCode))} />\r\n </ListItemButton>\r\n )}\r\n </List>\r\n );\r\n\r\n return (\r\n <Fragment>\r\n <IconButton size=\"small\" edge=\"end\" onClick={openMenu}>\r\n {user.name ?\r\n <Avatar sx={{ width: { xs: 32, sm: 40 }, height: { xs: 32, sm: 40 }, bgcolor: \"primary.main\" }}>\r\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", lineHeight: 0 }}>\r\n {usernameInitials()}\r\n </Typography>\r\n </Avatar>\r\n :\r\n <AccountCircle fontSize=\"large\" />\r\n }\r\n </IconButton>\r\n\r\n <Menu anchorEl={anchorElement} open={open} onClose={closeMenu}>\r\n <Box sx={{ width: 240 }}>\r\n <List>\r\n {session ?\r\n <Fragment>\r\n <ListItem>\r\n <ListItemText primary={user.name} secondary={\r\n <span>\r\n <span>{user.employeeId}</span>\r\n <br />\r\n <span>{user.department}</span>\r\n </span>\r\n } />\r\n </ListItem>\r\n\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signOut({}, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\r\n <ListItemIcon><Logout color=\"error\" /></ListItemIcon>\r\n <ListItemText primary={t(\"Layout.Logout\")} />\r\n </ListItemButton>\r\n </Fragment>\r\n :\r\n <ListItemButton\r\n onClick={() =>\r\n authClient.signIn.social({ provider: \"microsoft\" }, {\r\n onSuccess: () => closeMenu(),\r\n onError: ({ error }) => alert(error.message)\r\n })\r\n }\r\n >\r\n <ListItemIcon><Login color=\"success\" /></ListItemIcon>\r\n <ListItemText primary={t(\"Layout.LogIn\")} />\r\n </ListItemButton>\r\n }\r\n </List>\r\n\r\n {tab === \"settings\" && settings}\r\n {tab === \"theme\" && theme}\r\n {tab === \"language\" && language}\r\n </Box>\r\n </Menu>\r\n </Fragment>\r\n );\r\n};\r\n","import Menu from \"@mui/icons-material/Menu\";\r\nimport MenuOpen from \"@mui/icons-material/MenuOpen\";\r\nimport { AppBar, Box, CssBaseline, IconButton, InitColorSchemeScript, LinearProgress, Toolbar } from \"@mui/material\";\r\nimport { styled } from \"@mui/material/styles\";\r\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\r\nimport { Fragment, useState } from \"react\";\r\nimport { createIsomorphicFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport { AppTitle } from \"./AppTitle\";\r\nimport { NavigationRail } from \"./navigation/NavigationRail\";\r\nimport { ToolbarAccount } from \"./ToolbarAccount\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\n\r\nconst YEAR_IN_SECONDS = 60 * 60 * 24 * 365;\r\n\r\nconst getNavigationOpenStatus = createIsomorphicFn()\r\n .server(() => {\r\n const cookie = getCookie(\"navigationOpen\");\r\n return cookie === \"true\";\r\n })\r\n .client(() => {\r\n const cookie = document.cookie\r\n .split(\"; \")\r\n .find(row => row.startsWith(\"navigationOpen=\"));\r\n return cookie ? cookie.split(\"=\")[1] === \"true\" : false;\r\n });\r\n\r\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n ...theme.mixins.toolbar,\r\n}));\r\n\r\ninterface LayoutProps {\r\n navigation: Navigation | undefined;\r\n children: ReactNode;\r\n}\r\n\r\nexport const Layout: FC<LayoutProps> = (props) => {\r\n const [navigationOpen, setNavigationOpen] = useState(getNavigationOpenStatus);\r\n const isFetching = !!useIsFetching();\r\n const isMutating = !!useIsMutating();\r\n\r\n return (\r\n <Fragment>\r\n <InitColorSchemeScript />\r\n <CssBaseline />\r\n\r\n <Box sx={{ display: \"flex\", height: \"100dvh\", maxHeight: \"100dvh\", overflow: \"hidden\", width: \"100%\" }}>\r\n <AppBar\r\n color=\"transparent\"\r\n position=\"fixed\"\r\n sx={theme => ({\r\n borderBottom: \"1px solid\",\r\n borderColor: theme.vars?.palette.divider,\r\n boxShadow: \"none\",\r\n })}>\r\n <Toolbar>\r\n {props.navigation &&\r\n <IconButton\r\n onClick={() => {\r\n setNavigationOpen(previous => {\r\n const newValue = !previous;\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n return newValue;\r\n });\r\n }}\r\n sx={{ marginRight: 2 }}\r\n >\r\n {navigationOpen ? <MenuOpen /> : <Menu />}\r\n </IconButton>\r\n }\r\n\r\n <AppTitle />\r\n\r\n <ToolbarAccount />\r\n </Toolbar>\r\n </AppBar>\r\n\r\n {props.navigation &&\r\n <NavigationRail\r\n navigation={props.navigation}\r\n expanded={navigationOpen}\r\n setExpanded={newValue => {\r\n setNavigationOpen(newValue);\r\n document.cookie = `navigationOpen=${newValue}; max-age=${YEAR_IN_SECONDS}; path=/`;\r\n }}\r\n />\r\n }\r\n\r\n <Box component=\"main\" sx={{ flexGrow: 1, display: \"flex\", flexDirection: \"column\", minWidth: 0, height: \"100%\", overflow: \"hidden\" }}>\r\n <DrawerHeader />\r\n <Box sx={{ flex: 1, overflow: \"auto\", position: \"relative\" }}>\r\n {props.children}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n {(isFetching || isMutating) && <LinearProgress sx={{ position: \"fixed\", top: { xs: 56, sm: 64 }, left: 0, right: 0 }} />}\r\n </Fragment>\r\n );\r\n};\r\n","import { ThemeProvider } from \"@mui/material\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport { createServerFn } from \"@tanstack/react-start\";\r\nimport { getCookie } from \"@tanstack/react-start/server\";\r\nimport dayjs from \"dayjs\";\r\nimport i18n from \"i18next\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport { useEffect, useEffectEvent } from \"react\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { resources } from \"virtual:wcz-layout\";\r\nimport z from \"zod\";\r\nimport { DialogsProvider } from \"./DialogsProvider\";\r\nimport type { CssVarsThemeOptions } from \"@mui/material\";\r\nimport type { Navigation } from \"~/models/Navigation\";\r\nimport type { FC, ReactNode } from \"react\";\r\nimport { useGetTheme } from \"~/hooks/ThemeHook\";\r\nimport { Layout } from \"~/components/core/Layout\";\r\n\r\nconst YEAR_IN_MINUTES = 60 * 24 * 365;\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n supportedLngs: Object.keys(resources),\r\n detection: {\r\n caches: [\"cookie\"],\r\n cookieMinutes: YEAR_IN_MINUTES,\r\n },\r\n interpolation: { escapeValue: false },\r\n });\r\n\r\ninterface ProvidersProps {\r\n navigation?: Navigation;\r\n theme?: Pick<CssVarsThemeOptions, \"colorSchemes\" | \"components\">;\r\n children: ReactNode;\r\n}\r\n\r\nexport const LayoutProvider: FC<ProvidersProps> = ({ navigation, theme, children }) => {\r\n const createdTheme = useGetTheme(theme);\r\n\r\n const languageChangedHandler = useEffectEvent(() => {\r\n z.config(z.core.locales[i18n.language as keyof typeof z.core.locales]());\r\n dayjs.locale(i18n.language);\r\n });\r\n\r\n useEffect(() => {\r\n languageChangedHandler();\r\n\r\n i18n.on(\"languageChanged\", languageChangedHandler);\r\n return () => { i18n.off(\"languageChanged\", languageChangedHandler); };\r\n }, []);\r\n\r\n return (\r\n <ThemeProvider theme={createdTheme}>\r\n <LocalizationProvider key={i18n.language} dateAdapter={AdapterDayjs} adapterLocale={i18n.language}>\r\n <DialogsProvider>\r\n <Layout navigation={navigation}>\r\n {children}\r\n </Layout>\r\n </DialogsProvider>\r\n </LocalizationProvider>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport const setSSRLanguage = createServerFn().handler(async () => {\r\n const language = getCookie(i18n.services.languageDetector.options.lookupCookie) || \"en\";\r\n dayjs.locale(language);\r\n z.config(z.core.locales[language as keyof typeof z.core.locales]());\r\n await i18n.changeLanguage(language);\r\n});\r\n"],"names":["hash","htmlTag","closeDialogUi","closeDialog","Typography","Fragment","i18n","List","ListSubheader","ListItemButton","ListItemIcon","ListItemText","Avatar","Box","ListItem","cookie","Menu","LanguageDetector","z"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/queries.js CHANGED
@@ -1,4 +1,4 @@
1
- import { f, g, c, b, u, a, d, e, h } from "./FileHooks-BbjesS5D.js";
1
+ import { f, g, c, b, u, a, d, e, h } from "./FileHooks-41k6-RtZ.js";
2
2
  import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
3
3
  import { h as httpClient, t as toKebabCase } from "./utils-JYv9O0GI.js";
4
4
  import { createIsomorphicFn } from "@tanstack/react-start";
package/dist/vite.js CHANGED
@@ -14,9 +14,6 @@ function viteWczLayout() {
14
14
  return {
15
15
  optimizeDeps: {
16
16
  exclude: [virtualModuleId]
17
- },
18
- ssr: {
19
- noExternal: ["@mui/*"]
20
17
  }
21
18
  };
22
19
  },
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { Resource } from \"i18next\";\r\nimport type { Plugin } from \"vite\";\r\n\r\nexport function viteWczLayout(): Plugin {\r\n const virtualModuleId = \"virtual:wcz-layout\";\r\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\r\n\r\n let localesPath: string;\r\n\r\n return {\r\n name: \"vite:wcz-layout\",\r\n enforce: \"pre\",\r\n configResolved(resolvedConfig) {\r\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\r\n },\r\n config() {\r\n return {\r\n optimizeDeps: {\r\n exclude: [virtualModuleId],\r\n },\r\n ssr: {\r\n noExternal: [\"@mui/*\"],\r\n },\r\n };\r\n },\r\n resolveId(id) {\r\n if (id === virtualModuleId) return resolvedVirtualModuleId;\r\n return null;\r\n },\r\n load(id) {\r\n if (id !== resolvedVirtualModuleId) return null;\r\n\r\n if (!fs.existsSync(localesPath)) {\r\n fs.mkdirSync(localesPath, { recursive: true });\r\n }\r\n\r\n const enPath = path.join(localesPath, \"en.json\");\r\n if (!fs.existsSync(enPath)) {\r\n fs.writeFileSync(enPath, JSON.stringify({}));\r\n }\r\n\r\n const files = fs.readdirSync(localesPath);\r\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\r\n\r\n const resources: Resource = {};\r\n\r\n for (const file of jsonFiles) {\r\n const lang = path.basename(file, \".json\");\r\n const filePath = path.join(localesPath, file);\r\n\r\n try {\r\n const content = fs.readFileSync(filePath, \"utf-8\");\r\n const translations = JSON.parse(content);\r\n resources[lang] = { translation: translations };\r\n } catch (error) {\r\n console.error(`[vite:layout] Error parsing ${file}:`, error);\r\n resources[lang] = { translation: {} };\r\n }\r\n\r\n this.addWatchFile(filePath);\r\n }\r\n\r\n return `export const resources = ${JSON.stringify(resources)};`;\r\n },\r\n };\r\n}\r\n"],"names":[],"mappings":";;AAKO,SAAS,gBAAwB;AACpC,QAAM,kBAAkB;AACxB,QAAM,0BAA0B,OAAO;AAEvC,MAAI;AAEJ,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,gBAAgB;AAC3B,oBAAc,KAAK,QAAQ,eAAe,MAAM,aAAa;AAAA,IACjE;AAAA,IACA,SAAS;AACL,aAAO;AAAA,QACH,cAAc;AAAA,UACV,SAAS,CAAC,eAAe;AAAA,QAAA;AAAA,QAE7B,KAAK;AAAA,UACD,YAAY,CAAC,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IAER;AAAA,IACA,UAAU,IAAI;AACV,UAAI,OAAO,gBAAiB,QAAO;AACnC,aAAO;AAAA,IACX;AAAA,IACA,KAAK,IAAI;AACL,UAAI,OAAO,wBAAyB,QAAO;AAE3C,UAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC7B,WAAG,UAAU,aAAa,EAAE,WAAW,MAAM;AAAA,MACjD;AAEA,YAAM,SAAS,KAAK,KAAK,aAAa,SAAS;AAC/C,UAAI,CAAC,GAAG,WAAW,MAAM,GAAG;AACxB,WAAG,cAAc,QAAQ,KAAK,UAAU,CAAA,CAAE,CAAC;AAAA,MAC/C;AAEA,YAAM,QAAQ,GAAG,YAAY,WAAW;AACxC,YAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AAEzD,YAAM,YAAsB,CAAA;AAE5B,iBAAW,QAAQ,WAAW;AAC1B,cAAM,OAAO,KAAK,SAAS,MAAM,OAAO;AACxC,cAAM,WAAW,KAAK,KAAK,aAAa,IAAI;AAE5C,YAAI;AACA,gBAAM,UAAU,GAAG,aAAa,UAAU,OAAO;AACjD,gBAAM,eAAe,KAAK,MAAM,OAAO;AACvC,oBAAU,IAAI,IAAI,EAAE,aAAa,aAAA;AAAA,QACrC,SAAS,OAAO;AACZ,kBAAQ,MAAM,+BAA+B,IAAI,KAAK,KAAK;AAC3D,oBAAU,IAAI,IAAI,EAAE,aAAa,CAAA,EAAC;AAAA,QACtC;AAEA,aAAK,aAAa,QAAQ;AAAA,MAC9B;AAEA,aAAO,4BAA4B,KAAK,UAAU,SAAS,CAAC;AAAA,IAChE;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"vite.js","sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { Resource } from \"i18next\";\r\nimport type { Plugin } from \"vite\";\r\n\r\nexport function viteWczLayout(): Plugin {\r\n const virtualModuleId = \"virtual:wcz-layout\";\r\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\r\n\r\n let localesPath: string;\r\n\r\n return {\r\n name: \"vite:wcz-layout\",\r\n enforce: \"pre\",\r\n configResolved(resolvedConfig) {\r\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\r\n },\r\n config() {\r\n return {\r\n optimizeDeps: {\r\n exclude: [virtualModuleId],\r\n }\r\n };\r\n },\r\n resolveId(id) {\r\n if (id === virtualModuleId) return resolvedVirtualModuleId;\r\n return null;\r\n },\r\n load(id) {\r\n if (id !== resolvedVirtualModuleId) return null;\r\n\r\n if (!fs.existsSync(localesPath)) {\r\n fs.mkdirSync(localesPath, { recursive: true });\r\n }\r\n\r\n const enPath = path.join(localesPath, \"en.json\");\r\n if (!fs.existsSync(enPath)) {\r\n fs.writeFileSync(enPath, JSON.stringify({}));\r\n }\r\n\r\n const files = fs.readdirSync(localesPath);\r\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\r\n\r\n const resources: Resource = {};\r\n\r\n for (const file of jsonFiles) {\r\n const lang = path.basename(file, \".json\");\r\n const filePath = path.join(localesPath, file);\r\n\r\n try {\r\n const content = fs.readFileSync(filePath, \"utf-8\");\r\n const translations = JSON.parse(content);\r\n resources[lang] = { translation: translations };\r\n } catch (error) {\r\n console.error(`[vite:layout] Error parsing ${file}:`, error);\r\n resources[lang] = { translation: {} };\r\n }\r\n\r\n this.addWatchFile(filePath);\r\n }\r\n\r\n return `export const resources = ${JSON.stringify(resources)};`;\r\n },\r\n };\r\n}\r\n"],"names":[],"mappings":";;AAKO,SAAS,gBAAwB;AACpC,QAAM,kBAAkB;AACxB,QAAM,0BAA0B,OAAO;AAEvC,MAAI;AAEJ,SAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,gBAAgB;AAC3B,oBAAc,KAAK,QAAQ,eAAe,MAAM,aAAa;AAAA,IACjE;AAAA,IACA,SAAS;AACL,aAAO;AAAA,QACH,cAAc;AAAA,UACV,SAAS,CAAC,eAAe;AAAA,QAAA;AAAA,MAC7B;AAAA,IAER;AAAA,IACA,UAAU,IAAI;AACV,UAAI,OAAO,gBAAiB,QAAO;AACnC,aAAO;AAAA,IACX;AAAA,IACA,KAAK,IAAI;AACL,UAAI,OAAO,wBAAyB,QAAO;AAE3C,UAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC7B,WAAG,UAAU,aAAa,EAAE,WAAW,MAAM;AAAA,MACjD;AAEA,YAAM,SAAS,KAAK,KAAK,aAAa,SAAS;AAC/C,UAAI,CAAC,GAAG,WAAW,MAAM,GAAG;AACxB,WAAG,cAAc,QAAQ,KAAK,UAAU,CAAA,CAAE,CAAC;AAAA,MAC/C;AAEA,YAAM,QAAQ,GAAG,YAAY,WAAW;AACxC,YAAM,YAAY,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC;AAEzD,YAAM,YAAsB,CAAA;AAE5B,iBAAW,QAAQ,WAAW;AAC1B,cAAM,OAAO,KAAK,SAAS,MAAM,OAAO;AACxC,cAAM,WAAW,KAAK,KAAK,aAAa,IAAI;AAE5C,YAAI;AACA,gBAAM,UAAU,GAAG,aAAa,UAAU,OAAO;AACjD,gBAAM,eAAe,KAAK,MAAM,OAAO;AACvC,oBAAU,IAAI,IAAI,EAAE,aAAa,aAAA;AAAA,QACrC,SAAS,OAAO;AACZ,kBAAQ,MAAM,+BAA+B,IAAI,KAAK,KAAK;AAC3D,oBAAU,IAAI,IAAI,EAAE,aAAa,CAAA,EAAC;AAAA,QACtC;AAEA,aAAK,aAAa,QAAQ;AAAA,MAC9B;AAEA,aAAO,4BAA4B,KAAK,UAAU,SAAS,CAAC;AAAA,IAChE;AAAA,EAAA;AAER;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wcz-test",
3
- "version": "6.13.1",
3
+ "version": "6.14.0",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -58,35 +58,11 @@
58
58
  "prepublishOnly": "npm run build"
59
59
  },
60
60
  "dependencies": {
61
- "@emotion/react": "^11.14.0",
62
- "@emotion/styled": "^11.14.1",
63
- "@mui/icons-material": "^7.3.5",
64
- "@mui/material": "^7.3.5",
65
- "@mui/x-data-grid-premium": "^8.20.0",
66
- "@mui/x-date-pickers-pro": "^8.19.0",
67
- "@t3-oss/env-core": "^0.13.8",
68
- "@tanstack/query-db-collection": "^1.0.5",
69
- "@tanstack/react-db": "^0.1.53",
70
- "@tanstack/react-form": "^1.26.0",
71
- "@tanstack/react-query": "^5.90.11",
72
- "@tanstack/react-router": "^1.139.12",
73
- "@tanstack/react-router-ssr-query": "^1.139.12",
74
- "@tanstack/react-start": "^1.139.12",
75
- "axios": "^1.13.2",
76
- "better-auth": "1.4.1",
77
- "dayjs": "^1.11.19",
78
- "drizzle-orm": "^0.44.7",
79
61
  "file-saver": "^2.0.5",
80
- "i18next": "^25.7.0",
81
62
  "i18next-browser-languagedetector": "^8.2.0",
82
- "pg": "^8.16.3",
83
63
  "react-dropzone": "^14.3.8",
84
- "react-i18next": "^16.3.5",
85
- "react-intersection-observer": "^10.0.0",
86
64
  "react-number-format": "^5.4.4",
87
- "tus-js-client": "^4.3.1",
88
- "uuidv7": "^1.1.0",
89
- "zod": "^4.1.13"
65
+ "tus-js-client": "^4.3.1"
90
66
  },
91
67
  "devDependencies": {
92
68
  "@tanstack/eslint-config": "^0.3.3",
@@ -110,7 +86,31 @@
110
86
  "vite-tsconfig-paths": "^5.1.4"
111
87
  },
112
88
  "peerDependencies": {
113
- "react": "^19.2.0",
114
- "react-dom": "^19.2.0"
89
+ "@emotion/react": "11.x",
90
+ "@emotion/styled": "11.x",
91
+ "@mui/icons-material": "7.x",
92
+ "@mui/material": "7.x",
93
+ "@mui/x-data-grid-premium": "8.x",
94
+ "@mui/x-date-pickers-pro": "8.x",
95
+ "@t3-oss/env-core": "0.x",
96
+ "@tanstack/query-db-collection": "1.x",
97
+ "@tanstack/react-db": "0.x",
98
+ "@tanstack/react-form": "1.x",
99
+ "@tanstack/react-query": "5.x",
100
+ "@tanstack/react-router": "1.x",
101
+ "@tanstack/react-router-ssr-query": "1.x",
102
+ "@tanstack/react-start": "1.x",
103
+ "axios": "1.x",
104
+ "better-auth": "1.x",
105
+ "dayjs": "1.x",
106
+ "drizzle-orm": "0.x",
107
+ "i18next": "25.x",
108
+ "pg": "8.x",
109
+ "react": "19.x",
110
+ "react-dom": "19.x",
111
+ "react-i18next": "16.x",
112
+ "react-intersection-observer": "10.x",
113
+ "uuidv7": "1.x",
114
+ "zod": "4.x"
115
115
  }
116
116
  }