Spaces:
Running
Running
<script lang="ts"> | |
import CodeExecutionModal from './CodeExecutionModal.svelte'; | |
import Spinner from '$lib/components/common/Spinner.svelte'; | |
import Check from '$lib/components/icons/Check.svelte'; | |
import XMark from '$lib/components/icons/XMark.svelte'; | |
import EllipsisHorizontal from '$lib/components/icons/EllipsisHorizontal.svelte'; | |
export let codeExecutions = []; | |
let selectedCodeExecution = null; | |
let showCodeExecutionModal = false; | |
$: if (codeExecutions) { | |
updateSelectedCodeExecution(); | |
} | |
const updateSelectedCodeExecution = () => { | |
if (selectedCodeExecution) { | |
selectedCodeExecution = codeExecutions.find( | |
(execution) => execution.id === selectedCodeExecution.id | |
); | |
} | |
}; | |
</script> | |
<CodeExecutionModal bind:show={showCodeExecutionModal} codeExecution={selectedCodeExecution} /> | |
{#if codeExecutions.length > 0} | |
<div class="mt-1 mb-2 w-full flex gap-1 items-center flex-wrap"> | |
{#each codeExecutions as execution (execution.id)} | |
<div class="flex gap-1 text-xs font-semibold"> | |
<button | |
class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96" | |
on:click={() => { | |
selectedCodeExecution = execution; | |
showCodeExecutionModal = true; | |
}} | |
> | |
<div | |
class="bg-white dark:bg-gray-700 rounded-full size-4 flex items-center justify-center" | |
> | |
{#if execution?.result} | |
{#if execution.result?.error} | |
<XMark /> | |
{:else if execution.result?.output} | |
<Check strokeWidth="3" className="size-3" /> | |
{:else} | |
<EllipsisHorizontal /> | |
{/if} | |
{:else} | |
<Spinner className="size-4" /> | |
{/if} | |
</div> | |
<div | |
class="flex-1 mx-2 line-clamp-1 code-execution-name {execution?.result ? '' : 'pulse'}" | |
> | |
{execution.name} | |
</div> | |
</button> | |
</div> | |
{/each} | |
</div> | |
{/if} | |
<style> | |
@keyframes pulse { | |
0%, | |
100% { | |
opacity: 1; | |
} | |
50% { | |
opacity: 0.6; | |
} | |
} | |
.pulse { | |
opacity: 1; | |
animation: pulse 1.5s ease; | |
} | |
</style> | |