| <script context="module" lang="ts"> |
| export { default as BaseCode } from "./shared/Code.svelte"; |
| export { default as BaseCopy } from "./shared/Copy.svelte"; |
| export { default as BaseDownload } from "./shared/Download.svelte"; |
| export { default as BaseWidget } from "./shared/Widgets.svelte"; |
| export { default as BaseExample } from "./Example.svelte"; |
| </script> |
|
|
| <script lang="ts"> |
| interface Log { |
| level: "INFO" | "DEBUG" | "WARNING" | "ERROR" | "CRITICAL"; |
| message: string; |
| timestamp: string; |
| } |
| |
| import type { Gradio } from "@gradio/utils"; |
| import { afterUpdate } from "svelte"; |
| |
| import type { LoadingStatus } from "@gradio/statustracker"; |
| |
| import Code from "./shared/Code.svelte"; |
| import Widget from "./shared/Widgets.svelte"; |
| import { StatusTracker } from "@gradio/statustracker"; |
| import { Block, BlockLabel, Empty } from "@gradio/atoms"; |
| import { Code as CodeIcon } from "@gradio/icons"; |
| |
| export let gradio: Gradio<{ |
| change: typeof value; |
| input: never; |
| blur: never; |
| focus: never; |
| }>; |
| export let value: Log[] = []; |
| export let value_as_string: string | null = ""; |
| export let value_is_output = false; |
| export let language = ""; |
| export let lines = 5; |
| export let target: HTMLElement; |
| export let elem_id = ""; |
| export let elem_classes: string[] = []; |
| export let visible = true; |
| export let label = gradio.i18n("code.code"); |
| export let show_label = true; |
| export let loading_status: LoadingStatus; |
| export let scale: number | null = null; |
| |
| export let interactive: boolean; |
| |
| let dark_mode = target.classList.contains("dark"); |
| |
| function handle_change(): void { |
| gradio.dispatch("change", value); |
| if (!value_is_output) { |
| gradio.dispatch("input"); |
| } |
| } |
| afterUpdate(() => { |
| value_is_output = false; |
| }); |
| $: value, handle_change(), format_logs(); |
| |
| function format_logs(): void { |
| value_as_string = value?.map((log) => { |
| return `[${log.timestamp}] [${log.level}] ${log.message}`; |
| }).join("\n"); |
| } |
| </script> |
|
|
| <Block |
| variant={"solid"} |
| padding={false} |
| {elem_id} |
| {elem_classes} |
| {visible} |
| {scale} |
| > |
| <StatusTracker |
| autoscroll={gradio.autoscroll} |
| i18n={gradio.i18n} |
| {...loading_status} |
| /> |
|
|
| <BlockLabel Icon={CodeIcon} {show_label} {label} float={false} /> |
|
|
| {#if !value && !interactive} |
| <Empty unpadded_box={true} size="large"> |
| <CodeIcon /> |
| </Empty> |
| {:else} |
| <Widget {language} value={value_as_string} /> |
|
|
| <Code |
| value={value_as_string} |
| {language} |
| {lines} |
| {dark_mode} |
| readonly={!interactive} |
| on:blur={() => gradio.dispatch("blur")} |
| on:focus={() => gradio.dispatch("focus")} |
| /> |
| {/if} |
| </Block> |
|
|