From 3499421f7a15e89156f406877213086b45b89730 Mon Sep 17 00:00:00 2001 From: Alex TYRODE Date: Mon, 28 Apr 2025 03:30:34 +0000 Subject: [PATCH 1/6] feat: add Terminal component and styles - Introduced a new Terminal component for embedding a terminal interface within the application. - Added corresponding styles in Terminal.scss to ensure proper layout and appearance. - Updated index.ts to export the Terminal component for accessibility within the module. --- src/frontend/src/pad/containers/Terminal.scss | 18 ++++++++ src/frontend/src/pad/containers/Terminal.tsx | 41 +++++++++++++++++++ src/frontend/src/pad/index.ts | 2 + 3 files changed, 61 insertions(+) create mode 100644 src/frontend/src/pad/containers/Terminal.scss create mode 100644 src/frontend/src/pad/containers/Terminal.tsx diff --git a/src/frontend/src/pad/containers/Terminal.scss b/src/frontend/src/pad/containers/Terminal.scss new file mode 100644 index 0000000..31a9462 --- /dev/null +++ b/src/frontend/src/pad/containers/Terminal.scss @@ -0,0 +1,18 @@ +.terminal-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.terminal-iframe { + flex: 1; + background-color: #1e1e1e; + height: 100%; + width: 100%; + border: 0px !important; + overflow: hidden; + border-bottom-left-radius: var(--embeddable-radius); + border-bottom-right-radius: var(--embeddable-radius); +} diff --git a/src/frontend/src/pad/containers/Terminal.tsx b/src/frontend/src/pad/containers/Terminal.tsx new file mode 100644 index 0000000..3136b88 --- /dev/null +++ b/src/frontend/src/pad/containers/Terminal.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import { useWorkspaceState } from '../../api/hooks'; +import type { NonDeleted, ExcalidrawEmbeddableElement } from '@atyrode/excalidraw/element/types'; +import type { AppState } from '@atyrode/excalidraw/types'; +import './Terminal.scss'; + +interface TerminalProps { + element: NonDeleted; + appState: AppState; + excalidrawAPI?: any; +} + +export const Terminal: React.FC = ({ + element, + appState, + excalidrawAPI +}) => { + const { data: workspaceState } = useWorkspaceState(); + + const getTerminalUrl = () => { + if (!workspaceState) { + return 'https://terminal.example.dev'; + } + + return `${workspaceState.base_url}/@${workspaceState.username}/${workspaceState.workspace_id}.${workspaceState.agent}/terminal`; + }; + + const terminalUrl = getTerminalUrl(); + + return ( +
+