xui
Version:
xUI Components for Angular
133 lines • 17.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, Optional, Self } from '@angular/core';
import { NgControl } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { InputBoolean } from '../utils';
import { INPUT_GROUP_ACCESSOR } from './input.types';
import { INPUT_MODULE, WithConfig, XuiConfigService } from '../config';
import * as i0 from "@angular/core";
import * as i1 from "../config";
import * as i2 from "@ngx-translate/core";
import * as i3 from "@angular/forms";
import * as i4 from "@angular/common";
export class InputComponent {
get value() {
return this._value;
}
set value(v) {
if (this._value !== v) {
this._value = v;
this.onChange?.(v);
this.cdr.markForCheck();
}
}
get styles() {
const ret = {
'x-input': true,
'x-input-error': this.showError
};
ret[`x-input-${this.color}`] = true;
ret[`x-input-${this.group?.size ?? this.size}`] = true;
return ret;
}
get errorMessage() {
const msg = this.control?.getError('message');
return this.translation.instant(msg);
}
constructor(configService, cdr, translation, group, control) {
this.configService = configService;
this.cdr = cdr;
this.translation = translation;
this.group = group;
this.control = control;
this._moduleName = INPUT_MODULE;
this._value = null;
this.disabled = false;
this.readOnly = false;
this.color = 'light';
this.size = 'large';
this.type = 'text';
if (this.control) {
this.control.valueAccessor = this;
}
}
ngOnInit() {
this.control?.statusChanges?.subscribe(() => this.cdr.markForCheck());
}
get invalid() {
return !!this.control?.invalid;
}
get showError() {
if (!this.control) {
return false;
}
const { dirty, touched } = this.control;
return this.invalid ? (dirty ?? false) || (touched ?? false) : false;
}
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: InputComponent, deps: [{ token: i1.XuiConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.TranslateService }, { token: INPUT_GROUP_ACCESSOR, optional: true }, { token: i3.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: InputComponent, selector: "xui-input", inputs: { placeholder: "placeholder", disabled: "disabled", readOnly: "readOnly", color: "color", size: "size", type: "type", dataList: "dataList", value: "value" }, host: { listeners: { "focusout": "_focusOut()" } }, ngImport: i0, template: "<div [ngClass]=\"styles\" [tabindex]=\"disabled ? -1 : 0\">\n <ng-content select=\"[xuiPrefix]\"></ng-content>\n <input\n tabindex=\"-1\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeholder ?? ''\"\n [(ngModel)]=\"value\"\n list=\"list\"\n />\n <ng-content select=\"[xuiPostfix]\"></ng-content>\n</div>\n\n<div class=\"x-input-error-text\" *ngIf=\"showError\">\n <ng-container *ngIf=\"control?.hasError('message')\">{{ errorMessage }}</ng-container>\n <ng-container *ngIf=\"control?.hasError('required')\">This field is required!</ng-container>\n <ng-container *ngIf=\"control?.hasError('email')\">Email expected</ng-container>\n</div>\n\n<datalist id=\"list\" *ngIf=\"dataList\">\n <option *ngFor=\"let item of dataList\" [value]=\"item\"></option>\n</datalist>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], InputComponent.prototype, "disabled", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], InputComponent.prototype, "readOnly", void 0);
__decorate([
WithConfig(),
__metadata("design:type", String)
], InputComponent.prototype, "color", void 0);
__decorate([
WithConfig(),
__metadata("design:type", String)
], InputComponent.prototype, "size", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: InputComponent, decorators: [{
type: Component,
args: [{ selector: 'xui-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"styles\" [tabindex]=\"disabled ? -1 : 0\">\n <ng-content select=\"[xuiPrefix]\"></ng-content>\n <input\n tabindex=\"-1\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeholder ?? ''\"\n [(ngModel)]=\"value\"\n list=\"list\"\n />\n <ng-content select=\"[xuiPostfix]\"></ng-content>\n</div>\n\n<div class=\"x-input-error-text\" *ngIf=\"showError\">\n <ng-container *ngIf=\"control?.hasError('message')\">{{ errorMessage }}</ng-container>\n <ng-container *ngIf=\"control?.hasError('required')\">This field is required!</ng-container>\n <ng-container *ngIf=\"control?.hasError('email')\">Email expected</ng-container>\n</div>\n\n<datalist id=\"list\" *ngIf=\"dataList\">\n <option *ngFor=\"let item of dataList\" [value]=\"item\"></option>\n</datalist>\n" }]
}], ctorParameters: function () { return [{ type: i1.XuiConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.TranslateService }, { type: undefined, decorators: [{
type: Inject,
args: [INPUT_GROUP_ACCESSOR]
}, {
type: Optional
}] }, { type: i3.NgControl, decorators: [{
type: Self
}, {
type: Optional
}] }]; }, propDecorators: { placeholder: [{
type: Input
}], disabled: [{
type: Input
}], readOnly: [{
type: Input
}], color: [{
type: Input
}], size: [{
type: Input
}], type: [{
type: Input
}], dataList: [{
type: Input
}], value: [{
type: Input
}], _focusOut: [{
type: HostListener,
args: ['focusout']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy94dWkvc3JjL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMveHVpL3NyYy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBd0QsTUFBTSxlQUFlLENBQUM7QUFFM0csT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7OztBQU92RSxNQUFNLE9BQU8sY0FBYztJQWlCekIsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixNQUFNLEdBQUcsR0FBaUM7WUFDeEMsU0FBUyxFQUFFLElB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LFVBQVUsRUFBRTs7NENBQTJCOzJGQWJ0QyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVcsbUJBQ0osdUJBQXVCLENBQUMsTUFBTTs7MEJBcUQ1QyxNQUFNOzJCQUFDLG9CQUFvQjs7MEJBQUcsUUFBUTs7MEJBQ3RDLElBQUk7OzBCQUFJLFFBQVE7NENBMUNWLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ21CLFFBQVE7c0JBQWhDLEtBQUs7Z0JBQ21CLFFBQVE7c0JBQWhDLEtBQUs7Z0JBQ2lCLEtBQUs7c0JBQTNCLEtBQUs7Z0JBQ2lCLElBQUk7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQTJFRSxTQUFTO3NCQURoQixZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IElOUFVUX0dST1VQX0FDQ0VTU09SLCBJbnB1dENvbG9yLCBJbnB1dEdyb3VwQWNjZXNzb3IsIElucHV0U2l6ZSwgSW5wdXRUeXBlIH0gZnJvbSAnLi9pbnB1dC50eXBlcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSU5QVVRfTU9EVUxFLCBXaXRoQ29uZmlnLCBYdWlDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneHVpLWlucHV0JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnaW5wdXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVhZE9ubHk6IEJvb2xlYW5JbnB1dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9kdWxlTmFtZSA9IElOUFVUX01PRFVMRTtcblxuICBwcml2YXRlIG9uQ2hhbmdlPzogKHNvdXJjZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVhZE9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBjb2xvcjogSW5wdXRDb2xvciA9ICdsaWdodCc7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2l6ZTogSW5wdXRTaXplID0gJ2xhcmdlJztcbiAgQElucHV0KCkgdHlwZTogSW5wdXRUeXBlID0gJ3RleHQnO1xuICBASW5wdXQoKSBkYXRhTGlzdD86IHN0cmluZ1tdIHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHYpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IHYpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMub25DaGFuZ2U/Lih2KTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdHlsZXMoKSB7XG4gICAgY29uc3QgcmV0OiB7IFtrbGFzczogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgJ3gtaW5wdXQnOiB0cnVlLFxuICAgICAgJ3gtaW5wdXQtZXJyb3InOiB0aGlzLnNob3dFcnJvclxuICAgIH07XG5cbiAgICByZXRbYHgtaW5wdXQtJHt0aGlzLmNvbG9yfWBdID0gdHJ1ZTtcbiAgICByZXRbYHgtaW5wdXQtJHt0aGlzLmdyb3VwPy5zaXplID8/IHRoaXMuc2l6ZX1gXSA9IHRydWU7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGdldCBlcnJvck1lc3NhZ2UoKSB7XG4gICAgY29uc3QgbXNnID0gdGhpcy5jb250cm9sPy5nZXRFcnJvcignbWVzc2FnZScpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQobXNnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogWHVpQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRlU2VydmljZSxcbiAgICBASW5qZWN0KElOUFVUX0dST1VQX0FDQ0VTU09SKSBAT3B0aW9uYWwoKSBwcml2YXRlIGdyb3VwOiBJbnB1dEdyb3VwQWNjZXNzb3IsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29udHJvbD86IE5nQ29udHJvbFxuICApIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250cm9sPy5zdGF0dXNDaGFuZ2VzPy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICB9XG5cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb250cm9sPy5pbnZhbGlkO1xuICB9XG5cbiAgZ2V0IHNob3dFcnJvcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGlydHksIHRvdWNoZWQgfSA9IHRoaXMuY29udHJvbDtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gKGRpcnR5ID8/IGZhbHNlKSB8fCAodG91Y2hlZCA/PyBmYWxzZSkgOiBmYWxzZTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoc291cmNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gc291cmNlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHNvdXJjZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIHByaXZhdGUgX2ZvY3VzT3V0KCkge1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJzdHlsZXNcIiBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3h1aVByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gIDxpbnB1dFxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcbiAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPz8gJydcIlxuICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgIGxpc3Q9XCJsaXN0XCJcbiAgLz5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3h1aVBvc3RmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJ4LWlucHV0LWVycm9yLXRleHRcIiAqbmdJZj1cInNob3dFcnJvclwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbD8uaGFzRXJyb3IoJ21lc3NhZ2UnKVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbD8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5UaGlzIGZpZWxkIGlzIHJlcXVpcmVkITwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbD8uaGFzRXJyb3IoJ2VtYWlsJylcIj5FbWFpbCBleHBlY3RlZDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkYXRhbGlzdCBpZD1cImxpc3RcIiAqbmdJZj1cImRhdGFMaXN0XCI+XG4gIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUxpc3RcIiBbdmFsdWVdPVwiaXRlbVwiPjwvb3B0aW9uPlxuPC9kYXRhbGlzdD5cbiJdfQ==