diff --git a/site/package.json b/site/package.json index 06e1bc04f6d..1573aad5b70 100644 --- a/site/package.json +++ b/site/package.json @@ -56,7 +56,6 @@ "@lexical/utils": "0.48.0", "@monaco-editor/react": "4.7.0", "@mui/material": "5.18.0", - "@mui/system": "5.18.0", "@novnc/novnc": "^1.5.0", "@pierre/diffs": "1.2.7", "@pierre/trees": "1.0.0-beta.4", diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index 05e9d781263..adaad85617e 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -89,9 +89,6 @@ importers: '@mui/material': specifier: 5.18.0 version: 5.18.0(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.8))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.8))(@types/react@19.2.17)(react@19.2.8))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) - '@mui/system': - specifier: 5.18.0 - version: 5.18.0(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.8))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.17)(react@19.2.8))(@types/react@19.2.17)(react@19.2.8))(@types/react@19.2.17)(react@19.2.8) '@novnc/novnc': specifier: ^1.5.0 version: 1.5.0 diff --git a/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.tsx b/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.tsx index b401f71ff95..2c7ede309f9 100644 --- a/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.tsx +++ b/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.tsx @@ -1,9 +1,9 @@ -import Link from "@mui/material/Link"; import type { FC, HTMLAttributes } from "react"; import { Link as RouterLink } from "react-router"; import type { TemplateExample } from "#/api/typesGenerated"; import { Button } from "#/components/Button/Button"; import { ExternalImage } from "#/components/ExternalImage/ExternalImage"; +import { Link } from "#/components/Link/Link"; import { Pill } from "#/components/Pill/Pill"; import { cn } from "#/utils/cn"; @@ -53,11 +53,13 @@ export const TemplateExampleCard: FC = ({ {example.description}{" "} - Read more + + Read more + diff --git a/site/src/pages/CreateTemplatePage/TemplateUpload.tsx b/site/src/pages/CreateTemplatePage/TemplateUpload.tsx index e5a9e67f2df..1a0882c4c40 100644 --- a/site/src/pages/CreateTemplatePage/TemplateUpload.tsx +++ b/site/src/pages/CreateTemplatePage/TemplateUpload.tsx @@ -1,7 +1,7 @@ -import Link from "@mui/material/Link"; import type { FC } from "react"; import { Link as RouterLink } from "react-router"; import { FileUpload } from "#/components/FileUpload/FileUpload"; +import { Link } from "#/components/Link/Link"; export interface TemplateUploadProps { isUploading: boolean; @@ -20,14 +20,15 @@ export const TemplateUpload: FC = ({ <> The template has to be a .tar or .zip file. You can also use our{" "} { e.stopPropagation(); }} + asChild + showExternalIcon={false} + className="p-0" > - starter templates + starter templates {" "} to get started with Coder. diff --git a/site/src/pages/CreateTemplatePage/VariableInput.tsx b/site/src/pages/CreateTemplatePage/VariableInput.tsx index 3d2e4c1070c..b5ed2ae05ca 100644 --- a/site/src/pages/CreateTemplatePage/VariableInput.tsx +++ b/site/src/pages/CreateTemplatePage/VariableInput.tsx @@ -1,9 +1,8 @@ -import FormControlLabel from "@mui/material/FormControlLabel"; -import Radio from "@mui/material/Radio"; -import RadioGroup from "@mui/material/RadioGroup"; -import TextField from "@mui/material/TextField"; import type { FC } from "react"; import type { TemplateVersionVariable } from "#/api/typesGenerated"; +import { Input } from "#/components/Input/Input"; +import { Label } from "#/components/Label/Label"; +import { RadioGroup, RadioGroupItem } from "#/components/RadioGroup/RadioGroup"; const isBoolean = (variable: TemplateVersionVariable) => { return variable.type === "bool"; @@ -62,35 +61,36 @@ const VariableField: FC = ({ defaultValue, }) => { if (isBoolean(variable)) { + const trueId = `${variable.name}-true`; + const falseId = `${variable.name}-false`; + return ( { - onChange(event.target.value); - }} + disabled={disabled} + onValueChange={onChange} > - } - label="True" - /> - } - label="False" - /> +
+ + +
+
+ + +
); } return ( - = ({ ? "number" : variable.sensitive ? "password" - : "string" + : "text" } /> ); diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx index fdff2130f93..e6558478e0d 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx @@ -1,4 +1,3 @@ -import FormHelperText from "@mui/material/FormHelperText"; import type { FC } from "react"; import { Button } from "#/components/Button/Button"; import { @@ -54,9 +53,9 @@ export const TemplateScheduleAutostart: FC = ({ ))} - +
- +
); }; diff --git a/site/src/pages/TemplateVersionEditorPage/FileDialog.tsx b/site/src/pages/TemplateVersionEditorPage/FileDialog.tsx index ef0d5ec17c9..a00fd1750e7 100644 --- a/site/src/pages/TemplateVersionEditorPage/FileDialog.tsx +++ b/site/src/pages/TemplateVersionEditorPage/FileDialog.tsx @@ -1,6 +1,6 @@ -import TextField from "@mui/material/TextField"; import { type ChangeEvent, type FC, useState } from "react"; import { ConfirmDialog } from "#/components/Dialog/ConfirmDialog/ConfirmDialog"; +import { FormField } from "#/components/FormField/FormField"; import { type FileTree, isFolder, validatePath } from "#/utils/filetree"; interface CreateFileDialogProps { @@ -63,22 +63,25 @@ export const CreateFileDialog: FC = ({ Specify the path to a file to be created. This path can contain slashes too.

- { if (event.key === "Enter") { handleConfirm(); } }} - error={Boolean(error)} - helperText={error} - name="file-path" + field={{ + name: "file-path", + id: "file-path", + value: pathValue, + onChange: handleChange, + onBlur: () => {}, + error: Boolean(error), + helperText: error, + }} + label="File Path" autoComplete="off" - id="file-path" placeholder="example.tf" - value={pathValue} - onChange={handleChange} - label="File Path" /> } @@ -184,22 +187,25 @@ export const RenameFileDialog: FC = ({ Rename {filename} to something else. This path can contain slashes too!

- { if (event.key === "Enter") { handleConfirm(); } }} - error={Boolean(error)} - helperText={error} - name="file-path" + field={{ + name: "file-path", + id: "file-path", + value: pathValue, + onChange: handleChange, + onBlur: () => {}, + error: Boolean(error), + helperText: error, + }} + label="File Path" autoComplete="off" - id="file-path" placeholder={filename} - value={pathValue} - onChange={handleChange} - label="File Path" /> } diff --git a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx index a10dca47b98..d6925e93a32 100644 --- a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx +++ b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx @@ -1,10 +1,9 @@ -import Link from "@mui/material/Link"; -import useTheme from "@mui/system/useTheme"; import type { FC } from "react"; import type { ProvisionerDaemon } from "#/api/typesGenerated"; import { ChevronDownIcon } from "#/components/AnimatedIcons/ChevronDown"; import { FormSection, VerticalForm } from "#/components/Form/Form"; import { TopbarButton } from "#/components/FullPageLayout/Topbar"; +import { Link } from "#/components/Link/Link"; import { Popover, PopoverContent, @@ -22,8 +21,6 @@ export const ProvisionerTagsPopover: FC = ({ tags, onTagsChange, }) => { - const theme = useTheme(); - return ( @@ -36,13 +33,7 @@ export const ProvisionerTagsPopover: FC = ({ align="end" className="w-[300px] bg-surface-secondary border-surface-quaternary" > -
+
= ({ href={docs("/admin/provisioners")} target="_blank" rel="noreferrer" + className="p-0" + showExternalIcon={false} > Learn more... diff --git a/site/src/pages/TemplateVersionEditorPage/PublishTemplateVersionDialog.tsx b/site/src/pages/TemplateVersionEditorPage/PublishTemplateVersionDialog.tsx index b496eee234c..15b7b8b353b 100644 --- a/site/src/pages/TemplateVersionEditorPage/PublishTemplateVersionDialog.tsx +++ b/site/src/pages/TemplateVersionEditorPage/PublishTemplateVersionDialog.tsx @@ -1,12 +1,11 @@ -import Checkbox from "@mui/material/Checkbox"; -import FormControlLabel from "@mui/material/FormControlLabel"; -import TextField from "@mui/material/TextField"; import { useFormik } from "formik"; import type { FC } from "react"; import * as Yup from "yup"; import { EnterpriseBadge } from "#/components/Badges/Badges"; +import { Checkbox } from "#/components/Checkbox/Checkbox"; import { ConfirmDialog } from "#/components/Dialog/ConfirmDialog/ConfirmDialog"; import { FormFields } from "#/components/Form/Form"; +import { FormField } from "#/components/FormField/FormField"; import { HelpPopover, HelpPopoverContent, @@ -16,7 +15,10 @@ import { HelpPopoverText, HelpPopoverTitle, } from "#/components/HelpPopover/HelpPopover"; +import { Label } from "#/components/Label/Label"; +import { Textarea } from "#/components/Textarea/Textarea"; import type { PublishVersionData } from "#/pages/TemplateVersionEditorPage/types"; +import { cn } from "#/utils/cn"; import { docs } from "#/utils/docs"; import { getFormHelpers } from "#/utils/formUtils"; @@ -53,6 +55,8 @@ export const PublishTemplateVersionDialog: FC< onSubmit: onConfirm, }); const getFieldHelpers = getFormHelpers(form, publishingError); + const messageField = getFieldHelpers("message"); + const messageErrorId = `${messageField.id}-error`; const handleClose = () => { form.resetForm(); onClose(); @@ -76,48 +80,63 @@ export const PublishTemplateVersionDialog: FC<

You are about to publish a new version of this template.

- - - -
- { - await form.setFieldValue( - "isActiveVersion", - e.target.checked, - ); - }} - name="isActiveVersion" - /> +
+ +