import Moveable, { DraggableRequestParam } from "lit-moveable"; import Selecto from "lit-selecto"; import { LitElement, html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { ref, createRef } from "lit/directives/ref.js"; @customElement("lit-app") export default class App extends LitElement { moveableRef: Ref = createRef(null); @state() targets: Array = []; render() { return html `
               
Target1
Target2
Target3
`; } onClick() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach(child => { child.request("draggable", { y: rect.top }, true); }); } onClick$0() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach(child => { child.request("draggable", { y: rect.top + rect.height }, true); }); } onClick$1() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach(child => { child.request("draggable", { x: rect.left }, true); }); } onClick$2() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach(child => { child.request("draggable", { y: rect.left + rect.width }, true); }); } onClick$3() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach((child, i) => { child.request("draggable", { y: rect.top + rect.height / 2 - rect.children![i].height / 2 }, true); }); } onClick$4() { const rect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); if (moveables.length <= 1) { return; } moveables.forEach((child, i) => { child.request("draggable", { x: rect.left + rect.width / 2 - rect.children![i].width / 2 }, true); }); } onClick$5() { const groupRect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); let top = groupRect.top; if (moveables.length <= 1) { return; } const gap = (groupRect.height - groupRect.children!.reduce( (prev, cur) => { return prev + cur.height; }, 0 )) / (moveables.length - 1); moveables.sort((a, b) => { return a.state.top - b.state.top; }); moveables.forEach(child => { const rect = child.getRect(); child.request("draggable", { y: top }, true); top += rect.height + gap; }); } onClick$6() { const groupRect = this.moveableRef.value!.getRect(); const moveables = this.moveableRef.value!.getMoveables(); let left = groupRect.left; if (moveables.length <= 1) { return; } const gap = (groupRect.width - groupRect.children!.reduce( (prev, cur) => { return prev + cur.width; }, 0 )) / (moveables.length - 1); moveables.sort((a, b) => { return a.state.left - b.state.left; }); moveables.forEach(child => { const rect = child.getRect(); child.request("draggable", { x: left }, true); left += rect.width + gap; }); } onRender(e) { e.target.style.cssText += e.cssText; } onRenderGroup(e) { e.events.forEach(ev => { ev.target.style.cssText += ev.cssText; }); } onDragStart(e) { const moveable = this.moveableRef.value!; const target = e.inputEvent.target; if (target.tagName === "BUTTON" || moveable.isMoveableElement(target) || this.targets.some(t => t === target || t.contains(target)) ) { e.stop(); } } onSelectEnd(e) { const moveable = this.moveableRef.value!; if (e.isDragStart) { e.inputEvent.preventDefault(); moveable.waitToChangeTarget().then(() => { moveable.dragStart(e.inputEvent); }); } this.targets = e.selected; } }