2
import { Gradio } from "./gradio_helper";
3
import { onMount, createEventDispatcher, setContext } from "svelte";
4
import type { ComponentMeta, ThemeMode } from "./types";
6
export let root: string;
7
export let component: ComponentMeta["component"];
8
export let instance_map: Record<number, ComponentMeta>;
10
export let id: number;
11
export let props: ComponentMeta["props"];
13
export let children: ComponentMeta["children"];
14
export let dynamic_ids: Set<number>;
15
export let parent: string | null = null;
16
export let target: HTMLElement;
17
export let theme_mode: ThemeMode;
18
export let version: string;
19
export let autoscroll: boolean;
21
const dispatch = createEventDispatcher<{ mount: number; destroy: number }>();
22
let filtered_children: ComponentMeta[] = [];
25
dispatch("mount", id);
27
for (const child of filtered_children) {
28
dispatch("mount", child.id);
32
dispatch("destroy", id);
34
for (const child of filtered_children) {
35
dispatch("mount", child.id);
42
children.filter((v) => {
43
const valid_node = instance_map[v.id].type !== "statustracker";
45
filtered_children.push(v);
50
setContext("BLOCK_KEY", parent);
52
function handle_prop_change(e: { detail: Record<string, any> }): void {
53
for (const k in e.detail) {
54
instance_map[id].props[k] = e.detail[k];
59
if (instance_map[id].type === "form") {
60
if (children?.every((c) => !c.props.visible)) {
61
props.visible = false;
71
bind:this={instance_map[id].instance}
72
bind:value={instance_map[id].props.value}
73
elem_id={("elem_id" in props && props.elem_id) || `component-${id}`}
74
elem_classes={("elem_classes" in props && props.elem_classes) || []}
75
on:prop_change={handle_prop_change}
80
gradio={new Gradio(id, target, theme_mode, version, root, autoscroll)}
82
{#if children && children.length}
83
{#each children as { component, id: each_id, props, children: _children, has_modes } (each_id)}