import {LitElement, PropertyValueMap, html, unsafeCSS} from 'lit'; import { customElement, property, queryAssignedElements, } from 'lit/decorators.js'; import {ObcToggleButtonOption} from '../toggle-button-option/toggle-button-option'; import componentStyle from './toggle-button-group.css?inline'; @customElement('obc-toggle-button-group') export class ObcToggleButtonGroup extends LitElement { @property({type: Boolean}) hasLabels = false; @property({type: String}) value = ''; @queryAssignedElements({selector: 'obc-toggle-button-option'}) options!: NodeListOf; protected override firstUpdated( _changedProperties: PropertyValueMap | Map ): void { super.firstUpdated(_changedProperties); this.options.forEach((slot) => { slot.addEventListener('selected', (e) => this.handleOptionClick(e)); slot.selected = slot.value === this.value; }); } handleOptionClick(event: Event) { const value = (event as CustomEvent).detail.value; this.dispatchEvent(new CustomEvent('value', {detail: {value}})); this.options.forEach((option) => { option.selected = option.value === value; }); } override requestUpdate(name?: PropertyKey, oldValue?: unknown) { if (name && name == 'value' && this.value !== oldValue) { this.options.forEach((option) => { option.selected = option.value === this.value; }); } return super.requestUpdate(name, oldValue); } override render() { return html`
`; } static override styles = unsafeCSS(componentStyle); } declare global { interface HTMLElementTagNameMap { 'obc-toggle-button-group': ObcToggleButtonGroup; } }