UNPKG

wcz-layout

Version:

1 lines 99.5 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","name","t12","fontWeight","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","Box","useEffectEvent","useLayoutEffect","useRef","useState","BoxProps","FC","Fullscreen","t0","$","_c","$i","Symbol","for","children","props","sx","reference","height","setHeight","t1","current","top","getBoundingClientRect","viewportHeight","window","visualViewport","innerHeight","avail","Math","max","floor","recompute","t2","element","addEventListener","ro","ResizeObserver","observe","document","documentElement","body","removeEventListener","disconnect","t3","t4","display","flexDirection","boxSizing","minHeight","width","overflow","t5","CloudUpload","SxProps","Theme","Box","CircularProgress","Typography","useTheme","CSSProperties","FC","DropzoneOptions","useDropzone","useTranslation","baseStyle","flex","display","flexDirection","alignItems","padding","borderWidth","borderRadius","borderStyle","outline","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","t4","t5","t6","t7","t8","t9","t10","createContext","useContext","FileMeta","FileActions","FileContextValue","appName","fileMetas","Array","onDelete","params","remainingFileMetas","deletedFileMeta","actions","setImageId","imageId","FileContext","useFile","$","_c","$i","Symbol","for","context","Error","Delete","FileDownload","List","ListItemButton","ListItemIcon","ListItemText","Menu","useMutation","useTranslation","FC","FileMeta","useFile","useDialogs","deleteFileMutationOptions","downloadFileMutationOptions","rootRouteId","useMatch","ActionsMenuProps","meta","menu","mouseX","mouseY","setMenu","ActionsMenu","t0","$","_c","$i","Symbol","for","t","fileMetas","onDelete","actions","appName","confirm","t1","handleMenuClose","t2","from","rootMatch","queryClient","context","t3","mutate","download","isPending","isDownloading","t4","deleteFile","isDeleting","t5","fileExtension","fileName","id","handleOnDownload","t6","name","remainingFileMetas","filter","m","deletedFileMeta","handleOnDelete","t7","t8","undefined","top","left","t9","t10","delete","t11","t12","MoreVert","Box","IconButton","ImageListItem","ImageListItemBar","Skeleton","Stack","Tooltip","grey","useMutation","useQuery","useQueryClient","React","Fragment","useEffect","useRef","useState","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","showItemBar","setShowItemBar","menu","setMenu","mouseX","mouseY","ref","inView","queryClient","target","Window","data","source","isPending","enabled","handleOnMouseEnter","handleOnMouseLeave","openMenu","event","MouseEvent","clientX","clientY","setTimeout","mutate","openFile","download","onClick","mediaType","current","window","open","fileName","fileExtension","width","height","prefetchQuery","cursor","objectFit","delete","color","AttachFile","Image","MoreVert","SmartDisplay","IconButton","List","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","menu","setMenu","mouseX","mouseY","queryClient","target","Window","openMenu","event","MouseEvent","stopPropagation","clientX","clientY","mutate","openFile","download","onClick","mediaType","id","current","window","open","fileName","fileExtension","icon","prefetchQuery","delete","fileMeta","Close","Box","Dialog","Fab","Skeleton","useQuery","React","useEffect","FileMeta","useFile","fileQueryOptions","ImageViewerProps","metaId","ImageViewer","FC","fileMetas","setImageId","appName","meta","find","m","id","data","source","isPending","enabled","globalThis","addEventListener","handleOnKeydown","removeEventListener","event","KeyboardEvent","images","Array","filter","mediaType","imageIndex","findIndex","key","handleOnArrowLeft","handleOnArrowRight","preventDefault","onClose","index","previousFile","length","nextFile","width","xs","sm","height","fileName","maxWidth","maxHeight","position","top","right","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","Button","createLink","React","ButtonProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","ButtonComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterButton","Fab","createLink","React","FabProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","FabComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterFab","Link","createLink","React","LinkProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterLink","Tab","createLink","React","TabProps","LinkComponent","Component","forwardRef","HTMLAnchorElement","TabComponent","props","reference","$","_c","$i","Symbol","for","t0","CreatedComponent","RouterTab","Box","Divider","Typography","useTranslation","Fullscreen","RouterNotFound","$","_c","$i","Symbol","for","t","t0","alignItems","justifyContent","px","t1","display","mb","t2","fontWeight","lineHeight","t3","mx","t4","t5","Box","Divider","Typography","ErrorComponentProps","FC","Fullscreen","RouterErrorProps","error","RouterError","t0","$","_c","$i","Symbol","for","isError","Error","t1","alignItems","justifyContent","px","t2","display","mb","t3","fontWeight","lineHeight","t4","name","t5","t6","mx","t7","message","String","t8","t9","SxProps","Theme","Box","Paper","Table","TableBody","TableCell","TableContainer","TableFooter","TableHead","TableRow","useHotkeys","Cell","Header","Row","RowData","useVirtualizer","useEffect","useRef","useTranslation","LayoutTableFeatures","useLayoutTable","TableToolbarProps","cellSelectionSx","columnAlign","hasColumnLabel","pinnedSx","toClipboardText","ROW_HEIGHT","COLUMN_HEADER_HEIGHT","ROW_OVERSCAN","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","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","setPageSize","Math","max","startColumns","getStartVisibleLeafColumns","endColumns","getEndVisibleLeafColumns","centerColumns","getCenterVisibleLeafColumns","startPinnedWidth","endPinnedWidth","virtualizeColumns","rowVirtualizer","count","getScrollElement","current","estimateSize","getItemKey","index","overscan","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","options","enabled","target","virtualRows","getVirtualItems","paddingTop","start","paddingBottom","getTotalSize","end","virtualColumns","firstColumn","undefined","lastColumn","paddingStart","paddingEnd","windowColumns","all","T","slice","skippedColumns","width","p","renderHeader","h","groupIndex","header","align","labelled","colSpan","getIsSorted","whiteSpace","overflow","isPlaceholder","display","alignItems","minWidth","justifyContent","flex","textOverflow","renderCell","c","getIsCovered","getRowSpan","getColSpan","getCanSelect","getTabIndex","getSelectionStartHandler","getSelectionExtendHandler","userSelect","getIsGrouped","getIsAggregated","renderFooter","f","renderRow","cells","getVisibleCells","getIsSelected","height","cursor","map","skippedRows","border","flexDirection","minHeight","scrollPaddingBlockStart","scrollPaddingInlineStart","scrollPaddingInlineEnd","tableLayout","borderBottom","outline","outlineColor","outlineOffset","headerGroup","headers","getIsVisible","virtualRow","gap","color","opacity","getFooterGroups","footerGroup","footers"],"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\n              component=\"img\"\n              src=\"/android-chrome-192x192.png\"\n              alt={manifest.name}\n              width={48}\n              height={48}\n            />\n            <Stack spacing={0.25}>\n              <Typography variant=\"body2\" color=\"text.secondary\" sx={{ fontWeight: 600 }}>\n                {manifest.name}\n              </Typography>\n              <Typography variant=\"h5\" 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\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    if (!reference.current) return;\n    const top = reference.current.getBoundingClientRect().top;\n    const viewportHeight = window.visualViewport?.height ?? window.innerHeight;\n    const avail = Math.max(0, Math.floor(viewportHeight - top));\n    setHeight(avail);\n  });\n\n  useLayoutEffect(() => {\n    const element = reference.current;\n    if (!element) return;\n\n    recompute();\n\n    window.addEventListener(\"resize\", recompute);\n\n    const ro = new ResizeObserver(recompute);\n    ro.observe(document.documentElement);\n    ro.observe(document.body);\n    ro.observe(element);\n\n    return () => {\n      window.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  outline: \"none\",\n  transition: \"border .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 {...getRootProps({ style })} sx={sx}>\n      <input {...getInputProps()} style={{ display: \"none\" }} />\n      {progress ? (\n        <CircularProgress size={24} variant=\"determinate\" value={progress} />\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 { List, ListItemButton, ListItemIcon, ListItemText, Menu } 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  menu: { mouseX: number; mouseY: number } | null;\n  setMenu: (menu: { mouseX: number; mouseY: number } | null) => void;\n}\n\nexport const ActionsMenu: FC<ActionsMenuProps> = ({ meta, menu, setMenu }) => {\n  const { t } = useTranslation();\n  const { fileMetas, onDelete, actions, appName } = useFile();\n  const { confirm } = useDialogs();\n\n  const handleMenuClose = () => {\n    setMenu(null);\n  };\n\n  const rootMatch = useMatch({ from: rootRouteId });\n  const queryClient = rootMatch.context.queryClient;\n\n  const { mutate: download, isPending: isDownloading } = useMutation(downloadFileMutationOptions());\n  const { mutate: deleteFile, isPending: isDeleting } = useMutation(\n    deleteFileMutationOptions({ queryClient }),\n  );\n\n  const handleOnDownload = () => {\n    handleMenuClose();\n    download({ id: meta.id, appName, fileName: meta.fileName, fileExtension: meta.fileExtension });\n  };\n\n  const handleOnDelete = async () => {\n    if (!(await confirm(t(\"Layout.File.AreYouSureYouWantToDelete\", { name: meta.fileName }))))\n      return;\n\n    deleteFile({ id: meta.id, appName });\n    handleMenuClose();\n\n    if (onDelete) {\n      const remainingFileMetas: Array<FileMeta> = fileMetas.filter((m) => m.id !== meta.id);\n      onDelete({ remainingFileMetas, deletedFileMeta: meta });\n    }\n  };\n\n  return (\n    <Menu\n      open={menu !== null}\n      onClose={handleMenuClose}\n      anchorReference=\"anchorPosition\"\n      variant=\"menu\"\n      anchorPosition={menu === null ? undefined : { top: menu.mouseY, left: menu.mouseX }}\n    >\n      <List disablePadding>\n        {actions?.download !== false && (\n          <ListItemButton onClick={handleOnDownload} disabled={isDownloading}>\n            <ListItemIcon>\n              <FileDownload />\n            </ListItemIcon>\n            <ListItemText>{t(\"Layout.File.Download\")}</ListItemText>\n          </ListItemButton>\n        )}\n        {actions?.delete !== false && (\n          <ListItemButton onClick={handleOnDelete} disabled={isDeleting}>\n            <ListItemIcon>\n              <Delete />\n            </ListItemIcon>\n            <ListItemText>{t(\"Layout.File.Delete\")}</ListItemText>\n          </ListItemButton>\n        )}\n      </List>\n    </Menu>\n  );\n};\n","import MoreVert from \"@mui/icons-material/MoreVert\";\nimport {\n  Box,\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, useEffect, useRef, useState } 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 [showItemBar, setShowItemBar] = useState<boolean>(itemBar === \"always\");\n  const [menu, setMenu] = useState<{ mouseX: number; mouseY: number } | null>(null);\n  const { ref, inView } = useInView();\n  const queryClient = useQueryClient();\n  const target = useRef<Window | null>(null);\n\n  useEffect(() => {\n    setShowItemBar(itemBar === \"always\");\n  }, [itemBar]);\n\n  const { data: source, isPending } = useQuery({\n    ...fileThumbnailQueryOptions({ id: meta.id, appName }),\n    enabled: inView,\n  });\n\n  const handleOnMouseEnter = () => setShowItemBar(true);\n  const handleOnMouseLeave = () => itemBar !== \"always\" && setShowItemBar(false);\n\n  const openMenu = (event: React.MouseEvent) => {\n    setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY } : null);\n    setTimeout(() => setShowItemBar(true));\n  };\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  return (\n    <Fragment>\n      <ImageListItem\n        sx={{ width: size ?? IMAGE_SIZE, height: size ?? IMAGE_SIZE }}\n        onMouseEnter={handleOnMouseEnter}\n        onMouseLeave={handleOnMouseLeave}\n        ref={ref}\n      >\n        {isPending ? (\n          <Skeleton variant=\"rectangular\" width={size ?? IMAGE_SIZE} height={size ?? IMAGE_SIZE} />\n        ) : (\n          <Box\n            component=\"img\"\n            src={source}\n            loading=\"lazy\"\n            alt={\"thumbnail-\" + meta.id}\n            onClick={onClick}\n            onMouseEnter={() =>\n              queryClient.prefetchQuery(fileQueryOptions({ id: meta.id, appName }))\n            }\n            sx={{\n              cursor: \"pointer\",\n              objectFit: \"contain\",\n              width: size ?? IMAGE_SIZE,\n              height: size ?? IMAGE_SIZE,\n            }}\n          />\n        )}\n        {itemBar !== \"hidden\" && showItemBar && (\n          <ImageListItemBar\n            title={\n              <Tooltip title={meta.fileName}>\n                <Box>{meta.fileName}</Box>\n              </Tooltip>\n            }\n            actionIcon={\n              (actions?.download !== false || actions.delete !== false) && (\n                <IconButton sx={{ color: grey[100] }} onClick={openMenu} aria-label=\"File actions\">\n                  <MoreVert />\n                </IconButton>\n              )\n            }\n          />\n        )}\n      </ImageListItem>\n\n      {(actions?.download !== false || actions.delete !== false) && (\n        <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />\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 { IconButton, List, ListItemButton, ListItemIcon, ListItemText } 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 [menu, setMenu] = useState<{ mouseX: number; mouseY: number } | null>(null);\n  const queryClient = useQueryClient();\n  const target = useRef<Window | null>(null);\n\n  const openMenu = (event: React.MouseEvent) => {\n    event.stopPropagation();\n    setMenu(menu === null ? { mouseX: event.clientX, mouseY: event.clientY } : null);\n  };\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      <ListItemButton\n        key={meta.id}\n        onClick={onClick}\n        onMouseEnter={() => queryClient.prefetchQuery(fileQueryOptions({ id: meta.id, appName }))}\n      >\n        <ListItemIcon>{icon()}</ListItemIcon>\n        <ListItemText primary={`${meta.fileName}.${meta.fileExtension}`} />\n        {(actions?.download !== false || actions.delete !== false) && (\n          <IconButton edge=\"end\" onClick={openMenu} aria-label=\"File actions\">\n            <MoreVert />\n          </IconButton>\n        )}\n      </ListItemButton>\n\n      {(actions?.download !== false || actions.delete !== false) && (\n        <ActionsMenu meta={meta} menu={menu} setMenu={setMenu} />\n      )}\n    </Fragment>\n  );\n};\n","import 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 type { FileMeta } from \"~/models/file/FileMeta\";\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\n  const { data: source, isPending } = useQuery({\n    ...fileQueryOptions({ id: meta?.id ?? \"\", appName }),\n    enabled: !!meta,\n  });\n\n  useEffect(() => {\n    if (metaId) globalThis.addEventListener(\"keydown\", handleOnKeydown);\n\n    return () => {\n      globalThis.removeEventListener(\"keydown\", handleOnKeydown);\n    };\n  }, [metaId]);\n\n  const handleOnKeydown = (event: KeyboardEvent) => {\n    const images: Array<FileMeta> = fileMetas.filter((m) => m.mediaType === \"image\");\n    const imageIndex: number = images.findIndex((m) => m.id === metaId);\n\n    switch (event.key) {\n      case \"ArrowLeft\": {\n        return handleOnArrowLeft(images, imageIndex);\n      }\n      case \"ArrowRight\": {\n        return handleOnArrowRight(images, imageIndex);\n      }\n      case \"Backspace\":\n      case \"Escape\": {\n        event.preventDefault();\n        return onClose();\n      }\n    }\n  };\n\n  const handleOnArrowLeft = (images: Array<FileMeta>, index: number) => {\n    if (index > 0) {\n      const previousFile: FileMeta = images[index - 1];\n      setImageId(previousFile.id);\n    }\n  };\n\n  const handleOnArrowRight = (images: Array<FileMeta>, index: number) => {\n    if (index < images.length - 1) {\n      const nextFile: FileMeta = images[index + 1];\n      setImageId(nextFile.id);\n    }\n  };\n\n  const onClose = () => setImageId(\"\");\n\n  if (!meta) return null;\n\n  return (\n    <Dialog open onClose={onClose} maxWidth=\"xl\">\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      <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 sx={{ display: \"flex\", alignItems: \"center\", mb: 4 }}>\n        <Typography variant=\"h3\" component=\"span\" sx={{ fontWeight: 500, lineHeight: 1 }}>\n          404\n        </Typography>\n        <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\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 sx={{ display: \"flex\", alignItems: \"center\", mb: 4 }}>\n        <Typography variant=\"h3\" component=\"span\" sx={{ fontWeight: 500, lineHeight: 1 }}>\n          {(isError && error.name) || \"500\"}\n        </Typography>\n        <Divider orientation=\"vertical\" flexItem sx={{ mx: 3 }} />\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 { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { useEffect, useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport type { LayoutTableFeatures } from \"~/components/table/context\";\nimport type { useLayoutTable } from \"~/hooks/useLayoutTable\";\nimport type { TableToolbarProps } from \"./table/Toolbar\";\nimport { cellSelectionSx, columnAlign, hasColumnLabel, pinnedSx, toClipboardText } 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 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\nexport function LayoutTable<TData extends RowData>({\n  table,\n  loading = false,\n  pagination = false,\n  pageSizeOptions = [10, 25, 50, 100],\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  const pageSize = table.state.pagination.pageSize;\n  useEffect(() => {\n    if (!pagination && pageSize !== rows.length) table.setPageSize(Math.max(rows.length, 1));\n  }, [pagination, pageSize, 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  // 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  const rowVirtualizer = useVirtualizer({\n    count: rows.length,\n    getScrollElement: () => containerRef.current,\n    estimateSize: () => ROW_HEIGHT,\n    getItemKey: (index) => rows[index].id,\n    overscan: ROW_OVERSCAN,\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) => centerColumns[index].getSize(),\n    getItemKey: (index) => centerColumns[index].id,\n    horizontal: true,\n    overscan: COLUMN_OVERSCAN,\n    scrollPaddingStart: startPinnedWidth,\n    scrollPaddingEnd: endPinnedWidth,\n  });\n\n  // Resizing changes the widths the column offsets were measured from.\n  const columnSizing = table.state.columnSizing;\n  useEffect(() => {\n    columnVirtualizer.measure();\n  }, [columnVirtualizer, columnSizing]);\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 ? <TableCell aria-hidden style={{ width }} sx={{ p: 0 }} /> : 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            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: header.getSize(),\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                sx={{\n                  display: \"flex\",\n                  alignItems: \"center\",\n                  minWidth: 0,\n                  justifyContent: JUSTIFY[align],\n                }}\n              >\n                <Box\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 />}\n              </Box>\n            )}\n            <header.HeaderResizeHandle />\n          </TableCell>\n        );\n      }}\n    </table.AppHeader>\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            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            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          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 renderRow = (row: Row<LayoutTableFeatures, TData>) => {\n    const cells = windowColumns(row.getVisibleCells());\n\n    return (\n      <TableRow\n        key={row.id}\n        hover\n        selected={row.getIsSelected()}\n        onClick={onRowClick && (() => onRowClick(row))}\n        onDoubleClick={onRowDoubleClick && (() => onRowDoubleClick(row))}\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 sx={{ p: 0 }} />\n      </TableRow>\n    );\n  };\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 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        sx={{\n          display: \"flex\",\n          flexDirection: \"column\",\n          height: \"100%\",\n          minHeight: 0,\n          overflow: \"hidden\",\n          ...sx,\n        }}\n      >\n        {showToolbar && <table.Toolbar {...toolbar} />}\n        <TableContainer\n          ref={containerRef}\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            stickyHeader\n            size=\"small\"\n            sx={{\n              tableLayout: \"fixed\",\n              width: table.getTotalSize(),\n              minWidth: \"100%\",\n              \"& tbody .MuiTableRow-root:last-of-type .MuiTableCell-root\": { borderBottom: 0 },\n              \"& .MuiTableCell-root:focus\": {\n                outline: \"1px solid\",\n                outlineColor: \"primary.main\",\n                outlineOffset: -1,\n              },\n            }}\n          >\n            <TableHead>\n              {headerGroups.map((headerGroup, groupIndex) => {\n                const headers = windowColumns(\n                  headerGroup.headers.filter((header) => header.column.getIsVisible()),\n                );\n\n                return (\n                  <TableRow key={headerGroup.id} sx={{ height: COLUMN_HEADER_HEIGHT }}>\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                      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>\n              {loading ? (\n                <table.Skeleton rowHeight={ROW_HEIGHT} />\n              ) : (\n                <>\n                  {skippedRows(paddingTop)}\n                  {virtualRows.map((virtualRow) => renderRow(rows[virtualRow.index]))}\n                  {skippedRows(paddingBottom)}\n                </>\n              )}\n\n              {isEmpty && (\n                <TableRow>\n                  <TableCell colSpan={visibleColumnCount + 1} sx={{ border: 0, p: 0 }}>\n                    <Box\n                      sx={{\n                        position: \"absolute\",\n                        top: headerHeight,\n                        left: 0,\n                        right: 0,\n                        bottom: 0,\n                        display: \"flex\",\n                        flexDirection: \"column\",\n                        alignItems: \"center\",\n                        justifyContent: \"center\",\n                        gap: 1,\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                      <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                  </TableCell>\n                </TableRow>\n              )}\n            </TableBody>\n\n            {hasFooter && (\n              <TableFooter>\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}>\n                      {footers.start.map(renderFooter)}\n                      {skippedColumns(paddingStart)}\n                      {footers.center.map(renderFooter)}\n                      {skippedColumns(paddingEnd)}\n                      {footers.end.map(renderFooter)}\n                      <TableCell aria-hidden sx={{ p: 0, ...FOOTER_SX }} />\n                    </TableRow>\n                  );\n                })}\n              </TableFooter>\n            )}\n          </Table>\n        </TableContainer>\n\n        {pagination && <table.Pagination pageSizeOptions={pageSizeOptions} />}\n      </Paper>\n    </table.AppTable>\n  );\n}\n"],"mappings":"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"}