import * as studio from "@storyteller/studio"; import { TransformSpace, TransformType } from "@storyteller/studio"; import { match } from "@storyteller/utility"; import { LitElement, html, unsafeCSS } from "lit"; import { customElement, state } from "lit/decorators.js"; import "@storyteller/studio-ui/icon"; import "@storyteller/studio-ui/toolbar"; import styles from "./transform-toolbar.element.scss?inline"; @customElement("sts-transform-toolbar") export class TransformToolbarElement extends LitElement { static override styles = unsafeCSS(styles); get space() { return this._space; } @state() private _space = TransformSpace.Local; get type() { return this._type; } @state() private _type = TransformType.Translate; #onSpaceChange(event: InputEvent): void { const { value } = event.target as HTMLInputElement; this._space = match (value, { "local": () => TransformSpace.Local, "world": () => TransformSpace.World, _: () => { throw new Error(`Unknown transform space: "${value}"`); } }); studio.setTransformSpace(this._space); } #onTypeChange(event: InputEvent): void { const { name, checked } = event.target as HTMLInputElement; const flag = match (name, { "translate": () => TransformType.Translate, "rotate": () => TransformType.Rotate, "scale": () => TransformType.Scale, _: () => { throw new Error(`Unknown transform type: "${name}"`); } }); if (checked) this._type |= flag; else this._type &= ~flag; studio.setTransformType(this._type); } protected override render = () => html` `; }