UNPKG

chi-app-lib

Version:

This is a custom component (input dropdown grid textarea map captcha) published to npm.

339 lines 20.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, forwardRef, Input, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core'; import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms'; /** @type {?} */ var noop = (/** * @return {?} */ function () { }); var ɵ0 = noop; /** * Error when invalid control is dirty or touched */ var /** * Error when invalid control is dirty or touched */ DropdownErrorStateMatcher = /** @class */ (function () { function DropdownErrorStateMatcher() { } /** * @param {?} control * @param {?} form * @return {?} */ DropdownErrorStateMatcher.prototype.isErrorState = /** * @param {?} control * @param {?} form * @return {?} */ function (control, form) { return !!(control && control.invalid && (control.dirty || control.touched)); }; return DropdownErrorStateMatcher; }()); /** * Error when invalid control is dirty or touched */ export { DropdownErrorStateMatcher }; /** @type {?} */ export var DROPDOWN_COMPONENT_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return DropdownComponent; })), multi: true }; var DropdownComponent = /** @class */ (function () { function DropdownComponent(ref) { this.ref = ref; this.options = []; this.direction = 'rtl'; this.floatLabel = 'auto'; // never // never this.pattern = ''; this.showValidatorMessage = true; this.isValid = new EventEmitter(); this.valueChanged = new EventEmitter(); this.matcher = new DropdownErrorStateMatcher(); this.id = 'chi-input' + this.idGenerator(); this.element = new FormControl(''); // The internal data model this.innerValue = ''; // Placeholders for the callbacks which are later provided // by the Control Value Accessor this.onTouchedCallback = noop; this.onChangeCallback = noop; } Object.defineProperty(DropdownComponent.prototype, "value", { // // get accessor get: // // get accessor /** * @return {?} */ function () { return this.innerValue; }, // set accessor including call the onchange callback set: // set accessor including call the onchange callback /** * @param {?} v * @return {?} */ function (v) { var _this = this; if (v !== this.innerValue) { this.innerValue = v; this.onChangeCallback(v); setTimeout((/** * @param {?} _ * @return {?} */ function (_) { _this.isValid.emit(_this.element.valid); }), 100); } }, enumerable: true, configurable: true }); // Set touched on blur // Set touched on blur /** * @param {?} validate * @return {?} */ DropdownComponent.prototype.onBlur = // Set touched on blur /** * @param {?} validate * @return {?} */ function (validate) { this.onTouchedCallback(); this.isValid.emit(this.element.valid); }; // From ControlValueAccessor interface // From ControlValueAccessor interface /** * @param {?} value * @return {?} */ DropdownComponent.prototype.writeValue = // From ControlValueAccessor interface /** * @param {?} value * @return {?} */ function (value) { var _this = this; if (value !== this.innerValue) { this.innerValue = value; setTimeout((/** * @param {?} _ * @return {?} */ function (_) { _this.isValid.emit(_this.element.valid); }), 100); } }; // From ControlValueAccessor interface // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ DropdownComponent.prototype.registerOnChange = // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ function (fn) { this.onChangeCallback = fn; }; // From ControlValueAccessor interface // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ DropdownComponent.prototype.registerOnTouched = // From ControlValueAccessor interface /** * @param {?} fn * @return {?} */ function (fn) { this.onTouchedCallback = fn; }; /** * @param {?} event * @param {?} validate * @return {?} */ DropdownComponent.prototype.changedInput = /** * @param {?} event * @param {?} validate * @return {?} */ function (event, validate) { var _this = this; setTimeout((/** * @param {?} _ * @return {?} */ function (_) { _this.isValid.emit(_this.element.valid); _this.valueChanged.emit(_this.value); }), 100); }; /** * @param {?} validate * @return {?} */ DropdownComponent.prototype.onFocused = /** * @param {?} validate * @return {?} */ function (validate) { this.isValid.emit(this.element.valid); }; /** * @return {?} */ DropdownComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @param {?} changes * @return {?} */ DropdownComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { /** @type {?} */ var name = changes.isDirty; if ((name || {})['currentValue']) { this.ref.markForCheck(); this.element.markAsDirty({ onlySelf: true }); } }; /** * @return {?} */ DropdownComponent.prototype.getErrorMessage = /** * @return {?} */ function () { return this.element.hasError('required') ? ' لا يمكن أن يكون هذا الحقل فارغًا!' : ''; }; /** * @return {?} */ DropdownComponent.prototype.idGenerator = /** * @return {?} */ function () { /** @type {?} */ var number = Math.random(); number.toString(36); return number.toString(36).substr(2, 9); }; DropdownComponent.decorators = [ { type: Component, args: [{ selector: 'lib-dropdown', template: "<div class=\"element-container\" [ngClass]=\"className\" dir=\"{{direction}}\">\n <mat-form-field [hideRequiredMarker]=\"true\" floatLabel=\"{{floatLabel}}\" >\n <mat-label>{{placeHolder}}</mat-label>\n <mat-select [(ngModel)]=\"value\"\n [formControl]=\"element\"\n [errorStateMatcher]=\"matcher\"\n [disableOptionCentering]=\"true\"\n #itemSelect\n required=\"{{required}}\"\n [disabled]=\"readonly\"\n (valueChange)=\"changedInput($event,element.valid)\">\n <mat-option *ngFor=\"let item of options\" [value]=\"item.value\">\n {{item.viewValue}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"element.invalid&&showValidatorMessage\">{{getErrorMessage()}}</mat-error>\n </mat-form-field>\n</div>\n", providers: [DROPDOWN_COMPONENT_CONTROL_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".element-container{display:flex;flex-direction:column}.element-container>*{width:100%}"] }] } ]; /** @nocollapse */ DropdownComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef } ]; }; DropdownComponent.propDecorators = { options: [{ type: Input }], direction: [{ type: Input }], floatLabel: [{ type: Input }], pattern: [{ type: Input }], className: [{ type: Input }], readonly: [{ type: Input }], required: [{ type: Input }], placeHolder: [{ type: Input }], showValidatorMessage: [{ type: Input }], isDirty: [{ type: Input }], isValid: [{ type: Output }], valueChanged: [{ type: Output }] }; return DropdownComponent; }()); export { DropdownComponent }; if (false) { /** @type {?} */ DropdownComponent.prototype.options; /** @type {?} */ DropdownComponent.prototype.direction; /** @type {?} */ DropdownComponent.prototype.floatLabel; /** @type {?} */ DropdownComponent.prototype.pattern; /** @type {?} */ DropdownComponent.prototype.className; /** @type {?} */ DropdownComponent.prototype.readonly; /** @type {?} */ DropdownComponent.prototype.required; /** @type {?} */ DropdownComponent.prototype.placeHolder; /** @type {?} */ DropdownComponent.prototype.showValidatorMessage; /** @type {?} */ DropdownComponent.prototype.isDirty; /** @type {?} */ DropdownComponent.prototype.isValid; /** @type {?} */ DropdownComponent.prototype.valueChanged; /** @type {?} */ DropdownComponent.prototype.matcher; /** @type {?} */ DropdownComponent.prototype.id; /** @type {?} */ DropdownComponent.prototype.element; /** * @type {?} * @private */ DropdownComponent.prototype.innerValue; /** * @type {?} * @private */ DropdownComponent.prototype.onTouchedCallback; /** * @type {?} * @private */ DropdownComponent.prototype.onChangeCallback; /** * @type {?} * @private */ DropdownComponent.prototype.ref; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2hpLWFwcC1saWIvIiwic291cmNlcyI6WyJsaWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFDL0MsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQXNCLGlCQUFpQixFQUE4QixNQUFNLGdCQUFnQixDQUFDOztJQUl6RyxJQUFJOzs7QUFBRztBQUNiLENBQUMsQ0FBQTs7Ozs7QUFHRDs7OztJQUFBO0lBSUEsQ0FBQzs7Ozs7O0lBSEMsZ0RBQVk7Ozs7O0lBQVosVUFBYSxPQUEyQixFQUFFLElBQXdDO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDSCxnQ0FBQztBQUFELENBQUMsQUFKRCxJQUlDOzs7Ozs7QUFFRCxNQUFNLEtBQU8seUNBQXlDLEdBQVE7SUFDNUQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsY0FBTSxPQUFBLGlCQUFpQixFQUFqQixDQUFpQixFQUFDO0lBQ2hELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFFRDtJQXNGRSwyQkFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3RWpDLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxRQUFROztRQUM3QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBS2IseUJBQW9CLEdB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LHNDQUEyQjs7SUFDM0IsdUNBQTZCOztJQUM3QixvQ0FBc0I7O0lBQ3RCLHNDQUFtQjs7SUFDbkIscUNBQWtCOztJQUNsQixxQ0FBa0I7O0lBQ2xCLHdDQUFxQjs7SUFDckIsaURBQXFDOztJQUNyQyxvQ0FBaUI7O0lBQ2pCLG9DQUFnRDs7SUFDaEQseUNBQWlEOztJQUNqRCxvQ0FBMEM7O0lBQzFDLCtCQUFzQzs7SUFDdEMsb0NBQThCOzs7OztJQUc5Qix1Q0FBNkI7Ozs7O0lBSTdCLDhDQUE2Qzs7Ozs7SUFDN0MsNkNBQWtEOzs7OztJQXVEdEMsZ0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgU2ltcGxlQ2hhbmdlLFxuICBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nRm9ybSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0Vycm9yU3RhdGVNYXRjaGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG4vKiogRXJyb3Igd2hlbiBpbnZhbGlkIGNvbnRyb2wgaXMgZGlydHkgb3IgdG91Y2hlZCovXG5leHBvcnQgY2xhc3MgRHJvcGRvd25FcnJvclN0YXRlTWF0Y2hlciBpbXBsZW1lbnRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCwgZm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlIHwgTmdGb3JtIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQgKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IERST1BET1dOX0NPTVBPTkVOVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEcm9wZG93bkNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtEUk9QRE9XTl9DT01QT05FTlRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBvcHRpb25zID0gW107XG4gIEBJbnB1dCgpIGRpcmVjdGlvbiA9ICdydGwnO1xuICBASW5wdXQoKSBmbG9hdExhYmVsID0gJ2F1dG8nOyAvLyBuZXZlclxuICBASW5wdXQoKSBwYXR0ZXJuID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZTtcbiAgQElucHV0KCkgcmVhZG9ubHk7XG4gIEBJbnB1dCgpIHJlcXVpcmVkO1xuICBASW5wdXQoKSBwbGFjZUhvbGRlcjtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRvck1lc3NhZ2UgPSB0cnVlO1xuICBASW5wdXQoKSBpc0RpcnR5O1xuICBAT3V0cHV0KCkgaXNWYWxpZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBtYXRjaGVyID0gbmV3IERyb3Bkb3duRXJyb3JTdGF0ZU1hdGNoZXIoKTtcbiAgaWQgPSAnY2hpLWlucHV0JyArIHRoaXMuaWRHZW5lcmF0b3IoKTtcbiAgZWxlbWVudCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgLy8gVGhlIGludGVybmFsIGRhdGEgbW9kZWxcbiAgcHJpdmF0ZSBpbm5lclZhbHVlOiBhbnkgPSAnJztcblxuICAvLyBQbGFjZWhvbGRlcnMgZm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggYXJlIGxhdGVyIHByb3ZpZGVkXG4gIC8vIGJ5IHRoZSBDb250cm9sIFZhbHVlIEFjY2Vzc29yXG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICAvL1xuICAvLyBnZXQgYWNjZXNzb3JcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgICBzZXRUaW1lb3V0KF8gPT4ge1xuICAgICAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgdG91Y2hlZCBvbiBibHVyXG4gIG9uQmx1cih2YWxpZGF0ZSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dChfID0+IHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgY2hhbmdlZElucHV0KGV2ZW50LCB2YWxpZGF0ZSkge1xuICAgIHNldFRpbWVvdXQoXyA9PiB7XG4gICAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgb25Gb2N1c2VkKHZhbGlkYXRlKSB7XG4gICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgbmFtZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5pc0RpcnR5O1xuICAgIGlmICgobmFtZSB8fCB7fSlbJ2N1cnJlbnRWYWx1ZSddKSB7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuZWxlbWVudC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJyDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2YfYsNinINin2YTYrdmC2YQg2YHYp9ix2LrZi9inIScgOiAnJztcbiAgfVxuXG4gIGlkR2VuZXJhdG9yKCkge1xuICAgIGNvbnN0IG51bWJlciA9IE1hdGgucmFuZG9tKCk7XG4gICAgbnVtYmVyLnRvU3RyaW5nKDM2KTtcbiAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gIH1cbn1cbiJdfQ==