{"version":3,"sources":["webpack:///./node_modules/ag-grid-community/dist/lib/utils/index.js","webpack:///./node_modules/ag-grid-community/dist/lib/utils/color.js","webpack:///./node_modules/ag-grid-community/dist/lib/utils/promise.js","webpack:///./node_modules/ag-grid-community/dist/lib/utils/general.js","webpack:///./node_modules/ag-grid-community/dist/lib/templateService.js","webpack:///./node_modules/ag-grid-community/dist/lib/styling/stylingService.js","webpack:///./node_modules/ag-grid-community/dist/lib/utils/timer.js"],"names":["__export","m","p","exports","hasOwnProperty","Object","defineProperty","value","Color","r","g","b","a","this","Math","min","max","fromString","str","indexOf","fromHexString","hex","nameToHex","fromRgbaString","Error","values","match","hexRe","parseInt","undefined","shortHexRe","rgbRe","rgbaRe","fromArray","arr","length","fromHSB","h","s","alpha","rgb","HSBtoRGB","padHex","prototype","toHexString","round","toString","toRgbaString","fractionDigits","components","k","pow","push","join","toHSB","RGBtoHSB","S","H","NaN","delta","rc","gc","bc","B","isNaN","floor","f","q","t","derive","hueShift","saturationFactor","brightnessFactor","opacityFactor","hsb","rgba","brighter","darker","freeze","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","PromiseStatus","Promise","callback","status","IN_PROGRESS","resolution","listOfWaiters","onDone","bind","onReject","all","toCombine","resolve","combinedValues","remainingToResolve","forEach","source","index","then","sourceResolved","external","capture","promise","func","firstOneOnly","map","adapter","_this","unmapped","resolveNow","ifNotResolvedValue","ifResolved","RESOLVED","waiter","params","console","warn","constants_1","FUNCTION_STRIP_COMMENTS","FUNCTION_ARGUMENT_NAMES","AG_GRID_STOP_PROPAGATION","HTML_ESCAPES","reUnescapedHtml","Utils","doIeFocusHack","el","_","isBrowserIE","isBrowserEdge","missing","document","activeElement","body","focus","doOnce","key","doOnceFlags","isLeftClick","mouseEvent","buttons","button","which","areEventsNear","e1","e2","pixelCount","diffX","abs","clientX","diffY","clientY","jsonEquals","val1","val2","val1Json","JSON","stringify","val2Json","res","shallowCompare","arr1","arr2","i","getNameOfClass","TheClass","funcNameRegex","funcAsString","results","exec","object","result","iterateObject","getValueUsingField","data","field","fieldContainsDots","fields","split","currentObject","getElementSize","_a","window","getComputedStyle","height","width","paddingTop","paddingRight","paddingBottom","paddingLeft","marginTop","marginRight","marginBottom","marginLeft","boxSizing","parseFloat","getInnerHeight","size","getInnerWidth","getAbsoluteHeight","ceil","offsetHeight","getAbsoluteWidth","marginWidth","offsetWidth","getScrollLeft","element","rtl","scrollLeft","isBrowserChrome","scrollWidth","clientWidth","cleanNumber","setScrollLeft","isBrowserSafari","isBrowserFirefox","iterateNamedNodeMap","attr","name","Array","isArray","keys","cloneObject","copy","deepCloneObject","parse","array","item","mappedItem","mapObject","filter","getAllKeysInObjects","objects","allValues","obj","mergeDeep","dest","exists","newValue","oldValue","assign","sources","_i","arguments","flatten","arrayOfArrays","concat","apply","parseYyyyMmDdToDate","yyyyMmDd","separator","Date","Number","e","serializeDateToYyyyMmDd","date","getFullYear","pad","getMonth","getDate","num","totalStringSize","asString","pushAll","target","createArrayOfNumbers","first","last","getFunctionParameters","fnStr","replace","slice","find","collection","predicate","objToArray","collectionAsArray","firstMatchingItem","toStrings","iterateArray","findIndex","isNode","o","Node","nodeType","nodeName","isElement","HTMLElement","isNodeOrElement","copyNodeList","nodeList","childCount","isEventFromPrintableCharacter","event","pressedChar","String","fromCharCode","charCode","isKeyPressed","Constants","KEY_NEW_LINE","altKey","ctrlKey","printableCharacter","numpadDelWithNumlockOnForEdgeOrIe","isNumpadDelWithNumlockOnForEdgeOrIe","PRINTABLE_CHARACTERS","isUserSuppressingKeyboardEvent","gridOptionsWrapper","keyboardEvent","rowNode","column","editing","gridOptionsFunc","getSuppressKeyboardEventFunc","colDefFunc","getColDef","suppressKeyboardEvent","api","getApi","node","colDef","context","getContext","columnApi","getColumnApi","colDefFuncResult","getCellCompForEvent","sourceElement","getTarget","renderedCell","getDomData","parentElement","addChangeListener","listener","addEventListener","makeNull","valueNoType","missingOrEmpty","missingOrEmptyObject","allowEmptyString","firstExistingValue","anyExists","existsAndNotEmpty","clearElement","firstChild","removeChild","removeElement","parent","cssSelector","removeFromParent","querySelector","parentNode","isVisible","offsetParent","callIfPresent","loadTemplate","template","tempDiv","createElement","innerHTML","appendHtml","eContainer","htmlTemplate","lastChild","insertAdjacentHTML","addOrRemoveCssClass","className","addOrRemove","addCssClass","removeCssClass","radioCssClass","inverted","sibling","nextSibling","classList","contains","add","cssClasses","setAttribute","remove","splice","containsClass","onlyClass","startsWithClass","endsWithClass","lastIndexOf","getElementAttribute","attributeName","attributes","attribute","clientHeight","sortNumberArray","numberArray","sort","removeRepeatsFromArray","thisOneMatches","nextOneMatches","removeFromArray","removeAllFromArray","toRemove","insertIntoArray","toIndex","insertArrayIntoArray","src","moveInArray","objectsToMove","reverse","defaultComparator","valueA","valueB","accentedCompare","valueAMissing","valueBMissing","toNumber","doQuickCompare","localeCompare","compareArrays","array1","array2","ensureDomOrder","eChild","eChildBefore","insertBefore","appendChild","insertAdjacentElement","insertWithDomOrder","insertTemplateWithDomOrder","every","items","toStringOrNull","formatSize","formatNumberTwoDecimalPlacesAndCommas","formatNumberCommas","prependDC","documentFragment","createIcon","iconName","iconContents","createIconNoSpan","eResult","forceCreate","userProvidedIcon","icons","optionsIcons","getIcons","rendererResult","span","cssClass","iconNameClassMap","addStylesToElement","eElement","styles","keyCamelCase","hyphenToCamelCase","style","isHorizontalScrollShowing","isVerticalScrollShowing","scrollHeight","getMaxDivHeight","testUpTo","navigator","userAgent","toLowerCase","div","test","getScrollbarWidth","opacity","overflow","msOverflowStyle","position","hasOverflowScrolling","prefixes","getElementsByTagName","found","prefix","computedStyle","overflowScrolling","prefixes_1","keyToCheck","pressedKey","keyCode","isCharacterKey","metaKey","setDisplayed","displayed","setVisible","visible","setElementWidth","minWidth","maxWidth","flex","setFixedWidth","setElementHeight","minHeight","maxHeight","setFixedHeight","isIE","documentMode","isEdge","StyleMedia","isSafari","anyWindow","call","safari","pushNotification","isChrome","win","chrome","webstore","runtime","vendor","isFirefox","InstallTrigger","isUserAgentIPad","isIPad","eventNoType","srcElement","isElementChildOfClass","cls","maxNest","counter","isElementInEventPath","path","getEventPath","isFunction","val","constructor","createEventPath","pointer","addAgGridEventPath","__agGridEventPath","deepPath","composedPath","forEachSnapshotFirst","list","arrayCopy","getBodyWidth","innerHeight","innerWidth","documentElement","getBodyHeight","setCheckboxState","eCheckbox","state","checked","indeterminate","traverseNodesWithKey","nodes","keyParts","recursiveSearchNodes","currentNodes","group","hasChildren","childrenAfterGroup","pop","camelCaseToHyphen","toUpperCase","capitalise","substr","cssStyleObjectToMarkup","stylesToUse","resParts","styleKey","styleValue","styleKeyDashed","isNumeric","isFinite","escape","toEscape","chr","normalizeWheel","PIXEL_STEP","LINE_HEIGHT","PAGE_HEIGHT","sX","sY","pX","pY","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","debounce","wait","immediate","timeout","args","callNow","clearTimeout","setTimeout","stopPropagationForAgGrid","isStopPropagationForAgGrid","executeInAWhile","funcs","executeAfter","executeNextVMTurn","millis","referenceCompare","left","right","get","expression","defaultValue","thisKey","nextValue_1","nextValue","addSafePassiveEventListener","frameworkOverrides","isPassive","PASSIVE_EVENTS","isOutsideAngular","OUTSIDE_ANGULAR_EVENTS","options","passive","addEventListenerOutsideAngular","camelCaseToHumanText","camelCase","rex","words","word","substring","message","msg","eMessage","eBox","children","sortRowNodesByOrder","rowNodes","rowNodeOrder","rowNodeA","rowNodeB","comparator","nodeA","nodeB","positionA","id","positionB","aHasIndex","bHasIndex","bothNodesAreUserNodes","bothNodesAreFillerNodes","__objectId","atLeastOneOutOfOrder","fuzzyCheckStrings","inputValues","validValues","allSuggestions","fuzzyMatches","invalidInputs","inputValue","some","validValue","invalidInput","fuzzySuggestions","hideIrrelevant","weighted","search","string_weighted_distances","string_distances","thisSuggestions","text","relevance","toLocaleLowerCase","suggestion","get_bigrams","from","j","ref","v","str1","str2","len","pairs1","pairs2","union","hit_count","x","len1","y","weight","lastIndex","idx","NUMPAD_DEL_NUMLOCK_ON_KEY","NUMPAD_DEL_NUMLOCK_ON_CHARCODE","bindCellRendererToHtmlElement","cellRendererPromise","eTarget","cellRenderer","gui","getGui","compose","fns","arg","reduce","composed","decToHex","number","bytes","utf8_encode","stringFromCharCode","ucs2decode","string","extra","output","charCodeAt","checkScalarValue","codePoint","createByte","shift","encodeCodePoint","symbol","codePoints","byteString","columnGroupOpened","columnGroupClosed","columnSelectClosed","columnSelectOpen","columnSelectIndeterminate","columnMovePin","columnMoveAdd","columnMoveHide","columnMoveMove","columnMoveLeft","columnMoveRight","columnMoveGroup","columnMoveValue","columnMovePivot","dropNotAllowed","groupContracted","groupExpanded","chart","close","cancel","check","checkboxChecked","checkboxUnchecked","checkboxIndeterminate","checkboxCheckedReadOnly","checkboxUncheckedReadOnly","checkboxIndeterminateReadOnly","previous","next","linked","unlinked","colorPicker","radioButtonOn","radioButtonOff","groupLoading","menu","columns","maximize","minimize","menuPin","menuValue","menuAddRowGroup","menuRemoveRowGroup","clipboardCopy","clipboardCut","clipboardPaste","pivotPanel","rowGroupPanel","valuePanel","columnDrag","rowDrag","save","smallLeft","smallRight","smallUp","smallDown","sortAscending","sortDescending","sortUnSort","NumberSequence","initValue","step","valToReturn","peek","skip","count","__decorate","decorators","desc","d","c","getOwnPropertyDescriptor","Reflect","decorate","__metadata","metadata","context_1","context_2","TemplateService","templateCache","waitingCallbacks","getTemplate","url","templateFromCache","callbackList","that","client","XMLHttpRequest","onload","handleHttpResult","open","send","httpResult","response","responseText","callbacks","$scope","that_1","$apply","Autowired","Bean","expressionService_1","StylingService","processAllCellClasses","onApplicableClass","onNotApplicableClass","processClassRules","cellClassRules","processStaticCellClasses","classRules","classNames","rule","resultOfRule","expressionService","evaluate","cellClass","classOrClasses","cellClassFunc","cssClassItem","ExpressionService","Timer","timestamp","getTime","print","duration","info"],"mappings":"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","file":"js/chunk-vendors~703de24f.d495d5fc.js","sourcesContent":["/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./color\"));\n__export(require(\"./general\"));\n__export(require(\"./promise\"));\n__export(require(\"./timer\"));\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Color = /** @class */ (function () {\n /**\n * Every color component should be in the [0, 1] range.\n * Some easing functions (such as elastic easing) can overshoot the target value by some amount.\n * So, when animating colors, if the source or target color components are already near\n * or at the edge of the allowed [0, 1] range, it is possible for the intermediate color\n * component value to end up outside of that range mid-animation. For this reason the constructor\n * performs range checking/constraining.\n * @param r Red component.\n * @param g Green component.\n * @param b Blue component.\n * @param a Alpha (opacity) component.\n */\n function Color(r, g, b, a) {\n if (a === void 0) { a = 1; }\n // NaN is treated as 0.\n this.r = Math.min(1, Math.max(0, r || 0));\n this.g = Math.min(1, Math.max(0, g || 0));\n this.b = Math.min(1, Math.max(0, b || 0));\n this.a = Math.min(1, Math.max(0, a || 0));\n }\n /**\n * The given string can be in one of the following formats:\n * - #rgb\n * - #rrggbb\n * - rgb(r, g, b)\n * - rgba(r, g, b, a)\n * - CSS color name such as 'white', 'orange', 'cyan', etc.\n * @param str\n */\n Color.fromString = function (str) {\n // hexadecimal notation\n if (str.indexOf('#') >= 0) { // there can be some leading whitespace\n return Color.fromHexString(str);\n }\n // color name\n var hex = Color.nameToHex[str];\n if (hex) {\n return Color.fromHexString(hex);\n }\n // rgb(a) notation\n if (str.indexOf('rgb') >= 0) {\n return Color.fromRgbaString(str);\n }\n throw new Error(\"Invalid color string: '\" + str + \"'\");\n };\n // Using separate RegExp for the short hex notation because strings like `#abcd`\n // are matched as ['#abcd', 'ab', 'c', 'd', undefined] when the `{1,2}` quantifier is used.\n Color.fromHexString = function (str) {\n var values = str.match(Color.hexRe);\n if (values) {\n var r = parseInt(values[1], 16);\n var g = parseInt(values[2], 16);\n var b = parseInt(values[3], 16);\n var a = values[4] !== undefined ? parseInt(values[4], 16) : 255;\n return new Color(r / 255, g / 255, b / 255, a / 255);\n }\n values = str.match(Color.shortHexRe);\n if (values) {\n var r = parseInt(values[1], 16);\n var g = parseInt(values[2], 16);\n var b = parseInt(values[3], 16);\n var a = values[4] !== undefined ? parseInt(values[4], 16) : 15;\n r += r * 16;\n g += g * 16;\n b += b * 16;\n a += a * 16;\n return new Color(r / 255, g / 255, b / 255, a / 255);\n }\n throw new Error(\"Malformed hexadecimal color string: '\" + str + \"'\");\n };\n Color.fromRgbaString = function (str) {\n var values = str.match(Color.rgbRe);\n if (values) {\n return new Color(+values[1] / 255, +values[2] / 255, +values[3] / 255);\n }\n values = str.match(Color.rgbaRe);\n if (values) {\n return new Color(+values[1] / 255, +values[2] / 255, +values[3] / 255, +values[4]);\n }\n throw new Error(\"Malformed rgb/rgba color string: '\" + str + \"'\");\n };\n Color.fromArray = function (arr) {\n if (arr.length === 4) {\n return new Color(arr[0], arr[1], arr[2], arr[3]);\n }\n if (arr.length === 3) {\n return new Color(arr[0], arr[1], arr[2]);\n }\n throw new Error('The given array should contain 3 or 4 color components (numbers).');\n };\n Color.fromHSB = function (h, s, b, alpha) {\n if (alpha === void 0) { alpha = 1; }\n var rgb = Color.HSBtoRGB(h, s, b);\n return new Color(rgb[0], rgb[1], rgb[2], alpha);\n };\n Color.padHex = function (str) {\n // Can't use `padStart(2, '0')` here because of IE.\n return str.length === 1 ? '0' + str : str;\n };\n Color.prototype.toHexString = function () {\n var hex = '#'\n + Color.padHex(Math.round(this.r * 255).toString(16))\n + Color.padHex(Math.round(this.g * 255).toString(16))\n + Color.padHex(Math.round(this.b * 255).toString(16));\n if (this.a < 1) {\n hex += Color.padHex(Math.round(this.a * 255).toString(16));\n }\n return hex;\n };\n Color.prototype.toRgbaString = function (fractionDigits) {\n if (fractionDigits === void 0) { fractionDigits = 3; }\n var components = [\n Math.round(this.r * 255),\n Math.round(this.g * 255),\n Math.round(this.b * 255)\n ];\n var k = Math.pow(10, fractionDigits);\n if (this.a !== 1) {\n components.push(Math.round(this.a * k) / k);\n return \"rgba(\" + components.join(', ') + \")\";\n }\n return \"rgb(\" + components.join(', ') + \")\";\n };\n Color.prototype.toString = function () {\n if (this.a === 1) {\n return this.toHexString();\n }\n return this.toRgbaString();\n };\n Color.prototype.toHSB = function () {\n return Color.RGBtoHSB(this.r, this.g, this.b);\n };\n /**\n * Converts the given RGB triple to an array of HSB (HSV) components.\n * The hue component will be `NaN` for achromatic colors.\n */\n Color.RGBtoHSB = function (r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var S = max !== 0 ? (max - min) / max : 0;\n var H = NaN;\n // min == max, means all components are the same\n // and the color is a shade of gray with no hue (H is NaN)\n if (min !== max) {\n var delta = max - min;\n var rc = (max - r) / delta;\n var gc = (max - g) / delta;\n var bc = (max - b) / delta;\n if (r === max) {\n H = bc - gc;\n }\n else if (g === max) {\n H = 2.0 + rc - bc;\n }\n else {\n H = 4.0 + gc - rc;\n }\n H /= 6.0;\n if (H < 0) {\n H = H + 1.0;\n }\n }\n return [H * 360, S, max];\n };\n /**\n * Converts the given HSB (HSV) triple to an array of RGB components.\n */\n Color.HSBtoRGB = function (H, S, B) {\n if (isNaN(H)) {\n H = 0;\n }\n H = (((H % 360) + 360) % 360) / 360; // normalize hue to [0, 360] interval, then scale to [0, 1]\n var r = 0;\n var g = 0;\n var b = 0;\n if (S === 0) {\n r = g = b = B;\n }\n else {\n var h = (H - Math.floor(H)) * 6;\n var f = h - Math.floor(h);\n var p = B * (1 - S);\n var q = B * (1 - S * f);\n var t = B * (1 - (S * (1 - f)));\n switch (h >> 0) { // discard the floating point part of the number\n case 0:\n r = B;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = B;\n b = p;\n break;\n case 2:\n r = p;\n g = B;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = B;\n break;\n case 4:\n r = t;\n g = p;\n b = B;\n break;\n case 5:\n r = B;\n g = p;\n b = q;\n break;\n }\n }\n return [r, g, b];\n };\n Color.prototype.derive = function (hueShift, saturationFactor, brightnessFactor, opacityFactor) {\n var hsb = Color.RGBtoHSB(this.r, this.g, this.b);\n var b = hsb[2];\n if (b == 0 && brightnessFactor > 1.0) {\n b = 0.05;\n }\n var h = (((hsb[0] + hueShift) % 360) + 360) % 360;\n var s = Math.max(Math.min(hsb[1] * saturationFactor, 1.0), 0.0);\n b = Math.max(Math.min(b * brightnessFactor, 1.0), 0.0);\n var a = Math.max(Math.min(this.a * opacityFactor, 1.0), 0.0);\n var rgba = Color.HSBtoRGB(h, s, b);\n rgba.push(a);\n return Color.fromArray(rgba);\n };\n Color.prototype.brighter = function () {\n return this.derive(0, 1.0, 1.0 / 0.7, 1.0);\n };\n Color.prototype.darker = function () {\n return this.derive(0, 1.0, 0.7, 1.0);\n };\n // See https://drafts.csswg.org/css-color/#hex-notation\n Color.hexRe = /\\s*#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?\\s*$/;\n Color.shortHexRe = /\\s*#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?\\s*$/;\n Color.rgbRe = /\\s*rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)\\s*/;\n Color.rgbaRe = /\\s*rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)\\s*/;\n /**\n * CSS Color Module Level 4:\n * https://drafts.csswg.org/css-color/#named-colors\n */\n Color.nameToHex = Object.freeze({\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgreen: '#006400',\n darkgrey: '#A9A9A9',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n grey: '#808080',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgreen: '#90EE90',\n lightgrey: '#D3D3D3',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32'\n });\n return Color;\n}());\nexports.Color = Color;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PromiseStatus;\n(function (PromiseStatus) {\n PromiseStatus[PromiseStatus[\"IN_PROGRESS\"] = 0] = \"IN_PROGRESS\";\n PromiseStatus[PromiseStatus[\"RESOLVED\"] = 1] = \"RESOLVED\";\n})(PromiseStatus = exports.PromiseStatus || (exports.PromiseStatus = {}));\nvar Promise = /** @class */ (function () {\n function Promise(callback) {\n this.status = PromiseStatus.IN_PROGRESS;\n this.resolution = null;\n this.listOfWaiters = [];\n callback(this.onDone.bind(this), this.onReject.bind(this));\n }\n Promise.all = function (toCombine) {\n return new Promise(function (resolve) {\n var combinedValues = [];\n var remainingToResolve = toCombine.length;\n toCombine.forEach(function (source, index) {\n source.then(function (sourceResolved) {\n remainingToResolve--;\n combinedValues[index] = sourceResolved;\n if (remainingToResolve == 0) {\n resolve(combinedValues);\n }\n });\n combinedValues.push(null); // spl todo: review with Alberto - why?\n });\n });\n };\n Promise.resolve = function (value) {\n return new Promise(function (resolve) { return resolve(value); });\n };\n Promise.external = function () {\n var capture;\n var promise = new Promise(function (resolve) {\n capture = resolve;\n });\n return {\n promise: promise,\n resolve: function (value) {\n capture(value);\n }\n };\n };\n Promise.prototype.then = function (func) {\n if (this.status === PromiseStatus.IN_PROGRESS) {\n this.listOfWaiters.push(func);\n }\n else {\n func(this.resolution);\n }\n };\n Promise.prototype.firstOneOnly = function (func) {\n if (this.status === PromiseStatus.IN_PROGRESS) {\n if (this.listOfWaiters.length === 0) {\n this.listOfWaiters.push(func);\n }\n }\n else {\n func(this.resolution);\n }\n };\n Promise.prototype.map = function (adapter) {\n var _this = this;\n return new Promise(function (resolve) {\n _this.then(function (unmapped) {\n resolve(adapter(unmapped));\n });\n });\n };\n Promise.prototype.resolveNow = function (ifNotResolvedValue, ifResolved) {\n if (this.status == PromiseStatus.IN_PROGRESS) {\n return ifNotResolvedValue;\n }\n return ifResolved(this.resolution);\n };\n Promise.prototype.onDone = function (value) {\n this.status = PromiseStatus.RESOLVED;\n this.resolution = value;\n this.listOfWaiters.forEach(function (waiter) { return waiter(value); });\n };\n Promise.prototype.onReject = function (params) {\n console.warn('TBI');\n };\n return Promise;\n}());\nexports.Promise = Promise;\n","/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.2\n * @link http://www.ag-grid.com/\n * @license MIT\n */\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"../constants\");\nvar FUNCTION_STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar FUNCTION_ARGUMENT_NAMES = /([^\\s,]+)/g;\nvar AG_GRID_STOP_PROPAGATION = '__ag_Grid_Stop_Propagation';\n/**\n * HTML Escapes.\n */\nvar HTML_ESCAPES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nvar reUnescapedHtml = /[&<>\"']/g;\nvar Utils = /** @class */ (function () {\n function Utils() {\n }\n /**\n * When in IE or Edge, when you are editing a cell, then click on another cell,\n * the other cell doesn't keep focus, so navigation keys, type to start edit etc\n * don't work. appears that when you update the dom in IE it looses focus\n * https://ag-grid.com/forum/showthread.php?tid=4362\n * @param {HTMLElement} el\n */\n Utils.doIeFocusHack = function (el) {\n if (exports._.isBrowserIE() || exports._.isBrowserEdge()) {\n if (exports._.missing(document.activeElement) || document.activeElement === document.body) {\n // console.log('missing focus');\n el.focus();\n }\n }\n };\n /**\n * If the key was passed before, then doesn't execute the func\n * @param {Function} func\n * @param {string} key\n */\n Utils.doOnce = function (func, key) {\n if (this.doOnceFlags[key]) {\n return;\n }\n func();\n this.doOnceFlags[key] = true;\n };\n /**\n * Checks if event was issued by a left click\n * from https://stackoverflow.com/questions/3944122/detect-left-mouse-button-press\n * @param {MouseEvent} mouseEvent\n * @returns {boolean}\n */\n Utils.isLeftClick = function (mouseEvent) {\n if (\"buttons\" in mouseEvent) {\n return mouseEvent.buttons == 1;\n }\n var button = mouseEvent.which || mouseEvent.button;\n return button == 1;\n };\n /**\n * `True` if the event is close to the original event by X pixels either vertically or horizontally.\n * we only start dragging after X pixels so this allows us to know if we should start dragging yet.\n * @param {MouseEvent | TouchEvent} e1\n * @param {MouseEvent | TouchEvent} e2\n * @param {number} pixelCount\n * @returns {boolean}\n */\n Utils.areEventsNear = function (e1, e2, pixelCount) {\n // by default, we wait 4 pixels before starting the drag\n if (pixelCount === 0) {\n return false;\n }\n var diffX = Math.abs(e1.clientX - e2.clientX);\n var diffY = Math.abs(e1.clientY - e2.clientY);\n return Math.max(diffX, diffY) <= pixelCount;\n };\n Utils.jsonEquals = function (val1, val2) {\n var val1Json = val1 ? JSON.stringify(val1) : null;\n var val2Json = val2 ? JSON.stringify(val2) : null;\n var res = val1Json === val2Json;\n return res;\n };\n Utils.shallowCompare = function (arr1, arr2) {\n // if both are missing, then they are the same\n if (this.missing(arr1) && this.missing(arr2)) {\n return true;\n }\n // if one is present, but other is missing, then then are different\n if (this.missing(arr1) || this.missing(arr2)) {\n return false;\n }\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n };\n Utils.getNameOfClass = function (TheClass) {\n var funcNameRegex = /function (.{1,})\\(/;\n var funcAsString = TheClass.toString();\n var results = (funcNameRegex).exec(funcAsString);\n return (results && results.length > 1) ? results[1] : \"\";\n };\n Utils.values = function (object) {\n var result = [];\n this.iterateObject(object, function (key, value) {\n result.push(value);\n });\n return result;\n };\n Utils.getValueUsingField = function (data, field, fieldContainsDots) {\n if (!field || !data) {\n return;\n }\n // if no '.', then it's not a deep value\n if (!fieldContainsDots) {\n return data[field];\n }\n else {\n // otherwise it is a deep value, so need to dig for it\n var fields = field.split('.');\n var currentObject = data;\n for (var i = 0; i < fields.length; i++) {\n currentObject = currentObject[fields[i]];\n if (this.missing(currentObject)) {\n return null;\n }\n }\n return currentObject;\n }\n };\n Utils.getElementSize = function (el) {\n var _a = window.getComputedStyle(el), height = _a.height, width = _a.width, paddingTop = _a.paddingTop, paddingRight = _a.paddingRight, paddingBottom = _a.paddingBottom, paddingLeft = _a.paddingLeft, marginTop = _a.marginTop, marginRight = _a.marginRight, marginBottom = _a.marginBottom, marginLeft = _a.marginLeft, boxSizing = _a.boxSizing;\n return {\n height: parseFloat(height),\n width: parseFloat(width),\n paddingTop: parseFloat(paddingTop),\n paddingRight: parseFloat(paddingRight),\n paddingBottom: parseFloat(paddingBottom),\n paddingLeft: parseFloat(paddingLeft),\n marginTop: parseFloat(marginTop),\n marginRight: parseFloat(marginRight),\n marginBottom: parseFloat(marginBottom),\n marginLeft: parseFloat(marginLeft),\n boxSizing: boxSizing\n };\n };\n Utils.getInnerHeight = function (el) {\n var size = this.getElementSize(el);\n if (size.boxSizing === 'border-box') {\n return size.height - size.paddingTop - size.paddingBottom;\n }\n return size.height;\n };\n Utils.getInnerWidth = function (el) {\n var size = this.getElementSize(el);\n if (size.boxSizing === 'border-box') {\n return size.width - size.paddingLeft - size.paddingRight;\n }\n return size.width;\n };\n Utils.getAbsoluteHeight = function (el) {\n var size = this.getElementSize(el);\n var marginRight = size.marginBottom + size.marginTop;\n return Math.ceil(el.offsetHeight + marginRight);\n };\n Utils.getAbsoluteWidth = function (el) {\n var size = this.getElementSize(el);\n var marginWidth = size.marginLeft + size.marginRight;\n return Math.ceil(el.offsetWidth + marginWidth);\n };\n Utils.getScrollLeft = function (element, rtl) {\n var scrollLeft = element.scrollLeft;\n if (rtl) {\n // Absolute value - for FF that reports RTL scrolls in negative numbers\n scrollLeft = Math.abs(scrollLeft);\n // Get Chrome to return the same value as well\n if (this.isBrowserChrome()) {\n scrollLeft = element.scrollWidth - element.clientWidth - scrollLeft;\n }\n }\n return scrollLeft;\n };\n Utils.cleanNumber = function (value) {\n if (typeof value === 'string') {\n value = parseInt(value, 10);\n }\n if (typeof value === 'number') {\n value = Math.floor(value);\n }\n else {\n value = null;\n }\n return value;\n };\n Utils.setScrollLeft = function (element, value, rtl) {\n if (rtl) {\n // Chrome and Safari when doing RTL have the END position of the scroll as zero, not the start\n if (this.isBrowserSafari() || this.isBrowserChrome()) {\n value = element.scrollWidth - element.clientWidth - value;\n }\n // Firefox uses negative numbers when doing RTL scrolling\n if (this.isBrowserFirefox()) {\n value *= -1;\n }\n }\n element.scrollLeft = value;\n };\n Utils.iterateNamedNodeMap = function (map, callback) {\n if (!map) {\n return;\n }\n for (var i = 0; i < map.length; i++) {\n var attr = map[i];\n callback(attr.name, attr.value);\n }\n };\n Utils.iterateObject = function (object, callback) {\n if (!object || this.missing(object)) {\n return;\n }\n if (Array.isArray(object)) {\n object.forEach(function (value, index) {\n callback(index + '', value);\n });\n }\n else {\n var keys = Object.keys(object);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = object[key];\n callback(key, value);\n }\n }\n };\n Utils.cloneObject = function (object) {\n var copy = {};\n var keys = Object.keys(object);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = object[key];\n copy[key] = value;\n }\n return copy;\n };\n Utils.deepCloneObject = function (object) {\n return JSON.parse(JSON.stringify(object));\n };\n Utils.map = function (array, callback) {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n var mappedItem = callback(item, i);\n result.push(mappedItem);\n }\n return result;\n };\n Utils.mapObject = function (object, callback) {\n var result = [];\n Utils.iterateObject(object, function (key, value) {\n result.push(callback(value));\n });\n return result;\n };\n Utils.forEach = function (array, callback) {\n if (!array) {\n return;\n }\n for (var i = 0; i < array.length; i++) {\n var value = array[i];\n callback(value, i);\n }\n };\n Utils.filter = function (array, callback) {\n var result = [];\n array.forEach(function (item) {\n if (callback(item)) {\n result.push(item);\n }\n });\n return result;\n };\n Utils.getAllKeysInObjects = function (objects) {\n var allValues = {};\n objects.forEach(function (obj) {\n if (obj) {\n Object.keys(obj).forEach(function (key) { return allValues[key] = null; });\n }\n });\n return Object.keys(allValues);\n };\n Utils.mergeDeep = function (dest, source) {\n if (!this.exists(source)) {\n return;\n }\n this.iterateObject(source, function (key, newValue) {\n var oldValue = dest[key];\n if (oldValue === newValue) {\n return;\n }\n if (typeof oldValue === 'object' && typeof newValue === 'object') {\n Utils.mergeDeep(oldValue, newValue);\n }\n else {\n dest[key] = newValue;\n }\n });\n };\n Utils.assign = function (object) {\n var _this = this;\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n sources.forEach(function (source) {\n if (_this.exists(source)) {\n _this.iterateObject(source, function (key, value) {\n object[key] = value;\n });\n }\n });\n return object;\n };\n Utils.flatten = function (arrayOfArrays) {\n return [].concat.apply([], arrayOfArrays);\n };\n Utils.parseYyyyMmDdToDate = function (yyyyMmDd, separator) {\n try {\n if (!yyyyMmDd) {\n return null;\n }\n if (yyyyMmDd.indexOf(separator) === -1) {\n return null;\n }\n var fields = yyyyMmDd.split(separator);\n if (fields.length != 3) {\n return null;\n }\n return new Date(Number(fields[0]), Number(fields[1]) - 1, Number(fields[2]));\n }\n catch (e) {\n return null;\n }\n };\n Utils.serializeDateToYyyyMmDd = function (date, separator) {\n if (!date) {\n return null;\n }\n return date.getFullYear() + separator + Utils.pad(date.getMonth() + 1, 2) + separator + Utils.pad(date.getDate(), 2);\n };\n Utils.pad = function (num, totalStringSize) {\n var asString = num + \"\";\n while (asString.length < totalStringSize) {\n asString = \"0\" + asString;\n }\n return asString;\n };\n Utils.pushAll = function (target, source) {\n if (this.missing(source) || this.missing(target)) {\n return;\n }\n source.forEach(function (func) { return target.push(func); });\n };\n Utils.createArrayOfNumbers = function (first, last) {\n var result = [];\n for (var i = first; i <= last; i++) {\n result.push(i);\n }\n return result;\n };\n Utils.getFunctionParameters = function (func) {\n var fnStr = func.toString().replace(FUNCTION_STRIP_COMMENTS, '');\n var result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(FUNCTION_ARGUMENT_NAMES);\n if (result === null) {\n return [];\n }\n else {\n return result;\n }\n };\n Utils.find = function (collection, predicate, value) {\n if (collection === null || collection === undefined) {\n return null;\n }\n if (!Array.isArray(collection)) {\n var objToArray = this.values(collection);\n return this.find(objToArray, predicate, value);\n }\n var collectionAsArray = collection;\n var firstMatchingItem = null;\n for (var i = 0; i < collectionAsArray.length; i++) {\n var item = collectionAsArray[i];\n if (typeof predicate === 'string') {\n if (item[predicate] === value) {\n firstMatchingItem = item;\n break;\n }\n }\n else {\n var callback = predicate;\n if (callback(item)) {\n firstMatchingItem = item;\n break;\n }\n }\n }\n return firstMatchingItem;\n };\n Utils.toStrings = function (array) {\n return this.map(array, function (item) {\n if (item === undefined || item === null || !item.toString) {\n return null;\n }\n else {\n return item.toString();\n }\n });\n };\n Utils.iterateArray = function (array, callback) {\n for (var index = 0; index < array.length; index++) {\n var value = array[index];\n callback(value, index);\n }\n };\n Utils.findIndex = function (collection, predicate) {\n for (var i = 0; i < collection.length; i++) {\n if (predicate(collection[i], i, collection)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Returns true if it is a DOM node\n * taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n * @param {any} o\n * @return {boolean}\n */\n Utils.isNode = function (o) {\n return (typeof Node === \"function\" ? o instanceof Node :\n o && typeof o === \"object\" && typeof o.nodeType === \"number\" && typeof o.nodeName === \"string\");\n };\n //\n /**\n * Returns true if it is a DOM element\n * taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n * @param {any} o\n * @returns {boolean}\n */\n Utils.isElement = function (o) {\n return (typeof HTMLElement === \"function\" ? o instanceof HTMLElement : //DOM2\n o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\");\n };\n Utils.isNodeOrElement = function (o) {\n return this.isNode(o) || this.isElement(o);\n };\n /**\n * Makes a copy of a node list into a list\n * @param {NodeList} nodeList\n * @returns {Node[]}\n */\n Utils.copyNodeList = function (nodeList) {\n var childCount = nodeList ? nodeList.length : 0;\n var res = [];\n for (var i = 0; i < childCount; i++) {\n res.push(nodeList[i]);\n }\n return res;\n };\n Utils.isEventFromPrintableCharacter = function (event) {\n var pressedChar = String.fromCharCode(event.charCode);\n // newline is an exception, as it counts as a printable character, but we don't\n // want to start editing when it is pressed. without this check, if user is in chrome\n // and editing a cell, and they press ctrl+enter, the cell stops editing, and then\n // starts editing again with a blank value (two 'key down' events are fired). to\n // test this, remove the line below, edit a cell in chrome and hit ctrl+enter while editing.\n // https://ag-grid.atlassian.net/browse/AG-605\n if (this.isKeyPressed(event, constants_1.Constants.KEY_NEW_LINE)) {\n return false;\n }\n // no allowed printable chars have alt or ctrl key combinations\n if (event.altKey || event.ctrlKey) {\n return false;\n }\n if (exports._.exists(event.key)) {\n // modern browser will implement key, so we return if key is length 1, eg if it is 'a' for the\n // a key, or '2' for the '2' key. non-printable characters have names, eg 'Enter' or 'Backspace'.\n var printableCharacter = event.key.length === 1;\n // IE11 & Edge treat the numpad del key differently - with numlock on we get \"Del\" for key,\n // so this addition checks if its IE11/Edge and handles that specific case the same was as all other browsers\n var numpadDelWithNumlockOnForEdgeOrIe = Utils.isNumpadDelWithNumlockOnForEdgeOrIe(event);\n return printableCharacter || numpadDelWithNumlockOnForEdgeOrIe;\n }\n else {\n // otherwise, for older browsers, we test against a list of characters, which doesn't include\n // accents for non-English, but don't care much, as most users are on modern browsers\n return Utils.PRINTABLE_CHARACTERS.indexOf(pressedChar) >= 0;\n }\n };\n /**\n * Allows user to tell the grid to skip specific keyboard events\n * @param {GridOptionsWrapper} gridOptionsWrapper\n * @param {KeyboardEvent} keyboardEvent\n * @param {RowNode} rowNode\n * @param {Column} column\n * @param {boolean} editing\n * @returns {boolean}\n */\n Utils.isUserSuppressingKeyboardEvent = function (gridOptionsWrapper, keyboardEvent, rowNode, column, editing) {\n var gridOptionsFunc = gridOptionsWrapper.getSuppressKeyboardEventFunc();\n var colDefFunc = column.getColDef().suppressKeyboardEvent;\n // if no callbacks provided by user, then do nothing\n if (!gridOptionsFunc && !colDefFunc) {\n return false;\n }\n var params = {\n event: keyboardEvent,\n editing: editing,\n column: column,\n api: gridOptionsWrapper.getApi(),\n node: rowNode,\n data: rowNode.data,\n colDef: column.getColDef(),\n context: gridOptionsWrapper.getContext(),\n columnApi: gridOptionsWrapper.getColumnApi()\n };\n // colDef get first preference on suppressing events\n if (colDefFunc) {\n var colDefFuncResult = colDefFunc(params);\n // if colDef func suppressed, then return now, no need to call gridOption func\n if (colDefFuncResult) {\n return true;\n }\n }\n if (gridOptionsFunc) {\n // if gridOption func, return the result\n return gridOptionsFunc(params);\n }\n else {\n // otherwise return false, don't suppress, as colDef didn't suppress and no func on gridOptions\n return false;\n }\n };\n Utils.getCellCompForEvent = function (gridOptionsWrapper, event) {\n var sourceElement = this.getTarget(event);\n while (sourceElement) {\n var renderedCell = gridOptionsWrapper.getDomData(sourceElement, 'cellComp');\n if (renderedCell) {\n return renderedCell;\n }\n sourceElement = sourceElement.parentElement;\n }\n return null;\n };\n /**\n * Adds all type of change listeners to an element, intended to be a text field\n * @param {HTMLElement} element\n * @param {EventListener} listener\n */\n Utils.addChangeListener = function (element, listener) {\n element.addEventListener(\"changed\", listener);\n element.addEventListener(\"paste\", listener);\n element.addEventListener(\"input\", listener);\n // IE doesn't fire changed for special keys (eg delete, backspace), so need to\n // listen for this further ones\n element.addEventListener(\"keydown\", listener);\n element.addEventListener(\"keyup\", listener);\n };\n /**\n * If value is undefined, null or blank, returns null, otherwise returns the value\n * @param {T} value\n * @returns {T | null}\n */\n Utils.makeNull = function (value) {\n var valueNoType = value;\n if (value === null || value === undefined || valueNoType === \"\") {\n return null;\n }\n return value;\n };\n Utils.missing = function (value) {\n return !this.exists(value);\n };\n Utils.missingOrEmpty = function (value) {\n return !value || this.missing(value) || value.length === 0;\n };\n Utils.missingOrEmptyObject = function (value) {\n return this.missing(value) || Object.keys(value).length === 0;\n };\n Utils.exists = function (value, allowEmptyString) {\n if (allowEmptyString === void 0) { allowEmptyString = false; }\n return value != null && (value !== '' || allowEmptyString);\n };\n Utils.firstExistingValue = function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n if (exports._.exists(value)) {\n return value;\n }\n }\n return null;\n };\n Utils.anyExists = function (values) {\n if (values) {\n for (var i = 0; i < values.length; i++) {\n if (this.exists(values[i])) {\n return true;\n }\n }\n }\n return false;\n };\n Utils.existsAndNotEmpty = function (value) {\n return value != null && this.exists(value) && value.length > 0;\n };\n Utils.clearElement = function (el) {\n while (el && el.firstChild) {\n el.removeChild(el.firstChild);\n }\n };\n Utils.removeElement = function (parent, cssSelector) {\n this.removeFromParent(parent.querySelector(cssSelector));\n };\n Utils.removeFromParent = function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n };\n Utils.isVisible = function (element) {\n return (element.offsetParent !== null);\n };\n Utils.callIfPresent = function (func) {\n if (func) {\n func();\n }\n };\n /**\n * Loads the template and returns it as an element. makes up for no simple way in\n * the dom api to load html directly, eg we cannot do this: document.createElement(template)\n * @param {string} template\n * @returns {HTMLElement}\n */\n Utils.loadTemplate = function (template) {\n var tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = template;\n return tempDiv.firstChild;\n };\n Utils.appendHtml = function (eContainer, htmlTemplate) {\n if (eContainer.lastChild) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML\n // we put the items at the start, so new items appear underneath old items,\n // so when expanding/collapsing groups, the new rows don't go on top of the\n // rows below that are moving our of the way\n eContainer.insertAdjacentHTML('afterbegin', htmlTemplate);\n }\n else {\n eContainer.innerHTML = htmlTemplate;\n }\n };\n Utils.addOrRemoveCssClass = function (element, className, addOrRemove) {\n if (addOrRemove) {\n this.addCssClass(element, className);\n }\n else {\n this.removeCssClass(element, className);\n }\n };\n /**\n * This method adds a class to an element and remove that class from all siblings.\n * Useful for toggling state.\n * @param {HTMLElement} element The element to receive the class\n * @param {string} className The class to be assigned to the element\n * @param {boolean} [inverted] This inverts the effect, adding the class to all siblings and\n * removing from the relevant element (useful when adding a class to hide non-selected elements).\n */\n Utils.radioCssClass = function (element, className, inverted) {\n var parent = element.parentElement;\n var sibling = parent.firstChild;\n while (sibling) {\n exports._.addOrRemoveCssClass(sibling, className, inverted ? (sibling !== element) : (sibling === element));\n sibling = sibling.nextSibling;\n }\n };\n Utils.addCssClass = function (element, className) {\n var _this = this;\n if (!className || className.length === 0) {\n return;\n }\n if (className.indexOf(' ') >= 0) {\n className.split(' ').forEach(function (value) { return _this.addCssClass(element, value); });\n return;\n }\n if (element.classList) {\n if (!element.classList.contains(className)) {\n element.classList.add(className);\n }\n }\n else {\n if (element.className && element.className.length > 0) {\n var cssClasses = element.className.split(' ');\n if (cssClasses.indexOf(className) < 0) {\n cssClasses.push(className);\n element.setAttribute('class', cssClasses.join(' '));\n }\n }\n else {\n // do not use element.classList = className here, it will cause\n // a read-only assignment error on some browsers (IE/Edge).\n element.setAttribute('class', className);\n }\n }\n };\n Utils.removeCssClass = function (element, className) {\n if (element.classList) {\n if (element.classList.contains(className)) {\n element.classList.remove(className);\n }\n }\n else {\n if (element.className && element.className.length > 0) {\n var cssClasses = element.className.split(' ');\n if (cssClasses.indexOf(className) >= 0) {\n // remove all instances of the item, not just the first, in case it's in more than once\n while (cssClasses.indexOf(className) >= 0) {\n cssClasses.splice(cssClasses.indexOf(className), 1);\n }\n element.setAttribute('class', cssClasses.join(' '));\n }\n }\n }\n };\n Utils.containsClass = function (element, className) {\n if (element.classList) {\n // for modern browsers\n return element.classList.contains(className);\n }\n else if (element.className) {\n // for older browsers, check against the string of class names\n // if only one class, can check for exact match\n var onlyClass = element.className === className;\n // if many classes, check for class name, we have to pad with ' ' to stop other\n // class names that are a substring of this class\n var contains = element.className.indexOf(' ' + className + ' ') >= 0;\n // the padding above then breaks when it's the first or last class names\n var startsWithClass = element.className.indexOf(className + ' ') === 0;\n var endsWithClass = element.className.lastIndexOf(' ' + className) === (element.className.length - className.length - 1);\n return onlyClass || contains || startsWithClass || endsWithClass;\n }\n else {\n // if item is not a node\n return false;\n }\n };\n Utils.getElementAttribute = function (element, attributeName) {\n if (element.attributes) {\n if (element.attributes[attributeName]) {\n var attribute = element.attributes[attributeName];\n return attribute.value;\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n };\n Utils.offsetHeight = function (element) {\n return element && element.clientHeight ? element.clientHeight : 0;\n };\n Utils.offsetWidth = function (element) {\n return element && element.clientWidth ? element.clientWidth : 0;\n };\n Utils.sortNumberArray = function (numberArray) {\n numberArray.sort(function (a, b) { return a - b; });\n };\n Utils.removeRepeatsFromArray = function (array, object) {\n if (!array) {\n return;\n }\n for (var index = array.length - 2; index >= 0; index--) {\n var thisOneMatches = array[index] === object;\n var nextOneMatches = array[index + 1] === object;\n if (thisOneMatches && nextOneMatches) {\n array.splice(index + 1, 1);\n }\n }\n };\n Utils.removeFromArray = function (array, object) {\n var index = array.indexOf(object);\n if (index >= 0) {\n array.splice(index, 1);\n }\n };\n Utils.removeAllFromArray = function (array, toRemove) {\n toRemove.forEach(function (item) {\n var index = array.indexOf(item);\n if (index >= 0) {\n array.splice(index, 1);\n }\n });\n };\n Utils.insertIntoArray = function (array, object, toIndex) {\n array.splice(toIndex, 0, object);\n };\n Utils.insertArrayIntoArray = function (dest, src, toIndex) {\n if (this.missing(dest) || this.missing(src)) {\n return;\n }\n // put items in backwards, otherwise inserted items end up in reverse order\n for (var i = src.length - 1; i >= 0; i--) {\n var item = src[i];\n this.insertIntoArray(dest, item, toIndex);\n }\n };\n Utils.moveInArray = function (array, objectsToMove, toIndex) {\n var _this = this;\n // first take out it items from the array\n objectsToMove.forEach(function (obj) {\n _this.removeFromArray(array, obj);\n });\n // now add the objects, in same order as provided to us, that means we start at the end\n // as the objects will be pushed to the right as they are inserted\n objectsToMove.slice().reverse().forEach(function (obj) {\n _this.insertIntoArray(array, obj, toIndex);\n });\n };\n Utils.defaultComparator = function (valueA, valueB, accentedCompare) {\n if (accentedCompare === void 0) { accentedCompare = false; }\n var valueAMissing = valueA === null || valueA === undefined;\n var valueBMissing = valueB === null || valueB === undefined;\n // this is for aggregations sum and avg, where the result can be a number that is wrapped.\n // if we didn't do this, then the toString() value would be used, which would result in\n // the strings getting used instead of the numbers.\n if (valueA && valueA.toNumber) {\n valueA = valueA.toNumber();\n }\n if (valueB && valueB.toNumber) {\n valueB = valueB.toNumber();\n }\n if (valueAMissing && valueBMissing) {\n return 0;\n }\n if (valueAMissing) {\n return -1;\n }\n if (valueBMissing) {\n return 1;\n }\n if (typeof valueA === \"string\") {\n if (!accentedCompare) {\n return doQuickCompare(valueA, valueB);\n }\n else {\n try {\n // using local compare also allows chinese comparisons\n return valueA.localeCompare(valueB);\n }\n catch (e) {\n // if something wrong with localeCompare, eg not supported\n // by browser, then just continue with the quick one\n return doQuickCompare(valueA, valueB);\n }\n }\n }\n if (valueA < valueB) {\n return -1;\n }\n else if (valueA > valueB) {\n return 1;\n }\n else {\n return 0;\n }\n function doQuickCompare(a, b) {\n return (a > b ? 1 : (a < b ? -1 : 0));\n }\n };\n Utils.last = function (arr) {\n if (!arr || !arr.length) {\n return undefined;\n }\n return arr[arr.length - 1];\n };\n Utils.compareArrays = function (array1, array2) {\n if (this.missing(array1) && this.missing(array2)) {\n return true;\n }\n if ((this.missing(array1) || this.missing(array2)) ||\n (!array1 || !array2)) {\n return false;\n }\n if (array1.length !== array2.length) {\n return false;\n }\n for (var i = 0; i < array1.length; i++) {\n if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n };\n Utils.ensureDomOrder = function (eContainer, eChild, eChildBefore) {\n // if already in right order, do nothing\n if (eChildBefore && eChildBefore.nextSibling === eChild) {\n return;\n }\n if (eChildBefore) {\n if (eChildBefore.nextSibling) {\n // insert between the eRowBefore and the row after it\n eContainer.insertBefore(eChild, eChildBefore.nextSibling);\n }\n else {\n // if nextSibling is missing, means other row is at end, so just append new row at the end\n eContainer.appendChild(eChild);\n }\n }\n else {\n // otherwise put at start\n if (eContainer.firstChild && eContainer.firstChild !== eChild) {\n // insert it at the first location\n eContainer.insertAdjacentElement('afterbegin', eChild);\n }\n }\n };\n Utils.insertWithDomOrder = function (eContainer, eChild, eChildBefore) {\n if (eChildBefore) {\n if (eChildBefore.nextSibling) {\n // insert between the eRowBefore and the row after it\n eContainer.insertBefore(eChild, eChildBefore.nextSibling);\n }\n else {\n // if nextSibling is missing, means other row is at end, so just append new row at the end\n eContainer.appendChild(eChild);\n }\n }\n else {\n if (eContainer.firstChild) {\n // insert it at the first location\n eContainer.insertBefore(eChild, eContainer.firstChild);\n }\n else {\n // otherwise eContainer is empty, so just append it\n eContainer.appendChild(eChild);\n }\n }\n };\n Utils.insertTemplateWithDomOrder = function (eContainer, htmlTemplate, eChildBefore) {\n var res;\n if (eChildBefore) {\n // if previous element exists, just slot in after the previous element\n eChildBefore.insertAdjacentHTML('afterend', htmlTemplate);\n res = eChildBefore.nextSibling;\n }\n else {\n if (eContainer.firstChild) {\n // insert it at the first location\n eContainer.insertAdjacentHTML('afterbegin', htmlTemplate);\n }\n else {\n // otherwise eContainer is empty, so just append it\n eContainer.innerHTML = htmlTemplate;\n }\n res = eContainer.firstChild;\n }\n return res;\n };\n Utils.every = function (items, callback) {\n if (!items || items.length === 0) {\n return true;\n }\n for (var i = 0; i < items.length; i++) {\n if (!callback(items[i])) {\n return false;\n }\n }\n return true;\n };\n Utils.toStringOrNull = function (value) {\n if (this.exists(value) && value.toString) {\n return value.toString();\n }\n else {\n return null;\n }\n };\n Utils.formatSize = function (size) {\n if (typeof size === \"number\") {\n return size + \"px\";\n }\n else {\n return size;\n }\n };\n Utils.formatNumberTwoDecimalPlacesAndCommas = function (value) {\n if (typeof value !== 'number') {\n return '';\n }\n // took this from: http://blog.tompawlak.org/number-currency-formatting-javascript\n return (Math.round(value * 100) / 100).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1,\");\n };\n /**\n * the native method number.toLocaleString(undefined, {minimumFractionDigits: 0})\n * puts in decimal places in IE, so we use this method instead\n * from: http://blog.tompawlak.org/number-currency-formatting-javascript\n * @param {number} value\n * @returns {string}\n */\n Utils.formatNumberCommas = function (value) {\n if (typeof value !== 'number') {\n return '';\n }\n return value.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1,\");\n };\n Utils.prependDC = function (parent, documentFragment) {\n if (this.exists(parent.firstChild)) {\n parent.insertBefore(documentFragment, parent.firstChild);\n }\n else {\n parent.appendChild(documentFragment);\n }\n };\n /**\n * If icon provided, use this (either a string, or a function callback).\n * if not, then use the default icon from the theme\n * @param {string} iconName\n * @param {GridOptionsWrapper} gridOptionsWrapper\n * @param {Column | null} [column]\n * @returns {HTMLElement}\n */\n Utils.createIcon = function (iconName, gridOptionsWrapper, column) {\n var iconContents = this.createIconNoSpan(iconName, gridOptionsWrapper, column);\n if (iconContents.className.indexOf('ag-icon') > -1) {\n return iconContents;\n }\n else {\n var eResult = document.createElement('span');\n eResult.appendChild(iconContents);\n return eResult;\n }\n };\n Utils.createIconNoSpan = function (iconName, gridOptionsWrapper, column, forceCreate) {\n var userProvidedIcon = null;\n // check col for icon first\n var icons = column && column.getColDef().icons;\n if (icons) {\n userProvidedIcon = icons[iconName];\n }\n // if not in col, try grid options\n if (gridOptionsWrapper && !userProvidedIcon) {\n var optionsIcons = gridOptionsWrapper.getIcons();\n if (optionsIcons) {\n userProvidedIcon = optionsIcons[iconName];\n }\n }\n // now if user provided, use it\n if (userProvidedIcon) {\n var rendererResult = void 0;\n if (typeof userProvidedIcon === 'function') {\n rendererResult = userProvidedIcon();\n }\n else if (typeof userProvidedIcon === 'string') {\n rendererResult = userProvidedIcon;\n }\n else {\n throw new Error('icon from grid options needs to be a string or a function');\n }\n if (typeof rendererResult === 'string') {\n return this.loadTemplate(rendererResult);\n }\n else if (this.isNodeOrElement(rendererResult)) {\n return rendererResult;\n }\n else {\n throw new Error('iconRenderer should return back a string or a dom object');\n }\n }\n else {\n var span = document.createElement('span');\n var cssClass = this.iconNameClassMap[iconName];\n if (!cssClass) {\n if (!forceCreate) {\n throw new Error(iconName + \" did not find class\");\n }\n else {\n cssClass = iconName;\n }\n }\n span.setAttribute(\"class\", \"ag-icon ag-icon-\" + cssClass);\n span.setAttribute(\"unselectable\", \"on\");\n return span;\n }\n };\n Utils.addStylesToElement = function (eElement, styles) {\n var _this = this;\n if (!styles) {\n return;\n }\n Object.keys(styles).forEach(function (key) {\n var keyCamelCase = _this.hyphenToCamelCase(key);\n if (keyCamelCase) {\n eElement.style[keyCamelCase] = styles[key];\n }\n });\n };\n Utils.isHorizontalScrollShowing = function (element) {\n return element.clientWidth < element.scrollWidth;\n };\n Utils.isVerticalScrollShowing = function (element) {\n return element.clientHeight < element.scrollHeight;\n };\n Utils.getMaxDivHeight = function () {\n if (!document.body) {\n return -1;\n }\n var res = 1000000;\n // FF reports the height back but still renders blank after ~6M px\n var testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\n var div = this.loadTemplate(\"
\");\n document.body.appendChild(div);\n while (true) {\n var test = res * 2;\n div.style.height = test + 'px';\n if (test > testUpTo || div.clientHeight !== test) {\n break;\n }\n else {\n res = test;\n }\n }\n document.body.removeChild(div);\n return res;\n };\n Utils.getScrollbarWidth = function () {\n var body = document.body;\n var div = document.createElement(\"div\");\n div.style.width = div.style.height = \"100px\";\n div.style.opacity = \"0\";\n div.style.overflow = \"scroll\";\n div.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\n div.style.position = \"absolute\";\n body.appendChild(div);\n var width = div.offsetWidth - div.clientWidth;\n // remove divs\n if (div.parentNode) {\n div.parentNode.removeChild(div);\n }\n return width;\n };\n Utils.hasOverflowScrolling = function () {\n var prefixes = ['webkit', 'moz', 'o', 'ms'];\n var div = document.createElement('div');\n var body = document.getElementsByTagName('body')[0];\n var found = false;\n var p;\n body.appendChild(div);\n div.setAttribute('style', prefixes.map(function (prefix) { return \"-\" + prefix + \"-overflow-scrolling: touch\"; }).concat('overflow-scrolling: touch').join(';'));\n var computedStyle = window.getComputedStyle(div);\n if (computedStyle.overflowScrolling === 'touch') {\n found = true;\n }\n if (!found) {\n for (var _i = 0, prefixes_1 = prefixes; _i < prefixes_1.length; _i++) {\n p = prefixes_1[_i];\n if (computedStyle[p + \"OverflowScrolling\"] === 'touch') {\n found = true;\n break;\n }\n }\n }\n if (div.parentNode) {\n div.parentNode.removeChild(div);\n }\n return found;\n };\n Utils.isKeyPressed = function (event, keyToCheck) {\n var pressedKey = event.which || event.keyCode;\n return pressedKey === keyToCheck;\n };\n Utils.isCharacterKey = function (event) {\n // from: https://stackoverflow.com/questions/4179708/how-to-detect-if-the-pressed-key-will-produce-a-character-inside-an-input-text\n var which = event.which;\n if (typeof which === 'number' && which) {\n return !event.ctrlKey && !event.metaKey && !event.altKey && event.which !== 8 && event.which !== 16;\n }\n return which === undefined;\n };\n Utils.setDisplayed = function (element, displayed) {\n this.addOrRemoveCssClass(element, 'ag-hidden', !displayed);\n };\n Utils.setVisible = function (element, visible) {\n this.addOrRemoveCssClass(element, 'ag-invisible', !visible);\n };\n Utils.setElementWidth = function (element, width) {\n if (width === 'flex') {\n element.style.width = null;\n element.style.minWidth = null;\n element.style.maxWidth = null;\n element.style.flex = '1 1 auto';\n }\n else {\n this.setFixedWidth(element, width);\n }\n };\n Utils.setFixedWidth = function (element, width) {\n width = this.formatSize(width);\n element.style.width = width;\n element.style.maxWidth = width;\n element.style.minWidth = width;\n };\n Utils.setElementHeight = function (element, height) {\n if (height === 'flex') {\n element.style.height = null;\n element.style.minHeight = null;\n element.style.maxHeight = null;\n element.style.flex = '1 1 auto';\n }\n else {\n this.setFixedHeight(element, height);\n }\n };\n Utils.setFixedHeight = function (element, height) {\n height = this.formatSize(height);\n element.style.height = height;\n element.style.maxHeight = height;\n element.style.minHeight = height;\n };\n Utils.isBrowserIE = function () {\n if (this.isIE === undefined) {\n this.isIE = /*@cc_on!@*/ false || !!document.documentMode; // At least IE6\n }\n return this.isIE;\n };\n Utils.isBrowserEdge = function () {\n if (this.isEdge === undefined) {\n this.isEdge = !this.isBrowserIE() && !!window.StyleMedia;\n }\n return this.isEdge;\n };\n Utils.isBrowserSafari = function () {\n if (this.isSafari === undefined) {\n var anyWindow = window;\n // taken from https://github.com/ag-grid/ag-grid/issues/550\n this.isSafari = Object.prototype.toString.call(anyWindow.HTMLElement).indexOf('Constructor') > 0\n || (function (p) {\n return p ? p.toString() === \"[object SafariRemoteNotification]\" : false;\n })(!anyWindow.safari || anyWindow.safari.pushNotification);\n }\n return this.isSafari;\n };\n Utils.isBrowserChrome = function () {\n if (this.isChrome === undefined) {\n var win = window;\n this.isChrome = (!!win.chrome && (!!win.chrome.webstore || !!win.chrome.runtime)) ||\n (/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor));\n }\n return this.isChrome;\n };\n Utils.isBrowserFirefox = function () {\n if (this.isFirefox === undefined) {\n var win = window;\n this.isFirefox = typeof win.InstallTrigger !== 'undefined';\n }\n return this.isFirefox;\n };\n Utils.isUserAgentIPad = function () {\n if (this.isIPad === undefined) {\n // taken from https://davidwalsh.name/detect-ipad\n this.isIPad = navigator.userAgent.match(/iPad|iPhone/i) != null;\n }\n return this.isIPad;\n };\n /**\n * srcElement is only available in IE. In all other browsers it is target\n * http://stackoverflow.com/questions/5301643/how-can-i-make-event-srcelement-work-in-firefox-and-what-does-it-mean\n * @param {Event} event\n * @returns {Element}\n */\n Utils.getTarget = function (event) {\n var eventNoType = event;\n return eventNoType.target || eventNoType.srcElement;\n };\n Utils.isElementChildOfClass = function (element, cls, maxNest) {\n var counter = 0;\n while (element) {\n if (this.containsClass(element, cls)) {\n return true;\n }\n element = element.parentElement;\n if (maxNest && ++counter > maxNest) {\n break;\n }\n }\n return false;\n };\n Utils.isElementInEventPath = function (element, event) {\n if (!event || !element) {\n return false;\n }\n var path = exports._.getEventPath(event);\n return path.indexOf(element) >= 0;\n };\n Utils.isFunction = function (val) {\n return !!(val && val.constructor && val.call && val.apply);\n };\n Utils.createEventPath = function (event) {\n var res = [];\n var pointer = exports._.getTarget(event);\n while (pointer) {\n res.push(pointer);\n pointer = pointer.parentElement;\n }\n return res;\n };\n /**\n * firefox doesn't have event.path set, or any alternative to it, so we hack\n * it in. this is needed as it's to late to work out the path when the item is\n * removed from the dom. used by MouseEventService, where it works out if a click\n * was from the current grid, or a detail grid (master / detail).\n * @param {Event} event\n */\n Utils.addAgGridEventPath = function (event) {\n event.__agGridEventPath = this.getEventPath(event);\n };\n /**\n * Gets the path for an Event.\n * https://stackoverflow.com/questions/39245488/event-path-undefined-with-firefox-and-vue-js\n * https://developer.mozilla.org/en-US/docs/Web/API/Event\n * @param {Event} event\n * @returns {EventTarget[]}\n */\n Utils.getEventPath = function (event) {\n var eventNoType = event;\n if (eventNoType.deepPath) {\n // IE supports deep path\n return eventNoType.deepPath();\n }\n else if (eventNoType.path) {\n // Chrome supports path\n return eventNoType.path;\n }\n else if (eventNoType.composedPath) {\n // Firefox supports composePath\n return eventNoType.composedPath();\n }\n else if (eventNoType.__agGridEventPath) {\n // Firefox supports composePath\n return eventNoType.__agGridEventPath;\n }\n else {\n // and finally, if none of the above worked,\n // we create the path ourselves\n return this.createEventPath(event);\n }\n };\n Utils.forEachSnapshotFirst = function (list, callback) {\n if (list) {\n var arrayCopy = list.slice(0);\n arrayCopy.forEach(callback);\n }\n };\n /**\n * Gets the document body width\n * from: http://stackoverflow.com/questions/1038727/how-to-get-browser-width-using-javascript-code\n * @returns {number}\n */\n Utils.getBodyWidth = function () {\n if (document.body) {\n return document.body.clientWidth;\n }\n if (window.innerHeight) {\n return window.innerWidth;\n }\n if (document.documentElement && document.documentElement.clientWidth) {\n return document.documentElement.clientWidth;\n }\n return -1;\n };\n /**\n * Gets the body height\n * from: http://stackoverflow.com/questions/1038727/how-to-get-browser-width-using-javascript-code\n * @returns {number}\n */\n Utils.getBodyHeight = function () {\n if (document.body) {\n return document.body.clientHeight;\n }\n if (window.innerHeight) {\n return window.innerHeight;\n }\n if (document.documentElement && document.documentElement.clientHeight) {\n return document.documentElement.clientHeight;\n }\n return -1;\n };\n Utils.setCheckboxState = function (eCheckbox, state) {\n if (typeof state === 'boolean') {\n eCheckbox.checked = state;\n eCheckbox.indeterminate = false;\n }\n else {\n // isNodeSelected returns back undefined if it's a group and the children\n // are a mix of selected and unselected\n eCheckbox.indeterminate = true;\n }\n };\n Utils.traverseNodesWithKey = function (nodes, callback) {\n var keyParts = [];\n recursiveSearchNodes(nodes);\n function recursiveSearchNodes(currentNodes) {\n currentNodes.forEach(function (node) {\n // also checking for children for tree data\n if (node.group || node.hasChildren()) {\n keyParts.push(node.key);\n var key = keyParts.join('|');\n callback(node, key);\n recursiveSearchNodes(node.childrenAfterGroup);\n keyParts.pop();\n }\n });\n }\n };\n /**\n * Converts a camelCase string into hyphenated string\n * from https://gist.github.com/youssman/745578062609e8acac9f\n * @param {string} str\n * @return {string}\n */\n Utils.camelCaseToHyphen = function (str) {\n if (str === null || str === undefined) {\n return null;\n }\n return str.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase(); });\n };\n /**\n * Converts a hyphenated string into camelCase string\n * from https://stackoverflow.com/questions/6660977/convert-hyphens-to-camel-case-camelcase\n * @param {string} str\n * @return {string}\n */\n Utils.hyphenToCamelCase = function (str) {\n if (str === null || str === undefined) {\n return null;\n }\n return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\n };\n Utils.capitalise = function (str) {\n return str[0].toUpperCase() + str.substr(1).toLowerCase();\n };\n /**\n * Converts a CSS object into string\n * @param {Object} stylesToUse an object eg: {color: 'black', top: '25px'}\n * @return {string} A string like \"color: black; top: 25px;\" for html\n */\n Utils.cssStyleObjectToMarkup = function (stylesToUse) {\n var _this = this;\n if (!stylesToUse) {\n return '';\n }\n var resParts = [];\n this.iterateObject(stylesToUse, function (styleKey, styleValue) {\n var styleKeyDashed = _this.camelCaseToHyphen(styleKey);\n resParts.push(styleKeyDashed + \": \" + styleValue + \";\");\n });\n return resParts.join(' ');\n };\n /**\n * Check if a value is numeric\n * from http://stackoverflow.com/questions/9716468/is-there-any-function-like-isnumeric-in-javascript-to-validate-numbers\n * @param {any} value\n * @return {boolean}\n */\n Utils.isNumeric = function (value) {\n if (value === '') {\n return false;\n }\n return !isNaN(parseFloat(value)) && isFinite(value);\n };\n Utils.escape = function (toEscape) {\n if (toEscape === null || toEscape === undefined || !toEscape.replace) {\n return toEscape;\n }\n return toEscape.replace(reUnescapedHtml, function (chr) { return HTML_ESCAPES[chr]; });\n };\n /**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n * from: https://github.com/facebook/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js\n * @param {any} event\n * @return {any}\n */\n Utils.normalizeWheel = function (event) {\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n // spinX, spinY\n var sX = 0;\n var sY = 0;\n // pixelX, pixelY\n var pX = 0;\n var pY = 0;\n // Legacy\n if ('detail' in event) {\n sY = event.detail;\n }\n if ('wheelDelta' in event) {\n sY = -event.wheelDelta / 120;\n }\n if ('wheelDeltaY' in event) {\n sY = -event.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in event) {\n sX = -event.wheelDeltaX / 120;\n }\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in event) {\n pY = event.deltaY;\n }\n if ('deltaX' in event) {\n pX = event.deltaX;\n }\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n }\n else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n };\n /**\n * from https://stackoverflow.com/questions/24004791/can-someone-explain-the-debounce-function-in-javascript\n * @param {Function} func The function to be debounced\n * @param {number} wait The time in ms to debounce\n * @param {boolean} immediate If it should run immediately or wait for the initial debounce delay\n * @return {Function} The debounced function\n */\n Utils.debounce = function (func, wait, immediate) {\n if (immediate === void 0) { immediate = false; }\n // 'private' variable for instance\n // The returned function will be able to reference this due to closure.\n // Each call to the returned function will share this common timer.\n var timeout;\n // Calling debounce returns a new anonymous function\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // reference the context and args for the setTimeout function\n var context = this;\n // Should the function be called now? If immediate is true\n // and not already in a timeout then the answer is: Yes\n var callNow = immediate && !timeout;\n // This is the basic debounce behaviour where you can call this\n // function several times, but it will only execute once\n // [before or after imposing a delay].\n // Each time the returned function is called, the timer starts over.\n window.clearTimeout(timeout);\n // Set the new timeout\n timeout = window.setTimeout(function () {\n // Inside the timeout function, clear the timeout variable\n // which will let the next execution run when in 'immediate' mode\n timeout = null;\n // Check if the function already ran with the immediate flag\n if (!immediate) {\n // Call the original function with apply\n // apply lets you define the 'this' object as well as the arguments\n // (both captured before setTimeout)\n func.apply(context, args);\n }\n }, wait);\n // Immediate mode and no wait timer? Execute the function..\n if (callNow) {\n func.apply(context, args);\n }\n };\n };\n /**\n * a user once raised an issue - they said that when you opened a popup (eg context menu)\n * and then clicked on a selection checkbox, the popup wasn't closed. this is because the\n * popup listens for clicks on the body, however ag-grid WAS stopping propagation on the\n * checkbox clicks (so the rows didn't pick them up as row selection selection clicks).\n * to get around this, we have a pattern to stop propagation for the purposes of ag-Grid,\n * but we still let the event pass back to teh body.\n * @param {Event} event\n */\n Utils.stopPropagationForAgGrid = function (event) {\n event[AG_GRID_STOP_PROPAGATION] = true;\n };\n Utils.isStopPropagationForAgGrid = function (event) {\n return event[AG_GRID_STOP_PROPAGATION] === true;\n };\n Utils.executeInAWhile = function (funcs) {\n this.executeAfter(funcs, 400);\n };\n Utils.executeNextVMTurn = function (funcs) {\n this.executeAfter(funcs, 0);\n };\n Utils.executeAfter = function (funcs, millis) {\n if (funcs.length > 0) {\n window.setTimeout(function () {\n funcs.forEach(function (func) { return func(); });\n }, millis);\n }\n };\n Utils.referenceCompare = function (left, right) {\n if (left == null && right == null) {\n return true;\n }\n if (left == null && right) {\n return false;\n }\n if (left && right == null) {\n return false;\n }\n return left === right;\n };\n Utils.get = function (source, expression, defaultValue) {\n if (source == null) {\n return defaultValue;\n }\n if (expression.indexOf('.') > -1) {\n var fields = expression.split('.');\n var thisKey = fields[0];\n var nextValue_1 = source[thisKey];\n if (nextValue_1 != null) {\n return Utils.get(nextValue_1, fields.slice(1, fields.length).join('.'), defaultValue);\n }\n return defaultValue;\n }\n var nextValue = source[expression];\n return nextValue != null ? nextValue : defaultValue;\n };\n Utils.addSafePassiveEventListener = function (frameworkOverrides, eElement, event, listener) {\n var isPassive = Utils.PASSIVE_EVENTS.indexOf(event) >= 0;\n var isOutsideAngular = Utils.OUTSIDE_ANGULAR_EVENTS.indexOf(event) >= 0;\n var options = isPassive ? { passive: true } : undefined;\n if (isOutsideAngular) {\n frameworkOverrides.addEventListenerOutsideAngular(eElement, event, listener, options);\n }\n else {\n eElement.addEventListener(event, listener, options);\n }\n };\n /**\n * Converts a camelCase string into regular text\n * from: https://stackoverflow.com/questions/15369566/putting-space-in-camel-case-string-using-regular-expression\n * @param {string} camelCase\n * @return {string}\n */\n Utils.camelCaseToHumanText = function (camelCase) {\n if (!camelCase || camelCase == null) {\n return null;\n }\n var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;\n var words = camelCase.replace(rex, '$1$4 $2$3$5').replace('.', ' ').split(' ');\n return words.map(function (word) { return word.substring(0, 1).toUpperCase() + ((word.length > 1) ? word.substring(1, word.length) : ''); }).join(' ');\n };\n /**\n * Displays a message to the browser. this is useful in iPad, where you can't easily see the console.\n * so the javascript code can use this to give feedback. this is NOT intended to be called in production.\n * it is intended the ag-Grid developer calls this to troubleshoot, but then takes out the calls before\n * checking in.\n * @param {string} msg\n */\n Utils.message = function (msg) {\n var eMessage = document.createElement('div');\n eMessage.innerHTML = msg;\n var eBox = document.querySelector('#__ag__message');\n if (!eBox) {\n var template = \"\";\n eBox = this.loadTemplate(template);\n if (document.body) {\n document.body.appendChild(eBox);\n }\n }\n eBox.insertBefore(eMessage, eBox.children[0]);\n // eBox.appendChild(eMessage);\n };\n /**\n * Gets called by: a) ClientSideNodeManager and b) GroupStage to do sorting.\n * when in ClientSideNodeManager we always have indexes (as this sorts the items the\n * user provided) but when in GroupStage, the nodes can contain filler nodes that\n * don't have order id's\n * @param {RowNode[]} rowNodes\n * @param {Object} rowNodeOrder\n */\n Utils.sortRowNodesByOrder = function (rowNodes, rowNodeOrder) {\n if (!rowNodes) {\n return;\n }\n var comparator = function (nodeA, nodeB) {\n var positionA = rowNodeOrder[nodeA.id];\n var positionB = rowNodeOrder[nodeB.id];\n var aHasIndex = positionA !== undefined;\n var bHasIndex = positionB !== undefined;\n var bothNodesAreUserNodes = aHasIndex && bHasIndex;\n var bothNodesAreFillerNodes = !aHasIndex && !bHasIndex;\n if (bothNodesAreUserNodes) {\n // when comparing two nodes the user has provided, they always\n // have indexes\n return positionA - positionB;\n }\n else if (bothNodesAreFillerNodes) {\n // when comparing two filler nodes, we have no index to compare them\n // against, however we want this sorting to be deterministic, so that\n // the rows don't jump around as the user does delta updates. so we\n // want the same sort result. so we use the __objectId - which doesn't make sense\n // from a sorting point of view, but does give consistent behaviour between\n // calls. otherwise groups jump around as delta updates are done.\n // note: previously here we used nodeId, however this gave a strange order\n // as string ordering of numbers is wrong, so using id based on creation order\n // as least gives better looking order.\n return nodeA.__objectId - nodeB.__objectId;\n }\n else if (aHasIndex) {\n return 1;\n }\n return -1;\n };\n // const a = new Date().getTime();\n // check if the list first needs sorting\n var rowNodeA;\n var rowNodeB;\n var atLeastOneOutOfOrder = false;\n for (var i = 0; i < rowNodes.length - 1; i++) {\n rowNodeA = rowNodes[i];\n rowNodeB = rowNodes[i + 1];\n if (comparator(rowNodeA, rowNodeB) > 0) {\n atLeastOneOutOfOrder = true;\n break;\n }\n }\n // const b = new Date().getTime();\n if (atLeastOneOutOfOrder) {\n rowNodes.sort(comparator);\n }\n // const c = new Date().getTime();\n // console.log(`${this.count}: ${rowNodes.length} items, ${b-a}ms ${atLeastOneOutOfOrder} ${c-b}ms`);\n };\n Utils.fuzzyCheckStrings = function (inputValues, validValues, allSuggestions) {\n var _this = this;\n var fuzzyMatches = {};\n var invalidInputs = inputValues.filter(function (inputValue) {\n return !validValues.some(function (validValue) { return validValue === inputValue; });\n });\n if (invalidInputs.length > 0) {\n invalidInputs.forEach(function (invalidInput) {\n return fuzzyMatches[invalidInput] = _this.fuzzySuggestions(invalidInput, allSuggestions);\n });\n }\n return fuzzyMatches;\n };\n /**\n *\n * @param {String} inputValue The value to be compared against a list of strings\n * @param allSuggestions The list of strings to be compared against\n * @param hideIrrelevant By default, fuzzy suggestions will just sort the allSuggestions list, set this to true\n * to filter out the irrelevant values\n * @param weighted Set this to true, to make letters matched in the order they were typed have priority in the results.\n */\n Utils.fuzzySuggestions = function (inputValue, allSuggestions, hideIrrelevant, weighted) {\n var search = weighted ? exports._.string_weighted_distances : exports._.string_distances;\n var thisSuggestions = allSuggestions.map(function (text) { return ({\n value: text,\n relevance: search(inputValue.toLowerCase(), text.toLocaleLowerCase())\n }); });\n thisSuggestions.sort(function (a, b) {\n return b.relevance - a.relevance;\n });\n if (hideIrrelevant) {\n thisSuggestions = thisSuggestions.filter(function (suggestion) { return suggestion.relevance !== 0; });\n }\n return thisSuggestions.map(function (suggestion) { return suggestion.value; });\n };\n /**\n * Algorithm to do fuzzy search\n * from https://stackoverflow.com/questions/23305000/javascript-fuzzy-search-that-makes-sense\n * @param {string} from\n * @return {[]}\n */\n Utils.get_bigrams = function (from) {\n var s = from.toLowerCase();\n var v = new Array(s.length - 1);\n var i;\n var j;\n var ref;\n for (i = j = 0, ref = v.length; j <= ref; i = j += 1) {\n v[i] = s.slice(i, i + 2);\n }\n return v;\n };\n Utils.string_distances = function (str1, str2) {\n if (str1.length === 0 && str2.length === 0) {\n return 0;\n }\n var pairs1 = exports._.get_bigrams(str1);\n var pairs2 = exports._.get_bigrams(str2);\n var union = pairs1.length + pairs2.length;\n var hit_count = 0;\n var j;\n var len;\n for (j = 0, len = pairs1.length; j < len; j++) {\n var x = pairs1[j];\n var k = void 0;\n var len1 = void 0;\n for (k = 0, len1 = pairs2.length; k < len1; k++) {\n var y = pairs2[k];\n if (x === y) {\n hit_count++;\n }\n }\n }\n return hit_count > 0 ? (2 * hit_count) / union : 0;\n };\n Utils.string_weighted_distances = function (str1, str2) {\n var a = str1.replace(/\\s/g, '');\n var b = str2.replace(/\\s/g, '');\n var weight = 0;\n var lastIndex = 0;\n for (var i = 0; i < a.length; i++) {\n var idx = b.indexOf(a[i]);\n if (idx === -1) {\n continue;\n }\n lastIndex = idx;\n weight += ((b.length - lastIndex) * 100) / b.length;\n weight *= weight;\n }\n return weight;\n };\n Utils.isNumpadDelWithNumlockOnForEdgeOrIe = function (event) {\n if (Utils.isBrowserEdge() || Utils.isBrowserIE()) {\n return event.key === Utils.NUMPAD_DEL_NUMLOCK_ON_KEY &&\n event.charCode === Utils.NUMPAD_DEL_NUMLOCK_ON_CHARCODE;\n }\n return false;\n };\n /**\n * cell renderers are used in a few places. they bind to dom slightly differently to other cell renderes as they\n * can return back strings (instead of html elemnt) in the getGui() method. common code placed here to handle that.\n * @param {Promise