import { customElement, type TemplateResult, property, html, css, cssManager, } from '@design.estate/dees-element'; import { DeesInputBase } from './dees-input-base.js'; import { demoFunc } from './dees-input-checkbox.demo.js'; declare global { interface HTMLElementTagNameMap { 'dees-input-checkbox': DeesInputCheckbox; } } @customElement('dees-input-checkbox') export class DeesInputCheckbox extends DeesInputBase { // STATIC public static demo = demoFunc; // INSTANCE @property({ type: Boolean, }) public value: boolean = false; constructor() { super(); this.labelPosition = 'right'; // Checkboxes default to label on the right } public static styles = [ ...DeesInputBase.baseStyles, cssManager.defaultStyles, css` * { box-sizing: border-box; } :host { position: relative; cursor: default; } :host(:hover) { filter: ${cssManager.bdTheme('brightness(0.95)', 'brightness(1.1)')}; } .maincontainer { padding: 5px 0px; color: ${cssManager.bdTheme('#333', '#ccc')}; } .maincontainer:hover { color: ${cssManager.bdTheme('#000', '#fff')}; } input:focus { outline: none; border-bottom: 1px solid #e4002b; } .checkbox { transition: all 0.1s; box-sizing: border-box; border: 1px solid ${cssManager.bdTheme('#CCC', '#999')}; border-radius: 2px; height: 24px; width: 24px; display: inline-block; background: ${cssManager.bdTheme('#fafafa', '#222')}; } .checkbox.selected { background: #0050b9; border: 1px solid #0050b9; } .checkbox.disabled { background: none; border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')}; } .checkbox .checkmark { display: inline-block; width: 22px; height: 22px; -ms-transform: rotate(45deg); /* IE 9 */ -webkit-transform: rotate(45deg); /* Chrome, Safari, Opera */ transform: rotate(45deg); } .checkbox .checkmark_stem { position: absolute; width: 3px; height: 9px; background-color: #fff; left: 11px; top: 6px; } .checkbox .checkmark_kick { position: absolute; width: 3px; height: 3px; background-color: #fff; left: 8px; top: 12px; } .checkbox.disabled .checkmark_stem, .checkbox.disabled .checkmark_kick { background-color: ${cssManager.bdTheme('#333', '#fff')}; } img { padding: 4px; } `, ]; public render(): TemplateResult { return html`
${this.value ? html`
` : html``}
`; } public async toggleSelected() { if (this.disabled) { return; } this.value = !this.value; this.dispatchEvent( new CustomEvent('newValue', { detail: this.value, bubbles: true, }) ); this.changeSubject.next(this); } public getValue(): boolean { return this.value; } public setValue(value: boolean): void { this.value = value; } public focus(): void { const checkboxDiv = this.shadowRoot.querySelector('.checkbox'); if (checkboxDiv) { (checkboxDiv as any).focus(); } } }