UNPKG

igniteui-webcomponents

Version:

Ignite UI for Web Components is a complete library of UI components, giving you the ability to build modern web applications using encapsulation and the concept of reusable components in a dependency-free approach.

139 lines 5.11 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; }; import { html, LitElement } from 'lit'; import { property } from 'lit/decorators.js'; import { addThemingController } from '../../theming/theming-controller.js'; import { addInternalsController } from '../common/controllers/internals.js'; import { createMutationController } from '../common/controllers/mutation-observer.js'; import { addSlotController, setSlots } from '../common/controllers/slot.js'; import { registerComponent } from '../common/definitions/register.js'; import IgcRadioComponent from '../radio/radio.js'; import { styles } from './themes/radio-group.base.css.js'; import { styles as shared } from './themes/shared/radio-group.common.css.js'; import { all } from './themes/themes.js'; class IgcRadioGroupComponent extends LitElement { static register() { registerComponent(IgcRadioGroupComponent, IgcRadioComponent); } set defaultValue(value) { this._defaultValue = value; this._setRadiosDefaultChecked(); } get defaultValue() { return this._defaultValue; } set name(value) { this._name = value; this._setRadiosName(); } get name() { return this._name; } set value(value) { this._value = value; this._setSelectedRadio(); } get value() { if (this._radios.length) { this._value = this._radios.find((radio) => radio.checked)?.value ?? ''; } return this._value; } constructor() { super(); this._internals = addInternalsController(this, { initialARIA: { role: 'radiogroup', }, }); this._slots = addSlotController(this, { slots: setSlots(), onChange: this._handleSlotChange, initial: true, }); this._radios = []; this.alignment = 'vertical'; addThemingController(this, all); createMutationController(this, { callback: this._observerCallback, filter: [IgcRadioComponent.tagName], config: { attributeFilter: ['disabled', 'label-position'], subtree: true, }, }); } firstUpdated() { const radios = Array.from(this._radios); const allRadiosUnchecked = radios.every((radio) => !radio.checked); this._setRadiosName(); this._setRadiosDefaultChecked(); if (allRadiosUnchecked && this._value) { this._setSelectedRadio(); this._setDefaultValue(); } } _observerCallback() { const disabled = this._radios.every((radio) => radio.disabled); const labeBefore = this._radios.some((radio) => radio.labelPosition === 'before'); this._internals.setState('disabled', disabled); this._internals.setState('label-before', labeBefore); } _handleSlotChange() { this._radios = this._slots.getAssignedElements('[default]', { selector: IgcRadioComponent.tagName, flatten: true, }); const elements = this._slots.getAssignedElements('[default]', { flatten: true, }); this.style.setProperty('--layout-count', elements.length.toString()); } _setRadiosDefaultChecked() { if (this._defaultValue) { for (const radio of this._radios) { radio.defaultChecked = radio.value === this._defaultValue; } } } _setRadiosName() { if (this._name) { for (const radio of this._radios) { radio.name = this._name; } } } _setDefaultValue() { for (const radio of this._radios) { radio.toggleAttribute('checked', radio.checked); } } _setSelectedRadio() { for (const radio of this._radios) { radio.checked = radio.value === this._value; } } render() { return html `<slot></slot>`; } } IgcRadioGroupComponent.tagName = 'igc-radio-group'; IgcRadioGroupComponent.styles = [styles, shared]; export default IgcRadioGroupComponent; __decorate([ property({ reflect: true }) ], IgcRadioGroupComponent.prototype, "alignment", void 0); __decorate([ property({ attribute: false }) ], IgcRadioGroupComponent.prototype, "defaultValue", null); __decorate([ property({ reflect: true }) ], IgcRadioGroupComponent.prototype, "name", null); __decorate([ property() ], IgcRadioGroupComponent.prototype, "value", null); //# sourceMappingURL=radio-group.js.map