sdk-textbox
Version:
Simple to use (Angular) textbox for controlling input while typing.
690 lines • 109 kB
JavaScript
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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