Spaces:
Build error
Build error
| <script lang="ts"> | |
| import { getContext } from 'svelte'; | |
| const i18n = getContext('i18n'); | |
| import Plus from '$lib/components/icons/Plus.svelte'; | |
| import Tooltip from '$lib/components/common/Tooltip.svelte'; | |
| import Connection from './Terminals/Connection.svelte'; | |
| import AddTerminalServerModal from '$lib/components/AddTerminalServerModal.svelte'; | |
| export let servers = []; | |
| export let onChange: (servers: typeof servers) => void = () => {}; | |
| let showAddModal = false; | |
| const addServer = (server: (typeof servers)[0]) => { | |
| servers = [...servers, server]; | |
| onChange(servers); | |
| }; | |
| const enableServer = (idx: number) => { | |
| servers = servers.map((s, i) => ({ ...s, enabled: i === idx })); | |
| onChange(servers); | |
| }; | |
| const disableServer = (idx: number) => { | |
| servers = servers.map((s, i) => (i === idx ? { ...s, enabled: false } : s)); | |
| onChange(servers); | |
| }; | |
| const updateServer = (idx: number, updated: (typeof servers)[0]) => { | |
| servers = servers.map((s, i) => (i === idx ? updated : s)); | |
| onChange(servers); | |
| }; | |
| const deleteServer = (idx: number) => { | |
| servers = servers.filter((_, i) => i !== idx); | |
| onChange(servers); | |
| }; | |
| </script> | |
| <AddTerminalServerModal direct bind:show={showAddModal} onSubmit={(server) => addServer(server)} /> | |
| <div> | |
| <div class="flex justify-between items-center mb-1"> | |
| <div class="flex items-center gap-2"> | |
| <div class="font-medium">{$i18n.t('Open Terminal')}</div> | |
| <span | |
| class="text-[0.65rem] font-medium uppercase px-1.5 py-0.5 rounded-full bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400" | |
| >{$i18n.t('Experimental')}</span | |
| > | |
| </div> | |
| <Tooltip content={$i18n.t('Add Connection')}> | |
| <button | |
| class="px-1" | |
| on:click={() => (showAddModal = true)} | |
| type="button" | |
| aria-label={$i18n.t('Add Connection')} | |
| > | |
| <Plus /> | |
| </button> | |
| </Tooltip> | |
| </div> | |
| <div class="flex flex-col gap-1.5"> | |
| {#each servers as server, idx} | |
| <Connection | |
| bind:connection={server} | |
| onSubmit={(updated) => updateServer(idx, updated)} | |
| onDelete={() => deleteServer(idx)} | |
| onEnable={() => enableServer(idx)} | |
| onDisable={() => disableServer(idx)} | |
| /> | |
| {/each} | |
| </div> | |
| {#if servers.length === 0} | |
| <div class="text-xs text-gray-400 dark:text-gray-500"> | |
| {$i18n.t('No terminal connections configured.')} | |
| <a | |
| href="https://github.com/open-webui/open-terminal" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| class="underline hover:text-gray-700 dark:hover:text-gray-200" | |
| > | |
| {$i18n.t('Learn more')} ↗ | |
| </a> | |
| </div> | |
| {/if} | |
| </div> | |