ngx-form-control
Version:
Form controls for angular 6
2 lines • 34.2 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/forms"),require("@angular/platform-browser")):"function"==typeof define&&define.amd?define("ngx-form-control",["exports","@angular/core","@angular/forms","@angular/platform-browser"],t):t(e["ngx-form-control"]={},e.ng.core,e.ng.forms,e.ng.platformBrowser)}(this,function(e,n,r,t){"use strict";var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function s(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function a(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function o(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,s=n.call(e),o=[];try{for(;(void 0===t||0<t--)&&!(r=s.next()).done;)o.push(r.value)}catch(l){i={error:l}}finally{try{r&&!r.done&&(n=s["return"])&&n.call(s)}finally{if(i)throw i.error}}return o}var l=function(){function e(){this.id="ngx-"+Math.floor(65536*(1+Math.random())).toString(16).substring(1),this.innerCustomErrorMessages=[],this.name="",this.label="",this.placeholder="",this.title="",this.required=!1,this.disabled=!1,this.validMessage="",this.requiredErrorMessage="This field is required."}return Object.defineProperty(e.prototype,"customErrorMessages",{set:function(e){e?"string"==typeof e?this.innerCustomErrorMessages=[e]:e[0]?this.innerCustomErrorMessages=e:this.innerCustomErrorMessages=[]:this.innerCustomErrorMessages=[]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasCustomError",{get:function(){return!(!this.innerCustomErrorMessages||!this.innerCustomErrorMessages[0])},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasRequiredError",{get:function(){return this.required&&!1!==this.value&&0!==this.value&&!this.value},enumerable:!0,configurable:!0}),e.prototype.registerOnChange=function(t){var n=this;this._onChangeCallback=function(e){return n.cleanCustomErrorMessageOnChanged&&(n.innerCustomErrorMessages=[]),t(e)}},e.prototype.registerOnTouched=function(e){this._onTouchedCallback=e},e.prototype.triggerChange=function(){this._onChangeCallback&&this._onChangeCallback(this.value)},e.propDecorators={name:[{type:n.Input}],label:[{type:n.Input}],placeholder:[{type:n.Input}],title:[{type:n.Input}],required:[{type:n.Input}],disabled:[{type:n.Input}],validMessage:[{type:n.Input}],requiredErrorMessage:[{type:n.Input}],cleanCustomErrorMessageOnChanged:[{type:n.Input}],customErrorMessages:[{type:n.Input}]},e}(),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._options=[],e._selectOptions=[],e._selectedIndexes=[],e}return s(e,t),Object.defineProperty(e.prototype,"textKey",{set:function(e){this._textKey=e,this.initOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valueKey",{set:function(e){this._valueKey=e,this.initOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"comparedKey",{set:function(e){this._comparedKey=e,this.initOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"options",{set:function(e){this._options=e,this.initOptions()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selectOptions",{get:function(){return this._selectOptions},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selectedIndexes",{get:function(){return this._selectedIndexes},set:function(e){var t=JSON.stringify(this._selectedIndexes);this._selectedIndexes=e&&e.length?e.reduce(function(e,t){return-1<(t=+t)&&e.push(t),e},[]):[],JSON.stringify(this._selectedIndexes)!==t&&this.triggerChange()},enumerable:!0,configurable:!0}),e.prototype.findIndex=function(e){var t=this.getComparedValue(e);return this._selectOptions.findIndex(function(e){return t===e.comparedValue})},e.prototype.findIndexes=function(e){var r=this;return e&&e.length?e.reduce(function(e,t){var n=r.findIndex(t);return-1<n&&e.push(n),e},[]):[]},e.prototype.initOptions=function(){var i=this;this.beforeInitOptions();var e=this.value;this._selectOptions=[],this._options&&this._options.length&&this._options.map(function(e,t){var n,r;"string"==typeof e||"number"==typeof e?r=n=e:(n=e[i._textKey||"text"],r=i._valueKey?e[i._valueKey]:e),i._selectOptions.push({id:t,text:n,value:r,comparedValue:i.getComparedValue(e)})}),this.afterInitOptions(),this.writeValue(e);var t=this.value;JSON.stringify(e)!==JSON.stringify(t)&&this.triggerChange()},e.prototype.beforeInitOptions=function(){},e.prototype.afterInitOptions=function(){},e.prototype.getComparedValue=function(e){return e?"string"==typeof e||"number"==typeof e?e:"string"==typeof(t=this._comparedKey?e[this._comparedKey]:this._valueKey?e[this._valueKey]:e)||"number"==typeof t?t:JSON.stringify(t):"";var t},e.propDecorators={textKey:[{type:n.Input}],valueKey:[{type:n.Input}],comparedKey:[{type:n.Input}],options:[{type:n.Input}]},e}(l),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._isTouched=!1,e}return s(e,t),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return!this._selectedIndexes||!this._selectedIndexes.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){var t=this;return this.isEmpty?null:this._selectedIndexes.map(function(e){return t._selectOptions[e].value})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this._isTouched&&this.hasRequiredError},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this._isTouched&&!this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasCustomError?this.innerCustomErrorMessages:this.hasRequiredError?[this.requiredErrorMessage]:void 0},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t,n,r=this,i=this.listRadioElement.nativeElement.querySelectorAll(".custom-control-input");try{for(var s=a(i),o=s.next();!o.done;o=s.next()){o.value.checked=!1}}catch(l){t={error:l}}finally{try{o&&!o.done&&(n=s["return"])&&n.call(s)}finally{if(t)throw t.error}}e&&(this._selectedIndexes=this.findIndexes(e),this.listRadioElement&&this.listRadioElement.nativeElement&&this.value&&setTimeout(function(){r._selectedIndexes.map(function(e){i[e].checked=!0})}))},e.prototype.validate=function(){var e={};return this.hasRequiredError&&(e.required=!0),e},e.prototype.toggle=function(e,t){if(this._isTouched=!0,e=+e,t.target.checked)this._selectedIndexes.push(e);else{var n=this._selectedIndexes.indexOf(e);-1<n&&this._selectedIndexes.splice(n,1)}this.triggerChange()},e.prototype.reset=function(){this._isTouched=!1},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-checkbox",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n<div #listRadioElement>\n <div class="custom-control custom-checkbox" *ngFor="let option of selectOptions; let index = index;">\n <input class="custom-control-input"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n type="checkbox"\n [id]="id + \'-\' + index"\n [name]="id"\n (click)="toggle(index, $event)"\n title="">\n <label class="custom-control-label" [for]="id + \'-\' + index">{{option.text}}</label>\n </div>\n</div>\n\n<ng-container *ngIf="valid && validMessage">\n <div class="custom-control-input is-valid"></div>\n <div class="valid-feedback">{{validMessage}}</div>\n</ng-container>\n\n<ng-container *ngIf="invalid">\n <div class="custom-control-input is-invalid"></div>\n <div class="invalid-feedback">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n </div>\n</ng-container>\n',styles:[":host .form-check.is-valid~.invalid-feedback,:host .form-check.is-valid~.invalid-tooltip,:host .form-check.is-valid~.valid-feedback,:host .form-check.is-valid~.valid-tooltip,:host .was-validated~.invalid-feedback,:host .was-validated~.invalid-tooltip,:host .was-validated~.valid-feedback,:host .was-validated~.valid-tooltip{display:block}"],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={listRadioElement:[{type:n.ViewChild,args:["listRadioElement"]}]},e}(u),d=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="text",e.pattern="",e.readonly=!1,e.autocomplete=!0,e.trimResult=!0,e.minLengthErrorMessage="Value is too short.",e.patternErrorMessage="Value is not valid.",e.matchErrorMessage="Value does not match.",e.focus=new n.EventEmitter,e.blur=new n.EventEmitter,e}return s(e,t),Object.defineProperty(e.prototype,"match",{set:function(e){this._match=e||"",this.triggerChange()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._innerValue?"string"!=typeof this._innerValue?this._innerValue:this.trimResult?this._innerValue.trim():this._innerValue:""},set:function(e){e!==this._innerValue&&(this._innerValue=e,this.triggerChange())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasMatchError",{get:function(){return!!this._match&&this._match!==this.value},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasPatternError",{get:function(){return this.customInput.errors&&this.customInput.errors.pattern},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasMinLengthError",{get:function(){return this.customInput.errors&&this.customInput.errors.minlength},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this.customInput.touched&&(this.customInput.invalid||this.hasMatchError||this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this.customInput.touched&&(!this.customInput.invalid&&!this.hasMatchError&&!this.hasRequiredError))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasMatchError?[this.matchErrorMessage]:this.hasPatternError?[this.patternErrorMessage]:this.hasMinLengthError?[this.minLengthErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this._innerValue=e},e.prototype.validate=function(){var e=this.customInput.errors||{};return this.hasRequiredError?e.required=!0:delete e.required,this.hasMatchError&&(e.match=!0),e},e.prototype.reset=function(){this.customInput.reset()},e.prototype.onFocus=function(e){this.focus.emit(e)},e.prototype.onBlur=function(e){this.blur.emit(e)},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-input",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n\x3c!--suppress HtmlFormInputWithoutLabel --\x3e\n<input class="form-control"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n [type]="type"\n [id]="id"\n [required]="required"\n [disabled]="disabled"\n [readonly]="readonly"\n [minlength]="minlength"\n [maxlength]="maxlength"\n [placeholder]="placeholder"\n [title]="title"\n [pattern]="pattern"\n [(ngModel)]="value"\n (input)="triggerChange()"\n [autocomplete]="autocomplete ? \'on\' : \'off\'"\n (focus)="onFocus($event)"\n (blur)="onBlur($event)"\n #customInput="ngModel">\n\n<div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>\n\n<div class="invalid-feedback" *ngIf="invalid">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n</div>\n',styles:[""],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={type:[{type:n.Input}],pattern:[{type:n.Input}],readonly:[{type:n.Input}],autocomplete:[{type:n.Input}],minlength:[{type:n.Input}],maxlength:[{type:n.Input}],trimResult:[{type:n.Input}],minLengthErrorMessage:[{type:n.Input}],patternErrorMessage:[{type:n.Input}],matchErrorMessage:[{type:n.Input}],customInput:[{type:n.ViewChild,args:["customInput"]}],match:[{type:n.Input}],focus:[{type:n.Output}],blur:[{type:n.Output}]},e}(l),p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._isTouched=!1,e}return s(e,t),Object.defineProperty(e.prototype,"isEmpty",{get:function(){return!this._selectedIndexes||!this._selectedIndexes.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.isEmpty?null:this._selectOptions[this._selectedIndexes[0]].value},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this._isTouched&&this.hasRequiredError},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this._isTouched&&!this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t,n,r=this,i=this.listRadioElement.nativeElement.querySelectorAll(".custom-control-input");try{for(var s=a(i),o=s.next();!o.done;o=s.next()){o.value.checked=!1}}catch(l){t={error:l}}finally{try{o&&!o.done&&(n=s["return"])&&n.call(s)}finally{if(t)throw t.error}}e&&(this._selectedIndexes=this.findIndexes([e]),this.listRadioElement&&this.listRadioElement.nativeElement&&this.value&&setTimeout(function(){var e=r._selectedIndexes[0];i[e].checked=!0}))},e.prototype.validate=function(){var e={};return this.hasRequiredError&&(e.required=!0),e},e.prototype.toggle=function(e,t){this._isTouched=!0,e=+e,this.required||e!==this._selectedIndexes[0]?this._selectedIndexes=[+e]:(this._selectedIndexes=[],t.target.checked=!1),this.triggerChange()},e.prototype.reset=function(){this._isTouched=!1},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-radio",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n<div #listRadioElement>\n <div class="custom-control custom-radio" *ngFor="let option of selectOptions; let index = index;">\n <input class="custom-control-input"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n type="radio"\n [id]="id + \'-\' + index"\n [name]="id"\n (click)="toggle(index, $event)"\n title="">\n <label class="custom-control-label" [for]="id + \'-\' + index">{{option.text}}</label>\n </div>\n</div>\n\n<ng-container *ngIf="valid && validMessage">\n <div class="custom-control-input is-valid"></div>\n <div class="valid-feedback">{{validMessage}}</div>\n</ng-container>\n\n<ng-container *ngIf="invalid">\n <div class="custom-control-input is-invalid"></div>\n <div class="invalid-feedback">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n </div>\n</ng-container>\n',styles:[":host .form-check.is-valid~.invalid-feedback,:host .form-check.is-valid~.invalid-tooltip,:host .form-check.is-valid~.valid-feedback,:host .form-check.is-valid~.valid-tooltip,:host .was-validated~.invalid-feedback,:host .was-validated~.invalid-tooltip,:host .was-validated~.valid-feedback,:host .was-validated~.valid-tooltip{display:block}"],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={listRadioElement:[{type:n.ViewChild,args:["listRadioElement"]}]},e}(u),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return s(t,e),Object.defineProperty(t.prototype,"multiple",{get:function(){return this._multiple},set:function(e){this._multiple=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isEmpty",{get:function(){return!this._selectedIndexes||!this._selectedIndexes.length||1===this._selectedIndexes.length&&-1===this._selectedIndexes[0]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"value",{get:function(){var t=this;if(this.isEmpty)return null;if(this._multiple)return this._selectedIndexes.map(function(e){return t._selectOptions[e].value});var e=this._selectedIndexes[0];return this.selectOptions[e].value},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this.customSelect.touched&&(this.customSelect.invalid||this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this.customSelect.touched&&(!this.customSelect.invalid&&!this.hasRequiredError))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),t.prototype.writeValue=function(e){this.multiple||(e=[e]),this._selectedIndexes=this.findIndexes(e)},t.prototype.validate=function(){var e=this.customSelect.errors||{};return this.hasRequiredError?e.required=!0:delete e.required,e},t.prototype.reset=function(){this.customSelect.reset()},t.decorators=[{type:n.Component,args:[{selector:"ngx-form-select",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n\x3c!--suppress HtmlFormInputWithoutLabel --\x3e\n<select class="form-control"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n [id]="id"\n [title]="title"\n [required]="required"\n [disabled]="disabled"\n [multiple]="multiple"\n [(ngModel)]="selectedIndexes"\n #customSelect="ngModel"\n #customSelectElement>\n <option value="-1" *ngIf="placeholder">{{placeholder}}</option>\n <option *ngFor="let option of selectOptions; let index = index;" [value]="index">{{option.text}}</option>\n</select>\n\n<div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>\n\n<div class="invalid-feedback" *ngIf="invalid">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n</div>\n',styles:[""],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:t,multi:!0},{provide:r.NG_VALIDATORS,useExisting:t,multi:!0}]}]}],t.propDecorators={customSelect:[{type:n.ViewChild,args:["customSelect"]}],customSelectElement:[{type:n.ViewChild,args:["customSelectElement"]}],multiple:[{type:n.Input}]},t}(u),g=function(){function e(){}return e.isClient=function(){return"undefined"!=typeof window},e.isServer=function(){return"undefined"==typeof window},e}(),f=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._isTouched=!1,e}return s(e,t),Object.defineProperty(e.prototype,"placeholder",{set:function(e){this._placeholder=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"required",{set:function(e){this._required=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{set:function(e){this._disabled=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"multiple",{set:function(e){this._multiple=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"tag",{set:function(e){this._tag=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"tokenSeparators",{set:function(e){this._tag=e,this.updateSelect2Options()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){var r=this;if(!this._selectedIndexes||!this._selectedIndexes.length)return null;var e=this._selectedIndexes.reduce(function(e,t){if(Number.isInteger(t)&&r._selectOptions[t])e.push(r._selectOptions[t].value);else if(r._tag){var n=t.value.match(/^number: {([\d]+)}$/);n?e.push(n[1]):e.push(t.value)}return e},[]);return this._multiple?e:e[0]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this._isTouched&&this.hasRequiredError},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this._isTouched&&!this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.updateSelect2Options()},e.prototype.writeValue=function(e){this._multiple&&e&&e.length?this.selectValues(e):this._multiple?this.cleanValue():this.selectValue(e)},e.prototype.validate=function(){var e={};return this.hasRequiredError&&(e.required=!0),e},e.prototype.reset=function(){this._isTouched=!1},e.prototype.afterInitOptions=function(){this._selectOptions=function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(o(arguments[t]));return e}(this._selectOptions),this.updateSelect2Options()},e.prototype.selectValues=function(e){var n=this;this._selectedIndexes=[];var r=[];e&&e.length&&e.map(function(e){var t=n.findIndex(e);-1<t?(n._selectedIndexes.push(t),r.push(t)):n._tag&&(n._selectedIndexes.push({value:e}),r.push(e))}),g.isClient()&&(this._selectElement.val(r),this._selectElement.trigger("change"))},e.prototype.updateSelectedIndexes=function(){var t=this;if(!g.isServer()){var e=JSON.stringify(this._selectedIndexes),n=this._selectElement.val();"number"==typeof n||"string"==typeof n&&Number.isInteger(+n)?this._selectedIndexes=[+n]:"string"==typeof n&&this._tag?this._selectedIndexes=[{value:n}]:n&&n.length?this._selectedIndexes=n.map(function(e){return Number.isInteger(+e)?+e:t._tag?{value:e}:null}):this._selectedIndexes=[],JSON.stringify(this._selectedIndexes)!==e&&this.triggerChange()}},e.prototype.selectValue=function(e){if(!g.isServer()){var t=this.findIndex(e);-1<t?(this._selectedIndexes=[t],this._selectElement.val(this._selectedIndexes),this._selectElement.trigger("change")):this._tag?(this._selectedIndexes=[{value:e}],this._selectElement.val(e),this._selectElement.trigger("change")):this.cleanValue()}},e.prototype.cleanValue=function(){g.isServer()||(this._selectedIndexes=[],this._selectElement.val(null),this._selectElement.trigger("change"))},e.prototype.updateSelect2Options=function(){var e=this;!g.isServer()&&this.customSelectElement&&this.customSelectElement.nativeElement&&(this._selectElement=$(this.customSelectElement.nativeElement),this._selectElement.hasClass("select2-hidden-accessible")&&(this._selectElement.select2().empty(),this._selectElement.select2("destroy")),this._selectElement.select2({tags:this._tag,tokenSeparators:this._tokenSeparators||[],placeholder:this._placeholder,allowClear:!this._required,multiple:this._multiple,data:this._selectOptions,disabled:this._disabled,createTag:function(e){var t=$.trim(e.term);return""===t?null:{id:Number.isInteger(+t)?"number: {"+t+"}":t,text:t,newTag:!0}}}),this._selectElement.on("select2:select",function(){e.updateSelectedIndexes()}),this._selectElement.on("select2:unselect",function(){e.updateSelectedIndexes()}),this._selectElement.on("select2:close",function(){e._isTouched=!0}))},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-select2",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n<div class="form-control is-invalid" [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}">\n \x3c!--suppress HtmlFormInputWithoutLabel --\x3e\n <select [id]="id" #customSelectElement></select>\n</div>\n\n<div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>\n\n<div class="invalid-feedback" *ngIf="invalid">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n</div>\n',styles:[":host .form-control{padding:0}:host .form-control /deep/ .select2-container{width:100%!important}:host .form-control /deep/ .select2-container .select2-selection--single{height:auto}:host .form-control /deep/ .select2-container--default .select2-selection--multiple,:host .form-control /deep/ .select2-container--default .select2-selection--single,:host .form-control /deep/ .select2-container--default.select2-container--focus .select2-selection--multiple{border:none;outline:0!important}:host .form-control /deep/ .select2-container--default .select2-selection--multiple:focus,:host .form-control /deep/ .select2-container--default .select2-selection--single:focus{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}:host .form-control.is-invalid /deep/ .select2-container--default .select2-selection--multiple:focus,:host .form-control.is-invalid /deep/ .select2-container--default .select2-selection--single:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}:host .form-control.is-valid /deep/ .select2-container--default .select2-selection--multiple:focus,:host .form-control.is-valid /deep/ .select2-container--default .select2-selection--single:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}:host .form-control /deep/ .select2-container--default .select2-selection--single .select2-selection__rendered{min-height:40px;line-height:25px;padding:.375rem 25px .375rem .75rem}:host .form-control /deep/ .select2-container .select2-selection--multiple{min-height:40px;padding:.375rem .75rem}:host .form-control /deep/ .select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0}:host .form-control /deep/ .select2-container--default .select2-selection--single .select2-selection__arrow{height:38px}"],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={customSelectElement:[{type:n.ViewChild,args:["customSelectElement"]}],placeholder:[{type:n.Input}],required:[{type:n.Input}],disabled:[{type:n.Input}],multiple:[{type:n.Input}],tag:[{type:n.Input}],tokenSeparators:[{type:n.Input}]},e}(u),m=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.rows=5,e.readonly=!1,e.trimResult=!0,e.minLengthErrorMessage="Value is too short.",e}return s(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this._innerValue?"string"!=typeof this._innerValue?this._innerValue:this.trimResult?this._innerValue.trim():this._innerValue:""},set:function(e){e!==this._innerValue&&(this._innerValue=e,this.triggerChange())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hasMinLengthError",{get:function(){return this.customTextarea.errors&&this.customTextarea.errors.minlength},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this.customTextarea.touched&&(this.customTextarea.invalid||this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this.customTextarea.touched&&(!this.customTextarea.invalid&&!this.hasRequiredError))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasMinLengthError?[this.minLengthErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this._innerValue=e},e.prototype.validate=function(){var e=this.customTextarea.errors||{};return this.hasRequiredError?e.required=!0:delete e.required,e},e.prototype.reset=function(){this.customTextarea.reset()},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-textarea",template:'<label *ngIf="label" [for]="id">{{label}}</label>\n\n\x3c!--suppress HtmlFormInputWithoutLabel --\x3e\n<textarea class="form-control"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n [id]="id"\n [title]="title"\n [required]="required"\n [disabled]="disabled"\n [readonly]="readonly"\n [minlength]="minlength"\n [maxlength]="maxlength"\n [placeholder]="placeholder"\n [(ngModel)]="value"\n [rows]="rows"\n #customTextarea="ngModel"></textarea>\n\n<div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>\n\n<div class="invalid-feedback" *ngIf="invalid">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n</div>\n',styles:[""],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={rows:[{type:n.Input}],readonly:[{type:n.Input}],minlength:[{type:n.Input}],maxlength:[{type:n.Input}],trimResult:[{type:n.Input}],minLengthErrorMessage:[{type:n.Input}],customTextarea:[{type:n.ViewChild,args:["customTextarea"]}]},e}(l),b=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="checkbox",e._innerValue=!1,e._isTouch=!1,e}return s(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this._innerValue},set:function(e){this._isTouch=!0,this._innerValue=e,this.triggerChange()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return!!this.hasCustomError||!!this._isTouch&&this.hasRequiredError},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return!this.hasCustomError&&(!!this._isTouch&&!this.hasRequiredError)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errorMessages",{get:function(){return this.hasRequiredError?[this.requiredErrorMessage]:this.hasCustomError?this.innerCustomErrorMessages:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isCheckboxType",{get:function(){return"checkbox"===this.type},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isToggleType",{get:function(){return!this.isCheckboxType},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this._innerValue=e},e.prototype.validate=function(){var e={};return this.hasRequiredError&&(e.required=!0),e},e.prototype.reset=function(){this._isTouch=!1},e.decorators=[{type:n.Component,args:[{selector:"ngx-form-toggle",template:'<div class="custom-checkbox" [ngClass]="{\'custom-control\': isCheckboxType}">\n <ng-container *ngIf="isCheckboxType">\n \x3c!--suppress HtmlFormInputWithoutLabel --\x3e\n <input class="custom-control-input"\n [title]="title"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n type="checkbox"\n [id]="id"\n [required]="required"\n [(ngModel)]="value">\n <label class="custom-control-label" [for]="id">{{label}}</label>\n </ng-container>\n\n <ng-container *ngIf="isToggleType">\n <input class="custom-control-input tgl tgl-light"\n [title]="title"\n [ngClass]="{\'is-invalid\': invalid, \'is-valid\': valid}"\n type="checkbox"\n [id]="id"\n [required]="required"\n [(ngModel)]="value">\n <label class="tgl-btn" [for]="id"></label>\n <label class="tgl-label" [for]="id" *ngIf="label">{{label}}</label>\n </ng-container>\n\n <div class="valid-feedback" *ngIf="valid && validMessage">{{validMessage}}</div>\n\n <div class="invalid-feedback" *ngIf="errorMessages && errorMessages.length">\n <span *ngFor="let message of errorMessages; let last = last;">\n {{message}}<br *ngIf="!last">\n </span>\n </div>\n</div>\n',styles:['.tgl{display:none}.tgl,.tgl *,.tgl :after,.tgl :before,.tgl+.tgl-btn,.tgl:after,.tgl:before{box-sizing:border-box}.tgl ::-moz-selection,.tgl :after::-moz-selection,.tgl :before::-moz-selection,.tgl+.tgl-btn::-moz-selection,.tgl::-moz-selection,.tgl:after::-moz-selection,.tgl:before::-moz-selection{background:0 0}.tgl ::selection,.tgl :after::selection,.tgl :before::selection,.tgl+.tgl-btn::selection,.tgl::selection,.tgl:after::selection,.tgl:before::selection{background:0 0}.tgl+.tgl-btn{outline:0;display:inline-block;vertical-align:middle;margin-right:15px;width:4em;height:2em;position:relative;cursor:pointer;margin-bottom:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tgl+.tgl-btn:after,.tgl+.tgl-btn:before{position:relative;display:block;content:"";width:50%;height:100%}.tgl+.tgl-btn:after{left:0}.tgl+.tgl-btn:before{display:none}.tgl:checked+.tgl-btn:after{left:50%}.tgl-light+.tgl-btn{background:#f0f0f0;border-radius:2em;padding:2px;transition:all .4s ease}.tgl-light+.tgl-btn:after{border-radius:50%;background:#fff;transition:all .2s ease}.tgl-light:checked+.tgl-btn{background:#9fd6ae}.custom-control-input~.tgl-label{margin-bottom:0;vertical-align:middle}.custom-control-input.is-invalid~.tgl-label{color:#dc3545}.custom-control-input.is-valid~.tgl-label{color:#28a745}'],providers:[{provide:r.NG_VALUE_ACCESSOR,useExisting:e,multi:!0},{provide:r.NG_VALIDATORS,useExisting:e,multi:!0}]}]}],e.propDecorators={type:[{type:n.Input}]},e}(l),v=function(){function e(){}return e.decorators=[{type:n.NgModule,args:[{imports:[t.BrowserModule,r.FormsModule],declarations:[c,d,p,h,f,m,b],exports:[c,d,p,h,f,m,b]}]}],e}();e.FormCheckboxComponent=c,e.FormInputComponent=d,e.FormRadioComponent=p,e.FormSelectComponent=h,e.FormSelect2Component=f,e.FormTextareaComponent=m,e.FormToggleComponent=b,e.FormControlModule=v,e.ɵb=l,e.ɵa=u,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=ngx-form-control.umd.min.js.map