Spaces:
Build error
Build error
| <script lang="ts"> | |
| import { onMount, afterUpdate, onDestroy } from "svelte"; | |
| import { Streamlit } from "./streamlit"; | |
| import type { RenderData } from "./streamlit"; | |
| /** | |
| * Custom Streamlit component | |
| */ | |
| export let component: any; | |
| /** | |
| * Set to false if you want `args` (the named dictionary of arguments passed | |
| * from Python) to be passed as a dictionary to your component. | |
| * | |
| * Default is `true`. | |
| */ | |
| export let spreadArgs: boolean = true; | |
| // State | |
| let renderData: RenderData; | |
| // Props passed to custom Streamlit components. | |
| /** Named dictionary of arguments passed from Python. | |
| * Arguments will be passed directly if `spreadArgs=true` | |
| */ | |
| let args: any; | |
| /** The component's width. */ | |
| let width: number; | |
| /** | |
| * True if the component should be disabled. | |
| * All components get disabled while the app is being re-run, | |
| * and become re-enabled when the re-run has finished. | |
| */ | |
| let disabled: boolean; | |
| /** | |
| * Streamlit is telling this component to redraw. | |
| * We save the render data in State, so that it can be passed to the | |
| * component. | |
| */ | |
| const onRenderEvent = (event: Event): void => { | |
| // Update our state with the newest render data | |
| renderData = (event as CustomEvent<RenderData>).detail; | |
| args = renderData.args; | |
| disabled = renderData.disabled; | |
| }; | |
| onMount((): void => { | |
| // Set up event listeners, and signal to Streamlit that we're ready. | |
| // We won't render the component until we receive the first RENDER_EVENT. | |
| Streamlit.events.addEventListener(Streamlit.RENDER_EVENT, onRenderEvent); | |
| Streamlit.setComponentReady(); | |
| }); | |
| onDestroy((): void => { | |
| // Remove our `onRender` handler to Streamlit's render event. | |
| Streamlit.events.removeEventListener(Streamlit.RENDER_EVENT, onRenderEvent); | |
| }); | |
| </script> | |
| <svelte:window bind:innerWidth={width} /> | |
| <!-- Don't render until we've gotten our first RENDER_EVENT from Streamlit. --> | |
| {#if renderData} | |
| {#if spreadArgs} | |
| <svelte:component this={component} {...args} {disabled} {width} /> | |
| {:else} | |
| <svelte:component this={component} {args} {disabled} {width} /> | |
| {/if} | |
| {/if} | |