UNPKG

@doku-dev/doku-fragment

Version:

A new Angular UI library that moving away from Bootstrap and built from scratch.

118 lines 13.3 kB
import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { ReplaySubject, map, startWith, takeUntil } from 'rxjs'; import { DOKU_RADIO } from './token'; import * as i0 from "@angular/core"; let nextId = 1; export class DokuRadioGroup { constructor() { /** * Name of the radio button group. * All radio buttons inside this group will use this name. * @default 'd-radio-group-[nextId]' */ this.name = `d-radio-group-${nextId++}`; /** * Whether the radio group is disabled. * If `true`, all radio buttons inside this group will be disabled. * @default false */ this.disabled = false; /** * Value of the checked radio button. * @default '' */ this.value = ''; /** * Event emitted when the value changes. */ this.valueChange = new EventEmitter(); this._notifyChanges$ = new ReplaySubject(); this.destroy$ = new ReplaySubject(); } ngOnChanges() { this.radios?.notifyOnChanges(); } ngAfterContentInit() { this.radios?.changes .pipe(startWith(this.radios), map((radios) => radios.toArray()), takeUntil(this.destroy$)) .subscribe((radios) => { this.injectRadios(radios); }); } ngOnDestroy() { this.destroy$.next(true); this.destroy$.complete(); } writeValue(value) { this.value = value; this.radios?.notifyOnChanges(); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; this.radios?.notifyOnChanges(); } injectRadios(radios) { radios.forEach((radio) => { if (this.name) radio.name = this.name; radio.disabled = this.disabled || radio.disabled; radio['checkedChangeCallback'] = (value, checked) => { this.value = checked ? value : ''; this.onChange?.(this.value); this.onTouched?.(); this.valueChange.emit(this.value); this._notifyChanges$.next(true); }; radio.checked = radio.value === this.value; radio['cdr'].detectChanges(); }); this._notifyChanges$.next(true); } } DokuRadioGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); DokuRadioGroup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuRadioGroup, isStandalone: true, selector: "doku-radio-group", inputs: { name: "name", disabled: "disabled", value: "value" }, outputs: { valueChange: "valueChange" }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: DokuRadioGroup, multi: true, }, ], queries: [{ propertyName: "radios", predicate: DOKU_RADIO }], exportAs: ["dokuRadioGroup"], usesOnChanges: true, ngImport: i0, template: `<ng-content select="doku-radio"></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuRadioGroup, decorators: [{ type: Component, args: [{ selector: 'doku-radio-group', exportAs: 'dokuRadioGroup', standalone: true, imports: [CommonModule], template: `<ng-content select="doku-radio"></ng-content>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: DokuRadioGroup, multi: true, }, ], }] }], propDecorators: { name: [{ type: Input }], disabled: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], radios: [{ type: ContentChildren, args: [DOKU_RADIO] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL3JhZGlvL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVyQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFrQmYsTUFBTSxPQUFPLGNBQWM7SUFoQjNCO1FBbUJFOzs7O1dBSUc7UUFDTSxTQUFJLEdBQUcsaUJBQWlCLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFNUM7Ozs7V0FJRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQjs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUl6QyxvQkFBZSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDeEMsYUFBUSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7S0E0RHhDO0lBMURDLFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLE1B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QUFFLCtDQUErQztvQkFDekQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxnQkFBZ0I7NEJBQzNCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGOzhCQVNVLElBQUk7c0JBQVosS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSztnQkFLSSxXQUFXO3NCQUFwQixNQUFNO2dCQUU4QixNQUFNO3NCQUExQyxlQUFlO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIG1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERva3VSYWRpbyB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IERPS1VfUkFESU8gfSBmcm9tICcuL3Rva2VuJztcblxubGV0IG5leHRJZCA9IDE7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rva3UtcmFkaW8tZ3JvdXAnLFxuICBleHBvcnRBczogJ2Rva3VSYWRpb0dyb3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZG9rdS1yYWRpb1wiPjwvbmctY29udGVudD5gLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRG9rdVJhZGlvR3JvdXAsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2t1UmFkaW9Hcm91cFxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmFkaW8gYnV0dG9uIGdyb3VwLlxuICAgKiBBbGwgcmFkaW8gYnV0dG9ucyBpbnNpZGUgdGhpcyBncm91cCB3aWxsIHVzZSB0aGlzIG5hbWUuXG4gICAqIEBkZWZhdWx0ICdkLXJhZGlvLWdyb3VwLVtuZXh0SWRdJ1xuICAgKi9cbiAgQElucHV0KCkgbmFtZSA9IGBkLXJhZGlvLWdyb3VwLSR7bmV4dElkKyt9YDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmFkaW8gZ3JvdXAgaXMgZGlzYWJsZWQuXG4gICAqIElmIGB0cnVlYCwgYWxsIHJhZGlvIGJ1dHRvbnMgaW5zaWRlIHRoaXMgZ3JvdXAgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBjaGVja2VkIHJhZGlvIGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oRE9LVV9SQURJTykgcHJpdmF0ZSByYWRpb3M/OiBRdWVyeUxpc3Q8RG9rdVJhZGlvPjtcblxuICBwcm90ZWN0ZWQgX25vdGlmeUNoYW5nZXMkID0gbmV3IFJlcGxheVN1YmplY3QoKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5yYWRpb3M/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmFkaW9zPy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMucmFkaW9zKSxcbiAgICAgICAgbWFwKChyYWRpb3M6IFF1ZXJ5TGlzdDxEb2t1UmFkaW8+KSA9PiByYWRpb3MudG9BcnJheSgpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyYWRpb3MpID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3RSYWRpb3MocmFkaW9zKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uQ2hhbmdlPzogKF86IGFueSkgPT4gdm9pZDtcbiAgb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5yYWRpb3M/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5yYWRpb3M/Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmplY3RSYWRpb3MocmFkaW9zOiBEb2t1UmFkaW9bXSkge1xuICAgIHJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xuICAgICAgaWYgKHRoaXMubmFtZSkgcmFkaW8ubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgIHJhZGlvLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCByYWRpby5kaXNhYmxlZDtcbiAgICAgIHJhZGlvWydjaGVja2VkQ2hhbmdlQ2FsbGJhY2snXSA9ICh2YWx1ZTogc3RyaW5nLCBjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjaGVja2VkID8gdmFsdWUgOiAnJztcbiAgICAgICAgdGhpcy5vbkNoYW5nZT8uKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlcyQubmV4dCh0cnVlKTtcbiAgICAgIH07XG4gICAgICByYWRpby5jaGVja2VkID0gcmFkaW8udmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICByYWRpb1snY2RyJ10uZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuX25vdGlmeUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==