Spaces:
Runtime error
Runtime error
| <script lang="ts"> | |
| import Moveable from "svelte-moveable"; | |
| export let elem_id = ""; | |
| export let elem_classes: string[] = []; | |
| export let visible = true; | |
| let data: HTMLDivElement; | |
| let componentElements = []; | |
| $: { | |
| if (data) { | |
| componentElements = Array.from( | |
| data.querySelectorAll('[id^="component-"]') | |
| ); | |
| } | |
| } | |
| const draggable = true; | |
| const throttleDrag = 1; | |
| const edgeDraggable = true; | |
| const startDragRotate = 0; | |
| const throttleDragRotate = 0; | |
| const scalable = true; | |
| const keepRatio = false; | |
| const throttleScale = 0; | |
| const renderDirections = ["nw", "n", "ne", "w", "e", "sw", "s", "se"]; | |
| const rotatable = true; | |
| const throttleRotate = 0; | |
| const rotationPosition = "top"; | |
| let editing = false; | |
| </script> | |
| <div | |
| id={elem_id} | |
| class="gr-group {elem_classes.join(' ')}" | |
| class:hide={!visible} | |
| > | |
| <button class="edit-button" on:click={() => (editing = !editing)} | |
| >{editing ? "Done" : "Edit"}</button | |
| > | |
| <div bind:this={data} class="hide"> | |
| <slot /> | |
| </div> | |
| {#each componentElements as elmt, id} | |
| <div class={"target target" + id}> | |
| {@html elmt.outerHTML} | |
| </div> | |
| {/each} | |
| {#if componentElements.length > 0 && editing} | |
| <Moveable | |
| target={".target"} | |
| individualGroupable={true} | |
| {draggable} | |
| {throttleDrag} | |
| {edgeDraggable} | |
| {startDragRotate} | |
| {throttleDragRotate} | |
| {scalable} | |
| {keepRatio} | |
| {throttleScale} | |
| {renderDirections} | |
| {rotatable} | |
| {throttleRotate} | |
| {rotationPosition} | |
| on:drag={({ detail: e }) => { | |
| e.target.style.transform = e.transform; | |
| }} | |
| on:scale={({ detail: e }) => { | |
| e.target.style.transform = e.drag.transform; | |
| }} | |
| on:rotate={({ detail: e }) => { | |
| e.target.style.transform = e.drag.transform; | |
| }} | |
| /> | |
| {/if} | |
| </div> | |
| <style> | |
| .edit-button { | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| left: 100%; | |
| } | |
| :global(.moveable-line) { | |
| opacity: 0.1; | |
| } | |
| :global(.moveable-control) { | |
| opacity: 0.2; | |
| } | |
| :global(.moveable-origin) { | |
| opacity: 0; | |
| } | |
| :global(.gradio-container) { | |
| overflow: visible; | |
| } | |
| .hide { | |
| display: none; | |
| } | |
| .target { | |
| margin: 30px; | |
| } | |
| </style> | |