wired-elements
Version:
Collection of hand-drawn sketchy web components
129 lines (128 loc) • 3.75 kB
JavaScript
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 };