@xui/components
Version:
xUI Components for Angular
107 lines • 14.4 kB
JavaScript
import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChildren, effect, input, model, Optional, QueryList, Self, signal } from '@angular/core';
import { NgControl } from '@angular/forms';
import { RADIO_LIST_ACCESSOR } from './radio-list.types';
import { XuiRadioOption } from './radio-option';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class XuiRadioList {
constructor(control) {
this.control = control;
this._mouseDown = false;
this._disabled = signal(false);
this._focusedValue = signal(null);
this.value = model(null);
this.size = input('md');
this.color = input('light');
this.disabled = input(undefined, {
transform: booleanAttribute
});
if (this.control) {
this.control.valueAccessor = this;
}
effect(() => this.disabled() && this._disabled.set(this.disabled()), { allowSignalWrites: true });
effect(() => this.value() != undefined && this.onChange?.(this.value()));
}
writeValue(source) {
this.value.set(source);
}
registerOnChange(onChange) {
this.onChange = onChange;
}
registerOnTouched(onTouched) {
this.onTouched = onTouched;
}
setDisabledState(isDisabled) {
this._disabled.set(isDisabled);
}
_prev(event) {
event.preventDefault();
event.stopPropagation();
this.select(true);
}
_next(event) {
event.preventDefault();
event.stopPropagation();
this.select(false);
}
_focusIn() {
if (!this._mouseDown) {
if (this.value() == null) {
this.select(false);
}
else {
this._focusedValue.set(this.value());
}
}
}
_focusOut() {
this._focusedValue.set(null);
this.onTouched?.();
}
select(backwards) {
if (this._disabled()) {
return;
}
const options = this.optionsRef.toArray();
let next = options.findIndex(x => x.value() == this.value());
let iterations = options.length;
do {
next += backwards ? options.length - 1 : 1;
next %= options.length;
if (!iterations--) {
throw 'No enabled options';
}
} while (options[next].disabled());
this.value.set(options[next].value());
this._focusedValue.set(this.value());
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: XuiRadioList, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.1", type: XuiRadioList, selector: "xui-radio-list", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "keydown.arrowup": "_prev($event)", "keydown.arrowdown": "_next($event)", "mousedown": "_mouseDown = true", "mouseup": "_mouseDown = false", "focusin": "_focusIn()", "focusout": "_focusOut()" }, properties: { "tabindex": "_disabled() ? -1 : 0" }, classAttribute: "x-radio-list" }, providers: [{ provide: RADIO_LIST_ACCESSOR, useExisting: XuiRadioList }], queries: [{ propertyName: "optionsRef", predicate: XuiRadioOption }], ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: XuiRadioList, decorators: [{
type: Component,
args: [{
selector: 'xui-radio-list',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content />',
providers: [{ provide: RADIO_LIST_ACCESSOR, useExisting: XuiRadioList }],
host: {
class: 'x-radio-list',
'[tabindex]': '_disabled() ? -1 : 0',
'(keydown.arrowup)': '_prev($event)',
'(keydown.arrowdown)': '_next($event)',
'(mousedown)': '_mouseDown = true',
'(mouseup)': '_mouseDown = false',
'(focusin)': '_focusIn()',
'(focusout)': '_focusOut()'
}
}]
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
type: Self
}, {
type: Optional
}] }], propDecorators: { optionsRef: [{
type: ContentChildren,
args: [XuiRadioOption]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMveHVpL3NyYy9yYWRpby1saXN0L3JhZGlvLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULElBQUksRUFDSixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsbUJBQW1CLEVBS3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFrQmhELE1BQU0sT0FBTyxZQUFZO0lBaUJ2QixZQUF1QyxPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBZDFELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixrQkFBYSxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7UUFFN0MsVUFBSyxHQUFHLEtBQUssQ0FBaUIsSUFBSSxDQUFDLENBQUM7UUFDcEMsU0FBSSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDbEMsVUFBSyxHQUFHLEtBQUssQ0FBaUIsT0FBTyxDQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLEtBQUssQ0FBd0MsU0FBUyxFQUFFO1lBQ2pFLFNBQVMsRUFBRSxnQkFBZ0I7U0FDNUIsQ0FBQyxDQUFDO1FBS0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUM7UUFFRCxN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QUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs4R0F6RlUsWUFBWTtrR0FBWixZQUFZLDQyQkFaWixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxxREEyQnZELGNBQWMsNkJBNUJyQixnQkFBZ0I7OzJGQWFmLFlBQVk7a0JBaEJ4QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLGNBQWMsRUFBRSxDQUFDO29CQUN4RSxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLFlBQVksRUFBRSxzQkFBc0I7d0JBQ3BDLG1CQUFtQixFQUFFLGVBQWU7d0JBQ3BDLHFCQUFxQixFQUFFLGVBQWU7d0JBQ3RDLGFBQWEsRUFBRSxtQkFBbUI7d0JBQ2xDLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLFdBQVcsRUFBRSxZQUFZO3dCQUN6QixZQUFZLEVBQUUsYUFBYTtxQkFDNUI7aUJBQ0Y7OzBCQWtCYyxJQUFJOzswQkFBSSxRQUFRO3lDQUZZLFVBQVU7c0JBQWxELGVBQWU7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNlbGYsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBSQURJT19MSVNUX0FDQ0VTU09SLFxuICBSYWRpb0xpc3RBY2Nlc3NvcixcbiAgUmFkaW9MaXN0Q29sb3IsXG4gIFJhZGlvTGlzdFNpemUsXG4gIFJhZGlvTGlzdFZhbHVlXG59IGZyb20gJy4vcmFkaW8tbGlzdC50eXBlcyc7XG5pbXBvcnQgeyBYdWlSYWRpb09wdGlvbiB9IGZyb20gJy4vcmFkaW8tb3B0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneHVpLXJhZGlvLWxpc3QnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudCAvPicsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogUkFESU9fTElTVF9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IFh1aVJhZGlvTGlzdCB9XSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAneC1yYWRpby1saXN0JyxcbiAgICAnW3RhYmluZGV4XSc6ICdfZGlzYWJsZWQoKSA/IC0xIDogMCcsXG4gICAgJyhrZXlkb3duLmFycm93dXApJzogJ19wcmV2KCRldmVudCknLFxuICAgICcoa2V5ZG93bi5hcnJvd2Rvd24pJzogJ19uZXh0KCRldmVudCknLFxuICAgICcobW91c2Vkb3duKSc6ICdfbW91c2VEb3duID0gdHJ1ZScsXG4gICAgJyhtb3VzZXVwKSc6ICdfbW91c2VEb3duID0gZmFsc2UnLFxuICAgICcoZm9jdXNpbiknOiAnX2ZvY3VzSW4oKScsXG4gICAgJyhmb2N1c291dCknOiAnX2ZvY3VzT3V0KCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgWHVpUmFkaW9MaXN0IGltcGxlbWVudHMgUmFkaW9MaXN0QWNjZXNzb3IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBvbkNoYW5nZT86IChzb3VyY2U6IFJhZGlvTGlzdFZhbHVlKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG4gIF9tb3VzZURvd24gPSBmYWxzZTtcblxuICBfZGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuICBfZm9jdXNlZFZhbHVlID0gc2lnbmFsPFJhZGlvTGlzdFZhbHVlPihudWxsKTtcblxuICB2YWx1ZSA9IG1vZGVsPFJhZGlvTGlzdFZhbHVlPihudWxsKTtcbiAgc2l6ZSA9IGlucHV0PFJhZGlvTGlzdFNpemU+KCdtZCcpO1xuICBjb2xvciA9IGlucHV0PFJhZGlvTGlzdENvbG9yPignbGlnaHQnKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCBib29sZWFuPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGVcbiAgfSk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihYdWlSYWRpb09wdGlvbikgcHJpdmF0ZSBvcHRpb25zUmVmITogUXVlcnlMaXN0PFh1aVJhZGlvT3B0aW9uPjtcblxuICBjb25zdHJ1Y3RvcihAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBjb250cm9sPzogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cblxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLmRpc2FibGVkKCkgJiYgdGhpcy5fZGlzYWJsZWQuc2V0KHRoaXMuZGlzYWJsZWQoKSEpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnZhbHVlKCkgIT0gdW5kZWZpbmVkICYmIHRoaXMub25DaGFuZ2U/Lih0aGlzLnZhbHVlKCkhKSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHNvdXJjZTogUmFkaW9MaXN0VmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlLnNldChzb3VyY2UpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHNvdXJjZTogUmFkaW9MaXN0VmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIF9wcmV2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdCh0cnVlKTtcbiAgfVxuXG4gIF9uZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlbGVjdChmYWxzZSk7XG4gIH1cblxuICBfZm9jdXNJbigpIHtcbiAgICBpZiAoIXRoaXMuX21vdXNlRG93bikge1xuICAgICAgaWYgKHRoaXMudmFsdWUoKSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRWYWx1ZS5zZXQodGhpcy52YWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZm9jdXNPdXQoKSB7XG4gICAgdGhpcy5fZm9jdXNlZFZhbHVlLnNldChudWxsKTtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdChiYWNrd2FyZHM6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNSZWYudG9BcnJheSgpO1xuICAgIGxldCBuZXh0ID0gb3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LnZhbHVlKCkgPT0gdGhpcy52YWx1ZSgpKTtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IG9wdGlvbnMubGVuZ3RoO1xuXG4gICAgZG8ge1xuICAgICAgbmV4dCArPSBiYWNrd2FyZHMgPyBvcHRpb25zLmxlbmd0aCAtIDEgOiAxO1xuICAgICAgbmV4dCAlPSBvcHRpb25zLmxlbmd0aDtcblxuICAgICAgaWYgKCFpdGVyYXRpb25zLS0pIHtcbiAgICAgICAgdGhyb3cgJ05vIGVuYWJsZWQgb3B0aW9ucyc7XG4gICAgICB9XG4gICAgfSB3aGlsZSAob3B0aW9uc1tuZXh0XS5kaXNhYmxlZCgpKTtcblxuICAgIHRoaXMudmFsdWUuc2V0KG9wdGlvbnNbbmV4dF0udmFsdWUoKSk7XG4gICAgdGhpcy5fZm9jdXNlZFZhbHVlLnNldCh0aGlzLnZhbHVlKCkpO1xuICB9XG59XG4iXX0=