+
({
+ position: "absolute",
+ top: "0",
+ left: "0",
+ right: "0",
+ bottom: "0",
+ display: "flex",
+ justifyContent: "center",
+ alignItems: "center",
+ background: theme.palette.background.default,
+ })}
+ data-testid="loader"
+ >
);
diff --git a/site/src/components/Margins/Margins.tsx b/site/src/components/Margins/Margins.tsx
index c93531dbda5ea..04304197a1bbe 100644
--- a/site/src/components/Margins/Margins.tsx
+++ b/site/src/components/Margins/Margins.tsx
@@ -1,6 +1,4 @@
-import { makeStyles } from "@mui/styles";
-import { FC } from "react";
-import { combineClasses } from "utils/combineClasses";
+import { type FC } from "react";
import {
containerWidth,
containerWidthMedium,
@@ -15,24 +13,20 @@ const widthBySize: Record
= {
small: containerWidth / 3,
};
-const useStyles = makeStyles(() => ({
- margins: {
- margin: "0 auto",
- maxWidth: ({ maxWidth }: { maxWidth: number }) => maxWidth,
- padding: `0 ${sidePadding}px`,
- width: "100%",
- },
-}));
-
export const Margins: FC = ({
size = "regular",
...divProps
}) => {
- const styles = useStyles({ maxWidth: widthBySize[size] });
+ const maxWidth = widthBySize[size];
return (
);
};
diff --git a/site/src/components/Resources/AgentVersion.tsx b/site/src/components/Resources/AgentVersion.tsx
index 64d5f3473018e..98b358a92a4e1 100644
--- a/site/src/components/Resources/AgentVersion.tsx
+++ b/site/src/components/Resources/AgentVersion.tsx
@@ -1,6 +1,5 @@
-import { useRef, useState, FC } from "react";
-import { makeStyles } from "@mui/styles";
-import { WorkspaceAgent } from "api/typesGenerated";
+import { type FC, useRef, useState } from "react";
+import type { WorkspaceAgent } from "api/typesGenerated";
import { getDisplayVersionStatus } from "utils/workspace";
import { AgentOutdatedTooltip } from "./AgentOutdatedTooltip";
@@ -9,7 +8,6 @@ export const AgentVersion: FC<{
serverVersion: string;
onUpdate: () => void;
}> = ({ agent, serverVersion, onUpdate }) => {
- const styles = useStyles();
const anchorRef = useRef(null);
const [isOpen, setIsOpen] = useState(false);
const id = isOpen ? "version-outdated-popover" : undefined;
@@ -27,7 +25,7 @@ export const AgentVersion: FC<{
ref={anchorRef}
onMouseEnter={() => setIsOpen(true)}
onMouseLeave={() => setIsOpen(false)}
- className={styles.trigger}
+ css={{ cursor: "pointer" }}
>
Outdated
@@ -44,9 +42,3 @@ export const AgentVersion: FC<{
>
);
};
-
-const useStyles = makeStyles(() => ({
- trigger: {
- cursor: "pointer",
- },
-}));
diff --git a/site/src/components/Typography/Typography.tsx b/site/src/components/Typography/Typography.tsx
index 7dd248df9a042..ce210a067eebf 100644
--- a/site/src/components/Typography/Typography.tsx
+++ b/site/src/components/Typography/Typography.tsx
@@ -3,12 +3,10 @@
* verbatim port from `@coder/ui`.
*/
-import { makeStyles } from "@mui/styles";
import MuiTypography, {
TypographyProps as MuiTypographyProps,
} from "@mui/material/Typography";
import * as React from "react";
-import { appendCSSString, combineClasses } from "utils/combineClasses";
export interface TypographyProps extends MuiTypographyProps {
short?: boolean;
@@ -20,29 +18,21 @@ export interface TypographyProps extends MuiTypographyProps {
*
* See original component's Material UI documentation here: https://material-ui.com/components/typography/
*/
-export const Typography: React.FC = ({
- className,
- short,
- ...rest
-}) => {
- const styles = useStyles();
-
- let classes = combineClasses({ [styles.short]: short });
- if (className) {
- classes = appendCSSString(classes ?? "", className);
- }
-
- return ;
+export const Typography: React.FC = ({ short, ...attrs }) => {
+ return (
+
+ );
};
-
-const useStyles = makeStyles({
- short: {
- "&.MuiTypography-body1": {
- lineHeight: "21px",
- },
- "&.MuiTypography-body2": {
- lineHeight: "18px",
- letterSpacing: 0.2,
- },
- },
-});
diff --git a/site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx b/site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx
index 51c31a8320c5d..207a3366f7ea5 100644
--- a/site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx
+++ b/site/src/components/UserOrGroupAutocomplete/UserOrGroupAutocomplete.tsx
@@ -1,14 +1,14 @@
import CircularProgress from "@mui/material/CircularProgress";
-import { makeStyles } from "@mui/styles";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
import { useMachine } from "@xstate/react";
-import { Group, User } from "api/typesGenerated";
+import Box from "@mui/material/Box";
+import { type ChangeEvent, useState } from "react";
+import { css } from "@emotion/react";
+import type { Group, User } from "api/typesGenerated";
import { AvatarData } from "components/AvatarData/AvatarData";
-import { ChangeEvent, useState } from "react";
import { getGroupSubtitle } from "utils/groups";
import { searchUsersAndGroupsMachine } from "xServices/template/searchUsersAndGroupsXService";
-import Box from "@mui/material/Box";
import { useDebouncedFunction } from "hooks/debounce";
export type UserOrGroupAutocompleteValue = User | Group | null;
@@ -25,10 +25,21 @@ export type UserOrGroupAutocompleteProps = {
exclude: UserOrGroupAutocompleteValue[];
};
+const autoCompleteStyles = css`
+ width: 300px;
+
+ & .MuiFormControl-root {
+ width: 100%;
+ }
+
+ & .MuiInputBase-root {
+ width: 100%;
+ }
+`;
+
export const UserOrGroupAutocomplete: React.FC<
UserOrGroupAutocompleteProps
> = ({ value, onChange, organizationId, templateID, exclude }) => {
- const styles = useStyles();
const [isAutocompleteOpen, setIsAutocompleteOpen] = useState(false);
const [searchState, sendSearch] = useMachine(searchUsersAndGroupsMachine, {
context: {
@@ -92,7 +103,7 @@ export const UserOrGroupAutocomplete: React.FC<
}}
options={options}
loading={searchState.matches("searching")}
- className={styles.autocomplete}
+ css={autoCompleteStyles}
renderInput={(params) => (
<>
);
};
-
-export const useStyles = makeStyles(() => {
- return {
- autocomplete: {
- width: "300px",
-
- "& .MuiFormControl-root": {
- width: "100%",
- },
-
- "& .MuiInputBase-root": {
- width: "100%",
- },
- },
- };
-});
diff --git a/site/src/components/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx b/site/src/components/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx
index 3fb493ea5d518..080357f3c9c7b 100644
--- a/site/src/components/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx
+++ b/site/src/components/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx
@@ -1,5 +1,12 @@
import RefreshIcon from "@mui/icons-material/Refresh";
-import { FC } from "react";
+import { type FC } from "react";
+import InfoIcon from "@mui/icons-material/InfoOutlined";
+import { useQuery } from "react-query";
+import Box from "@mui/material/Box";
+import Skeleton from "@mui/material/Skeleton";
+import Link from "@mui/material/Link";
+import { css } from "@emotion/css";
+import { templateVersion } from "api/queries/templates";
import {
HelpTooltip,
HelpTooltipAction,
@@ -7,14 +14,7 @@ import {
HelpTooltipText,
HelpTooltipTitle,
} from "components/HelpTooltip/HelpTooltip";
-import InfoIcon from "@mui/icons-material/InfoOutlined";
-import { makeStyles } from "@mui/styles";
import { colors } from "theme/colors";
-import { useQuery } from "react-query";
-import { templateVersion } from "api/queries/templates";
-import Box from "@mui/material/Box";
-import Skeleton from "@mui/material/Skeleton";
-import Link from "@mui/material/Link";
export const Language = {
outdatedLabel: "Outdated",
@@ -36,15 +36,22 @@ export const WorkspaceOutdatedTooltip: FC = ({
latestVersionId,
templateName,
}) => {
- const styles = useStyles();
const { data: activeVersion } = useQuery(templateVersion(latestVersionId));
return (
{Language.outdatedLabel}
{Language.versionTooltipText}
@@ -117,17 +124,3 @@ export const WorkspaceOutdatedTooltip: FC = ({
);
};
-
-const useStyles = makeStyles(() => ({
- icon: {
- color: colors.yellow[5],
- },
-
- button: {
- opacity: 1,
-
- "&:hover": {
- opacity: 1,
- },
- },
-}));
diff --git a/site/src/pages/CreateTokenPage/CreateTokenForm.tsx b/site/src/pages/CreateTokenPage/CreateTokenForm.tsx
index a31d527d55ea6..318fbdab89a3c 100644
--- a/site/src/pages/CreateTokenPage/CreateTokenForm.tsx
+++ b/site/src/pages/CreateTokenPage/CreateTokenForm.tsx
@@ -1,25 +1,25 @@
-import { FC, useState, useEffect } from "react";
+import { type FC, useState, useEffect } from "react";
+import TextField from "@mui/material/TextField";
+import MenuItem from "@mui/material/MenuItem";
+import type { FormikContextType } from "formik";
+import dayjs from "dayjs";
+import { useNavigate } from "react-router-dom";
import {
FormFields,
FormSection,
FormFooter,
HorizontalForm,
} from "components/Form/Form";
-import makeStyles from "@mui/styles/makeStyles";
+import { Stack } from "components/Stack/Stack";
import { onChangeTrimmed, getFormHelpers } from "utils/formUtils";
-import TextField from "@mui/material/TextField";
-import MenuItem from "@mui/material/MenuItem";
import {
NANO_HOUR,
- CreateTokenData,
+ type CreateTokenData,
determineDefaultLtValue,
filterByMaxTokenLifetime,
customLifetimeDay,
} from "./utils";
-import { FormikContextType } from "formik";
-import dayjs from "dayjs";
-import { useNavigate } from "react-router-dom";
-import { Stack } from "components/Stack/Stack";
+import { css } from "@emotion/css";
interface CreateTokenFormProps {
form: FormikContextType;
@@ -30,6 +30,10 @@ interface CreateTokenFormProps {
creationFailed: boolean;
}
+const sectionInfoStyles = css`
+ min-width: 300px;
+`;
+
export const CreateTokenForm: FC = ({
form,
maxTokenLifetime,
@@ -38,7 +42,6 @@ export const CreateTokenForm: FC = ({
isCreating,
creationFailed,
}) => {
- const styles = useStyles();
const navigate = useNavigate();
const [expDays, setExpDays] = useState(1);
@@ -62,7 +65,7 @@ export const CreateTokenForm: FC = ({
= ({
.format("MMMM DD, YYYY")}`
: "Please set a token expiration."
}
- classes={{ sectionInfo: styles.formSectionInfo }}
+ classes={{ sectionInfo: sectionInfoStyles }}
>
@@ -149,9 +152,3 @@ export const CreateTokenForm: FC = ({
);
};
-
-const useStyles = makeStyles(() => ({
- formSectionInfo: {
- minWidth: "300px",
- },
-}));
diff --git a/site/src/pages/CreateWorkspacePage/ExternalAuth.tsx b/site/src/pages/CreateWorkspacePage/ExternalAuth.tsx
index f84a835c9f0f0..41dde1b8420ab 100644
--- a/site/src/pages/CreateWorkspacePage/ExternalAuth.tsx
+++ b/site/src/pages/CreateWorkspacePage/ExternalAuth.tsx
@@ -2,10 +2,9 @@ import ReplayIcon from "@mui/icons-material/Replay";
import Button from "@mui/material/Button";
import FormHelperText from "@mui/material/FormHelperText";
import Tooltip from "@mui/material/Tooltip";
-import { makeStyles } from "@mui/styles";
+import { type FC } from "react";
import { LoadingButton } from "components/LoadingButton/LoadingButton";
import { Stack } from "components/Stack/Stack";
-import { FC } from "react";
import { type ExternalAuthPollingState } from "./CreateWorkspacePage";
export interface ExternalAuthProps {
@@ -29,10 +28,6 @@ export const ExternalAuth: FC = (props) => {
error,
} = props;
- const styles = useStyles({
- error: typeof error !== "undefined",
- });
-
return (
= (props) => {
/>
}
disabled={authenticated}
- className={styles.button}
+ css={{ height: 52 }}
color={error ? "error" : undefined}
fullWidth
onClick={(event) => {
@@ -80,9 +75,3 @@ export const ExternalAuth: FC = (props) => {
);
};
-
-const useStyles = makeStyles(() => ({
- button: {
- height: 52,
- },
-}));
diff --git a/site/src/pages/SetupPage/SetupPageView.tsx b/site/src/pages/SetupPage/SetupPageView.tsx
index 4d956fa6812f2..e07a0185dbe2f 100644
--- a/site/src/pages/SetupPage/SetupPageView.tsx
+++ b/site/src/pages/SetupPage/SetupPageView.tsx
@@ -1,20 +1,19 @@
import Box from "@mui/material/Box";
import Checkbox from "@mui/material/Checkbox";
-import { makeStyles } from "@mui/styles";
import TextField from "@mui/material/TextField";
import Typography from "@mui/material/Typography";
import { LoadingButton } from "components/LoadingButton/LoadingButton";
import { SignInLayout } from "components/SignInLayout/SignInLayout";
import { Stack } from "components/Stack/Stack";
import { Welcome } from "components/Welcome/Welcome";
-import { FormikContextType, useFormik } from "formik";
+import { type FormikContextType, useFormik } from "formik";
import {
getFormHelpers,
nameValidator,
onChangeTrimmed,
} from "utils/formUtils";
import * as Yup from "yup";
-import * as TypesGen from "api/typesGenerated";
+import type * as TypesGen from "api/typesGenerated";
export const Language = {
emailLabel: "Email",
@@ -62,7 +61,6 @@ export const SetupPageView: React.FC = ({
form,
error,
);
- const styles = useStyles();
return (
@@ -91,7 +89,7 @@ export const SetupPageView: React.FC = ({
label={Language.passwordLabel}
type="password"
/>
-
+
= ({
);
};
-
-const useStyles = makeStyles(() => ({
- callout: {
- borderRadius: 16,
- },
-}));
diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.tsx
index d597ac6c7e7b3..2112b25fb979e 100644
--- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.tsx
+++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.tsx
@@ -1,8 +1,7 @@
-import { Template, UpdateTemplateMeta } from "api/typesGenerated";
-import { ComponentProps, FC } from "react";
-import { TemplateSettingsForm } from "./TemplateSettingsForm";
+import { type ComponentProps, type FC } from "react";
+import type { Template, UpdateTemplateMeta } from "api/typesGenerated";
import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader";
-import { makeStyles } from "@mui/styles";
+import { TemplateSettingsForm } from "./TemplateSettingsForm";
export interface TemplateSettingsPageViewProps {
template: Template;
@@ -23,11 +22,9 @@ export const TemplateSettingsPageView: FC = ({
submitError,
initialTouched,
}) => {
- const styles = useStyles();
-
return (
<>
-
+
General Settings
@@ -42,9 +39,3 @@ export const TemplateSettingsPageView: FC = ({
>
);
};
-
-const useStyles = makeStyles(() => ({
- pageHeader: {
- paddingTop: 0,
- },
-}));
diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
index 192a4eea8aa33..e106242ccc443 100644
--- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
+++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx
@@ -1,6 +1,5 @@
import MenuItem from "@mui/material/MenuItem";
-import Select, { SelectProps } from "@mui/material/Select";
-import { makeStyles } from "@mui/styles";
+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";
@@ -8,7 +7,8 @@ import TableContainer from "@mui/material/TableContainer";
import TableHead from "@mui/material/TableHead";
import TableRow from "@mui/material/TableRow";
import PersonAdd from "@mui/icons-material/PersonAdd";
-import {
+import { type Interpolation, type Theme } from "@emotion/react";
+import type {
Group,
TemplateACL,
TemplateGroup,
@@ -26,7 +26,7 @@ import {
UserOrGroupAutocomplete,
UserOrGroupAutocompleteValue,
} from "components/UserOrGroupAutocomplete/UserOrGroupAutocomplete";
-import { FC, useState } from "react";
+import { type FC, useState } from "react";
import { GroupAvatar } from "components/GroupAvatar/GroupAvatar";
import { getGroupSubtitle } from "utils/groups";
import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader";
@@ -50,7 +50,6 @@ const AddTemplateUserOrGroup: React.FC = ({
templateID,
templateACL,
}) => {
- const styles = useStyles();
const [selectedOption, setSelectedOption] =
useState(null);
const [selectedRole, setSelectedRole] = useState("use");
@@ -94,7 +93,7 @@ const AddTemplateUserOrGroup: React.FC = ({