UNPKG

wired-elements

Version:

Collection of hand-drawn sketchy web components

129 lines (128 loc) 3.75 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 { WiredBase, BaseCSS } from './wired-base'; import { css, html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { hachureFill } from './wired-lib'; let WiredItem = class WiredItem extends WiredBase { constructor() { super(...arguments); this.value = ''; this.name = ''; this.selected = false; } static get styles() { return [ BaseCSS, css ` :host { display: inline-block; font-size: 14px; text-align: left; } button { cursor: pointer; outline: none; overflow: hidden; color: inherit; user-select: none; position: relative; font-family: inherit; text-align: inherit; font-size: inherit; letter-spacing: 1.25px; padding: 1px 10px; min-height: 36px; text-transform: inherit; background: none; border: none; transition: background-color 0.3s ease, color 0.3s ease; width: 100%; box-sizing: border-box; white-space: nowrap; } button.selected { color: var(--wired-item-selected-color, #fff); } button::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: currentColor; opacity: 0; } button span { display: inline-block; transition: transform 0.2s ease; position: relative; } button:active span { transform: scale(1.02); } #overlay { display: none; } button.selected #overlay { display: block; } svg path { stroke: var(--wired-item-selected-bg, #000); stroke-width: 2.75; fill: transparent; transition: transform 0.05s ease; } @media (hover: hover) { button:hover::before { opacity: 0.05; } } ` ]; } render() { return html ` <button class="${this.selected ? 'selected' : ''}"> <div id="overlay"><svg></svg></div> <span><slot></slot></span> </button>`; } canvasSize() { const s = this.getBoundingClientRect(); return [s.width, s.height]; } draw(svg, size) { const g = hachureFill([ [0, 0], [size[0], 0], [size[0], size[1]], [0, size[1]] ], this.seed); svg.appendChild(g); } }; __decorate([ property(), __metadata("design:type", Object) ], WiredItem.prototype, "value", void 0); __decorate([ property(), __metadata("design:type", Object) ], WiredItem.prototype, "name", void 0); __decorate([ property({ type: Boolean }), __metadata("design:type", Object) ], WiredItem.prototype, "selected", void 0); WiredItem = __decorate([ customElement('wired-item') ], WiredItem); export { WiredItem };