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
JavaScript
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