wcz-layout
Version:
1 lines • 121 kB
Source Map (JSON)
{"version":3,"file":"components.mjs","names":["CloudQueue","Microsoft","alpha","Box","Button","Card","CardContent","Divider","Stack","Typography","useQuery","useLocation","FC","ReactNode","useEffect","useState","useTranslation","manifest","loginProvidersQueryOptions","sanitizeReturnTo","ProviderId","LAST_PROVIDER_KEY","PROVIDER_ICON","Record","entra","aws","LoginForm","$","_c","$i","Symbol","for","data","t0","t1","undefined","providers","t2","select","_temp","search","returnTo","t3","t","lastProvider","setLastProvider","t4","t5","localStorage","getItem","preferred","length","id","t6","provider","setItem","location","href","encodeURIComponent","signIn","t7","minHeight","display","alignItems","justifyContent","px","py","t8","_temp2","_temp3","t9","p","xs","sm","t10","t11","t12","fontWeight","name","t13","t14","t15","t16","my","t17","t18","t19","label","borderRadius","textTransform","boxShadow","map","theme","width","maxWidth","borderColor","palette","primary","main","common","black","theme_0","applyStyles","_c","_temp","Box","useEffectEvent","useLayoutEffect","useRef","useState","BoxProps","FC","isScrollContainer","element","HTMLElement","test","getComputedStyle","overflowY","getAncestors","ancestors","parent","parentElement","document","body","documentElement","push","px","value","Number","parseFloat","Fullscreen","t0","$","_c","$i","Symbol","for","children","props","sx","reference","height","setHeight","t1","current","container","at","isRoot","top","getBoundingClientRect","offsetTop","window","scrollY","clientTop","scrollTop","containerHeight","visualViewport","innerHeight","clientHeight","trailing","marginBottom","ancestor","style","paddingBottom","borderBottomWidth","Math","max","floor","recompute","t2","element_0","addEventListener","ro","ResizeObserver","observe","ancestor_0","removeEventListener","disconnect","t3","t4","display","flexDirection","boxSizing","minHeight","width","overflow","t5","_c","CloudUpload","SxProps","Theme","Box","CircularProgress","Typography","useTheme","CSSProperties","FC","DropzoneOptions","useDropzone","useTranslation","baseStyle","flex","display","flexDirection","alignItems","padding","borderWidth","borderRadius","borderStyle","transition","cursor","DropzoneProps","sx","progress","Dropzone","t0","$","_c","$i","Symbol","for","props","getRootProps","getInputProps","isFocused","isDragAccept","isDragReject","t","theme","t1","disabled","t2","vars","T0","t3","palette","text","style","borderColor","primary","main","success","error","role","undefined","t4","t5","t6","t7","t8","t9","t10","_c","createContext","useContext","FileMeta","FileActions","FileContextValue","appName","fileMetas","Array","onDelete","params","remainingFileMetas","deletedFileMeta","actions","setImageId","imageId","FileContext","useFile","$","_c","$i","Symbol","for","context","Error","_c","Delete","FileDownload","ListItemIcon","ListItemText","Menu","MenuItem","useMutation","useTranslation","FC","FileMeta","useFile","useDialogs","deleteFileMutationOptions","downloadFileMutationOptions","rootRouteId","useMatch","ActionsMenuProps","meta","anchorEl","HTMLElement","onClose","ActionsMenu","t0","$","_c","$i","Symbol","for","t","fileMetas","onDelete","actions","appName","alert","confirm","t1","from","rootMatch","queryClient","context","t2","mutate","download","isPending","isDownloading","t3","mutateAsync","deleteFile","isDeleting","t4","fileExtension","fileName","id","handleOnDownload","t5","confirmed","name","title","confirmText","t6","error","Error","message","String","remainingFileMetas","filter","m","deletedFileMeta","handleOnDelete","t7","t8","delete","t9","_c","MoreVert","Box","ButtonBase","IconButton","ImageListItem","ImageListItemBar","Skeleton","Stack","Tooltip","grey","useMutation","useQuery","useQueryClient","React","Fragment","useRef","useState","FocusEvent","useInView","ActionsMenu","FileMeta","SxProps","Theme","useFile","downloadFileMutationOptions","fileQueryOptions","fileThumbnailQueryOptions","openFileMutationOptions","IMAGE_SIZE","FileViewerGridItemBar","FileViewerGridProps","size","itemBar","sx","FileViewerGrid","FC","t0","$","_c","$i","Symbol","for","fileMetas","t1","overflow","t2","t3","fileMeta","id","map","GridFileViewerItemProps","meta","GridFileViewerItem","setImageId","actions","appName","hovered","setHovered","focused","setFocused","menuAnchor","setMenuAnchor","HTMLElement","ref","inView","triggerOnce","queryClient","target","Window","side","fileName","fileExtension","hasActions","download","delete","showItemBar","data","source","isPending","enabled","mutate","openFile","prefetch","prefetchQuery","onClick","mediaType","current","window","open","width","height","event","HTMLLIElement","currentTarget","contains","relatedTarget","outline","outlineColor","outlineOffset","objectFit","color","_c","AttachFile","Image","MoreVert","SmartDisplay","IconButton","List","ListItem","ListItemButton","ListItemIcon","ListItemText","Fragment","useRef","useState","useMutation","useQueryClient","ActionsMenu","FC","SxProps","Theme","FileMeta","useFile","downloadFileMutationOptions","fileQueryOptions","openFileMutationOptions","FileViewerListProps","sx","FileViewerList","t0","$","_c","$i","Symbol","for","fileMetas","t1","map","_temp","t2","ListFileViewerItemProps","meta","ListFileViewerItem","React","setImageId","actions","appName","menuAnchor","setMenuAnchor","HTMLElement","queryClient","target","Window","fileName","fileExtension","hasActions","download","delete","mutate","openFile","onClick","mediaType","id","current","window","open","icon","event","currentTarget","prefetchQuery","fileMeta","_c","_temp","ChevronLeft","ChevronRight","Close","Box","Dialog","Fab","Skeleton","useQuery","React","useEffect","useFile","fileQueryOptions","ImageViewerProps","metaId","ImageViewer","FC","t0","$","_c","$i","Symbol","for","fileMetas","setImageId","appName","meta","next","previous","t1","t2","t3","m","id","find","images","t4","filter","_temp","t5","m_1","findIndex","index","undefined","length","enabled","data","source","isPending","onClose","t6","handleOnKeydown","event","key","preventDefault","globalThis","addEventListener","removeEventListener","t7","t8","position","top","transform","navSx","const","t9","fileName","paper","t10","width","xs","sm","height","maxWidth","maxHeight","t11","left","t12","right","t13","t14","t15","t16","m_0","mediaType","_c","useQuery","ComponentType","FC","ReactNode","useState","FileContext","FileActions","FileMeta","fileMetasQueryOptions","FileViewerGridProps","FileViewerGrid","FileViewerListProps","FileViewerList","ImageViewer","FileViewerComponent","Grid","List","FileViewerProps","appName","subId","onDelete","params","remainingFileMetas","Array","deletedFileMeta","actions","children","component","FileViewer","t0","$","_c","$i","Symbol","for","t1","t2","t3","enabled","data","t4","t5","undefined","fileMetas","imageId","setImageId","length","t6","t7","t8","t9","_c","Button","createLink","React","ButtonProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","ButtonComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterButton","Component","_c","CreatedComponent","Fab","createLink","React","FabProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","FabComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterFab","Component","_c","CreatedComponent","Link","createLink","React","LinkProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterLink","Component","_c","CreatedComponent","Tab","createLink","React","TabProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","TabComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterTab","_c","Box","Divider","Typography","useTranslation","Fullscreen","RouterNotFound","$","_c","$i","Symbol","for","t","t0","alignItems","justifyContent","px","t1","display","m","mb","t2","fontWeight","lineHeight","t3","mx","t4","t5","_c","Box","Divider","Typography","ErrorComponentProps","FC","Fullscreen","RouterErrorProps","error","RouterError","t0","$","_c","$i","Symbol","for","isError","Error","t1","alignItems","justifyContent","px","t2","display","m","mb","t3","fontWeight","lineHeight","t4","name","t5","t6","mx","t7","message","String","t8","t9","_c","SxProps","Theme","Box","Paper","Table","TableBody","TableCell","TableContainer","TableFooter","TableHead","TableRow","useHotkeys","Cell","Header","Row","RowData","Range","useVirtualizer","KeyboardEvent","MouseEvent","ReactElement","useEffect","useLayoutEffect","useMemo","useRef","useState","useTranslation","LayoutTableFeatures","useLayoutTable","DEFAULT_PAGE_SIZE_OPTIONS","TableToolbarProps","cellSelectionSx","classNames","columnAlign","columnFlex","hasColumnLabel","layoutTableClasses","classes","lookaheadRange","pinnedClass","pinnedSx","toClipboardText","ROW_HEIGHT","COLUMN_HEADER_HEIGHT","ROW_OVERSCAN","ROW_LOOKAHEAD","COLUMN_OVERSCAN","LayoutTableInstance","ReturnType","TData","LayoutHeader","LayoutCell","LayoutTableProps","table","loading","pagination","pageSizeOptions","Array","showToolbar","disableColumnMenu","onRowClick","row","onRowDoubleClick","sx","JUSTIFY","left","center","right","const","CELL_SX","py","px","UTILITY_SX","FOOTER_SX","position","bottom","zIndex","bgcolor","borderTop","borderTopStyle","borderColor","pinnedWidth","columns","getSize","reduce","total","column","titleIfTruncated","event","HTMLElement","element","target","getComputedStyle","textOverflow","title","scrollWidth","clientWidth","textContent","LayoutTable","toolbar","t","containerRef","HTMLDivElement","headerGroups","getHeaderGroups","headerHeight","length","visibleColumnCount","getVisibleLeafColumns","hasFooter","getAllLeafColumns","some","columnDef","footer","top","state","rowPinning","pinnedIds","Set","centerRows","getRowModel","getPrePaginatedRowModel","rows","filter","has","id","getTopRows","getBottomRows","isEmpty","pageSize","pageSizeOffered","includes","pagerStarted","setPageSize","Math","max","appSetSize","current","options","initialState","setPagination","pageIndex","min","startColumns","getStartVisibleLeafColumns","endColumns","getEndVisibleLeafColumns","centerColumns","getCenterVisibleLeafColumns","startPinnedWidth","endPinnedWidth","containerWidth","setContainerWidth","container","observer","ResizeObserver","entry","floor","contentRect","width","observe","disconnect","flexColumns","totalFlex","flexSpace","getTotalSize","flexDeltas","map","flexFits","every","index","minSize","flexWidths","Map","tableWidth","values","delta","renderedWidth","get","headerWidth","header","getLeafColumns","virtualizeColumns","rowVirtualizer","count","getScrollElement","estimateSize","measureElement","getBoundingClientRect","height","getItemKey","overscan","rangeExtractor","range","scrollDirection","scrollMargin","scrollPaddingStart","columnVirtualizer","horizontal","scrollPaddingEnd","columnSizing","measure","focusedCell","getFocusedCell","focusedRowId","focusedColumnId","cell","querySelector","scrollIntoView","block","inline","rowIndex","findIndex","scrollToIndex","columnIndex","hasCellSelection","cellSelection","copySelection","text","getSelectedCellRangesData","navigator","clipboard","writeText","hotkey","callback","moveCellSelection","extendCellSelection","resetCellSelection","selectAllCells","enabled","virtualRows","getVirtualItems","paddingTop","start","paddingBottom","end","virtualColumns","firstColumn","undefined","lastColumn","paddingStart","paddingEnd","windowColumns","all","T","slice","skippedColumns","cellOffset","p","renderHeader","h","groupIndex","align","labelled","columnHeader","getCanSort","getIsSorted","getIsFiltered","colSpan","whiteSpace","overflow","isPlaceholder","columnHeaderContent","display","alignItems","minWidth","justifyContent","columnHeaderTitleContainer","flex","cellClassName","getIsSelected","getIsGrouped","getIsAggregated","renderCell","c","getIsCovered","getRowSpan","getColSpan","getCanSelect","getTabIndex","getSelectionStartHandler","getSelectionExtendHandler","userSelect","renderFooter","f","footerCell","rowAction","renderRow","cells","getVisibleCells","focusableCells","getIsExpanded","getIsPinned","HTMLTableRowElement","key","currentTarget","tagName","cursor","filler","rowCache","cacheKey","bodyRows","i","skippedRows","rowOffset","border","root","flexDirection","minHeight","isArray","main","scrollPaddingBlockStart","scrollPaddingInlineStart","scrollPaddingInlineEnd","tableLayout","borderBottom","outline","outlineColor","outlineOffset","columnHeaders","headerGroup","headers","getIsVisible","columnHeaderRow","body","overlay","color","opacity","gap","getFooterGroups","footerGroup","footers","footerRow","classes"],"sources":["../src/components/core/account/LoginForm.tsx","../src/components/core/Fullscreen.tsx","../src/components/file/Dropzone.tsx","../src/contexts/FileContext.ts","../src/components/file/fileViewer/common/ActionsMenu.tsx","../src/components/file/fileViewer/FileViewerGrid.tsx","../src/components/file/fileViewer/FileViewerList.tsx","../src/components/file/fileViewer/ImageViewer.tsx","../src/components/file/FileViewer.tsx","../src/components/router/RouterButton.tsx","../src/components/router/RouterFab.tsx","../src/components/router/RouterLink.tsx","../src/components/router/RouterTab.tsx","../src/components/router/RouterNotFound.tsx","../src/components/router/RouterError.tsx","../src/components/table/LayoutTable.tsx"],"sourcesContent":["import CloudQueue from \"@mui/icons-material/CloudQueue\";\nimport Microsoft from \"@mui/icons-material/Microsoft\";\nimport { alpha, Box, Button, Card, CardContent, Divider, Stack, Typography } from \"@mui/material\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useLocation } from \"@tanstack/react-router\";\nimport type { FC, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { manifest } from \"virtual:wcz-layout\";\nimport { loginProvidersQueryOptions } from \"~/lib/auth/user\";\nimport { sanitizeReturnTo } from \"~/lib/utils\";\nimport type { ProviderId } from \"~/models/User\";\n\nconst LAST_PROVIDER_KEY = \"auth-provider\";\n\nconst PROVIDER_ICON: Record<ProviderId, ReactNode> = {\n entra: <Microsoft />,\n aws: <CloudQueue />,\n};\n\n/**\n * The provider chooser card. Mount it at `/login` — `requireAuth` redirects there,\n * and it reads `?returnTo` from the URL itself, so it takes no props.\n */\nexport const LoginForm: FC = () => {\n const { data: providers = [] } = useQuery(loginProvidersQueryOptions);\n const search = useLocation({ select: (location) => location.search }) as { returnTo?: string };\n const returnTo = sanitizeReturnTo(search.returnTo);\n const { t } = useTranslation();\n\n // Read after hydration — reading localStorage during render mismatches the SSR pass.\n const [lastProvider, setLastProvider] = useState<string | null>(null);\n useEffect(() => setLastProvider(localStorage.getItem(LAST_PROVIDER_KEY)), []);\n\n const preferred = lastProvider ?? (providers.length === 1 ? providers[0].id : null);\n\n // /auth/login is a component-less server route — it must be a document navigation.\n const signIn = (provider: ProviderId) => () => {\n localStorage.setItem(LAST_PROVIDER_KEY, provider);\n location.href = `/auth/login?provider=${provider}&returnTo=${encodeURIComponent(returnTo)}`;\n };\n\n return (\n <Box\n sx={{\n minHeight: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n px: 2,\n py: 6,\n }}\n >\n <Card\n variant=\"outlined\"\n sx={[\n (theme) => ({\n width: \"100%\",\n maxWidth: 440,\n borderColor: alpha(theme.palette.primary.main, 0.2),\n borderRadius: 1,\n boxShadow: `0 20px 50px ${alpha(theme.palette.common.black, 0.08)}`,\n }),\n (theme) =>\n theme.applyStyles(\"dark\", {\n borderColor: alpha(theme.palette.primary.main, 0.28),\n boxShadow: `0 20px 50px ${alpha(theme.palette.common.black, 0.28)}`,\n }),\n ]}\n >\n <CardContent sx={{ p: { xs: 3, sm: 4 } }}>\n <Stack direction=\"row\" spacing={2} sx={{ alignItems: \"center\" }}>\n <Box component=\"img\" src=\"/android-chrome-192x192.png\" alt=\"\" width={48} height={48} />\n <Stack spacing={0.25}>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontWeight: 600 }}>\n {manifest.name}\n </Typography>\n <Typography variant=\"h5\" component=\"h1\" sx={{ fontWeight: 700 }}>\n {t(\"Layout.LogIn\")}\n </Typography>\n </Stack>\n </Stack>\n\n <Divider sx={{ my: 3 }} />\n\n <Stack spacing={1.5}>\n {providers.map(({ id, label }) => (\n <Button\n key={id}\n fullWidth\n size=\"large\"\n startIcon={PROVIDER_ICON[id]}\n variant={id === preferred ? \"contained\" : \"outlined\"}\n onClick={signIn(id)}\n sx={{\n minHeight: 52,\n px: 2,\n borderRadius: 1,\n fontWeight: 600,\n textTransform: \"none\",\n boxShadow: \"none\",\n }}\n >\n {t(\"Layout.ContinueWith\", { provider: label })}\n </Button>\n ))}\n </Stack>\n </CardContent>\n </Card>\n </Box>\n );\n};\n","import { Box } from \"@mui/material\";\nimport { useEffectEvent, useLayoutEffect, useRef, useState } from \"react\";\nimport type { BoxProps } from \"@mui/material\";\nimport type { FC } from \"react\";\n\nconst isScrollContainer = (element: HTMLElement) =>\n /auto|scroll|overlay/.test(getComputedStyle(element).overflowY);\n\n/** Ancestors up to and including the nearest scroll container (or the root element). */\nconst getAncestors = (element: HTMLElement) => {\n const ancestors: HTMLElement[] = [];\n let parent = element.parentElement;\n while (parent && parent !== document.body && parent !== document.documentElement) {\n ancestors.push(parent);\n if (isScrollContainer(parent)) return ancestors;\n parent = parent.parentElement;\n }\n ancestors.push(document.documentElement);\n return ancestors;\n};\n\nconst px = (value: string) => Number.parseFloat(value) || 0;\n\nexport const Fullscreen: FC<BoxProps> = ({ children, sx, ...props }) => {\n const reference = useRef<HTMLDivElement | null>(null);\n const [height, setHeight] = useState<number>();\n\n const recompute = useEffectEvent(() => {\n const element = reference.current;\n if (!element) return;\n\n const ancestors = getAncestors(element);\n const container = ancestors.at(-1)!;\n const isRoot = container === document.documentElement;\n\n // Offset within the container's scrollable content, so scrolling never changes it.\n const top = element.getBoundingClientRect().top;\n const offsetTop = isRoot\n ? top + window.scrollY\n : top - container.getBoundingClientRect().top - container.clientTop + container.scrollTop;\n const containerHeight = isRoot\n ? (window.visualViewport?.height ?? window.innerHeight)\n : container.clientHeight;\n\n // Space the wrappers keep below the element (bottom padding, borders and margins).\n let trailing = px(getComputedStyle(element).marginBottom);\n for (const ancestor of ancestors) {\n const style = getComputedStyle(ancestor);\n trailing += px(style.paddingBottom);\n if (ancestor === container) break;\n trailing += px(style.borderBottomWidth) + px(style.marginBottom);\n }\n\n setHeight(Math.max(0, Math.floor(containerHeight - offsetTop - trailing)));\n });\n\n useLayoutEffect(() => {\n const element = reference.current;\n if (!element) return;\n\n recompute();\n\n window.addEventListener(\"resize\", recompute);\n window.visualViewport?.addEventListener(\"resize\", recompute);\n\n const ro = new ResizeObserver(() => recompute());\n ro.observe(element);\n for (const ancestor of getAncestors(element)) ro.observe(ancestor);\n\n return () => {\n window.removeEventListener(\"resize\", recompute);\n window.visualViewport?.removeEventListener(\"resize\", recompute);\n ro.disconnect();\n };\n }, []);\n\n return (\n <Box\n ref={reference}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n minHeight: 0,\n width: \"100%\",\n overflow: \"auto\",\n height,\n ...sx,\n }}\n {...props}\n >\n {children}\n </Box>\n );\n};\n","import CloudUpload from \"@mui/icons-material/CloudUpload\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Box, CircularProgress, Typography, useTheme } from \"@mui/material\";\nimport type { CSSProperties, FC } from \"react\";\nimport type { DropzoneOptions } from \"react-dropzone\";\nimport { useDropzone } from \"react-dropzone\";\nimport { useTranslation } from \"react-i18next\";\n\nconst baseStyle: CSSProperties = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"20px\",\n borderWidth: 2,\n borderRadius: 2,\n borderStyle: \"dashed\",\n transition: \"border-color .24s ease-in-out\",\n cursor: \"pointer\",\n};\n\ninterface DropzoneProps extends DropzoneOptions {\n sx?: SxProps<Theme>;\n progress?: number;\n}\n\nexport const Dropzone: FC<DropzoneProps> = ({ sx, progress, ...props }) => {\n const { getRootProps, getInputProps, isFocused, isDragAccept, isDragReject } = useDropzone(props);\n const { t } = useTranslation();\n const theme = useTheme();\n\n const style = {\n ...baseStyle,\n cursor: progress ? \"progress\" : props.disabled ? \"not-allowed\" : \"pointer\",\n borderColor: (theme.vars || theme).palette.text.disabled,\n ...(isFocused ? { borderColor: (theme.vars || theme).palette.primary.main } : {}),\n ...(isDragAccept ? { borderColor: (theme.vars || theme).palette.success.main } : {}),\n ...(isDragReject ? { borderColor: (theme.vars || theme).palette.error.main } : {}),\n };\n\n return (\n <Box\n {...getRootProps({ style, role: \"button\", \"aria-disabled\": props.disabled || undefined })}\n sx={sx}\n >\n <input {...getInputProps()} style={{ display: \"none\" }} />\n {progress ? (\n <CircularProgress size={24} variant=\"determinate\" value={progress} aria-label=\"Uploading\" />\n ) : (\n <CloudUpload />\n )}\n <Typography>{t(\"Layout.File.DragSomeFilesHereOrClickToSelectThem\")}</Typography>\n </Box>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { FileMeta } from \"../models/file/FileMeta\";\nimport type { FileActions } from \"~/models/file/FileActions\";\n\nexport interface FileContextValue {\n appName: string;\n fileMetas: Array<FileMeta>;\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\n actions?: FileActions;\n setImageId: (imageId: string) => void;\n}\n\nexport const FileContext = createContext<FileContextValue | null>(null);\n\nexport const useFile = () => {\n const context = useContext(FileContext);\n if (!context) {\n throw new Error(\"FileViewer components must be used within FileViewer\");\n }\n return context;\n};\n","import Delete from \"@mui/icons-material/Delete\";\nimport FileDownload from \"@mui/icons-material/FileDownload\";\nimport { ListItemIcon, ListItemText, Menu, MenuItem } from \"@mui/material\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useTranslation } from \"react-i18next\";\nimport type { FC } from \"react\";\nimport type { FileMeta } from \"~/models/file/FileMeta\";\nimport { useFile } from \"~/contexts/FileContext\";\nimport { useDialogs } from \"~/hooks/useDialogs\";\nimport { deleteFileMutationOptions, downloadFileMutationOptions } from \"~/data/client/file\";\nimport { rootRouteId, useMatch } from \"@tanstack/react-router\";\n\ninterface ActionsMenuProps {\n meta: FileMeta;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n}\n\nexport const ActionsMenu: FC<ActionsMenuProps> = ({ meta, anchorEl, onClose }) => {\n const { t } = useTranslation();\n const { fileMetas, onDelete, actions, appName } = useFile();\n const { alert, confirm } = useDialogs();\n\n const rootMatch = useMatch({ from: rootRouteId });\n const queryClient = rootMatch.context.queryClient;\n\n const { mutate: download, isPending: isDownloading } = useMutation(downloadFileMutationOptions());\n const { mutateAsync: deleteFile, isPending: isDeleting } = useMutation(\n deleteFileMutationOptions({ queryClient }),\n );\n\n const handleOnDownload = () => {\n onClose();\n download({ id: meta.id, appName, fileName: meta.fileName, fileExtension: meta.fileExtension });\n };\n\n const handleOnDelete = async () => {\n onClose();\n const confirmed = await confirm(\n t(\"Layout.File.AreYouSureYouWantToDelete\", { name: meta.fileName }),\n { title: t(\"Layout.File.Delete\"), confirmText: t(\"Layout.File.Delete\") },\n );\n if (!confirmed) return;\n\n try {\n await deleteFile({ id: meta.id, appName });\n } catch (error) {\n await alert(error instanceof Error ? error.message : String(error));\n return;\n }\n onDelete?.({\n remainingFileMetas: fileMetas.filter((m) => m.id !== meta.id),\n deletedFileMeta: meta,\n });\n };\n\n return (\n <Menu anchorEl={anchorEl} open={!!anchorEl} onClose={onClose}>\n {actions?.download !== false && (\n <MenuItem onClick={handleOnDownload} disabled={isDownloading}>\n <ListItemIcon>\n <FileDownload />\n </ListItemIcon>\n <ListItemText>{t(\"Layout.File.Download\")}</ListItemText>\n </MenuItem>\n )}\n {actions?.delete !== false && (\n <MenuItem onClick={handleOnDelete} disabled={isDeleting}>\n <ListItemIcon>\n <Delete />\n </ListItemIcon>\n <ListItemText>{t(\"Layout.File.Delete\")}</ListItemText>\n </MenuItem>\n )}\n </Menu>\n );\n};\n","import MoreVert from \"@mui/icons-material/MoreVert\";\nimport {\n Box,\n ButtonBase,\n IconButton,\n ImageListItem,\n ImageListItemBar,\n Skeleton,\n Stack,\n Tooltip,\n} from \"@mui/material\";\nimport { grey } from \"@mui/material/colors\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport React, { Fragment, useRef, useState } from \"react\";\nimport type { FocusEvent } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\nimport { ActionsMenu } from \"./common/ActionsMenu\";\nimport type { FileMeta } from \"~/models/file/FileMeta\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { useFile } from \"~/contexts/FileContext\";\nimport {\n downloadFileMutationOptions,\n fileQueryOptions,\n fileThumbnailQueryOptions,\n openFileMutationOptions,\n} from \"~/data/client/file\";\n\nconst IMAGE_SIZE = 150;\n\ntype FileViewerGridItemBar = \"hidden\" | \"always\" | \"onMouseEnter\";\n\nexport interface FileViewerGridProps {\n size?: number;\n itemBar?: FileViewerGridItemBar;\n sx?: SxProps<Theme>;\n}\n\nexport const FileViewerGrid: React.FC<FileViewerGridProps> = ({ sx, size, itemBar }) => {\n const { fileMetas } = useFile();\n\n return (\n <Stack direction=\"row\" spacing={1} sx={{ overflow: \"auto\", ...sx }}>\n {fileMetas.map((fileMeta) => (\n <GridFileViewerItem key={fileMeta.id} meta={fileMeta} size={size} itemBar={itemBar} />\n ))}\n </Stack>\n );\n};\n\ninterface GridFileViewerItemProps {\n meta: FileMeta;\n size?: number;\n itemBar?: FileViewerGridItemBar;\n}\n\nexport const GridFileViewerItem: React.FC<GridFileViewerItemProps> = ({ meta, size, itemBar }) => {\n const { setImageId, actions, appName } = useFile();\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n const [menuAnchor, setMenuAnchor] = useState<HTMLElement | null>(null);\n const { ref, inView } = useInView({ triggerOnce: true });\n const queryClient = useQueryClient();\n const target = useRef<Window | null>(null);\n const side = size ?? IMAGE_SIZE;\n const fileName = `${meta.fileName}.${meta.fileExtension}`;\n const hasActions = actions?.download !== false || actions.delete !== false;\n\n const showItemBar =\n itemBar === \"always\" || (itemBar !== \"hidden\" && (hovered || focused || !!menuAnchor));\n\n const { data: source, isPending } = useQuery({\n ...fileThumbnailQueryOptions({ id: meta.id, appName }),\n enabled: inView,\n });\n\n const { mutate: openFile } = useMutation(openFileMutationOptions({ target }));\n const { mutate: download } = useMutation(downloadFileMutationOptions());\n\n const prefetch = () => queryClient.prefetchQuery(fileQueryOptions({ id: meta.id, appName }));\n\n const onClick = () => {\n switch (meta.mediaType) {\n case \"image\": {\n return setImageId(meta.id);\n }\n case \"application\":\n case \"video\": {\n target.current = window.open(\"about:blank\", \"_blank\");\n return openFile({ id: meta.id, appName });\n }\n default: {\n return download({\n id: meta.id,\n appName,\n fileName: meta.fileName,\n fileExtension: meta.fileExtension,\n });\n }\n }\n };\n\n return (\n <Fragment>\n <ImageListItem\n sx={{ width: side, height: side }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={(event: FocusEvent<HTMLLIElement>) => {\n if (!event.currentTarget.contains(event.relatedTarget)) setFocused(false);\n }}\n ref={ref}\n >\n {isPending ? (\n <Skeleton variant=\"rectangular\" width={side} height={side} />\n ) : (\n <ButtonBase\n onClick={onClick}\n onMouseEnter={prefetch}\n onFocus={prefetch}\n aria-label={`Open ${fileName}`}\n sx={{\n width: side,\n height: side,\n \"&.Mui-focusVisible\": {\n outline: \"2px solid\",\n outlineColor: \"primary.main\",\n outlineOffset: -2,\n },\n }}\n >\n <Box\n component=\"img\"\n src={source}\n loading=\"lazy\"\n alt=\"\"\n sx={{ objectFit: \"contain\", width: side, height: side }}\n />\n </ButtonBase>\n )}\n {showItemBar && (\n <ImageListItemBar\n title={\n <Tooltip title={fileName}>\n <Box>{meta.fileName}</Box>\n </Tooltip>\n }\n actionIcon={\n hasActions && (\n <IconButton\n sx={{ color: grey[100] }}\n onClick={(event) => setMenuAnchor(event.currentTarget)}\n aria-label={`Actions for ${fileName}`}\n aria-haspopup=\"menu\"\n >\n <MoreVert />\n </IconButton>\n )\n }\n />\n )}\n </ImageListItem>\n\n {hasActions && (\n <ActionsMenu meta={meta} anchorEl={menuAnchor} onClose={() => setMenuAnchor(null)} />\n )}\n </Fragment>\n );\n};\n","import AttachFile from \"@mui/icons-material/AttachFile\";\nimport Image from \"@mui/icons-material/Image\";\nimport MoreVert from \"@mui/icons-material/MoreVert\";\nimport SmartDisplay from \"@mui/icons-material/SmartDisplay\";\nimport {\n IconButton,\n List,\n ListItem,\n ListItemButton,\n ListItemIcon,\n ListItemText,\n} from \"@mui/material\";\nimport { Fragment, useRef, useState } from \"react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { ActionsMenu } from \"./common/ActionsMenu\";\nimport type { FC } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport type { FileMeta } from \"~/models/file/FileMeta\";\nimport { useFile } from \"~/contexts/FileContext\";\nimport {\n downloadFileMutationOptions,\n fileQueryOptions,\n openFileMutationOptions,\n} from \"~/data/client/file\";\n\nexport interface FileViewerListProps {\n sx?: SxProps<Theme>;\n}\n\nexport const FileViewerList: FC<FileViewerListProps> = ({ sx }) => {\n const { fileMetas } = useFile();\n\n return (\n <List dense sx={sx}>\n {fileMetas.map((fileMeta) => (\n <ListFileViewerItem key={fileMeta.id} meta={fileMeta} />\n ))}\n </List>\n );\n};\n\ninterface ListFileViewerItemProps {\n meta: FileMeta;\n}\n\nexport const ListFileViewerItem: React.FC<ListFileViewerItemProps> = ({ meta }) => {\n const { setImageId, actions, appName } = useFile();\n const [menuAnchor, setMenuAnchor] = useState<HTMLElement | null>(null);\n const queryClient = useQueryClient();\n const target = useRef<Window | null>(null);\n const fileName = `${meta.fileName}.${meta.fileExtension}`;\n const hasActions = actions?.download !== false || actions.delete !== false;\n\n const { mutate: openFile } = useMutation(openFileMutationOptions({ target }));\n const { mutate: download } = useMutation(downloadFileMutationOptions());\n\n const onClick = () => {\n switch (meta.mediaType) {\n case \"image\": {\n return setImageId(meta.id);\n }\n case \"application\":\n case \"video\": {\n target.current = window.open(\"about:blank\", \"_blank\");\n return openFile({ id: meta.id, appName });\n }\n default: {\n return download({\n id: meta.id,\n appName,\n fileName: meta.fileName,\n fileExtension: meta.fileExtension,\n });\n }\n }\n };\n\n const icon = () => {\n switch (meta.mediaType) {\n case \"image\": {\n return <Image />;\n }\n case \"video\": {\n return <SmartDisplay />;\n }\n default: {\n return <AttachFile />;\n }\n }\n };\n\n return (\n <Fragment>\n <ListItem\n disablePadding\n secondaryAction={\n hasActions && (\n <IconButton\n edge=\"end\"\n onClick={(event) => setMenuAnchor(event.currentTarget)}\n aria-label={`Actions for ${fileName}`}\n aria-haspopup=\"menu\"\n >\n <MoreVert />\n </IconButton>\n )\n }\n >\n <ListItemButton\n onClick={onClick}\n onMouseEnter={() => queryClient.prefetchQuery(fileQueryOptions({ id: meta.id, appName }))}\n >\n <ListItemIcon>{icon()}</ListItemIcon>\n <ListItemText primary={fileName} />\n </ListItemButton>\n </ListItem>\n\n {hasActions && (\n <ActionsMenu meta={meta} anchorEl={menuAnchor} onClose={() => setMenuAnchor(null)} />\n )}\n </Fragment>\n );\n};\n","import ChevronLeft from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRight from \"@mui/icons-material/ChevronRight\";\nimport Close from \"@mui/icons-material/Close\";\nimport { Box, Dialog, Fab, Skeleton } from \"@mui/material\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport React, { useEffect } from \"react\";\nimport { useFile } from \"~/contexts/FileContext\";\nimport { fileQueryOptions } from \"~/data/client/file\";\n\ninterface ImageViewerProps {\n metaId: string;\n}\n\nexport const ImageViewer: React.FC<ImageViewerProps> = ({ metaId }) => {\n const { fileMetas, setImageId, appName } = useFile();\n\n const meta = fileMetas.find((m) => m.id === metaId);\n const images = fileMetas.filter((m) => m.mediaType === \"image\");\n const index = images.findIndex((m) => m.id === metaId);\n const previous = index > 0 ? images[index - 1] : undefined;\n const next = index >= 0 && index < images.length - 1 ? images[index + 1] : undefined;\n\n const { data: source, isPending } = useQuery({\n ...fileQueryOptions({ id: meta?.id ?? \"\", appName }),\n enabled: !!meta,\n });\n\n const onClose = () => setImageId(\"\");\n\n useEffect(() => {\n if (!metaId) return;\n\n const handleOnKeydown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"ArrowLeft\": {\n return previous && setImageId(previous.id);\n }\n case \"ArrowRight\": {\n return next && setImageId(next.id);\n }\n case \"Backspace\":\n case \"Escape\": {\n event.preventDefault();\n return onClose();\n }\n }\n };\n\n globalThis.addEventListener(\"keydown\", handleOnKeydown);\n return () => globalThis.removeEventListener(\"keydown\", handleOnKeydown);\n }, [metaId, previous, next]);\n\n if (!meta) return null;\n\n const navSx = { position: \"fixed\", top: \"50%\", transform: \"translateY(-50%)\" } as const;\n\n return (\n <Dialog\n open\n onClose={onClose}\n maxWidth=\"xl\"\n slotProps={{ paper: { \"aria-label\": meta.fileName } }}\n >\n {isPending ? (\n <Skeleton\n variant=\"rectangular\"\n sx={{\n width: { xs: \"100vw\", sm: 600 },\n height: { xs: \"calc(100vh - 56px)\", sm: \"calc(100vh - 64px)\" },\n }}\n />\n ) : (\n <Box\n component=\"img\"\n src={source}\n alt={meta.fileName}\n sx={{\n maxWidth: \"100vw\",\n maxHeight: { xs: \"calc(100vh - 56px)\", sm: \"calc(100vh - 64px)\" },\n }}\n />\n )}\n\n {previous && (\n <Fab\n size=\"medium\"\n onClick={() => setImageId(previous.id)}\n aria-label=\"Previous\"\n sx={{ ...navSx, left: 8 }}\n >\n <ChevronLeft />\n </Fab>\n )}\n {next && (\n <Fab\n size=\"medium\"\n onClick={() => setImageId(next.id)}\n aria-label=\"Next\"\n sx={{ ...navSx, right: 8 }}\n >\n <ChevronRight />\n </Fab>\n )}\n\n <Fab\n size=\"medium\"\n onClick={onClose}\n aria-label=\"Close\"\n sx={{ position: \"fixed\", top: 8, right: 8 }}\n >\n <Close />\n </Fab>\n </Dialog>\n );\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport type { ComponentType, FC, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { FileContext } from \"~/contexts/FileContext\";\nimport type { FileActions } from \"~/models/file/FileActions\";\nimport type { FileMeta } from \"~/models/file/FileMeta\";\nimport { fileMetasQueryOptions } from \"~/data/client/file\";\nimport type { FileViewerGridProps } from \"./fileViewer/FileViewerGrid\";\nimport { FileViewerGrid } from \"./fileViewer/FileViewerGrid\";\nimport type { FileViewerListProps } from \"./fileViewer/FileViewerList\";\nimport { FileViewerList } from \"./fileViewer/FileViewerList\";\nimport { ImageViewer } from \"./fileViewer/ImageViewer\";\n\ninterface FileViewerComponent {\n Grid: ComponentType<FileViewerGridProps>;\n List: ComponentType<FileViewerListProps>;\n}\n\ninterface FileViewerProps {\n appName: string;\n subId: string;\n onDelete?: (params: { remainingFileMetas: Array<FileMeta>; deletedFileMeta: FileMeta }) => void;\n actions?: FileActions;\n children: (component: FileViewerComponent) => ReactNode;\n}\n\nexport const FileViewer: FC<FileViewerProps> = ({\n appName,\n subId,\n onDelete,\n actions,\n children,\n}) => {\n const { data: fileMetas = [] } = useQuery({\n ...fileMetasQueryOptions({ appName, subId }),\n enabled: !!subId,\n });\n const [imageId, setImageId] = useState<string>(\"\");\n\n if (fileMetas.length === 0) return null;\n\n return (\n <FileContext.Provider value={{ appName, fileMetas, onDelete, actions, setImageId }}>\n {children({ Grid: FileViewerGrid, List: FileViewerList })}\n <ImageViewer metaId={imageId} />\n </FileContext.Provider>\n );\n};\n","import { Button } from \"@mui/material\";\nimport { createLink } from \"@tanstack/react-router\";\nimport React from \"react\";\nimport type { ButtonProps } from \"@mui/material\";\nimport type { LinkComponent } from \"@tanstack/react-router\";\n\nconst Component = React.forwardRef<HTMLAnchorElement, ButtonProps<\"a\">>(\n function ButtonComponent(props, reference) {\n return <Button ref={reference} component=\"a\" {...props} />;\n },\n);\n\nconst CreatedComponent = createLink(Component);\n\nexport const RouterButton: LinkComponent<typeof Component> = (props) => {\n return <CreatedComponent {...props} />;\n};\n","import { Fab } from \"@mui/material\";\nimport { createLink } from \"@tanstack/react-router\";\nimport React from \"react\";\nimport type { FabProps } from \"@mui/material\";\nimport type { LinkComponent } from \"@tanstack/react-router\";\n\nconst Component = React.forwardRef<HTMLAnchorElement, FabProps<\"a\">>(\n function FabComponent(props, reference) {\n return <Fab ref={reference} component=\"a\" {...props} />;\n },\n);\n\nconst CreatedComponent = createLink(Component);\n\nexport const RouterFab: LinkComponent<typeof Component> = (props) => {\n return <CreatedComponent {...props} />;\n};\n","import { Link } from \"@mui/material\";\nimport { createLink } from \"@tanstack/react-router\";\nimport React from \"react\";\nimport type { LinkProps } from \"@mui/material\";\nimport type { LinkComponent } from \"@tanstack/react-router\";\n\nconst Component = React.forwardRef<HTMLAnchorElement, LinkProps>(\n function LinkComponent(props, reference) {\n return <Link ref={reference} {...props} />;\n },\n);\n\nconst CreatedComponent = createLink(Component);\n\nexport const RouterLink: LinkComponent<typeof Component> = (props) => {\n return <CreatedComponent {...props} />;\n};\n","import { Tab } from \"@mui/material\";\nimport { createLink } from \"@tanstack/react-router\";\nimport React from \"react\";\nimport type { TabProps } from \"@mui/material\";\nimport type { LinkComponent } from \"@tanstack/react-router\";\n\nconst Component = React.forwardRef<HTMLAnchorElement, TabProps<\"a\">>(\n function TabComponent(props, reference) {\n return <Tab ref={reference} component=\"a\" {...props} />;\n },\n);\n\nconst CreatedComponent = createLink(Component);\n\nexport const RouterTab: LinkComponent<typeof Component> = (props) => {\n return <CreatedComponent {...props} />;\n};\n","import { Box, Divider, Typography } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { Fullscreen } from \"../core/Fullscreen\";\n\nexport function RouterNotFound() {\n const { t } = useTranslation();\n\n return (\n <Fullscreen\n sx={{\n alignItems: \"center\",\n justifyContent: \"center\",\n px: 2,\n }}\n >\n <Box component=\"h1\" sx={{ display: \"flex\", alignItems: \"center\", m: 0, mb: 4 }}>\n <Typography variant=\"h3\" component=\"span\" sx={{ fontWeight: 500, lineHeight: 1 }}>\n 404\n </Typography>\n <Divider\n component=\"span\"\n role=\"presentation\"\n orientation=\"vertical\"\n flexItem\n sx={{ mx: 3 }}\n />\n <Typography variant=\"h5\" component=\"span\">\n {t(\"Layout.ThisPageCouldNotBeFound\")}\n </Typography>\n </Box>\n </Fullscreen>\n );\n}\n","import { Box, Divider, Typography } from \"@mui/material\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport type { FC } from \"react\";\nimport { Fullscreen } from \"../core/Fullscreen\";\n\ninterface RouterErrorProps {\n error: ErrorComponentProps[\"error\"];\n}\n\nexport const RouterError: FC<RouterErrorProps> = ({ error }) => {\n const isError = error instanceof Error;\n\n return (\n <Fullscreen\n sx={{\n alignItems: \"center\",\n justifyContent: \"center\",\n px: 2,\n }}\n >\n <Box component=\"h1\" sx={{ display: \"flex\", alignItems: \"center\", m: 0, mb: 4 }}>\n <Typography variant=\"h3\" component=\"span\" sx={{ fontWeight: 500, lineHeight: 1 }}>\n {(isError && error.name) || \"500\"}\n </Typography>\n <Divider\n component=\"span\"\n role=\"presentation\"\n orientation=\"vertical\"\n flexItem\n sx={{ mx: 3 }}\n />\n <Typography variant=\"h5\" component=\"span\">\n {isError ? error.message : String(error)}\n </Typography>\n </Box>\n </Fullscreen>\n );\n};\n","import type { SxProps, Theme } from \"@mui/material\";\nimport {\n Box,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableFooter,\n TableHead,\n TableRow,\n} from \"@mui/material\";\nimport { useHotkeys } from \"@tanstack/react-hotkeys\";\nimport type { Cell, Header, Row, RowData } from \"@tanstack/react-table\";\nimport type { Range } from \"@tanstack/react-virtual\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { KeyboardEvent, MouseEvent, ReactElement } from \"react\";\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { LayoutTableFeatures } from \"~/components/table/context\";\nimport type { useLayoutTable } from \"~/hooks/useLayoutTable\";\nimport { DEFAULT_PAGE_SIZE_OPTIONS } from \"./table/Pagination\";\nimport type { TableToolbarProps } from \"./table/Toolbar\";\nimport {\n cellSelectionSx,\n classNames,\n columnAlign,\n columnFlex,\n hasColumnLabel,\n layoutTableClasses as classes,\n lookaheadRange,\n pinnedClass,\n pinnedSx,\n toClipboardText,\n} from \"./utils\";\n\nconst ROW_HEIGHT = 52;\nconst COLUMN_HEADER_HEIGHT = 56;\n/** Rows and columns kept mounted past the viewport edge so scrolling never shows a gap. */\nconst ROW_OVERSCAN = 6;\nconst ROW_LOOKAHEAD = 15;\nconst COLUMN_OVERSCAN = 3;\n\ntype LayoutTableInstance<TData extends RowData> = ReturnType<typeof useLayoutTable<TData>>;\ntype LayoutHeader<TData extends RowData> = Header<LayoutTableFeatures, TData, unknown>;\ntype LayoutCell<TData extends RowData> = Cell<LayoutTableFeatures, TData, unknown>;\n\nexport type LayoutTableProps<TData extends RowData> = TableToolbarProps & {\n table: LayoutTableInstance<TData>;\n loading?: boolean;\n pagination?: boolean;\n pageSizeOptions?: Array<number>;\n showToolbar?: boolean;\n disableColumnMenu?: boolean;\n onRowClick?: (row: Row<LayoutTableFeatures, TData>) => void;\n onRowDoubleClick?: (row: Row<LayoutTableFeatures, TData>) => void;\n sx?: SxProps<Theme>;\n};\n\nconst JUSTIFY = { left: \"flex-start\", center: \"center\", right: \"flex-end\" } as const;\n\nconst CELL_SX = { py: 0, px: \"10px\" } as const;\nconst UTILITY_SX = { py: 0, px: 0.5 } as const;\n\n/** Pins the aggregation row to the bottom of the scroll area, like the sticky header. */\nconst FOOTER_SX = {\n position: \"sticky\",\n bottom: 0,\n zIndex: 3,\n bgcolor: \"background.paper\",\n borderTop: 1,\n borderTopStyle: \"solid\",\n borderColor: \"divider\",\n} as const;\n\nconst pinnedWidth = (columns: Array<{ getSize: () => number }>) =>\n columns.reduce((total, column) => total + column.getSize(), 0);\n\n/**\n * Gives an ellipsized value (the cell itself or a noWrap Typography in it) a native\n * tooltip with its full text. Checked on hover, so it follows resizes and new data.\n */\nconst titleIfTruncated = (event: MouseEvent<HTMLElement>) => {\n const element = event.target as HTMLElement;\n if (getComputedStyle(element).textOverflow !== \"ellipsis\") return;\n element.title = element.scrollWidth > element.clientWidth ? (element.textContent ?? \"\") : \"\";\n};\n\nexport function LayoutTable<TData extends RowData>({\n table,\n loading = false,\n pagination = false,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showToolbar = false,\n disableColumnMenu = false,\n onRowClick,\n onRowDoubleClick,\n sx,\n ...toolbar\n}: LayoutTableProps<TData>) {\n // TanStack Virtual mutates a stable instance and re-renders through its own\n // reducer, so the compiler would happily serve the first getVirtualItems()\n // forever. See https://github.com/TanStack/virtual/issues/736.\n \"use no memo\";\n\n const { t } = useTranslation();\n const containerRef = useRef<HTMLDivElement>(null);\n\n const headerGroups = table.getHeaderGroups();\n const headerHeight = headerGroups.length * COLUMN_HEADER_HEIGHT;\n const visibleColumnCount = table.getVisibleLeafColumns().length;\n const hasFooter = table.getAllLeafColumns().some((column) => column.columnDef.footer);\n\n const { top, bottom } = table.state.rowPinning;\n const pinnedIds = new Set([...top, ...bottom]);\n const centerRows = (\n pagination ? table.getRowModel() : table.getPrePaginatedRowModel()\n ).rows.filter((row) => !pinnedIds.has(row.id));\n const rows = [...table.getTopRows(), ...centerRows, ...table.getBottomRows()];\n const isEmpty = !loading && !rows.length;\n\n // Keyboard cell selection steps through `table.getRowModel()`, so an unpaginated\n // grid has to widen the page to everything it renders or the arrows stop dead at\n // the default page size.\n // The pager offers only pageSizeOptions. It starts at the lowest unless the app set a page size\n // (state or initialState), and goes back to the lowest whenever the size is not offered.\n // A layout effect, so the first paint already has it; the pager waits for an offered size.\n const pageSize = table.state.pagination.pageSize;\n const pageSizeOffered = pageSizeOptions.includes(pageSize);\n const pagerStarted = useRef(false);\n useLayoutEffect(() => {\n if (!pagination) {\n if (pageSize !== rows.length) table.setPageSize(Math.max(rows.length, 1));\n return;\n }\n const appSetSize =\n pagerStarted.current ||\n !!(table.options.state?.pagination ?? table.options.initialState?.pagination);\n pagerStarted.current = true;\n if (!appSetSize || !pageSizeOffered)\n table.setPagination({ pageIndex: 0, pageSize: Math.min(...pageSizeOptions) });\n }, [pagination, pageSize, pageSizeOffered, pageSizeOptions, rows.length, table]);\n\n const startColumns = table.getStartVisibleLeafColumns();\n const endColumns = table.getEndVisibleLeafColumns();\n const centerColumns = table.getCenterVisibleLeafColumns();\n const startPinnedWidth = pinnedWidth(startColumns);\n const endPinnedWidth = pinnedWidth(endColumns);\n\n // Floored, not clientWidth: that rounds, so a container 883.9px wide reported 884 and the\n // table overflowed it by a fraction of a pixel, which still shows a horizontal scrollbar.\n // contentRect leaves out the scrollbars. The observer reports before the first paint; until\n // then one pixel less than clientWidth cannot overflow.\n const [containerWidth, setContainerWidth] = useState(0);\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n setContainerWidth(container.clientWidth - 1);\n const observer = new ResizeObserver(([entry]) =>\n setContainerWidth(Math.floor(entry.contentRect.width)),\n );\n observer.observe(container);\n return () => observer.disconnect();\n }, []);\n\n // Flex columns split whatever width the sized columns leave in the container,\n // growing past their size or shrinking toward their minSize (TanStack's default\n // is 20) so the table fits exactly. When even that cannot fit, they keep their\n // size and the table scrolls. So a flex delta never coexists with a horizontal\n // scroll, and the sticky offsets can keep working from getSize().\n const flexColumns = table.getVisibleLeafColumns().filter((column) => columnFlex(column) > 0);\n const totalFlex = flexColumns.reduce((total, column) => total + columnFlex(column), 0);\n const flexSpace = containerWidth - table.getTotalSize();\n const flexDeltas = flexColumns.map(\n (column) => [column.id, Math.floor((flexSpace * columnFlex(column)) / totalFlex)] as const,\n );\n const flexFits = flexColumns.every(\n (column, index) => column.getSize() + flexDeltas[index][1] >= (column.columnDef.minSize ?? 20),\n );\n const flexWidths = new Map(flexFits ? flexDeltas : []);\n const tableWidth = [...flexWidths.values()].reduce(\n (total, delta) => total + delta,\n table.getTotalSize(),\n );\n const renderedWidth = (column: { id: string; getSize: () => number }) =>\n column.getSize() + (flexWidths.get(column.id) ?? 0);\n const headerWidth = (header: LayoutHeader<TData>) =>\n header.column\n .getLeafColumns()\n .reduce((width, column) => width + (flexWidths.get(column.id) ?? 0), header.getSize());\n\n // ponytail: columns stay unvirtualized for grouped header rows, whose group\n // headers span leaf columns a window would cut in half, and while the skeleton\n // renders, since it draws every column. Rows virtualize in both cases.\n const virtualizeColumns = headerGroups.length === 1 && !loading;\n\n // Rows are at least ROW_HEIGHT and measured once rendered (`measureElement`), so a cell\n // that wraps or holds more lines makes its row taller without breaking the scroll.\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => containerRef.current,\n estimateSize: () => ROW_HEIGHT,\n // Exact, not the default's rounded size: rows are fractional on scaled screens (76.67px),\n // and twenty rows rounded up let the window end a few pixels short of the viewport.\n measureElement: (element) => element.getBoundingClientRect().height,\n getItemKey: (index) => rows[index].id,\n overscan: ROW_OVERSCAN,\n rangeExtractor: (range: Range): Array<number> =>\n lookaheadRange(range, rowVirtualizer.scrollDirection, ROW_LOOKAHEAD),\n // The rows start below the header, and the header stays sticky on top of them.\n scrollMargin: headerHeight,\n scrollPaddingStart: headerHeight,\n });\n\n const columnVirtualizer = useVirtualizer({\n count: virtualizeColumns ? centerColumns.length : 0,\n getScrollElement: () => containerRef.current,\n estimateSize: (index) => renderedWidth(centerColumns[index]),\n getItemKey: (index) => centerColumns[index].id,\n horizontal: true,\n overscan: COLUMN_OVERSCAN,\n scrollPaddingStart: startPinnedWidth,\n scrollPaddingEnd: endPinnedWidth,\n });\n\n // Resizing, or the container resizing the flex columns, changes the widths the\n // column offsets were measured from.\n const columnSizing = table.state.columnSizing;\n useEffect(() => {\n columnVirtualizer.measure();\n }, [columnVirtualizer, columnSizing, containerWidth]);\n\n const focusedCell = table.getFocusedCell();\n const focusedRowId = focusedCell?.row.id;\n const focusedColumnId = focusedCell?.column.id;\n\n // Keyboard selection can land on a row or column that is currently virtualized\n // out, so scroll it back in rather than move focus into nothing. The browser\n // places a mounted cell more accurately than scrollToIndex can — it knows about\n // the scrollbars — so that path is only the fallback for an unmounted one.\n useEffect(() => {\n const cell = containerRef.current?.querySelector(\"tbody td[tabindex='0']\");\n if (cell) {\n cell.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n return;\n }\n\n const rowIndex = rows.findIndex((row) => row.id === focusedRowId);\n if (rowIndex >= 0) rowVirtualizer.scrollToIndex(rowIndex);\n\n const columnIndex = centerColumns.findIndex((column) => column.id === focusedColumnId);\n if (columnIndex >= 0) columnVirtualizer.scrollToIndex(columnIndex);\n }, [focusedRowId, focusedColumnId]);\n\n const hasCellSelection = table.state.cellSelection.length > 0;\n\n const copySelection = () => {\n const text = toClipboardText(table.getSelectedCellRangesData());\n if (text) void navigator.clipboard.writeText(text);\n };\n\n // Selection keys only bind while cells are selected, so an unfocused grid still\n // scrolls with the arrows and Escape still reaches an enclosing dialog.\n useHotkeys(\n [\n { hotkey: \"ArrowUp\", callback: () => table.moveCellSelection(\"up\") },\n { hotkey: \"ArrowDown\", callback: () => table.moveCellSelection(\"down\") },\n { hotkey: \"ArrowLeft\", callback: () => table.moveCellSelection(\"left\") },\n { hotkey: \"ArrowRight\", callback: () => table.moveCellSelection(\"right\") },\n { hotkey: \"Shift+ArrowUp\", callback: () => table.extendCellSelection(\"up\") },\n { hotkey: \"Shift+ArrowDown\", callback: () => table.extendCellSelection(\"down\") },\n { hotkey: \"Shift+ArrowLeft\", callback: () => table.extendCellSelection(\"left\") },\n { hotkey: \"Shift+ArrowRight\", callback: () => table.extendCellSelection(\"right\") },\n { hotkey: \"Mod+C\", callback: copySelection },\n { hotkey: \"Escape\", callback: () => table.resetCellSelection(true) },\n { hotkey: \"Mod+A\", callback: () => table.selectAllCells(), options: { enabled: true } },\n ],\n { target: containerRef, enabled: hasCellSelection },\n );\n\n const virtualRows = rowVirtualizer.getVirtualItems();\n const paddingTop = virtualRows.length ? virtualRows[0].start - headerHeight : 0;\n const paddingBottom = virtualRows.length\n ? rowVirtualizer.getTotalSize() - virtualRows[virtualRows.length - 1].end + headerHeight\n : 0;\n\n const virtualColumns = columnVirtualizer.getVirtualItems();\n const firstColumn = virtualColumns.length ? virtualColumns[0] : undefined;\n const lastColumn = virtualColumns.length ? virtualColumns[virtualColumns.length - 1] : undefined;\n const paddingStart = firstColumn ? firstColumn.start : 0;\n const paddingEnd = lastColumn ? columnVirtualizer.getTotalSize() - lastColumn.end : 0;\n\n /**\n * Splits a display-ordered leaf array — a header row, a footer row or a row's\n * cells, which TanStack all orders start-pinned, centre, end-pinned — into the\n * pinned regions, which always render, and the virtualized centre window.\n */\n const windowColumns = <T,>(all: Array<T>) =>\n firstColumn && lastColumn\n ? {\n start: all.slice(0, startColumns.length),\n center: all.slice(\n startColumns.length + firstColumn.index,\n startColumns.length + lastColumn.index + 1,\n ),\n end: endColumns.length ? all.slice(all.length - endColumns.length) : [],\n }\n : { start: all, center: [], end: [] };\n\n /** Absorbs the width of the columns the centre window skipped. */\n const skippedColumns = (width: number) =>\n width > 0 ? (\n <TableCell aria-hidden className={classes.cellOffset} style={{ width }} sx={{ p: 0 }} />\n ) : null;\n\n const renderHeader = (h: LayoutHeader<TData>, groupIndex: number) => (\n <table.AppHeader key={h.id} header={h}>\n {(header) => {\n const align = columnAlign(header.column);\n const labelled = hasColumnLabel(header.column);\n\n return (\n <TableCell\n className={classNames(\n classes.columnHeader,\n header.column.getCanSort() && classes[\"columnHeader--sortable\"],\n header.column.getIsSorted() && classes[\"columnHeader--sorted\"],\n header.column.getIsFiltered() && classes[\"columnHeader--filtered\"],\n pinnedClass(header.column, \"columnHeader\"),\n )}\n colSpan={header.colSpan}\n align={align}\n sortDirection={header.column.getIsSorted()}\n sx={{\n position: \"sticky\",\n top: groupIndex * COLUMN_HEADER_HEIGHT,\n zIndex: 3,\n bgcolor: \"background.paper\",\n width: headerWidth(header),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n ...(labelled ? CELL_SX : UTILITY_SX),\n ...pinnedSx(header.column, true),\n }}\n >\n {header.isPlaceholder ? null : (\n <Box\n className={classes.columnHeaderContent}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n justifyContent: JUSTIFY[align],\n }}\n >\n <Box\n className={classes.columnHeaderTitleContainer}\n sx={{\n flex: labelled ? 1 : \"0 1 auto\",\n minWidth: 0,\n display: \"flex\",\n justifyContent: JUSTIFY[align],\n overflow: \"hidden\",\n \"& .MuiTableSortLabel-root\": { minWidth: 0 },\n \"& .MuiTableSortLabel-root > *:first-of-type\": {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n }}\n >\n <header.HeaderSortLabel>\n <header.FlexRender />\n </header.HeaderSortLabel>\n </Box>\n {!disableColumnMenu && <header.HeaderMenu disableGrouping={pagination} />}\n </Box>\n )}\n <header.HeaderResizeHandle />\n </TableCell>\n );\n }}\n </table.AppHeader>\n );\n\n const cellClassName = (cell: LayoutCell<TData>) =>\n classNames(\n classes.cell,\n cell.getIsSelected() && classes[\"cell--selected\"],\n cell.getIsGrouped() && classes[\"cell--grouped\"],\n cell.getIsAggregated() && classes[\"cell--aggregated\"],\n pinnedClass(cell.column, \"cell\"),\n );\n\n const renderCell = (c: LayoutCell<TData>) => (\n <table.AppCell key={c.id} cell={c}>\n {(cell) =>\n cell.getIsCovered() ? null : (\n <TableCell\n className={cellClassName(cell)}\n align={columnAlign(cell.column)}\n rowSpan={cell.getRowSpan()}\n colSpan={cell.getColSpan()}\n tabIndex={cell.getCanSelect() ? cell.getTabIndex() : undefined}\n onMouseDown={cell.getSelectionStartHandler()}\n onMouseEnter={cell.getSelectionExtendHandler()}\n onMouseOver={titleIfTruncated}\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n userSelect: cell.getCanSelect() ? \"none\" : undefined,\n ...(hasColumnLabel(cell.column) ? CELL_SX : UTILITY_SX),\n ...pinnedSx(cell.column),\n ...cellSelectionSx(cell),\n }}\n >\n {cell.getIsGrouped() ? (\n <cell.GroupCell />\n ) : cell.row.getIsGrouped() && !cell.getIsAggregated() ? null : (\n <cell.FlexRender />\n )}\n </TableCell>\n )\n }\n </table.AppCell>\n );\n\n const renderFooter = (f: LayoutHeader<TData>) => (\n <table.AppFooter key={f.id} header={f}>\n {(footer) => (\n <TableCell\n className={classNames(classes.footerCell, pinnedClass(footer.column, \"cell\"))}\n colSpan={footer.colSpan}\n align={columnAlign(footer.column)}\n sx={{\n ...(hasColumnLabel(footer.column) ? CELL_SX : UTILITY_SX),\n ...pinnedSx(footer.column),\n ...FOOTER_SX,\n }}\n >\n {footer.isPlaceholder ? null : <footer.FlexRender />}\n </TableCell>\n )}\n </table.AppFooter>\n );\n\n const rowAction = onRowClick ?? onRowDoubleClick;\n\n const renderRow = (row: Row<LayoutTableFeatures, TData>, index: number) => {\n const cells = windowColumns(row.getVisibleCells());\n const focusableCells = row.getVisibleCells().some((cell) => cell.getCanSelect());\n\n return (\n <TableRow\n key={row.id}\n className={classNames(\n classes.row,\n row.getIsGrouped() && classes[\"row--grouped\"],\n row.getIsExpanded() && classes[\"row--expanded\"],\n row.getIsPinned() && classes[\"row--pinned\"],\n )}\n ref={rowVirtualizer.measureElement}\n data-index={index}\n hover\n selected={row.getIsSelected()}\n tabIndex={rowAction && !focusableCells ? 0 : undefined}\n onClick={onRowClick && (() => onRowClick(row))}\n onDoubleClick={onRowDoubleClick && (() => onRowDoubleClick(row))}\n onKeyDown={\n rowAction &&\n ((event: KeyboardEvent<HTMLTableRowElement>) => {\n const target = event.target as HTMLElement;\n if (\n event.key === \"Enter\" &&\n (target === event.currentTarget || target.tagName === \"TD\")\n )\n rowAction(row);\n })\n }\n sx={{\n height: ROW_HEIGHT,\n cursor: onRowClick || onRowDoubleClick ? \"pointer\" : undefined,\n }}\n >\n {cells.start.map(renderCell)}\n {skippedColumns(paddingStart)}\n {cells.center.map(renderCell)}\n {skippedColumns(paddingEnd)}\n {cells.end.map(renderCell)}\n <TableCell aria-hidden className={classes.filler} sx={{ p: 0 }} />\n </TableRow>\n );\n };\n\n // By index too: a row that moved (sorting, filtering) needs its new data-index, which the\n // virtualizer reads to file the row's measured height.\n const rowCache = useMemo(\n () => ({ current: new Map<string, ReactElement>() }),\n [table, firstColumn?.index, lastColumn?.index, paddingStart, paddingEnd],\n );\n const cacheKey = (index: number) => `${index}:${rows[index].id}`;\n const bodyRows = virtualRows.map(\n ({ index }) => rowCache.current.get(cacheKey(index)) ?? renderRow(rows[index], index),\n );\n rowCache.current = new Map(virtualRows.map(({ index }, i) => [cacheKey(index), bodyRows[i]]));\n\n /** Reserves the scroll height of the rows outside the virtual window. */\n const skippedRows = (height: number) =>\n height > 0 ? (\n <TableRow aria-hidden className={classes.rowOffset} style={{ height }}>\n <TableCell colSpan={visibleColumnCount + 1} sx={{ p: 0, border: 0 }} />\n </TableRow>\n ) : null;\n\n return (\n <table.AppTable>\n <Paper\n variant=\"outlined\"\n className={classes.root}\n // An array, not a spread: `sx` may itself be an array or a theme callback.\n sx={[\n {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n overflow: \"hidden\",\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {showToolbar && <table.Toolbar {...toolbar} />}\n <TableContainer\n ref={containerRef}\n className={classes.main}\n sx={{\n flex: 1,\n minHeight: 0,\n position: \"relative\",\n // Keeps scrollIntoView from tucking a cell under the sticky header or a\n // pinned column.\n scrollPaddingBlockStart: `${headerHeight}px`,\n scrollPaddingInlineStart: `${startPinnedWidth}px`,\n scrollPaddingInlineEnd: `${endPinnedWidth}px`,\n }}\n >\n <Table\n className={classes.table}\n stickyHeader\n size=\"small\"\n aria-busy={loading}\n aria-label={typeof toolbar.title === \"string\" ? toolbar.title : undefined}\n sx={{\n tableLayout: \"fixed\",\n width: tableWidth,\n minWidth: \"100%\",\n \"& tbody .MuiTableRow-root:last-of-type .MuiTableCell-root\": { borderBottom: 0 },\n \"& .MuiTableCell-root:focus, & .MuiTableRow-root:focus-visible\": {\n outline: \"1px solid\",\n outlineColor: \"primary.main\",\n outlineOffset: -1,\n },\n }}\n >\n <TableHead className={classes.columnHeaders}>\n {headerGroups.map((headerGroup, groupIndex) => {\n const headers = windowColumns(\n headerGroup.headers.filter((header) => header.column.getIsVisible()),\n );\n\n return (\n <TableRow\n key={headerGroup.id}\n className={classes.columnHeaderRow}\n sx={{ height: COLUMN_HEADER_HEIGHT }}\n >\n {headers.start.map((h) => renderHeader(h, groupIndex))}\n {skippedColumns(paddingStart)}\n {headers.center.map((h) => renderHeader(h, groupIndex))}\n {skippedColumns(paddingEnd)}\n {headers.end.map((h) => renderHeader(h, groupIndex))}\n <TableCell\n aria-hidden\n className={classes.filler}\n sx={{\n p: 0,\n position: \"sticky\",\n top: groupIndex * COLUMN_HEADER_HEIGHT,\n zIndex: 3,\n bgcolor: \"background.paper\",\n }}\n />\n </TableRow>\n );\n })}\n </TableHead>\n\n <TableBody className={classes.body}>\n {loading ? (\n <table.Skeleton rowHeight={ROW_HEIGHT} />\n ) : (\n <>\n {skippedRows(paddingTop)}\n {bodyRows}\n {skippedRows(paddingBottom)}\n </>\n )}\n\n {isEmpty && (\n <TableRow>\n <TableCell colSpan={visibleColumnCount + 1} sx={{ border: 0, p: 0 }}>\n <Box\n className={classes.overlay}\n sx={{\n position: \"absolute\",\n top: headerHeight,\n left: 0,\n bottom: 0,\n // Spans the whole scroll width so the sticky child can follow\n // horizontal scrolling.\n width: Math.max(tableWidth, containerWidth),\n color: \"text.secondary\",\n // A token, not `alpha(theme.palette…)`: under `cssVariables`\n // the palette still holds the default scheme's literal\n // values, so an alpha() here bakes in the light colour and\n // the overlay turns into a white wash in dark mode.\n bgcolor: \"background.paper\",\n \"& .no-rows-primary\": { opacity: 0.7 },\n \"& .no-rows-secondary\": { opacity: 0.3 },\n }}\n >\n <Box\n sx={{\n position: \"sticky\",\n left: 0,\n width: containerWidth,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 1,\n }}\n >\n <svg\n fill=\"currentColor\"\n width={96}\n viewBox=\"0 0 452 257\"\n aria-hidden\n focusable=\"false\"\n >\n <path\n className=\"no-rows-primary\"\n d=\"M348 69c-46.392 0-84 37.608-84 84s37.608 84 84 84 84-37.608 84-84-37.608-84-84-84Zm-104 84c0-57.438 46.562-104 104-104s104 46.562 104 104-46.562 104-104 104-104-46.562-104-104Z\"\n />\n <path\n className=\"no-rows-primary\"\n d=\"M308.929 113.929c3.905-3.905 10.237-3.905 14.142 0l63.64 63.64c3.905 3.905 3.905 10.236 0 14.142-3.906 3.905-10.237 3.905-14.142 0l-63.64-63.64c-3.905-3.905-3.905-10.237 0-14.142Z\"\n />\n <path\n className=\"no-rows-primary\"\n d=\"M308.929 191.711c-3.905-3.906-3.905-10.237 0-14.142l63.64-63.64c3.905-3.905 10.236-3.905 14.142 0 3.905 3.905 3.905 10.237 0 14.142l-63.64 63.64c-3.905 3.905-10.237 3.905-14.142 0Z\"\n />\n <path\n className=\"no-rows-secondary\"\n d=\"M0 10C0 4.477 4.477 0 10 0h380c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 20 0 15.523 0 10ZM0 59c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 69 0 64.523 0 59ZM0 106c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 153c0-5.523 4.477-10 10-10h195.5c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 200c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 247c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10Z\"\n />\n </svg>\n <Box>{t(\"Layout.Table.NoRows\")}</Box>\n </Box>\n </Box>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n\n {hasFooter && (\n <TableFooter className={classes.footer}>\n {table.getFooterGroups().map((footerGroup) => {\n const footers = windowColumns(\n footerGroup.headers.filter((header) => header.column.getIsVisible()),\n );\n\n return (\n <TableRow key={footerGroup.id} className={classes.footerRow}>\n {footers.start.map(renderFooter)}\n {skippedColumns(paddingStart)}\n {footers.center.map(renderFooter)}\n {skippedColumns(paddingEnd)}\n {footers.end.map(renderFooter)}\n <TableCell\n aria-hidden\n className={classes.filler}\n sx={{ p: 0, ...FOOTER_SX }}\n />\n </TableRow>\n );\n })}\n </TableFooter>\n )}\n </Table>\n </TableContainer>\n\n {pagination && pageSizeOffered && (\n <table.Pagination className={classes.pagination} pageSizeOptions={pageSizeOptions} />\n )}\n </Paper>\n </table.AppTable>\n );\n}\n"],"mappings":"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"}