UNPKG

sdk-textbox

Version:

Simple to use (Angular) textbox for controlling input while typing.

690 lines 109 kB
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { DatePipe, formatCurrency, formatNumber } from '@angular/common'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "./components/calendar/calendar.component"; export class SDKTextboxComponent { constructor() { /************************************************************************** * Input/Output Parameters **************************************************************************/ this.validCharacters = ""; this.value = ""; this.hint = ""; this.pattern = ""; this.locale = "en-US"; this.multiLine = false; this.showCalendarIcon = true; this.calHeight = "180px"; this.calWidth = "180px"; this.calFontSize = "1.0em"; this.blurCallBackEvent = new EventEmitter(); this.changeCallBackEvent = new EventEmitter(); this.enterCallBackEvent = new EventEmitter(); this.calendarDate = ""; this.showCalendar = false; this.lockCalendar = false; this.pArray = []; this.fArray = []; } //****************************************************************************** // Component Life-cycle Methods //****************************************************************************** ngOnInit() { if (this.validCharacters) { this.validCharacters = this.validCharacters.toString().toLocaleLowerCase(); switch (this.validCharacters) { case "calendar": if (!this.pattern || this.pattern === "") this.pattern = "YYYY-MM-DD"; let divider = this.pattern.replace(/[ymdYMD]/g, "").substring(0, 1); let dividerArray = this.pattern.split(divider); this.hint = this.pattern; this.createPattern(dividerArray[0].replace(/[ymdYMD]/g, "#") + divider + dividerArray[1].replace(/[ymdYMD]/g, "#") + divider + dividerArray[2].replace(/[ymdYMD]/g, "#")); if (this.value && this.value !== "") { let datePipe = new DatePipe(this.locale); let pattern = this.pattern.replace(/[yY]/g, "y").replace(/[mM]/g, "M").replace(/[dD]/g, "d"); let value = this.value.split("T")[0]; this.value = datePipe.transform(value, pattern) || ""; } setTimeout(() => { if (!this.width) { this.text.nativeElement.style.width = `${this.pattern.length * 10}px`; } if (this.component.nativeElement.parentNode.hasAttribute("nocomponent")) { this.showCalendarIcon = false; } }, 1); break; case "email": this.hint = "name@company.com"; break; case "custom": if (this.pattern && this.pattern.indexOf("#") > -1 && !this.pattern.startsWith("[") && !this.pattern.endsWith("]")) { this.hint = this.pattern; this.createPattern(); } break; } } } ngAfterViewInit() { setTimeout(() => { if (this.validCharacters === "calendar" && this.component && this.text) { this.component.nativeElement.style.width = (this.text.nativeElement.clientWidth + 25) + "px"; } }, 100); } //************************************************************************* // Protected Methods //************************************************************************* onKeyDown(event) { this.showCalendar = false; if (event.key === "Enter" && !event.shiftKey) { this.text.nativeElement.blur(); if (this.enterCallBackEvent.observed) { this.enterCallBackEvent.emit(event.target.value); } } else if (event.key === "Backspace" || event.key === "Tab" || event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Meta" || event.key === "Control") { // DO NOTHING } else { let text = this.removeSelection(event); if (!(event.metaKey && event.key === "v") && !(event.metaKey && event.key === "c")) { switch (this.validCharacters) { case "alpha": if (!event.key.match(/[a-zA-Z]/)) { event.preventDefault(); } break; case "numeric": if (!event.key.match(/[0-9]/)) { event.preventDefault(); } break; case "alphanumeric": if (!event.key.match(/[a-zA-Z0-9]/)) { event.preventDefault(); } break; case "decimal": case "currency": if (!event.key.match(/[-0-9.]/) || (event.key === "." && text.match(/[.]/g)) || (event.key === "-" && (event.target.selectionStart !== 0 || text.match(/[-]/g)))) { event.preventDefault(); } let periodArray = text.toString().split("."); if (this.validCharacters === "currency" && periodArray.length > 1 && periodArray[1].length >= 2) { event.preventDefault(); } break; case "calendar": if (!event.key.match(/[0-9]/) || text.replace(/[^0-9]/g, "").length === this.pattern.replace(/[^ymdYMD]/g, "").length) { event.preventDefault(); } break; case "email": if (!event.key.match(/[a-zA-Z0-9._%+-@]/) || (event.key === "@" && text.match(/[@]/g)) || (!text.match(/[@]/g) && text.length >= 64) || (text.match(/[@]/g) && text.length >= 254)) { event.preventDefault(); } let atArray = text.toString().split("@"); if (atArray.length > 1 && event.target.selectionStart > atArray[0].length && !event.key.match(/[a-zA-Z0-9-.]/)) { event.preventDefault(); } break; case "latitude": let latrx = /^([\-]?|[\-]?[1-9]|[\-]?[1-8][0-9]|[\-]?90)(?:[.]\d{0,15})?$/; let lattext = text + event.key; if (!lattext.match(new RegExp(latrx))) { event.preventDefault(); } break; case "longitude": let longrx = /^([\-]?|[\-]?[1-9]|[\-]?[1-9]\d|[\-]?[1][0-7]\d|[\-]?180)(?:[.]\d{0,15})?$/; let longtext = text + event.key; if (!longtext.match(new RegExp(longrx))) { event.preventDefault(); } break; case "custom": if (this.pattern && this.pattern.indexOf("#") > -1 && !this.pattern.startsWith("[") && !this.pattern.endsWith("]") && (!event.key.match(/[0-9]/) || text.length === this.pattern.length)) { event.preventDefault(); } if (this.pattern && this.pattern.startsWith("[") && this.pattern.endsWith("]")) { if (!event.key.match(new RegExp(this.pattern, "g"))) { event.preventDefault(); } } if (this.pattern && this.pattern.startsWith("^") && this.pattern.endsWith("$")) { let newText = text + event.key; if (!newText.match(new RegExp(this.pattern))) { event.preventDefault(); } } break; default: break; } } } } onBlur(event) { let text = event.target.value; if (this.validCharacters && text && text !== "") { text = this.cleanText(text); text = this.formatText(text); event.target.value = text; } if (this.validCharacters) { this.validCharacters = this.validCharacters.toString().toLocaleLowerCase(); switch (this.validCharacters) { case "calendar": if (!this.lockCalendar) { this.showCalendar = false; } break; } } if (this.blurCallBackEvent.observed) { this.blurCallBackEvent.emit(this.text.nativeElement.value); } } onInput(event) { if (this.validCharacters === "decimal" || this.validCharacters === "currency") { this.setNumericText(event); } if (this.validCharacters === "calendar") { this.setCalendarText(event); } if (this.validCharacters === "email") { this.setEmailText(event); } if (this.validCharacters === "latitude") { this.setLatitude(event); } if (this.validCharacters === "longitude") { this.setLongitude(event); } if (this.validCharacters === "custom" && this.pArray.length > 0) { this.setCustomText(event); } if (this.changeCallBackEvent.observed) { this.changeCallBackEvent.emit(this.text.nativeElement.value); } } onCut(event) { let textLeft = event.target.value.toString().substring(0, event.target.selectionStart); let textRight = event.target.value.toString().substring(event.target.selectionEnd); let text = textLeft + textRight; let clipboardData = event.clipboardData || event.originalEvent.clipboardData; clipboardData.items.add(text, 'text/plain'); } onPaste(event) { let clipboardData = event.clipboardData || event.originalEvent.clipboardData; let text = clipboardData.getData('text'); let textLeft = event.target.value.toString().substring(0, event.target.selectionStart); let textRight = event.target.value.toString().substring(event.target.selectionEnd); text = textLeft + text + textRight; event.preventDefault(); if ((this.validCharacters === "custom" && this.pattern.startsWith("^") && this.pattern.endsWith("$")) || this.validCharacters === "latitude" || this.validCharacters === "longitude") { event.target.value = ""; } else { text = this.cleanText(text); event.target.value = text; } if (this.changeCallBackEvent.observed) { this.changeCallBackEvent.emit(this.text.nativeElement.value); } } showComponent(event) { if (this.validCharacters) { this.validCharacters = this.validCharacters.toString().toLocaleLowerCase(); switch (this.validCharacters) { case "calendar": if (!this.component.nativeElement.parentNode.hasAttribute("nocomponent")) { this.calendarDate = this.text.nativeElement.value; this.showCalendar = true; } break; } } } setDate(date) { this.text.nativeElement.value = this.formatText(date); if (this.changeCallBackEvent.observed) { this.changeCallBackEvent.emit(this.text.nativeElement.value); } this.showCalendar = false; } //************************************************************************* // Private Methods //************************************************************************* setNumericText(event) { let text = event.target.value; let newText = ""; let beforeLength = text.length; let afterLength = 0; let cursorStart = event.target.selectionStart; let cursor = 0; event.preventDefault(); newText = text.toString().replace(/[^-0-9.]/g, ""); newText = newText.toString().replace(/\B(?=([0-9]{3})+(?![0-9]))/g, ","); let periodArray = newText.toString().split("."); if (periodArray.length > 1) { newText = periodArray[0] + "." + periodArray[1].replace(/[,]/g, ""); } afterLength = newText.length; cursor = cursorStart + (afterLength - beforeLength); event.target.value = newText; event.target.selectionStart = cursor; event.target.selectionEnd = cursor; } setCalendarText(event) { let text = event.target.value; let newText = ""; let beforeLength = text.length; let afterLength = 0; let cursorStart = event.target.selectionStart; let cursor = 0; event.preventDefault(); newText = text.toString().replace(/[^0-9]/g, ""); for (let x = 0; x < this.pArray.length; x++) { newText = newText.replace(new RegExp(this.pArray[x]), this.fArray[x]); } afterLength = newText.length; cursor = cursorStart + (afterLength - beforeLength); event.target.value = newText; event.target.selectionStart = cursor; event.target.selectionEnd = cursor; } setEmailText(event) { let text = event.target.value; let newText = ""; let beforeLength = text.length; let afterLength = 0; let cursorStart = event.target.selectionStart; let cursor = 0; event.preventDefault(); newText = text.toString().replace(/[^a-zA-Z0-9._%+-@]/g, ""); let atArray = newText.toString().split("@"); if (atArray.length > 1) { newText = atArray[0].substring(0, 63) + "@" + atArray.slice(1).toString().replace(/[^a-zA-Z0-9-.]/g, ""); } else { newText = newText.substring(0, 63); } newText = newText.substring(0, 253); afterLength = newText.length; cursor = cursorStart + (afterLength - beforeLength); event.target.value = newText; event.target.selectionStart = cursor; event.target.selectionEnd = cursor; } setLatitude(event) { let text = event.target.value; let newText = text; event.preventDefault(); if (Number(text) < -90) { newText = -90; } if (Number(text) > 90) { newText = 90; } event.target.value = newText; } setLongitude(event) { let text = event.target.value; let newText = text; event.preventDefault(); if (Number(text) < -180) { newText = -180; } if (Number(text) > 180) { newText = 180; } event.target.value = newText; } setCustomText(event) { let text = event.target.value; let newText = ""; let beforeLength = text.length; let afterLength = 0; let cursorStart = event.target.selectionStart; let cursor = 0; event.preventDefault(); if (text === "+1 ") text = ""; newText = text.toString().replace(/[^0-9]/g, ""); for (let x = 0; x < this.pArray.length; x++) { newText = newText.replace(new RegExp(this.pArray[x]), this.fArray[x]); } afterLength = newText.length; cursor = cursorStart + (afterLength - beforeLength); event.target.value = newText; event.target.selectionStart = cursor; event.target.selectionEnd = cursor; } removeSelection(event) { let textLeft = event.target.value.toString().substring(0, event.target.selectionStart); let textRight = event.target.value.toString().substring(event.target.selectionEnd + 1); return textLeft + textRight; } cleanText(text) { if (this.validCharacters?.toString().startsWith("[")) { let format = "[^" + this.validCharacters?.toString().split("[")[1]; text = text.toString().replace(new RegExp(format, "g"), ""); } else { switch (this.validCharacters) { case "alpha": text = text.toString().replace(/[^a-zA-Z]/g, ""); break; case "numeric": text = text.toString().replace(/[^0-9]/g, ""); break; case "alphanumeric": text = text.toString().replace(/[^a-zA-Z0-9]/g, ""); break; case "decimal": case "currency": text = text.toString().replace(/[^0-9.-]|(?:\/[.].*)[.]|(?!^)-/g, ""); break; case "calendar": if (this.pattern) { let re = "[^0-9" + this.encodeText(Array.from(new Set(this.pattern.replace(/[a-zA-Z0-9]/g, "").split(""))).join("")) + "]"; text = text.toString().replace(new RegExp(re, "g"), ""); } break; case "email": text = text.toString().replace(/[^a-zA-Z0-9._%+-@]/g, ""); let atArray = text.toString().split("@"); if (atArray.length > 1) { let periodArray = atArray[1].toString().split("."); if (periodArray.length > 1) { let type = periodArray.slice(periodArray.length - 1); type = type.toString().replace(/[^a-zA-Z]/g, ""); periodArray.pop(); text = atArray[0] + "@" + periodArray.join(".") + "." + type; } } break; case "latitude": case "longitude": let re = "(" + this.pattern + ")"; text = text.toString().replace(new RegExp(re, "g"), "$1"); break; case "custom": if (this.pattern) { if (this.pattern.indexOf("#") > -1 && !this.pattern.startsWith("[") && !this.pattern.endsWith("]")) { let re = "[^0-9" + this.encodeText(Array.from(new Set(this.pattern.split(""))).join("")) + "]"; text = text.toString().replace(new RegExp(re.replace("#", ""), "g"), ""); text = text.substring(0, this.pattern.length); } if (this.pattern.startsWith("[") && this.pattern.endsWith("]")) { let re = this.pattern.replace("[", "[^"); if (this.pattern.startsWith("[^")) { re = this.pattern.replace("[^", "["); } text = text.toString().replace(new RegExp(re, "g"), ""); } if (this.pattern.startsWith("^") && this.pattern.endsWith("$")) { let re = "(" + this.pattern + ")"; text = text.toString().replace(new RegExp(re, "g"), "$1"); } } break; default: break; } } return text; } formatText(text) { if (this.validCharacters === "currency") { text = formatCurrency(parseFloat(text), this.locale, this.pattern ?? '$'); } else if (this.validCharacters === "custom" || this.validCharacters === "latitude" || this.validCharacters === "longitude") { // DO NOTHING } else if (this.validCharacters === "calendar") { const datepipe = new DatePipe(this.locale); let pattern = this.pattern.replace(/[yY]/g, "y").replace(/[mM]/g, "M").replace(/[dD]/g, "d"); try { text = datepipe.transform(text, pattern, undefined, this.locale); this.text.nativeElement.style.backgroundColor = ""; } catch { setTimeout(() => { this.text.nativeElement.style.backgroundColor = "rgb(255, 210, 217)"; this.text.nativeElement.focus(); }, 1); } } else { if (this.pattern) { text = formatNumber(parseFloat(text), this.locale, this.pattern); } } return text; } createPattern(pattern = "") { if (pattern === "") { pattern = this.pattern?.trim() ?? ""; } let ws = pattern.replace(/([\#])\1+/g, "#"); let wsPattern = ""; let breakArray = []; let cnt = 1; let wsBreak = ""; for (let x = 0; x < ws.length; x++) { if (ws[x] === "#") { wsPattern += `$${cnt}`; cnt++; } else { wsPattern += ws[x]; } wsBreak = ws[x]; if (ws[x] === " " || ws[x] === "-" || ws[x] === "." || ws[x] === "/" || ws[x] === "_") { breakArray.push(wsBreak); wsBreak = ""; } } let charArray = []; let chars = ""; for (let x = 0; x < pattern.length; x++) { if (pattern[x] === "#") { chars += "#"; } else { if (chars !== "") { charArray.push(chars); } chars = ""; } } // Add any remaining chars. if (chars !== "") { charArray.push(chars); } let patternArray = []; for (let x = 0; x < charArray.length; x++) { patternArray.push(`[0-9]{1,${charArray[x].length}}`); } this.pArray = []; this.fArray = []; let wsFilter = ws; let wspFilter = wsPattern; let f = ""; let p = ""; for (let l = 0; l < patternArray.length; l++) { f = wsFilter.split(breakArray[l])[0]; wsFilter = wsFilter.substring(f.length + 1); p = wspFilter.split(breakArray[l])[0]; wspFilter = wspFilter.substring(p.length + 1); for (let x = l; x < patternArray.length; x++) { if (this.pArray[x] === undefined) this.pArray.push(""); if (this.fArray[x] === undefined) this.fArray.push(""); let m = (l > 0) ? "*" : ""; // build left-side (pArray) if (f.startsWith("#") && f.endsWith("#")) { // number only if (x === l) { this.pArray[x] += m + "(" + patternArray[l] + ")"; } else { this.pArray[x] += this.encodeText(f).replace("#", m + "(" + patternArray[l].replace("1,", "") + ")") + this.encodeText(breakArray[l]); } } if (!f.startsWith("#") && !f.endsWith("#")) { // wrapper if (x === l) { this.pArray[x] += m + "(" + patternArray[l] + ")"; } else if (x === (l + 1)) { this.pArray[x] += m + "(" + patternArray[l].replace("1,", "") + ")" + this.encodeText(breakArray[l]); } else { this.pArray[x] += this.encodeText(f).replace("#", m + "(" + patternArray[l].replace("1,", "") + ")") + this.encodeText(breakArray[l]); } } if (!f.startsWith("#") && f.endsWith("#")) { // starts with non-digit if (x === l) { this.pArray[x] += m + "(" + patternArray[l] + ")"; } else { this.pArray[x] += m + "(" + patternArray[l].replace("1,", "") + ")" + this.encodeText(breakArray[l]); } } if (f.startsWith("#") && !f.endsWith("#")) { // ends with non-digit if (x === l) { this.pArray[x] += m + "(" + patternArray[l] + ")"; } else { this.pArray[x] += m + "(" + patternArray[l].replace("1,", "") + ")" + this.encodeText(breakArray[l]); } } // build right-side (fArray) if (f.startsWith("#") && f.endsWith("#")) { // number only if (l === x) { this.fArray[x] += p; } else { this.fArray[x] += p + (breakArray[l] ?? ""); } } if (!f.startsWith("#") && !f.endsWith("#")) { // wrapper if (l === x) { this.fArray[x] += p.replace(/[^$0-9]/g, ""); } else { this.fArray[x] += p + (breakArray[l] ?? ""); } } if (!f.startsWith("#") && f.endsWith("#")) { // starts with non-digit if (l === x) { this.fArray[x] += p; } else { this.fArray[x] += p + (breakArray[l] ?? ""); } } if (f.startsWith("#") && !f.endsWith("#")) { // ends with non-digit if (l === x) { this.fArray[x] += p.replace(/[^$0-9]/g, ""); } else { this.fArray[x] += p + (breakArray[l] ?? ""); } } } } } encodeText(text) { return text.replace(/[|{}\\()[\]^$+*?.+]/g, '\\$&').replace(/\s/, "\\s"); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: SDKTextboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: SDKTextboxComponent, selector: "sdk-textbox", inputs: { validCharacters: "validCharacters", value: "value", hint: "hint", pattern: "pattern", locale: "locale", multiLine: "multiLine", border: "border", padding: "padding", margin: "margin", height: "height", width: "width", style: "style", class: "class", showCalendarIcon: "showCalendarIcon", calHeight: "calHeight", calWidth: "calWidth", calFontSize: "calFontSize" }, outputs: { blurCallBackEvent: "blurCallBackEvent", changeCallBackEvent: "changeCallBackEvent", enterCallBackEvent: "enterCallBackEvent" }, viewQueries: [{ propertyName: "component", first: true, predicate: ["component"], descendants: true }, { propertyName: "text", first: true, predicate: ["text"], descendants: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true }], ngImport: i0, template: "<div #component class=\"sdk_textbox\" style=\"position: relative; padding: 0;\">\n <div *ngIf=\"!multiLine\" [ngStyle]=\"{ 'margin': margin ?? '0', 'border': 'unset', 'height': height ?? 'unset', 'width': width ?? 'unset' }\">\n <input #text type=\"text\" [ngStyle]=\"{ 'padding': padding ?? '5px', 'margin': '0', 'border': border ?? '1px solid rgb(200, 200, 200)', 'height': '100%', 'width': '100%' }\" [class]=\"class\" [style]=\"style\" [placeholder]=\"hint\" (keydown)=\"onKeyDown($event)\" (focus)=\"text.select()\" (blur)=\"onBlur($event)\" (input)=\"onInput($event)\" (cut)=\"onCut($event)\" (paste)=\"onPaste($event)\" (click)=\"!showCalendarIcon ? showComponent($event) : false\" [value]=\"value\" />\n <i *ngIf=\"validCharacters === 'calendar' && showCalendarIcon\" class=\"sdk-icon\" (click)=\"showComponent($event); text.focus(); lockCalendar = true\" (mouseout)=\"lockCalendar = false; showCalendar ? text.focus() : false;\">calendar_month</i>\n <calendar *ngIf=\"showCalendar && validCharacters?.toLocaleLowerCase() === 'calendar'\" #calendar [date]=\"calendarDate\" [show]=\"showCalendar\" [height]=\"calHeight\" [width]=\"calWidth\" [fontSize]=\"calFontSize\" (setDateEvent)=\"setDate($event)\" (mouseover)=\"lockCalendar = true\" (mouseout)=\"lockCalendar = false; text.focus()\"></calendar>\n </div>\n <div *ngIf=\"multiLine\" [ngStyle]=\"{ 'margin': margin ?? '0', 'border': 'unset', 'height': height ?? 'unset', 'width': width ?? 'unset' }\">\n <textarea #text [ngStyle]=\"{ 'padding': padding ?? '5px', 'margin': '0', 'border': border ?? '1px solid rgb(200, 200, 200)', 'height':'100%', 'width': '100%' }\" [class]=\"class\" [style]=\"style\" [placeholder]=\"hint\" (keydown)=\"onKeyDown($event)\" (focus)=\"text.select()\" (blur)=\"onBlur($event)\" (input)=\"onInput($event)\" (cut)=\"onCut($event)\" (paste)=\"onPaste($event)\" (click)=\"!showCalendarIcon ? showComponent($event) : false\" [value]=\"value\"></textarea>\n </div>\n</div>\n", styles: [".sdk_textbox input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sdk_textbox textarea{resize:none;box-sizing:border-box;outline:none}.sdk-icon{position:absolute;top:50%;transform:translateY(-50%);color:#b9b9b9;font-size:1.4em;cursor:pointer}::placeholder{color:#dcdcdc;opacity:1}:-ms-input-placeholder{color:#dcdcdc}::-ms-input-placeholder{color:#dcdcdc}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.CalendarComponent, selector: "calendar", inputs: ["date", "show", "height", "width", "fontSize"], outputs: ["setDateEvent"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: SDKTextboxComponent, decorators: [{ type: Component, args: [{ selector: 'sdk-textbox', template: "<div #component class=\"sdk_textbox\" style=\"position: relative; padding: 0;\">\n <div *ngIf=\"!multiLine\" [ngStyle]=\"{ 'margin': margin ?? '0', 'border': 'unset', 'height': height ?? 'unset', 'width': width ?? 'unset' }\">\n <input #text type=\"text\" [ngStyle]=\"{ 'padding': padding ?? '5px', 'margin': '0', 'border': border ?? '1px solid rgb(200, 200, 200)', 'height': '100%', 'width': '100%' }\" [class]=\"class\" [style]=\"style\" [placeholder]=\"hint\" (keydown)=\"onKeyDown($event)\" (focus)=\"text.select()\" (blur)=\"onBlur($event)\" (input)=\"onInput($event)\" (cut)=\"onCut($event)\" (paste)=\"onPaste($event)\" (click)=\"!showCalendarIcon ? showComponent($event) : false\" [value]=\"value\" />\n <i *ngIf=\"validCharacters === 'calendar' && showCalendarIcon\" class=\"sdk-icon\" (click)=\"showComponent($event); text.focus(); lockCalendar = true\" (mouseout)=\"lockCalendar = false; showCalendar ? text.focus() : false;\">calendar_month</i>\n <calendar *ngIf=\"showCalendar && validCharacters?.toLocaleLowerCase() === 'calendar'\" #calendar [date]=\"calendarDate\" [show]=\"showCalendar\" [height]=\"calHeight\" [width]=\"calWidth\" [fontSize]=\"calFontSize\" (setDateEvent)=\"setDate($event)\" (mouseover)=\"lockCalendar = true\" (mouseout)=\"lockCalendar = false; text.focus()\"></calendar>\n </div>\n <div *ngIf=\"multiLine\" [ngStyle]=\"{ 'margin': margin ?? '0', 'border': 'unset', 'height': height ?? 'unset', 'width': width ?? 'unset' }\">\n <textarea #text [ngStyle]=\"{ 'padding': padding ?? '5px', 'margin': '0', 'border': border ?? '1px solid rgb(200, 200, 200)', 'height':'100%', 'width': '100%' }\" [class]=\"class\" [style]=\"style\" [placeholder]=\"hint\" (keydown)=\"onKeyDown($event)\" (focus)=\"text.select()\" (blur)=\"onBlur($event)\" (input)=\"onInput($event)\" (cut)=\"onCut($event)\" (paste)=\"onPaste($event)\" (click)=\"!showCalendarIcon ? showComponent($event) : false\" [value]=\"value\"></textarea>\n </div>\n</div>\n", styles: [".sdk_textbox input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sdk_textbox textarea{resize:none;box-sizing:border-box;outline:none}.sdk-icon{position:absolute;top:50%;transform:translateY(-50%);color:#b9b9b9;font-size:1.4em;cursor:pointer}::placeholder{color:#dcdcdc;opacity:1}:-ms-input-placeholder{color:#dcdcdc}::-ms-input-placeholder{color:#dcdcdc}\n"] }] }], propDecorators: { validCharacters: [{ type: Input }], value: [{ type: Input }], hint: [{ type: Input }], pattern: [{ type: Input }], locale: [{ type: Input }], multiLine: [{ type: Input }], border: [{ type: Input }], padding: [{ type: Input }], margin: [{ type: Input }], height: [{ type: Input }], width: [{ type: Input }], style: [{ type: Input }], class: [{ type: Input }], showCalendarIcon: [{ type: Input }], calHeight: [{ type: Input }], calWidth: [{ type: Input }], calFontSize: [{ type: Input }], blurCallBackEvent: [{ type: Output }], changeCallBackEvent: [{ type: Output }], enterCallBackEvent: [{ type: Output }], component: [{ type: ViewChild, args: ["component"] }], text: [{ type: ViewChild, args: ["text"] }], calendar: [{ type: ViewChild, args: ["calendar"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXRleHRib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrLXRleHRib3gvc3JjL2xpYi9zZGstdGV4dGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGstdGV4dGJveC9zcmMvbGliL3Nkay10ZXh0Ym94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBUXpFLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPSTs7bUZBRTJFO1FBQ3JFLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLFdBQU0sR0FBVyxPQUFPLENBQUM7UUFDekIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVEzQixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUM1QixhQUFRLEdBQVcsT0FBTyxDQUFDO1FBQzNCLGdCQUFXLEdBQVcsT0FBTyxDQUFDO1FBQzdCLHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVELHVCQUFrQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBUzNELGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRWhDLFdBQU0sR0FB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