xui
Version:
xUI Components for Angular
149 lines • 16 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, HostListener, Input, Optional, QueryList, Self } from '@angular/core';
import { NgControl } from '@angular/forms';
import { Subject } from 'rxjs';
import { RADIO_LIST_ACCESSOR } from './radio-list.types';
import { InputBoolean } from '../utils';
import { RadioOptionComponent } from './radio-option.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class RadioListComponent {
get value() {
return this._value;
}
set value(v) {
if (this._value !== v) {
this._value = v;
this.onChange?.(v);
this.onChange$.next(null);
}
}
constructor(cdr, control) {
this.cdr = cdr;
this.control = control;
this._mouseDown = false;
this._value = null;
this.size = 'md';
this.color = 'light';
this.disabled = false;
this.onChange$ = new Subject();
if (this.control) {
this.control.valueAccessor = this;
}
}
ngOnInit() {
this.control?.statusChanges?.subscribe(() => this.cdr.markForCheck());
}
writeValue(source) {
this.value = source;
}
registerOnChange(onChange) {
this.onChange = onChange;
}
registerOnTouched(onTouched) {
this.onTouched = onTouched;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
prev(event) {
event.preventDefault();
event.stopPropagation();
this.select(true);
}
next(event) {
event.preventDefault();
event.stopPropagation();
this.select(false);
}
mouseDown() {
this._mouseDown = true;
}
mouseUp() {
this._mouseDown = false;
}
focus() {
if (!this._mouseDown) {
this.focusedValue = this.value;
this.onChange$.next(null);
}
}
focusout() {
this.focusedValue = undefined;
this.onChange$.next(null);
this.onTouched?.();
}
select(prev) {
if (this.disabled) {
return;
}
const options = this.optionsRef.toArray();
let next = options.findIndex(x => x.value === this.value);
let iteration = 0;
do {
next += prev ? -1 : 1;
if (prev && next < 0) {
next = options.length - 1;
iteration++;
}
else if (!prev && next >= options.length) {
next = 0;
iteration++;
}
if (iteration == 2) {
return;
}
} while (options[next].disabled);
this.value = options[next].value;
this.focusedValue = this.value;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: RadioListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: RadioListComponent, selector: "xui-radio-list", inputs: { size: "size", color: "color", disabled: "disabled", value: "value" }, host: { listeners: { "keydown.arrowup": "prev($event)", "keydown.arrowdown": "next($event)", "mousedown": "mouseDown()", "mouseup": "mouseUp()", "focusin": "focus()", "focusout": "focusout()" } }, providers: [{ provide: RADIO_LIST_ACCESSOR, useExisting: RadioListComponent }], queries: [{ propertyName: "optionsRef", predicate: RadioOptionComponent }], ngImport: i0, template: '<div class="x-radio-list" tabindex="0"><ng-content></ng-content></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], RadioListComponent.prototype, "disabled", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: RadioListComponent, decorators: [{
type: Component,
args: [{
selector: 'xui-radio-list',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<div class="x-radio-list" tabindex="0"><ng-content></ng-content></div>',
providers: [{ provide: RADIO_LIST_ACCESSOR, useExisting: RadioListComponent }]
}]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
type: Self
}, {
type: Optional
}] }]; }, propDecorators: { size: [{
type: Input
}], color: [{
type: Input
}], disabled: [{
type: Input
}], optionsRef: [{
type: ContentChildren,
args: [RadioOptionComponent]
}], value: [{
type: Input
}], prev: [{
type: HostListener,
args: ['keydown.arrowup', ['$event']]
}], next: [{
type: HostListener,
args: ['keydown.arrowdown', ['$event']]
}], mouseDown: [{
type: HostListener,
args: ['mousedown']
}], mouseUp: [{
type: HostListener,
args: ['mouseup']
}], focus: [{
type: HostListener,
args: ['focusin']
}], focusout: [{
type: HostListener,
args: ['focusout']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3h1aS9zcmMvcmFkaW8tbGlzdC9yYWRpby1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixTQUFTLEVBQ1QsSUFBSSxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBU2hFLE1BQU0sT0FBTyxrQkFBa0I7SUFpQjdCLElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELFlBQW9CLEdBQXNCLEVBQTZCLE9BQW1CO1FBQXRFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQTZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF6QmxGLGVBQVUsR0FB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LENBQUMsUUFBUSxDQUFDO2dCQVFyQyxTQUFTO3NCQURoQixZQUFZO3VCQUFDLFdBQVc7Z0JBTWpCLE9BQU87c0JBRGQsWUFBWTt1QkFBQyxTQUFTO2dCQU1mLEtBQUs7c0JBRFosWUFBWTt1QkFBQyxTQUFTO2dCQVNmLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUXVlcnlMaXN0LFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFJBRElPX0xJU1RfQUNDRVNTT1IsXG4gIFJhZGlvTGlzdEFjY2Vzc29yLFxuICBSYWRpb0xpc3RDb2xvcixcbiAgUmFkaW9MaXN0U2l6ZSxcbiAgUmFkaW9MaXN0VmFsdWVcbn0gZnJvbSAnLi9yYWRpby1saXN0LnR5cGVzJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBSYWRpb09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8tb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4dWktcmFkaW8tbGlzdCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ4LXJhZGlvLWxpc3RcIiB0YWJpbmRleD1cIjBcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+JyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSQURJT19MSVNUX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogUmFkaW9MaXN0Q29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIFJhZGlvTGlzdEFjY2Vzc29yLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZT86IChzb3VyY2U6IFJhZGlvTGlzdFZhbHVlKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX21vdXNlRG93biA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogUmFkaW9MaXN0VmFsdWUgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNpemU6IFJhZGlvTGlzdFNpemUgPSAnbWQnO1xuICBASW5wdXQoKSBjb2xvcjogUmFkaW9MaXN0Q29sb3IgPSAnbGlnaHQnO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAQ29udGVudENoaWxkcmVuKFJhZGlvT3B0aW9uQ29tcG9uZW50KSBvcHRpb25zUmVmITogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG5cbiAgZm9jdXNlZFZhbHVlPzogUmFkaW9MaXN0VmFsdWU7XG4gIG9uQ2hhbmdlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB2KSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICB0aGlzLm9uQ2hhbmdlPy4odik7XG4gICAgICB0aGlzLm9uQ2hhbmdlJC5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29udHJvbD86IE5nQ29udHJvbCkge1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHNvdXJjZTogUmFkaW9MaXN0VmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gc291cmNlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHNvdXJjZTogUmFkaW9MaXN0VmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBwcmV2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBuZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdChmYWxzZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKVxuICBwcml2YXRlIG1vdXNlRG93bigpIHtcbiAgICB0aGlzLl9tb3VzZURvd24gPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIHByaXZhdGUgbW91c2VVcCgpIHtcbiAgICB0aGlzLl9tb3VzZURvd24gPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzaW4nKVxuICBwcml2YXRlIGZvY3VzKCkge1xuICAgIGlmICghdGhpcy5fbW91c2VEb3duKSB7XG4gICAgICB0aGlzLmZvY3VzZWRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlJC5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgcHJpdmF0ZSBmb2N1c291dCgpIHtcbiAgICB0aGlzLmZvY3VzZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uQ2hhbmdlJC5uZXh0KG51bGwpO1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0KHByZXY6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNSZWYudG9BcnJheSgpO1xuICAgIGxldCBuZXh0ID0gb3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LnZhbHVlID09PSB0aGlzLnZhbHVlKTtcbiAgICBsZXQgaXRlcmF0aW9uID0gMDtcblxuICAgIGRvIHtcbiAgICAgIG5leHQgKz0gcHJldiA/IC0xIDogMTtcblxuICAgICAgaWYgKHByZXYgJiYgbmV4dCA8IDApIHtcbiAgICAgICAgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICB9IGVsc2UgaWYgKCFwcmV2ICYmIG5leHQgPj0gb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dCA9IDA7XG4gICAgICAgIGl0ZXJhdGlvbisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlcmF0aW9uID09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKG9wdGlvbnNbbmV4dF0uZGlzYWJsZWQpO1xuXG4gICAgdGhpcy52YWx1ZSA9IG9wdGlvbnNbbmV4dF0udmFsdWU7XG4gICAgdGhpcy5mb2N1c2VkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICB9XG59XG4iXX0=