UNPKG

@favian/headwind-ui

Version:

Headless UI for Angular - Styleless Angular components to integrate with Tailwind CSS

122 lines 16.6 kB
import { booleanAttribute, Component, ContentChildren, EventEmitter, HostListener, Input, Output, } from '@angular/core'; import { HeadwindControlValueAccessor } from '../../abstracts/headwind-control-value-accessor'; import { HeadwindRadioComponent } from './headwind-radio/headwind-radio.component'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { HeadwindRadioGroupService } from './service/headwind-radio-group.service'; import * as i0 from "@angular/core"; import * as i1 from "../../services/headwind-query-list.service"; import * as i2 from "./service/headwind-radio-group.service"; export class HeadwindRadioGroupComponent extends HeadwindControlValueAccessor { constructor(_headwindQueryListService, _headwindRadioGroupService) { super(); this._headwindQueryListService = _headwindQueryListService; this._headwindRadioGroupService = _headwindRadioGroupService; this.valueChange = new EventEmitter(); this._headwindRadioGroupService.selectOption.pipe(takeUntilDestroyed()).subscribe((value) => { if (!this.disabled) { this.updateValue(value); } }); } get value() { return this._headwindRadioGroupService.value; } set value(value) { this._headwindRadioGroupService.value = value; } get disabled() { return this.isDisabled; } set disabled(value) { this.setDisabledState(value); } onHostBlur() { this.onTouched(); } onHostArrowUpKeydown(event) { event.stopPropagation(); event.preventDefault(); this.toPreviousOption(); } onHostArrowDownKeydown(event) { event.stopPropagation(); event.preventDefault(); this.toNextOption(); } onHostArrowLeftKeydown(event) { event.stopPropagation(); event.preventDefault(); this.toPreviousOption(); } onHostArrowRightKeydown(event) { event.stopPropagation(); event.preventDefault(); this.toNextOption(); } updateValue(value) { super.updateValue(value); this.valueChange.emit(value); } writeValue(obj) { this.value = obj; } toPreviousOption() { if (!this.disabled) { const currentOptionIndex = this._findIndexOfSelectedRadio(); const previousOptionIndex = Math.max(currentOptionIndex - 1, 0); const previousOption = this.radioList?.get(previousOptionIndex); if (previousOption) { this.updateValue(previousOption.value); } } } toNextOption() { if (!this.disabled) { const currentOptionIndex = this._findIndexOfSelectedRadio(); const lastOptionIndex = (this.radioList?.length || 0) - 1; const nextOptionIndex = Math.min(currentOptionIndex + 1, lastOptionIndex); const nextOption = this.radioList?.get(nextOptionIndex); if (nextOption) { this.updateValue(nextOption.value); } } } _findIndexOfSelectedRadio() { return this._headwindQueryListService.findIndex(this.radioList, (radio) => radio.selected); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindRadioGroupComponent, deps: [{ token: i1.HeadwindQueryListService }, { token: i2.HeadwindRadioGroupService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.13", type: HeadwindRadioGroupComponent, isStandalone: true, selector: "headwind-radio-group", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { valueChange: "valueChange" }, host: { attributes: { "tabindex": "0" }, listeners: { "blur": "onHostBlur()", "keydown.arrowUp": "onHostArrowUpKeydown($event)", "keydown.arrowDown": "onHostArrowDownKeydown($event)", "keydown.arrowLeft": "onHostArrowLeftKeydown($event)", "keydown.arrowRight": "onHostArrowRightKeydown($event)" }, classAttribute: "headwind-radio-group" }, providers: [HeadwindRadioGroupService], queries: [{ propertyName: "radioList", predicate: HeadwindRadioComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: [""] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindRadioGroupComponent, decorators: [{ type: Component, args: [{ selector: 'headwind-radio-group', standalone: true, imports: [], host: { tabindex: '0', class: 'headwind-radio-group', }, providers: [HeadwindRadioGroupService], template: "<ng-content></ng-content>\r\n" }] }], ctorParameters: () => [{ type: i1.HeadwindQueryListService }, { type: i2.HeadwindRadioGroupService }], propDecorators: { valueChange: [{ type: Output }], radioList: [{ type: ContentChildren, args: [HeadwindRadioComponent, { descendants: true }] }], value: [{ type: Input }], disabled: [{ type: Input, args: [{ transform: booleanAttribute }] }], onHostBlur: [{ type: HostListener, args: ['blur'] }], onHostArrowUpKeydown: [{ type: HostListener, args: ['keydown.arrowUp', ['$event']] }], onHostArrowDownKeydown: [{ type: HostListener, args: ['keydown.arrowDown', ['$event']] }], onHostArrowLeftKeydown: [{ type: HostListener, args: ['keydown.arrowLeft', ['$event']] }], onHostArrowRightKeydown: [{ type: HostListener, args: ['keydown.arrowRight', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZHdpbmQtcmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaGVhZHdpbmQtdWkvc3JjL2NvbXBvbmVudHMvaGVhZHdpbmQtcmFkaW8tZ3JvdXAvaGVhZHdpbmQtcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaGVhZHdpbmQtdWkvc3JjL2NvbXBvbmVudHMvaGVhZHdpbmQtcmFkaW8tZ3JvdXAvaGVhZHdpbmQtcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQWVuRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsNEJBQTRCO0lBSzNFLFlBQ21CLHlCQUFtRCxFQUNuRCwwQkFBcUQ7UUFFdEUsS0FBSyxFQUFFLENBQUM7UUFIUyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBQ25ELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBMkI7UUFOOUQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBVTlDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZ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QUM7Z0JBUzdDLHVCQUF1QjtzQkFEdEIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSGVhZHdpbmRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4uLy4uL2Fic3RyYWN0cy9oZWFkd2luZC1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcclxuaW1wb3J0IHsgSGVhZHdpbmRSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vaGVhZHdpbmQtcmFkaW8vaGVhZHdpbmQtcmFkaW8uY29tcG9uZW50JztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBIZWFkd2luZFJhZGlvR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL2hlYWR3aW5kLXJhZGlvLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIZWFkd2luZFF1ZXJ5TGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWFkd2luZC1xdWVyeS1saXN0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdoZWFkd2luZC1yYWRpby1ncm91cCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZHdpbmQtcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9oZWFkd2luZC1yYWRpby1ncm91cC5jb21wb25lbnQuc2NzcycsXHJcbiAgaG9zdDoge1xyXG4gICAgdGFiaW5kZXg6ICcwJyxcclxuICAgIGNsYXNzOiAnaGVhZHdpbmQtcmFkaW8tZ3JvdXAnLFxyXG4gIH0sXHJcbiAgcHJvdmlkZXJzOiBbSGVhZHdpbmRSYWRpb0dyb3VwU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFkd2luZFJhZGlvR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBIZWFkd2luZENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihIZWFkd2luZFJhZGlvQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJhZGlvTGlzdD86IFF1ZXJ5TGlzdDxIZWFkd2luZFJhZGlvQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkd2luZFF1ZXJ5TGlzdFNlcnZpY2U6IEhlYWR3aW5kUXVlcnlMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hlYWR3aW5kUmFkaW9Hcm91cFNlcnZpY2U6IEhlYWR3aW5kUmFkaW9Hcm91cFNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMuX2hlYWR3aW5kUmFkaW9Hcm91cFNlcnZpY2Uuc2VsZWN0T3B0aW9uLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVhZHdpbmRSYWRpb0dyb3VwU2VydmljZS52YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2hlYWR3aW5kUmFkaW9Hcm91cFNlcnZpY2UudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdibHVyJylcclxuICBvbkhvc3RCbHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dVcCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ib3N0QXJyb3dVcEtleWRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy50b1ByZXZpb3VzT3B0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93RG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Ib3N0QXJyb3dEb3duS2V5ZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnRvTmV4dE9wdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0xlZnQnLCBbJyRldmVudCddKVxyXG4gIG9uSG9zdEFycm93TGVmdEtleWRvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgdGhpcy50b1ByZXZpb3VzT3B0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93UmlnaHQnLCBbJyRldmVudCddKVxyXG4gIG9uSG9zdEFycm93UmlnaHRLZXlkb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMudG9OZXh0T3B0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBzdXBlci51cGRhdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICB9XHJcblxyXG4gIHRvUHJldmlvdXNPcHRpb24oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgY29uc3QgY3VycmVudE9wdGlvbkluZGV4ID0gdGhpcy5fZmluZEluZGV4T2ZTZWxlY3RlZFJhZGlvKCk7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzT3B0aW9uSW5kZXggPSBNYXRoLm1heChjdXJyZW50T3B0aW9uSW5kZXggLSAxLCAwKTtcclxuXHJcbiAgICAgIGNvbnN0IHByZXZpb3VzT3B0aW9uID0gdGhpcy5yYWRpb0xpc3Q/LmdldChwcmV2aW91c09wdGlvbkluZGV4KTtcclxuXHJcbiAgICAgIGlmIChwcmV2aW91c09wdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUocHJldmlvdXNPcHRpb24udmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b05leHRPcHRpb24oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgY29uc3QgY3VycmVudE9wdGlvbkluZGV4ID0gdGhpcy5fZmluZEluZGV4T2ZTZWxlY3RlZFJhZGlvKCk7XHJcbiAgICAgIGNvbnN0IGxhc3RPcHRpb25JbmRleCA9ICh0aGlzLnJhZGlvTGlzdD8ubGVuZ3RoIHx8IDApIC0gMTtcclxuICAgICAgY29uc3QgbmV4dE9wdGlvbkluZGV4ID0gTWF0aC5taW4oY3VycmVudE9wdGlvbkluZGV4ICsgMSwgbGFzdE9wdGlvbkluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IG5leHRPcHRpb24gPSB0aGlzLnJhZGlvTGlzdD8uZ2V0KG5leHRPcHRpb25JbmRleCk7XHJcblxyXG4gICAgICBpZiAobmV4dE9wdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV4dE9wdGlvbi52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbmRJbmRleE9mU2VsZWN0ZWRSYWRpbygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hlYWR3aW5kUXVlcnlMaXN0U2VydmljZS5maW5kSW5kZXgodGhpcy5yYWRpb0xpc3QsIChyYWRpbykgPT4gcmFkaW8uc2VsZWN0ZWQpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiJdfQ==