UNPKG

wired-elements

Version:

Collection of hand-drawn sketchy web components

82 lines (81 loc) 2.46 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { LitElement, css } from 'lit'; import { query } from 'lit/decorators.js'; export const BaseCSS = css ` :host { opacity: 0; } :host(.wired-rendered) { opacity: 1; } #overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; } svg { display: block; } path { stroke: currentColor; stroke-width: 0.7; fill: transparent; } .hidden { display: none !important; } `; export class WiredBase extends LitElement { constructor() { super(...arguments); this.lastSize = [0, 0]; this.seed = Math.floor(Math.random() * 2 ** 31); } updated(_changed) { this.wiredRender(); } wiredRender(force = false) { if (this.svg) { const size = this.canvasSize(); if ((!force) && (size[0] === this.lastSize[0]) && (size[1] === this.lastSize[1])) { return; } while (this.svg.hasChildNodes()) { this.svg.removeChild(this.svg.lastChild); } this.svg.setAttribute('width', `${size[0]}`); this.svg.setAttribute('height', `${size[1]}`); this.draw(this.svg, size); this.lastSize = size; this.classList.add('wired-rendered'); } } fire(name, detail) { fireEvent(this, name, detail); } } __decorate([ query('svg'), __metadata("design:type", SVGSVGElement) ], WiredBase.prototype, "svg", void 0); export function randomSeed() { return Math.floor(Math.random() * 2 ** 31); } export function fireEvent(e, name, detail) { e.dispatchEvent(new CustomEvent(name, { composed: true, bubbles: true, detail })); }