+
-
-
-
-
-
- Enabled
- Message
- Color
-
-
-
-
- {!isEntitled || banners.length < 1 ? (
-
-
-
- ) : (
- banners.map((banner, i) => (
- setEditingBannerId(i)}
- onUpdate={async (banner) => {
- const newBanners = updateBanner(i, banner);
- await onSubmit(newBanners);
- }}
- onDelete={() => setDeletingBannerId(i)}
- />
- ))
- )}
-
-
-
+
+
+
+
+ Enabled
+ Message
+ Color
+
+
+
+
+ {!isEntitled || banners.length < 1 ? (
+
+
+
+ ) : (
+ banners.map((banner, i) => (
+ setEditingBannerId(i)}
+ onUpdate={async (banner) => {
+ const newBanners = updateBanner(i, banner);
+ await onSubmit(newBanners);
+ }}
+ onDelete={() => setDeletingBannerId(i)}
+ />
+ ))
+ )}
+
+
diff --git a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx
index ad61a7c188..1f7d2d59ec 100644
--- a/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx
+++ b/site/src/pages/DeploymentSettingsPage/ExternalAuthSettingsPage/ExternalAuthSettingsPageView.tsx
@@ -1,10 +1,4 @@
import { css } from "@emotion/react";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type { DeploymentValues, ExternalAuthConfig } from "api/typesGenerated";
import { Alert } from "components/Alert/Alert";
import { PremiumBadge } from "components/Badges/Badges";
@@ -14,6 +8,14 @@ import {
SettingsHeaderDocsLink,
SettingsHeaderTitle,
} from "components/SettingsHeader/SettingsHeader";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import type { FC } from "react";
import { docs } from "utils/docs";
@@ -60,9 +62,8 @@ export const ExternalAuthSettingsPageView: FC<
-
-
-
+ >
+
+
+ ID
+ Client ID
+ Match
+
+
+
+ {((config.external_auth === null ||
+ config.external_auth?.length === 0) && (
- ID
- Client ID
- Match
+
+
+ No providers have been configured!
+
+
-
-
- {((config.external_auth === null ||
- config.external_auth?.length === 0) && (
-
-
-
- No providers have been configured!
-
-
-
- )) ||
- config.external_auth?.map((git: ExternalAuthConfig) => {
- const name = git.id || git.type;
- return (
-
- {name}
- {git.client_id}
- {git.regex || "Not Set"}
-
- );
- })}
-
-
-
+ )) ||
+ config.external_auth?.map((git: ExternalAuthConfig) => {
+ const name = git.id || git.type;
+ return (
+
+ {name}
+ {git.client_id}
+ {git.regex || "Not Set"}
+
+ );
+ })}
+
+
>
);
};
diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx
index 8b18d462e7..73149d2a30 100644
--- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx
@@ -1,11 +1,5 @@
import { type Interpolation, type Theme, useTheme } from "@emotion/react";
import Divider from "@mui/material/Divider";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type * as TypesGen from "api/typesGenerated";
import { Alert } from "components/Alert/Alert";
import { ErrorAlert } from "components/Alert/ErrorAlert";
@@ -22,6 +16,14 @@ import {
} from "components/SettingsHeader/SettingsHeader";
import { Spinner } from "components/Spinner/Spinner";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableLoader } from "components/TableLoader/TableLoader";
import { ChevronLeftIcon, CopyIcon } from "lucide-react";
import { type FC, useState } from "react";
@@ -233,38 +235,36 @@ const OAuth2AppSecretsTable: FC
= ({
-
-
-
+
+
+
+ Secret
+ Last Used
+
+
+
+
+ {isLoadingSecrets && }
+ {!isLoadingSecrets && (!secrets || secrets.length === 0) && (
- Secret
- Last Used
-
+
+
+ No client secrets have been generated.
+
+
-
-
- {isLoadingSecrets && }
- {!isLoadingSecrets && (!secrets || secrets.length === 0) && (
-
-
-
- No client secrets have been generated.
-
-
-
- )}
- {!isLoadingSecrets &&
- secrets?.map((secret) => (
-
- ))}
-
-
-
+ )}
+ {!isLoadingSecrets &&
+ secrets?.map((secret) => (
+
+ ))}
+
+
>
);
};
diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx
index 4b42f94675..da72549e42 100644
--- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx
@@ -1,10 +1,4 @@
import { useTheme } from "@emotion/react";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type * as TypesGen from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Avatar } from "components/Avatar/Avatar";
@@ -15,6 +9,14 @@ import {
SettingsHeaderTitle,
} from "components/SettingsHeader/SettingsHeader";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableLoader } from "components/TableLoader/TableLoader";
import { useClickableTableRow } from "hooks/useClickableTableRow";
import { ChevronRightIcon, PlusIcon } from "lucide-react";
@@ -58,31 +60,29 @@ const OAuth2AppsSettingsPageView: FC = ({
{error && }
-
-
-
+
+
+
+ Name
+
+
+
+
+ {isLoading && }
+ {apps?.map((app) => (
+
+ ))}
+ {apps?.length === 0 && (
- Name
-
+
+
+ No OAuth2 applications have been configured.
+
+
-
-
- {isLoading && }
- {apps?.map((app) => (
-
- ))}
- {apps?.length === 0 && (
-
-
-
- No OAuth2 applications have been configured.
-
-
-
- )}
-
-
-
+ )}
+
+
>
);
};
diff --git a/site/src/pages/DeploymentSettingsPage/OptionsTable.tsx b/site/src/pages/DeploymentSettingsPage/OptionsTable.tsx
index ea9fadb4b0..11b5182e56 100644
--- a/site/src/pages/DeploymentSettingsPage/OptionsTable.tsx
+++ b/site/src/pages/DeploymentSettingsPage/OptionsTable.tsx
@@ -1,11 +1,13 @@
import { css } from "@emotion/react";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type { SerpentOption } from "api/typesGenerated";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import type { FC } from "react";
import {
OptionConfig,
@@ -27,9 +29,9 @@ const OptionsTable: FC = ({ options, additionalValues }) => {
}
return (
-
- = ({ options, additionalValues }) => {
padding-left: 32px;
}
`}
- >
-
-
- Option
- Value
-
-
-
- {Object.values(options).map((option) => {
- return (
-
-
- {option.name}
- {option.description}
-
- {option.flag && (
-
- CLI
- --{option.flag}
-
- )}
- {option.flag_shorthand && (
-
- CLI-
- {option.flag_shorthand}
-
- )}
- {option.env && (
-
- ENV
- {option.env}
-
- )}
- {option.yaml && (
-
- YAML
- {option.yaml}
-
- )}
-
-
+ >
+
+
+ Option
+ Value
+
+
+
+ {Object.values(options).map((option) => {
+ return (
+
+
+ {option.name}
+ {option.description}
+
+ {option.flag && (
+
+ CLI
+ --{option.flag}
+
+ )}
+ {option.flag_shorthand && (
+
+ CLI-
+ {option.flag_shorthand}
+
+ )}
+ {option.env && (
+
+ ENV
+ {option.env}
+
+ )}
+ {option.yaml && (
+
+ YAML
+ {option.yaml}
+
+ )}
+
+
-
-
- {optionValue(option, additionalValues)}
-
-
-
- );
- })}
-
-
-
+
+
+ {optionValue(option, additionalValues)}
+
+
+
+ );
+ })}
+
+
);
};
diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.tsx
index 93ebabdae4..97a2030071 100644
--- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.tsx
+++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.tsx
@@ -1,13 +1,6 @@
import type { Interpolation, Theme } from "@emotion/react";
import Checkbox from "@mui/material/Checkbox";
import FormControlLabel from "@mui/material/FormControlLabel";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableFooter from "@mui/material/TableFooter";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import TextField from "@mui/material/TextField";
import { isApiValidationError } from "api/errors";
import { RBACResourceActions } from "api/rbacresourcesGenerated";
@@ -29,6 +22,15 @@ import {
} from "components/SettingsHeader/SettingsHeader";
import { Spinner } from "components/Spinner/Spinner";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableFooter,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { useFormik } from "formik";
import { EyeIcon, EyeOffIcon } from "lucide-react";
import { type ChangeEvent, type FC, useState } from "react";
@@ -255,55 +257,46 @@ const ActionCheckboxes: FC = ({
};
return (
-
-
-
-
- Permission
-
-
-
-
-
-
- {Object.entries(resourceActions).map(([resourceKey, value]) => {
- return (
- a.resource_type === resourceKey,
- )}
- resourceKey={resourceKey}
- value={value}
- form={form}
- handleActionCheckChange={handleActionCheckChange}
- handleResourceCheckChange={handleResourceCheckChange}
- />
- );
- })}
-
-
-
-
-
-
-
-
-
-
+
+
+
+ Permission
+
+
+
+
+
+
+ {Object.entries(resourceActions).map(([resourceKey, value]) => {
+ return (
+ a.resource_type === resourceKey,
+ )}
+ resourceKey={resourceKey}
+ value={value}
+ form={form}
+ handleActionCheckChange={handleActionCheckChange}
+ handleResourceCheckChange={handleResourceCheckChange}
+ />
+ );
+ })}
+
+
+
+
+
+
+
+
+
);
};
@@ -333,7 +326,7 @@ const PermissionCheckboxGroup: FC = ({
}) => {
return (
-
+
= ({
)?.id;
return (
-
-
-
- {versions ? (
- new Date(version.created_at)}
- row={(version) => (
-
- )}
- />
- ) : (
-
- )}
+
+
+ {versions ? (
+ new Date(version.created_at)}
+ row={(version) => (
+
+ )}
+ />
+ ) : (
+
+ )}
- {versions && versions.length === 0 && (
-
-
-
-
-
-
-
- )}
-
-
-
+ {versions && versions.length === 0 && (
+
+
+
+
+
+
+
+ )}
+
+
);
};
diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
index f9460f88af..07047bbc3d 100644
--- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
+++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
@@ -1,12 +1,6 @@
import type { Interpolation, Theme } from "@emotion/react";
import MenuItem from "@mui/material/MenuItem";
import Select, { type SelectProps } from "@mui/material/Select";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type {
Group,
ReducedUser,
@@ -29,6 +23,14 @@ import { EmptyState } from "components/EmptyState/EmptyState";
import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader";
import { Spinner } from "components/Spinner/Spinner";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableLoader } from "components/TableLoader/TableLoader";
import { EllipsisVertical, UserPlusIcon } from "lucide-react";
import { type FC, useState } from "react";
@@ -227,153 +229,151 @@ export const TemplatePermissionsPageView: FC<
}
/>
)}
-
-
-
-
- Member
- Role
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Member
+ Role
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {templateACL?.group.map((group) => (
+
+
+
+ }
+ title={group.display_name || group.name}
+ subtitle={getGroupSubtitle(group)}
/>
+
+
+
+ {
+ onUpdateGroup(
+ group,
+ event.target.value as TemplateRole,
+ );
+ }}
+ />
+
+
+ {group.role}
+
+
+
+
+
+ {canUpdatePermissions && (
+
+
+
+
+
+ onRemoveGroup(group)}
+ >
+ Remove
+
+
+
+ )}
+
-
-
- {templateACL?.group.map((group) => (
-
-
-
- }
- title={group.display_name || group.name}
- subtitle={getGroupSubtitle(group)}
- />
-
-
-
-
- {
- onUpdateGroup(
- group,
- event.target.value as TemplateRole,
- );
- }}
- />
-
-
- {group.role}
-
-
-
+ ))}
-
- {canUpdatePermissions && (
-
-
-
-
-
- onRemoveGroup(group)}
- >
- Remove
-
-
-
- )}
-
-
- ))}
+ {templateACL?.users.map((user) => (
+
+
+
+
+
+
+
+ {
+ onUpdateUser(
+ user,
+ event.target.value as TemplateRole,
+ );
+ }}
+ />
+
+
+ {user.role}
+
+
+
- {templateACL?.users.map((user) => (
-
-
-
-
-
-
-
- {
- onUpdateUser(
- user,
- event.target.value as TemplateRole,
- );
- }}
- />
-
-
- {user.role}
-
-
-
-
-
- {canUpdatePermissions && (
-
-
-
-
-
- onRemoveUser(user)}
- >
- Remove
-
-
-
- )}
-
-
- ))}
-
-
-
-
-
+
+ {canUpdatePermissions && (
+
+
+
+
+
+ onRemoveUser(user)}
+ >
+ Remove
+
+
+
+ )}
+
+
+ ))}
+
+
+
+
>
);
diff --git a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx
index 01f468a232..14252c625d 100644
--- a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx
+++ b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx
@@ -1,12 +1,5 @@
import { useTheme } from "@emotion/react";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import Tooltip from "@mui/material/Tooltip";
-import visuallyHidden from "@mui/utils/visuallyHidden";
import { externalAuthProvider } from "api/queries/externalAuth";
import type {
ExternalAuthLink,
@@ -25,6 +18,14 @@ import {
import { Loader } from "components/Loader/Loader";
import { Spinner } from "components/Spinner/Spinner";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableEmpty } from "components/TableEmpty/TableEmpty";
import type { ExternalAuthPollingState } from "hooks/useExternalAuth";
import { EllipsisVertical, RefreshCcwIcon } from "lucide-react";
@@ -58,41 +59,39 @@ export const ExternalAuthPageView: FC = ({
}
return (
-
-
-
-
- Application
-
-
- Link to connect
-
-
-
-
-
-
- {auths.providers === null || auths.providers?.length === 0 ? (
-
- ) : (
- auths.providers?.map((app) => (
- l.provider_id === app.id)}
- onUnlinkExternalAuth={() => {
- onUnlinkExternalAuth(app);
- }}
- onValidateExternalAuth={() => {
- onValidateExternalAuth(app.id);
- }}
- />
- ))
- )}
-
-
-
+
+
+
+ Application
+
+
+ Link to connect
+
+
+
+
+
+
+ {auths.providers === null || auths.providers?.length === 0 ? (
+
+ ) : (
+ auths.providers?.map((app) => (
+ l.provider_id === app.id)}
+ onUnlinkExternalAuth={() => {
+ onUnlinkExternalAuth(app);
+ }}
+ onValidateExternalAuth={() => {
+ onValidateExternalAuth(app.id);
+ }}
+ />
+ ))
+ )}
+
+
);
};
diff --git a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx
index beb1ca09b8..7d2ee3a884 100644
--- a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx
+++ b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.tsx
@@ -1,14 +1,16 @@
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type * as TypesGen from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Avatar } from "components/Avatar/Avatar";
import { Button } from "components/Button/Button";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableLoader } from "components/TableLoader/TableLoader";
import type { FC } from "react";
@@ -29,31 +31,29 @@ const OAuth2ProviderPageView: FC = ({
<>
{error && }
-
-
-
+
+
+
+ Name
+
+
+
+
+ {isLoading && }
+ {apps?.map((app) => (
+
+ ))}
+ {apps?.length === 0 && (
- Name
-
+
+
+ No OAuth2 applications have been authorized.
+
+
-
-
- {isLoading && }
- {apps?.map((app) => (
-
- ))}
- {apps?.length === 0 && (
-
-
-
- No OAuth2 applications have been authorized.
-
-
-
- )}
-
-
-
+ )}
+
+
>
);
};
diff --git a/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.tsx b/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.tsx
index 786a96712e..5174d95886 100644
--- a/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.tsx
+++ b/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.tsx
@@ -1,15 +1,17 @@
import { useTheme } from "@emotion/react";
import IconButton from "@mui/material/IconButton";
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type { APIKeyWithOwner } from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { ChooseOne, Cond } from "components/Conditionals/ChooseOne";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableEmpty } from "components/TableEmpty/TableEmpty";
import { TableLoader } from "components/TableLoader/TableLoader";
import dayjs from "dayjs";
@@ -49,84 +51,83 @@ export const TokensPageView: FC = ({
{Boolean(getTokensError) && }
{Boolean(deleteTokenError) && }
-
-
-
-
- ID
- Name
- Last Used
- Expires At
- Created At
-
-
-
-
-
-
-
-
-
-
-
-
- {tokens?.map((token) => {
- return (
-
-
-
- {token.id}
-
-
-
-
- {token.token_name}
-
-
+
+
+
+ ID
+ Name
+ Last Used
+ Expires At
+ Created At
+
+
+
+
+
+
+
+
+
+
+
+
+ {tokens?.map((token) => {
+ return (
+
+
+
+ {token.id}
+
+
- {lastUsedOrNever(token.last_used)}
+
+
+ {token.token_name}
+
+
-
- {lastUsedOrNever(token.last_used)}
+
+
+
+ {dayjs(token.expires_at).fromNow()}
+
+
+
+
+
+ {dayjs(token.created_at).fromNow()}
+
+
+
+
+
+ {
+ onDelete(token);
+ }}
+ size="medium"
+ aria-label="Delete token"
>
- {dayjs(token.expires_at).fromNow()}
-
-
-
-
-
- {dayjs(token.created_at).fromNow()}
-
-
-
-
-
- {
- onDelete(token);
- }}
- size="medium"
- aria-label="Delete token"
- >
-
-
-
-
-
- );
- })}
-
-
-
-
-
+
+
+
+
+
+ );
+ })}
+
+
+
+
);
};
diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx
index 417a5d731e..17fa32fc84 100644
--- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx
+++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx
@@ -1,6 +1,4 @@
import { useTheme } from "@emotion/react";
-import TableCell from "@mui/material/TableCell";
-import TableRow from "@mui/material/TableRow";
import type { Region, WorkspaceProxy } from "api/typesGenerated";
import { Avatar } from "components/Avatar/Avatar";
import { AvatarData } from "components/Avatar/AvatarData";
@@ -10,6 +8,7 @@ import {
NotReachableBadge,
NotRegisteredBadge,
} from "components/Badges/Badges";
+import { TableCell, TableRow } from "components/Table/Table";
import type { ProxyLatencyReport } from "contexts/useProxyLatency";
import type { FC, ReactNode } from "react";
import { getLatencyColor } from "utils/latency";
diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx
index d066d15428..ea903b0444 100644
--- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx
+++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.tsx
@@ -1,9 +1,3 @@
-import Table from "@mui/material/Table";
-import TableBody from "@mui/material/TableBody";
-import TableCell from "@mui/material/TableCell";
-import TableContainer from "@mui/material/TableContainer";
-import TableHead from "@mui/material/TableHead";
-import TableRow from "@mui/material/TableRow";
import type { Region } from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { ChooseOne, Cond } from "components/Conditionals/ChooseOne";
@@ -13,6 +7,13 @@ import {
SettingsHeaderTitle,
} from "components/SettingsHeader/SettingsHeader";
import { Stack } from "components/Stack/Stack";
+import {
+ Table,
+ TableBody,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "components/Table/Table";
import { TableEmpty } from "components/TableEmpty/TableEmpty";
import { TableLoader } from "components/TableLoader/TableLoader";
import type { ProxyLatencyReport } from "contexts/useProxyLatency";
@@ -51,40 +52,35 @@ export const WorkspaceProxyView: FC = ({
)}
{Boolean(selectProxyError) && }
-
-
-
-
- Proxy
-
- Status
-
-
- Latency
-
-
-
-
-
-
-
-
-
-
-
-
- {proxies?.map((proxy) => (
-
- ))}
-
-
-
-
-
+
+
+
+
+ Proxy
+ Status
+ Latency
+
+
+
+
+
+
+
+
+
+
+
+ {proxies?.map((proxy) => (
+
+ ))}
+
+
+
+
);
};
diff --git a/site/src/theme/mui.ts b/site/src/theme/mui.ts
index 4435579a33..f7b5ab1bc5 100644
--- a/site/src/theme/mui.ts
+++ b/site/src/theme/mui.ts
@@ -6,7 +6,6 @@ import {
BODY_FONT_FAMILY,
BUTTON_LG_HEIGHT,
BUTTON_MD_HEIGHT,
- borderRadius,
} from "./constants";
import tw from "./tailwindColors";
@@ -59,73 +58,6 @@ export const components = {
}),
},
},
- MuiTableContainer: {
- styleOverrides: {
- root: ({ theme }) => ({
- borderRadius,
- border: `1px solid ${theme.palette.divider}`,
- }),
- },
- },
- MuiTable: {
- styleOverrides: {
- root: ({ theme }) => ({
- borderCollapse: "unset",
- border: "none",
- boxShadow: `0 0 0 1px ${theme.palette.background.default} inset`,
- overflow: "hidden",
-
- "& td": {
- paddingTop: 16,
- paddingBottom: 16,
- background: "transparent",
- },
-
- [theme.breakpoints.down("md")]: {
- minWidth: 1000,
- },
- }),
- },
- },
- MuiTableCell: {
- styleOverrides: {
- head: ({ theme }) => ({
- fontSize: 14,
- color: theme.palette.text.secondary,
- fontWeight: 500,
- background: theme.palette.background.paper,
- borderWidth: 2,
- }),
- root: ({ theme }) => ({
- fontSize: 14,
- background: theme.palette.background.paper,
- borderBottom: `1px solid ${theme.palette.divider}`,
- padding: "12px 8px",
- // This targets the first+last td elements, and also the first+last elements
- // of a TableCellLink.
- "&:not(:only-child):first-of-type, &:not(:only-child):first-of-type > a":
- {
- paddingLeft: 32,
- },
- "&:not(:only-child):last-child, &:not(:only-child):last-child > a": {
- paddingRight: 32,
- },
- }),
- },
- },
- MuiTableRow: {
- styleOverrides: {
- root: ({ theme }) => ({
- "&:last-child .MuiTableCell-body": {
- borderBottom: 0,
- },
-
- "&.MuiTableRow-hover:hover": {
- backgroundColor: theme.palette.background.paper,
- },
- }),
- },
- },
MuiLink: {
defaultProps: {
underline: "hover",