diff --git a/resources/scripts/components/elements/Spinner.tsx b/resources/scripts/components/elements/Spinner.tsx index 890d94ea0..bf948a53e 100644 --- a/resources/scripts/components/elements/Spinner.tsx +++ b/resources/scripts/components/elements/Spinner.tsx @@ -1,6 +1,7 @@ import React, { Suspense } from 'react'; import styled, { css, keyframes } from 'styled-components/macro'; import tw from 'twin.macro'; +import ErrorBoundary from '@/components/elements/ErrorBoundary'; export type SpinnerSize = 'small' | 'base' | 'large'; @@ -25,12 +26,12 @@ const SpinnerComponent = styled.div` border-width: 3px; border-radius: 50%; animation: ${spin} 1s cubic-bezier(0.55, 0.25, 0.25, 0.70) infinite; - + ${props => props.size === 'small' ? tw`w-4 h-4 border-2` : (props.size === 'large' ? css` ${tw`w-16 h-16`}; border-width: 6px; ` : null)}; - + border-color: ${props => !props.isBlue ? 'rgba(255, 255, 255, 0.2)' : 'hsla(212, 92%, 43%, 0.2)'}; border-top-color: ${props => !props.isBlue ? 'rgb(255, 255, 255)' : 'hsl(212, 92%, 43%)'}; `; @@ -58,7 +59,9 @@ Spinner.Size = { Spinner.Suspense = ({ children, centered = true, size = Spinner.Size.LARGE, ...props }) => ( }> - {children} + + {children} + ); Spinner.Suspense.displayName = 'Spinner.Suspense'; diff --git a/resources/scripts/components/server/Console.tsx b/resources/scripts/components/server/console/Console.tsx similarity index 81% rename from resources/scripts/components/server/Console.tsx rename to resources/scripts/components/server/console/Console.tsx index ad6e721b9..029a00c7f 100644 --- a/resources/scripts/components/server/Console.tsx +++ b/resources/scripts/components/server/console/Console.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; -import { Terminal, ITerminalOptions } from 'xterm'; +import { ITerminalOptions, Terminal } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; import { SearchAddon } from 'xterm-addon-search'; import { SearchBarAddon } from 'xterm-addon-search-bar'; @@ -7,14 +7,16 @@ import { WebLinksAddon } from 'xterm-addon-web-links'; import { ScrollDownHelperAddon } from '@/plugins/XtermScrollDownHelperAddon'; import SpinnerOverlay from '@/components/elements/SpinnerOverlay'; import { ServerContext } from '@/state/server'; -import styled from 'styled-components/macro'; import { usePermissions } from '@/plugins/usePermissions'; -import tw, { theme as th } from 'twin.macro'; +import { theme as th } from 'twin.macro'; import 'xterm/css/xterm.css'; import useEventListener from '@/plugins/useEventListener'; import { debounce } from 'debounce'; import { usePersistedState } from '@/plugins/usePersistedState'; import { SocketEvent, SocketRequest } from '@/components/server/events'; +import classNames from 'classnames'; +import styles from './style.module.css'; +import { ChevronDoubleRightIcon } from '@heroicons/react/solid'; const theme = { background: th`colors.black`.toString(), @@ -48,23 +50,6 @@ const terminalProps: ITerminalOptions = { theme: theme, }; -const TerminalDiv = styled.div` - &::-webkit-scrollbar { - width: 8px; - } - - &::-webkit-scrollbar-thumb { - ${tw`bg-neutral-900`}; - } -`; - -const CommandInput = styled.input` - ${tw`text-sm transition-colors duration-150 px-2 bg-transparent border-0 border-b-2 border-transparent text-neutral-100 p-2 pl-0 w-full focus:ring-0`} - &:focus { - ${tw`border-cyan-700`}; - } -`; - export default () => { const TERMINAL_PRELUDE = '\u001b[1m\u001b[33mcontainer@pterodactyl~ \u001b[0m'; const ref = useRef(null); @@ -202,30 +187,25 @@ export default () => { }, [ connected, instance ]); return ( -
- -
- +
+ +
+
{canSendCommands && -
-
$
-
- +
+ +
+
} diff --git a/resources/scripts/components/server/console/PowerButtons.tsx b/resources/scripts/components/server/console/PowerButtons.tsx index 169210a57..c8cd13e68 100644 --- a/resources/scripts/components/server/console/PowerButtons.tsx +++ b/resources/scripts/components/server/console/PowerButtons.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Button } from '@/components/elements/button/index'; import Can from '@/components/elements/Can'; import { ServerContext } from '@/state/server'; -import { PowerAction } from '@/components/server/ServerConsole'; +import { PowerAction } from '@/components/server/console/ServerConsoleContainer'; import { Dialog } from '@/components/elements/dialog'; interface PowerButtonProps { @@ -41,7 +41,7 @@ export default ({ className }: PowerButtonProps) => {