ngx-input-eip
Version:
Lightweight edit in place text editor.
1 lines • 58.9 kB
Source Map (JSON)
{"version":3,"file":"ngx-input-eip.mjs","sources":["../../src/component/lib/form-errors/messages/en.ts","../../src/component/lib/form-errors/errors-manager.ts","../../src/component/lib/form-errors/default-errors-parser.ts","../../src/component/lib/ancestors/base.ts","../../src/component/lib/custom-change-event.ts","../../src/component/lib/inputs-defaults.ts","../../src/component/resizable-textarea-container.directive.ts","../../src/component/ngx-input-eip/ngx-input-eip.component.ts","../../src/component/ngx-input-eip/ngx-input-eip.component.html","../../src/ngx-input-eip.module.ts","../../src/public-api.ts","../../src/ngx-input-eip.ts"],"sourcesContent":["import { CustomValidatorMessages } from './custom-validator-messages';\n\nexport const Messages: CustomValidatorMessages = {\n required: 'This field cannot be blank!',\n email: `Invalid email!`,\n numbersOnly: `Only numbers are allowed!`,\n invalid_http_url: `Invalid http url`,\n numberOnly: `The value entered is not a number!`,\n\n minlength: (e: any): string => `Minimum length: ${e.requiredLength}, current length: ${e.actualLength}` ,\n InvalidFormat: (error: { validExample: string; value: string; }) => `\"${error.value}\" is not a valid format. Valid example: \"${error.validExample}\"`,\n pattern: (error: { requiredPattern: string | RegExp; actualValue: string; }) => `\"${error.actualValue}\" is not a valid format. The format must follow the following regular expression (RegExp): \"${error.requiredPattern}\"`,\n max: (e: { max: number; actual: number; }) => `The value entered is too large! Maximum value: ${e.max}, current value: ${e.actual}`,\n maxlength: (e: {requiredLength: number, actualLength: number}) => `The value entered is too long! Max length: ${e.requiredLength}, current length: ${e.actualLength}`,\n}","import { TemplateRef } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\nimport { CustomValidatorMessages } from \"./messages/custom-validator-messages\";\nimport { Messages as MessagesIt } from './messages/it';\nimport { Messages as MessagesEn } from './messages/en';\n\nexport class ErrorsManager {\n static formatErrors(errors: any, customErrorMessages?: any): (string | TemplateRef<any>)[] {\n return new ErrorsManager(errors, customErrorMessages).formatErrors();\n }\n\n private errors: { [error: string]: any };\n private readonly defaultMessages: CustomValidatorMessages = MessagesEn;\n private messages: CustomValidatorMessages = {};\n\n constructor(errors: { [error: string]: any }, customMessages: CustomValidatorMessages = MessagesEn) {\n this.errors = errors;\n\n if (customMessages) this.mergeMessages(customMessages);\n else this.assignDefaults();\n }\n\n private assignDefaults(): void {\n this.messages = {};\n\n Object.keys(this.defaultMessages).forEach((key: string) => {\n this.messages[key] = this.defaultMessages[key];\n })\n }\n\n private mergeMessages(messages: CustomValidatorMessages): void {\n const keys = [\n ...Object.keys(this.defaultMessages),\n ...Object.keys(messages)\n ];\n\n keys.forEach((key: string) => {\n if (messages[key]) {\n this.messages[key] = messages[key];\n } else {\n this.messages[key] = this.defaultMessages[key];\n }\n });\n }\n\n formatErrors(): (string | TemplateRef<any>)[] {\n const result: (string | TemplateRef<any>)[] = [\n ...this.errorMsgFromControl()\n ];\n\n /**\n * TODO write here your custom logic of parsing errors.\n */\n\n return result;\n }\n\n private enableLogging: boolean = false;\n\n private warn(...args: any[]): void {\n if (!(this.enableLogging)) return;\n\n console.warn(...args);\n }\n\n errorMsgFromControl(): string[] {\n if (this.errors == undefined || this.errors == null) return [];\n var messages: string[] = [];\n\n Object.keys(this.errors).filter((key: string) => {\n if (this.messages.hasOwnProperty(key) && this.messages[key] && this.messages[key] != undefined) {\n const field: ((e?: any) => string) | string = this.messages[key] as string | ((e?: any) => string);\n switch (typeof field) {\n case 'string':\n messages.push(field);\n break;\n case 'function':\n messages.push(field(this.errors![key]));\n break;\n default:\n messages.push(field);\n break;\n }\n return;\n }\n\n this.warn(`ReactiveFormsErrors missing error message of \"${key}\". Parser error with your custom logic.`);\n\n var msg: any = {};\n msg[key] = this.errors[key];\n if (!(typeof msg == 'string')) msg = JSON.stringify(msg);\n messages.push(msg);\n });\n\n return messages;\n }\n}","import { TemplateRef } from \"@angular/core\";\nimport { AbstractControl } from \"@angular/forms\";\nimport { ErrorsManager } from \"./errors-manager\";\n\nexport function DefaultErrorsParser(c: AbstractControl, customErrorMessages?: any): (string|TemplateRef<any>)[] {\n const errors = c.errors;\n if (!(errors && Object.keys(errors).length > 0)) {\n return [];\n }\n\n return ErrorsManager.formatErrors(errors, customErrorMessages);\n}","export class BaseClass {\n\n}","/**\n * Event to trigger (manually) and to listen to when the value of the input changes.\n */\nexport const CustomChangeEvent: string = 'ngx-autosize';","import { DefaultErrorsParser } from \"./form-errors/default-errors-parser\";\nimport { InputSettings } from \"./input-settings\";\n\nexport const InputsDefaults: InputSettings = {\n isShort: true,\n isMandatory: false,\n enableValidations: true,\n placeholder: 'Type here...',\n label: '',\n showLabel: true,\n autosave: null,\n classes: '',\n customValidators: [],\n isDisabled: false,\n numbersOnly: false,\n min: undefined,\n max: undefined,\n maxLength: undefined,\n minLength: undefined,\n submitButtonLabel: 'Confirm',\n cancelButtonLabel: 'Cancel',\n actionbarMode: null,\n animateActionbar: true,\n allowInvalid: false,\n errorsParser: DefaultErrorsParser,\n showErrors: true,\n customErrorMessages: [],\n customErrorsMap: {},\n inputStyle: {},\n selectOnFocus: true,\n}\n\n","import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, Input } from '@angular/core';\nimport { CustomChangeEvent } from './lib/custom-change-event';\n\nconst selector: string = 'resizableTextareaContainer';\n@Directive({\n selector: `[${selector}]`\n})\nexport class ResizableTextareaContainerDirective implements AfterViewInit {\n\n private element: any;\n\n @Input(selector) enabled: boolean = true;\n\n constructor(\n private el: ElementRef,\n private cd: ChangeDetectorRef\n ) {\n this.element = this.el.nativeElement;\n }\n\n ngAfterViewInit(): void {\n this.init();\n }\n\n get textarea(): HTMLTextAreaElement|undefined {\n return this.element.childNodes[0];\n }\n\n get container(): HTMLDivElement {\n return this.element;\n }\n\n get style(): any{\n return this.element.style;\n }\n\n get diff(): number {\n return Number(this.style.paddingBottom) + Number(this.style.paddingTop);\n }\n\n private readonly defaultHeight: string|number = 'auto';\n\n set height(v: number | string | undefined) {\n if (typeof v == 'number') v = `${v}px`;\n if (!(v && typeof v == 'string' && v.length > 0 && v.indexOf('px') >= 0)) {\n this.height = this.defaultHeight;\n return;\n }\n\n if (this.textarea) this.textarea.style.height = v;\n if (this.container) this.container.style.minHeight = `${Number(v.replace('px', '')) + 8}px`;\n }\n\n get height(): number|undefined {\n return this.textarea?.scrollHeight;\n }\n\n private init(): void {\n this.setInitialHeight();\n\n if (!(this.textarea)) {\n // No textarea found, try later.\n setTimeout(() => this.init(), 500);\n return;\n }\n\n this.textarea.addEventListener(`${CustomChangeEvent}`, () => {\n this.updateHeight();\n });\n\n this.updateHeight();\n }\n\n private containsText(): boolean {\n return !!(this.textarea && this.textarea.value.length > 0);\n }\n\n private setInitialHeight(): void{\n if (this.containsText()) {\n this.height = `${this.element.scrollHeight - this.diff}px`;\n }\n }\n\n private updateHeight(): void {\n this.textarea!.style.height = '0px';\n this.height = `${this.textarea!.scrollHeight - this.diff}px`;\n this.textarea!.dispatchEvent(new CustomEvent('resize'));\n\n // window.scroll({ top: this.textarea!.offsetTop + this.textarea!.offsetHeight });\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, forwardRef, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, ValidatorFn, Validators } from '@angular/forms';\nimport { DefaultErrorsParser } from '../lib/form-errors/default-errors-parser';\nimport { BaseClass } from '../lib/ancestors/base';\nimport { CustomChangeEvent } from '../lib/custom-change-event';\nimport { CustomSubmitEvent } from '../lib/custom-events';\nimport { ActionBarMode, InputSettings } from '../lib/input-settings';\nimport { InputsDefaults } from '../lib/inputs-defaults';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nconst selector: string = 'ngx-input-eip';\n\n@Component({\n selector,\n templateUrl: 'ngx-input-eip.component.html',\n styleUrls: [\n './ngx-input-eip.component.scss',\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputEipComponent),\n multi: true\n }\n ]\n})\nexport class NgxInputEipComponent extends BaseClass implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, OnChanges {\n @Output() onSubmit: EventEmitter<CustomSubmitEvent> = new EventEmitter<CustomSubmitEvent>();\n @Output() onCancel: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Emit events using this subject.\n * The events that will be emitted outside will be filtered.\n */\n private areUnsavedChanges$: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output(`areUnsavedChanges`) _areUnsavedChanges = this.areUnsavedChanges$.pipe(\n distinctUntilChanged()\n );\n\n\n /**\n * This events are listened and emitted from the input.\n */\n @Output() onChange: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onInput: EventEmitter<Event> = new EventEmitter<Event>();\n @Output() onClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output() onResize: EventEmitter<UIEvent> = new EventEmitter<UIEvent>();\n @Output() onDblclick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n @Output() onKeyDown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onKeyPress: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n @Output() onKeyUp: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n\n @ViewChild('input') input?: ElementRef;\n\n /**\n * @description\n * If the input is `short`, it will appear as a common text input.\n * If the input is `long`, it will appear as a textarea.\n */\n @Input() isShort: InputSettings['isShort'] = InputsDefaults['isShort'];\n\n /**\n * @description\n * If this input is mandatory, it cannot be empty.\n * Otherwise its invalid.\n */\n @Input() isMandatory: InputSettings['isMandatory'] = InputsDefaults['isMandatory'];\n\n /**\n * @description\n * If this flag is enabled, errors will be shown.\n */\n @Input() enableValidations: InputSettings['enableValidations'] = InputsDefaults['enableValidations'];\n\n @Input() inputStyle: InputSettings['inputStyle'] = InputsDefaults['inputStyle'];\n\n /**\n * @description\n * The placeholder for the input.\n */\n @Input() placeholder: InputSettings['placeholder'] = InputsDefaults['placeholder'];\n\n /**\n * @description\n * The label for the input.\n * Its not mandatory;\n * It's possible to pass a custom html-style label too, with `<span label ></span>` attribute.\n */\n @Input() label: InputSettings['label'] = InputsDefaults['label'];\n\n /**\n * @description\n * Show/Hide label.\n * This will hide both html-style and text-style labels.\n */\n @Input() showLabel: InputSettings['showLabel'] = InputsDefaults['showLabel'];\n\n @Input() submitButtonLabel: InputSettings['submitButtonLabel'] = InputsDefaults['submitButtonLabel'];\n\n @Input() cancelButtonLabel: InputSettings['cancelButtonLabel'] = InputsDefaults['cancelButtonLabel'];\n\n private readonly avaliableActionbarMode: InputSettings['actionbarMode'][] = [null, 'always', 'show', 'overlay'];\n @Input() actionbarMode: InputSettings['actionbarMode'] = InputsDefaults['actionbarMode'];\n\n get validActionbarMode(): boolean {\n return this.avaliableActionbarMode.includes(this.actionbarMode);\n }\n\n get defaultActionbarMode(): ActionBarMode | 'd-none' {\n return this.isShort ? 'overlay' : 'always';\n }\n\n get actionbarClass(): ActionBarMode | 'd-none' {\n if (this.autosave) return 'd-none';\n\n if (this.actionbarMode === null) return this.defaultActionbarMode;\n\n if (!(this.validActionbarMode)) {\n console.warn(`${this.constructor.name}.actionbarClass - Invalid actionbarMode: \"${this.actionbarMode}\"; Setting default \"${this.defaultActionbarMode}\". Avaliable options are ${this.avaliableActionbarMode}`);\n return this.defaultActionbarMode;\n }\n\n return this.actionbarMode;\n }\n\n @Input() animateActionbar: InputSettings['animateActionbar'] = InputsDefaults['animateActionbar'];\n\n get showActionsBar(): boolean {\n return !this.autosave;\n }\n\n /**\n * Ask confirm/deny or save automatically.\n */\n @Input()\n set autosave(v: boolean | null) {\n this._autosave = v;\n }\n\n protected _autosave: InputSettings['autosave'] = InputsDefaults['autosave'];\n\n get autosave(): boolean {\n return this._autosave == null ? this.isShort : this._autosave;\n }\n\n @Input() classes: InputSettings['classes'] = InputsDefaults['classes']\n\n /**\n * Adding custom user validators.\n */\n @Input() customValidators: InputSettings['customValidators'] = InputsDefaults['customValidators'];\n\n get validators(): ValidatorFn[] {\n const validators: ValidatorFn[] = [\n ...this.customValidators\n ];\n\n const addIf = (condition: boolean, element: ValidatorFn) => {\n if (!condition) return;\n validators.push(element);\n }\n\n addIf(this.isMandatory, Validators.required);\n if (this.numbersOnly) {\n addIf(this.numbersOnly, Validators.pattern(/^[0-9]*$/));\n addIf(!!(this.min != null && this.min && !isNaN(this.min)), Validators.min(this.min as number));\n addIf(!!(this.max != null && this.max && !isNaN(this.max)), Validators.max(this.max as number));\n } else {\n addIf(!!(this.minLength != null && this.minLength && !isNaN(this.minLength)), Validators.minLength(this.minLength as number));\n addIf(!!(this.maxLength != null && this.maxLength && !isNaN(this.maxLength)), Validators.maxLength(this.maxLength as number));\n }\n\n return validators;\n }\n\n @Input()\n set isDisabled(v: boolean) {\n this.setDisabledState(v);\n }\n\n protected _isDisabled: InputSettings['isDisabled'] = InputsDefaults['isDisabled'];\n get isDisabled(): boolean {\n return this._isDisabled;\n }\n\n /**\n * Is a input that allows numbers only?\n * If yes:\n * - Any non-number character will be removed.\n * - Arrow up will increase the value by 1.\n * - Arrow down will decrease the value by 1.\n * - If the value is empty, it will be set to 0.\n * - If the value is not a number, it will be set to 0.\n */\n @Input() numbersOnly: InputSettings['numbersOnly'] = InputsDefaults['numbersOnly'];\n\n /**\n * Minimum value for numerical inputs.\n */\n @Input() min: InputSettings['min'] = InputsDefaults['min'];\n\n /**\n * Maximum value for numerical inputs.\n */\n @Input() max: InputSettings['max'] = InputsDefaults['max'];\n\n @Input() maxLength: InputSettings['maxLength'] = InputsDefaults['maxLength'];\n\n @Input() minLength: InputSettings['minLength'] = InputsDefaults['minLength'];\n\n @Input() showErrors: InputSettings['showErrors'] = InputsDefaults['showErrors'];\n\n @Input() selectOnFocus: InputSettings['selectOnFocus'] = InputsDefaults['selectOnFocus'];\n\n /**\n * @description if false and form invalid, changes will not be emitted.\n */\n @Input() allowInvalid: InputSettings['allowInvalid'] = InputsDefaults['allowInvalid'];\n\n @Input() customErrorMessages: InputSettings['customErrorMessages'] = InputsDefaults['customErrorMessages'];\n\n @Input() customErrorsMap: InputSettings['customErrorsMap'] = InputsDefaults['customErrorsMap'];\n\n @Input() errorsParser?: InputSettings['errorsParser'] | null = null;\n\n get allErrorsMessages(): (string | TemplateRef<any>)[] {\n if (!this.enableValidations) return [];\n var final: (string | TemplateRef<any>)[] = [];\n\n if (this.errorsParser && this.errorsParser != null) {\n final = this.errorsParser(this.control);\n } else {\n final = DefaultErrorsParser(this.control, (this.customErrorsMap || {}));\n }\n\n if (this.customErrorMessages && Array.isArray(this.customErrorMessages)) final = final.concat(this.customErrorMessages);\n\n return final;\n }\n\n get stringErrorMessages(): string[] {\n return this.allErrorsMessages.filter(e => typeof e === 'string') as string[];\n }\n\n get templateErrorMessages(): TemplateRef<any>[] {\n return this.allErrorsMessages.filter(e => e instanceof TemplateRef) as TemplateRef<any>[];\n }\n\n get hasErrors(): boolean {\n return this.allErrorsMessages.length > 0;\n }\n\n get value(): string {\n return this.form.value.value;\n }\n\n set value(value: string) {\n this.form.patchValue({ value });\n }\n\n form: FormGroup = new FormGroup({\n value: new FormControl('', this.validators)\n });\n\n get control(): AbstractControl {\n return this.form.get('value') as AbstractControl;\n }\n\n get isLong(): boolean {\n return !(this.isShort);\n }\n\n get invalidForm(): boolean {\n return this.form.invalid;\n }\n\n get showInvalidStatus(): boolean {\n return this.invalidForm && this.enableValidations && (this.control.touched || this.control.dirty);\n }\n\n get isEmpty(): boolean {\n if (this.value === undefined || this.value === null) return true;\n\n const value: string = `${this.value}`.trim();\n return !(value.length > 0);\n }\n\n get inputStatusClass(): string {\n if (this.showInvalidStatus) {\n return 'invalid';\n }\n\n if (this.isEmpty) {\n return 'empty';\n }\n\n return '';\n }\n\n @Input(\"value\") set overwriteValue(v: any){\n this.writeValue(v);\n }\n\n get areUnsavedChanges(): boolean {\n return this.emittedValue !== this.value;\n }\n\n get debugJson(): any {\n return {\n inputs: {\n isShort: this.isShort,\n enableValidations: this.enableValidations,\n isDisabled: this.isDisabled,\n isMandatory: this.isMandatory,\n label: this.label,\n placeholder: this.placeholder,\n autosave: this.autosave,\n showLabel: this.showLabel,\n numbersOnly: this.numbersOnly,\n min: this.min,\n max: this.max,\n classes: this.classes,\n customValidators: this.customValidators,\n minLength: this.minLength,\n maxLength: this.maxLength,\n actionbarMode: this.actionbarMode,\n actionbarClass: this.actionbarClass,\n allowInvalid: this.allowInvalid,\n },\n internal: {\n value: this.value,\n emittedValue: this.emittedValue,\n areUnsavedChanges: this.areUnsavedChanges,\n showInvalidStatus: this.showInvalidStatus,\n\n control: {\n isEmpty: this.isEmpty,\n invalid: this.invalidForm,\n errors: this.control.errors,\n validators: this.validators\n },\n }\n };\n }\n\n readonly id: string = `ngx-input-eip-${Math.random()}`;\n\n readonly debugMode: boolean = false;\n\n protected emittedValue: string = '';\n\n protected onChangeTimeout: any;\n\n protected _registerOnTouched: (v?: any) => any = () => { };\n\n protected _registerOnChange: (v?: any) => any = () => { };\n\n /**\n * CONSTRUCTOR NOT NEEDED HERE\n */\n\n /*****************************************************************\n * Angular lifecycle hooks\n *****************************************************************/\n ngOnInit(): void {\n // super.ngOnInit();\n this.validateInputs();\n\n this.onInput.subscribe(ev => this.afterInput(ev));\n this.onClick.subscribe(ev => this.afterClick(ev));\n this.onFocus.subscribe(ev => this.afterFocus(ev));\n this.onKeyDown.subscribe(ev => this.afterKeyDown(ev));\n }\n\n ngAfterViewInit(): void {\n // super.ngAfterViewInit();\n this.updateValidators();\n\n this.control.valueChanges.subscribe(() => {\n this.triggerResize();\n });\n }\n\n ngOnDestroy(): void {\n // super.ngOnDestroy();\n }\n\n /**\n * Triggered when any input changes.\n */\n ngOnChanges(changes: SimpleChanges): void {\n Object.keys(changes).forEach((key: string) => {\n switch (key) {\n case 'isMandatory':\n case 'enableValidations':\n case 'minLength':\n case 'maxLength':\n case 'min':\n case 'max':\n case 'numbersOnly':\n case 'customValidators':\n this.updateValidators();\n break;\n }\n });\n\n setTimeout(() => {\n this.triggerResize();\n });\n\n this.validateInputs();\n }\n\n ngDoCheck(...args: any[]): void {\n // super.ngDoCheck(args);\n }\n\n ngAfterContentInit(...args: any[]): void {\n // super.ngAfterContentInit(args);\n }\n\n ngAfterContentChecked(...args: any[]): void {\n // super.ngAfterContentChecked(args);\n }\n\n ngAfterViewChecked(...args: any[]): void {\n // super.ngAfterViewChecked(args);\n }\n\n /*****************************************************************\n * Public methods\n *****************************************************************/\n\n afterKeyDown(ev: KeyboardEvent): void {\n var done: () => void = () => {\n this.valueChanges();\n };\n\n if (ev.key === 'Escape') {\n // TODO\n // cancel but save in localStorage or cookies the element.\n // Then show to the user the possibility to restore the element.\n if (this.areUnsavedChanges) return done();\n return this.blur();\n }\n\n if (ev.key === 'Enter' && this.isShort) {\n this.submit();\n return done();\n }\n\n if (ev.key === 'Tab' && this.isLong) {\n return done();\n }\n\n if (ev.key == 'Enter' && this.isLong && ev.ctrlKey) {\n this.submit();\n return done();\n }\n }\n\n afterInput(ev: any): void {\n if (this.numbersOnly && this.value != null && this.value != undefined){\n this.form.patchValue({\n value: this.value.toString().replace(/[^0-9|\\.|\\,]+/gm, '').replace(/[\\,]+/gm, '.')\n }, { emitEvent: true });\n }\n\n this.valueChanges();\n }\n\n afterClick(ev: MouseEvent): void {\n ev.stopPropagation();\n ev.stopImmediatePropagation();\n ev.preventDefault();\n }\n\n afterFocus(ev: any): void {\n if (this.selectOnFocus && this.input) {\n this.input.nativeElement.select();\n }\n }\n\n focus(): void{\n if (this.input) {\n this.input.nativeElement.focus();\n }\n }\n\n submit(): void {\n var done = () => {\n this.onSubmit.emit({\n value: this.value,\n isValid: this.form.valid,\n errors: this.control.errors\n });\n\n return this.blur();\n }\n\n if (this.autosave) {\n this.valueChanges();\n return done();\n }\n\n this.emitChanges();\n\n done();\n this.emitAreUnsavedChanges();\n }\n\n cancel(): void {\n if (this.autosave) return;\n\n this.value = this.emittedValue;\n this.blur();\n this.emitAreUnsavedChanges();\n }\n\n valueChanges(): void {\n this.onChangeTimeout = setTimeout(() => {\n this.emitAreUnsavedChanges();\n\n if (this.onChangeTimeout) clearTimeout(this.onChangeTimeout);\n\n if (this.emittedValue === this.value) {\n return; // Nothing changed.\n }\n\n if (this.autosave) { this.emitChanges(); }\n }, 200);\n }\n\n writeValue(obj: unknown): void {\n let str: string = ``;\n if (typeof obj == 'string') str = this.formatValue(obj);\n else if (typeof obj == 'number') str = `${obj}`;\n\n this.value = str;\n this.emittedValue = str;\n }\n\n registerOnChange(fn: any): void {\n this._registerOnChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._registerOnTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled = !!isDisabled;\n var method: 'disable' | 'enable' = this.isDisabled ? 'disable' : 'enable';\n this.control[method]();\n }\n\n textareaFocus(event: FocusEvent): void {\n this.onFocus.emit(event);\n this.triggerResize();\n }\n\n triggerResize(): void {\n (this.input?.nativeElement as HTMLElement).dispatchEvent(new Event(CustomChangeEvent));\n }\n\n /*****************************************************************\n * Private/Protected methods\n ****************************************************************/\n\n protected emitChanges(): void {\n if (this.hasErrors && !this.allowInvalid) return;\n\n this._registerOnChange(this.value);\n this._registerOnTouched();\n this.emittedValue = this.value;\n }\n\n protected formatValue(v: string): string {\n if (!(v && typeof v == 'string' && v.length > 0)) return v;\n\n if (this.isLong) return v;\n\n return v.replace(/\\n+/gm, \" \");\n }\n\n protected blur(): void {\n this.input?.nativeElement.blur();\n }\n\n protected updateValidators(): void {\n this.control.clearValidators();\n this.control.setValidators(this.validators);\n this.control.updateValueAndValidity();\n }\n\n protected validateInputs(): void {\n var errors: string[] = [];\n var warnings: string[] = [];\n\n if (this.numbersOnly && this.max && this.min && this.max <= this.min) {\n errors.push(`${this.constructor.name} Warning: [max] must be greater than [min]. [max]=${this.max}, [min]=${this.min}`);\n this.max = InputsDefaults.max;\n this.min = InputsDefaults.min;\n }\n\n if (!this.numbersOnly && this.maxLength && this.minLength && this.maxLength <= this.minLength) {\n errors.push(`${this.constructor.name} Warning: [maxLength] must be greater than [minLength]. [maxLength]=${this.maxLength}, [minLength]=${this.minLength}`);\n this.maxLength = InputsDefaults.maxLength;\n this.minLength = InputsDefaults.minLength;\n }\n\n for (let msg of warnings) {\n console.warn(msg);\n }\n\n for (let msg of errors) {\n console.error(msg);\n }\n }\n\n protected emitAreUnsavedChanges(): void {\n this.areUnsavedChanges$.next(this.areUnsavedChanges);\n }\n}\n","<div [formGroup]=\"form\" class=\"d-flex flex-column\">\n <label [for]=\"id\" *ngIf=\"showLabel\">\n <ng-container *ngIf=\"label\">{{label}}</ng-container>\n <ng-content select=\"[label]\"></ng-content>\n </label>\n\n <div [ngClass]=\"{\n 'show-border': showActionsBar && areUnsavedChanges && this.actionbarClass == 'overlay'\n }\" class=\"border-actionsbar\">\n\n <div class=\"scroll-wrapper\" [resizableTextareaContainer]=\"true\">\n <textarea\n #input\n [rows]=\"1\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n formControlName=\"value\"\n class=\"{{inputStatusClass}} {{classes}}\"\n [ngClass]=\"{\n 'is-short': isShort,\n 'is-long': isLong,\n 'active': areUnsavedChanges && !autosave || isEmpty && isShort && isMandatory\n }\"\n\n [ngStyle]=\"inputStyle || {}\"\n\n (resize)=\"onResize.emit($event)\"\n (dblclick)=\"onDblclick.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n (keypress)=\"onKeyPress.emit($event)\"\n (keyup)=\"onKeyUp.emit($event)\"\n (keydown)=\"onKeyDown.emit($event)\"\n (input)=\"onInput.emit($event)\"\n (change)=\"onChange.emit($event)\"\n (click)=\"onClick.emit($event)\"\n (focus)=\"textareaFocus($event)\"\n ></textarea>\n </div>\n\n <div #customHtmlErrors class=\"errors-container\" [ngClass]=\"{'has-items': showErrors && customHtmlErrors.hasChildNodes()}\" >\n <ng-content select=\"[errors]\" ></ng-content>\n <ng-content select=\"[error]\" ></ng-content>\n </div>\n\n <div class=\"errors-container\" [ngClass]=\"{'has-items': showErrors && hasErrors}\">\n <span *ngFor=\"let error of stringErrorMessages\">{{error}}</span>\n\n <ng-container *ngFor=\"let error of templateErrorMessages\">\n <ng-container *ngTemplateOutlet=\"error\"></ng-container>\n </ng-container>\n </div>\n </div>\n\n\n <ng-content select=\"[after-input]\"></ng-content>\n\n <div *ngIf=\"showActionsBar\" class=\"position-relative\">\n <div class=\"actionsbar {{actionbarClass}}\"\n [ngClass]=\"{'unsavedChanges': areUnsavedChanges, 'has-animation': animateActionbar}\">\n <button [disabled]=\"isDisabled || hasErrors && !allowInvalid\" type=\"button\" (click)=\"submit()\" class=\"confirm\">\n <ng-container *ngIf=\"!submitButtonContainer.hasChildNodes()\">{{submitButtonLabel}}</ng-container>\n\n <span #submitButtonContainer>\n <ng-content select=\"[submitButton]\"></ng-content>\n </span>\n\n </button>\n <button [disabled]=\"isDisabled\" type=\"button\" (click)=\"cancel()\" class=\"cancel\">\n <ng-container *ngIf=\"!cancelButtonContainer.hasChildNodes()\">{{cancelButtonLabel}}</ng-container>\n\n <span #cancelButtonContainer>\n <ng-content select=\"[cancelButton]\"></ng-content>\n </span>\n </button>\n </div>\n </div>\n</div>\n\n<pre *ngIf=\"debugMode\" [innerText]=\"debugJson | json\"></pre>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgxInputEipComponent } from './component/ngx-input-eip/ngx-input-eip.component';\nimport { ResizableTextareaContainerDirective } from './component/resizable-textarea-container.directive';\n\n\nconst declaredExports = [\n NgxInputEipComponent,\n];\n\n@NgModule({\n declarations: [\n ResizableTextareaContainerDirective,\n ...declaredExports,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n ],\n exports: [\n ...declaredExports,\n ]\n})\nexport class NgxInputEipModule { }\n","/*\n * Public API Surface of ngx-input-eip\n */\n\nexport * from './component/ngx-input-eip/ngx-input-eip.component';\nexport * from './ngx-input-eip.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["MessagesEn","selector","i3.ResizableTextareaContainerDirective"],"mappings":"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