Spaces:
Running
Running
| <script lang="ts"> | |
| import Icon from '@iconify/svelte'; | |
| import Highlight from "svelte-highlight"; | |
| import json from "svelte-highlight/languages/json"; | |
| import "svelte-highlight/styles/night-owl.css" | |
| import Loading from "$lib/components/Loading.svelte" | |
| import CodePreview from '$lib/components/CodePreview.svelte'; | |
| import Preview from '$lib/components/text-analysis/Preview.svelte'; | |
| export let loading: boolean; | |
| export let res: any; | |
| export let form: Record<string, any>; | |
| export let body: Record<string, any>; | |
| export let endpoint: string; | |
| let tab = 0 | |
| $: code = JSON.stringify(res ?? {}, null, 2) | |
| let TABS = [ | |
| { | |
| label: "Formatted preview", | |
| icon: "material-symbols:preview", | |
| }, | |
| { | |
| label: "Code example", | |
| icon: "carbon:code", | |
| }, | |
| ]; | |
| </script> | |
| <div class="lg:h-screen flex flex-col relative"> | |
| <div class="w-full jsonResponse relative"> | |
| <div class="bg-slate-950 w-full uppercase px-5 py-4 text-zinc-400 text-sm font-semibold border-b border-slate-900 flex items-center justify-start gap-2"> | |
| <Icon icon="carbon:json" class="w-5 h-5" /> | |
| Response | |
| </div> | |
| <Highlight language={json} {code}> | |
| </Highlight> | |
| {#if loading} | |
| <Loading> | |
| <p class="text-slate-400 text-lg mt-4">Processing...</p> | |
| </Loading> | |
| {/if} | |
| </div> | |
| <div class="bg-slate-950 overflow-auto flex-1"> | |
| <div class="w-full uppercase text-zinc-400 text-sm font-semibold border-t border-slate-900 flex items-start sticky top-0 bg-slate-950"> | |
| {#each TABS as { label, icon }, idx } | |
| <button | |
| class={`flex items-center justify-start gap-2 px-5 border-r py-4 border-slate-900 bg-slate-900/40 cursor-pointer hover:bg-slate-900/60 transition-all duration-200 ${tab === idx ? '!bg-slate-950 hover:bg-slate-900/40' : 'border-b'}`} | |
| on:click={() => tab = idx} | |
| > | |
| <Icon icon={icon} class="w-5 h-5" /> | |
| {label} | |
| </button> | |
| {/each} | |
| <div class="flex flex-1 w-full pointer-events-none text-slate-950 border-b border-slate-900 h-[53px] bg-slate-900/40"></div> | |
| </div> | |
| {#if tab === 0} | |
| <Preview body={body} res={res} /> | |
| {:else if tab === 1} | |
| <CodePreview body={form} endpoint={endpoint} /> | |
| {/if} | |
| </div> | |
| </div> |