UNPKG

controls-library

Version:

For angular 6+ versions apps. Custom controls for input currency, input with range numbers, percents, positive integers etc.

1,027 lines (1,014 loc) 31.4 kB
import { CommonModule } from '@angular/common'; import { Injectable, Component, Input, forwardRef, ViewChild, Inject, LOCALE_ID, NgModule, defineInjectable } from '@angular/core'; import { NG_VALUE_ACCESSOR, FormControl, ReactiveFormsModule } from '@angular/forms'; import { takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ControlsLibraryService { constructor() { } } ControlsLibraryService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ ControlsLibraryService.ctorParameters = () => []; /** @nocollapse */ ControlsLibraryService.ngInjectableDef = defineInjectable({ factory: function ControlsLibraryService_Factory() { return new ControlsLibraryService(); }, token: ControlsLibraryService, providedIn: "root" }); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ControlsLibraryComponent { constructor() { } /** * @return {?} */ ngOnInit() { } } ControlsLibraryComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-controls-library', template: ` <p> controls-library works! </p> ` }] } ]; /** @nocollapse */ ControlsLibraryComponent.ctorParameters = () => []; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class NumberRangeInputComponent { constructor() { /** * Css class name for input. */ this.controlClass = ''; } /** * Min and max values setter. * @param {?} strRange * @return {?} */ set range(strRange) { /** @type {?} */ const rangeArray = strRange.split('..').map(str => +str); this._min = rangeArray[0]; this._max = rangeArray[1]; } /** * Input placeholder. * @param {?} str * @return {?} */ set placeholder(str) { if (str) { this.inputControl.nativeElement.placeholder = str; } } /** * @return {?} */ ngOnInit() { if (isNaN(this._max) || isNaN(this._min)) { throw new Error('Range required or values error'); } if (this._min >= this._max) { throw new Error('Wrong range'); } this.change = (value) => { }; this.touched = () => { }; } /** * @param {?} value * @return {?} */ onChange(value) { // Positive and negative. if (!(this.validNumber(value)) || +value > this._max || (+value < this._min && this._min < 0)) { /** @type {?} */ const cursorPosition = this.inputControl.nativeElement.selectionStart - 1; this.inputControl.nativeElement.value = this._lastValue; this.inputControl.nativeElement.selectionStart = cursorPosition; this.inputControl.nativeElement.selectionEnd = cursorPosition; return; } if (+value < this._min || isNaN(+value)) { this._lastValue = ''; if (value === '-') { this._lastValue = '-'; return; } this.change(this._lastValue); return; } this.change(value === '' ? '' : +value); this._lastValue = value; } /** * @param {?} value * @return {?} */ writeValue(value) { this.value = this.validNumber(value) ? value : ''; this._lastValue = this.value; } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.change = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.touched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { this.disabled = isDisabled; } /** * Depends on min (positive or negative) * @private * @param {?} value * @return {?} */ validNumber(value) { // Include negative if (this._min < 0) { return /^-?\d*$/.test(value); } return /^\d*$/.test(value); } } NumberRangeInputComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'number-range-input', template: "<div [ngClass]=\"containerClass\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n\r\n<input\r\n #inputControl\r\n type=\"text\"\r\n [id]=\"inputId\"\r\n [class]=\"controlClass\"\r\n [ngClass]=\"additionalClass\"\r\n [value]=\"value\"\r\n (input)=\"onChange($event.target.value)\"\r\n (blur)=\"touched()\"\r\n [disabled]=\"disabled\">\r\n\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n</div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => NumberRangeInputComponent), }, ] }] } ]; /** @nocollapse */ NumberRangeInputComponent.ctorParameters = () => []; NumberRangeInputComponent.propDecorators = { inputControl: [{ type: ViewChild, args: ['inputControl',] }], containerClass: [{ type: Input }], inputId: [{ type: Input }], controlClass: [{ type: Input }], additionalClass: [{ type: Input }], range: [{ type: Input }], placeholder: [{ type: Input }], prefix: [{ type: Input }], suffix: [{ type: Input }] }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ValueState { constructor() { this.changeCursorPosition = 0; /** * ValueString used grouping separators, such as thousands separators or * thousand/lakh/crore separators. */ this.useGrouping = false; this._valueString = ''; this._valueNumber = 0; this._lastValueString = ''; this._lastValueNumber = 0; } /** * @param {?} valueString * @return {?} */ dirtyStringLoad(valueString) { this._valueString = valueString; } /** * @param {?} value * @return {?} */ set valueString(value) { this._valueString = value; this._lastValueString = value; } /** * @param {?} value * @return {?} */ set valueNumber(value) { this._valueNumber = value; this._lastValueNumber = value; } /** * @return {?} */ get valueString() { return this._valueString; } /** * @return {?} */ get valueNumber() { return this._valueNumber; } /** * @return {?} */ get lastValueString() { return this._lastValueString; } /** * @return {?} */ get lastValueNumber() { return this._lastValueNumber; } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class StatePreparer { /** * @param {?} successor * @return {?} */ set successor(successor) { this._successor = successor; } /** * @return {?} */ get successor() { return this._successor; } /** * @param {?} state * @return {?} */ handleState(state) { } } class EmptyStringToNil extends StatePreparer { /** * @param {?} state * @return {?} */ handleState(state) { if (state.valueString === '') { state.valueNumber = 0; state.valueString = '0'; state.changeCursorPosition = 1; } return state; } } class ValidPositiveInteger extends StatePreparer { /** * @param {?} state * @return {?} */ handleState(state) { if (/^\d*$/.test(state.valueString)) { state.valueNumber = parseInt(state.valueString, 10); // For init lastValueString. state.valueString = state.valueString; return state; } state.valueNumber = state.lastValueNumber || 0; state.valueString = state.lastValueString || ''; state.changeCursorPosition = -1; return state; } } class NaNToNil extends StatePreparer { /** * @param {?} state * @return {?} */ handleState(state) { if (isNaN(state.valueNumber)) { state.valueNumber = state.lastValueNumber || 0; state.valueString = state.lastValueString || '0'; } return state; } } class NaNToNilAndEmptyString extends StatePreparer { /** * @param {?} state * @return {?} */ handleState(state) { if (isNaN(state.valueNumber)) { state.valueNumber = state.lastValueNumber || 0; state.valueString = state.lastValueString || ''; } return state; } } class MultiNilToOne extends StatePreparer { /** * @param {?=} _allowLeadingNil */ constructor(_allowLeadingNil = true) { super(); this._allowLeadingNil = _allowLeadingNil; } /** * @param {?} state * @return {?} */ handleState(state) { if (!this._allowLeadingNil && /^0+$/.test(state.valueString)) { state.valueNumber = 0; state.valueString = '0'; } return state; } } class LeadingNil extends StatePreparer { /** * @param {?=} _allowLeadingNil */ constructor(_allowLeadingNil = true) { super(); this._allowLeadingNil = _allowLeadingNil; } /** * @param {?} state * @return {?} */ handleState(state) { if (!this._allowLeadingNil && /^0+\d*/.test(state.valueString)) { state.valueString = state.valueString.replace(/^0+/, ''); state.changeCursorPosition = -1; } return state; } } class PrepareCurrencyViewFormatWithFocus extends StatePreparer { /** * @param {?} _focus * @param {?} _locale */ constructor(_focus, _locale) { super(); this._focus = _focus; this._locale = _locale; } /** * @param {?} state * @return {?} */ handleState(state) { if (this._focus && state.useGrouping) { state.valueString = state.valueNumber .toLocaleString(this._locale, { useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 2 }); state.useGrouping = false; } return state; } } class ValidCurrencyNumber extends StatePreparer { /** * @param {?} _focus * @param {?} _localeDecimalSeparator * @param {?} _positive */ constructor(_focus, _localeDecimalSeparator, _positive) { super(); this._focus = _focus; this._localeDecimalSeparator = _localeDecimalSeparator; this._positive = _positive; } /** * @param {?} state * @return {?} */ handleState(state) { /** @type {?} */ let re; if (this._positive) { re = new RegExp('^\\d*[' + this._localeDecimalSeparator + ']?\\d{0,2}$'); } else { re = new RegExp('^-?\\d*[' + this._localeDecimalSeparator + ']?\\d{0,2}$'); } if (!re.test(state.valueString) && this._focus) { state.valueNumber = state.lastValueNumber || 0; state.valueString = state.lastValueString || ''; state.changeCursorPosition = -1; return state; } // For init lastValueString. state.valueString = state.valueString; state.valueNumber = parseFloat(state.valueString.replace(this._localeDecimalSeparator, '.')) || 0; return state; } } class PrepareCurrencyViewFormatWithoutFocus extends StatePreparer { /** * @param {?} _focus * @param {?} _locale */ constructor(_focus, _locale) { super(); this._focus = _focus; this._locale = _locale; } /** * @param {?} state * @return {?} */ handleState(state) { if (!this._focus) { state.valueString = state.valueNumber .toLocaleString(this._locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 }); state.useGrouping = true; } return state; } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class CurrencyInputComponent { /** * @param {?} _currentLocale */ constructor(_currentLocale) { this._currentLocale = _currentLocale; this.state = new ValueState(); /** * Css class name for input. */ this.controlClass = ''; /** * Positive or positive and negative. */ this.positive = false; this._focus = false; this._unsubscribe = new Subject(); } /** * Input placeholder. * @param {?} str * @return {?} */ set placeholder(str) { if (str) { this._placeholder = str; return; } this._placeholder = ''; } /** * @return {?} */ ngOnInit() { this.change = (value) => { }; this.touched = () => { }; this.locale = this.locale || this._currentLocale; // Get locale decimal separator. this._localeDecimalSeparator = (1.1) .toLocaleString(this.locale).substring(1, 2); this.formControl = new FormControl(); this.formControl.valueChanges.pipe(takeUntil(this._unsubscribe)) .subscribe((value) => { this.onChange(value); }); /** * Setup placeholder */ this.setPlaceholder(); } /** * @param {?} valueString * @return {?} */ onChange(valueString) { this.state.dirtyStringLoad(valueString); // Chains /** @type {?} */ const check1 = new PrepareCurrencyViewFormatWithFocus(this._focus, this.locale); /** @type {?} */ const check2 = new ValidCurrencyNumber(this._focus, this._localeDecimalSeparator, this.positive); /** @type {?} */ const check3 = new PrepareCurrencyViewFormatWithoutFocus(this._focus, this.locale); check1.successor = check2; check2.successor = check3; this.state = check1.handleState(this.state); this.state = check2.handleState(this.state); this.state = check3.handleState(this.state); this.publishState(this.state); } /** * @param {?} value * @return {?} */ writeValue(value) { this.onChange(value ? value.toString() : ''); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.change = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.touched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { if (isDisabled) { this.formControl.disable({ emitEvent: false }); return; } this.formControl.enable({ emitEvent: false }); } /** * @return {?} */ onFocus() { this._focus = true; this.setPlaceholder(); this.onChange(this.state.valueString); } /** * @return {?} */ onBlur() { this._focus = false; this.setPlaceholder(); this.onChange(this.state.valueString); this.touched(); } /** * @return {?} */ ngOnDestroy() { this._unsubscribe.next(true); this._unsubscribe.unsubscribe(); } /** * @private * @return {?} */ setPlaceholder() { if (this._focus) { this.inputControl.nativeElement.placeholder = ''; return; } if (this._placeholder && this._placeholder !== '0') { this.inputControl.nativeElement.placeholder = this._placeholder; return; } // For '0' as string for placehloder set format depends on current locale. this.inputControl.nativeElement.placeholder = `0${this._localeDecimalSeparator}00`; } /** * @private * @param {?} state * @return {?} */ publishState(state) { /** @type {?} */ const cursorPosition = this.inputControl.nativeElement.selectionStart + state.changeCursorPosition; // Publish to input. this.formControl.setValue(state.valueString, { emitEvent: false }); this.inputControl.nativeElement.selectionStart = cursorPosition; this.inputControl.nativeElement.selectionEnd = cursorPosition; this.state.changeCursorPosition = 0; // Publish to system. this.change(state.valueNumber); } } CurrencyInputComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'currency-input', template: "<div [ngClass]=\"containerClass\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n\r\n<input\r\n #inputControl\r\n type=\"text\"\r\n [id]=\"inputId\"\r\n [class]=\"controlClass\"\r\n [ngClass]=\"additionalClass\"\r\n [formControl]=\"formControl\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\">\r\n\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n</div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => CurrencyInputComponent), }, ] }] } ]; /** @nocollapse */ CurrencyInputComponent.ctorParameters = () => [ { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] } ]; CurrencyInputComponent.propDecorators = { inputControl: [{ type: ViewChild, args: ['inputControl',] }], containerClass: [{ type: Input }], inputId: [{ type: Input }], controlClass: [{ type: Input }], additionalClass: [{ type: Input }], placeholder: [{ type: Input }], prefix: [{ type: Input }], suffix: [{ type: Input }], locale: [{ type: Input }], positive: [{ type: Input }] }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class PositiveNumbersInputComponent { constructor() { this.state = new ValueState(); /** * Css class name for input. */ this.controlClass = ''; /** * Allow leading nil. */ this.allowLeadingNil = true; this._unsubscribe = new Subject(); } /** * Input placeholder. * @param {?} str * @return {?} */ set placeholder(str) { if (str) { this.inputControl.nativeElement.placeholder = str; } } /** * @return {?} */ ngOnInit() { this.change = (value) => { }; this.touched = () => { }; this.formControl = new FormControl(); this.formControl.valueChanges.pipe(takeUntil(this._unsubscribe)) .subscribe((value) => { this.onChange(value); }); } /** * @param {?} valueString * @return {?} */ onChange(valueString) { this.state.dirtyStringLoad(valueString); // Chains /** @type {?} */ const check1 = new EmptyStringToNil(); /** @type {?} */ const check2 = new ValidPositiveInteger(); /** @type {?} */ const check3 = new NaNToNil(); /** @type {?} */ const check4 = new MultiNilToOne(this.allowLeadingNil); /** @type {?} */ const check5 = new LeadingNil(this.allowLeadingNil); check1.successor = check2; check2.successor = check3; check3.successor = check4; check4.successor = check5; this.state = check1.handleState(this.state); this.state = check2.handleState(this.state); this.state = check3.handleState(this.state); this.state = check4.handleState(this.state); this.state = check5.handleState(this.state); this.publishState(this.state); } /** * @param {?} value * @return {?} */ writeValue(value) { this.onChange(value ? value.toString() : ''); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.change = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.touched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { if (isDisabled) { this.formControl.disable(); return; } this.formControl.enable(); } /** * @return {?} */ ngOnDestroy() { this._unsubscribe.next(true); this._unsubscribe.unsubscribe(); } /** * @private * @param {?} state * @return {?} */ publishState(state) { /** @type {?} */ const cursorPosition = this.inputControl.nativeElement.selectionStart + state.changeCursorPosition; // Publish to input. this.formControl.setValue(state.valueString, { emitEvent: false }); this.inputControl.nativeElement.selectionStart = cursorPosition; this.inputControl.nativeElement.selectionEnd = cursorPosition; this.state.changeCursorPosition = 0; // Publish to system. this.change(state.valueNumber); } } PositiveNumbersInputComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'positive-numbers-input', template: "<div [ngClass]=\"containerClass\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n\r\n<input\r\n #inputControl\r\n type=\"text\"\r\n [id]=\"inputId\"\r\n [class]=\"controlClass\"\r\n [ngClass]=\"additionalClass\"\r\n [formControl]=\"formControl\"\r\n (blur)=\"touched()\">\r\n\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n</div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => PositiveNumbersInputComponent), }, ] }] } ]; /** @nocollapse */ PositiveNumbersInputComponent.ctorParameters = () => []; PositiveNumbersInputComponent.propDecorators = { inputControl: [{ type: ViewChild, args: ['inputControl',] }], containerClass: [{ type: Input }], inputId: [{ type: Input }], controlClass: [{ type: Input }], additionalClass: [{ type: Input }], placeholder: [{ type: Input }], prefix: [{ type: Input }], suffix: [{ type: Input }], allowLeadingNil: [{ type: Input }] }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class PositiveIntegerInputComponent { constructor() { this.state = new ValueState(); /** * Css class name for input. */ this.controlClass = ''; /** * Allow leading nil. */ this.allowLeadingNil = true; this._unsubscribe = new Subject(); } /** * Input placeholder. * @param {?} str * @return {?} */ set placeholder(str) { if (str) { this._placeholder = str; return; } this._placeholder = ''; } /** * @return {?} */ ngOnInit() { this.change = (value) => { }; this.touched = () => { }; this.formControl = new FormControl(); this.formControl.valueChanges.pipe(takeUntil(this._unsubscribe)) .subscribe((value) => { this.onChange(value); }); /** * Setup placeholder */ this.setPlaceholder(); } /** * @param {?} valueString * @return {?} */ onChange(valueString) { this.state.dirtyStringLoad(valueString); // Chains /** @type {?} */ const check1 = new ValidPositiveInteger(); /** @type {?} */ const check2 = new NaNToNilAndEmptyString(); /** @type {?} */ const check3 = new LeadingNil(this.allowLeadingNil); check1.successor = check2; check2.successor = check3; this.state = check1.handleState(this.state); this.state = check2.handleState(this.state); this.state = check3.handleState(this.state); this.publishState(this.state); } /** * @return {?} */ onFocus() { this._focus = true; this.setPlaceholder(); this.onChange(this.state.valueString); } /** * @return {?} */ onBlur() { this._focus = false; this.setPlaceholder(); this.onChange(this.state.valueString); this.touched(); } /** * @param {?} value * @return {?} */ writeValue(value) { this.onChange(value ? value.toString() : ''); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.change = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.touched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { if (isDisabled) { this.formControl.disable(); return; } this.formControl.enable(); } /** * @return {?} */ ngOnDestroy() { this._unsubscribe.next(true); this._unsubscribe.unsubscribe(); } /** * @private * @return {?} */ setPlaceholder() { if (this._focus) { this.inputControl.nativeElement.placeholder = ''; return; } this.inputControl.nativeElement.placeholder = this._placeholder; } /** * @private * @param {?} state * @return {?} */ publishState(state) { /** @type {?} */ const cursorPosition = this.inputControl.nativeElement.selectionStart + state.changeCursorPosition; // Publish to input. this.formControl.setValue(state.valueString, { emitEvent: false }); this.inputControl.nativeElement.selectionStart = cursorPosition; this.inputControl.nativeElement.selectionEnd = cursorPosition; this.state.changeCursorPosition = 0; // Publish to system. this.change(state.valueNumber); } } PositiveIntegerInputComponent.decorators = [ { type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'positive-integer-input', template: "<div [ngClass]=\"containerClass\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n\r\n <input\r\n #inputControl\r\n type=\"text\"\r\n [id]=\"inputId\"\r\n [class]=\"controlClass\"\r\n [ngClass]=\"additionalClass\"\r\n [formControl]=\"formControl\"\r\n (blur)=\"onBlur()\"\r\n (focus)=\"onFocus()\">\r\n\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n</div>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef(() => PositiveIntegerInputComponent), }, ] }] } ]; /** @nocollapse */ PositiveIntegerInputComponent.ctorParameters = () => []; PositiveIntegerInputComponent.propDecorators = { inputControl: [{ type: ViewChild, args: ['inputControl',] }], containerClass: [{ type: Input }], inputId: [{ type: Input }], controlClass: [{ type: Input }], additionalClass: [{ type: Input }], placeholder: [{ type: Input }], prefix: [{ type: Input }], suffix: [{ type: Input }], allowLeadingNil: [{ type: Input }] }; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ControlsLibraryModule { } ControlsLibraryModule.decorators = [ { type: NgModule, args: [{ declarations: [ ControlsLibraryComponent, NumberRangeInputComponent, CurrencyInputComponent, PositiveNumbersInputComponent, PositiveIntegerInputComponent, ], imports: [ CommonModule, ReactiveFormsModule, ], exports: [ ControlsLibraryComponent, NumberRangeInputComponent, CurrencyInputComponent, PositiveNumbersInputComponent, PositiveIntegerInputComponent, ], },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { ControlsLibraryService, ControlsLibraryComponent, ControlsLibraryModule, CurrencyInputComponent as ɵb, NumberRangeInputComponent as ɵa, PositiveIntegerInputComponent as ɵd, PositiveNumbersInputComponent as ɵc }; //# sourceMappingURL=controls-library.js.map