UNPKG

wcz-layout

Version:

1 lines • 121 kB
{"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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"}