xui
Version:
xUI Components for Angular
126 lines • 17.3 kB
JavaScript
var SelectComponent_1;
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input, Optional, Self } from '@angular/core';
import { NgControl } from '@angular/forms';
import { InputBoolean } from '../utils';
import { UntilDestroy } from '@ngneat/until-destroy';
import { SELECT_ACCESSOR } from './select.types';
import { Subject } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/common";
import * as i3 from "@angular/cdk/overlay";
import * as i4 from "../icon/icon.component";
import * as i5 from "./option.component";
import * as i6 from "@ngx-translate/core";
export let SelectComponent = class SelectComponent {
static { SelectComponent_1 = this; }
get value() {
return this._value;
}
set value(v) {
if (this._value !== v) {
this._value = v;
this.onChange?.(v);
this.onChange$.next(null);
}
}
get width() {
return this.elementRef.nativeElement.offsetWidth;
}
get viewValue() {
const item = this.items?.find(x => x.value === this.value);
return item?.label ?? this._viewValue;
}
set viewValue(value) {
this._viewValue = value;
this.cdr.detectChanges();
}
get styles() {
const ret = {
'x-select': true,
'x-select-disabled': this.disabled
};
ret[`x-select-${this.color}`] = true;
ret[`x-select-${this.size}`] = true;
return ret;
}
constructor(elementRef, cdr, control) {
this.elementRef = elementRef;
this.cdr = cdr;
this.control = control;
this._value = null;
this.isOpen = false;
this.onChange$ = new Subject();
this.disabled = false;
this.color = 'light';
this.size = 'large';
if (this.control) {
this.control.valueAccessor = this;
}
}
ngOnInit() {
this.control?.statusChanges?.subscribe(() => {
this.cdr.markForCheck();
});
}
open() {
this.isOpen = !this.disabled;
this.cdr.markForCheck();
}
close() {
this.isOpen = false;
this.cdr.markForCheck();
}
writeValue(source) {
this.value = source;
}
registerOnChange(onChange) {
this.onChange = onChange;
}
registerOnTouched(onTouched) {
this.onTouched = onTouched;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
_focusOut() {
this.onTouched?.();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: SelectComponent, deps: [{ token: i0.ElementRef }, { 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: SelectComponent, selector: "xui-select", inputs: { placeholder: "placeholder", disabled: "disabled", color: "color", size: "size", items: "items", value: "value" }, host: { listeners: { "focusout": "_focusOut()" } }, providers: [{ provide: SELECT_ACCESSOR, useExisting: SelectComponent_1 }], ngImport: i0, template: "<div [ngClass]=\"styles\" [tabindex]=\"disabled ? -1 : 0\" (click)=\"open()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n {{ !viewValue ? placeholder ?? ' ' : viewValue }}\n <xui-icon>{{ isOpen ? 'chevron-up' : 'chevron-down' }}</xui-icon>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent'\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayWidth]=\"width\"\n (backdropClick)=\"isOpen = false\"\n>\n <div class=\"x-select-options\">\n <xui-option *ngFor=\"let item of items\" [value]=\"item.value\">{{ item.label | translate }}</xui-option>\n <ng-content select=\"xui-option\"></ng-content>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i4.IconComponent, selector: "xui-icon" }, { kind: "component", type: i5.OptionComponent, selector: "xui-option", inputs: ["value", "disabled"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
};
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], SelectComponent.prototype, "disabled", void 0);
SelectComponent = SelectComponent_1 = __decorate([
UntilDestroy(),
__metadata("design:paramtypes", [ElementRef,
ChangeDetectorRef,
NgControl])
], SelectComponent);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: SelectComponent, decorators: [{
type: Component,
args: [{ selector: 'xui-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: SELECT_ACCESSOR, useExisting: SelectComponent }], template: "<div [ngClass]=\"styles\" [tabindex]=\"disabled ? -1 : 0\" (click)=\"open()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n {{ !viewValue ? placeholder ?? ' ' : viewValue }}\n <xui-icon>{{ isOpen ? 'chevron-up' : 'chevron-down' }}</xui-icon>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent'\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayWidth]=\"width\"\n (backdropClick)=\"isOpen = false\"\n>\n <div class=\"x-select-options\">\n <xui-option *ngFor=\"let item of items\" [value]=\"item.value\">{{ item.label | translate }}</xui-option>\n <ng-content select=\"xui-option\"></ng-content>\n </div>\n</ng-template>\n" }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
type: Self
}, {
type: Optional
}] }]; }, propDecorators: { placeholder: [{
type: Input
}], disabled: [{
type: Input
}], color: [{
type: Input
}], size: [{
type: Input
}], items: [{
type: Input
}], value: [{
type: Input
}], _focusOut: [{
type: HostListener,
args: ['focusout']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMveHVpL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMveHVpL3NyYy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFvRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBU3hCLFdBQU0sZUFBZSxHQUFyQixNQUFNLGVBQWU7O0lBZ0IxQixJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLENBQUM7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFB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QUFFO3FDQThEUyxVQUFVO1FBQ2pCLGlCQUFpQjtRQUNPLFNBQVM7R0F6RHJDLGVBQWUsQ0FvRzNCOzJGQXBHWSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVksbUJBQ0wsdUJBQXVCLENBQUMsTUFBTSxhQUVwQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLGlCQUFpQixFQUFFLENBQUM7OzBCQTJEcEUsSUFBSTs7MEJBQUksUUFBUTs0Q0EvQ1YsV0FBVztzQkFBbkIsS0FBSztnQkFDbUIsUUFBUTtzQkFBaEMsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHRixLQUFLO3NCQURSLEtBQUs7Z0JBaUZFLFNBQVM7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBTRUxFQ1RfQUNDRVNTT1IsIFNlbGVjdEFjY2Vzc29yLCBTZWxlY3RDb2xvciwgU2VsZWN0SXRlbSwgU2VsZWN0U2l6ZSwgU2VsZWN0VmFsdWUgfSBmcm9tICcuL3NlbGVjdC50eXBlcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3h1aS1zZWxlY3QnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICdzZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFNFTEVDVF9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IFNlbGVjdENvbXBvbmVudCB9XVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBTZWxlY3RBY2Nlc3NvciwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuXG4gIHByaXZhdGUgb25DaGFuZ2U/OiAoc291cmNlOiBTZWxlY3RWYWx1ZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF92YWx1ZTogU2VsZWN0VmFsdWUgPSBudWxsO1xuICBwcml2YXRlIF92aWV3VmFsdWU/OiBzdHJpbmc7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBvbkNoYW5nZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29sb3I6IFNlbGVjdENvbG9yID0gJ2xpZ2h0JztcbiAgQElucHV0KCkgc2l6ZTogU2VsZWN0U2l6ZSA9ICdsYXJnZSc7XG4gIEBJbnB1dCgpIGl0ZW1zPzogU2VsZWN0SXRlbVtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdikge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5vbkNoYW5nZT8uKHYpO1xuICAgICAgdGhpcy5vbkNoYW5nZSQubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICB9XG5cbiAgZ2V0IHZpZXdWYWx1ZSgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcz8uZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMudmFsdWUpO1xuICAgIHJldHVybiBpdGVtPy5sYWJlbCA/PyB0aGlzLl92aWV3VmFsdWU7XG4gIH1cblxuICBzZXQgdmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92aWV3VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgc3R5bGVzKCkge1xuICAgIGNvbnN0IHJldDogeyBba2xhc3M6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICAgICd4LXNlbGVjdCc6IHRydWUsXG4gICAgICAneC1zZWxlY3QtZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgfTtcblxuICAgIHJldFtgeC1zZWxlY3QtJHt0aGlzLmNvbG9yfWBdID0gdHJ1ZTtcbiAgICByZXRbYHgtc2VsZWN0LSR7dGhpcy5zaXplfWBdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBjb250cm9sPzogTmdDb250cm9sXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5pc09wZW4gPSAhdGhpcy5kaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHNvdXJjZTogU2VsZWN0VmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gc291cmNlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHNvdXJjZTogU2VsZWN0VmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnKVxuICBwcml2YXRlIF9mb2N1c091dCgpIHtcbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwic3R5bGVzXCIgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCIgKGNsaWNrKT1cIm9wZW4oKVwiIGNka092ZXJsYXlPcmlnaW4gI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCI+XG4gIHt7ICF2aWV3VmFsdWUgPyBwbGFjZWhvbGRlciA/PyAnJm5ic3A7JyA6IHZpZXdWYWx1ZSB9fVxuICA8eHVpLWljb24+e3sgaXNPcGVuID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bicgfX08L3h1aS1pY29uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3NdPVwiJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50J1wiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiaXNPcGVuXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJ3aWR0aFwiXG4gIChiYWNrZHJvcENsaWNrKT1cImlzT3BlbiA9IGZhbHNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cIngtc2VsZWN0LW9wdGlvbnNcIj5cbiAgICA8eHVpLW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwveHVpLW9wdGlvbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJ4dWktb3B0aW9uXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=