{"version":3,"file":"index.mjs","sources":["../../../projects/core/src/enums/enums.ts","../../../projects/core/src/utils/build-utils.ts","../../../projects/core/src/constants/currency-constants.ts","../../../projects/core/src/utils/dom.ts","../../../projects/core/src/utils/wm-project-properties.ts","../../../projects/core/src/utils/id-generator.ts","../../../projects/core/src/utils/expression-parser.ts","../../../projects/core/src/utils/watcher.ts","../../../projects/core/src/types/types.ts","../../../projects/core/src/utils/utils.ts","../../../projects/core/src/utils/event-notifier.ts","../../../projects/core/src/services/viewport.service.ts","../../../projects/core/src/services/constant.service.ts","../../../projects/core/src/services/utils.service.ts","../../../projects/core/src/services/field-type.service.ts","../../../projects/core/src/services/field-widget.service.ts","../../../projects/core/src/services/script-loader.service.ts","../../../projects/core/src/services/user-custom-pipe-manager.service.ts","../../../projects/core/src/services/custom-icons-loader.service.ts","../../../projects/core/src/services/state-persistence.service.ts","../../../projects/core/src/services/pagination.service.ts","../../../projects/core/src/utils/lru-cache.ts","../../../projects/core/src/public_api.ts","../../../projects/core/src/index.ts"],"sourcesContent":["export enum FormWidgetType {\n    AUTOCOMPLETE = 'autocomplete',\n    CHECKBOX = 'checkbox',\n    CHECKBOXSET = 'checkboxset',\n    CHIPS = 'chips',\n    COLORPICKER = 'colorpicker',\n    CURRENCY = 'currency',\n    CUSTOMWIDGET = 'custom-widget',\n    DATE = 'date',\n    DATETIME = 'datetime',\n    ICONBUTTONTOGGLE = 'iconbutton-toggle',\n    NUMBER = 'number',\n    PASSWORD = 'password',\n    RADIOSET = 'radioset',\n    RATING = 'rating',\n    RICHTEXT = 'richtext',\n    SELECT = 'select',\n    TOGGLE = 'toggle',\n    SLIDER = 'slider',\n    SWITCH = 'switch',\n    TEXT = 'text',\n    TEXTAREA = 'textarea',\n    TIME = 'time',\n    TIMESTAMP = 'timestamp',\n    TYPEAHEAD = 'typeahead',\n    UPLOAD = 'upload'\n}\n\nexport enum DataType {\n    INTEGER = 'integer',\n    BIG_INTEGER = 'big_integer',\n    SHORT = 'short',\n    FLOAT = 'float',\n    BIG_DECIMAL = 'big_decimal',\n    DOUBLE = 'double',\n    LONG = 'long',\n    BYTE = 'byte',\n    STRING = 'string',\n    CHARACTER = 'character',\n    TEXT = 'text',\n    DATE = 'date',\n    TIME = 'time',\n    TIMESTAMP = 'timestamp',\n    DATETIME = 'datetime',\n    LOCALDATETIME = 'localdatetime',\n    BOOLEAN = 'boolean',\n    LIST = 'list',\n    CLOB = 'clob',\n    BLOB = 'blob'\n}\n\nexport enum MatchMode {\n    BETWEEN = 'between',\n    GREATER = 'greaterthanequal',\n    LESSER = 'lessthanequal',\n    NULL = 'null',\n    EMPTY = 'empty',\n    NULLOREMPTY = 'nullorempty',\n    EQUALS = 'exact'\n}\n\nexport enum DEFAULT_FORMATS {\n    DATE = 'yyyy-MM-dd',\n    TIME = 'HH:mm:ss',\n    TIMESTAMP = 'timestamp',\n    DATETIME = 'yyyy-MM-ddTHH:mm:ss',\n    LOCALDATETIME = 'yyyy-MM-ddTHH:mm:ss',\n    DATETIME_ORACLE = 'yyyy-MM-dd HH:mm:ss',\n    DATE_TIME = 'yyyy-MM-dd HH:mm:ss'\n}\n","import {Attribute, Element} from '@angular/compiler';\nimport {FormWidgetType} from '../enums/enums';\nimport {includes, isArray, startsWith} from \"lodash-es\";\n\n// For html upload widget, add events on input tag\nconst getUploadEventTmpl = (attrs, counter?, fieldName?) => {\n    let eventTmpl = '';\n    attrs.forEach((val, key) => {\n       if (key && key.endsWith('.event')) {\n           const eventName = key.split('.')[0];\n           const counterTl = counter ? `${counter}.` : '';\n           eventTmpl = ` ${eventTmpl} (${eventName})=\"${counterTl}triggerUploadEvent($event, '${eventName}', '${fieldName}', row)\" `;\n       }\n    });\n    return eventTmpl;\n};\n\n// Method to get the form widget template\nexport const getFormWidgetTemplate = (widgetType: string, innerTmpl: string, attrs?: Map<string, string>, options: any = {}) => {\n    let tmpl;\n    const updateOn = attrs.get('updateon');\n    const updateOnTmpl = updateOn ? `updateon=\"${updateOn}\"` : '';\n    const showineditmode = attrs.get('showineditmode') || attrs.get('showineditmode.bind') || true;\n    const showTmpl: string  = showineditmode == 'false'? `show=\"${showineditmode}\"`: `show.bind=\"${showineditmode}\"`;\n    switch (widgetType) {\n        case FormWidgetType.AUTOCOMPLETE:\n        case FormWidgetType.TYPEAHEAD:\n            tmpl = `<div wmSearch type=\"autocomplete\" debouncetime=\"${attrs.get('debouncetime')}\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.CHECKBOX:\n            tmpl = `<div wmCheckbox ${innerTmpl} ${attrs.get('required')==='true' ? 'required=true' : ''} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.CHECKBOXSET:\n            tmpl = `<ul role=\"group\" wmCheckboxset ${innerTmpl} ${attrs.get('required')==='true' ? 'required=true' : ''} ${showTmpl}></ul>`;\n            break;\n        case FormWidgetType.CHIPS:\n            tmpl = `<ul wmChips debouncetime=\"${attrs.get('debouncetime')}\" ${innerTmpl} ${showTmpl}></ul>`;\n            break;\n        case FormWidgetType.COLORPICKER:\n            tmpl = `<div wmColorPicker ${attrs.get('required')==='true' ? 'required=true' : ''} ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.CURRENCY:\n            tmpl = `<div wmCurrency ${attrs.get('required')==='true' ? 'required=true' : ''} ${updateOnTmpl} ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.CUSTOMWIDGET:\n            tmpl = `<div wmWidgetContainer customWidgetContainer ${attrs.get('required')==='true' ? 'required=true' : ''} ${updateOnTmpl} ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.DATE:\n            tmpl = `<div wmDate ${attrs.get('required')==='true' ? 'required=true' : ''} dataentrymode=\"${attrs.get('dataentrymode')}\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.DATETIME:\n            tmpl = `<div wmDateTime ${attrs.get('required')==='true' ? 'required=true' : ''} dataentrymode=\"${attrs.get('dataentrymode')}\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.NUMBER:\n            tmpl = `<div wmNumber ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type=\"number\" ${updateOnTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.PASSWORD:\n            tmpl = `<wm-input ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type=\"password\" ${updateOnTmpl} ${showTmpl}></wm-input>`;\n            break;\n        case FormWidgetType.RADIOSET:\n            tmpl = `<ul role=\"radiogroup\" wmRadioset ${innerTmpl} ${showTmpl}></ul>`;\n            break;\n        case FormWidgetType.RATING:\n            tmpl = `<div wmRating ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.RICHTEXT:\n            tmpl = `<div wmRichTextEditor role=\"textbox\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.SELECT:\n            tmpl = `<wm-select ${attrs.get('required')==='true' ? 'required=true' : ''} ${innerTmpl} ${showTmpl}></wm-select>`;\n            break;\n        case FormWidgetType.TOGGLE:\n            tmpl = `<div wmCheckbox ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type=\"toggle\" ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.ICONBUTTONTOGGLE:\n            tmpl = `<div wmCheckbox ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} type=\"button\" ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.SLIDER:\n            tmpl = `<div wmSlider ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.SWITCH:\n            tmpl = `<div wmSwitch ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.TEXT:\n            const inputType = options.inputType || 'inputtype';\n            tmpl = `<wm-input ${innerTmpl}  ${attrs.get('required')==='true' ? 'required=true' : ''} type=\"${attrs.get(inputType) || 'text'}\" ${updateOnTmpl} ${showTmpl}></wm-input>`;\n            break;\n        case FormWidgetType.TEXTAREA:\n            tmpl = `<wm-textarea ${innerTmpl} ${attrs.get('required') === 'true' ? 'required=true' : ''} ${updateOnTmpl} ${showTmpl}></wm-textarea>`;\n            break;\n        case FormWidgetType.TIME:\n            tmpl = `<div wmTime ${attrs.get('required')==='true' ? 'required=true' : ''} dataentrymode=\"${attrs.get('dataentrymode')}\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.TIMESTAMP:\n            tmpl = `<div wmDateTime ${attrs.get('required') === 'true' ? 'required=true' : ''} dataentrymode=\"${attrs.get('dataentrymode')}\" ${innerTmpl} ${showTmpl}></div>`;\n            break;\n        case FormWidgetType.UPLOAD:\n            const counter = options.counter;\n            const pCounter = options.pCounter;\n            const uploadProps = options.uploadProps;\n            const eventTmpl = getUploadEventTmpl(attrs, counter, uploadProps && uploadProps.name);\n            if (uploadProps) {\n                tmpl = `<form name=\"${uploadProps.formName}\" ${innerTmpl}>\n                            <input focus-target class=\"file-upload\" type=\"file\" name=\"${uploadProps.name}\" ${eventTmpl} ${showTmpl}/>\n                        </form>`;\n            } else {\n                tmpl = `@if (${counter}.filetype === 'image' && ${counter}.href) {\n                            <a class=\"form-control-static\" href=\"{{${counter}.href}}\" target=\"_blank\">\n                            <img style=\"height:2em\" class=\"wi wi-file\" [src]=\"${counter}.href\"/></a>\n                        }\n                        @if (${counter}.filetype !== 'image' && ${counter}.href) {\n                            <a class=\"form-control-static\" target=\"_blank\" href=\"{{${counter}.href}}\">\n                            <i class=\"wi wi-file\"></i></a>\n                        }\n                        <input ${innerTmpl} class=\"app-blob-upload\" [ngClass]=\"{'file-readonly': ${counter}.readonly}\" ${eventTmpl}\n                        [required]=\"${counter}.required\" type=\"file\" name=\"${attrs.get('key') || attrs.get('name')}_formWidget\" [readonly]=\"${counter}.readonly\"\n                        [class.hidden]=\"!${pCounter}.isUpdateMode\" [accept]=\"${counter}.permitted\" ${showTmpl}>`;\n            }\n            break;\n        default:\n            tmpl = `<wm-input ${innerTmpl} ${attrs.get('required')==='true' ? 'required=true' : ''} type=\"text\" ${updateOnTmpl} ${showTmpl}></wm-input>`;\n            break;\n    }\n    return tmpl;\n};\n\nexport const getRequiredFormWidget = (widgetType): string => {\n    switch (widgetType) {\n        case FormWidgetType.AUTOCOMPLETE:\n        case FormWidgetType.TYPEAHEAD:\n            return 'wm-search';\n        case FormWidgetType.CHIPS:\n            return 'wm-chips';\n        case FormWidgetType.COLORPICKER:\n            return 'wm-colorpicker';\n        case FormWidgetType.CURRENCY:\n            return 'wm-currency';\n        case FormWidgetType.CUSTOMWIDGET:\n            return 'wm-custom-widget';\n        case FormWidgetType.DATE:\n            return 'wm-date';\n        case FormWidgetType.DATETIME:\n        case FormWidgetType.TIMESTAMP:\n            return 'wm-datetime';\n        case FormWidgetType.TIME:\n            return 'wm-time';\n        case FormWidgetType.RATING:\n            return 'wm-rating';\n        case FormWidgetType.RICHTEXT:\n            return 'wm-richtexteditor';\n        case FormWidgetType.SLIDER:\n            return 'wm-slider';\n\n        case FormWidgetType.CHECKBOXSET:\n            return 'wm-checkboxset';\n        case FormWidgetType.NUMBER:\n            return 'wm-number';\n        case FormWidgetType.PASSWORD:\n            return 'wm-text';\n        case FormWidgetType.RADIOSET:\n            return 'wm-radioset';\n        case FormWidgetType.SWITCH:\n            return 'wm-switch';\n        case FormWidgetType.SELECT:\n            return 'wm-select';\n        case FormWidgetType.TEXTAREA:\n            return 'wm-textarea';\n        case FormWidgetType.CHECKBOX:\n        case FormWidgetType.TOGGLE:\n        case FormWidgetType.ICONBUTTONTOGGLE:\n            return 'wm-checkbox';\n        case FormWidgetType.UPLOAD:\n            return 'wm-fileupload';\n        default:\n            return 'wm-text';\n    }\n};\n\n// This mehtod is used to add datasetboundexpr attribute for node\nconst addDatasetBoundExprAttribute = (childNode: Element, attr: Attribute, attrValue: string) => {\n    attrValue = attrValue.replace('bind:', '');\n    const datasetBoundAttribute = childNode.attrs.find( a => a.name === 'datasetboundexpr');\n    if (attr.name === 'dataset' && !datasetBoundAttribute) {\n        childNode.attrs.push(new Attribute('datasetboundexpr', attrValue, attr.sourceSpan, attr.keySpan, attr.valueSpan, undefined, undefined));\n    }\n};\n\n\n/**\n * exp: User built bind expression\n *  To check the custom pipe expressions.\n *  If user use the custom pipe expression it will check in the exp. that \"custom\" string exist or not with (:) syntax.\n *  Eg: custom:\n *      custom    :\n */\nexport const checkIsCustomPipeExpression = function(exp){\n    let customRegEx = /(custom(\\s*:))/g;\n    let matches = exp.match(customRegEx);\n    return matches && matches.length;\n}\n\n\n// The bound value is replaced with {{item.fieldname}} here. This is needed by the liveList when compiling inner elements\nexport const updateTemplateAttrs = (rootNode: Element | Array<Element>, parentDataSet: string, widgetName: string, instance: string = '', referenceName: string = 'item') => {\n\n    const sanitizedParentDataset = parentDataSet.replace(/([^a-zA-Z0-9.])/g, '\\\\$1');\n    const regex = new RegExp('(' + sanitizedParentDataset + ')(\\\\[0\\\\])?(.data\\\\[\\\\$i\\\\])?(.content\\\\[\\\\$i\\\\])?(\\\\[\\\\$i\\\\])?', 'g');\n    let currentItemRegEx;\n    let currentItemWidgetsRegEx;\n    let formWidgetsRegex;\n    let nodes: Array<Element>;\n    const widgetList = {\n        'wm-list': ['itemclass', 'disableitem', 'dataset']\n    };\n\n    if (widgetName) {\n        currentItemRegEx = new RegExp(`(Widgets.${widgetName}.currentItem)\\\\b`, 'g');\n        currentItemWidgetsRegEx = new RegExp(`(Widgets.${widgetName}.currentItemWidgets)\\\\b`, 'g');\n        formWidgetsRegex = new RegExp(`(Widgets.(.*).(formWidgets|filterWidgets))\\\\b`, 'g');\n    }\n\n    if (!isArray(rootNode)) {\n        // [WMS-16712],[WMS-16769],[WMS-16805] The markup of root node(table, list, carousel) need to be updated only for the widgets mentioned in widgetList map.\n        nodes = widgetList[(rootNode as any).name] ? [rootNode as Element] : ((rootNode as any).children || []) as Array<Element>;\n    } else {\n        nodes = rootNode as Array<Element>;\n    }\n\n    nodes.forEach((childNode: Element) => {\n        if (childNode.name) {\n            const nodeName = childNode.name;\n            const parentDataSetLengthRegex =  new RegExp('bind:\\\\s*\\\\(*' + parentDataSet + '\\\\)*\\\\.length\\\\)*');\n            childNode.attrs.forEach((attr) => {\n                // trim the extra spaces in bindings\n                let value = attr.value && attr.value.trim();\n                if (startsWith(value, 'bind:')) {\n                    // The markup of root node(table, list, carousel) attributes conatains same dataset variable binding then those attributes need to be updated only for specific properties mentioned in widgetList map.\n                    if (!widgetList[nodeName] || (widgetList[nodeName] && widgetList[nodeName].indexOf(attr.name) > -1)) {\n                        // if the attribute value is \"bind:xxxxx.xxxx\", either the dataSet/scopeDataSet has to contain \"xxxx.xxxx\"\n                        // [WMS-17908]: if child widget contains bind expression as parendataset.length > 0 then dont replace it with item\n                        if (includes(value, parentDataSet) && value !== 'bind:' + parentDataSet && !parentDataSetLengthRegex.test(value)) {\n                            value = value.replace('bind:', '');\n                            addDatasetBoundExprAttribute(childNode, attr, value);\n                            value = value.replace(regex, referenceName);\n                            value = 'bind:' + value;\n                            // Check is this custom bind expression and currentWidgetItem regex\n                            if(checkIsCustomPipeExpression(value) && currentItemRegEx){\n                                // Adding the currentItem as last argument for the expression.\n                                // For the custom pipes(expresion), it will send the currentItem as context.\n                                value +=  ':'+ currentItemRegEx.exec(currentItemRegEx.source)[0];\n                            }\n                        }\n                    }\n                    // Replace item if widget property is bound to livelist currentItem\n                    if (currentItemRegEx && currentItemRegEx.test(value)) {\n                        // Change value from 'bind:Widgets.formName.formWidgets.listName.currentItem' to 'bind:Widgets.listName.currentItem'\n                        if (value.includes('.formWidgets') || value.includes('.filterWidgets')) {\n                            value = value.replace(formWidgetsRegex, 'Widgets');\n                        }\n                        addDatasetBoundExprAttribute(childNode, attr, value);\n                        value = value.replace(currentItemRegEx, referenceName);\n                    }\n                    if (currentItemWidgetsRegEx && currentItemWidgetsRegEx.test(value)) {\n                        value = value.replace(currentItemWidgetsRegEx, `${instance}currentItemWidgets`);\n                    }\n\n                    attr.value = value;\n                }\n            });\n            updateTemplateAttrs(childNode.children as Array<Element>, parentDataSet, widgetName, instance, referenceName);\n        }\n    });\n};\n\n// If formControlName attribute is present, dont add the ngModel\nexport const getNgModelAttr = attrs => {\n    if (attrs.has('formControlName') || attrs.has('formControlName.bind')) {\n        return '';\n    }\n    return 'ngModel';\n};\n\nconst rowActionAttrs = new Map(\n    [\n        ['display-name', 'caption'],\n        ['display-name.bind', 'caption.bind'],\n        ['title', 'hint'],\n        ['title.bind', 'hint.bind'],\n        ['show', 'show'],\n        ['show.bind', 'show.bind'],\n        ['disabled', 'disabled'],\n        ['disabled.bind', 'disabled.bind'],\n        ['hyperlink', 'hyperlink'],\n        ['hyperlink.bind', 'hyperlink.bind'],\n        ['target', 'target'],\n        ['conditionalclass.bind', 'conditionalclass.bind'],\n        ['conditionalstyle.bind', 'conditionalstyle.bind'],\n        ['expandtitle.bind', 'expandtitle.bind'],\n        ['collapsetitle.bind', 'collapsetitle.bind']\n    ]\n);\n\nexport const getRowActionAttrs = attrs => {\n    let tmpl = '';\n    attrs.forEach((val, key) => {\n        const newAttr = rowActionAttrs.get(key);\n        if (newAttr) {\n            tmpl += `${newAttr}=\"${val}\" `;\n        }\n    });\n    return tmpl;\n};\n","export const CURRENCY_INFO  = {\n    'USD': {\n        'symbol': '$',\n        'name': 'US Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'USD',\n        'name_plural': 'US dollars'\n    },\n    'CAD': {\n        'symbol': 'CA$',\n        'name': 'Canadian Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'CAD',\n        'name_plural': 'Canadian dollars'\n    },\n    'EUR': {\n        'symbol': '€',\n        'name': 'Euro',\n        'symbol_native': '€',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'EUR',\n        'name_plural': 'euros'\n    },\n    'AED': {\n        'symbol': 'AED',\n        'name': 'United Arab Emirates Dirham',\n        'symbol_native': 'د.إ.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'AED',\n        'name_plural': 'UAE dirhams'\n    },\n    'AFN': {\n        'symbol': 'Af',\n        'name': 'Afghan Afghani',\n        'symbol_native': '؋',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'AFN',\n        'name_plural': 'Afghan Afghanis'\n    },\n    'ALL': {\n        'symbol': 'ALL',\n        'name': 'Albanian Lek',\n        'symbol_native': 'Lek',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'ALL',\n        'name_plural': 'Albanian lekë'\n    },\n    'AMD': {\n        'symbol': 'AMD',\n        'name': 'Armenian Dram',\n        'symbol_native': 'դր.',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'AMD',\n        'name_plural': 'Armenian drams'\n    },\n    'ARS': {\n        'symbol': 'AR$',\n        'name': 'Argentine Peso',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'ARS',\n        'name_plural': 'Argentine pesos'\n    },\n    'AUD': {\n        'symbol': 'AU$',\n        'name': 'Australian Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'AUD',\n        'name_plural': 'Australian dollars'\n    },\n    'AZN': {\n        'symbol': 'man.',\n        'name': 'Azerbaijani Manat',\n        'symbol_native': 'ман.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'AZN',\n        'name_plural': 'Azerbaijani manats'\n    },\n    'BAM': {\n        'symbol': 'KM',\n        'name': 'Bosnia-Herzegovina Convertible Mark',\n        'symbol_native': 'KM',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BAM',\n        'name_plural': 'Bosnia-Herzegovina convertible marks'\n    },\n    'BDT': {\n        'symbol': 'Tk',\n        'name': 'Bangladeshi Taka',\n        'symbol_native': '৳',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BDT',\n        'name_plural': 'Bangladeshi takas'\n    },\n    'BGN': {\n        'symbol': 'BGN',\n        'name': 'Bulgarian Lev',\n        'symbol_native': 'лв.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BGN',\n        'name_plural': 'Bulgarian leva'\n    },\n    'BHD': {\n        'symbol': 'BD',\n        'name': 'Bahraini Dinar',\n        'symbol_native': 'د.ب.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'BHD',\n        'name_plural': 'Bahraini dinars'\n    },\n    'BIF': {\n        'symbol': 'FBu',\n        'name': 'Burundian Franc',\n        'symbol_native': 'FBu',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'BIF',\n        'name_plural': 'Burundian francs'\n    },\n    'BND': {\n        'symbol': 'BN$',\n        'name': 'Brunei Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BND',\n        'name_plural': 'Brunei dollars'\n    },\n    'BOB': {\n        'symbol': 'Bs',\n        'name': 'Bolivian Boliviano',\n        'symbol_native': 'Bs',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BOB',\n        'name_plural': 'Bolivian bolivianos'\n    },\n    'BRL': {\n        'symbol': 'R$',\n        'name': 'Brazilian Real',\n        'symbol_native': 'R$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BRL',\n        'name_plural': 'Brazilian reals'\n    },\n    'BWP': {\n        'symbol': 'BWP',\n        'name': 'Botswanan Pula',\n        'symbol_native': 'P',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BWP',\n        'name_plural': 'Botswanan pulas'\n    },\n    'BYR': {\n        'symbol': 'BYR',\n        'name': 'Belarusian Ruble',\n        'symbol_native': 'BYR',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'BYR',\n        'name_plural': 'Belarusian rubles'\n    },\n    'BZD': {\n        'symbol': 'BZ$',\n        'name': 'Belize Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'BZD',\n        'name_plural': 'Belize dollars'\n    },\n    'CDF': {\n        'symbol': 'CDF',\n        'name': 'Congolese Franc',\n        'symbol_native': 'FrCD',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'CDF',\n        'name_plural': 'Congolese francs'\n    },\n    'CHF': {\n        'symbol': 'CHF',\n        'name': 'Swiss Franc',\n        'symbol_native': 'CHF',\n        'decimal_digits': 2,\n        'rounding': 0.05,\n        'code': 'CHF',\n        'name_plural': 'Swiss francs'\n    },\n    'CLP': {\n        'symbol': 'CL$',\n        'name': 'Chilean Peso',\n        'symbol_native': '$',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'CLP',\n        'name_plural': 'Chilean pesos'\n    },\n    'CNY': {\n        'symbol': 'CN¥',\n        'name': 'Chinese Yuan',\n        'symbol_native': 'CN¥',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'CNY',\n        'name_plural': 'Chinese yuan'\n    },\n    'COP': {\n        'symbol': 'CO$',\n        'name': 'Colombian Peso',\n        'symbol_native': '$',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'COP',\n        'name_plural': 'Colombian pesos'\n    },\n    'CRC': {\n        'symbol': '₡',\n        'name': 'Costa Rican Colón',\n        'symbol_native': '₡',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'CRC',\n        'name_plural': 'Costa Rican colóns'\n    },\n    'CVE': {\n        'symbol': 'CV$',\n        'name': 'Cape Verdean Escudo',\n        'symbol_native': 'CV$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'CVE',\n        'name_plural': 'Cape Verdean escudos'\n    },\n    'CZK': {\n        'symbol': 'Kč',\n        'name': 'Czech Republic Koruna',\n        'symbol_native': 'Kč',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'CZK',\n        'name_plural': 'Czech Republic korunas'\n    },\n    'DJF': {\n        'symbol': 'Fdj',\n        'name': 'Djiboutian Franc',\n        'symbol_native': 'Fdj',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'DJF',\n        'name_plural': 'Djiboutian francs'\n    },\n    'DKK': {\n        'symbol': 'Dkr',\n        'name': 'Danish Krone',\n        'symbol_native': 'kr',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'DKK',\n        'name_plural': 'Danish kroner'\n    },\n    'DOP': {\n        'symbol': 'RD$',\n        'name': 'Dominican Peso',\n        'symbol_native': 'RD$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'DOP',\n        'name_plural': 'Dominican pesos'\n    },\n    'DZD': {\n        'symbol': 'DA',\n        'name': 'Algerian Dinar',\n        'symbol_native': 'د.ج.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'DZD',\n        'name_plural': 'Algerian dinars'\n    },\n    'EEK': {\n        'symbol': 'Ekr',\n        'name': 'Estonian Kroon',\n        'symbol_native': 'kr',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'EEK',\n        'name_plural': 'Estonian kroons'\n    },\n    'EGP': {\n        'symbol': 'EGP',\n        'name': 'Egyptian Pound',\n        'symbol_native': 'ج.م.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'EGP',\n        'name_plural': 'Egyptian pounds'\n    },\n    'ERN': {\n        'symbol': 'Nfk',\n        'name': 'Eritrean Nakfa',\n        'symbol_native': 'Nfk',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'ERN',\n        'name_plural': 'Eritrean nakfas'\n    },\n    'ETB': {\n        'symbol': 'Br',\n        'name': 'Ethiopian Birr',\n        'symbol_native': 'Br',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'ETB',\n        'name_plural': 'Ethiopian birrs'\n    },\n    'GBP': {\n        'symbol': '£',\n        'name': 'British Pound Sterling',\n        'symbol_native': '£',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'GBP',\n        'name_plural': 'British pounds sterling'\n    },\n    'GEL': {\n        'symbol': 'GEL',\n        'name': 'Georgian Lari',\n        'symbol_native': 'GEL',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'GEL',\n        'name_plural': 'Georgian laris'\n    },\n    'GHS': {\n        'symbol': 'GH₵',\n        'name': 'Ghanaian Cedi',\n        'symbol_native': 'GH₵',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'GHS',\n        'name_plural': 'Ghanaian cedis'\n    },\n    'GNF': {\n        'symbol': 'FG',\n        'name': 'Guinean Franc',\n        'symbol_native': 'FG',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'GNF',\n        'name_plural': 'Guinean francs'\n    },\n    'GTQ': {\n        'symbol': 'GTQ',\n        'name': 'Guatemalan Quetzal',\n        'symbol_native': 'Q',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'GTQ',\n        'name_plural': 'Guatemalan quetzals'\n    },\n    'HKD': {\n        'symbol': 'HK$',\n        'name': 'Hong Kong Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'HKD',\n        'name_plural': 'Hong Kong dollars'\n    },\n    'HNL': {\n        'symbol': 'HNL',\n        'name': 'Honduran Lempira',\n        'symbol_native': 'L',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'HNL',\n        'name_plural': 'Honduran lempiras'\n    },\n    'HRK': {\n        'symbol': 'kn',\n        'name': 'Croatian Kuna',\n        'symbol_native': 'kn',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'HRK',\n        'name_plural': 'Croatian kunas'\n    },\n    'HUF': {\n        'symbol': 'Ft',\n        'name': 'Hungarian Forint',\n        'symbol_native': 'Ft',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'HUF',\n        'name_plural': 'Hungarian forints'\n    },\n    'IDR': {\n        'symbol': 'Rp',\n        'name': 'Indonesian Rupiah',\n        'symbol_native': 'Rp',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'IDR',\n        'name_plural': 'Indonesian rupiahs'\n    },\n    'ILS': {\n        'symbol': '₪',\n        'name': 'Israeli New Sheqel',\n        'symbol_native': '₪',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'ILS',\n        'name_plural': 'Israeli new sheqels'\n    },\n    'INR': {\n        'symbol': '₹',\n        'name': 'Indian Rupee',\n        'symbol_native': 'টকা',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'INR',\n        'name_plural': 'Indian rupees'\n    },\n    'IQD': {\n        'symbol': 'IQD',\n        'name': 'Iraqi Dinar',\n        'symbol_native': 'د.ع.‏',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'IQD',\n        'name_plural': 'Iraqi dinars'\n    },\n    'IRR': {\n        'symbol': 'IRR',\n        'name': 'Iranian Rial',\n        'symbol_native': '﷼',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'IRR',\n        'name_plural': 'Iranian rials'\n    },\n    'ISK': {\n        'symbol': 'Ikr',\n        'name': 'Icelandic Króna',\n        'symbol_native': 'kr',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'ISK',\n        'name_plural': 'Icelandic krónur'\n    },\n    'JMD': {\n        'symbol': 'J$',\n        'name': 'Jamaican Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'JMD',\n        'name_plural': 'Jamaican dollars'\n    },\n    'JOD': {\n        'symbol': 'JD',\n        'name': 'Jordanian Dinar',\n        'symbol_native': 'د.أ.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'JOD',\n        'name_plural': 'Jordanian dinars'\n    },\n    'JPY': {\n        'symbol': '¥',\n        'name': 'Japanese Yen',\n        'symbol_native': '￥',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'JPY',\n        'name_plural': 'Japanese yen'\n    },\n    'KES': {\n        'symbol': 'Ksh',\n        'name': 'Kenyan Shilling',\n        'symbol_native': 'Ksh',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'KES',\n        'name_plural': 'Kenyan shillings'\n    },\n    'KHR': {\n        'symbol': 'KHR',\n        'name': 'Cambodian Riel',\n        'symbol_native': '៛',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'KHR',\n        'name_plural': 'Cambodian riels'\n    },\n    'KMF': {\n        'symbol': 'CF',\n        'name': 'Comorian Franc',\n        'symbol_native': 'FC',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'KMF',\n        'name_plural': 'Comorian francs'\n    },\n    'KRW': {\n        'symbol': '₩',\n        'name': 'South Korean Won',\n        'symbol_native': '₩',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'KRW',\n        'name_plural': 'South Korean won'\n    },\n    'KWD': {\n        'symbol': 'KD',\n        'name': 'Kuwaiti Dinar',\n        'symbol_native': 'د.ك.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'KWD',\n        'name_plural': 'Kuwaiti dinars'\n    },\n    'KZT': {\n        'symbol': 'KZT',\n        'name': 'Kazakhstani Tenge',\n        'symbol_native': 'тңг.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'KZT',\n        'name_plural': 'Kazakhstani tenges'\n    },\n    'LBP': {\n        'symbol': 'LB£',\n        'name': 'Lebanese Pound',\n        'symbol_native': 'ل.ل.‏',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'LBP',\n        'name_plural': 'Lebanese pounds'\n    },\n    'LKR': {\n        'symbol': 'SLRs',\n        'name': 'Sri Lankan Rupee',\n        'symbol_native': 'SL Re',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'LKR',\n        'name_plural': 'Sri Lankan rupees'\n    },\n    'LTL': {\n        'symbol': 'Lt',\n        'name': 'Lithuanian Litas',\n        'symbol_native': 'Lt',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'LTL',\n        'name_plural': 'Lithuanian litai'\n    },\n    'LVL': {\n        'symbol': 'Ls',\n        'name': 'Latvian Lats',\n        'symbol_native': 'Ls',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'LVL',\n        'name_plural': 'Latvian lati'\n    },\n    'LYD': {\n        'symbol': 'LD',\n        'name': 'Libyan Dinar',\n        'symbol_native': 'د.ل.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'LYD',\n        'name_plural': 'Libyan dinars'\n    },\n    'MAD': {\n        'symbol': 'MAD',\n        'name': 'Moroccan Dirham',\n        'symbol_native': 'د.م.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MAD',\n        'name_plural': 'Moroccan dirhams'\n    },\n    'MDL': {\n        'symbol': 'MDL',\n        'name': 'Moldovan Leu',\n        'symbol_native': 'MDL',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MDL',\n        'name_plural': 'Moldovan lei'\n    },\n    'MGA': {\n        'symbol': 'MGA',\n        'name': 'Malagasy Ariary',\n        'symbol_native': 'MGA',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'MGA',\n        'name_plural': 'Malagasy Ariaries'\n    },\n    'MKD': {\n        'symbol': 'MKD',\n        'name': 'Macedonian Denar',\n        'symbol_native': 'MKD',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MKD',\n        'name_plural': 'Macedonian denari'\n    },\n    'MMK': {\n        'symbol': 'MMK',\n        'name': 'Myanma Kyat',\n        'symbol_native': 'K',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'MMK',\n        'name_plural': 'Myanma kyats'\n    },\n    'MOP': {\n        'symbol': 'MOP$',\n        'name': 'Macanese Pataca',\n        'symbol_native': 'MOP$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MOP',\n        'name_plural': 'Macanese patacas'\n    },\n    'MUR': {\n        'symbol': 'MURs',\n        'name': 'Mauritian Rupee',\n        'symbol_native': 'MURs',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'MUR',\n        'name_plural': 'Mauritian rupees'\n    },\n    'MXN': {\n        'symbol': 'MX$',\n        'name': 'Mexican Peso',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MXN',\n        'name_plural': 'Mexican pesos'\n    },\n    'MYR': {\n        'symbol': 'RM',\n        'name': 'Malaysian Ringgit',\n        'symbol_native': 'RM',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MYR',\n        'name_plural': 'Malaysian ringgits'\n    },\n    'MZN': {\n        'symbol': 'MTn',\n        'name': 'Mozambican Metical',\n        'symbol_native': 'MTn',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'MZN',\n        'name_plural': 'Mozambican meticals'\n    },\n    'NAD': {\n        'symbol': 'N$',\n        'name': 'Namibian Dollar',\n        'symbol_native': 'N$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NAD',\n        'name_plural': 'Namibian dollars'\n    },\n    'NGN': {\n        'symbol': '₦',\n        'name': 'Nigerian Naira',\n        'symbol_native': '₦',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NGN',\n        'name_plural': 'Nigerian nairas'\n    },\n    'NIO': {\n        'symbol': 'C$',\n        'name': 'Nicaraguan Córdoba',\n        'symbol_native': 'C$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NIO',\n        'name_plural': 'Nicaraguan córdobas'\n    },\n    'NOK': {\n        'symbol': 'Nkr',\n        'name': 'Norwegian Krone',\n        'symbol_native': 'kr',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NOK',\n        'name_plural': 'Norwegian kroner'\n    },\n    'NPR': {\n        'symbol': 'NPRs',\n        'name': 'Nepalese Rupee',\n        'symbol_native': 'नेरू',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NPR',\n        'name_plural': 'Nepalese rupees'\n    },\n    'NZD': {\n        'symbol': 'NZ$',\n        'name': 'New Zealand Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'NZD',\n        'name_plural': 'New Zealand dollars'\n    },\n    'OMR': {\n        'symbol': 'OMR',\n        'name': 'Omani Rial',\n        'symbol_native': 'ر.ع.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'OMR',\n        'name_plural': 'Omani rials'\n    },\n    'PAB': {\n        'symbol': 'B/.',\n        'name': 'Panamanian Balboa',\n        'symbol_native': 'B/.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'PAB',\n        'name_plural': 'Panamanian balboas'\n    },\n    'PEN': {\n        'symbol': 'S/.',\n        'name': 'Peruvian Nuevo Sol',\n        'symbol_native': 'S/.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'PEN',\n        'name_plural': 'Peruvian nuevos soles'\n    },\n    'PHP': {\n        'symbol': '₱',\n        'name': 'Philippine Peso',\n        'symbol_native': '₱',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'PHP',\n        'name_plural': 'Philippine pesos'\n    },\n    'PKR': {\n        'symbol': 'PKRs',\n        'name': 'Pakistani Rupee',\n        'symbol_native': '₨',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'PKR',\n        'name_plural': 'Pakistani rupees'\n    },\n    'PLN': {\n        'symbol': 'zł',\n        'name': 'Polish Zloty',\n        'symbol_native': 'zł',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'PLN',\n        'name_plural': 'Polish zlotys'\n    },\n    'PYG': {\n        'symbol': '₲',\n        'name': 'Paraguayan Guarani',\n        'symbol_native': '₲',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'PYG',\n        'name_plural': 'Paraguayan guaranis'\n    },\n    'QAR': {\n        'symbol': 'QR',\n        'name': 'Qatari Rial',\n        'symbol_native': 'ر.ق.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'QAR',\n        'name_plural': 'Qatari rials'\n    },\n    'RON': {\n        'symbol': 'RON',\n        'name': 'Romanian Leu',\n        'symbol_native': 'RON',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'RON',\n        'name_plural': 'Romanian lei'\n    },\n    'RSD': {\n        'symbol': 'din.',\n        'name': 'Serbian Dinar',\n        'symbol_native': 'дин.',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'RSD',\n        'name_plural': 'Serbian dinars'\n    },\n    'RUB': {\n        'symbol': 'RUB',\n        'name': 'Russian Ruble',\n        'symbol_native': 'руб.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'RUB',\n        'name_plural': 'Russian rubles'\n    },\n    'RWF': {\n        'symbol': 'RWF',\n        'name': 'Rwandan Franc',\n        'symbol_native': 'FR',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'RWF',\n        'name_plural': 'Rwandan francs'\n    },\n    'SAR': {\n        'symbol': 'SR',\n        'name': 'Saudi Riyal',\n        'symbol_native': 'ر.س.‏',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'SAR',\n        'name_plural': 'Saudi riyals'\n    },\n    'SDG': {\n        'symbol': 'SDG',\n        'name': 'Sudanese Pound',\n        'symbol_native': 'SDG',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'SDG',\n        'name_plural': 'Sudanese pounds'\n    },\n    'SEK': {\n        'symbol': 'Skr',\n        'name': 'Swedish Krona',\n        'symbol_native': 'kr',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'SEK',\n        'name_plural': 'Swedish kronor'\n    },\n    'SGD': {\n        'symbol': 'S$',\n        'name': 'Singapore Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'SGD',\n        'name_plural': 'Singapore dollars'\n    },\n    'SOS': {\n        'symbol': 'Ssh',\n        'name': 'Somali Shilling',\n        'symbol_native': 'Ssh',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'SOS',\n        'name_plural': 'Somali shillings'\n    },\n    'SYP': {\n        'symbol': 'SY£',\n        'name': 'Syrian Pound',\n        'symbol_native': 'ل.س.‏',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'SYP',\n        'name_plural': 'Syrian pounds'\n    },\n    'THB': {\n        'symbol': '฿',\n        'name': 'Thai Baht',\n        'symbol_native': '฿',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'THB',\n        'name_plural': 'Thai baht'\n    },\n    'TND': {\n        'symbol': 'DT',\n        'name': 'Tunisian Dinar',\n        'symbol_native': 'د.ت.‏',\n        'decimal_digits': 3,\n        'rounding': 0,\n        'code': 'TND',\n        'name_plural': 'Tunisian dinars'\n    },\n    'TOP': {\n        'symbol': 'T$',\n        'name': 'Tongan Paʻanga',\n        'symbol_native': 'T$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'TOP',\n        'name_plural': 'Tongan paʻanga'\n    },\n    'TRY': {\n        'symbol': 'TL',\n        'name': 'Turkish Lira',\n        'symbol_native': 'TL',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'TRY',\n        'name_plural': 'Turkish Lira'\n    },\n    'TTD': {\n        'symbol': 'TT$',\n        'name': 'Trinidad and Tobago Dollar',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'TTD',\n        'name_plural': 'Trinidad and Tobago dollars'\n    },\n    'TWD': {\n        'symbol': 'NT$',\n        'name': 'New Taiwan Dollar',\n        'symbol_native': 'NT$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'TWD',\n        'name_plural': 'New Taiwan dollars'\n    },\n    'TZS': {\n        'symbol': 'TSh',\n        'name': 'Tanzanian Shilling',\n        'symbol_native': 'TSh',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'TZS',\n        'name_plural': 'Tanzanian shillings'\n    },\n    'UAH': {\n        'symbol': '₴',\n        'name': 'Ukrainian Hryvnia',\n        'symbol_native': '₴',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'UAH',\n        'name_plural': 'Ukrainian hryvnias'\n    },\n    'UGX': {\n        'symbol': 'USh',\n        'name': 'Ugandan Shilling',\n        'symbol_native': 'USh',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'UGX',\n        'name_plural': 'Ugandan shillings'\n    },\n    'UYU': {\n        'symbol': '$U',\n        'name': 'Uruguayan Peso',\n        'symbol_native': '$',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'UYU',\n        'name_plural': 'Uruguayan pesos'\n    },\n    'UZS': {\n        'symbol': 'UZS',\n        'name': 'Uzbekistan Som',\n        'symbol_native': 'UZS',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'UZS',\n        'name_plural': 'Uzbekistan som'\n    },\n    'VEF': {\n        'symbol': 'Bs.F.',\n        'name': 'Venezuelan Bolívar',\n        'symbol_native': 'Bs.F.',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'VEF',\n        'name_plural': 'Venezuelan bolívars'\n    },\n    'VND': {\n        'symbol': '₫',\n        'name': 'Vietnamese Dong',\n        'symbol_native': '₫',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'VND',\n        'name_plural': 'Vietnamese dong'\n    },\n    'XAF': {\n        'symbol': 'FCFA',\n        'name': 'CFA Franc BEAC',\n        'symbol_native': 'FCFA',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'XAF',\n        'name_plural': 'CFA francs BEAC'\n    },\n    'XOF': {\n        'symbol': 'CFA',\n        'name': 'CFA Franc BCEAO',\n        'symbol_native': 'CFA',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'XOF',\n        'name_plural': 'CFA francs BCEAO'\n    },\n    'YER': {\n        'symbol': 'YR',\n        'name': 'Yemeni Rial',\n        'symbol_native': 'ر.ي.‏',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'YER',\n        'name_plural': 'Yemeni rials'\n    },\n    'ZAR': {\n        'symbol': 'R',\n        'name': 'South African Rand',\n        'symbol_native': 'R',\n        'decimal_digits': 2,\n        'rounding': 0,\n        'code': 'ZAR',\n        'name_plural': 'South African rand'\n    },\n    'ZMK': {\n        'symbol': 'ZK',\n        'name': 'Zambian Kwacha',\n        'symbol_native': 'ZK',\n        'decimal_digits': 0,\n        'rounding': 0,\n        'code': 'ZMK',\n        'name_plural': 'Zambian kwachas'\n    }\n};","const $RAF = window.requestAnimationFrame;\nconst $RAFQueue = [];\n\nconst invokeLater = fn => {\n    if (!$RAFQueue.length) {\n        $RAF(() => {\n            $RAFQueue.forEach(f => f());\n            $RAFQueue.length = 0;\n        });\n    }\n    $RAFQueue.push(fn);\n};\n\nexport const appendNode = (node: HTMLElement, parent: HTMLElement, sync?: boolean) => {\n    const task = () => parent.appendChild(node);\n    sync ? task() : invokeLater(task);\n};\n\nexport const insertBefore = (node: HTMLElement, ref: HTMLElement, sync?: boolean) => {\n    const task = () => ref.parentNode.insertBefore(node, ref);\n    sync ? task() : invokeLater(task);\n};\n\nexport const insertAfter = (node: HTMLElement, ref: HTMLElement, sync?: boolean) => {\n    const task = () => ref.parentNode.insertBefore(node, ref.nextSibling);\n    sync ? task() : invokeLater(task);\n};\n\nexport const removeNode = (node: HTMLElement, sync?: boolean) => {\n    const task = () => node.remove();\n    sync ? task() : invokeLater(task);\n};\n\nexport const removeClass = (node: HTMLElement, ov: string, sync?: boolean) => {\n    ov = ov || '';\n    const task = c => node.classList.remove(c);\n    ov.split(' ').forEach(c => {\n        if (c.length) {\n            sync ? task(c) : invokeLater(() => task(c));\n        }\n    });\n};\n\nexport const addClass = (node: HTMLElement, nv: string, sync?: boolean) => {\n    nv = nv || '';\n    const task = c => node.classList.add(c);\n    nv.split(' ').forEach(c => {\n        if (c.length) {\n            sync ? task(c) : invokeLater(() => task(c));\n        }\n    });\n};\n\nexport const switchClass = (node: HTMLElement, toAdd: string = '', toRemove: string = '', sync?: boolean) => {\n    // After NG15 upgrade ng-invalid class is added even the field is valid, so we are removing the ng-invalid manually\n    const isNgUntouchedValid = node.classList.contains('ng-untouched') && node.classList.contains('ng-valid');\n    // Detect Angular's initial form state where the field has 'ng-invalid', 'ng-pristine', and 'ng-untouched' before user interaction.\n    const isInitialInvalidState = toAdd.includes('ng-untouched') && toAdd.includes('ng-pristine') && toAdd.includes('ng-invalid');\n    if((isNgUntouchedValid && toAdd.includes('ng-untouched') && toAdd.includes('ng-invalid')) || isInitialInvalidState) {\n        toAdd = toAdd.replace('ng-invalid', '');\n    }\n    removeClass(node, toRemove, sync);\n    addClass(node, toAdd, sync);\n};\n\nexport const toggleClass = (node: HTMLElement, cls: string, condition: boolean, sync?: boolean) => {\n    if (condition) {\n        addClass(node, cls, sync);\n    } else {\n        removeClass(node, cls, sync);\n    }\n};\n\nexport const setCSS = (node: HTMLElement, cssName: string, val?: string | number, sync?: boolean) => {\n    const task = () => node.style[cssName] = val;\n    sync ? task() : invokeLater(task);\n};\n\nexport const setCSSFromObj = (node: HTMLElement, cssObj: any, sync?: boolean) => {\n    const keys = Object.keys(cssObj || {});\n    keys.forEach(key => setCSS(node, key, cssObj[key], sync));\n};\n\nexport const setProperty = (node: HTMLElement, propName: string, val: any, sync?: boolean) => {\n    const task = () => node[propName] = val;\n    sync ? task() : invokeLater(task);\n};\n\nexport const setAttr = (node: HTMLElement, attrName: string, val: any, sync?: boolean) => {\n    const task = () => {\n        if (node instanceof Element) {\n            // Handle tabindex specifically - ensure it's a valid string representation\n            if (attrName === 'tabindex') {\n                // Convert to string, handling 0, null, undefined, and NaN\n                if (val === null || val === undefined || (typeof val === 'number' && isNaN(val))) {\n                    node.removeAttribute(attrName);\n                } else {\n                    node.setAttribute(attrName, String(val));\n                }\n            } else {\n                node.setAttribute(attrName, val);\n            }\n        }\n    };\n    sync ? task() : invokeLater(task);\n};\n\nexport const setHtml = (node: HTMLElement, html: string, sync?: boolean) => {\n    const task = () => node.innerHTML = html;\n    sync ? task() : invokeLater(task);\n};\n\nexport const removeAttr = (node: HTMLElement, attrName: string, sync?: boolean) => {\n    const task = () => node.removeAttribute(attrName);\n    sync ? task() : invokeLater(task);\n};\n\nexport const createElement = (nodeType: string, attrs: any, sync?: boolean): HTMLElement => {\n    const node = document.createElement(nodeType);\n\n    if (attrs) {\n        Object.keys(attrs).forEach(attrName => {\n            setAttr(node, attrName, attrs[attrName], sync);\n        });\n    }\n    return node;\n};\n\n// for width and height if a numeric value is specified return in px\n// else return the same value\nexport const toDimension = (v: string | number) => {\n    // @ts-ignore\n    if (v == +v) {\n        return `${v}px`;\n    }\n    return v;\n};\n","const properties: any = {};\nconst previewProp: any ={};\ndeclare const window;\ndeclare const _WM_APP_PROPERTIES;\n\nexport function getWmProjectProperties() {\n    if (window._WM_APP_PROPERTIES) {\n        return window._WM_APP_PROPERTIES;\n    } else if(typeof _WM_APP_PROPERTIES !== \"undefined\") {\n        return _WM_APP_PROPERTIES;\n    } else {\n        return properties;\n    }\n}\n\nexport function setWmProjectProperties(props: any) {\n    Object.setPrototypeOf(properties, props);\n}\nexport function setPreviewProperties(props: any) {\n    Object.assign(previewProp, props);\n}\nexport function getPreviewProperties() {\n    const fontConfig = previewProp.fontConfig || '';\n    const cssPaths = [...fontConfig.matchAll(/\"csspath\":\\s*\"([^\"]+)\"/g)]\n        .map(match => match[1]);\n\n    properties.default = {\n        baseFont: '',\n        fonts: cssPaths.map(csspath => ({ csspath }))\n    };\n\n    return properties;\n}\n","function* idGenerator(token) {\n    let id = 1;\n    while (1) {\n        yield `${token}${id++}`;\n    }\n}\n\nexport class IDGenerator {\n    private generator: Iterator<any>;\n\n    constructor(key: string) {\n        this.generator = idGenerator(key);\n    }\n\n    public nextUid(): string {\n        return this.generator.next().value;\n    }\n}\n","import {\n    Binary,\n    BindingPipe,\n    Call,\n    Chain,\n    Conditional,\n    ImplicitReceiver,\n    KeyedRead,\n    Lexer,\n    LiteralArray,\n    LiteralMap,\n    LiteralPrimitive,\n    Parser,\n    PrefixNot,\n    PropertyRead,\n    PropertyWrite,\n    Unary\n} from '@angular/compiler';\nimport {get} from \"lodash-es\";\n\nconst isDef = v => v !== void 0;\nconst ifDef = (v, d) => v === void 0 ? d : v;\nconst plus = (a, b) => void 0 === a ? b : void 0 === b ? a : a + b;\nconst minus = (a, b) => ifDef(a, 0) - ifDef(b, 0);\nconst noop = () => {};\n\nexport type ParseExprResult = (data?: any, locals?: any) => any;\n\nconst exprFnCache = new Map();\nconst eventFnCache = new Map();\nconst purePipes = new Map();\n\nconst primitiveEquals = (a, b) => {\n    if (typeof a === 'object' || typeof b === 'object') {\n        return false;\n    }\n    if (a !== a && b !== b) { // NaN case\n        return true;\n    }\n    return a === b;\n};\n\nconst detectChanges = (ov, nv) => {\n    const len = nv.length;\n    let hasChange = len > 10;\n    switch (len) {\n        case 10:\n            hasChange = !primitiveEquals(ov[9], nv[9]);\n            if (hasChange) {\n                break;\n            }\n        case 9:\n            hasChange = !primitiveEquals(ov[8], nv[8]);\n            if (hasChange) {\n                break;\n            }\n        case 8:\n            hasChange = !primitiveEquals(ov[7], nv[7]);\n            if (hasChange) {\n                break;\n            }\n        case 7:\n            hasChange = !primitiveEquals(ov[6], nv[6]);\n            if (hasChange) {\n                break;\n            }\n        case 6:\n            hasChange = !primitiveEquals(ov[5], nv[5]);\n            if (hasChange) {\n                break;\n            }\n        case 5:\n            hasChange = !primitiveEquals(ov[4], nv[4]);\n            if (hasChange) {\n                break;\n            }\n        case 4:\n            hasChange = !primitiveEquals(ov[3], nv[3]);\n            if (hasChange) {\n                break;\n            }\n        case 3:\n            hasChange = !primitiveEquals(ov[2], nv[2]);\n            if (hasChange) {\n                break;\n            }\n        case 2:\n            hasChange = !primitiveEquals(ov[1], nv[1]);\n            if (hasChange) {\n                break;\n            }\n        case 1:\n            hasChange = !primitiveEquals(ov[0], nv[0]);\n            if (hasChange) {\n                break;\n            }\n    }\n    return hasChange;\n};\n\nconst getPurePipeVal = (pipe, cache, identifier, ...args) => {\n    let lastResult = cache.get(identifier);\n    let result;\n    if (lastResult) {\n        const isModified = detectChanges(lastResult.args, args);\n        if (!isModified) {\n            return lastResult.result;\n        }\n    }\n    result = pipe.transform(...args);\n    lastResult = {args, result};\n    cache.set(identifier, lastResult);\n    return result;\n};\n\nconst STR_ESCAPE_REGEX = /[^ a-zA-Z0-9]/g;\n\nconst stringEscapeFn = str => {\n    return '\\\\u' + ('0000' + str.charCodeAt(0).toString(16)).slice(-4);\n};\n\nclass ASTCompiler {\n    ast; // ast to be compiled\n    declarations; // variable names\n    stmts; // function body statements\n    pipes; // used pipes\n    vIdx; // variable name index\n    cAst; // current AST node in the process\n    cStmts;\n    pipeNameVsIsPureMap;\n    exprType: ExpressionType;\n\n    constructor(ast, exprType, pipeNameVsIsPureMap?) {\n        this.ast = ast;\n        this.declarations = [];\n        this.stmts = [];\n        this.pipes = [];\n        this.vIdx = 0;\n        this.exprType = exprType;\n        this.pipeNameVsIsPureMap = pipeNameVsIsPureMap;\n    }\n\n    createVar() {\n        const v = `v${this.vIdx++}`;\n        this.declarations.push(v);\n        return v;\n    }\n\n    processImplicitReceiver() {\n        return 'ctx';\n    }\n\n    processLiteralPrimitive() {\n        const ast = this.cAst;\n        return typeof (ast.value) === 'string' ? `\"${ast.value.replace(/\"/g, '\\\"').replace(STR_ESCAPE_REGEX, stringEscapeFn)}\"` : ast.value;\n    }\n\n    processLiteralArray() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const v = this.createVar();\n        const s = [];\n        for (const item of ast.expressions) {\n            s.push(this.build(item, stmts));\n        }\n        stmts.push(`${v}=[${s.join(',')}]`);\n        return v;\n    }\n\n    processLiteralMap() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const v = this.createVar();\n        const _values = [];\n        for (const _value of ast.values) {\n            _values.push(this.build(_value, stmts));\n        }\n        stmts.push(`${v}={${ast.keys.map((k, i) => `'${k.key}':${_values[i]}`)}}`);\n        return v;\n    }\n\n    processPropertyRead() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const r = this.build(ast.receiver, stmts);\n        const v = this.createVar();\n        stmts.push(`${v}=${r}&&${r}.${ast.name}`);\n        return v;\n    }\n\n    processKeyedRead() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const k = this.build(ast.key, stmts);\n        const o = this.build(ast.receiver, stmts);\n        const v = this.createVar();\n        stmts.push(`${v}=${o}&&${o}[${k}]`);\n        return v;\n    }\n\n    processPrefixNot() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const r = this.build(ast.expression, stmts);\n        stmts.push(`${r}=!${r}`);\n        return r;\n    }\n\n    handleBinaryPlus_Minus() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const l = this.build(ast.left, stmts);\n        const r = this.build(ast.right, stmts);\n        const v = this.createVar();\n        const m = ast.operation === '+' ? '_plus' : '_minus';\n        stmts.push(`${v}=${m}(${l},${r})`);\n        return v;\n    }\n\n    handleBinaryAND_OR() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const _s1 = [];\n        const _sl = [];\n        const _sr = [];\n        const l = this.build(ast.left, _sl);\n        const r = this.build(ast.right, _sr);\n\n        const v = this.createVar();\n\n        if (ast.operation === '&&') {\n            _s1.push(\n                _sl.join(';'),\n                `;${v}=false`,\n                `;if(${l}){`,\n                _sr.join(';'),\n                `;${v}=${r};`,\n                `}`\n            );\n        } else {\n            _s1.push(\n                _sl.join(';'),\n                `;${v}=${l}`,\n                `;if(!${l}){`,\n                _sr.join(';'),\n                `;${v}=${r};`,\n                `}`\n            );\n        }\n        stmts.push(_s1.join(''));\n        return v;\n    }\n\n    handleBinaryDefault() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const l = this.build(ast.left, stmts);\n        const r = this.build(ast.right, stmts);\n        const v = this.createVar();\n        stmts.push(`${v}=${l}${ast.operation}${r}`);\n        return v;\n    }\n\n    processBinary() {\n        const ast = this.cAst;\n        const op = ast.operation;\n        if (op === '+' || op === '-') {\n            return this.handleBinaryPlus_Minus();\n        }\n        if (op === '&&' || op === '||') {\n            return this.handleBinaryAND_OR();\n        }\n\n        return this.handleBinaryDefault();\n    }\n\n    processUnary() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const e = this.build(ast.expr, stmts);\n        const v = this.createVar();\n        stmts.push(`${v}=${ast.operator}${e}`);\n        return v;\n    }\n\n    processConditional() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const condition = this.build(ast.condition, stmts);\n        const v = this.createVar();\n        const _s1 = [];\n        const _s2 = [];\n        const _s3 = [];\n        const trueExp = this.build(ast.trueExp, _s2);\n        const falseExp = this.build(ast.falseExp, _s3);\n\n        _s1.push(\n            `if(${condition}){`,\n            _s2.join(';'),\n            `;${v}=${trueExp};`,\n            `}else{`,\n            _s3.join(';'),\n            `;${v}=${falseExp};`,\n            `}`\n        );\n\n        stmts.push(_s1.join(' '));\n        return v;\n    }\n\n    processMethodCall() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const _args = [];\n        for (const arg of ast.args) {\n            _args.push(this.build(arg, stmts));\n        }\n        const fn = this.build(ast.receiver, stmts);\n        const v = this.createVar();\n        const isImplicitReceiver = ast.receiver instanceof ImplicitReceiver || (ast.receiver instanceof PropertyRead && ast.receiver?.receiver instanceof ImplicitReceiver);\n        const context = stmts[stmts.length - 1].split('&&')[0].split('=')[1];\n        stmts.push(`${v}= ${fn}&&${fn}${isImplicitReceiver ? '.bind(_ctx)' : `.bind(${context})`}(${_args.join(',')})`);\n        return v;\n    }\n\n    processChain() {\n        const ast = this.cAst;\n        return ast.expressions.map(e => this.build(e)).join(';');\n    }\n\n    processPropertyWrite() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        let receiver, lhs;\n        if (ast.receiver instanceof ImplicitReceiver) {\n            lhs = `_ctx.${ast.name}`;\n        } else {\n            receiver = this.build(ast.receiver, stmts);\n            lhs = `${receiver}${receiver.length ? '.' : ''}${ast.name}`;\n        }\n\n        const rhs = this.build(ast.value, stmts);\n        stmts.push(`${lhs}=${rhs}`);\n    }\n\n    processPipe() {\n        const ast = this.cAst;\n        const stmts = this.cStmts;\n        const t = this.createVar();\n        const _args = [];\n        const _s1 = [];\n        const _s2 = [];\n        const exp = this.build(ast.exp, stmts);\n        for (const arg of ast.args) {\n            _args.push(this.build(arg, _s2));\n        }\n\n        const p = `_p${this.pipes.length}`;\n        this.pipes.push([ast.name, p]);\n\n        _args.unshift(exp);\n\n        _s1.push(\n            _s2.length ? _s2.join(';') + ';' : '',\n            this.pipeNameVsIsPureMap.get(ast.name) ? `${t}=getPPVal(${p},_ppc,\"${p}\",${_args})` : `${t}=${p}.transform(${_args})`\n        );\n\n        stmts.push(_s1.join(''));\n        return t;\n    }\n\n    build(ast, cStmts?) {\n        this.cAst = ast;\n        this.cStmts = cStmts || this.stmts;\n\n        if (ast instanceof ImplicitReceiver) {\n            return this.processImplicitReceiver();\n        } else if (ast instanceof LiteralPrimitive) {\n            return this.processLiteralPrimitive();\n        } else if (ast instanceof LiteralArray) {\n            return this.processLiteralArray();\n        } else if (ast instanceof LiteralMap) {\n            return this.processLiteralMap();\n        } else if (ast instanceof PropertyRead) {\n            return this.processPropertyRead();\n        } else if (ast instanceof PropertyWrite) {\n            return this.processPropertyWrite();\n        } else if (ast instanceof KeyedRead) {\n            return this.processKeyedRead();\n        } else if (ast instanceof PrefixNot) {\n            return this.processPrefixNot();\n        } else if (ast instanceof Unary) {\n            return this.processUnary();\n        } else if (ast instanceof Binary) {\n            return this.processBinary();\n        } else if (ast instanceof Conditional) {\n            return this.processConditional();\n        } else if (ast instanceof Call) {\n            return this.processMethodCall();\n        } else if (ast instanceof Chain) {\n            return this.processChain();\n        } else if (ast instanceof BindingPipe) {\n            return this.processPipe();\n        }\n    }\n\n    extendCtxWithLocals() {\n        const v1 = this.createVar();\n        this.stmts.push(\n            `${v1}=Object.assign({}, locals)`,\n            `Object.setPrototypeOf(${v1}, _ctx)`,\n            `ctx=${v1}`\n        );\n    }\n\n    fnBody() {\n        this.declarations.push('ctx');\n        return '\"use strict\";\\nvar ' + this.declarations.join(',') + ';\\n' + this.stmts.join(';');\n    }\n\n    fnArgs() {\n        const args = ['_plus', '_minus', '_isDef'];\n\n        if (this.exprType === ExpressionType.Binding) {\n            args.push('getPPVal', '_ppc');\n            for (const [, pipeVar] of this.pipes) {\n                args.push(pipeVar);\n            }\n        }\n\n        args.push('_ctx', 'locals');\n\n        return args.join(',');\n    }\n\n    addReturnStmt(result) {\n        // if (this.exprType === ExpressionType.Binding) {\n            this.stmts.push(`return ${result};`);\n        // }\n    }\n\n    cleanup() {\n        this.ast = this.cAst = this.stmts = this.cStmts = this.declarations = this.pipes = this.pipeNameVsIsPureMap = undefined;\n    }\n\n    compile(defOnly?) {\n        this.extendCtxWithLocals();\n        this.addReturnStmt(this.build(this.ast));\n        if (defOnly) {\n            return {fnBody: this.fnBody(), fnArgs: this.fnArgs(), pipes: this.pipes};\n        }\n        const fn = new Function(this.fnArgs(), this.fnBody());\n        let boundFn;\n        if (this.exprType === ExpressionType.Binding) {\n            boundFn = fn.bind(undefined, plus, minus, isDef, getPurePipeVal);\n            boundFn.usedPipes = this.pipes.slice(0); // clone\n        } else {\n            boundFn = fn.bind(undefined, plus, minus, isDef);\n        }\n\n        this.cleanup();\n        return boundFn;\n    }\n}\n\nconst nullPipe = () => {\n    return {\n        transform: noop\n    };\n};\n\nlet _cspEnabled;\nconst isCSPEnabled = () => {\n    if(typeof _cspEnabled !== 'undefined') {\n        return _cspEnabled;\n    }\n    try {\n        new Function();\n        _cspEnabled = false;\n    } catch(e) {\n        _cspEnabled = true;\n    }\n    return _cspEnabled;\n};\n\nlet pipeProvider;\n\nexport function setPipeProvider(_pipeProvider) {\n    pipeProvider = _pipeProvider;\n}\n\nenum ExpressionType {\n    Binding,\n    Action\n}\n\nexport function $parseExpr(expr: string, defOnly?: boolean): ParseExprResult {\n\n    if (!pipeProvider) {\n        return noop;\n    }\n\n    if (typeof (expr) !== 'string') {\n        return noop;\n    }\n\n    expr = expr.trim();\n\n    if (expr.endsWith(';')) {\n        expr = expr.slice(0, -1); // remove the trailing semicolon\n    }\n\n    if (!expr.length) {\n        return noop;\n    }\n\n    let fn = exprFnCache.get(expr);\n\n    if (fn) {\n        return fn;\n    }\n\n    let boundFn;\n    if (!defOnly) {\n        boundFn = getFnForBindExpr(expr);\n    }\n\n    // fallback to generate function in runtime. This will break if CSP is enabled\n    if (!boundFn) {\n        // If CSP enabled, function def not found from the generated fn expressions for the page.\n        // Handle bind expressions used internally inside WM components. e.g. wmAnchor used inside nav.comp.html\n        if (isCSPEnabled()) {\n            boundFn = function(ctx, locals) {\n                // handle internal bindings for wm widgets used inside a component\n                let _ctx = Object.assign({}, locals);\n                Object.setPrototypeOf(_ctx, ctx);\n                return get(_ctx, expr);\n            };\n        } else {\n            const parser = new Parser(new Lexer);\n            const ast = parser.parseBinding(expr, '',0);\n\n            if (ast.errors.length) {\n                fn = noop;\n                boundFn = fn;\n            } else {\n                const pipeNameVsIsPureMap = pipeProvider.getPipeNameVsIsPureMap();\n                const astCompiler = new ASTCompiler(ast.ast, ExpressionType.Binding, pipeNameVsIsPureMap);\n                fn = astCompiler.compile(defOnly);\n                if (defOnly) {\n                    return fn;\n                }\n\n                if (fn.usedPipes.length) {\n                    const pipeArgs = [];\n                    let hasPurePipe = false;\n                    for (const [pipeName] of fn.usedPipes) {\n                        const pipeInfo = pipeProvider.meta(pipeName);\n                        let pipeInstance;\n                        if (!pipeInfo) {\n                            pipeInstance = nullPipe;\n                        } else {\n                            if (pipeInfo.pure) {\n                                hasPurePipe = true;\n                                pipeInstance = purePipes.get(pipeName);\n                            }\n\n                            if (!pipeInstance) {\n                                pipeInstance = pipeProvider.getInstance(pipeName);\n                            }\n\n                            if (pipeInfo.pure) {\n                                purePipes.set(pipeName, pipeInstance);\n                            }\n                        }\n                        pipeArgs.push(pipeInstance);\n                    }\n\n                    pipeArgs.unshift(hasPurePipe ? new Map() : undefined);\n                    boundFn = fn.bind(undefined, ...pipeArgs);\n                } else {\n                    boundFn = fn.bind(undefined, undefined);\n                }\n            }\n        }\n    }\n\n    exprFnCache.set(expr, boundFn);\n\n    return boundFn;\n}\n\nfunction simpleFunctionEvaluator(expr, ctx, locals) {\n    let _ctx = Object.assign({}, locals);\n    Object.setPrototypeOf(_ctx, ctx);\n\n    let parts = expr.split('(');\n    let fnName = parts[0];\n    let computedFn = get(ctx, fnName);\n\n    if (computedFn) {\n        let args = parts[1].replace(')', '');\n        args = args.split(',');\n        let computedArgs = [];\n        args.forEach((arg)=> {\n            arg = arg && arg.trim();\n            computedArgs.push(get(_ctx, arg));\n        });\n        return computedFn.bind(_ctx)(...computedArgs);\n    }\n}\n\nexport function $parseEvent(expr, defOnly?): ParseExprResult {\n    if (typeof (expr) !== 'string') {\n        return noop;\n    }\n\n    expr = expr.trim();\n\n    if (!expr.length) {\n        return noop;\n    }\n\n    let fn = eventFnCache.get(expr);\n\n    if (fn) {\n        return fn;\n    }\n\n    if (!defOnly) {\n        fn = getFnForEventExpr(expr);\n    }\n\n    // fallback to generate function in runtime. This will break if CSP is enabled\n    if(!fn) {\n        if (isCSPEnabled()) {\n            fn = simpleFunctionEvaluator.bind(undefined, expr);\n        } else {\n            const parser = new Parser(new Lexer);\n            const ast = parser.parseAction(expr, '', 0);\n\n            if (ast.errors.length) {\n                return noop;\n            }\n            const astCompiler = new ASTCompiler(ast.ast, ExpressionType.Action);\n            fn = astCompiler.compile(defOnly);\n        }\n    }\n\n    eventFnCache.set(expr, fn);\n    return fn;\n}\n\nconst fnNameMap = new Map();\n\nexport const registerFnByExpr = (expr, fn, usedPipes?) => {\n    fn.usedPipes = usedPipes || [];\n    fnNameMap.set(expr, fn);\n}\n\nexport const getFnByExpr = (expr) => fnNameMap.get(expr)\n\nconst fnExecutor = (expr, exprType) => {\n    let fn = getFnByExpr(expr);\n    if (!fn) {\n        return;\n    }\n    const usedPipes = fn.usedPipes || [];\n\n    if(exprType === ExpressionType.Binding) {\n        fn = fn.bind(undefined, plus, minus, isDef, getPurePipeVal);\n    } else {\n        fn = fn.bind(undefined, plus, minus, isDef);\n    }\n\n    if (usedPipes.length) {\n        const pipeArgs = [];\n        let hasPurePipe = false;\n        for (const [pipeName] of usedPipes) {\n            const pipeInfo = pipeProvider.meta(pipeName);\n            let pipeInstance;\n            if (!pipeInfo) {\n                pipeInstance = nullPipe;\n            } else {\n                if (pipeInfo.pure) {\n                    hasPurePipe = true;\n                    pipeInstance = purePipes.get(pipeName);\n                }\n\n                if (!pipeInstance) {\n                    pipeInstance = pipeProvider.getInstance(pipeName);\n                }\n\n                if (pipeInfo.pure) {\n                    purePipes.set(pipeName, pipeInstance);\n                }\n            }\n            pipeArgs.push(pipeInstance);\n        }\n\n        pipeArgs.unshift(hasPurePipe ? new Map() : undefined);\n        fn = fn.bind(undefined, ...pipeArgs);\n    } else {\n        if (exprType === ExpressionType.Binding) {\n            fn = fn.bind(undefined, undefined);\n        }\n    }\n\n    return fn;\n}\n\nexport const getFnForBindExpr = (expr) => {\n    return fnExecutor(expr, ExpressionType.Binding);\n}\n\nexport const getFnForEventExpr = (expr) => {\n    return fnExecutor(expr, ExpressionType.Action);\n}\n","import { IDGenerator } from './id-generator';\n\nimport { $parseExpr } from './expression-parser';\nimport { findValueOf } from './utils';\nimport {clone, flatten, isArray, isEqual, isObject} from \"lodash-es\";\n\nconst registry = new Map<string, any>();\n\nconst watchIdGenerator = new IDGenerator('watch-id-');\n\nexport const FIRST_TIME_WATCH = {};\n\nObject.freeze(FIRST_TIME_WATCH);\n\nexport const isFirstTimeChange = v => v === FIRST_TIME_WATCH;\n\nlet muted = false;\nlet appRef;\n\nexport const debounce = (fn: Function, wait: number = 50) => {\n    let timeout;\n    return (...args) => {\n        window['__zone_symbol__clearTimeout'](timeout);\n        timeout = window['__zone_symbol__setTimeout'](() => fn(...args), wait);\n    };\n};\n\nexport const muteWatchers = () => {\n    muted = true;\n};\n\nexport const unMuteWatchers = () => {\n    muted = false;\n    $invokeWatchers(true);\n};\n\nconst arrayConsumer = (listenerFn, restExpr, newVal, oldVal) => {\n    let data = newVal,\n        formattedData;\n\n    if (isArray(data)) {\n        formattedData = data.map(function (datum) {\n            return findValueOf(datum, restExpr);\n        });\n\n        // If resulting structure is an array of array, flatten it\n        if (isArray(formattedData[0])) {\n            formattedData = flatten(formattedData);\n        }\n\n        listenerFn(formattedData, oldVal);\n    }\n};\n\nconst getUpdatedWatcInfo = (expr, acceptsArray, listener) => {\n    // listener doesn't accept array\n    // replace all `[$i]` with `[0]` and return the expression\n    let regex = /\\[\\$i\\]/g,\n        $I                = '[$i]',\n        $0                = '[0]';\n    if (!acceptsArray) {\n        return {\n            'expr'     : expr.replace(regex, $0),\n            'listener' : listener\n        };\n    }\n\n    // listener accepts array\n    // replace all except the last `[$i]` with `[0]` and return the expression.\n    var index           = expr.lastIndexOf($I),\n        _expr           = expr.substr(0, index).replace($I, $0),\n        restExpr        = expr.substr(index + 5),\n        arrayConsumerFn = listener;\n\n    if (restExpr) {\n        arrayConsumerFn = arrayConsumer.bind(undefined, listener, restExpr);\n    }\n\n    return {\n        'expr'     : _expr,\n        'listener' : arrayConsumerFn\n    };\n};\n\nexport const $watch = (expr, $scope, $locals, listener, identifier = watchIdGenerator.nextUid(), doNotClone = false, config:any={}, isMuted?: () => boolean) => {\n    if (expr.indexOf('[$i]') !== -1) {\n        let watchInfo = getUpdatedWatcInfo(expr, config && (config.arrayType || config.isList), listener);\n        expr = watchInfo.expr;\n        listener = watchInfo.listener;\n    }\n    const fn = $parseExpr(expr);\n\n    registry.set(identifier, {\n        fn: fn.bind(expr, $scope, $locals),\n        listener,\n        expr,\n        last: FIRST_TIME_WATCH,\n        doNotClone,\n        isMuted: isMuted\n    });\n\n    return () => $unwatch(identifier);\n};\n\nexport const $unwatch = identifier => registry.delete(identifier);\n\nlet changedByWatch = false;\n\nconst $RAF = window.requestAnimationFrame;\n\nlet ngZone;\n\nconst triggerWatchers = (ignoreMuted?: boolean) => {\n\n    if (muted && !ignoreMuted) {\n        return;\n    }\n    log(\".......................triggerWatchers.................................\");\n    const limit = 5;\n    let pass = 1;\n    let changeDetected;\n\n    do {\n        changeDetected = false;\n        registry.forEach(watchInfo => {\n            if(watchInfo.isMuted && watchInfo.isMuted()) {\n                return;\n            }\n            const fn = watchInfo.fn;\n            const listener = watchInfo.listener;\n            const ov = watchInfo.last;\n            let nv;\n\n            try {\n                nv = fn();\n            } catch (e) {\n                console.warn(`error in executing expression: '${watchInfo.expr}'`);\n            }\n\n            if (!isEqual(nv, ov)) {\n                changeDetected = true;\n                changedByWatch = true;\n                watchInfo.last = nv;\n\n                // @ts-ignore\n                if (isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {\n                    watchInfo.last = clone(nv);\n                }\n                listener(nv, ov);\n                resetChangeFromWatch();\n            }\n        });\n        pass++;\n\n    } while (changeDetected && pass < limit);\n\n    if (changeDetected && pass === limit) {\n        console.warn(`Number of watch cycles gone above set limit of: ${limit} `);\n    }\n};\n\nexport const setNgZone = zone => ngZone = zone;\n\nexport const setAppRef = ref => {\n    appRef = ref\n};\n\nexport const isChangeFromWatch = () => changedByWatch;\nexport const resetChangeFromWatch = () => changedByWatch = false;\n\n(<any>window).watchRegistry = registry;\n\nlet skipWatchers;\n\nlet scheduled = false,\n    rerunRequested = false,\n    isRunning = false,\n    consecutiveReruns = 0;\n\nconst MAX_PASSES = 5,\n    DEBOUNCE_TIME = 200,\n    MAX_CONSECUTIVE_RERUNS = 3;\n\n(window as any).__WM_DEBUG_WATCHERS__ = false;\n\nexport const $invokeWatchers = (\n    force = false,\n    ignoreMuted = false\n): void => {\n    if (force) {\n        triggerWatchers(ignoreMuted);\n    } else {\n        scheduleExecution(ignoreMuted);\n    }\n};\n\nfunction scheduleExecution(ignoreMuted: boolean) {\n    if (scheduled) {\n        rerunRequested = true;\n        return;\n    }\n\n    scheduled = true;\n\n    // Reset consecutive rerun counter when scheduling from outside\n    // (not from within executeWatchers rerun logic)\n    if (!isRunning) {\n        consecutiveReruns = 0;\n    }\n\n    debouncedExecute(ignoreMuted);\n}\n\nconst debouncedExecute = debounce((ignoreMuted: boolean) => {\n    scheduled = false;\n    executeWatchers(ignoreMuted);\n}, DEBOUNCE_TIME);\n\nfunction executeWatchers(ignoreMuted: boolean) {\n    if (isRunning) {\n        rerunRequested = true;\n        return;\n    }\n\n    isRunning = true;\n\n    let actuallyChanged = false;\n\n    ngZone.runOutsideAngular(() => {\n        let pass = 1;\n        let changeDetected: boolean;\n\n        do {\n            changeDetected = false;\n            log(`-------executeWatchers (run #${consecutiveReruns + 1})--------- `);\n\n            registry.forEach(watchInfo => {\n                if(watchInfo.isMuted && watchInfo.isMuted()) {\n                    return;\n                }\n                const fn = watchInfo.fn;\n                const listener = watchInfo.listener;\n                const ov = watchInfo.last;\n                let nv;\n\n                try {\n                    nv = fn();\n                } catch (e) {\n                    console.warn(`error in executing expression: '${watchInfo.expr}'`);\n                }\n\n                if (!isEqual(nv, ov)) {\n                    changeDetected = true;\n                    actuallyChanged = true;\n                    changedByWatch = true;\n                    watchInfo.last = nv;\n\n                    // @ts-ignore\n                    if (isObject(nv) && !watchInfo.doNotClone && nv.__cloneable__ !== false) {\n                        watchInfo.last = clone(nv);\n                    }\n                    listener(nv, ov);\n                    resetChangeFromWatch();\n                }\n            });\n\n            pass++;\n        } while (changeDetected && pass < MAX_PASSES);\n    });\n\n    isRunning = false;\n\n    // Trigger Angular change detection if watchers actually changed values\n    if (actuallyChanged) {\n        ngZone.run(() => {\n            log(`-------DONE (changes detected)--------- `);\n        });\n    } else {\n        log(`-------DONE (no changes)--------- `);\n    }\n\n    // 🔥 collapse ALL mid-run triggers into ONE rerun\n    // BUT limit consecutive reruns to prevent infinite loops\n    if (rerunRequested) {\n        rerunRequested = false;\n\n        if (consecutiveReruns < MAX_CONSECUTIVE_RERUNS) {\n            consecutiveReruns++;\n            log(`[Watcher] Scheduling rerun #${consecutiveReruns} (requested during execution)`);\n            scheduleExecution(ignoreMuted);\n        } else {\n            consecutiveReruns = 0;\n            log(`[Watcher] ⚠️ Stopped infinite loop! Max consecutive reruns (${MAX_CONSECUTIVE_RERUNS}) reached. This usually means watcher listeners are triggering more change detection.`);\n        }\n    } else {\n        // No rerun requested - reset counter\n        consecutiveReruns = 0;\n    }\n}\n\nconst debouncedTriggerWatchers = debounce(() => {\n    skipWatchers = true;\n    ngZone.runOutsideAngular(() => triggerWatchers());\n}, 100);\n\n/*export const $invokeWatchers = (force?: boolean, ignoreMuted?: boolean) => {\n    if (force) {\n        triggerWatchers(ignoreMuted);\n    } else {\n\n        if (skipWatchers) {\n            skipWatchers = false;\n            return;\n        }\n        debouncedTriggerWatchers();\n    }\n};*/\n\nexport const $appDigest = (() => {\n    let queued = false;\n    return (force?: boolean) => {\n        if (!appRef) {\n            return;\n        }\n        if (force) {\n            ngZone.run(() => appRef.tick());\n            queued = false;\n        } else {\n            if (queued) {\n                return;\n            } else {\n                queued = true;\n                $RAF(() => {\n                    ngZone.run(() => appRef.tick());\n                    queued = false;\n                });\n            }\n        }\n    };\n})();\n\nfunction log(message: string) {\n    if ((window as any).__WM_DEBUG_WATCHERS__) {\n        console.log(message);\n    }\n}\n","export enum ComponentType {\n    PAGE,\n    PREFAB,\n    PARTIAL,\n    WIDGET\n}\n\nexport class IDataSource {\n    execute: (operation: Operation, options?: any) => boolean | string | Promise<any>;\n}\n\nenum Operation {\n    LIST_RECORDS = 'listRecords',\n    UPDATE_RECORD = 'updateRecord',\n    INSERT_RECORD = 'insertRecord',\n    DELETE_RECORD = 'deleteRecord',\n    INVOKE = 'invoke',\n    UPDATE = 'update',\n    NOTIFY = 'notify',\n    IS_API_AWARE = 'isApiAware',\n    SUPPORTS_CRUD = 'supportsCRUD',\n    SUPPORTS_DISTINCT_API = 'supportsDistinctAPI',\n    IS_PAGEABLE = 'isPageable',\n    IS_SORTABLE = 'isSortable',\n    GET_OPERATION_TYPE = 'getOperationType',\n    GET_RELATED_PRIMARY_KEYS = 'getRelatedTablePrimaryKeys',\n    GET_ENTITY_NAME = 'getEntityName',\n    SET_INPUT = 'setinput',\n    GET_RELATED_TABLE_DATA = 'getRelatedTableData',\n    GET_DISTINCT_DATA_BY_FIELDS = 'getDistinctDataByFields',\n    GET_AGGREGATED_DATA = 'getAggregatedData',\n    GET_MATCH_MODE = 'getMatchMode',\n    DOWNLOAD = 'download',\n    GET_NAME = 'getName',\n    GET_PROPERTIES_MAP = 'getPropertiesMap',\n    GET_PRIMARY_KEY = 'getPrimaryKey',\n    GET_BLOB_URL = 'getBlobURL',\n    SUPPORTS_SERVER_FILTER = 'supportsServerFilter',\n    GET_OPTIONS = 'getOptions',\n    SEARCH_RECORDS = 'searchRecords',\n    GET_REQUEST_PARAMS = 'getRequestParams',\n    GET_PAGING_OPTIONS = 'getPagingOptions',\n    FETCH_DISTINCT_VALUES = 'fetchDistinctValues',\n    GET_UNIQUE_IDENTIFIER = 'getUniqueIdentifier',\n    GET_CONTEXT_IDENTIFIER = 'getContextIdentifier',\n    IS_UPDATE_REQUIRED = 'isUpdateRequired',\n    ADD_ITEM = 'addItem',\n    SET_ITEM = 'setItem',\n    REMOVE_ITEM = 'removeItem',\n    IS_BOUND_TO_LOCALE = 'isBoundToLocale',\n    GET_DEFAULT_LOCALE = 'getDefaultLocale',\n    CANCEL = 'cancel',\n    SET_PAGINATION = 'setPagination'\n}\n\nexport const DataSource = {\n    Operation\n};\n\nexport abstract class App {\n    appLocale: any;\n    Variables: any;\n    Actions: any;\n    onAppVariablesReady: Function;\n    onSessionTimeout: Function;\n    onBeforeAppReady: Function;\n    onPageReady: Function;\n    onBeforePageLeave: Function;\n    onBeforeServiceCall: Function;\n    onServiceSuccess: Function;\n    onServiceError: Function;\n    projectName: string;\n    isPrefabType: boolean;\n    isApplicationType: boolean;\n    setwidgetLocale: Function;\n    setMode: Function;\n    isTabletApplicationType: boolean;\n    isTemplateBundleType: boolean;\n    changeLocale: Function;\n    getSelectedLocale: Function;\n    setTimezone: Function;\n    reload: Function;\n    on401: Function;\n    notifyApp: Function;\n    importModule: Function;\n    getDependency: Function;\n    networkStatus: any;\n    notify: (eventName: string, data?: any) => void;\n    deployedUrl: string;\n    customUrlScheme: string;\n    selectedViewPort: Object;\n    subscribe: (eventName, callback: (data: any) => void) => () => void;\n    dynamicComponentContainerRef: any;\n    clearPageCache: (pageName?: string) => void;\n    isPrism: boolean;\n    hasOwnObjectProperty: (obj: any, prop: string) => boolean;\n\n    activePageName: string;\n    activePage: any;\n    Page: any;\n    activePageLoadTime: number;\n    landingPageName: string;\n    lastActivePageName: string;\n    deviceCategory: string;\n\n    activeLayoutName: string;\n    layoutPages: string[];\n}\n\n\nexport abstract class AbstractDialogService {\n    public abstract register(name: string, dialogRef: any, scope: any);\n    public abstract deRegister(name: string, scope: any);\n    public abstract open(name: string, scope?: any, initState?: any);\n    public abstract close(name: string, scope?: any);\n    public abstract showAppConfirmDialog(initState?: any);\n    public abstract closeAppConfirmDialog();\n    public abstract getAppConfirmDialog();\n    public abstract setAppConfirmDialog(dialogName: string);\n    public abstract closeAllDialogs: Function;\n    public abstract addToOpenedDialogs(ref: any);\n    public abstract getLastOpenedDialog();\n    public abstract removeFromOpenedDialogs(ref: any);\n    public abstract getOpenedDialogs();\n    public abstract addToClosedDialogs(ref: any);\n    public abstract removeFromClosedDialogs(ref: any);\n    public abstract getDialogRefFromClosedDialogs();\n}\n\nexport abstract class AbstractHttpService {\n    public abstract send(options: any);\n    public abstract setLocale(locale);\n    public abstract getLocale();\n    public abstract getHeader(error, headerKey);\n    public abstract isPlatformSessionTimeout(error);\n    public abstract get(url: string, options?: any);\n    public abstract post(url, data, options);\n    public abstract put(url, data, options);\n    public abstract patch(url, data, options);\n    public abstract delete(url, options);\n    public abstract head(url, options);\n    public abstract jsonp(url, options);\n    public abstract upload(url, data, options);\n    public abstract registerOnSessionTimeout(callback);\n    public abstract on401();\n    public abstract pushToSessionFailureQueue(callback);\n    public abstract executeSessionFailureRequests();\n    public abstract sendCallAsObservable(options: any, params?: any): any;\n}\n\nexport abstract class AbstractI18nService {\n    public abstract getSelectedLocale(): string;\n    public abstract getDefaultSupportedLocale(): string;\n    public abstract getAppLocale(): any;\n    public abstract setSelectedLocale(locale);\n    public abstract loadDefaultLocale();\n    public abstract getLocalizedMessage(message, ...args);\n    public abstract initCalendarLocale(): Promise<any>;\n    protected abstract loadAppLocaleBundle();\n    protected abstract loadMomentLocaleBundle(localeLang);\n    protected abstract loadLocaleBundles(localeLang);\n    public abstract setTimezone(locale, compInstance?);\n    public abstract setTimezoneEarly(): Promise<any>;\n    public abstract getFormatsByLocale();\n    public abstract getTimezone(compInstance?);\n    public abstract getPrefabLocaleBundle(prefabName: string): any;\n    public abstract setwidgetLocale(locale);\n    public abstract getwidgetLocale();\n}\n\nexport abstract class AbstractToasterService {\n    public abstract success(title: string, desc: string);\n    public abstract error(title: string, desc: string);\n    public abstract info(title: string, desc: string);\n    public abstract warn(title: string, desc: string);\n    public abstract show(\n        type: string,\n        title: string,\n        desc: string,\n        timeout: number,\n        bodyOutputType: string,\n        onClickHandler: Function,\n        onHideCallback: Function\n    );\n    public abstract hide(toasterObj: any);\n    public abstract showCustom(pageName: string, options?: any);\n}\n\nexport abstract class AbstractSpinnerService {\n    public abstract getMessageSource();\n    public abstract showContextSpinner(spinnerContext: string, message: string, id: string);\n    public abstract showAppSpinner(msg: string, id: string);\n    public abstract hideContextSpinner(ctx: string, id: string);\n    public abstract show(message: string, id?: string, spinnerClass?: string, spinnerContext?: string, variableScopeId?: string);\n    public abstract hide(id: string);\n}\nexport abstract class UserDefinedExecutionContext {\n\n}\n\nexport interface NavigationOptions {\n    $event?: any;\n    pageName?: string;\n    transition?: string;\n    urlParams?: any;\n    viewName?: string;\n}\n\nexport abstract class AbstractNavigationService {\n    public abstract getPageTransition(): string;\n    public abstract goToPage(pageName: string, options: NavigationOptions);\n    public abstract goToPrevious();\n    public abstract goToView(viewName: string, options: NavigationOptions, variable: any);\n}\n\nexport abstract class AppDefaults {\n    public dateFormat;\n    public timeFormat;\n    public dateTimeFormat;\n    public currencyCode;\n    public abstract setFormats(formats: any);\n}\n\nexport abstract class DynamicComponentRefProvider {\n    public abstract getComponentFactoryRef(selector: string, markup: string, options?: any);\n}\n\nexport abstract class PartialRefProvider {\n    abstract getComponentFactoryRef(partialName: string, componentType: ComponentType, options?: any): Promise<any>;\n}\n\nexport abstract class CustomWidgetRefProvider {\n    abstract getComponentFactoryRef(customWidgetName: string, componentType: ComponentType, options?: any): Promise<any>;\n}\n","import {Subject} from 'rxjs';\n\nimport {getPreviewProperties} from './wm-project-properties';\nimport {$appDigest, $watch} from './watcher';\nimport {DataType} from '../enums/enums';\nimport {DataSource} from '../types/types';\nimport {setAttr} from './dom';\nimport {$parseEvent} from './expression-parser';\nimport {\n    attempt,\n    camelCase,\n    cloneDeep,\n    every,\n    filter,\n    forEach,\n    get,\n    identity,\n    includes,\n    indexOf,\n    intersection,\n    isArray,\n    isDate,\n    isEqual,\n    isEqualWith,\n    isError,\n    isFunction,\n    isNull,\n    isNumber,\n    isString,\n    isUndefined,\n    keys,\n    map,\n    noop as _noop,\n    omit,\n    replace as _replace,\n    split,\n    startsWith,\n    toLower,\n    toUpper,\n    trim\n} from \"lodash-es\";\n\nimport X2JS from 'x2js';\nimport * as momentLib from 'moment-timezone/moment-timezone';\n\ndeclare const $;\nconst moment = momentLib.default || window['moment'];\ndeclare const document;\ndeclare const resolveLocalFileSystemURL;\ndeclare const WM_CUSTOM_FORMATTERS;\ndeclare const MSCSSMatrix;\ndeclare const _WM_APP_PROPERTIES;\n\nconst userAgent = window.navigator.userAgent;\nconst REGEX = {\n    SNAKE_CASE: /[A-Z]/g,\n    ANDROID: /Android/i,\n    IPHONE: /iPhone/i,\n    IPOD: /iPod/i,\n    IPAD: /iPad/i,\n    MAC: /Mac/i,\n    ANDROID_TABLET: /android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i,\n    MOBILE: /Mobile/i,\n    WINDOWS: /Windows Phone/i,\n    SUPPORTED_IMAGE_FORMAT: /\\.(bmp|gif|jpe|jpg|jpeg|tif|tiff|pbm|png|ico)$/i,\n    SUPPORTED_FILE_FORMAT: /\\.(txt|js|css|html|script|properties|json|java|xml|smd|xmi|sql|log|wsdl|vm|ftl|jrxml|yml|yaml|md|less|jsp)$/i,\n    SUPPORTED_AUDIO_FORMAT: /\\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,\n    SUPPORTED_VIDEO_FORMAT: /\\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,\n    PAGE_RESOURCE_PATH: /^\\/pages\\/.*\\.(js|css|html|json)$/,\n    MIN_PAGE_RESOURCE_PATH: /.*(page.min.html)$/,\n    VALID_EMAIL: /^[a-zA-Z][\\w.+]+@[a-zA-Z_]+?\\.[a-zA-Z.]{1,4}[a-zA-Z]$/,\n    VALID_WEB_URL: /^(http[s]?:\\/\\/)(www\\.){0,1}[a-zA-Z0-9=:?\\/\\.\\-]+(\\.[a-zA-Z]{2,5}[\\.]{0,1})?/,\n    VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,\n    VALID_WEBSOCKET_URL: /^(ws[s]?:\\/\\/)(www\\.){0,1}[a-zA-Z0-9=:?\\/\\.\\-]+(\\.[a-zA-Z]{2,5}[\\.]{0,1})?/,\n    VALID_RELATIVE_URL: /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/).*/,\n    REPLACE_PATTERN: /\\$\\{([^\\}]+)\\}/g,\n    ZIP_FILE: /\\.zip$/i,\n    EXE_FILE: /\\.exe$/i,\n    NO_QUOTES_ALLOWED: /^[^'|\"]*$/,\n    NO_DOUBLE_QUOTES_ALLOWED: /^[^\"]*$/,\n    VALID_HTML: /<[a-z][\\s\\S]*>/i,\n    VALID_PASSWORD: /^[0-9a-zA-Z-_.@&*!#$%]+$/,\n    SPECIAL_CHARACTERS: /[^A-Z0-9a-z_]+/i,\n    APP_SERVER_URL_FORMAT: /^(http[s]?:\\/\\/)(www\\.){0,1}[a-zA-Z0-9\\.\\-]+([:]?[0-9]{2,5}|\\.[a-zA-Z]{2,5}[\\.]{0,1})\\/+[^?#&=]+$/,\n    JSON_DATE_FORMAT: /\\d{4}-[0-1]\\d-[0-3]\\d(T[0-2]\\d:[0-5]\\d:[0-5]\\d.\\d{1,3}Z$)?/,\n    DATA_URL: /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i,\n    ISO_DATE_FORMAT: /(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?([+-]\\d{2}:?\\d{2}|Z)$/\n},\n    compareBySeparator = ':';\n\nconst NUMBER_TYPES = ['int', DataType.INTEGER, DataType.FLOAT, DataType.DOUBLE, DataType.LONG, DataType.SHORT, DataType.BYTE, DataType.BIG_INTEGER, DataType.BIG_DECIMAL];\nconst now: Date = new Date();\nconst CURRENT_DATE = 'CURRENT_DATE';\n\nexport const getNavClass = (suffix: string) : string => {\n    const APP_NAV_CLASS_PREFIX = 'app-nav-';\n    return APP_NAV_CLASS_PREFIX + suffix;\n}\n\nexport const getSheetPositionClass = (suffix: string): string => {\n    const SHEET_POSITION_CLASS_PREFIX = 'sheet-position-';\n    return SHEET_POSITION_CLASS_PREFIX + suffix;\n}\n\nexport const enum EVENT_LIFE { ONCE, WINDOW }\n\nexport const isDefined = v => 'undefined' !== typeof v;\n\nexport const isObject = v => null !== v && 'object' === typeof v;\n\nexport const toBoolean = (val, identity?) => ((val && val !== 'false') ? true : (identity ? val === identity : false));\n\nfunction isIE11() {\n    return window.navigator.appVersion.indexOf('Trident/') > -1;\n}\n\nexport const isIE = () => {\n    return isIE11() || window.navigator.userAgent.indexOf('MSIE') > -1;\n};\n\n\nexport const isAndroid = () => REGEX.ANDROID.test(userAgent);\n\nexport const isAndroidTablet = () => REGEX.ANDROID_TABLET.test(userAgent) && !((/Tablet PC 2.0/i).test(userAgent));\n\nexport const isIphone = () => REGEX.IPHONE.test(userAgent);\nexport const isIpod = () => REGEX.IPOD.test(userAgent);\nexport const isIpad = () => {\n    return REGEX.IPAD.test(userAgent) || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 && REGEX.MAC.test(window.navigator.platform));\n};\n\nexport const isIos = () => isIphone() || isIpod() || isIpad();\n\nexport const isSafari = () => navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\n\n\nexport const isLargeTabletLandscape = (landScapeWidth, landScapeHeight) => {\n    const width = landScapeWidth || '1366px';\n    const height = landScapeHeight || '1024px';\n    return window.matchMedia(\"only screen and (min-device-width : \"+width+\") and (max-device-width : \"+width+\") and (min-device-height : \"+height+\") and (max-device-height : \"+height+\") and (min-width: \"+width+\") and (max-width: \"+width+\")\").matches;\n}\n\nexport const isLargeTabletPortrait = (landScapeWidth, landScapeHeight) =>  {\n    const height = landScapeWidth || '1366px';\n    const width = landScapeHeight || '1024px';\n    return window.matchMedia(\"only screen and (min-device-width : \"+width+\") and (max-device-width : \"+width+\") and (min-device-height : \"+height+\") and (max-device-height : \"+height+\") and (min-width: \"+width+\") and (max-width: \"+width+\")\").matches;\n}\n\nexport const isMobile = () => isAndroid() || isIos() || isAndroidTablet() || $('#wm-mobile-display:visible').length > 0;\n\nexport const isTablet = () => {\n    const scope = document.querySelector('.app-page').widget;\n    return scope && scope.viewParent.Viewport.isTabletType;\n};\n\n\nexport const getAndroidVersion = () => {\n    const match = (window.navigator.userAgent.toLowerCase()).match(/android\\s([0-9\\.]*)/);\n    return match ? match[1] : '';\n};\n\nexport const isKitkatDevice = () => isAndroid() && parseInt(getAndroidVersion(), 10) === 4;\n\n/**\n * this method encodes the url and returns the encoded string\n */\nexport const encodeUrl = (url: string): string => {\n    const index = url.indexOf('?');\n    if (index > -1) {\n        // encode the relative path\n        url = encodeURI(url.substring(0, index)) + url.substring(index);\n        // encode url params, not encoded through encodeURI\n        url = encodeUrlParams(url);\n    } else {\n        url = encodeURI(url);\n    }\n\n    return url;\n};\n\n/**\n * this method encodes the url params and is private to the class only\n */\nexport const encodeUrlParams = (url: string): string => {\n    let queryParams, encodedParams = '', queryParamsString, index;\n    index = url.indexOf('?');\n    if (index > -1) {\n        index += 1;\n        queryParamsString = url.substring(index);\n        // Encoding the query params if exist\n        if (queryParamsString) {\n            queryParams = queryParamsString.split('&');\n            queryParams.forEach(function (param) {\n                let decodedParamValue;\n                const i = includes(param, '=') ? param.indexOf('=') : (param && param.length),\n                    paramName = param.substr(0, i),\n                    paramValue = param.substr(i + 1);\n\n                // add the = for param name only when the param value exists in the given param or empty value is assigned\n                if (paramValue || includes(param, '=')) {\n                    try {\n                        decodedParamValue = decodeURIComponent(paramValue);\n                    } catch (e) {\n                        decodedParamValue = paramValue;\n                    }\n                    encodedParams += paramName + '=' + encodeURIComponent(decodedParamValue) + '&';\n                } else {\n                    encodedParams += paramName + '&';\n                }\n            });\n            encodedParams = encodedParams.slice(0, -1);\n            url = url.replace(queryParamsString, encodedParams);\n        }\n    }\n    return url;\n};\n\n/* capitalize the first-letter of the string passed */\nexport const initCaps = name => {\n    if (!name) {\n        return '';\n    }\n    return name.charAt(0).toUpperCase() + name.substring(1);\n};\n\n/* convert camelCase string to a space separated string */\nexport const spaceSeparate = name => {\n    if (name === name.toUpperCase()) {\n        return name;\n    }\n    return name.replace(REGEX.SNAKE_CASE, function (letter, pos) {\n        return (pos ? ' ' : '') + letter;\n    });\n};\n\n/*Replace the character at a particular index*/\nexport const replaceAt = (string, index, character) => string.substr(0, index) + character + string.substr(index + character.length);\n\n/*Replace '.' with space and capitalize the next letter*/\nexport const periodSeparate = name => {\n    let dotIndex;\n    dotIndex = name.indexOf('.');\n    if (dotIndex !== -1) {\n        name = replaceAt(name, dotIndex + 1, name.charAt(dotIndex + 1).toUpperCase());\n        name = replaceAt(name, dotIndex, ' ');\n    }\n    return name;\n};\n\nexport const prettifyLabel = label => {\n    label = camelCase(label);\n    /*capitalize the initial Letter*/\n    label = initCaps(label);\n    /*Convert camel case words to separated words*/\n    label = spaceSeparate(label);\n    /*Replace '.' with space and capitalize the next letter*/\n    label = periodSeparate(label);\n    return label;\n};\n\nexport const deHyphenate = (name) => {\n    return name.split('-').join(' ');\n};\n\n/*Accepts an array or a string separated with symbol and returns prettified result*/\nexport const prettifyLabels = (names, separator = ',') => {\n    let modifiedNames, namesArray = [];\n\n    if (!isArray(names)) {\n        namesArray = split(names, separator);\n    }\n\n    modifiedNames = map(namesArray, prettifyLabel);\n    if (isArray(names)) {\n        return modifiedNames;\n    }\n    return modifiedNames.join(separator);\n};\n\n/**\n * this method checks if a insecure content request is being made\n */\nexport const isInsecureContentRequest = (url: string): boolean => {\n\n    const parser: HTMLAnchorElement = document.createElement('a');\n    parser.href = url;\n\n    // for relative urls IE returns the protocol as empty string\n    if (parser.protocol === '') {\n        return false;\n    }\n\n    // If the inputted source is a base64 url, do not throw insecure content error\n    if (REGEX.DATA_URL.test(url)) {\n        return false;\n    }\n\n    if (stringStartsWith(location.href, 'https://')) {\n        return parser.protocol !== 'https:' && parser.protocol !== 'wss:';\n    }\n\n    return false;\n};\n\n/**\n * this method checks if a given string starts with the given string\n */\nexport const stringStartsWith = (str: string, startsWith: string, ignoreCase?): boolean => {\n    if (!str) {\n        return false;\n    }\n\n    const regEx = new RegExp('^' + startsWith, ignoreCase ? 'i' : '');\n\n    return regEx.test(str);\n};\n\nexport const getEvaluatedExprValue = (object, expression) => {\n    let val;\n    /**\n     * Evaluate the expression with the scope and object.\n     * $eval is used, as expression can be in format of field1 + ' ' + field2\n     * $eval can fail, if expression is not in correct format, so attempt the eval function\n     */\n    val = attempt(function () {\n\n        const argsExpr = Object.keys(object).map((fieldName) => {\n            return `var ${fieldName} = data['${fieldName}'];`;\n        }).join(' ');\n        const f = new Function('data', `${argsExpr} return  ${expression}`);\n        return f(object);\n    });\n    /**\n     * $eval fails if field expression has spaces. Ex: 'field name' or 'field@name'\n     * As a fallback, get value directly from object or scope\n     */\n    if (isError(val)) {\n        val = get(object, expression);\n    }\n    return val;\n};\n\n/* functions for resource Tab*/\nexport const isImageFile = (fileName) => {\n    return (REGEX.SUPPORTED_IMAGE_FORMAT).test(fileName);\n};\n\nexport const isAudioFile = (fileName) => {\n    return (REGEX.SUPPORTED_AUDIO_FORMAT).test(fileName);\n};\n\nexport const isVideoFile = (fileName) => {\n    return (REGEX.SUPPORTED_VIDEO_FORMAT).test(fileName);\n};\n\nexport const isValidWebURL = (url: string): boolean => {\n    return (REGEX.VALID_WEB_URL).test(url);\n};\n\nexport const isValidImageUrl = (url: string): boolean => {\n    return (REGEX.VALID_IMAGE_URL).test(url?.trim());\n}\n\n/*This function returns the url to the resource after checking the validity of url*/\nexport const getResourceURL = (urlString) => {\n    if (isValidWebURL(urlString)) {\n        /*TODO: Use DomSanitizer*/\n        // return sanitizer.bypassSecurityTrustResourceUrl(urlString);\n    }\n    return urlString;\n};\n\n/*function to check if fn is a function and then execute*/\nexport function triggerFn(fn, ...argmnts) {\n    /* Use of slice on arguments will make this function not optimizable\n    * https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n    * */\n\n    let start = 1;\n    const len = arguments.length, args = new Array(len - start);\n    for (start; start < len; start++) {\n        args[start - 1] = arguments[start];\n    }\n\n    if (isFunction(fn)) {\n        return fn.apply(null, args);\n    }\n}\n\n/**\n * This method is used to get the formatted date\n */\nexport const getFormattedDate = (datePipe, dateObj, format, timeZone?, isTimeStampType?, isIntervalDateTime?, compInstance?): any => {\n    if (!dateObj) {\n        return undefined;\n    }\n    if (format === 'timestamp') {\n        return moment(dateObj).valueOf();\n    }\n\n    if (format === 'UTC') {\n        return new Date(dateObj).toISOString();\n    }\n    if (timeZone && timeZone !== (moment as any).defaultZone?.name) {\n        const momentFormat = format.replaceAll('y', 'Y').replaceAll('d', 'D').replace('a', 'A');\n        if (isIntervalDateTime ) { // dates which are of type time widget (value is hh:mm:ss) but returned as date string from time comp\n            return moment(dateObj).format(momentFormat);\n        }\n        if (isTimeStampType === 'datetimestamp') {\n            dateObj = getMomentLocaleObject(timeZone, dateObj);\n            return moment(dateObj).format(momentFormat);\n        }\n    }\n\n    return datePipe.transform(dateObj, format, timeZone, compInstance);\n};\n\n/**\n * This method is used to check if the date has timezone information or not\n */\nexport const hasOffsetStr = (dateStr) => {\n    if (typeof dateStr !== 'string') return;\n    const matches = dateStr.match(REGEX.ISO_DATE_FORMAT);\n    if (matches && matches[4]) {\n        return true;\n    }\n}\n\n/**\n * method to get the date object from the input received\n */\nexport const getDateObj = (value, options?, timezone?): Date => {\n    // Handling localization\n    if (options && options.pattern && options.pattern !== 'timestamp') {\n        // Fix for WMS-19601, invalid date is returned on date selection.\n        const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();\n        const pattern =  isNativePicker ? 'YYYY/MM/DD HH:mm:ss' : momentPattern(options.pattern);\n        value = moment(value, pattern).toDate();\n    }\n\n    /*if the value is a date object, no need to covert it*/\n    if (isDate(value)) {\n        return value;\n    }\n\n    /*if the value is a timestamp string, convert it to a number*/\n    if (!isNaN(value)) {\n        value = parseInt(value, 10);\n    }\n\n    if (!moment(value).isValid() || value === '' || value === null || value === undefined) {\n        return undefined;\n    }\n    let dateObj = new Date(value);\n    /**\n     * if date value is string \"20-05-2019\" then new Date(value) return 20May2019 with current time in India,\n     * whereas this will return 19May2019 with time lagging for few hours.\n     * This is because it returns UTC time i.e. Coordinated Universal Time (UTC).\n     * To create date in local time use moment\n     */\n    if (isString(value)) {\n        /*\n         * If selected locale is Arabic, moment(value).format() is giving date in Arabic language\n         * (Ex: If date value is \"1990-11-23\" and moment(value).format() is \"١٩٩٠-١١-٢٣T٠٠:٠٠:٠٠+٠٥:٣٠\")\n         * and new Date(moment(value).format()) is giving Invalid Date. So frst converting it to timestamp value.\n        */\n\n        dateObj = !timezone ? new Date(moment(moment(value).format()).valueOf()) : getMomentLocaleObject(timezone, value);;\n    }\n\n    if (value === CURRENT_DATE || isNaN(dateObj.getDay())) {\n        return now;\n    }\n    return dateObj;\n};\n\nexport const addEventListenerOnElement = (_element: Element, excludeElement: Element, nativeElement: Element, eventType, isDropDownDisplayEnabledOnInput, successCB, life: EVENT_LIFE, isCapture = false) => {\n    const element: Element = _element;\n    const eventListener = (event) => {\n        if (excludeElement && (excludeElement.contains(event.target) || excludeElement === event.target)) {\n            return;\n        }\n        if (nativeElement.contains(event.target)) {\n            if ($(event.target).is('input') && !isDropDownDisplayEnabledOnInput) {\n                return;\n            }\n            element.removeEventListener(eventType, eventListener, isCapture);\n            return;\n        }\n        if (life === EVENT_LIFE.ONCE) {\n            element.removeEventListener(eventType, eventListener, isCapture);\n        }\n        successCB();\n    };\n    element.addEventListener(eventType, eventListener, isCapture);\n    const removeEventListener = () => {\n        element.removeEventListener(eventType, eventListener, isCapture);\n    };\n    return removeEventListener;\n};\n\n/**\n * Returns a deep cloned replica of the passed object/array\n * @param object object/array to clone\n * @returns a clone of the passed object\n */\nexport const getClonedObject = (object) => {\n    return cloneDeep(object);\n};\n\nexport const getFiles = (formName, fieldName, isList) => {\n    const files = get(document.forms, [formName, fieldName, 'files']);\n    return isList ? map(files, identity) : files && files[0];\n};\n\n/*Function to generate a random number*/\nfunction random() {\n    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\n/*Function to generate a guid based on random numbers.*/\nexport const generateGUId = () => {\n    return random() + '-' + random() + '-' + random();\n};\n\n/**\n * Validate if given access role is in current loggedin user access roles\n */\nexport const validateAccessRoles = (roleExp, loggedInUser) => {\n    let roles;\n\n    if (roleExp && loggedInUser) {\n\n        roles = roleExp && roleExp.split(',').map(Function.prototype.call, String.prototype.trim);\n\n        return intersection(roles, loggedInUser.userRoles).length;\n    }\n\n    return true;\n};\n\nexport const getValidJSON = (content) => {\n    if (!content) {\n        return undefined;\n    }\n    try {\n        const parsedIntValue = parseInt(content, 10);\n        /*obtaining json from editor content string*/\n        return isObject(content) || !isNaN(parsedIntValue) ? content : JSON.parse(content);\n    } catch (e) {\n        /*terminating execution if new variable object is not valid json.*/\n        return undefined;\n    }\n};\n\nexport const xmlToJson = (xmlString) => {\n    //TODO: import x2js dynamically\n    const x2jsObj = new X2JS({ 'emptyNodeForm': 'object', 'attributePrefix': '', 'enableToStringFunc': false });\n    let json = x2jsObj.xml2js(xmlString);\n    if (json) {\n        json = get(json, Object.keys(json)[0]);\n    }\n    return json;\n};\n\n/*\n * Util method to find the value of a key in the object\n * if key not found and create is true, an object is created against that node\n * Examples:\n * var a = {\n *  b: {\n *      c : {\n *          d: 'test'\n *      }\n *  }\n * }\n * Utils.findValue(a, 'b.c.d') --> 'test'\n * Utils.findValue(a, 'b.c') --> {d: 'test'}\n * Utils.findValue(a, 'e') --> undefined\n * Utils.findValue(a, 'e', true) --> {} and a will become:\n * {\n *   b: {\n *      c : {\n *          d: 'test'\n *      }\n *  },\n *  e: {\n *  }\n * }\n */\nexport const findValueOf = (obj, key, create?) => {\n\n    if (!obj || !key) {\n        return;\n    }\n\n    if (!create) {\n        return get(obj, key);\n    }\n\n    const parts = key.split('.'),\n        keys = [];\n\n    let skipProcessing;\n\n    parts.forEach((part) => {\n        if (!parts.length) { // if the part of a key is not valid, skip the processing.\n            skipProcessing = true;\n            return false;\n        }\n\n        const subParts = part.match(/\\w+/g);\n        let subPart;\n\n        while (subParts.length) {\n            subPart = subParts.shift();\n            keys.push({ 'key': subPart, 'value': subParts.length ? [] : {} }); // determine whether to create an array or an object\n        }\n    });\n\n    if (skipProcessing) {\n        return undefined;\n    }\n\n    keys.forEach((_key) => {\n        let tempObj = obj[_key.key];\n        if (!isObject(tempObj)) {\n            tempObj = getValidJSON(tempObj);\n            if (!tempObj) {\n                tempObj = _key.value;\n            }\n        }\n        obj[_key.key] = tempObj;\n        obj = tempObj;\n    });\n\n    return obj;\n};\n\n/*\n* extracts and returns the last bit from full typeRef of a field\n* e.g. returns 'String' for typeRef = 'java.lang.String'\n* @params: {typeRef} type reference\n*/\nexport const extractType = (typeRef: string): string => {\n    let type;\n    if (!typeRef) {\n        return DataType.STRING;\n    }\n    type = typeRef && typeRef.substring(typeRef.lastIndexOf('.') + 1);\n    type = type && type.toLowerCase();\n    type = type === DataType.LOCALDATETIME ? DataType.DATETIME : type;\n    return type;\n};\n\n/* returns true if the provided data type matches number type */\nexport const isNumberType = (type: any): boolean => {\n    return (NUMBER_TYPES.indexOf(extractType(type).toLowerCase()) !== -1);\n};\n\n/* function to check if provided object is empty*/\nexport const isEmptyObject = (obj: any): boolean => {\n    if (isObject(obj) && !isArray(obj)) {\n        return Object.keys(obj).length === 0;\n    }\n    return false;\n};\n\n// Function expects an element on which the scrolling should be applied, Depending on the offset of the element scrollbar will be adjusted\nexport const scrollToElement = (element) => {\n    const $element = $(element);\n    const formPosition = $element.offset().top;\n    window.scroll({\n        top: formPosition,\n        left: 0,\n        behavior: 'smooth'\n    });\n}\n\n// Function will return whether the given element is in viewport or not\nexport const isElementInViewport = (element) => {\n    var rect = element.getBoundingClientRect();\n    return (\n        rect.top >= 0 &&\n        rect.left >= 0 &&\n        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n        rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n    );\n}\n\n/*Function to check whether the specified object is a pageable object or not.*/\nexport const isPageable = (obj: any): boolean => {\n    const pageable = {\n        'content': [],\n        'first': true,\n        'last': true,\n        'number': 0,\n        'numberOfElements': 10,\n        'size': 20,\n        'sort': null,\n        'totalElements': 10,\n        'totalPages': 1\n    };\n    // paginated object may or may not contain 'empty' property. In either case, Pageable should return as true.\n    const paginatedObj = omit(obj, 'empty');\n    return (isEqual(keys(pageable), keys(paginatedObj).sort()));\n};\n\n/*\n * Util method to replace patterns in string with object keys or array values\n * Examples:\n * Utils.replace('Hello, ${first} ${last} !', {first: 'wavemaker', last: 'ng'}) --> Hello, wavemaker ng\n * Utils.replace('Hello, ${0} ${1} !', ['wavemaker','ng']) --> Hello, wavemaker ng\n * Examples if parseError is true:\n * Utils.replace('Hello, {0} {1} !', ['wavemaker','ng']) --> Hello, wavemaker ng\n */\nexport const replace = (template, map, parseError?: boolean) => {\n    let regEx = REGEX.REPLACE_PATTERN;\n    if (!template) {\n        return;\n    }\n    if (parseError) {\n        regEx = /\\{([^\\}]+)\\}/g;\n    }\n\n    return template.replace(regEx, function (match, key) {\n        return get(map, key);\n    });\n};\n\n/*Function to check if date time type*/\nexport const isDateTimeType = type => {\n    if (includes(type, '.')) {\n        type = toLower(extractType(type));\n    }\n    return includes([DataType.DATE, DataType.TIME, DataType.TIMESTAMP, DataType.DATETIME, DataType.LOCALDATETIME], type);\n};\n\nconst momentPattern = (pattern) => {\n    if (includes(pattern, 'E')) {\n        pattern = _replace(pattern, /E[,]?/g, '');\n    }\n    return _replace(pattern, /y*d*/g, (val) => val.toUpperCase());\n};\n\n/*  This function returns date object. If val is undefined it returns invalid date */\nexport const getValidDateObject = (val, options?) => {\n   const defaultMeridian = ['AM', 'PM'];\n   const momentMeridian = (moment() as any)._locale.meridiem();\n    // Updating localized meridians with default meridians when moment meridian is not defined\n    if (options && options.meridians && includes(defaultMeridian, momentMeridian)) {\n        forEach(options.meridians, (meridian, index) => {\n            if (includes(val, meridian)) {\n                val = val.replace(meridian, defaultMeridian[index]);\n            }\n        });\n    }\n    const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();\n    const pattern = isNativePicker ? (get(options, 'pattern') || 'YYYY/MM/DD HH:mm:ss') : (momentPattern(get(options, 'pattern')) || '');\n    // Handling localization\n    if (options && options.pattern && options.pattern !== 'timestamp') {\n        if (!isNaN(moment(val, pattern).valueOf())) { // Fix for [WMS-27658]: Date() doesn't support some formats like 'dd/MM/yyyy'  so using moment() to format the value\n            // check whether val is a valid date or not\n            if (isIos()) {\n                // For iOS, explicitly setting the format to consider even the seconds.\n                val = moment(val).format('YYYY/MM/DD HH:mm:ss');\n            }\n            val = moment(val, pattern);\n        } else {\n            val = moment(val, pattern);\n        }\n        val = val.toDate();\n    }\n\n    if (moment(val, pattern).isValid()) {\n        // date with +5 hours is returned in safari browser which is not a valid date.\n        // Hence converting the date to the supported format \"YYYY/MM/DD HH:mm:ss\" in IOS\n        if (isIos()) {\n            val = moment(moment(val).valueOf()).format('YYYY/MM/DD HH:mm:ss');\n        }\n        return val;\n    }\n    /*if the value is a timestamp string, convert it to a number*/\n    if (!isNaN(val)) {\n        val = parseInt(val, 10);\n    } else {\n        /*if the value is in HH:mm:ss format, it returns a wrong date. So append the date to the given value to get date*/\n        if (!(new Date(val).getTime())) {\n            val = moment((moment().format('YYYY-MM-DD') + ' ' + val), 'YYYY-MM-DD HH:mm:ss A');\n\n        }\n    }\n    return new Date(moment(val).valueOf());\n};\n\n/*  This function returns javascript date object*/\nexport const getNativeDateObject = (val, options?) => {\n    val = getValidDateObject(val, options);\n    return new Date(val);\n};\n\n\n/**\n * prepare a blob object based on the content and content type provided\n * if content is blob itself, simply returns it back\n * @param val\n * @param valContentType\n * @returns {*}\n */\nexport const getBlob = (val, valContentType?) => {\n    if (val instanceof Blob) {\n        return val;\n    }\n    const jsonVal = getValidJSON(val);\n    if (jsonVal && jsonVal instanceof Object) {\n        val = new Blob([JSON.stringify(jsonVal)], { type: valContentType || 'application/json' });\n    } else {\n        val = new Blob([val], { type: valContentType || 'text/plain' });\n    }\n    return val;\n};\n\n/**\n * This function returns true by comparing two objects based on the fields\n * @param obj1 object\n * @param obj2 object\n * @param compareBy string field values to compare\n * @returns {boolean} true if object equality returns true based on fields\n */\nexport const isEqualWithFields = (obj1, obj2, compareBy) => {\n    // compareBy can be 'id' or 'id1, id2' or 'id1, id2:id3'\n    // Split the compareby comma separated values\n    let _compareBy = isArray(compareBy) ? compareBy : split(compareBy, ',');\n\n    //@ts-ignore\n    _compareBy = map(_compareBy, trim);\n\n    return isEqualWith(obj1, obj2, function (o1, o2) {\n        return every(_compareBy, function (cb) {\n            let cb1, cb2, _cb;\n\n            // If compareby contains : , compare the values by the keys on either side of :\n            if (indexOf(cb, compareBySeparator) === -1) {\n                cb1 = cb2 = trim(cb);\n            } else {\n                _cb = split(cb, compareBySeparator);\n                cb1 = trim(_cb[0]);\n                cb2 = trim(_cb[1]);\n            }\n\n            return get(o1, cb1) === get(o2, cb2);\n        });\n    });\n};\n\nconst getNode = selector => document.querySelector(selector);\n\n// function to check if the stylesheet is already loaded\nconst isStyleSheetLoaded = href => !!getNode(`link[href=\"${href}\"]`);\n\n// function to remove stylesheet if the stylesheet is already loaded\nconst removeStyleSheet = href => {\n    const node = getNode(`link[href=\"${href}\"]`);\n    if (node) {\n        node.remove();\n    }\n};\n\n// function to load a stylesheet\nexport const loadStyleSheet = (url, attr) => {\n    if (isStyleSheetLoaded(url)) {\n        return;\n    }\n    const link = document.createElement('link');\n    link.href = url;\n    // To add attributes to link tag\n    if (attr && attr.name) {\n        link.setAttribute(attr.name, attr.value);\n    }\n    link.setAttribute('rel', 'stylesheet');\n    link.setAttribute('type', 'text/css');\n    document.head.appendChild(link);\n    return link;\n};\n\n// function to load stylesheets\nexport const loadStyleSheets = (urls = []) => {\n    // if the first argument is not an array, convert it to an array\n    if (!Array.isArray(urls)) {\n        urls = [urls];\n    }\n    urls.forEach(loadStyleSheet);\n};\n\n// function to check if the script is already loaded\nconst isScriptLoaded = src => !!getNode(`script[src=\"${src}\"], script[data-src=\"${src}\"]`);\n\nexport const getMomentLocaleObject = (timeZone, dateObj?) => {\n    if (dateObj) {\n        return new Date(new Date((moment(dateObj) as any).tz(timeZone).format()).toLocaleString(\"en-US\", {timeZone: timeZone}));\n    } else {\n        return new Date(new Date((moment() as any).tz(timeZone).format()).toLocaleString(\"en-US\", {timeZone: timeZone}));\n    }\n}\n\nexport const loadScript = async (url, loadViaScriptTag, cacheable = false) => {\n    const _url = url.trim();\n    if (!_url.length || isScriptLoaded(_url)) {\n        return Promise.resolve();\n    }\n\n    if (loadViaScriptTag) {\n        return new Promise<any>((resolve, reject)=>{\n            let script = document.createElement('script');\n            script.type = 'text/javascript';\n            script.src = _url;\n            script.async = false;\n            if (script.readyState) {  //IE\n                script.onreadystatechange = () => {\n                    if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\n                        script.onreadystatechange = null;\n                        resolve(true);\n                    }\n                };\n            } else {  //Other browsers\n                script.onload = () => {\n                    resolve(true);\n                };\n            }\n            script.onerror = (error: any) => reject(error);\n            document.getElementsByTagName('head')[0].appendChild(script);\n        });\n    } else if(cacheable) {\n        return $.ajax({\n            dataType: 'script',\n            cache: true,\n            url: url\n        }).done(response => response)\n            .fail(reason => reason);\n    } else {\n        return $.getScript(url)\n            .done(response => response)\n            .fail(reason => reason);\n    }\n};\n\nexport const loadScripts = async (urls = [], loadViaScriptTag = true) => {\n    for (const url of urls) {\n        await loadScript(url, loadViaScriptTag);\n    }\n    return Promise.resolve();\n};\n\nexport let _WM_APP_PROJECT: any = {};\n\n/**\n * This function sets session storage item based on the project ID\n * @param key string\n * @param value string\n */\nexport const setSessionStorageItem = (key, value) => {\n    let item: any = window.sessionStorage.getItem(_WM_APP_PROJECT.id);\n\n    if (item) {\n        item = JSON.parse(item);\n    } else {\n        item = {};\n    }\n    item[key] = value;\n\n    window.sessionStorage.setItem(_WM_APP_PROJECT.id, JSON.stringify(item));\n};\n\n/**\n * This function gets session storage item based on the project ID\n * @param key string\n */\nexport const getSessionStorageItem = key => {\n    // sanity check for this to work with ng-codegen\n    let item = window && window.sessionStorage && window.sessionStorage.getItem(_WM_APP_PROJECT.id);\n\n    if (item) {\n        item = JSON.parse(item);\n        return item[key];\n    }\n};\n\nexport const noop = (...args) => { };\n\n/**\n * This function returns a blob object from the given file path\n * @param filepath\n * @returns promise having blob object\n */\nexport const convertToBlob = (filepath): Promise<any> => {\n    return new Promise<any>((resolve, reject) => {\n        // Read the file entry from the file URL\n        resolveLocalFileSystemURL(filepath, function (fileEntry) {\n            fileEntry.file(function (file) {\n                // file has the cordova file structure. To submit to the backend, convert this file to javascript file\n                const reader = new FileReader();\n                reader.onloadend = () => {\n                    const imgBlob = new Blob([reader.result], {\n                        'type': file.type\n                    });\n                    resolve({ 'blob': imgBlob, 'filepath': filepath });\n                };\n                reader.onerror = reject;\n                reader.readAsArrayBuffer(file);\n            });\n        }, reject);\n    });\n};\n\n\nexport const AppConstants = {\n    INT_MAX_VALUE: 2147483647\n};\n\nexport const openLink = (link: string, target: string = '_self') => {\n        window.open(link, target);\n};\n\n/* util function to load the content from a url */\nexport const fetchContent = (dataType, url: string, inSync: boolean = false, success?, error?): Promise<any> => {\n    return $.ajax({ type: 'get', dataType: dataType, url: url, async: !inSync })\n        .done(response => success && success(response))\n        .fail(reason => error && error(reason));\n};\n\n/**\n * If the given object is a promise, then object is returned. Otherwise, a promise is resolved with the given object.\n * @param {Promise<T> | T} a\n * @returns {Promise<T>}\n */\nexport const toPromise = <T>(a: T | Promise<T>): Promise<T> => {\n    if (a instanceof Promise) {\n        return a;\n    } else {\n        return Promise.resolve(a as T);\n    }\n};\n\n/**\n * This function invokes the given the function (fn) until the function successfully executes or the maximum number\n * of retries is reached or onBeforeRetry returns false.\n *\n * @param fn - a function that is needs to be invoked. The function can also return a promise as well.\n * @param interval - minimum time gap between successive retries. This argument should be greater or equal to 0.\n * @param maxRetries - maximum number of retries. This argument should be greater than 0. For all other values,\n * maxRetries is infinity.\n * @param onBeforeRetry - a callback function that will be invoked before re-invoking again. This function can\n * return false or a promise that is resolved to false to stop further retry attempts.\n * @returns {*} a promise that is resolved when fn is success (or) maximum retry attempts reached\n * (or) onBeforeRetry returned false.\n */\nexport const retryIfFails = (fn: () => any, interval: number, maxRetries: number, onBeforeRetry = () => Promise.resolve(false)) => {\n    let retryCount = 0;\n    const tryFn = () => {\n        retryCount++;\n        if (isFunction(fn)) {\n            return fn();\n        }\n    };\n    maxRetries = (isNumber(maxRetries) && maxRetries > 0 ? maxRetries : 0);\n    interval = (isNumber(interval) && interval > 0 ? interval : 0);\n    return new Promise((resolve, reject) => {\n        const errorFn = function () {\n            const errArgs = arguments;\n            setTimeout(() => {\n                toPromise<boolean>(onBeforeRetry()).then(function (retry) {\n                    if (retry !== false && (!maxRetries || retryCount <= maxRetries)) {\n                        toPromise(tryFn()).then(resolve, errorFn);\n                    } else {\n                        reject(errArgs);\n                    }\n                }, () => reject(errArgs));\n            }, interval);\n        };\n        toPromise(tryFn()).then(resolve, errorFn);\n    });\n};\n\n/**\n * Promise of a defer created using this function, has abort function that will reject the defer when called.\n * @returns {*} angular defer object\n */\nexport const getAbortableDefer = () => {\n    const _defer: any = {\n        promise: null,\n        reject: null,\n        resolve: null,\n        onAbort: () => { },\n        isAborted: false\n    };\n    _defer.promise = new Promise((resolve, reject) => {\n        _defer.resolve = resolve;\n        _defer.reject = reject;\n    });\n    _defer.promise.abort = () => {\n        triggerFn(_defer.onAbort);\n        _defer.reject('aborted');\n        _defer.isAborted = true;\n    };\n    return _defer;\n};\n\nexport const createCSSRule = (ruleSelector: string, rules: string) => {\n    const stylesheet = document.styleSheets[0];\n    stylesheet.insertRule(`${ruleSelector} { ${rules} }`);\n};\n\nexport const getUrlParams = (link) => {\n    const params = {};\n    // If url params are present, construct params object and pass it to search\n    const index = link.indexOf('?');\n    if (index !== -1) {\n        const queryParams = split(link.substring(index + 1, link.length), '&');\n        queryParams.forEach((param) => {\n            let paramArray = split(param, '=');\n            params[paramArray[0]] = paramArray[1];\n        });\n    }\n    return params;\n};\n\nexport const getRouteNameFromLink = (link) => {\n    link = link.replace('#/', '/');\n    const index = link.indexOf('?');\n    if (index !== -1) {\n        link = link.substring(0, index);\n    }\n    return link;\n};\n\nexport const isAppleProduct = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nexport const defer = () => {\n    const d = {\n        promise: null,\n        resolve: noop,\n        reject: noop\n    };\n    d.promise = new Promise((resolve, reject) => {\n        d.resolve = resolve;\n        d.reject = reject;\n    });\n    return d;\n};\n\n/*\n * Invokes the given list of functions sequentially with the given arguments. If a function returns a promise,\n * then next function will be invoked only if the promise is resolved.\n */\nexport const executePromiseChain = (fns, args, d?, i?) => {\n    d = d || defer();\n    i = i || 0;\n    if (i === 0) {\n        fns = filter(fns, function (fn) {\n            return !(isUndefined(fn) || isNull(fn));\n        });\n    }\n    if (fns && i < fns.length) {\n        try {\n            toPromise(fns[i].apply(undefined, args))\n                .then(() => executePromiseChain(fns, args, d, i + 1), d.reject);\n        } catch (e) {\n            d.reject(e);\n        }\n    } else {\n        d.resolve();\n    }\n    return d.promise;\n};\n\n/**\n * This function accepts two data sources and will check if both are same by comparing the unique id and\n * context in which datasources are present\n * @returns {*} boolean true/ false\n */\nexport const isDataSourceEqual = (d1, d2) => {\n    return d1.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) === d2.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) &&\n        isEqual(d1.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER), d2.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER));\n};\n\n/**\n * checks if the passed datasource context matches with passed context\n * @param ds, datasource having a context\n * @param ctx, context to compare with\n * @returns {boolean}\n */\nexport const validateDataSourceCtx = (ds, ctx) => {\n    return ds.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER) === ctx;\n};\n\n/**\n * This traverses the filterexpressions object recursively and process the bind string if any in the object\n * @param variable variable object\n * @param name name of the variable\n * @param context scope of the variable\n */\nexport const processFilterExpBindNode = (context, filterExpressions, variable?) => {\n    const destroyFn = context.registerDestroyListener ? context.registerDestroyListener.bind(context) : _noop;\n    const filter$ = new Subject();\n\n    const bindFilExpObj = (obj, targetNodeKey) => {\n       const listener = (newVal, oldVal) => {\n           if ((newVal === oldVal && isUndefined(newVal)) || (isUndefined(newVal) && !isUndefined(oldVal))) {\n                return;\n            }\n            // Skip cloning for blob column\n           if (!includes(['blob', 'file'], obj.type)) {\n                newVal = getClonedObject(newVal);\n            }\n            // backward compatibility: where we are allowing the user to bind complete object\n            if (obj.target === 'dataBinding') {\n                // remove the existing databinding element\n                filterExpressions.rules = [];\n                // now add all the returned values\n                forEach(newVal, function (value, target) {\n                    filterExpressions.rules.push({\n                        'target': target,\n                        'value': value,\n                        'matchMode': obj.matchMode || 'startignorecase',\n                        'required': false,\n                        'type': ''\n                    });\n                });\n            } else {\n                // setting value to the root node\n                obj[targetNodeKey] = newVal;\n            }\n            filter$.next({ filterExpressions, newVal });\n        }\n\n        if (stringStartsWith(obj[targetNodeKey], 'bind:')) {\n            // [Todo-CSP]: needs a check, where is this used\n            destroyFn(\n                $watch(obj[targetNodeKey].replace('bind:', ''), context, {}, variable ? variable.invokeOnFiltertExpressionChange.bind(variable, obj, targetNodeKey) : listener, undefined, false, {arrayType: includes(['in', 'notin'], obj.matchMode)})\n            );\n        }\n    };\n\n    const traverseFilterExpressions = expressions => {\n        if (expressions.rules) {\n            forEach(expressions.rules, (filExpObj, i) => {\n                if (filExpObj.rules) {\n                    traverseFilterExpressions(filExpObj);\n                } else {\n                    if (filExpObj.matchMode === 'between') {\n                        bindFilExpObj(filExpObj, 'secondvalue');\n                    }\n                    bindFilExpObj(filExpObj, 'value');\n                }\n            });\n        }\n    };\n    traverseFilterExpressions(filterExpressions);\n\n    return filter$;\n};\n\n// This method will set the given proto on the target\nexport const extendProto = (target, proto) => {\n    let _proto = Object.getPrototypeOf(target);\n    while (Object.getPrototypeOf(_proto).constructor !== Object) {\n        _proto = Object.getPrototypeOf(_proto);\n        // return if the prototype of created component and prototype of context are same\n        if (proto === _proto) {\n            return;\n        }\n    }\n    Object.setPrototypeOf(_proto, proto);\n};\n\nexport const removeExtraSlashes = function (url) {\n    const base64regex = /^data:image\\/([a-z]{2,});base64,/;\n    if (isString(url)) {\n        /*\n        * support for mobile apps having local file path url starting with file:/// and\n        * support for base64 format\n        * */\n        if (startsWith(url, 'file:///') || base64regex.test(url)) {\n            return url;\n        }\n        return url.replace(new RegExp('([^:]\\/)(\\/)+', 'g'), '$1');\n    }\n};\n\n$.cachedScript = (() => {\n    const inProgress = new Map();\n    const resolved = new Set();\n\n    const isInProgress = url => inProgress.has(url);\n    const isResolved = url => resolved.has(url);\n    const onLoad = url => {\n        resolved.add(url);\n        inProgress.get(url).resolve();\n        inProgress.delete(url);\n    };\n\n    const setInProgress = url => {\n        let resFn;\n        let rejFn;\n        const promise: any = new Promise((res, rej) => {\n            resFn = res;\n            rejFn = rej;\n        });\n\n        promise.resolve = resFn;\n        promise.reject = rejFn;\n\n        inProgress.set(url, promise);\n    };\n\n    return function (url) {\n        if (isResolved(url)) {\n            return Promise.resolve();\n        }\n\n        if (isInProgress(url)) {\n            return inProgress.get(url);\n        }\n\n        setInProgress(url);\n\n        const options = {\n            dataType: 'script',\n            cache: true,\n            url\n        };\n\n        $.ajax(options).done(() => onLoad(url));\n\n        return inProgress.get(url);\n    };\n})();\n\nconst DEFAULT_DISPLAY_FORMATS = {\n    DATE: 'yyyy-MM-dd',\n    TIME: 'hh:mm a',\n    TIMESTAMP: 'yyyy-MM-dd hh:mm:ss a',\n    DATETIME: 'yyyy-MM-dd hh:mm:ss a',\n};\n// This method returns the display date format for given type\nexport const getDisplayDateTimeFormat = type => {\n    return DEFAULT_DISPLAY_FORMATS[toUpper(type)];\n};\n\n// Generate for attribute on label and ID on input element, so that label elements are associated to form controls\nexport const addForIdAttributes = (element: HTMLElement) => {\n    const labelEl = element.querySelectorAll('label.control-label');\n    let inputEl = element.querySelectorAll('[focus-target]');\n    if (!inputEl.length) {\n        inputEl = element.querySelectorAll('input, select, textarea');\n    }\n    /*if there are only one input el and label El add id and for attribute*/\n    if (labelEl.length && inputEl.length) {\n        const widgetId = $(inputEl[0] as HTMLElement).closest('[widget-id]').attr('widget-id');\n        if (widgetId) {\n            setAttr(inputEl[0] as HTMLElement, 'id', widgetId);\n            setAttr(labelEl[0] as HTMLElement, 'for', widgetId);\n        }\n    }\n    /*Adding aria-labelledby to radioset, checkboxset widgets*/\n    const ulEl = element.querySelectorAll('ul');\n    if (labelEl.length && ulEl.length && (ulEl[0].getAttribute('role') === 'radiogroup' || ulEl[0].getAttribute('role') === 'group')) {\n        const widgetId = 'wm-group-label-' + generateGUId();\n        setAttr(ulEl[0] as HTMLElement, 'aria-labelledby', widgetId);\n        setAttr(labelEl[0] as HTMLElement, 'id', widgetId);\n    }\n};\n\n/**\n * This method is used to adjust the container position\n * For example: 1. When datepicker control placed closed to the screen left edges, it is going to negative values which is  cutting the container.\n * To Fix the container overlapping issue changing the contrainer left translation to 0\n * @param containerElem - picker/dropdown container element(jquery)\n * @param parentElem - widget native element\n * @param ref - scope of particular library directive\n * @param ele - Child element(jquery). For some of the widgets(time, search) containerElem doesn't have height. The inner element(dropdown-menu) has height so passing it as optional.\n */\nexport const adjustContainerPosition = (containerElem, parentElem, ref, ele?) => {\n    const zoneRef = ref._ngZone || ref.ngZone;\n    zoneRef.onStable.subscribe(() => {\n        const containerEleTransformations = getWebkitTraslationMatrix(containerElem);\n        if (containerEleTransformations.m41 < 0) {\n             containerEleTransformations.m41 = 0;\n         } else {\n             return;\n         }\n         setTranslation3dPosition(containerElem, containerEleTransformations);\n     });\n   };\n\n\n/**\n * This method is used to adjust the container position\n * For example: 1. When datepicker control placed closed to the screen right edges, it is going to out of the viewport values which is  cutting the container.\n * @param containerElem  picker/dropdown container element(jquery)\n * @param parentElem widget native element\n * @param ref  scope of particular library directive\n * @param ele Child element(jquery). For some of the widgets(time, search) containerElem doesn't have height. The inner element(dropdown-menu) has height so passing it as optional.\n */\n   export const adjustContainerRightEdges = (containerElem, parentElem, ref, ele?) => {\n    const containerWidth = ele ? parseInt(ele.css('width')) : parseInt(containerElem.css('width'));\n        const viewPortWidth = $(window).width() + window.scrollX;\n        const parentDimesion = parentElem.getBoundingClientRect();\n        const parentRight = parentDimesion.right + window.scrollX;\n        let newLeft;\n        const zoneRef = ref._ngZone || ref.ngZone;\n        zoneRef.onStable.subscribe(() => {\n            const containerEleTransformations = getWebkitTraslationMatrix(containerElem);\n\n            if (viewPortWidth - (parentRight + parentDimesion.width) < containerWidth) {\n                newLeft = parentRight - containerWidth;\n                if (newLeft < 0) {\n                    newLeft = 0;\n                }\n                containerEleTransformations.m41 = newLeft;\n            } else {\n                return;\n            }\n            setTranslation3dPosition(containerElem, containerEleTransformations);\n        });\n   };\n\n  /**\n   * For given element set the traslation\n   * @param containerElem tanslated element\n   *\n   * @param containerEleTransformations translate matrix positions\n   */\n   export const setTranslation3dPosition = (containerElem, containerEleTransformations) => {\n        const translatePosition = 'translate3d(' + containerEleTransformations.m41 + 'px, ' + containerEleTransformations.m42 + 'px, 0px)';\n        containerElem[0].style.webkitTransform = translatePosition;\n        containerElem[0].style.MozTransform = translatePosition;\n        containerElem[0].style.msTransform = translatePosition;\n        containerElem[0].style.OTransform = translatePosition;\n        containerElem[0].style.transform = translatePosition;\n   };\n\n   /**\n    *\n    * @param containerElem elemet for the WebKitCSSMatrix\n    */\n    export const getWebkitTraslationMatrix = (containerElem) => {\n        if (typeof WebKitCSSMatrix === 'undefined') {\n            return new MSCSSMatrix(window.getComputedStyle(containerElem[0]).transform);\n        }\n        return new WebKitCSSMatrix(window.getComputedStyle(containerElem[0]).webkitTransform);\n    }\n\n// close all the popovers.\nexport const closePopover = (element) => {\n    if (!element.closest('.app-popover').length) {\n        const popoverElements = document.querySelectorAll('.app-popover-wrapper');\n        forEach(popoverElements, (ele) => {\n            if (ele.widget.isOpen) {\n                ele.widget.isOpen = false;\n            }\n        });\n    }\n};\n\n/**\n * This method is to trigger change detection in the app\n * This is exposed for the end user developer of WM app\n * This is the alternative for $rs.$safeApply() in AngularJS\n * See $appDigest in utils for more info\n */\nexport const detectChanges = $appDigest;\n\n/**\n * This method is to trigger the action/link of menu/nav item\n * @param scope - scope of the widget\n * @param item - item object\n */\nexport const triggerItemAction = (scope, item) => {\n    let itemLink = item.link;\n    const itemAction = item.action;\n    const linkTarget = item.target;\n    if (itemAction) {\n        if (!scope.itemActionFn) {\n            //[Todo-CSP]: This will not work as function will be dynamic\n            scope.itemActionFn = $parseEvent(itemAction);\n        }\n\n        scope.itemActionFn(scope.userDefinedExecutionContext, Object.create(item));\n    }\n    if (itemLink) {\n        if (itemLink.startsWith('#/') && (!linkTarget || linkTarget === '_self')) {\n            const queryParams = getUrlParams(itemLink);\n            itemLink = getRouteNameFromLink(itemLink);\n            const router = get(scope, 'route') || get(scope, 'menuRef.route');\n            router.navigate([itemLink], { queryParams });\n        } else {\n            openLink(itemLink, linkTarget);\n        }\n    }\n};\n\n/**\n * This method is to get datsource from the expression\n * @param expr - expression of the dataset\n * @param scope - scope of the widget\n * Example1: expr - \"Variables.staticVar1.dataSet.details[$i].addresses\" then the method will return datasource as Variables.staticVar1\n * Example2: expr - \"Widgets.list1.currentItem.addresses\" and list1 is bound to \"Variables.staticVar1.dataSet.details\" then the method will return datasource as Variables.staticVar1\n */\nexport const getDatasourceFromExpr = (expr, scope) => {\n    const isBoundToVariable = startsWith(expr, 'Variables.');\n    const isBoundToWidget = startsWith(expr, 'Widgets.');\n\n    const parts = expr.split('.');\n    if (isBoundToVariable) {\n        return get(scope.viewParent.Variables, parts[1]);\n    }\n\n    if (isBoundToWidget) {\n        const widgetScope = get(scope.viewParent.Widgets, parts[1]);\n        const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');\n        let widgetBoundExpression;\n        widgetBoundExpression = (!widgetScope.datasource && widgetDatasetBoundExpr) ? widgetDatasetBoundExpr : widgetScope.binddataset;\n        return getDatasourceFromExpr(widgetBoundExpression, widgetScope);\n    }\n};\n\n/**\n * This method is to get dataset bound expression from list currentitem expression\n * @param expr - bound dataset expression\n * @param scope - scope of the widget\n * Example1: expr - \"Widgets.list1.currentItem.details\" and list1 is bound to \"Variables.staticVar1.dataSet\" then it returns expression as \"Variables.staticVar1.dataSet[$i].details\"\n */\nexport const extractCurrentItemExpr = (expr, scope) => {\n    const currentItemRegEx = /^Widgets\\..*\\.currentItem/g;\n    if (currentItemRegEx.test(expr)) {\n        const parts = expr.split('.');\n        const widgetScope = get(scope.viewParent.Widgets, parts[1]);\n        const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');\n        if (!widgetScope.datasource && widgetDatasetBoundExpr) {\n            expr = expr.replace(/^Widgets\\..*\\.currentItem/g, `${widgetDatasetBoundExpr}[$i]`);\n            return extractCurrentItemExpr(expr, scope);\n        } else {\n            expr = expr.replace(/^Widgets\\..*\\.currentItem/g, `${widgetScope.binddataset}[$i]`);\n        }\n    }\n    return expr;\n};\n\n// this will add the html tag to the widget to scope the css to the page.\nexport const findRootContainer = ($el) => {\n    let root = $el.closest('.app-prefab');\n    if (!root.length) {\n        root = $el.closest('.app-partial');\n    }\n    if(!root.length) {\n        root = $el.closest('.app-spa-page');\n    }\n    if (!root.length) {\n        root = $el.closest('.app-page');\n    }\n    return root.length && root.parent()[0].tagName;\n};\n\nexport const VALIDATOR = {\n    REQUIRED: 'required',\n    MAXCHARS: 'maxchars',\n    MINVALUE: 'minvalue',\n    MAXVALUE: 'maxvalue',\n    REGEXP: 'regexp',\n    MINDATE: 'mindate',\n    MAXDATE: 'maxdate',\n    MINTIME: 'mintime',\n    MAXTIME: 'maxtime',\n    EXCLUDEDATES: 'excludedates',\n    EXCLUDEDAYS: 'excludedays'\n};\n\nexport const transformFileURI = (url) => {\n    return url;\n};\n\nexport const appendScriptToHead = (callback) =>{\n\n    const scriptele = document.createElement('script');\n    scriptele.onload = () => {\n     callback(WM_CUSTOM_FORMATTERS);\n    };\n    scriptele.onerror = err => {\n        console.warn('Error while loading the file ' + scriptele.src + '\\n' + err);\n    };\n    scriptele.type = 'text/javascript';\n    scriptele.src = './extensions/formatters.js';\n    document.head.appendChild(scriptele);\n};\n\nexport const getAppSetting = (key, defaultValue) => {\n    return (_WM_APP_PROPERTIES.extra_settings && get(_WM_APP_PROPERTIES.extra_settings, key)) || defaultValue;\n};\n\n/* this function sets the itemclass depending on itemsperrow.\n   * if itemsperrow is 2 for large device, then itemclass is 'col-xs-1 col-sm-1 col-lg-2'\n   * if itemsperrow is 'lg-3' then itemclass is 'col-lg-3'\n*/\nexport const setListClass = (scope) => {\n    let temp = '';\n    if (scope.itemsperrow) {\n        if(scope.itemsperrow === \"auto\") {\n            scope.itemsPerRowClass = \"\";\n        } else if (isNaN(parseInt(scope.itemsperrow, 10))) {\n            // handling itemsperrow containing string of classes\n            split(scope.itemsperrow, ' ').forEach((cls: string) => {\n                const keys = split(cls, '-');\n                cls = `${keys[0]}-${(12 / parseInt(keys[1], 10))}`;\n                temp += ` col-${cls}`;\n            });\n            scope.itemsPerRowClass = temp.trim();\n        } else {\n            // handling itemsperrow having integer value.\n            scope.itemsPerRowClass = `col-xs-${(12 / parseInt(scope.itemsperrow, 10))}`;\n        }\n    } else { // If itemsperrow is not specified make it full width\n        scope.itemsPerRowClass = 'col-xs-12';\n    }\n};\n\nexport const findParent = (lView: any, viewParentApp?: any) => {\n    let parent = findViewParent(lView);\n    return parent ? parent : viewParentApp;\n}\n\nexport const findViewParent = (lView: any) => {\n    return lView[15] ? lView[15][8] : lView[15];\n    /*if(lView[3] === null) {\n        return lView[8];\n    }\n    let parentlView = lView[3];\n    if(typeof lView[1] === \"boolean\") {\n        return findViewParent(parentlView);\n    }\n    let componentType = lView[1][\"type\"];\n    if(componentType === 0 || componentType === 1) {\n        let p = lView[8];\n        // ts-ignore\n        if(p.hasOwnProperty(\"isDialogComponent\") || p.hasOwnProperty(\"isContainerDirective\")) {\n            return findViewParent(parentlView);\n        } else {\n            return p;\n        }\n    } else {\n        return findViewParent(parentlView);\n    }*/\n}\n\nexport const getFontConfig = () => {\n    return _WM_APP_PROPERTIES.fontConfig || getPreviewProperties();\n}\n\nexport const adjustVerticalPosition = (containerElem, parentElem: HTMLElement, ref, ele?): void => {\n    const zoneRef = ref._ngZone || ref.ngZone;\n\n    zoneRef.onStable.subscribe(() => {\n            const containerHeight = ele\n                ? parseInt(ele.css('height'), 10)\n                : parseInt(containerElem.css('height'), 10);\n\n            const rect = parentElem.getBoundingClientRect();\n            const viewportHeight = window.innerHeight;\n\n            const spaceBelow = viewportHeight - rect.bottom;\n            const spaceAbove = rect.top;\n\n            if (spaceBelow < containerHeight && spaceAbove >= containerHeight) {\n                const matrix = getWebkitTraslationMatrix(containerElem);\n\n                matrix.m42 = matrix.m42 - containerHeight - rect.height;\n\n                if (matrix.m42 < 0) {\n                    matrix.m42 = 0;\n                }\n\n                setTranslation3dPosition(containerElem, matrix);\n            }\n        });\n};\n/*export const getParent = (parent: any) => {\n    if(parent.hasOwnProperty(\"isDynamicComponent\") || parent.hasOwnProperty(\"isPageComponent\")) {\n        return parent\n    } else{\n        return parent.viewParent ? getParent(parent.viewParent) : parent;\n    }\n\n}*/\n","import { Subject } from 'rxjs';\n\nimport { isObject, noop } from './utils';\n\nexport class EventNotifier {\n\n    private _subject = new Subject();\n    private _isInitialized = false;\n    private _eventsBeforeInit = [];\n\n    constructor(start = true) {\n        if (start) {\n            this.start();\n        }\n    }\n\n    /**\n     * A event can be fired, but will be sent to subscribers only after exchange is started.\n     *\n     * @param {string} eventName\n     * @param data\n     */\n    public notify(eventName: string, ...data: Array<any>) {\n        if (this._isInitialized) {\n            this._subject.next({\n                name: eventName,\n                data: data\n            });\n        } else {\n            this._eventsBeforeInit.push({\n                name: eventName,\n                data: data\n            });\n        }\n    }\n\n    /**\n     * starts the exchange and send the pending events to subscribers.\n     */\n    public start() {\n        if (!this._isInitialized) {\n            this._isInitialized = true;\n            this._eventsBeforeInit.forEach((event) => this._subject.next(event));\n        }\n    }\n\n    /**\n     * upon subscription, method to cancel subscription is returned.\n     *\n     * @param eventName\n     * @param {(data: any) => void} callback\n     * @returns {() => void}\n     */\n    public subscribe(eventName, callback: (...data: Array<any>) => void): () => void {\n        let eventListener;\n        if (eventName && callback) {\n            eventListener = this._subject\n                .subscribe((event: any) => {\n                    if (event && isObject(event) && event.name === eventName) {\n                        callback.apply(undefined, event.data);\n                    }\n                });\n            return () => {\n                eventListener.unsubscribe();\n            };\n        }\n        return noop;\n    }\n\n    public destroy(): void {\n        this._subject.next(null);  // optional\n        this._subject.complete();  // clears all observers\n        this._isInitialized = false;\n        this._eventsBeforeInit = [];\n    }    \n}\n","import {Injectable, OnDestroy} from '@angular/core';\nimport {EventNotifier} from '../utils/event-notifier';\nimport {isAndroid, isAndroidTablet, isIos} from '../utils/utils';\nimport {get} from \"lodash-es\";\n\nlet MINIMUM_MOBILE_WIDTH = 480;\nlet MINIMUM_TAB_WIDTH = 768;\nlet MINIMUM_LARGE_SCREEN_WIDTH = 1200;\n\nconst enum SCREEN_TYPE {\n    MOBILE,\n    TABLET,\n    LARGE_SCREEN_DEVICES\n}\n\nexport class IViewportService {\n    notify: (eventname: ViewportEvent, options?: Array<any>) => void;\n    subscribe: (eventname: ViewportEvent, callback: (data: any) => void) => void;\n}\n\nexport const enum ViewportEvent {\n    ORIENTATION_CHANGE = 'orientationchange',\n    RESIZE = 'resize'\n}\n\n@Injectable({providedIn: 'root'})\nexport class Viewport implements IViewportService, OnDestroy {\n    public orientation = {\n        isPortrait: false,\n        isLandscape: false\n    };\n    public isMobileType = false;\n    public isTabletType = false;\n    private type;\n    public _eventNotifier = new EventNotifier(true);\n    private screenWidth;\n    private screenHeight;\n    private selectedViewPort: any;\n    private boundResizeFn: (event: Event) => void; // MEMORY LEAK FIX: Store bound function\n    private mediaQuery: MediaQueryList; // MEMORY LEAK FIX: Store media query reference for cleanup\n    private boundOrientationChange: (event: MediaQueryListEvent) => void; // MEMORY LEAK FIX: Store bound function\n\n    constructor() {\n        this.setScreenType();\n\n        // MEMORY LEAK FIX: Store bound function reference for proper removal\n        this.boundResizeFn = this.resizeFn.bind(this);\n        window.addEventListener(ViewportEvent.RESIZE, this.boundResizeFn);\n\n        this.mediaQuery = window.matchMedia('(orientation: portrait)');\n        if (this.mediaQuery.matches) {\n            this.orientation.isPortrait = true;\n        } else {\n            this.orientation.isLandscape = true;\n        }\n\n        // Add a media query change listener\n        // addEventListener is not supported ios browser\n        if (this.mediaQuery.addEventListener) {\n            // MEMORY LEAK FIX: Store bound function reference for proper removal\n            this.boundOrientationChange = ($event) => this.orientationChange($event, !$event.matches);\n            this.mediaQuery.addEventListener('change', this.boundOrientationChange);\n        }\n    }\n\n    update(selectedViewPort: object) {\n        this.selectedViewPort = selectedViewPort;\n        this.setScreenType();\n    }\n\n    private orientationChange($event, isLandscape) {\n        if (isLandscape !== this.orientation.isLandscape) {\n            this.orientation.isPortrait = !isLandscape;\n            this.orientation.isLandscape = isLandscape;\n            this.notify(ViewportEvent.ORIENTATION_CHANGE, { $event, data: {isPortrait: !isLandscape, isLandscape: isLandscape} });\n        }\n    }\n\n    private resizeFn($event) {\n        const $el = document.querySelector('.wm-app');\n        if (!$el) {\n            return;\n        }\n        this.setScreenType();\n        this.orientationChange($event, this.screenWidth >= this.screenHeight);\n        this.notify(ViewportEvent.RESIZE, {$event, data: {screenWidth: this.screenWidth, screenHeight: this.screenHeight}});\n    }\n\n    public subscribe(eventName: string, callback: (data: any) => void): () => void {\n        return this._eventNotifier.subscribe(eventName, callback);\n    }\n\n    public notify(eventName: string, ...data: Array<any>) {\n        this._eventNotifier.notify(eventName, ...data);\n    }\n\n    private setScreenType() {\n        const $el = document.querySelector('.wm-app');\n        this.screenWidth = $el.clientWidth;\n        this.screenHeight = $el.clientHeight;\n\n        // const minValue = this.screenWidth < this.screenHeight ? this.screenWidth : this.screenHeight;\n        // const maxValue = this.screenWidth > this.screenHeight ? this.screenWidth : this.screenHeight;\n\n        this.isTabletType = false;\n        this.isMobileType = false;\n\n        if (get(this.selectedViewPort, 'deviceCategory')) {\n            const deviceCategory = (this.selectedViewPort as any).deviceCategory;\n            if (deviceCategory === 'Tab') {\n                this.isTabletType = true;\n            } else if (deviceCategory === 'Smartphone') {\n                this.isMobileType = true;\n            }\n        } else {\n             MINIMUM_MOBILE_WIDTH = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--screen-xs')) || 480;\n             MINIMUM_TAB_WIDTH = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--screen-sm')) || 768;\n             MINIMUM_LARGE_SCREEN_WIDTH = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--screen-lg')) || 1200;\n            if (this.screenWidth >= MINIMUM_LARGE_SCREEN_WIDTH) {\n                this.isTabletType = isAndroid() || isIos() || isAndroidTablet();\n                this.isMobileType = false;\n            } else if (this.screenWidth >= MINIMUM_TAB_WIDTH) {\n                this.type = SCREEN_TYPE.TABLET;\n                this.isTabletType = true;\n            } else {\n                this.type = SCREEN_TYPE.MOBILE;\n                this.isMobileType = true;\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this._eventNotifier.destroy();\n        \n        // MEMORY LEAK FIX: Remove resize event listener using stored bound function reference\n        if (this.boundResizeFn) {\n            window.removeEventListener('resize', this.boundResizeFn);\n            this.boundResizeFn = null;\n        }\n\n        // MEMORY LEAK FIX: Remove media query orientation change listener\n        if (this.mediaQuery && this.boundOrientationChange && this.mediaQuery.removeEventListener) {\n            this.mediaQuery.removeEventListener('change', this.boundOrientationChange);\n            this.boundOrientationChange = null;\n        }\n        this.mediaQuery = null;\n    }\n}\n","import { Injectable} from '@angular/core';\nimport { VALIDATOR } from '../utils/utils';\n\n@Injectable({providedIn: 'root'})\nexport class ConstantService {\n    MATCH_MODES = {\n        STARTS_WITH_IGNORE_CASE: 'startignorecase',\n        STARTS_WITH: 'start',\n        ENDS_WITH_IGNORE_CASE: 'endignorecase',\n        ENDS_WITH: 'end',\n        CONTAINS: 'anywhere',\n        CONTAINS_IGNORE_CASE: 'anywhereignorecase',\n        IS_EQUAL_WITH_IGNORE_CASE: 'exactignorecase',\n        IS_EQUAL: 'exact'\n    };\n\n    VALIDATOR = VALIDATOR;\n}\n","import { Injectable } from '@angular/core';\n\nimport * as Utils from '../utils/utils';\nimport {assign} from \"lodash-es\";\n\n@Injectable({providedIn: 'root'})\nexport class UtilsService {\n    constructor() {\n        assign(this, Utils);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {assign} from \"lodash-es\";\n\n@Injectable({providedIn: 'root'})\nexport class FieldTypeService {\n    constructor() {\n        assign(this, {\n            INTEGER : 'integer',\n            BIG_INTEGER : 'big_integer',\n            SHORT : 'short',\n            FLOAT : 'float',\n            BIG_DECIMAL : 'big_decimal',\n            DOUBLE : 'double',\n            LONG : 'long',\n            BYTE : 'byte',\n            STRING : 'string',\n            CHARACTER : 'character',\n            TEXT : 'text',\n            DATE : 'date',\n            TIME : 'time',\n            TIMESTAMP : 'timestamp',\n            DATETIME : 'datetime',\n            BOOLEAN: 'boolean',\n            LIST : 'list',\n            CLOB : 'clob',\n            BLOB : 'blob'\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {assign} from \"lodash-es\";\n\n@Injectable({providedIn: 'root'})\nexport class FieldWidgetService {\n    constructor() {\n        assign(this, {\n            TEXT : 'text',\n            NUMBER : 'number',\n            TEXTAREA : 'textarea',\n            PASSWORD : 'password',\n            CHECKBOX : 'checkbox',\n            SLIDER : 'slider',\n            RICHTEXT : 'richtext',\n            CURRENCY : 'currency',\n            SWITCH : 'switch',\n            SELECT : 'select',\n            CHECKBOXSET : 'checkboxset',\n            RADIOSET : 'radioset',\n            DATE : 'date',\n            TIME : 'time',\n            TIMESTAMP : 'timestamp',\n            UPLOAD : 'upload',\n            RATING : 'rating',\n            DATETIME : 'datetime',\n            AUTOCOMPLETE : 'autocomplete',\n            CHIPS : 'chips',\n            COLORPICKER : 'colorpicker'\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { _WM_APP_PROJECT } from '../utils/utils';\n\ninterface Scripts {\n    name: string;\n    src: string;\n}\n\nexport const ScriptStore: Scripts[] = [];\n\ndeclare var document: any;\n\n@Injectable({providedIn: 'root'})\nexport class ScriptLoaderService {\n\n    private scripts: any = {};\n\n    constructor(private http: HttpClient) {\n        ScriptStore.forEach((script: any) => {\n            this.scripts[script.name] = {\n                loaded: false,\n                src: script.src\n            };\n        });\n    }\n\n    load(...scripts: string[]): Promise<any> {\n        if (scripts && scripts.length) {\n            return Promise.all(scripts.map( s => {\n                return this.loadScript(s);\n            }));\n        }\n        return Promise.resolve();\n    }\n\n    private loadScript(name: string) {\n        return new Promise((resolve, reject) => {\n            if (this.scripts[name] && this.scripts[name].loaded) {\n                resolve({ script: name, loaded: true });\n                return;\n            } else if (!this.scripts[name]) {\n                this.scripts[name] = {\n                    loaded: false,\n                    src: name\n                };\n            }\n            //load script\n            let script = document.createElement('script');\n            script.type = 'text/javascript';\n            script.async = false;\n            const src = this.scripts[name].src;\n            if (src.startsWith(\"http\")) {\n                script.src = src;\n            } else {\n                script.src = (_WM_APP_PROJECT.cdnUrl || _WM_APP_PROJECT.ngDest) + src;\n            }\n            if (script.readyState) {  //IE\n                script.onreadystatechange = () => {\n                    if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\n                        script.onreadystatechange = null;\n                        this.scripts[name].loaded = true;\n                        resolve({script: name, loaded: true });\n                    }\n                };\n            } else {  //Others\n                script.onload = () => {\n                    this.scripts[name].loaded = true;\n                    resolve({script: name, loaded: true });\n                };\n            }\n            script.onerror = (error: any) => resolve({script: name, loaded: false, status: 'Loaded'});\n            document.getElementsByTagName('head')[0].appendChild(script);\n        });\n    }\n\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({ providedIn: 'root' })\nexport class CustomPipeManager {\n    private customPipes: any = new Map();\n\n    public setCustomPipe(key: string, value: any) {\n        this.customPipes.set(key, value);\n    }\n\n    public getCustomPipe(key: string) {\n        return this.customPipes.get(key);\n    }\n\n    public hasCustomPipe(key: string): boolean {\n        return this.customPipes.has(key);\n    }\n\n\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { getFontConfig, loadStyleSheets } from \"../utils/utils\";\n\n@Injectable({providedIn: 'root'})\nexport class CustomIconsLoaderService {\n    // private http = inject(HttpClient);\n    load() {\n            const { default: fontConfig } = getFontConfig();\n        const cssPaths = (fontConfig?.fonts ?? [])\n                .filter(font => !!font.csspath)\n                .map(font => font.csspath);\n\n        loadStyleSheets(cssPaths);\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport {clone, get, includes, isArray, isEmpty, isObject, merge} from \"lodash-es\";\n\n@Injectable({ providedIn: 'root' })\nexport class StatePersistence {\n    private HISTORY_HANDLER = 'replace';\n    private HISTORY_HANDLER_TYPES = {'push': 'pushState', 'replace': 'replaceState'};\n    private WIDGET_STATE_KEY = 'ws';\n\n    /**\n     * Sets the passed value as the History handler if it exists in the History_Handler_Types object\n     * @param val\n     */\n    public setHistoryHandler(val) {\n        if (Object.keys(this.HISTORY_HANDLER_TYPES).indexOf(val) > -1) {\n            this.HISTORY_HANDLER = val;\n        }\n    }\n\n    /**\n     * Constructs a unique key for setting state param by using the viewParent property of a widget\n     * so that name conflicts are avoided when the same widget name is\n     * present inside a Page, a Partial within a Page or a Prefab within a Page and so on.\n     * E.g.:\n     * if a page has a tabs widget with the name tabs1, a partial Partial1(inside container1) inclusion within which\n     * there is a tabs with name tabs1 and a prefab MyPrefab inclusion with a tabs widget with the name tabs1,\n     * getNestedPath will return tabs1, container1.Partial1.tabs1 and MyPrefab1.MyPrefab.tabs1 respectively.\n     * @param viewParent\n     * @param widgetName\n     * @param currentOutput\n     */\n    public getNestedPath(viewParent: any, widgetName: string, currentOutput?: string) {\n        let out = currentOutput || widgetName;\n        if (viewParent && (viewParent.prefabName || viewParent.partialName)) {\n            out = out.length > 0 ? out + '.' + (viewParent.prefabName || viewParent.partialName) : (viewParent.prefabName || viewParent.partialName);\n            // same partial/prefab can be dropped multiple times in a page. Appending container's name for uniqueness.\n            out = out + '.' + viewParent.containerWidget.name;\n            return this.getNestedPath(viewParent.containerWidget.viewParent, widgetName, out);\n        }\n        return out.split('.').reverse().join('.');\n    }\n\n    /**\n     * Decodes and parses the state information and returns the parsed state object\n     * @param mode : optional parameter if the widget/variable uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public getStateInformation(mode) {\n        let parsedStateInfo, stateInfo;\n        if (mode.toLowerCase() === 'url') {\n            const decodedURI = decodeURIComponent(window.location.href);\n            stateInfo = decodedURI.match(/(wm_state=).*?(&|$)/);\n            if (stateInfo) {\n                stateInfo = stateInfo[0].replace('wm_state=', '');\n                parsedStateInfo = this.uriToJson(stateInfo);\n                return parsedStateInfo;\n            }\n        } else if (mode.toLowerCase() === 'localstorage') {\n            stateInfo = localStorage.getItem(window.location.pathname.replace(/\\//g, '') + '_wm_state');\n        } else if (mode.toLowerCase() === 'sessionstorage') {\n            stateInfo = sessionStorage.getItem(window.location.pathname.replace(/\\//g, '') + '_wm_state');\n        }\n        if (stateInfo) {\n            parsedStateInfo = JSON.parse(stateInfo);\n            return parsedStateInfo;\n        }\n\n        return;\n    }\n\n    /**\n     * Checks if the passed widget instance has any state information available or not\n     * @param widget\n     * @param mode : optional parameter if the widget uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public getWidgetState(widget, mode?) {\n        mode = mode || this.computeMode(widget.statehandler);\n        if (!mode) {\n            return;\n        }\n        let parsedStateInfo = this.getStateInformation(mode);\n        if (parsedStateInfo && widget  && widget.getAppInstance().activePageName && (mode.toLowerCase() === 'localstorage' || mode.toLowerCase() === 'sessionstorage')) {\n            parsedStateInfo = parsedStateInfo[widget.getAppInstance().activePageName];\n        }\n        if (get(parsedStateInfo, this.WIDGET_STATE_KEY)) {\n            const stateKey = this.getNestedPath(widget.viewParent, widget.getWidget().name);\n            return parsedStateInfo[this.WIDGET_STATE_KEY][stateKey];\n        }\n        return;\n    }\n\n    public computeMode(widgetStateHandler) {\n        if (!widgetStateHandler) {\n            return 'url';\n        } else if (widgetStateHandler && widgetStateHandler.toLowerCase() === 'none') {\n            return;\n        } else {\n            return widgetStateHandler.toLowerCase();\n        }\n    }\n\n    /**\n     * Sets the passed value to the state information by using the passed widget instance\n     * @param widget\n     * @param value\n     * @param mode : optional parameter if the widget uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public setWidgetState(widget, value, mode?) {\n        const stateKey = this.getNestedPath(widget.viewParent, widget.getWidget().name);\n        mode = mode || this.computeMode(widget.statehandler);\n        if (!mode) {\n            return;\n        }\n        this.setStateParams(this.WIDGET_STATE_KEY, stateKey, value, mode, widget);\n    }\n\n    /**\n     * Removes the passed widget’s state information from the State Object. If a key is passed, then only that\n     * particular entry will be removed, not any other entries for that widget.\n     * @param widget\n     * @param key\n     * @param mode : optional parameter if the widget uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public removeWidgetState(widget, key?, mode?) {\n        mode = mode || this.computeMode(widget.statehandler);\n        if (!mode) {\n            return;\n        }\n        const stateKey = this.getNestedPath(widget.viewParent, widget.getWidget().name);\n        this.removeStateParam(this.WIDGET_STATE_KEY, stateKey, key, mode, widget);\n    }\n\n    /**\n     * Sets the passed value to the state information by using the passed variable name as key\n     * @param variableName\n     * @param value\n     * @param mode : optional parameter if the variable uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public setStateVariable(variableName, value, mode?) {\n        mode = mode || this.computeMode(mode);\n        if (!mode) {\n            return;\n        }\n        this.setStateParams('', variableName, value, mode);\n    }\n\n    /**\n     * Checks if the passed variable name has any state information available in the url or not\n     * @param variableName\n     * @param mode : optional parameter if the variable uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public getStateVariable(variableName: string, mode?) {\n        mode = mode || this.computeMode(mode);\n        if (!mode) {\n            return;\n        }\n        const parsedStateInfo = this.getStateInformation(mode);\n        if (parsedStateInfo) {\n            return parsedStateInfo[variableName];\n        }\n        return;\n    }\n\n    /**\n     * Removes the passed variable’s state information from the URL.\n     * @param variableName\n     * @param mode : optional parameter if the widget uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public removeStateVariable(variableName, mode?) {\n        mode = mode || this.computeMode(mode);\n        if (!mode) {\n            return;\n        }\n        this.removeStateParam('', variableName, null, mode);\n    }\n\n    /**\n     * Sets the passed state information in the url by parsing the passed value and checking\n     * its type. If its an array type, then the passed values will be pushed into an array and then set in the state\n     * E.g.\n     * Current state information is like :\n     {\n       \"widget_state\": {\n           \"Table1\": {\n               \"selectedItem\": [\n                 {\n                   \"page\": \"1\",\n                   \"index\": \"1\"\n                 }\n               ],\n           \"pagination\": \"1\"\n         }\n         }\n     }\n     * Input value will be like:\n     {\n       \"selectedItem\": [\n         {\n           \"page\": \"1\",\n           \"index\": \"2\"\n         }\n       ]\n     }\n\n     * This parsing logic will convert it to the following\n     {\n       \"widget_state\": {\n           \"Table1\": {\n               \"selectedItem\": [\n                 {\n                   \"page\": \"1\",\n                   \"index\": \"1\"\n                 },\n                 {\n                   \"page\": \"1\",\n                   \"index\": \"2\"\n                 }\n               ],\n           \"pagination\": \"1\"\n         }\n         }\n     }\n     * Based on how the HISTORY_HANDLER is configured, the updated url will either replace the existing url or\n     * push a new state in the url so that back button may track each update to the state.\n     * @param stateParam\n     * @param key\n     * @param val\n     * @param mode : optional parameter if the widget/variable uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public setStateParams(stateParam: string, key: string, val: any, mode?, widget?) {\n        let url = '', parsedObj;\n        const stateObj = this.getStateInformation(mode);\n        if (widget && stateObj && widget.getAppInstance().activePageName && (mode.toLowerCase() === 'localstorage' || mode.toLowerCase() === 'sessionstorage')) {\n            parsedObj = stateObj[widget.getAppInstance().activePageName];\n        } else {\n            parsedObj = clone(stateObj);\n        }\n        if (stateParam) {\n            if (parsedObj && !parsedObj[stateParam]) {\n                parsedObj[stateParam] = {};\n            } else if (!parsedObj) {\n                parsedObj = {[stateParam]: {}};\n            }\n            if (isObject(val) && !isArray(val)) {\n                parsedObj[stateParam][key] = parsedObj[stateParam][key] || {};\n                merge(parsedObj[stateParam][key], val);\n            } else {\n                parsedObj[stateParam][key] = val;\n            }\n        } else {\n            if (parsedObj && !parsedObj[key]) {\n                parsedObj[key] = {};\n            } else if (!parsedObj) {\n                parsedObj = {[key]: {}};\n            }\n            if (isObject(val) && !isArray(val)) {\n                parsedObj[key] = parsedObj[key] || {};\n                merge(parsedObj[key], val);\n            } else {\n                parsedObj[key] = val;\n            }\n        }\n        // for Local and Session Storage, wrap state object inside page name so that widget name conflicts don't arise between pages.\n        if (widget && widget.getAppInstance().activePageName && (mode.toLowerCase() === 'localstorage' || mode.toLowerCase() === 'sessionstorage')) {\n            if (stateObj) {\n                stateObj[widget.getAppInstance().activePageName] = parsedObj;\n                parsedObj = stateObj;\n            } else {\n                parsedObj = {[widget.getAppInstance().activePageName]: parsedObj};\n            }\n\n        }\n\n\n        let decodedURI = decodeURIComponent(window.location.href);\n        if (decodedURI.indexOf('?') < 0) {\n            decodedURI = decodedURI + '?wm_state=';\n        } else if (decodedURI.indexOf('wm_state') < 0) {\n            decodedURI = decodedURI + '&wm_state=';\n        }\n        url = decodedURI.replace(/(wm_state=).*?(&|$)/ ,'$1' + this.jsonToUri(parsedObj) + '$2');\n\n        if (mode.toLowerCase() === 'localstorage') {\n            localStorage.setItem(window.location.pathname.replace(/\\//g, '') + '_wm_state', JSON.stringify(parsedObj));\n            return;\n        } else if (mode.toLowerCase() === 'sessionstorage') {\n            sessionStorage.setItem(window.location.pathname.replace(/\\//g, '') + '_wm_state', JSON.stringify(parsedObj));\n            return;\n        }\n\n        if (decodeURIComponent(window.location.href) === decodeURIComponent(url)) {\n            return;\n        }\n        if (this.HISTORY_HANDLER === 'push') {\n            window.history.pushState({ path: url }, '', url);\n        } else if (this.HISTORY_HANDLER === 'replace') {\n            window.history.replaceState({ path: url }, '', url);\n        }\n    }\n\n    /**\n     * Removes the passed state information from the url\n     * E.g.\n     * Current state information is like :\n     {\n       \"widget_state\": {\n           \"Table1\": {\n               \"selectedItem\": [\n                 {\n                   \"page\": \"1\",\n                   \"index\": \"1\"\n                 },\n                 {\n                 \"page\": \"2\",\n                 \"index\": \"1\"\n                 }\n               ],\n           \"pagination\": \"1\"\n         }\n         }\n     }\n     * Input values will be like:\n     subParam : 'selectedItem'\n\n     * This method will convert it to the following\n     {\n       \"widget_state\": {\n           \"Table1\": {\n             \"pagination\": \"1\"\n            }\n         }\n     }\n     * @param stateParam\n     * @param key\n     * @param subParam\n     * @param mode : optional parameter if the widget/variable uses a state handling mode(url, local storage, session storage)\n     * other than the project level mode\n     */\n    public removeStateParam(stateParam, key, subParam?, mode?, widget?) {\n        let url = '', parsedObj;\n        const stateObj = this.getStateInformation(mode);\n        if (widget && stateObj && widget.getAppInstance().activePageName && (mode.toLowerCase() === 'localstorage' || mode.toLowerCase() === 'sessionstorage')) {\n            parsedObj = stateObj[widget.getAppInstance().activePageName];\n        } else {\n            parsedObj = clone(stateObj);\n        }\n        if (!get(parsedObj, [stateParam]) && !get(parsedObj, key)) {\n            return;\n        }\n        // Fix for [WMS-24698]: when table is inside a prefab, state persistence key is like \"TestLabel_11.TestLabel_1.staticVariable1Table1\"\n        // get(parsedObj, stateParam + '.' + key) is undefined so using (parsedObj && parsedObj[stateParam] && parsedObj[stateParam][key]) condition.\n        if (get(parsedObj, stateParam + '.' + key) || (parsedObj && parsedObj[stateParam] && parsedObj[stateParam][key])) {\n            if (subParam) {\n                delete parsedObj[stateParam][key][subParam];\n            } else {\n                delete parsedObj[stateParam][key];\n            }\n            if (isEmpty(parsedObj[stateParam][key])) {\n                delete parsedObj[stateParam][key];\n            }\n            if (isEmpty(parsedObj[stateParam])) {\n                delete parsedObj[stateParam];\n            }\n        } else if (!stateParam && get(parsedObj, key)) {\n            delete parsedObj[key];\n        }\n\n        // for Local and Session Storage, wrap state object inside page name so that widget name conflicts don't arise between pages.\n        if (widget && widget.getAppInstance().activePageName && (mode.toLowerCase() === 'localstorage' || mode.toLowerCase() === 'sessionstorage')) {\n            if (stateObj) {\n                stateObj[widget.getAppInstance().activePageName] = parsedObj;\n                parsedObj = stateObj;\n            } else {\n                parsedObj = {[widget.getAppInstance().activePageName]: parsedObj};\n            }\n\n        }\n        if (mode.toLowerCase() === 'localstorage') {\n            localStorage.setItem(window.location.pathname.replace(/\\//g, '') + '_wm_state', JSON.stringify(parsedObj));\n            return;\n        } else if (mode.toLowerCase() === 'sessionstorage') {\n            sessionStorage.setItem(window.location.pathname.replace(/\\//g, '') + '_wm_state', JSON.stringify(parsedObj));\n            return;\n        }\n\n        const decodedURI = decodeURIComponent(window.location.href);\n        if (isEmpty(parsedObj)) {\n            url = decodedURI.replace(/(wm_state=).*?(&|$)/ ,'' + '$2');\n            if (includes(['&', '?'], url.charAt(url.length - 1))) {\n                url = url.replace(url.charAt(url.length - 1), '');\n            }\n        } else {\n            url = decodedURI.replace(/(wm_state=).*?(&|$)/ ,'$1' + this.jsonToUri(parsedObj) + '$2');\n        }\n\n        window.history.replaceState({ path: url }, '', url);\n    }\n\n    /**\n     * Converts the State Information object into an encoded object when state handling mode is URL\n     * so that a meaningful URL can be formed and the user can make changes easily to the URL.\n     * E.g.\n     * state information input will be like :\n     {\n         \"widget-state\": {\n             \"Table1\": {\n             \"pagination\": \"3\",\n             \"search\":[\n                        {\n                            \"field\":\"state\",\n                            \"value\":\"NY\",\n                            \"matchMode\":\"anywhereignorecase\",\n                            \"type\":\"string\"\n                        }\n                      ]\n             }\n         }\n     },\n     \"CustomVariableSelectedItems\": [\"2\", \"3\"]\n     }\n\n\n     * This method will convert it to the following\n     ('widget-state'~('Table1'~('pagination'~'3'_'search'~!('field'~'state'_'value'~'NY'_'matchMode'~'anywhereignorecase'_'type'~'string')*))_'CustomVariableSelectedItems'~!'2'_'3'*)\n     * @param jsonObj\n     */\n    private jsonToUri(jsonObj) {\n        return encodeURIComponent(\n            JSON.stringify(jsonObj)\n                .replace(/[()'~_!*]/g, function(c) {\n                    // Replace ()'~_!* with \\u0000 escape sequences\n                    return '\\\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4)\n                })\n                .replace(/\\{/g, '(')    //    { -> (\n                .replace(/\\}/g, ')')    //    } -> )\n                .replace(/\"/g,  \"'\")    //    \" -> '\n                .replace(/\\:/g, '~')    //    : -> ~\n                .replace(/,/g,  '_')    //    , -> _\n                .replace(/\\[/g, '!')    //    [ -> !\n                .replace(/\\]/g, '*')    //    ] -> *\n        );\n    }\n\n    /**\n     * Decodes the encoded State Information object into a JSON object when state handling mode is URL\n     * so that state information can be parsed and applied to the widgets.\n     * E.g.\n     * encoded state information input will be like :\n     ('widget-state'~('Table1'~('pagination'~'3'_'search'~!('field'~'state'_'value'~'NY'_'matchMode'~'anywhereignorecase'_'type'~'string')*))_'CustomVariableSelectedItems'~!'2'_'3'*)\n\n\n     * This method will convert it to the following\n     {\n         \"widget-state\": {\n             \"Table1\": {\n             \"pagination\": \"3\",\n             \"search\":[\n                        {\n                            \"field\":\"state\",\n                            \"value\":\"NY\",\n                            \"matchMode\":\"anywhereignorecase\",\n                            \"type\":\"string\"\n                        }\n                      ]\n             }\n         }\n     },\n     \"CustomVariableSelectedItems\": [\"2\", \"3\"]\n     }\n     * @param encodedObj\n     */\n    private uriToJson(encodedObj) {\n        let response: any;\n        try {\n            response = JSON.parse(\n                decodeURIComponent(encodedObj)\n                    .replace(/\\(/g, '{')    //    ( -> {\n                    .replace(/\\)/g, '}')    //    ) -> }\n                    .replace(/'/g,  '\"')    //    ' -> \"\n                    .replace(/~/g,  ':')    //    ~ -> :\n                    .replace(/_/g,  ',')    //    _ -> ,\n                    .replace(/\\!/g, '[')    //    ! -> [\n                    .replace(/\\*/g, ']')    //    * -> ]\n            );\n        } catch (e) {\n            console.warn(e);\n        }\n        return response;\n    }\n}\n\n","import { isDefined } from '../utils/utils';\nimport { Injectable } from '@angular/core';\nimport {debounce, get, isEmpty, isEqual} from \"lodash-es\";\n\ndeclare const $;\n@Injectable({ providedIn: 'root' })\n\nexport class PaginationService {\n    /**\n     * @description\n     * This function returns the updated fields and the current page index when navigated to the next set of data\n     * @param {object} parent table / list instance\n     * @param {object} newVal updated fields info\n     * @returns fieldDefs and current page index\n     */\n    public updateFieldsOnPagination(parent, newVal) {\n        let fieldDefs = parent.widgetType === 'wm-table' ? parent.gridData : parent.fieldDefs;\n        // remove the deleted row from the list\n        if (parent.widgetType === 'wm-table' && (parent.gridOptions.isNavTypeScrollOrOndemand()) && parent.gridOptions.deletedRowIndex !== -1) {\n            fieldDefs.splice(parent.gridOptions.deletedRowIndex, 1);\n            parent.gridOptions.setDeletedRowIndex(-1);\n        }\n        // reset fieldDefs if last action performed is search or sort\n        if (parent.widgetType === 'wm-table' && (parent.gridOptions.isNavTypeScrollOrOndemand())  && (parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.SEARCH_OR_SORT || parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.FILTER_CRITERIA || parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.DATASET_UPDATE)) {\n            fieldDefs = [];\n            parent.gridOptions.setCurrentPage(1);\n        }\n        let currentPage;\n        if (parent.widgetType === 'wm-table') {\n            currentPage = parent.gridOptions.showviewlessbutton && (parent.gridOptions.mode === 'viewless') ? parent.gridOptions.getCurrentPage() : parent.currentPage;\n        } else {\n            currentPage = parent.currentPage;\n        }\n        const dataNavigator = parent.dataNavigator;\n        const pagesize = parent.pagesize;\n\n        if (!isDefined(fieldDefs) || dataNavigator.isFirstPage()) {\n            fieldDefs = [];\n            currentPage = 1;\n        } else if (fieldDefs.length / pagesize <= dataNavigator.pageCount) {\n            let itemsLength,\n                itemsToPush = [];\n            // we push the newVal only when dn.currentPage gets incremented because that is when new items gets added to newVal\n            if (fieldDefs.length === currentPage * pagesize && (currentPage + 1) === dataNavigator.dn.currentPage) {\n                itemsToPush = newVal;\n                currentPage++;\n            } else if (fieldDefs.length < currentPage * pagesize) {\n                if ((fieldDefs.length === (currentPage - 1) * pagesize) && ((currentPage - 1) === dataNavigator.dn.currentPage)) {\n                    // if dn.currentPage is not incremented still only old newVal is present hence we push empty array\n                    newVal = [];\n                } else if (dataNavigator.dataSize < currentPage * pagesize) {\n                    // if number of elements added to dataNavigator is less than  product of currentPage and pageSize we only add elements extra elements added\n                    itemsLength = dataNavigator.dataSize - fieldDefs.length;\n                } else {\n                    // if number of elements added to dataNavigator is greater than  product of currentPage and pageSize we add elements the extra elements in newVal\n                    itemsLength = currentPage * pagesize - fieldDefs.length;\n                    currentPage++;\n                }\n                const startIndex = newVal.length - itemsLength;\n                itemsToPush = newVal.slice(startIndex);\n            } else if (fieldDefs.length === currentPage * pagesize && currentPage === dataNavigator.dn.currentPage) {\n                // if dn.currentPage is not incremented still only old newVal is present hence we push empty array\n                itemsToPush = [];\n            }\n            newVal = itemsToPush;\n        }\n\n        // Add unique records to fieldDefs\n        if (parent.widgetType === 'wm-table' && (parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.DELETE  || parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.EDIT)) {\n            fieldDefs = this.getUniqueRecordsInFieldDef(fieldDefs, newVal);\n        } else {\n            fieldDefs = [...fieldDefs, ...newVal];\n        }\n        return [fieldDefs, currentPage];\n    }\n\n    // Add the unique records to fieldDefs\n    public getUniqueRecordsInFieldDef(fieldDefs, newVal) {\n        let flag = false;\n        if (!fieldDefs.length) {\n            fieldDefs = newVal;\n        } else {\n            newVal.forEach(function (newObj) {\n                flag = false;\n                fieldDefs.forEach(function (obj) {\n                    if (isEqual(newObj, obj)) {\n                        flag = true;\n                    }\n                });\n                if (flag === false) {\n                    fieldDefs.push(newObj);\n                }\n            });\n        }\n        return fieldDefs;\n    }\n\n    /**\n     * @description\n     * This function registers scroll events on the scrollable el, if the page doesn't have a scroll el then wheel event is registered on the requested node\n     * @param {object} parent table / list instance\n     * @param {string} nodeName tbody/ul\n     * @param {number} debounceNum provided to lodash debounce\n     * @returns null\n     */\n    public bindScrollEvt(parent, nodeName, debounceNum) {\n        const dataNavigator = parent.dataNavigator;\n        const $el = parent.$element;\n        const $rootEl = $el.find(nodeName);\n        const $firstChild = $rootEl.children().first();\n\n        const self = this;\n        let $scrollParent;\n        let scrollNode;\n        let lastScrollTop = 0;\n\n        if (!$firstChild.length) {\n            return;\n        }\n\n        $scrollParent = $firstChild.scrollParent(false);\n\n        if ($scrollParent[0] === document) {\n            scrollNode = document.body;\n        } else {\n            scrollNode = $scrollParent[0];\n        }\n\n        // has scroll\n        if (scrollNode.scrollHeight > scrollNode.clientHeight) {\n            $scrollParent\n                .each((index: number, node) => {\n                    // scrollTop property is 0 or undefined for body in IE, safari.\n                    lastScrollTop = node === document ? (node.body.scrollTop || $(window).scrollTop()) : (node as HTMLElement).scrollTop;\n                })\n                .off('scroll.scroll_evt')\n                .on('scroll.scroll_evt', function (evt) {\n                    let target = evt.target;\n                    let clientHeight;\n                    let totalHeight;\n                    let scrollTop;\n                    // scrollingElement is undefined for IE, safari. use body as target Element\n                    target = target === document ? (target.scrollingElement || document.body) : target;\n                    if (parent.widgetType === 'wm-table' && parent.gridOptions.isNavTypeScrollOrOndemand()) {\n                        evt.stopPropagation();\n                    }\n\n                    clientHeight = target.clientHeight;\n                    totalHeight = target.scrollHeight;\n                    scrollTop = target === document.body ? $(window).scrollTop() : target.scrollTop;\n\n                    if ((lastScrollTop < scrollTop) && (totalHeight * 0.9 < scrollTop + clientHeight)) {\n                        $(this).off('scroll.scroll_evt');\n                        self.debouncedFetchNextDatasetOnScroll(dataNavigator, debounceNum, parent)();\n                    }\n\n                    lastScrollTop = scrollTop;\n                });\n            $rootEl.off('wheel.scroll_evt');\n        } else {\n            // if there is no scrollable element register wheel event on ul element\n            $rootEl.on('wheel.scroll_evt', e => {\n                if (parent.widgetType === 'wm-table' && parent.gridOptions.isNavTypeScrollOrOndemand()) {\n                    e.stopPropagation();\n                }\n                if (e.originalEvent.deltaY > 0) {\n                    $rootEl.off('wheel.scroll_evt');\n                    this.debouncedFetchNextDatasetOnScroll(dataNavigator, debounceNum, parent)();\n                }\n            });\n        }\n    }\n\n    /**\n     * @description\n     * This function calls fetchNextDatasetOnScroll fn on debounced time\n     * @param {object} dataNavigator pagination instance\n     * @param {number} debounceNum provided to lodash debounce\n     * @returns debounced function definition\n     */\n    public debouncedFetchNextDatasetOnScroll(dataNavigator, debounceNum, parent) {\n        return debounce(() => this.fetchNextDatasetOnScroll(dataNavigator, parent), debounceNum);\n    }\n\n    /**\n     * @description\n     * This function calls next set of data when navigated to next page\n     * @param {object} dataNavigator pagination instance\n     * @returns null\n     */\n    public fetchNextDatasetOnScroll(dataNavigator, parent) {\n        // Load next set of data only after the success of current call\n        if (!parent.variableInflight) {\n            // Fix for [WMS-23263]: set 'isNextPageData' flag to true & 'isDataUpdatedByUser' to false as next page data is being rendered on Scroll\n            if (parent.widgetType === 'wm-table') {\n                // set isNextPageData flag to true as next page data is being rendered\n                parent.gridOptions.setIsNextPageData(true);\n                parent.gridOptions.setIsDataUpdatedByUser(false);\n            }\n            dataNavigator.navigatePage('next');\n        }\n    }\n\n    /**\n     * @description\n     * This function registers scroll events on the scrollable el for mobile projects\n     * @param {object} parent list instance\n     * @param {number} debounceNum provided to lodash debounce\n     * @returns null\n     */\n    public bindIScrollEvt(parent, debounceNum) {\n        const $element = parent.$element;\n        const dataNavigator = parent.dataNavigator;\n        const app = parent.app;\n\n        const $scrollParent = $element.closest('[wmsmoothscroll=\"true\"]');\n\n        const iScroll = get($scrollParent[0], 'iscroll');\n\n        // when iscroll is not initialised the notify the smoothscroll and subscribe to the iscroll update\n        if (!iScroll) {\n            const iScrollSubscription = app.subscribe('iscroll-update', (_el) => {\n                if (!isEmpty(_el) && _el.isSameNode($scrollParent[0])) {\n                    this.setIscrollHandlers($scrollParent[0], dataNavigator, debounceNum);\n                    iScrollSubscription();\n                }\n            });\n            app.notify('no-iscroll', $scrollParent[0]);\n            return;\n        }\n        this.setIscrollHandlers($scrollParent[0], dataNavigator, debounceNum);\n    }\n\n    /**\n     * @description\n     * This function registers scrollEnd event on the scrollable el for mobile projects\n     * @param {object} el scrollable element scope\n     * @param {object} dataNavigator pagination instance\n     * @param {number} debounceNum provided to lodash debounce\n     * @returns null\n     */\n    public setIscrollHandlers(el, dataNavigator, debounceNum) {\n        let lastScrollTop = 0;\n        const wrapper = get(el.iscroll, 'wrapper');\n        const self = el.iscroll;\n\n        el.iscroll.on('scrollEnd', () => {\n            const clientHeight = wrapper.clientHeight,\n                totalHeight = wrapper.scrollHeight,\n                scrollTop = Math.abs(el.iscroll.y);\n\n            if ((lastScrollTop < scrollTop) && (totalHeight * 0.9 < scrollTop + clientHeight)) {\n                this.debouncedFetchNextDatasetOnScroll(dataNavigator, debounceNum, parent)();\n                if (self.indicatorRefresh) {\n                    self.indicatorRefresh();\n                }\n            }\n\n            lastScrollTop = scrollTop;\n        });\n    }\n}\n","import {isNil} from \"lodash-es\";\n\ninterface CachedData<T> {\n    instance: T;\n    lastAccessedTime: number;\n}\n\nexport class LRUCache<T> {\n    private cache = new Map<string, CachedData<T>>();\n    private evictQueue: [string] = [''];\n    private evictionIntervalId: number | null = null; // MEMORY LEAK FIX: Store interval ID for cleanup\n\n    constructor(\n        private maxSize = 100,\n        private maxAge = 60,\n        private onEvict?: ((key: string, value: T) => any)) {\n            this.evictQueue.shift();\n            if(this.maxAge > 0) {\n                if (this.maxAge <= 30) {\n                    console.warn(`Cache age ${this.maxAge}s is very less. Keep it atleast 30s.`);\n                }\n                this.maxAge = this.maxAge * 1000;\n                // MEMORY LEAK FIX: Store interval ID for cleanup\n                this.evictionIntervalId = window.setInterval(() => {\n                    const max = Date.now() - this.maxAge;\n                    const expiredData = this.evictQueue.filter(k => {\n                        return this.cache.get(k).lastAccessedTime <= max;\n                    });\n                    this.evict(expiredData.length);\n                }, this.maxAge);\n            }\n    }\n\n    private addToEvictQueue(key: string) {\n        const index = this.evictQueue.findIndex(k => (k === key));\n        if (index >= 0) {\n            this.evictQueue.splice(index, 1);\n        }\n        this.evictQueue.push(key);\n    }\n\n    private evict(count = 1): void {\n        for (let i = 0; i < count; i++) {\n            this.delete(this.evictQueue[0]);\n        }\n    }\n\n    public keys() {\n        return this.cache.keys();\n    }\n\n    public set(key: string, dataToCache: T): void {\n        if (isNil(dataToCache)) {\n            return;\n        }\n        const cachedData = {\n            instance: dataToCache,\n            lastAccessedTime: Date.now()\n        };\n        this.cache.set(key, cachedData);\n        this.addToEvictQueue(key);\n        this.evict(this.evictQueue.length - this.maxSize);\n    }\n\n    public get(key: string): T {\n        const cachedData = this.cache.get(key);\n        if (cachedData) {\n            cachedData.lastAccessedTime = Date.now();\n            this.addToEvictQueue(key);\n            return cachedData.instance;\n        }\n        return null;\n    }\n\n    public delete(key: string) {\n        if(key && this.cache.has(key)) {\n            const cachedData = this.cache.get(key);\n            this.cache.delete(key);\n            this.onEvict && this.onEvict(key, cachedData.instance);\n            const index = this.evictQueue.findIndex(k => (k === key));\n            if (index >= 0) {\n                this.evictQueue.splice(index, 1);\n            }\n        }\n    }\n\n    public has(key: string): boolean {\n        return this.cache.has(key);\n    }\n\n    public size(): number {\n        return this.evictQueue.length;\n    }\n\n    public clear() {\n        this.evict(this.evictQueue.length);\n    }\n\n    /**\n     * MEMORY LEAK FIX: Destroy the cache and clear the eviction interval\n     * Call this method when the cache is no longer needed to prevent memory leaks\n     */\n    public destroy() {\n        // CRITICAL FIX: Clear the eviction interval to prevent memory leaks\n        if (this.evictionIntervalId !== null) {\n            clearInterval(this.evictionIntervalId);\n            this.evictionIntervalId = null;\n        }\n        this.clear();\n    }\n}\n","/*\n * Public API Surface of core\n */\nexport * from './utils/build-utils';\nexport * from './constants/currency-constants';\nexport {\n    appendNode,\n    insertBefore,\n    insertAfter,\n    removeNode,\n    removeClass,\n    addClass,\n    switchClass,\n    toggleClass,\n    setCSS,\n    setCSSFromObj,\n    setProperty,\n    setAttr,\n    setHtml,\n    removeAttr,\n    createElement,\n    toDimension\n} from './utils/dom';\nexport * from './enums/enums';\nexport * from './utils/event-notifier';\nexport {\n    ParseExprResult,\n    $parseExpr,\n    $parseEvent,\n    registerFnByExpr,\n    setPipeProvider,\n    getFnByExpr,\n    getFnForBindExpr,\n    getFnForEventExpr\n} from './utils/expression-parser';\nexport {\n    EVENT_LIFE,\n    isDefined,\n    isObject,\n    toBoolean,\n    isIE,\n    isAndroid,\n    isAndroidTablet,\n    isIphone,\n    isIpod,\n    isIpad,\n    isIos,\n    isSafari,\n    isLargeTabletLandscape,\n    isLargeTabletPortrait,\n    isMobile,\n    getAndroidVersion,\n    isKitkatDevice,\n    encodeUrl,\n    encodeUrlParams,\n    initCaps,\n    spaceSeparate,\n    replaceAt,\n    periodSeparate,\n    prettifyLabel,\n    deHyphenate,\n    prettifyLabels,\n    isInsecureContentRequest,\n    stringStartsWith,\n    getEvaluatedExprValue,\n    isImageFile,\n    isAudioFile,\n    isVideoFile,\n    isValidImageUrl,\n    isValidWebURL,\n    getResourceURL,\n    triggerFn,\n    hasOffsetStr,\n    getFormattedDate,\n    getDateObj,\n    addEventListenerOnElement,\n    getClonedObject,\n    getFiles,\n    generateGUId,\n    validateAccessRoles,\n    getValidJSON,\n    xmlToJson,\n    findValueOf,\n    extractType,\n    isNumberType,\n    isEmptyObject,\n    scrollToElement,\n    isElementInViewport,\n    isPageable,\n    replace,\n    isDateTimeType,\n    getValidDateObject,\n    getNativeDateObject,\n    getBlob,\n    isEqualWithFields,\n    loadStyleSheet,\n    loadStyleSheets,\n    loadScript,\n    loadScripts,\n    _WM_APP_PROJECT,\n    setSessionStorageItem,\n    getSessionStorageItem,\n    noop,\n    convertToBlob,\n    AppConstants,\n    openLink,\n    fetchContent,\n    toPromise,\n    retryIfFails,\n    getAbortableDefer,\n    createCSSRule,\n    getUrlParams,\n    getMomentLocaleObject,\n    getRouteNameFromLink,\n    isAppleProduct,\n    defer,\n    executePromiseChain,\n    isDataSourceEqual,\n    validateDataSourceCtx,\n    processFilterExpBindNode,\n    extendProto,\n    removeExtraSlashes,\n    getDisplayDateTimeFormat,\n    addForIdAttributes,\n    adjustContainerPosition,\n    adjustContainerRightEdges,\n    adjustVerticalPosition,\n    setTranslation3dPosition,\n    getWebkitTraslationMatrix,\n    closePopover,\n    detectChanges,\n    triggerItemAction,\n    getDatasourceFromExpr,\n    extractCurrentItemExpr,\n    findRootContainer,\n    VALIDATOR,\n    transformFileURI,\n    appendScriptToHead,\n    getAppSetting,\n    setListClass,\n    findParent,\n    getNavClass,\n    getSheetPositionClass\n} from './utils/utils';\nexport {\n    FIRST_TIME_WATCH,\n    isFirstTimeChange,\n    debounce,\n    muteWatchers,\n    unMuteWatchers,\n    $watch,\n    $unwatch,\n    setNgZone,\n    setAppRef,\n    isChangeFromWatch,\n    resetChangeFromWatch,\n    $invokeWatchers,\n    $appDigest\n} from './utils/watcher';\nexport * from './utils/id-generator';\nexport * from './types/types';\nexport { Viewport, ViewportEvent } from './services/viewport.service';\nexport * from './services/constant.service';\nexport * from './services/utils.service';\nexport * from './services/field-type.service';\nexport * from './services/field-widget.service';\nexport * from './services/script-loader.service';\nexport * from './services/user-custom-pipe-manager.service';\nexport * from './services/custom-icons-loader.service';\nexport { StatePersistence } from './services/state-persistence.service';\nexport { PaginationService } from './services/pagination.service';\nexport * from './utils/wm-project-properties';\nexport * from './utils/lru-cache';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["$RAF","noop","detectChanges","isObject","_replace","_noop","debounce"],"mappings":"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"}