diff --git a/site/package.json b/site/package.json index 8976fe4659399..093047d484db0 100644 --- a/site/package.json +++ b/site/package.json @@ -103,7 +103,9 @@ "xterm": "5.2.1", "xterm-addon-canvas": "0.4.0", "xterm-addon-fit": "0.7.0", + "xterm-addon-unicode11": "0.5.0", "xterm-addon-web-links": "0.8.0", + "xterm-addon-webgl": "0.15.0", "yup": "1.2.0" }, "devDependencies": { diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index 00d76bb9c3efc..4cc98c7074168 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -225,9 +225,15 @@ dependencies: xterm-addon-fit: specifier: 0.7.0 version: 0.7.0(xterm@5.2.1) + xterm-addon-unicode11: + specifier: 0.5.0 + version: 0.5.0(xterm@5.2.1) xterm-addon-web-links: specifier: 0.8.0 version: 0.8.0(xterm@5.2.1) + xterm-addon-webgl: + specifier: 0.15.0 + version: 0.15.0(xterm@5.2.1) yup: specifier: 1.2.0 version: 1.2.0 @@ -13581,6 +13587,14 @@ packages: xterm: 5.2.1 dev: false + /xterm-addon-unicode11@0.5.0(xterm@5.2.1): + resolution: {integrity: sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg==} + peerDependencies: + xterm: ^5.0.0 + dependencies: + xterm: 5.2.1 + dev: false + /xterm-addon-web-links@0.8.0(xterm@5.2.1): resolution: {integrity: sha512-J4tKngmIu20ytX9SEJjAP3UGksah7iALqBtfTwT9ZnmFHVplCumYQsUJfKuS+JwMhjsjH61YXfndenLNvjRrEw==} peerDependencies: @@ -13589,6 +13603,14 @@ packages: xterm: 5.2.1 dev: false + /xterm-addon-webgl@0.15.0(xterm@5.2.1): + resolution: {integrity: sha512-ZLcqogMFHr4g/YRhcCh3xE8tTklnyut/M+O/XhVsFBRB/YCvYhPdLQ5/AQk54V0wjWAQpa8CF3W8DVR9OqyMCg==} + peerDependencies: + xterm: ^5.0.0 + dependencies: + xterm: 5.2.1 + dev: false + /xterm@5.2.1: resolution: {integrity: sha512-cs5Y1fFevgcdoh2hJROMVIWwoBHD80P1fIP79gopLHJIE4kTzzblanoivxTiQ4+92YM9IxS36H1q0MxIJXQBcA==} dev: false diff --git a/site/src/AppRouter.tsx b/site/src/AppRouter.tsx index c1f222d90c334..785048fe7298d 100644 --- a/site/src/AppRouter.tsx +++ b/site/src/AppRouter.tsx @@ -322,7 +322,7 @@ export const AppRouter: FC = () => { {/* Terminal and CLI auth pages don't have the dashboard layout */} } + element={} /> } /> diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx index a09f289da9805..61c3501976329 100644 --- a/site/src/pages/TerminalPage/TerminalPage.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.tsx @@ -7,9 +7,10 @@ import { useNavigate, useParams, useSearchParams } from "react-router-dom" import { colors } from "theme/colors" import { v4 as uuidv4 } from "uuid" import * as XTerm from "xterm" -import { CanvasAddon } from "xterm-addon-canvas" +import { WebglAddon } from "xterm-addon-webgl" import { FitAddon } from "xterm-addon-fit" import { WebLinksAddon } from "xterm-addon-web-links" +import { Unicode11Addon } from "xterm-addon-unicode11" import "xterm/css/xterm.css" import { MONOSPACE_FONT_FAMILY } from "../../theme/constants" import { pageTitle } from "../../utils/page" @@ -57,7 +58,7 @@ const useTerminalWarning = ({ agent }: { agent?: WorkspaceAgent }) => { } type TerminalPageProps = React.PropsWithChildren<{ - renderer: "canvas" | "dom" + renderer: "webgl" | "dom" }> const TerminalPage: FC = ({ renderer }) => { @@ -176,6 +177,7 @@ const TerminalPage: FC = ({ renderer }) => { return } const terminal = new XTerm.Terminal({ + allowProposedApi: true, allowTransparency: true, disableStdin: false, fontFamily: MONOSPACE_FONT_FAMILY, @@ -185,12 +187,14 @@ const TerminalPage: FC = ({ renderer }) => { }, }) // DOM is the default renderer. - if (renderer === "canvas") { - terminal.loadAddon(new CanvasAddon()) + if (renderer === "webgl") { + terminal.loadAddon(new WebglAddon()) } const fitAddon = new FitAddon() setFitAddon(fitAddon) terminal.loadAddon(fitAddon) + terminal.loadAddon(new Unicode11Addon()) + terminal.unicode.activeVersion = "11" terminal.loadAddon( new WebLinksAddon((_, uri) => { handleWebLink(uri)