{"version":3,"sources":["tslib.js","tools.js","Client/tools/constants.ts","Client/tools/color.ts","Client/tools/extensions.ts","Client/tools/kb-event.ts","Client/tools/logger.ts","Client/tools/utils.ts","Client/tools/map.ts","Client/tools/message-dispatcher.ts","Client/tools/search-utils.ts","Client/tools/units.ts","_tools-shim.js"],"names":["__extends","__assign","__rest","__decorate","__param","__esDecorate","__runInitializers","__propKey","__setFunctionName","__metadata","__awaiter","__generator","__exportStar","__values","__read","__spread","__spreadArrays","__spreadArray","__await","__asyncGenerator","__asyncDelegator","__asyncValues","__makeTemplateObject","__importStar","__importDefault","__classPrivateFieldGet","__classPrivateFieldSet","__classPrivateFieldIn","__createBinding","__addDisposableResource","__disposeResources","factory","root","global","self","this","createExporter","exports","previous","Object","create","defineProperty","value","__esModule","id","v","define","amd","module","exporter","extendStatics","setPrototypeOf","__proto__","Array","d","b","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","assign","t","s","i","n","arguments","length","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","paramIndex","decorator","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","f","_","kind","descriptor","name","done","context","access","addInitializer","push","result","get","set","init","unshift","thisArg","useValue","x","concat","prefix","description","configurable","metadataKey","metadataValue","metadata","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","then","apply","body","y","g","label","sent","trys","ops","verb","throw","return","Symbol","iterator","op","pop","m","o","k","k2","undefined","writable","enumerable","ar","error","il","a","j","jl","to","from","pack","l","slice","asyncIterator","q","resume","fulfill","settle","shift","cooked","raw","__setModuleDefault","mod","default","receiver","state","has","env","async","dispose","asyncDispose","stack","_SuppressedError","SuppressedError","suppressed","message","Error","fail","hasError","rec","tools","Q","keyboard","events","extensions","Color","color","rgb","inputToRGB","_originalInput","_r","_g","_b","_a","_roundA","Math","round","_ok","ok","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","isDark","getBrightness","isLight","isValid","getOriginalInput","getAlpha","toRgb","getLuminance","rsRGB","gsRGB","bsRGB","pow","setAlpha","boundAlpha","toHsv","hsv","rgbToHsv","h","toHsvString","toHsl","hsl","rgbToHsl","toHslString","toHex","allow3Char","rgbToHex","toHexString","toHex8","rgbaToHex","toHex8String","toRgbString","toPercentageRgb","bound01","toPercentageRgbString","toName","hexNames","toString","format","formattedString","formatSet","hasAlpha","_applyModification","fn","args","lighten","amount","brighten","darken","desaturate","saturate","greyscale","spin","_applyCombination","analogous","results","slices","complement","monochromatic","splitcomplement","triad","tetrad","fromRatio","newColor","convertToPercentage","stringInputToObject","rgbToRgb","substr","hsvToRgb","hslToRgb","min","max","hue2rgb","floor","hex","pad2","charAt","join","convertDecimalToHex","equals","color1","color2","random","clamp01","hue","part","ret","modification","mix","w1","rgb1","rgb2","w","w2","readability","c1","c2","isReadable","wcag2","wcag2Parms","out","validateWCAG2Parms","level","size","mostReadable","baseColor","colorList","includeFallbackColors","bestColor","bestScore","_i","colorList_1","flip","flipped","parseFloat","isNaN","isOnePointZero","processPercent","isPercentage","parseInt","abs","val","parseIntFromHex","convertHexToDecimal","replace","toLowerCase","match","named","names","matchers","exec","rgba","hsla","hsva","hex8","hex6","hex3","parms","toUpperCase","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","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","RegExp","eDateUnit","icons","currencies","USD","EUR","GBP","AUD","CAD","JPY","replaceAll","find","texts","toCamelCase","txt","toPascalCase","capitalize","kebabCaseRegex","toKebabCase","map","toSentence","str","removeSpaces","addSlashes","isEqual","equalsAny","_this","strings","some","endsWith","searchString","position","subjectString","lastIndex","startsWith","repeat","count","RangeError","Infinity","maxCount","log","substring","Number","rounder","precision","num","stripScientificNotation","strNum","strNumArr","split","formattedNum","numZeros","isNegative","pattern","thousandsSeparator","decimalSeparator","type","formatType","minPrecision","currency","maxPrecision","suffix","formatNumber","Decimal","Group","toFixed","pos_trail_zero","lastIndexOf","szSep","pos_lead_zero","pos_separator","integer","offset","item","splice","predicate","removed","pushArray","fromIndex","toIndex","items","condition","list","prev","filter","sort","fill","O","len","start","relativeStart","end","relativeEnd","final","selector","u","matches","otherArr","keySelector","otherKeySelector","ArrayExt","innerJoin","leftJoin","fullOuterJoin","childSelector","action","childArr","recurse","reduce","vres","isArray","thisArr","arrSmall","smallKeySelector","dbBig","forEach","dbOther","children","children_1","nextSource","keysArray","keys","nextIndex","nextKey","values","alt","getOwnPropertyNames","KbEvent","_listeners","add","callback","tag","remove","removeByTag","trigger","Logger","logRuleStart","configName","ruleType","writeRuleCycleLogs","startTime","Date","now","console","logRuleEnd","time","logSceneChange","msg","writeSceneChangeLogs","window","localStorage","getItem","eScrollMode","Map","_data","existingValue","mapping","delete","removeWhere","Utils","loadScriptAsync","src","deferred","Q.defer","document","createElement","onload","getElementsByTagName","parentNode","insertBefore","promise","scrubName","guard","failMessage","guardNotNull","variable","guardNotEmpty","getParameterByName","url","decodeURIComponent","isDefined","extend","objects","o2","prop","getFilenameWithoutExtension","path","getExtension","href","pathname","isAbsoluteUrl","ABS_URL_REGEX","test","isGuid","guid","GUID_REGEX","shortId","getTime","areEqual","str1","str2","toSafeString","supportsFullscreen","doc","documentElement","requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","toggleFullscreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen","Element","ALLOW_KEYBOARD_INPUT","supportsVr","navigator","getVRDisplays","displays","res","userAgent","deviceIncapable","capabilities","canPresent","Q.when","isIos","_iosChecked","_isIos","MSStream","sendMessageToParent","postMessage","parent","downloadFile","ext","filename","$","attr","click","debounce","func","wait","immediate","timeout","later","callNow","clearTimeout","setTimeout","throttle","threshhold","scope","last","deferTimer","now_1","getRelativePos","child","ancestor","left","top","el","offsetLeft","offsetTop","offsetParent","escapeMarkup","textNode","createTextNode","div","appendChild","innerHTML","scrollIntoView","elem","$scrollParent","scrollParent","nearestStartPadding","nearestEndPadding","scrollProp","animate","elemPos","elemRect","getBoundingClientRect","mode","nearest","horizontal","elemRight","elemLeft","width","scrollLeft","containerWidth","clientWidth","elemBottom","elemTop","height","scrollTop","containerHeight","clientHeight","middleIfNecessary","elemWidth","newScrollLeft","elemHeight","newScrollTop","MOBILE_WIDTH","MessageDispatcher","postTo","listenOn","$q","asks","listens","addEventListener","event","data","ask","listenMsg_1","handler","defer","listen","removeListen","answer","originalMsg","inWorker","Worker","SearchUtils","search","query","arr","valueFn","maxItems","matchFn","noMatchFn","sorted","score","scoreDb","indexMin","indexMax","indexMid","midScore","db","phrase","fuzziness","charScore","finalScore","idxOf","fuzzyFactor","runningScore","string","lString","strLength","lWord","wordLength","startAt","fuzzies","UnitOfMeasurement","multiplier","Units","convert","measurements","fromUnit","toUnit","distance","area","volume","weight","pressure","angle","SNAP_VERSION"],"mappings":"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","file":"tools.min.js","sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, Symbol, Reflect, Promise, SuppressedError */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __esDecorate;\r\nvar __runInitializers;\r\nvar __propKey;\r\nvar __setFunctionName;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __classPrivateFieldIn;\r\nvar __createBinding;\r\nvar __addDisposableResource;\r\nvar __disposeResources;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n };\r\n\r\n __runInitializers = function (thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n };\r\n\r\n __propKey = function (x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n };\r\n\r\n __setFunctionName = function (f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n __classPrivateFieldIn = function (state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n };\r\n\r\n __addDisposableResource = function (env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n };\r\n\r\n var _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n };\r\n\r\n __disposeResources = function (env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__esDecorate\", __esDecorate);\r\n exporter(\"__runInitializers\", __runInitializers);\r\n exporter(\"__propKey\", __propKey);\r\n exporter(\"__setFunctionName\", __setFunctionName);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n exporter(\"__classPrivateFieldIn\", __classPrivateFieldIn);\r\n exporter(\"__addDisposableResource\", __addDisposableResource);\r\n exporter(\"__disposeResources\", __disposeResources);\r\n});\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, Symbol, Reflect, Promise, SuppressedError */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __esDecorate;\r\nvar __runInitializers;\r\nvar __propKey;\r\nvar __setFunctionName;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __classPrivateFieldIn;\r\nvar __createBinding;\r\nvar __addDisposableResource;\r\nvar __disposeResources;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n };\r\n\r\n __runInitializers = function (thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n };\r\n\r\n __propKey = function (x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n };\r\n\r\n __setFunctionName = function (f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n __classPrivateFieldIn = function (state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n };\r\n\r\n __addDisposableResource = function (env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n };\r\n\r\n var _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n };\r\n\r\n __disposeResources = function (env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__esDecorate\", __esDecorate);\r\n exporter(\"__runInitializers\", __runInitializers);\r\n exporter(\"__propKey\", __propKey);\r\n exporter(\"__setFunctionName\", __setFunctionName);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n exporter(\"__classPrivateFieldIn\", __classPrivateFieldIn);\r\n exporter(\"__addDisposableResource\", __addDisposableResource);\r\n exporter(\"__disposeResources\", __disposeResources);\r\n});\r\n\nvar tools = (function (exports, Q) {\n 'use strict';\n\n /**\n * A color utility library. Inspired by tinycolor, but modified to work for us\n */\n var Color = /** @class */ (function () {\n function Color(color) {\n var rgb = Color.inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = Math.round(100 * this._a) / 100;\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) {\n this._r = Math.round(this._r);\n }\n if (this._g < 1) {\n this._g = Math.round(this._g);\n }\n if (this._b < 1) {\n this._b = Math.round(this._b);\n }\n this._ok = rgb.ok;\n }\n Color.prototype.isDark = function () {\n return this.getBrightness() < 128;\n };\n Color.prototype.isLight = function () {\n return !this.isDark();\n };\n Color.prototype.isValid = function () {\n return this._ok;\n };\n Color.prototype.getOriginalInput = function () {\n return this._originalInput;\n };\n Color.prototype.getAlpha = function () {\n return this._a;\n };\n Color.prototype.getBrightness = function () {\n // http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n };\n Color.prototype.getLuminance = function () {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var R;\n var G;\n var B;\n var rsRGB = rgb.r / 255;\n var gsRGB = rgb.g / 255;\n var bsRGB = rgb.b / 255;\n if (rsRGB <= 0.03928) {\n R = rsRGB / 12.92;\n }\n else {\n R = Math.pow(((rsRGB + 0.055) / 1.055), 2.4);\n }\n if (gsRGB <= 0.03928) {\n G = gsRGB / 12.92;\n }\n else {\n G = Math.pow(((gsRGB + 0.055) / 1.055), 2.4);\n }\n if (bsRGB <= 0.03928) {\n B = bsRGB / 12.92;\n }\n else {\n B = Math.pow(((bsRGB + 0.055) / 1.055), 2.4);\n }\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n };\n Color.prototype.setAlpha = function (value) {\n this._a = Color.boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n };\n Color.prototype.toHsv = function () {\n var hsv = Color.rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n };\n Color.prototype.toHsvString = function () {\n var hsv = Color.rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360);\n var s = Math.round(hsv.s * 100);\n var v = Math.round(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n };\n Color.prototype.toHsl = function () {\n var hsl = Color.rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n };\n Color.prototype.toHslString = function () {\n var hsl = Color.rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360);\n var s = Math.round(hsl.s * 100);\n var l = Math.round(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n };\n Color.prototype.toHex = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = true; }\n return Color.rgbToHex(this._r, this._g, this._b, allow3Char);\n };\n Color.prototype.toHexString = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = true; }\n return \"#\" + this.toHex(allow3Char);\n };\n Color.prototype.toHex8 = function () {\n return Color.rgbaToHex(this._r, this._g, this._b, this._a);\n };\n Color.prototype.toHex8String = function () {\n return \"#\" + this.toHex8();\n };\n Color.prototype.toRgb = function () {\n return { r: Math.round(this._r), g: Math.round(this._g), b: Math.round(this._b), a: this._a };\n };\n Color.prototype.toRgbString = function () {\n return (this._a == 1) ?\n \"rgb(\" + Math.round(this._r) + \", \" +\n Math.round(this._g) + \", \" +\n Math.round(this._b) + \")\" :\n \"rgba(\" + Math.round(this._r) + \", \" +\n Math.round(this._g) + \", \" +\n Math.round(this._b) + \", \" +\n this._roundA + \")\";\n };\n Color.prototype.toPercentageRgb = function () {\n return {\n r: Math.round(Color.bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(Color.bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(Color.bound01(this._b, 255) * 100) + \"%\", a: this._a\n };\n };\n Color.prototype.toPercentageRgbString = function () {\n return (this._a == 1) ?\n \"rgb(\" +\n Math.round(Color.bound01(this._r, 255) * 100) + \"%, \" +\n Math.round(Color.bound01(this._g, 255) * 100) + \"%, \" +\n Math.round(Color.bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" +\n Math.round(Color.bound01(this._r, 255) * 100) + \"%, \" +\n Math.round(Color.bound01(this._g, 255) * 100) + \"%, \" +\n Math.round(Color.bound01(this._b, 255) * 100) + \"%, \" +\n this._roundA + \")\";\n };\n Color.prototype.toName = function () {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return undefined;\n }\n return Color.hexNames[Color.rgbToHex(this._r, this._g, this._b, true)] || undefined;\n };\n Color.prototype.toString = function (format) {\n var formatSet = !!format;\n var formattedString;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha &&\n (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n };\n Color.prototype._applyModification = function (fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n };\n Color.prototype.lighten = function (amount) {\n return this._applyModification(Color.lighten, arguments);\n };\n Color.prototype.brighten = function (amount) {\n return this._applyModification(Color.brighten, arguments);\n };\n Color.prototype.darken = function (amount) {\n return this._applyModification(Color.darken, arguments);\n };\n Color.prototype.desaturate = function (amount) {\n return this._applyModification(Color.desaturate, arguments);\n };\n Color.prototype.saturate = function (amount) {\n return this._applyModification(Color.saturate, arguments);\n };\n Color.prototype.greyscale = function () {\n return this._applyModification(Color.greyscale, arguments);\n };\n Color.prototype.spin = function (amount) {\n return this._applyModification(Color.spin, arguments);\n };\n Color.prototype._applyCombination = function (fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n };\n Color.prototype.analogous = function (results, slices) {\n return this._applyCombination(Color.analogous, arguments);\n };\n Color.prototype.complement = function () {\n return this._applyCombination(Color.complement, arguments);\n };\n Color.prototype.monochromatic = function (results) {\n return this._applyCombination(Color.monochromatic, arguments);\n };\n Color.prototype.splitcomplement = function () {\n return this._applyCombination(Color.splitcomplement, arguments);\n };\n Color.prototype.triad = function () {\n return this._applyCombination(Color.triad, arguments);\n };\n Color.prototype.tetrad = function () {\n return this._applyCombination(Color.tetrad, arguments);\n };\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n Color.fromRatio = function (color) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = Color.convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return new Color(color);\n };\n // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n Color.inputToRGB = function (color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var ok = false;\n var format;\n if (color instanceof Color) {\n rgb.r = color._r;\n rgb.b = color._b;\n rgb.g = color._g;\n a = color._a;\n }\n if (typeof color == \"string\") {\n color = Color.stringInputToObject(color);\n }\n if (typeof color == \"object\" && color != null) {\n if (color.hasOwnProperty(\"r\") && color.hasOwnProperty(\"g\") && color.hasOwnProperty(\"b\")) {\n rgb = Color.rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"v\")) {\n color.s = Color.convertToPercentage(color.s);\n color.v = Color.convertToPercentage(color.v);\n rgb = Color.hsvToRgb(color.h, color.s, color.v);\n ok = true;\n format = \"hsv\";\n }\n else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"l\")) {\n color.s = Color.convertToPercentage(color.s);\n color.l = Color.convertToPercentage(color.l);\n rgb = Color.hslToRgb(color.h, color.s, color.l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = Color.boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n };\n // Conversion Functions\n // --------------------\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // \n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // \n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n Color.rgbToRgb = function (r, g, b) {\n return {\n r: Color.bound01(r, 255) * 255,\n g: Color.bound01(g, 255) * 255,\n b: Color.bound01(b, 255) * 255\n };\n };\n // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n Color.rgbToHsl = function (r, g, b) {\n r = Color.bound01(r, 255);\n g = Color.bound01(g, 255);\n b = Color.bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, l: l };\n };\n // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n Color.hslToRgb = function (h, s, l) {\n var r;\n var g;\n var b;\n h = Color.bound01(h, 360);\n s = Color.bound01(s, 100);\n l = Color.bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return { r: r * 255, g: g * 255, b: b * 255 };\n };\n // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n Color.rgbToHsv = function (r, g, b) {\n r = Color.bound01(r, 255);\n g = Color.bound01(g, 255);\n b = Color.bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n };\n // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n Color.hsvToRgb = function (h, s, v) {\n h = Color.bound01(h, 360) * 6;\n s = Color.bound01(s, 100);\n v = Color.bound01(v, 100);\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n };\n // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n Color.rgbToHex = function (r, g, b, allow3Char) {\n var hex = [\n Color.pad2(Math.round(r).toString(16)),\n Color.pad2(Math.round(g).toString(16)),\n Color.pad2(Math.round(b).toString(16))\n ];\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) &&\n hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n };\n // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b and a are contained in the set [0, 255]\n // Returns an 8 character hex\n Color.rgbaToHex = function (r, g, b, a) {\n var hex = [\n Color.pad2(Color.convertDecimalToHex(a)),\n Color.pad2(Math.round(r).toString(16)),\n Color.pad2(Math.round(g).toString(16)),\n Color.pad2(Math.round(b).toString(16))\n ];\n return hex.join(\"\");\n };\n // `equals`\n // Can be called with any tinycolor input\n Color.equals = function (color1, color2) {\n if (!color1 || !color2) {\n return false;\n }\n return new Color(color1).toRgbString() == new Color(color2).toRgbString();\n };\n Color.random = function () {\n return Color.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n };\n // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // \n Color.desaturate = function (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = new Color(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = Color.clamp01(hsl.s);\n return new Color(hsl);\n };\n Color.saturate = function (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = new Color(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = Color.clamp01(hsl.s);\n return new Color(hsl);\n };\n Color.greyscale = function (color) {\n return Color.desaturate(color, 100);\n };\n Color.lighten = function (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = new Color(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = Color.clamp01(hsl.l);\n return new Color(hsl);\n };\n Color.brighten = function (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = new Color(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new Color(rgb);\n };\n Color.darken = function (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = new Color(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = Color.clamp01(hsl.l);\n return new Color(hsl);\n };\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n Color.spin = function (color, amount) {\n var hsl = new Color(color).toHsl();\n var hue = (Math.round(hsl.h) + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new Color(hsl);\n };\n // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // \n Color.complement = function (color) {\n var hsl = new Color(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new Color(hsl);\n };\n Color.triad = function (color) {\n var hsl = new Color(color).toHsl();\n var h = hsl.h;\n return [\n new Color(color),\n new Color({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n new Color({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n };\n Color.tetrad = function (color) {\n var hsl = new Color(color).toHsl();\n var h = hsl.h;\n return [\n new Color(color),\n new Color({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n new Color({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n new Color({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n };\n Color.splitcomplement = function (color) {\n var hsl = new Color(color).toHsl();\n var h = hsl.h;\n return [\n new Color(color),\n new Color({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new Color({ h: (h + 216) % 360, s: hsl.s, l: hsl.l })\n ];\n };\n Color.analogous = function (color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = new Color(color).toHsl();\n var part = 360 / slices;\n var ret = [new Color(color)];\n // tslint:disable-next-line:no-bitwise\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new Color(hsl));\n }\n return ret;\n };\n Color.monochromatic = function (color, results) {\n results = results || 6;\n var hsv = new Color(color).toHsv();\n var h = hsv.h;\n var s = hsv.s;\n var v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(new Color({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n return ret;\n };\n // Utility Functions\n // ---------------------\n Color.mix = function (color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n var rgb1 = new Color(color1).toRgb();\n var rgb2 = new Color(color2).toRgb();\n var p = amount / 100;\n var w = p * 2 - 1;\n var a = rgb2.a - rgb1.a;\n var w1;\n if (w * a == -1) {\n w1 = w;\n }\n else {\n w1 = (w + a) / (1 + w * a);\n }\n w1 = (w1 + 1) / 2;\n var w2 = 1 - w1;\n var rgba = {\n r: rgb2.r * w1 + rgb1.r * w2,\n g: rgb2.g * w1 + rgb1.g * w2,\n b: rgb2.b * w1 + rgb1.b * w2,\n a: rgb2.a * p + rgb1.a * (1 - p)\n };\n return new Color(rgba);\n };\n // Readability Functions\n // ---------------------\n // false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n Color.isReadable = function (color1, color2, wcag2) {\n var readability = Color.readability(color1, color2);\n var wcag2Parms;\n var out;\n out = false;\n wcag2Parms = Color.validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n };\n /**\n * Given a base color and a list of possible foreground or background\n * colors for that base, returns the most readable color.\n * Optionally returns Black or White if the most readable color is unreadable.\n * @param baseColor\n * @param colorList\n * @param args\n */\n Color.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors;\n var level;\n var size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var _i = 0, colorList_1 = colorList; _i < colorList_1.length; _i++) {\n var c = colorList_1[_i];\n readability = Color.readability(baseColor, c);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = new Color(c);\n }\n }\n if (Color.isReadable(baseColor, bestColor, { level: level, size: size }) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors = false;\n return Color.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n };\n // Utilities\n // ---------\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n Color.flip = function (o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n };\n // Return a valid alpha value [0,1] with all invalid values being set to 1\n Color.boundAlpha = function (a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n };\n // Take input from [0, n] and return it as [0, 1]\n Color.bound01 = function (n, max) {\n if (Color.isOnePointZero(n)) {\n n = \"100%\";\n }\n var processPercent = Color.isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt((n * max).toString(), 10) / 100;\n }\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n };\n // Force a number between 0 and 1\n Color.clamp01 = function (val) {\n return Math.min(1, Math.max(0, val));\n };\n // Parse a base-16 hex value into a base-10 integer\n Color.parseIntFromHex = function (val) {\n return parseInt(val, 16);\n };\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // \n Color.isOnePointZero = function (n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n };\n // Check to see if string passed in is a percentage\n Color.isPercentage = function (n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n };\n // Force a hex value to have 2 characters\n Color.pad2 = function (c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n };\n // Replace a decimal with it's percentage value\n Color.convertToPercentage = function (n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n return n;\n };\n // Converts a decimal to a hex value\n Color.convertDecimalToHex = function (d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n };\n // Converts a hex value to a decimal\n Color.convertHexToDecimal = function (h) {\n return (Color.parseIntFromHex(h) / 255);\n };\n // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n Color.stringInputToObject = function (color) {\n var trimLeft = /^[\\s,#]+/;\n var trimRight = /\\s+$/;\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (Color.names[color]) {\n color = Color.names[color];\n named = true;\n }\n else if (color == \"transparent\") {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n // tslint:disable:no-conditional-assignment\n if ((match = Color.matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = Color.matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = Color.matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = Color.matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = Color.matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = Color.matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = Color.matchers.hex8.exec(color))) {\n return {\n a: Color.convertHexToDecimal(match[1]),\n r: Color.parseIntFromHex(match[2]),\n g: Color.parseIntFromHex(match[3]),\n b: Color.parseIntFromHex(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = Color.matchers.hex6.exec(color))) {\n return {\n r: Color.parseIntFromHex(match[1]),\n g: Color.parseIntFromHex(match[2]),\n b: Color.parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = Color.matchers.hex3.exec(color))) {\n return {\n r: Color.parseIntFromHex(match[1] + \"\" + match[1]),\n g: Color.parseIntFromHex(match[2] + \"\" + match[2]),\n b: Color.parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n };\n Color.validateWCAG2Parms = function (parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level;\n var size;\n parms = parms || { level: \"AA\", size: \"small\" };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return { level: level, size: size };\n };\n // Big List of Colors\n // ------------------\n // \n Color.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\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: \"f0f\",\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: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\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: \"f00\",\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: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n };\n // Make it easy to access colors via `hexNames[hex]`\n Color.hexNames = Color.flip(Color.names);\n Color.matchers = (function () {\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren \n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" +\n CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" +\n CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n })();\n return Color;\n }());\n\n var SNAP_VERSION = 2;\n (function (keyboard) {\n keyboard[keyboard[\"backspace\"] = 8] = \"backspace\";\n keyboard[keyboard[\"tab\"] = 9] = \"tab\";\n keyboard[keyboard[\"enter\"] = 13] = \"enter\";\n keyboard[keyboard[\"shift\"] = 16] = \"shift\";\n keyboard[keyboard[\"ctrl\"] = 17] = \"ctrl\";\n keyboard[keyboard[\"alt\"] = 18] = \"alt\";\n keyboard[keyboard[\"pause\"] = 19] = \"pause\";\n keyboard[keyboard[\"capslock\"] = 20] = \"capslock\";\n keyboard[keyboard[\"escape\"] = 27] = \"escape\";\n keyboard[keyboard[\"pageup\"] = 33] = \"pageup\";\n keyboard[keyboard[\"pagedown\"] = 34] = \"pagedown\";\n keyboard[keyboard[\"end\"] = 35] = \"end\";\n keyboard[keyboard[\"home\"] = 36] = \"home\";\n keyboard[keyboard[\"left\"] = 37] = \"left\";\n keyboard[keyboard[\"up\"] = 38] = \"up\";\n keyboard[keyboard[\"right\"] = 39] = \"right\";\n keyboard[keyboard[\"down\"] = 40] = \"down\";\n keyboard[keyboard[\"insert\"] = 45] = \"insert\";\n keyboard[keyboard[\"deleter\"] = 46] = \"deleter\";\n keyboard[keyboard[\"space\"] = 32] = \"space\";\n keyboard[keyboard[\"comma\"] = 188] = \"comma\";\n })(exports.keyboard || (exports.keyboard = {}));\n (function (events) {\n events[\"loginRequested\"] = \"loginRequested\";\n events[\"loginSuccessful\"] = \"loginSuccessful\";\n events[\"logout\"] = \"logout\";\n events[\"avatarChanged\"] = \"avatarChanged\";\n events[\"permissionDenied\"] = \"permissionDenied\";\n })(exports.events || (exports.events = {}));\n (function (extensions) {\n extensions[\"image\"] = \"jpg,png,gif,bmp\";\n extensions[\"video\"] = \"mp4,webm,ogg,ogv\";\n extensions[\"environments\"] = \"env,dds,hdr\";\n })(exports.extensions || (exports.extensions = {}));\n var currencies = {\n USD: \"$\",\n EUR: \"\\u20ac\",\n GBP: \"\\u00a3\",\n AUD: \"$\",\n CAD: \"$\",\n JPY: \"\\u00a5\"\n };\n (function (eDateUnit) {\n eDateUnit[\"seconds\"] = \"Seconds\";\n eDateUnit[\"minutes\"] = \"Minutes\";\n eDateUnit[\"hours\"] = \"Hours\";\n eDateUnit[\"date\"] = \"Date\";\n eDateUnit[\"month\"] = \"Month\";\n eDateUnit[\"fullYear\"] = \"FullYear\";\n })(exports.eDateUnit || (exports.eDateUnit = {}));\n (function (icons) {\n icons[\"error\"] = \"\\uE197\";\n icons[\"childError\"] = \"\\uE220\";\n icons[\"cancel\"] = \"\\uE193\";\n icons[\"save\"] = \"\\uE444\";\n icons[\"add\"] = \"\\uE433\";\n icons[\"minus\"] = \"\\uE434\";\n icons[\"deleter\"] = \"\\uE017\";\n icons[\"paste\"] = \"\\uE513\";\n icons[\"anonymize\"] = \"\\uE521\";\n icons[\"edit\"] = \"\\uE151\";\n icons[\"hamburger\"] = \"\\uE159\";\n icons[\"change\"] = \"\\uE081\";\n icons[\"help\"] = \"\\uE195\";\n icons[\"info\"] = \"\\uE196\";\n icons[\"infoCircle\"] = \"\\uE196\";\n icons[\"success\"] = \"\\uE194\";\n icons[\"folder\"] = \"\\uE145\";\n icons[\"upload\"] = \"\\uE364\";\n icons[\"download\"] = \"\\uE365\";\n icons[\"refresh\"] = \"\\uE082\";\n icons[\"rename\"] = \"\\uE081\";\n icons[\"crumb\"] = \"\\uE224\";\n icons[\"image\"] = \"\\uE139\";\n icons[\"addFolder\"] = \"\\uE146\";\n icons[\"open\"] = \"\\uE145\";\n icons[\"localization\"] = \"\\uE372\";\n icons[\"camera\"] = \"\\uE012\";\n icons[\"user\"] = \"\\uE004\";\n icons[\"users\"] = \"\\uE044\";\n icons[\"quote\"] = \"\\uE203\";\n icons[\"products\"] = \"\\uE157\";\n icons[\"standardProducts\"] = \"\\uE156\";\n icons[\"company\"] = \"\\uE090\";\n icons[\"gear\"] = \"\\uE137\";\n icons[\"gears\"] = \"\\uE138\";\n icons[\"role\"] = \"\\uE089\";\n icons[\"roles\"] = \"\\uE089\";\n icons[\"theme\"] = \"\\uE190\";\n icons[\"queue\"] = \"\\uE114\";\n icons[\"builder\"] = \"\\uE364\";\n icons[\"tag\"] = \"\\uE066\";\n icons[\"tags\"] = \"\\uE067\";\n icons[\"comment\"] = \"\\uE310\";\n icons[\"attachment\"] = \"\\uE063\";\n icons[\"rule\"] = \"\\uE731\";\n icons[\"popout\"] = \"\\uE390\";\n icons[\"popin\"] = \"\\uE215\";\n icons[\"play\"] = \"\\uE174\";\n icons[\"list\"] = \"\\uE115\";\n icons[\"tile\"] = \"\\uE157\";\n icons[\"search\"] = \"\\uE028\";\n icons[\"earth\"] = \"\\uE371\";\n icons[\"flag\"] = \"\\uE267\";\n icons[\"mail\"] = \"\\uE128\";\n icons[\"all\"] = \"\\uE114\";\n icons[\"clear\"] = \"\\uE208\";\n icons[\"dollar\"] = \"\\uE228\";\n icons[\"template\"] = \"\\uE685\";\n icons[\"templates\"] = \"\\uE120\";\n icons[\"up\"] = \"\\uE214\";\n icons[\"down\"] = \"\\uE213\";\n icons[\"right\"] = \"\\uE212\";\n icons[\"left\"] = \"\\uE211\";\n icons[\"infrastructure\"] = \"\\uE281\";\n icons[\"database\"] = \"\\uE141\";\n icons[\"integrations\"] = \"\\uE490\";\n icons[\"workflowSelector\"] = \"\\uE428\";\n icons[\"tools\"] = \"\\uE281\";\n icons[\"settings\"] = \"\\uE140\";\n icons[\"permission\"] = \"\\uE271\";\n icons[\"workflow\"] = \"\\uE309\";\n icons[\"email\"] = \"\\uE125\";\n icons[\"approve\"] = \"\\uE199\";\n icons[\"reject\"] = \"\\uE198\";\n icons[\"shipping\"] = \"\\uE059\";\n icons[\"logout\"] = \"\\uE388\";\n icons[\"deploy\"] = \"\\uE458\";\n icons[\"globe\"] = \"\\uE341\";\n icons[\"generators\"] = \"\\uE260\";\n icons[\"generator\"] = \"\\uE260\";\n icons[\"resources\"] = \"\\uE343\";\n icons[\"output\"] = \"\\uE360\";\n icons[\"cleanworkspace\"] = \"\\uE068\";\n icons[\"undo\"] = \"\\uE222\";\n icons[\"redo\"] = \"\\uE223\";\n icons[\"bold\"] = \"\\uE103\";\n icons[\"italic\"] = \"\\uE102\";\n icons[\"heading\"] = \"\\uE460\";\n icons[\"link\"] = \"\\uE051\";\n icons[\"img\"] = \"\\uE139\";\n icons[\"capture\"] = \"\\uE010\";\n icons[\"submit\"] = \"\\uE224\";\n icons[\"discount\"] = \"\\uE228\";\n icons[\"log\"] = \"\\uE088\";\n icons[\"zoomIn\"] = \"\\uE237\";\n icons[\"zoomOut\"] = \"\\uE238\";\n icons[\"visible\"] = \"\\uE052\";\n icons[\"notVisible\"] = \"\\uE053\";\n icons[\"table\"] = \"\\uE120\";\n icons[\"chevronLeft\"] = \"\\uE225\";\n icons[\"chevronRight\"] = \"\\uE224\";\n icons[\"chevronUp\"] = \"\\uE601\";\n icons[\"chevronDown\"] = \"\\uE602\";\n icons[\"fullscreen\"] = \"\\uE216\";\n icons[\"exitFullscreen\"] = \"\\uE215\";\n icons[\"vr\"] = \"\\uE783\";\n icons[\"clone\"] = \"\\uE511\";\n icons[\"hand\"] = \"\\uE348\";\n icons[\"embed\"] = \"\\uE118\";\n icons[\"safeFunction\"] = \"\\uE221\";\n icons[\"function\"] = \"\\uE206\";\n icons[\"globalDefinition\"] = \"\\uE732\";\n icons[\"reference\"] = \"\\uE423\";\n icons[\"more\"] = \"\\uE188\";\n icons[\"plus\"] = \"\\uE191\";\n icons[\"removed\"] = \"\\uE192\";\n icons[\"test\"] = \"\\uE534\";\n icons[\"name\"] = \"\\uE607\";\n icons[\"cloud\"] = \"\\uE233\";\n icons[\"filter\"] = \"\\uE321\";\n icons[\"warning\"] = \"\\uE079\";\n icons[\"hotspot\"] = \"\\uE186\";\n icons[\"threeD\"] = \"\\uE780\";\n icons[\"cube\"] = \"\\uE779\";\n icons[\"column\"] = \"\\uE539\";\n icons[\"report\"] = \"\\uE042\";\n icons[\"lock\"] = \"\\uE204\";\n icons[\"layout\"] = \"\\uE164\";\n icons[\"layoutConfig\"] = \"\\uE164\";\n icons[\"channels\"] = \"\\uE353\";\n icons[\"history\"] = \"\\uE058\";\n icons[\"view\"] = \"\\uE052\";\n icons[\"automationStudio\"] = \"\\uE508\";\n icons[\"complete\"] = \"\\uE194\";\n icons[\"generating\"] = \"\\uE137\";\n icons[\"failed\"] = \"\\uE197\";\n icons[\"cast\"] = \"\\uE458\";\n icons[\"setVar\"] = \"\\uE212\";\n icons[\"getVar\"] = \"\\uE211\";\n icons[\"alignVertical\"] = \"\\uE655\";\n icons[\"alignRight\"] = \"\\uE656\";\n icons[\"alignLeft\"] = \"\\uE654\";\n icons[\"alignTop\"] = \"\\uE651\";\n icons[\"alignBottom\"] = \"\\uE652\";\n icons[\"alignHorizontal\"] = \"\\uE653\";\n icons[\"shrink\"] = \"\\uE487\";\n icons[\"stretch\"] = \"\\uE488\";\n icons[\"centerText\"] = \"\\uE112\";\n icons[\"leftText\"] = \"\\uE111\";\n icons[\"rightText\"] = \"\\uE113\";\n icons[\"justifyText\"] = \"\\uE114\";\n icons[\"leftIndent\"] = \"\\uE109\";\n icons[\"rightIndent\"] = \"\\uE110\";\n icons[\"rotateRight\"] = \"\\uE736\";\n icons[\"rotateLeft\"] = \"\\uE737\";\n // configurator types\n icons[\"actionBar\"] = \"\\uE158\";\n icons[\"configurator\"] = \"\\uE157\";\n icons[\"page\"] = \"\\uE037\";\n icons[\"group\"] = \"\\uE530\";\n icons[\"ruleContainer\"] = \"\\uE145\";\n icons[\"pricingRuleContainer\"] = \"\\uE228\";\n icons[\"action\"] = \"\\uE221\";\n icons[\"builds\"] = \"\\uE138\";\n icons[\"build\"] = \"\\uE137\";\n icons[\"tabControl\"] = \"\\u25F0\";\n icons[\"tab\"] = \"\\u25F3\";\n icons[\"gridRow\"] = \"\\u25A4\";\n icons[\"gridColumn\"] = \"\\u25A5\";\n icons[\"accordion\"] = \"\\uE114\";\n icons[\"expander\"] = \"\\uE728\";\n icons[\"button\"] = \"\\uE221\";\n icons[\"toolbar\"] = \"\\uE158\";\n icons[\"popup\"] = \"\\uE151\";\n icons[\"dropdownButton\"] = \"\\uE782\";\n icons[\"content\"] = \"\\uE154\";\n icons[\"priceWidget\"] = \"\\uE228\";\n icons[\"pageControl\"] = \"\\uE319\";\n icons[\"viewer\"] = \"\\uE779\";\n icons[\"canvas\"] = \"\\uE287\";\n icons[\"container\"] = \"\\uE095\";\n icons[\"pageNavigator\"] = \"\\uE458\";\n icons[\"pageTabs\"] = \"\\u25F0\";\n icons[\"nestedSet\"] = \"\\uE156\";\n // controls\n icons[\"textbox\"] = \"\\uE108\";\n icons[\"numberbox\"] = \"#\";\n icons[\"checkbox\"] = \"\\uE153\";\n icons[\"select\"] = \"\\uE368\";\n icons[\"none\"] = \"\\uE200\";\n icons[\"colorPicker\"] = \"\\uE091\";\n icons[\"colorSelect\"] = \"\\uE328\";\n icons[\"slider\"] = \"\\uE216\";\n icons[\"multilineTextbox\"] = \"\\uE111\";\n icons[\"label\"] = \"L\";\n icons[\"imageSelect\"] = \"\\uE139\";\n icons[\"imageMultiSelect\"] = \"\\uE139\";\n icons[\"autoComplete\"] = \"\\uE028\";\n icons[\"media\"] = \"\\uE012\";\n icons[\"mediaPicker\"] = \"\\uE012\";\n icons[\"html\"] = \"\\uE119\";\n icons[\"datePicker\"] = \"\\uE046\";\n icons[\"swatchSelect\"] = \"\\uE328\";\n icons[\"multiSelect\"] = \"\\uE368\";\n icons[\"colorMultiSelect\"] = \"\\uE328\";\n icons[\"toggle\"] = \"\\uE394\";\n icons[\"radio\"] = \"\\uE170\";\n icons[\"svgViewer\"] = \"\\uE100\";\n // column types\n icons[\"text\"] = \"\\uE108\";\n icons[\"number\"] = \"\\uE228\";\n icons[\"boolean\"] = \"\\uE153\";\n icons[\"color\"] = \"\\uE091\";\n icons[\"date\"] = \"\\uE046\";\n // localized = \"\",\n icons[\"manufacture\"] = \"\\uE461\";\n icons[\"material\"] = \"\\uE287\";\n icons[\"operation\"] = \"\\uE440\";\n icons[\"opdetail\"] = \"\\uE541\";\n icons[\"outputFieldDefault\"] = \"\\uE154\";\n icons[\"outputFieldWordList\"] = \"\\uE158\";\n icons[\"outputFieldWordText\"] = \"\\uE108\";\n icons[\"outputFieldWordImage\"] = \"\\uE139\";\n icons[\"outputFieldWordContainer\"] = \"\\uE154\";\n icons[\"outputFieldCadAnnotation\"] = \"\\uE108\";\n icons[\"outputFieldCadDimension\"] = \"\\uE069\";\n icons[\"outputFieldCadDynamicComponent\"] = \"\\uE049\";\n icons[\"outputFieldMate\"] = \"\\uE024\";\n icons[\"outputFieldCustomProperty\"] = \"\\uE040\";\n icons[\"outputFieldCadComponent\"] = \"\\uE779\";\n icons[\"kbmaxNotifications\"] = \"\\uE130\";\n icons[\"send\"] = \"\\uE422\";\n })(exports.icons || (exports.icons = {}));\n\n // tslint:disable\n String.prototype.replaceAll = function (find, replace) {\n return this.replace(new RegExp(find, 'g'), replace);\n };\n String.prototype.format = function () {\n var texts = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n texts[_i] = arguments[_i];\n }\n return this.replace(/\\{\\{|\\}\\}|\\{(\\d+)\\}/g, function (m, n) {\n if (m == \"{{\") {\n return \"{\";\n }\n if (m == \"}}\") {\n return \"}\";\n }\n return texts[n];\n });\n };\n String.prototype.toCamelCase = function () {\n return this.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toLowerCase() + txt.substr(1); });\n };\n String.prototype.toPascalCase = function () {\n return this.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1); });\n };\n String.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n };\n var kebabCaseRegex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g;\n String.prototype.toKebabCase = function () {\n return this.match(kebabCaseRegex)\n .map(function (x) { return x.toLowerCase(); })\n .join('-');\n };\n String.prototype.toSentence = function () {\n return this.replace(/([A-Z])/g, ' $1') // insert a space before all caps \n .replace(/^./, function (str) { return str.toUpperCase(); }); // uppercase the first character\n };\n String.prototype.removeSpaces = function () {\n return this.replace(/\\s+/g, '');\n };\n String.prototype.addSlashes = function () {\n return this.replace(/\\\\/g, '\\\\\\\\').\n //replace(/\\u0008/g, '\\\\b').\n replace(/\\t/g, '\\\\t').\n replace(/\\n/g, '\\\\n').\n replace(/\\f/g, '\\\\f').\n replace(/\\r/g, '\\\\r').\n replace(/'/g, '\\\\\\'').\n replace(/\"/g, '\\\\\"');\n };\n String.prototype.isEqual = function (str) {\n return (this ? this.toUpperCase() : undefined) === (str ? str.toUpperCase() : undefined);\n };\n String.prototype.equalsAny = function () {\n var _this = this;\n var strings = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n strings[_i] = arguments[_i];\n }\n return strings && strings.some(function (s) { return s.isEqual(_this); });\n };\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function (searchString, position) {\n var subjectString = this.toString();\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n }\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.indexOf(searchString, position) === position;\n };\n }\n if (!String.prototype.repeat) {\n String.prototype.repeat = function (count) {\n if (this == null) {\n throw new TypeError('can\\'t convert ' + this + ' to object');\n }\n var str = '' + this;\n count = +count;\n if (count != count) {\n count = 0;\n }\n if (count < 0) {\n throw new RangeError('repeat count must be non-negative');\n }\n if (count == Infinity) {\n throw new RangeError('repeat count must be less than infinity');\n }\n count = Math.floor(count);\n if (str.length == 0 || count == 0) {\n return '';\n }\n // Ensuring count is a 31-bit integer allows us to heavily optimize the\n // main part. But anyway, most current (August 2014) browsers can't handle\n // strings 1 << 28 chars or longer, so:\n if (str.length * count >= 1 << 28) {\n throw new RangeError('repeat count must not overflow maximum string size');\n }\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n while (count) {\n str += str;\n count--;\n }\n str += str.substring(0, maxCount - str.length);\n return str;\n };\n }\n Number.prototype.rounder = function (precision) {\n var num = this.stripScientificNotation();\n return +(Math.round(+(num + 'e' + precision)) + 'e-' + precision);\n };\n /**\n * Converts scientific notation to decimal or big number string.\n */\n Number.prototype.stripScientificNotation = function () {\n var strNum = this.toString();\n if (strNum.indexOf(\"e\") === -1)\n return strNum;\n var strNumArr = strNum.split(\"e\");\n if (strNumArr.length === 2) {\n var formattedNum = strNumArr[0].replace(\".\", \"\");\n var numZeros = void 0;\n if (strNumArr[1].charAt(0) === \"-\") {\n var isNegative = strNumArr[0].charAt(0) === \"-\";\n if (isNegative) {\n formattedNum = formattedNum.substr(1);\n }\n numZeros = parseInt(strNumArr[1].substr(1), 10) - 1;\n if (numZeros > 50)\n return \"0\"; //Let's not bother with extremely small numbers\n for (var i = 0; i < numZeros; i++) {\n formattedNum = \"0\" + formattedNum;\n }\n formattedNum = \"0.\" + formattedNum;\n if (isNegative) {\n formattedNum = \"-\" + formattedNum;\n }\n }\n else {\n // Then maybe a very large number, ex: 5.302923e+22\n numZeros = parseInt(strNumArr[1].substr(1), 10) - (formattedNum.length - 1);\n if (numZeros > 50)\n return \"Infinity\"; //Let's not bother with extremely large numbers\n for (var i = 0; i < numZeros; i++) {\n formattedNum += \"0\";\n }\n }\n return formattedNum;\n }\n return \"0\";\n };\n /**\n * formats a number given different formatting options\n */\n Number.prototype.format = function (args) {\n var pattern;\n var t = args.thousandsSeparator;\n var d = args.decimalSeparator || \".\";\n var type = args.formatType;\n var currency = args.currency || \"USD\";\n var minPrecision = isNaN(args.minPrecision) ? 0 : args.minPrecision;\n var maxPrecision = isNaN(args.maxPrecision) ? 0 : args.maxPrecision;\n maxPrecision = maxPrecision < minPrecision ? minPrecision : maxPrecision;\n var prefix = args.prefix || \"\";\n var suffix = args.suffix || \"\";\n //for currency, we should always have a thousands separator\n if (type === \"currency\") {\n t = t || \",\";\n }\n if (type === \"number\" || type === \"currency\" || type === \"percentage\") {\n pattern = \"#\" + t + \"##0\" + d + Array(minPrecision + 1).join(\"0\") + Array(maxPrecision - minPrecision + 1).join(\"#\");\n }\n var v = this.formatNumber(pattern);\n if (type === \"currency\") {\n // Not sure why it's not picking up the currencies declaration in icons\n var symbol = currencies[args.currency] || \"\";\n v = symbol + v + \" \" + args.currency;\n }\n if (type === \"percentage\") {\n v += \"%\";\n }\n return prefix + v + suffix;\n };\n /**\n * formats a number using a pattern: see here for documentation: https://code.google.com/p/javascript-number-formatter/\n */\n Number.prototype.formatNumber = function (pattern) {\n var m = pattern;\n var v = this;\n var num = v;\n // Make sure it's not in scientific notation\n // (Javascript switches automatically when you get to 7 decimal places)\n if (num < 1e-6)\n v = num.stripScientificNotation();\n if (!m || isNaN(+v)) {\n return v; //return as it is.\n }\n //convert any string to number according to formation sign.\n v = m.charAt(0) == '-' ? -v : +v;\n var isNegative = v < 0 ? v = -v : 0; //process only abs(), and turn on flag.\n //search for separator for grp & decimal, anything not digit, not +/- sign, not #.\n var result = m.match(/[^\\d\\-\\+#]/g);\n var Decimal = (result && result[result.length - 1]) || '.'; //treat the right most symbol as decimal \n var Group = (result && result[1] && result[0]) || ','; //treat the left most symbol as group separator\n //split the decimal for the format string if any.\n var m = m.split(Decimal);\n //Fix the decimal first, toFixed will auto fill trailing zero.\n v = v.toFixed(m[1] && m[1].length);\n v = +(v) + ''; //convert number to string to trim off *all* trailing decimal zero(es)\n //fill back any trailing zero according to format\n var pos_trail_zero = m[1] && m[1].lastIndexOf('0'); //look for last zero in format\n var part = v.split('.');\n //integer will get !part[1]\n if (!part[1] || part[1] && part[1].length <= pos_trail_zero) {\n v = (+v).toFixed(pos_trail_zero + 1);\n }\n var szSep = m[0].split(Group); //look for separator\n m[0] = szSep.join(''); //join back without separator for counting the pos of any leading 0.\n var pos_lead_zero = m[0] && m[0].indexOf('0');\n if (pos_lead_zero > -1) {\n while (part[0].length < (m[0].length - pos_lead_zero)) {\n part[0] = '0' + part[0];\n }\n }\n else if (+part[0] == 0) {\n part[0] = '';\n }\n v = v.split('.');\n v[0] = part[0];\n //process the first group separator from decimal (.) only, the rest ignore.\n //get the length of the last slice of split result.\n var pos_separator = (szSep[1] && szSep[szSep.length - 1].length);\n if (pos_separator) {\n var integer = v[0];\n var str = '';\n var offset = integer.length % pos_separator;\n for (var i = 0, l = integer.length; i < l; i++) {\n str += integer.charAt(i); //ie6 only support charAt for sz.\n //-pos_separator so that won't trail separator on full length\n if (!((i - offset + 1) % pos_separator) && i < l - pos_separator) {\n str += Group;\n }\n }\n v[0] = str;\n }\n v[1] = (m[1] && v[1]) ? Decimal + v[1] : \"\";\n return (isNegative ? '-' : '') + v[0] + v[1]; //put back any negation and combine integer and fraction.\n };\n Object.defineProperty(Array.prototype, \"clear\", {\n enumerable: false,\n writable: true,\n value: function () {\n this.length = 0;\n }\n });\n //Array.prototype.clear = function (): void {\n // this.length = 0;\n //}\n Object.defineProperty(Array.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n value: function (item) {\n var index = this.indexOf(item);\n if (index != -1) {\n return this.splice(this.indexOf(item), 1);\n }\n }\n });\n //Array.prototype.remove = function (item: any): Array {\n // var index = this.indexOf(item);\n // if (index != -1) {\n // return this.splice(this.indexOf(item), 1);\n // }\n //}\n Object.defineProperty(Array.prototype, \"removeWhere\", {\n enumerable: false,\n writable: true,\n value: function (predicate) {\n var removed = [];\n for (var i = this.length - 1; i >= 0; i--) {\n var item = this[i];\n if (predicate(item)) {\n removed.pushArray(this.splice(i, 1));\n }\n }\n return removed;\n }\n });\n //Array.prototype.removeWhere = function(predicate) {\n // for (var i = this.length - 1; i >= 0; i--) {\n // var item = this[i];\n // if (predicate(item)) {\n // this.splice(i, 1);\n // }\n // }\n //}\n Object.defineProperty(Array.prototype, \"move\", {\n enumerable: false,\n writable: true,\n value: function (fromIndex, toIndex) {\n if (toIndex >= this.length) {\n var k = toIndex - this.length;\n while ((k--) + 1) {\n this.push(undefined);\n }\n }\n this.splice(toIndex, 0, this.splice(fromIndex, 1)[0]);\n return this; // for testing purposes\n }\n });\n //Array.prototype.move = function (fromIndex, toIndex) {\n // if (toIndex >= this.length) {\n // var k = toIndex - this.length;\n // while ((k--) + 1) {\n // this.push(undefined);\n // }\n // }\n // this.splice(toIndex, 0, this.splice(fromIndex, 1)[0]);\n // return this; // for testing purposes\n //};\n Object.defineProperty(Array.prototype, \"contains\", {\n enumerable: false,\n writable: true,\n value: function (item) {\n var index = this.indexOf(item);\n return (index != -1);\n }\n });\n //Array.prototype.contains = function (item: any): boolean {\n // var index = this.indexOf(item);\n // return (index != -1);\n //}\n Object.defineProperty(Array.prototype, \"pushArray\", {\n enumerable: false,\n writable: true,\n value: function (items) {\n this.push.apply(this, items);\n }\n });\n //Array.prototype.pushArray = function (items: any[]): void {\n // this.push.apply(this, items);\n //}\n Object.defineProperty(Array.prototype, \"pushIf\", {\n enumerable: false,\n writable: true,\n value: function (condition) {\n var items = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n items[_i - 1] = arguments[_i];\n }\n if (condition)\n this.push.apply(this, items);\n return this;\n }\n });\n Object.defineProperty(Array.prototype, \"equals\", {\n enumerable: false,\n writable: true,\n value: function (b) {\n if (this === b)\n return true;\n if (b == null)\n return false;\n if (this.length != b.length)\n return false;\n // If you don't care about the order of the elements inside\n // the array, you should sort both arrays here.\n for (var i = 0; i < this.length; ++i) {\n if (this[i] !== b[i])\n return false;\n }\n return true;\n }\n });\n if (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, \"find\", {\n enumerable: false,\n writable: true,\n value: function (predicate) {\n if (this == null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n }\n Object.defineProperty(Array.prototype, \"getDefinedLength\", {\n enumerable: false,\n writable: true,\n value: function () {\n var result = 0;\n for (var i = 0; i < this.length; i++) {\n if (this[i] !== undefined)\n result++;\n }\n return result;\n }\n });\n Object.defineProperty(Array.prototype, \"first\", {\n enumerable: false,\n writable: true,\n value: function () {\n var item;\n if (this.length) {\n item = this[0];\n }\n return item;\n }\n });\n Object.defineProperty(Array.prototype, \"last\", {\n enumerable: false,\n writable: true,\n value: function () {\n if (this.length) {\n return this[this.length - 1];\n }\n return undefined;\n }\n });\n Object.defineProperty(Array.prototype, \"next\", {\n enumerable: false,\n writable: true,\n value: function (item, predicate) {\n var next;\n var i = this.indexOf(item);\n if (i >= -1 && i < this.length - 1) {\n if (predicate) {\n for (var n = i + 1; n < this.length; n++) {\n if (predicate(this[n])) {\n next = this[n];\n break;\n }\n }\n }\n else {\n next = this[i + 1];\n }\n }\n return next;\n }\n });\n Object.defineProperty(Array.prototype, \"previous\", {\n enumerable: false,\n writable: true,\n value: function (item, predicate) {\n var prev;\n var i = this.indexOf(item);\n if (i == -1)\n i = this.length;\n if (i > 0 && i <= this.length) {\n if (predicate) {\n for (var n = i - 1; n >= 0; n--) {\n if (predicate(this[n])) {\n prev = this[n];\n break;\n }\n }\n }\n else {\n prev = this[i - 1];\n }\n }\n return prev;\n }\n });\n Object.defineProperty(Array.prototype, \"removeNulls\", {\n enumerable: false,\n writable: true,\n value: function () {\n return this.filter(function (x) {\n return x !== null && x !== undefined;\n });\n }\n });\n Object.defineProperty(Array.prototype, \"sortBy\", {\n enumerable: false,\n writable: true,\n value: function (predicate) {\n return this.sort(function (a, b) {\n if (predicate(a) < predicate(b)) {\n return -1;\n }\n else if (predicate(a) > predicate(b)) {\n return 1;\n }\n else {\n return 0;\n }\n });\n }\n });\n Object.defineProperty(Array.prototype, \"sortByDescending\", {\n enumerable: false,\n writable: true,\n value: function (predicate) {\n return this.sort(function (a, b) {\n if (predicate(a) > predicate(b)) {\n return -1;\n }\n else if (predicate(a) < predicate(b)) {\n return 1;\n }\n else {\n return 0;\n }\n });\n }\n });\n if (!Array.prototype.fill) {\n Object.defineProperty(Array.prototype, \"fill\", {\n enumerable: false,\n writable: true,\n value: function (value) {\n // Steps 1-2.\n if (this == null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n // Steps 3-5.\n var len = O.length >>> 0;\n // Steps 6-7.\n var start = arguments[1];\n var relativeStart = start >> 0;\n // Step 8.\n var k = relativeStart < 0 ?\n Math.max(len + relativeStart, 0) :\n Math.min(relativeStart, len);\n // Steps 9-10.\n var end = arguments[2];\n var relativeEnd = end === undefined ?\n len : end >> 0;\n // Step 11.\n var final = relativeEnd < 0 ?\n Math.max(len + relativeEnd, 0) :\n Math.min(relativeEnd, len);\n // Step 12.\n while (k < final) {\n O[k] = value;\n k++;\n }\n // Step 13.\n return O;\n }\n });\n }\n Object.defineProperty(Array.prototype, \"unique\", {\n enumerable: false,\n writable: true,\n value: function (selector) {\n var u = {}, a = [];\n for (var i = 0, l = this.length; i < l; ++i) {\n var val = this[i];\n if (selector)\n val = selector(val);\n if (u.hasOwnProperty(val)) {\n continue;\n }\n a.push(this[i]);\n u[val] = 1;\n }\n return a;\n }\n });\n Object.defineProperty(Array.prototype, \"top\", {\n enumerable: false,\n writable: true,\n value: function (n, predicate) {\n if (this == null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var length = this.length;\n var thisArg = arguments[1];\n var value;\n var matches = [];\n for (var i = 0; i < length; i++) {\n value = this[i];\n if (predicate.call(thisArg, value, i)) {\n matches.push(value);\n if (matches.length >= n) {\n return matches;\n }\n }\n }\n return matches;\n }\n });\n Object.defineProperty(Array.prototype, \"innerJoin\", {\n enumerable: false,\n writable: true,\n value: function (otherArr, keySelector, otherKeySelector) {\n return ArrayExt.innerJoin(this, otherArr, keySelector, otherKeySelector);\n }\n });\n Object.defineProperty(Array.prototype, \"leftJoin\", {\n enumerable: false,\n writable: true,\n value: function (otherArr, keySelector, otherKeySelector) {\n return ArrayExt.leftJoin(this, otherArr, keySelector, otherKeySelector);\n }\n });\n Object.defineProperty(Array.prototype, \"rightJoin\", {\n enumerable: false,\n writable: true,\n value: function (otherArr, keySelector, otherKeySelector) {\n return ArrayExt.leftJoin(otherArr, this, keySelector, otherKeySelector);\n }\n });\n Object.defineProperty(Array.prototype, \"fullOuterJoin\", {\n enumerable: false,\n writable: true,\n value: function (otherArr, keySelector, otherKeySelector) {\n return ArrayExt.fullOuterJoin(otherArr, this, keySelector, otherKeySelector);\n }\n });\n Object.defineProperty(Array.prototype, \"recurse\", {\n enumerable: false,\n writable: true,\n value: function (childSelector, action) {\n for (var i = 0; i < this.length; i++) {\n action(this[i]);\n var childArr = childSelector(this[i]);\n if (childArr) {\n childArr.recurse(childSelector, action);\n }\n }\n }\n });\n Object.defineProperty(Array.prototype, \"selectMany\", {\n enumerable: false,\n writable: true,\n value: function (selector) {\n return this.reduce(function (out, v) {\n var vres = selector(v);\n if (vres != null) {\n if (!Array.isArray(vres))\n vres = [vres];\n out.push.apply(out, vres);\n }\n return out;\n }, []);\n }\n });\n var ArrayExt = /** @class */ (function () {\n function ArrayExt() {\n }\n ArrayExt.innerJoin = function (thisArr, otherArr, keySelector, otherKeySelector) {\n var arrSmall;\n var dbBig = {}; //dictionary of the bigger array indexed by key\n var smallKeySelector;\n if (thisArr.length <= otherArr.length) {\n arrSmall = thisArr;\n smallKeySelector = keySelector;\n //fill in the big db\n otherArr.forEach(function (i) {\n var key = otherKeySelector(i);\n dbBig[key] = dbBig[key] || [];\n dbBig[key].push(i);\n });\n }\n else {\n arrSmall = otherArr;\n smallKeySelector = otherKeySelector;\n //fill in the big db\n thisArr.forEach(function (i) {\n var key = keySelector(i);\n dbBig[key] = dbBig[key] || [];\n dbBig[key].push(i);\n });\n }\n var result = [];\n arrSmall.forEach(function (item) {\n var key = smallKeySelector(item);\n if (dbBig.hasOwnProperty(key)) {\n dbBig[key].forEach(function (i) {\n //create a new object to leave the source arrays as is\n result.push(Object.assign({}, item, i));\n });\n }\n });\n return result;\n };\n ArrayExt.leftJoin = function (thisArr, otherArr, keySelector, otherKeySelector) {\n var dbOther = {};\n otherArr.forEach(function (i) {\n var key = otherKeySelector(i);\n dbOther[key] = dbOther[key] || [];\n dbOther[key].push(i);\n });\n var result = [];\n thisArr.forEach(function (item) {\n var key = keySelector(item);\n if (dbOther[key]) {\n dbOther[key].forEach(function (i) {\n //create a new object to leave the source arrays as is\n result.push(Object.assign({}, item, i));\n });\n }\n else {\n result.push(Object.assign({}, item));\n }\n });\n return result;\n };\n ArrayExt.fullOuterJoin = function (thisArr, otherArr, keySelector, otherKeySelector) {\n var arrSmall;\n var dbBig = {}; //dictionary of the bigger array indexed by key\n var smallKeySelector;\n if (thisArr.length <= otherArr.length) {\n arrSmall = thisArr;\n smallKeySelector = keySelector;\n //fill in the big db\n otherArr.forEach(function (i) {\n var key = otherKeySelector(i);\n dbBig[key] = dbBig[key] || [];\n dbBig[key].push(i);\n });\n }\n else {\n arrSmall = otherArr;\n smallKeySelector = otherKeySelector;\n //fill in the big db\n thisArr.forEach(function (i) {\n var key = keySelector(i);\n dbBig[key] = dbBig[key] || [];\n dbBig[key].push(i);\n });\n }\n var result = [];\n arrSmall.forEach(function (item) {\n var key = smallKeySelector(item);\n if (dbBig.hasOwnProperty(key)) {\n dbBig[key].forEach(function (i) {\n //create a new object to leave the source arrays as is\n result.push(Object.assign({}, item, i));\n });\n // Delete the item from dbBig... anything remaining in this\n // list will be added at the end.\n delete dbBig[key];\n }\n else {\n // The item is not in the \"big\" array, but we add it to the\n // result as part of the outer join.\n result.push(Object.assign({}, item));\n }\n });\n // Now we just add the items left over from the big array that\n // didn't match the keys.\n for (var key in dbBig) {\n var item = dbBig[key];\n item.forEach(function (i) { return result.push(Object.assign({}, i)); });\n }\n return result;\n };\n return ArrayExt;\n }());\n Object.defineProperty(Array.prototype, \"toObject\", {\n enumerable: false,\n writable: true,\n value: function (keySelector) {\n return this.reduce(function (o, item) {\n o[keySelector(item)] = item;\n return o;\n }, {});\n }\n });\n Object.defineProperty(Array.prototype, \"flatten\", {\n enumerable: false,\n writable: true,\n value: function (childSelector) {\n var r = [];\n var f = function (item) {\n r.push(item);\n var children = childSelector(item);\n if (children) {\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var i = children_1[_i];\n f(i);\n }\n }\n };\n for (var _i = 0, _a = this; _i < _a.length; _i++) {\n var i = _a[_i];\n f(i);\n }\n return r;\n }\n });\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function (target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n nextSource = Object(nextSource);\n var keysArray = Object.keys(nextSource);\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n }\n });\n }\n if (!Object.values) {\n Object.defineProperty(Object, 'values', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function (o) {\n return Object.keys(o).map(function (key) { return o[key]; });\n }\n });\n }\n if (!('toJSON' in Error.prototype)) {\n Object.defineProperty(Error.prototype, 'toJSON', {\n value: function () {\n var alt = {};\n Object.getOwnPropertyNames(this).forEach(function (key) {\n alt[key] = this[key];\n }, this);\n return alt;\n },\n configurable: true,\n writable: true\n });\n }\n\n var KbEvent = /** @class */ (function () {\n function KbEvent() {\n /** ordered list to hold the listeners sorted by their priority. The lower the number, the higher the priority */\n this._listeners = [];\n }\n KbEvent.prototype.add = function (callback, tag) {\n if (tag === void 0) { tag = null; }\n this._listeners.push({ callback: callback, tag: tag });\n };\n KbEvent.prototype.remove = function (callback) {\n if (typeof callback === \"function\") {\n for (var i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i].callback === callback) {\n this._listeners.splice(i, 1);\n break;\n }\n }\n }\n else {\n this._listeners.length = 0;\n }\n };\n /*\n * removes all listeners with the given tag\n */\n KbEvent.prototype.removeByTag = function (tag) {\n for (var i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i].tag === tag) {\n this._listeners.splice(i, 1);\n }\n }\n };\n KbEvent.prototype.trigger = function (args) {\n for (var _i = 0, _a = this._listeners; _i < _a.length; _i++) {\n var l = _a[_i];\n l.callback.apply(null, [args]);\n }\n };\n return KbEvent;\n }());\n\n var Logger = /** @class */ (function () {\n function Logger() {\n }\n Logger.logRuleStart = function (configName, ruleType) {\n if (Logger.writeRuleCycleLogs) {\n var startTime = Date.now();\n if (Logger.writeRuleCycleLogs) {\n console.log(\"%cRULE -> \".concat(configName, \" -> \").concat(ruleType, \" -> START\"), \"background: rgba(0,182,255,0.3)\");\n }\n return startTime;\n }\n };\n Logger.logRuleEnd = function (configName, ruleType, start) {\n if (Logger.writeRuleCycleLogs) {\n var time = Date.now() - start;\n console.log(\"%cRULE -> \".concat(configName, \" -> \").concat(ruleType, \" -> END \").concat(time, \"ms\"), \"background: rgba(0,85,255,0.3)\");\n }\n };\n Logger.logSceneChange = function (msg) {\n if (Logger.writeSceneChangeLogs) {\n console.log(msg);\n }\n };\n Logger.writeRuleCycleLogs = false;\n Logger.writeSceneChangeLogs = false;\n return Logger;\n }());\n if (typeof window !== \"undefined\") {\n try {\n Logger.writeRuleCycleLogs = localStorage.getItem(\"writeRuleCycleLogs\") == \"true\";\n Logger.writeSceneChangeLogs = localStorage.getItem(\"writeSceneChangeLogs\") == \"true\";\n }\n catch (_a) { }\n }\n\n var Map = /** @class */ (function () {\n function Map() {\n this._data = [];\n }\n Map.prototype.set = function (key, value) {\n var existingValue = this.getItem(key);\n if (existingValue) {\n existingValue.value = value;\n }\n this._data.push({\n key: key,\n value: value\n });\n };\n Map.prototype.get = function (key) {\n var mapping = this.getItem(key);\n if (!mapping)\n return null;\n return mapping.value;\n };\n Map.prototype.delete = function (key) {\n this._data.removeWhere(function (d) { return d.key == key; });\n };\n Map.prototype.getItem = function (key) {\n return this._data.find(function (d) { return d.key == key; });\n };\n return Map;\n }());\n\n (function (eScrollMode) {\n eScrollMode[eScrollMode[\"nearest\"] = 0] = \"nearest\";\n eScrollMode[eScrollMode[\"middleIfNecessary\"] = 1] = \"middleIfNecessary\";\n })(exports.eScrollMode || (exports.eScrollMode = {}));\n var Utils = /** @class */ (function () {\n function Utils() {\n }\n Utils.loadScriptAsync = function (src) {\n var deferred = Q.defer();\n var s, t;\n s = document.createElement('script');\n s.type = 'text/javascript';\n s.src = src;\n s.onload = function () {\n deferred.resolve();\n };\n t = document.getElementsByTagName('script')[0];\n t.parentNode.insertBefore(s, t);\n return deferred.promise;\n };\n Utils.replaceAll = function (str, find, replace) {\n if (str) {\n return str.replaceAll(find, replace);\n }\n return str;\n };\n Utils.scrubName = function (str) {\n if (!str)\n return \"\";\n return str.replace(/[^a-z0-9]/gi, \"_\");\n };\n Utils.guard = function (condition, failMessage) {\n if (!condition)\n throw (failMessage ? failMessage : \"Guard failed\");\n };\n Utils.guardNotNull = function (variable, failMessage) {\n Utils.guard(variable !== null && variable !== undefined, (failMessage ? failMessage : \"Value must not be null\"));\n };\n Utils.guardNotEmpty = function (variable, failMessage) {\n Utils.guard(variable !== null && variable !== undefined && variable.length > 0, (failMessage ? failMessage : \"String must not be empty\"));\n };\n Utils.getParameterByName = function (url, name) {\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\n var results = regex.exec(url);\n return results == null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n };\n Utils.isDefined = function (o) {\n return typeof o !== \"undefined\";\n };\n Utils.extend = function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n var o;\n if (objects && objects.length) {\n o = objects[0];\n for (var i = 1; i < objects.length; i++) {\n var o2 = objects[i];\n for (var prop in o2) {\n if (o2.hasOwnProperty(prop)) {\n o[prop] = o2[prop];\n }\n }\n }\n }\n return o;\n };\n Utils.getFilenameWithoutExtension = function (path) {\n var filename = path.substring(path.lastIndexOf(\"/\") + 1);\n var sections = filename.split(\".\");\n return sections[0];\n };\n Utils.getExtension = function (path) {\n var a = document.createElement(\"a\");\n a.href = path;\n // tslint:disable-next-line:no-bitwise\n return a.pathname.substr((~-a.pathname.lastIndexOf(\".\") >>> 0) + 2);\n };\n Utils.isAbsoluteUrl = function (url) {\n return Utils.ABS_URL_REGEX.test(url);\n };\n Utils.isGuid = function (guid) {\n return (Utils.GUID_REGEX.exec(guid) != null);\n };\n /**\n * a shorter version of a uuid that is way more unique than we need\n */\n Utils.shortId = function () {\n var x = 2147483648;\n // added the slice to get us down to 9 characters\n return Math.floor(Math.random() * x).toString(36).slice(0, 3) +\n // tslint:disable-next-line:no-bitwise\n Math.abs(Math.floor(Math.random() * x) ^ (new Date()).getTime()).toString(36);\n };\n Utils.areEqual = function (str1, str2) {\n return (str1 ? str1.toString().toUpperCase() : undefined) ===\n (str2 ? str2.toString().toUpperCase() : undefined);\n };\n Utils.toSafeString = function (o) {\n return (o === undefined || o === null ? \"\" : String(o));\n };\n Utils.supportsFullscreen = function () {\n var doc = document;\n return !!(doc.documentElement.requestFullscreen ||\n doc.documentElement.msRequestFullscreen ||\n doc.documentElement.mozRequestFullScreen ||\n doc.documentElement.webkitRequestFullscreen);\n };\n Utils.toggleFullscreen = function () {\n var doc = document;\n if (!doc.fullscreenElement && // alternative standard method\n !doc.mozFullScreenElement &&\n !doc.webkitFullscreenElement &&\n !doc.msFullscreenElement) { // current working methods\n if (doc.documentElement.requestFullscreen) {\n doc.documentElement.requestFullscreen();\n }\n else if (doc.documentElement.msRequestFullscreen) {\n doc.documentElement.msRequestFullscreen();\n }\n else if (doc.documentElement.mozRequestFullScreen) {\n doc.documentElement.mozRequestFullScreen();\n }\n else if (doc.documentElement.webkitRequestFullscreen) {\n doc.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n }\n }\n else {\n if (doc.exitFullscreen) {\n doc.exitFullscreen();\n }\n else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n }\n else if (doc.mozCancelFullScreen) {\n doc.mozCancelFullScreen();\n }\n else if (doc.webkitExitFullscreen) {\n doc.webkitExitFullscreen();\n }\n }\n };\n Utils.supportsVr = function () {\n try {\n if (window.navigator.getVRDisplays) {\n return window.navigator.getVRDisplays().then(function (displays) {\n var res = false;\n if (displays.length) {\n var userAgent = window.navigator.userAgent;\n var deviceIncapable = /iPad|iPhone|iPod/.test(userAgent);\n if (/Android/.test(userAgent)) {\n deviceIncapable = /^(?!.*Mobile).*$/.test(userAgent);\n }\n res = displays[0].capabilities.canPresent && !deviceIncapable;\n }\n return res;\n });\n }\n else {\n return Q.when(false);\n }\n }\n catch (e) {\n return Q.when(false);\n }\n };\n Utils.isIos = function () {\n if (!this._iosChecked) {\n this._isIos = new RegExp(\"/iPad|iPhone|iPod/\").test(navigator.userAgent) && !window.MSStream;\n this._iosChecked = true;\n }\n return this._isIos;\n };\n /**\n * sends a message to the parent page, if the current page is in an iframe\n */\n Utils.sendMessageToParent = function (msg) {\n //if we are not in an iframe, then window.parent just returns the window we are in\n if (window) {\n window.postMessage(msg, \"*\");\n }\n if (window.parent && window.parent != window) {\n window.parent.postMessage(msg, \"*\");\n }\n };\n Utils.downloadFile = function (url) {\n var ext = Utils.getExtension(url);\n var filename = Utils.getFilenameWithoutExtension(url);\n var link = $(\"\");\n link.attr(\"href\", url)\n .attr(\"target\", \"_blank\")\n .attr(\"download\", filename + \".\" + ext)[0].click();\n };\n /**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n */\n Utils.debounce = function (func, wait, immediate) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate)\n func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow)\n func.apply(context, args);\n };\n };\n /// **\n // * debounces a promise returning function so that at any instant only one call is pending\n // * @param func\n // */\n // public static promiseDebounce(func: Function) {\n // var pending = null;\n // function clear() { pending = null; }\n // return function () {\n // var ctx = this;\n // if (pending) return pending;\n // pending = func.apply(ctx, arguments);\n // pending.then(clear, clear);\n // return pending;\n // }\n // }\n /**\n * throttles a function to only be called at most only once every n milliseconds\n */\n Utils.throttle = function (fn, threshhold, scope) {\n var last;\n var deferTimer;\n return function () {\n var context = scope || this;\n var args = arguments;\n if (threshhold <= 0) {\n fn.apply(context, args);\n }\n else {\n var now_1 = +new Date();\n if (last && now_1 < last + threshhold) {\n // hold on to it\n clearTimeout(deferTimer);\n deferTimer = setTimeout(function () {\n last = now_1;\n fn.apply(context, args);\n }, threshhold);\n }\n else {\n last = now_1;\n fn.apply(context, args);\n }\n }\n };\n };\n Utils.getRelativePos = function (child, ancestor) {\n var left = 0;\n var top = 0;\n var el = child;\n do {\n left += el.offsetLeft;\n top += el.offsetTop;\n } while ((el = el.offsetParent) && el !== ancestor);\n return { left: left, top: top };\n };\n Utils.escapeMarkup = function (value) {\n var textNode = document.createTextNode(value);\n var div = document.createElement('div');\n div.appendChild(textNode);\n return div.innerHTML;\n };\n Utils.scrollIntoView = function (o) {\n if (!o.elem)\n return;\n var $elem = $(o.elem);\n var $scrollParent = $elem.scrollParent();\n o.nearestStartPadding = o.nearestStartPadding || 0;\n o.nearestEndPadding = o.nearestEndPadding || 0;\n var set = function (scrollProp, value) {\n var _a;\n if (o.animate) {\n $scrollParent.animate((_a = {}, _a[scrollProp] = value, _a), 150);\n }\n else {\n $scrollParent[0][scrollProp] = value;\n }\n };\n var elemPos = this.getRelativePos(o.elem, $scrollParent[0]);\n var elemRect = o.elem.getBoundingClientRect();\n if (o.mode == exports.eScrollMode.nearest) {\n if (o.horizontal) {\n var elemLeft = elemPos.left;\n var elemRight = elemLeft + elemRect.width;\n var scrollLeft = $scrollParent[0].scrollLeft;\n var containerWidth = $scrollParent[0].clientWidth;\n if (elemLeft - scrollLeft < 0) {\n set(\"scrollLeft\", elemLeft - o.nearestStartPadding);\n }\n else if (elemRight > scrollLeft + containerWidth) {\n set(\"scrollLeft\", elemRight - containerWidth + o.nearestEndPadding);\n }\n }\n else {\n var elemTop = elemPos.top;\n var elemBottom = elemTop + elemRect.height;\n var scrollTop = $scrollParent[0].scrollTop;\n var containerHeight = $scrollParent[0].clientHeight;\n if (elemTop - scrollTop < 0) {\n set(\"scrollTop\", elemTop - o.nearestStartPadding);\n }\n else if (elemBottom > scrollTop + containerHeight) {\n set(\"scrollTop\", elemBottom - containerHeight + o.nearestEndPadding);\n }\n }\n }\n else if (o.mode == exports.eScrollMode.middleIfNecessary) {\n if (o.horizontal) {\n var elemLeft = elemPos.left;\n var elemWidth = elemRect.width;\n var scrollLeft = $scrollParent[0].scrollLeft;\n var containerWidth = $scrollParent[0].clientWidth;\n if (elemLeft - scrollLeft < 0 || elemLeft + elemWidth > scrollLeft + containerWidth) {\n var newScrollLeft = elemLeft + (elemWidth / 2) - (containerWidth / 2);\n //if the elem is taller than the scroll window, we at least want the top visible\n if (newScrollLeft > elemLeft)\n newScrollLeft = elemLeft;\n set(\"scrollLeft\", newScrollLeft);\n }\n }\n else {\n var elemTop = elemPos.top;\n var elemHeight = elemRect.height;\n var scrollTop = $scrollParent[0].scrollTop;\n var containerHeight = $scrollParent[0].clientHeight;\n if (elemTop - scrollTop < 0 || elemTop + elemHeight > scrollTop + containerHeight) {\n var newScrollTop = elemTop + (elemHeight / 2) - (containerHeight / 2);\n //if the elem is taller than the scroll window, we at least want the top visible\n if (newScrollTop > elemTop)\n newScrollTop = elemTop;\n set(\"scrollTop\", newScrollTop);\n }\n }\n }\n // let itemPosition = $item.position();\n // let itemBottom = itemPosition.top + $item.outerHeight(true);\n // let scrollTop = $scrollParent.scrollTop();\n // $scrollParent.scrollTop(scrollTop + itemBottom - $scrollParent.innerHeight());\n };\n Utils.MOBILE_WIDTH = 847;\n Utils.ABS_URL_REGEX = /^(?:[a-z]+:)?\\/\\//i;\n Utils.GUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return Utils;\n }());\n\n var MessageDispatcher = /** @class */ (function () {\n function MessageDispatcher(postTo, listenOn, $q) {\n var _this = this;\n this.postTo = postTo;\n this.listenOn = listenOn;\n this.$q = $q;\n this.asks = [];\n this.listens = [];\n // catch messages coming from the iframe\n listenOn.addEventListener(\"message\", function (event) {\n var msg = event.data;\n if (msg) {\n // if we are on the ask side, then we need to see if an answer came in\n var ask = _this.asks.find(function (a) { return a.msg.id == msg.id; });\n if (ask) {\n // remove the ask\n _this.asks.remove(ask);\n // resolve the promise\n ask.deferred.resolve(msg.data);\n }\n else { // if we are on the listen side, then we're listening for a name\n var listenMsg_1 = { name: msg.name, id: msg.id, data: msg.data };\n var listens = _this.listens.filter(function (l) { return l.name == msg.name; });\n listens.forEach(function (l) {\n l.handler(listenMsg_1);\n });\n }\n }\n });\n }\n MessageDispatcher.prototype.ask = function (name, data) {\n var deferred = this.$q.defer();\n var msg = {\n id: Utils.shortId(),\n name: name,\n data: data // data sent through postMessage cannot have functions or methods on it\n };\n this.asks.push({ msg: msg, deferred: deferred });\n this.postMessage(msg);\n return deferred.promise;\n };\n MessageDispatcher.prototype.listen = function (name, handler) {\n this.listens.push({ name: name, handler: handler });\n };\n MessageDispatcher.prototype.removeListen = function (name, handler) {\n if (handler) { // if handler is specified, we only remove that specific listen\n this.listens.removeWhere(function (l) { return l.name == name && l.handler == handler; });\n }\n else {\n this.listens.removeWhere(function (l) { return l.name == name; });\n }\n };\n MessageDispatcher.prototype.answer = function (originalMsg, data) {\n // post message back to other window\n var msg = {\n id: originalMsg.id,\n name: originalMsg.name + \" answer\",\n data: data\n };\n this.postMessage(msg);\n };\n MessageDispatcher.prototype.inWorker = function () {\n return typeof Worker === \"undefined\";\n };\n MessageDispatcher.prototype.postMessage = function (msg) {\n if (this.inWorker() || this.postTo instanceof Worker) {\n this.postTo.postMessage(msg);\n }\n else {\n this.postTo.postMessage(msg, \"*\");\n }\n };\n return MessageDispatcher;\n }());\n\n /**\n * helpers for filtering and ranking arrays for autocomplete type functionality\n */\n var SearchUtils = /** @class */ (function () {\n function SearchUtils() {\n }\n SearchUtils.search = function (query, arr, valueFn, maxItems, matchFn, noMatchFn) {\n if (maxItems === void 0) { maxItems = 10; }\n if (matchFn === void 0) { matchFn = null; }\n if (noMatchFn === void 0) { noMatchFn = null; }\n var sorted = [];\n var add = function (item) {\n var value = valueFn(item);\n var score = scoreDb[value];\n var indexMin = 0;\n var indexMax = sorted.length;\n while (indexMin < indexMax) {\n var indexMid = Math.floor((indexMin + indexMax) / 2);\n var midScore = scoreDb[valueFn(sorted[indexMid])];\n //if the insert item is less than existing\n if (score > midScore) {\n indexMax = indexMid;\n }\n else if (score < midScore) {\n indexMin = indexMid + 1;\n }\n else { //they are equal\n indexMin = indexMid;\n break;\n }\n }\n sorted.splice(indexMin, 0, item);\n };\n //first get rid of duplicates\n var db = {};\n arr.forEach(function (item) { return db[valueFn(item)] = item; });\n var scoreDb = {};\n var keys = Object.keys(db);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var score = 0;\n if (key && query)\n score = SearchUtils.score(key, query, 0);\n if (score > 0) {\n scoreDb[key] = score;\n add(db[key]);\n if (matchFn)\n matchFn(db[key]);\n }\n else {\n if (noMatchFn)\n noMatchFn(db[key]);\n }\n }\n if (maxItems > 0 && sorted.length >= maxItems) {\n sorted = sorted.slice(0, maxItems - 1);\n }\n return sorted;\n };\n /*!\n * string_score.js: String Scoring Algorithm 0.1.22\n *\n * http://joshaven.com/string_score\n * https://github.com/joshaven/string_score\n */\n SearchUtils.score = function (phrase, query, fuzziness) {\n // If the string is equal to the word, perfect match.\n if (phrase === query) {\n return 1;\n }\n //if it's not a perfect match and is empty return 0\n if (query === \"\") {\n return 0;\n }\n var runningScore = 0, charScore, finalScore, string = phrase, lString = string.toLowerCase(), strLength = string.length, lWord = query.toLowerCase(), wordLength = query.length, idxOf, startAt = 0, fuzzies = 1, fuzzyFactor, i;\n // Cache fuzzyFactor for speed increase\n if (fuzziness) {\n fuzzyFactor = 1 - fuzziness;\n }\n // Walk through word and add up scores.\n // Code duplication occurs to prevent checking fuzziness inside for loop\n if (fuzziness) {\n for (i = 0; i < wordLength; i += 1) {\n // Find next first case-insensitive match of a character.\n idxOf = lString.indexOf(lWord[i], startAt);\n if (idxOf === -1) {\n fuzzies += fuzzyFactor;\n }\n else {\n if (startAt === idxOf) {\n // Consecutive letter & start-of-string Bonus\n charScore = 0.7;\n }\n else {\n charScore = 0.1;\n // Acronym Bonus\n // Weighing Logic: Typing the first character of an acronym is as if you\n // preceded it with two perfect character matches.\n if (string[idxOf - 1] === ' ') {\n charScore += 0.5;\n }\n }\n // Same case bonus.\n if (string[idxOf] === query[i]) {\n charScore += 0.1;\n }\n // Update scores and startAt position for next round of indexOf\n runningScore += charScore;\n startAt = idxOf + 1;\n }\n }\n }\n else {\n for (i = 0; i < wordLength; i += 1) {\n idxOf = lString.indexOf(lWord[i], startAt);\n if (-1 === idxOf) {\n return 0;\n }\n if (startAt === idxOf) {\n charScore = 0.7;\n }\n else {\n charScore = 0.1;\n if (string[idxOf - 1] === ' ') {\n charScore += 0.5;\n }\n }\n if (string[idxOf] === query[i]) {\n charScore += 0.1;\n }\n runningScore += charScore;\n startAt = idxOf + 1;\n }\n }\n // Reduce penalty for longer strings.\n finalScore = 0.5 * (runningScore / strLength + runningScore / wordLength) / fuzzies;\n if ((lWord[0] === lString[0]) && (finalScore < 0.85)) {\n finalScore += 0.15;\n }\n return finalScore;\n };\n return SearchUtils;\n }());\n\n var UnitOfMeasurement = /** @class */ (function () {\n function UnitOfMeasurement() {\n }\n UnitOfMeasurement.create = function (name, multiplier, offset) {\n var result = new UnitOfMeasurement();\n result.name = name;\n result.multiplier = multiplier;\n result.offset = offset ? offset : 0;\n return result;\n };\n return UnitOfMeasurement;\n }());\n var Units = /** @class */ (function () {\n function Units() {\n }\n Units.convert = function (type, from, to, value) {\n var measurements = Units[type];\n if (!measurements)\n throw new Error(\"Unit type \" + type + \" not found\");\n var fromUnit = measurements.find(function (m) { return m.name == from; });\n if (!fromUnit)\n throw new Error(\"Unit \" + from + \"not found\");\n var toUnit = measurements.find(function (m) { return m.name == to; });\n if (!toUnit)\n throw new Error(\"Unit \" + to + \" not found\");\n return Math.round(((value * 1 / fromUnit.multiplier * toUnit.multiplier) -\n ((toUnit.offset * toUnit.multiplier) - (fromUnit.offset * fromUnit.multiplier))) * 10000) / 10000;\n };\n Units.distance = [\n UnitOfMeasurement.create(\"meters\", 1),\n UnitOfMeasurement.create(\"millimeters\", 1000),\n UnitOfMeasurement.create(\"centimeters\", 100),\n UnitOfMeasurement.create(\"kilometers\", 0.001),\n UnitOfMeasurement.create(\"inches\", 39.3701),\n UnitOfMeasurement.create(\"feet\", 3.28084),\n UnitOfMeasurement.create(\"yards\", 1.09361),\n UnitOfMeasurement.create(\"miles\", 0.000621371)\n ];\n Units.area = [\n UnitOfMeasurement.create(\"sq. millimeters\", 1000000),\n UnitOfMeasurement.create(\"sq. centimeters\", 10000),\n UnitOfMeasurement.create(\"sq. meters\", 1),\n UnitOfMeasurement.create(\"sq. kilometers\", 0.000001),\n UnitOfMeasurement.create(\"sq. yard\", 1.19599),\n UnitOfMeasurement.create(\"sq. feet\", 10.7639),\n UnitOfMeasurement.create(\"sq. inch\", 1550),\n UnitOfMeasurement.create(\"hectacre\", 0.0001),\n UnitOfMeasurement.create(\"acre\", 0.000247105)\n ];\n Units.volume = [\n UnitOfMeasurement.create(\"liters\", 1),\n UnitOfMeasurement.create(\"US gallons\", 0.264172),\n UnitOfMeasurement.create(\"US quarts\", 1.05669),\n UnitOfMeasurement.create(\"US pints\", 2.11338),\n UnitOfMeasurement.create(\"US cups\", 4.16667),\n UnitOfMeasurement.create(\"US ounces\", 33.814),\n UnitOfMeasurement.create(\"US tablespoons\", 67.628),\n UnitOfMeasurement.create(\"US teaspoons\", 202.884),\n UnitOfMeasurement.create(\"cubic meters\", 0.001),\n UnitOfMeasurement.create(\"milliliters\", 1000),\n UnitOfMeasurement.create(\"imperial gallons\", 0.219969),\n UnitOfMeasurement.create(\"imperial quarts\", 0.879877),\n UnitOfMeasurement.create(\"imperial pints\", 1.75975),\n UnitOfMeasurement.create(\"imperial cups\", 3.51951),\n UnitOfMeasurement.create(\"imperial ounces\", 35.1951),\n UnitOfMeasurement.create(\"imperial tablespoons\", 56.3121),\n UnitOfMeasurement.create(\"imperial teaspoons\", 168.936),\n UnitOfMeasurement.create(\"cubic feet\", 0.0353147),\n UnitOfMeasurement.create(\"cubic inches\", 61.0237)\n ];\n /*public static temperature: UnitOfMeasurement[] = [\n UnitOfMeasurement.create(\"kelvin\", 1),\n UnitOfMeasurement.create(\"celsius\", 1, 272.15),\n UnitOfMeasurement.create(\"fahrenheit\", 1.8, 255.372)\n ];*/\n Units.weight = [\n UnitOfMeasurement.create(\"kilograms\", 1),\n UnitOfMeasurement.create(\"grams\", 1000),\n UnitOfMeasurement.create(\"metric tons\", 0.001),\n UnitOfMeasurement.create(\"milligrams\", 1000000),\n UnitOfMeasurement.create(\"micrograms\", 1000000000),\n UnitOfMeasurement.create(\"imperial tons\", 0.000984207),\n UnitOfMeasurement.create(\"US tons\", 0.00110231),\n UnitOfMeasurement.create(\"stones\", 0.157473),\n UnitOfMeasurement.create(\"pounds\", 2.20462),\n UnitOfMeasurement.create(\"ounces\", 35.274)\n ];\n Units.pressure = [\n UnitOfMeasurement.create(\"pascals\", 1),\n UnitOfMeasurement.create(\"bars\", 0.00001),\n UnitOfMeasurement.create(\"atmospheres\", 0.0000098692),\n UnitOfMeasurement.create(\"psi\", 0.000145038),\n UnitOfMeasurement.create(\"torrs\", 0.00750062),\n UnitOfMeasurement.create(\"hg\", 0.0002953)\n ];\n Units.angle = [\n UnitOfMeasurement.create(\"radians\", 1),\n UnitOfMeasurement.create(\"degrees\", 57.2958),\n UnitOfMeasurement.create(\"gradians\", 63.662),\n UnitOfMeasurement.create(\"milliradians\", 1000),\n UnitOfMeasurement.create(\"minutes\", 3437.75),\n UnitOfMeasurement.create(\"seconds\", 206265)\n ];\n return Units;\n }());\n\n exports.ArrayExt = ArrayExt;\n exports.Color = Color;\n exports.KbEvent = KbEvent;\n exports.Logger = Logger;\n exports.Map = Map;\n exports.MessageDispatcher = MessageDispatcher;\n exports.SNAP_VERSION = SNAP_VERSION;\n exports.SearchUtils = SearchUtils;\n exports.UnitOfMeasurement = UnitOfMeasurement;\n exports.Units = Units;\n exports.Utils = Utils;\n exports.currencies = currencies;\n\n return exports;\n\n}({}, Q));\n\n\n/*\r\n This file is a shim to make rule utilities available globally. We concat it with the rules bundle\r\n after the bundle is already made.\r\n*/\r\n\r\nvar Units = tools.Units;\n//# sourceMappingURL=tools.js.map\n","export const SNAP_VERSION = 2;\r\n\r\n// Most common keyboard commands (mostly unprintable keycodes right now)\r\nexport enum keyboard {\r\n backspace = 8,\r\n tab = 9,\r\n enter = 13,\r\n shift = 16,\r\n ctrl = 17,\r\n alt = 18,\r\n pause = 19,\r\n capslock = 20,\r\n escape = 27,\r\n pageup = 33,\r\n pagedown = 34,\r\n end = 35,\r\n home = 36,\r\n left = 37,\r\n up = 38,\r\n right = 39,\r\n down = 40,\r\n insert = 45,\r\n deleter = 46,\r\n space = 32,\r\n comma = 188\r\n}\r\n\r\nexport enum events {\r\n loginRequested = \"loginRequested\",\r\n loginSuccessful = \"loginSuccessful\",\r\n logout = \"logout\",\r\n avatarChanged = \"avatarChanged\",\r\n permissionDenied = \"permissionDenied\",\r\n}\r\n\r\nexport enum extensions {\r\n image = \"jpg,png,gif,bmp\",\r\n video = \"mp4,webm,ogg,ogv\",\r\n environments = \"env,dds,hdr\"\r\n}\r\n\r\nexport const currencies = {\r\n USD: \"$\",\r\n EUR: \"\\u20ac\",\r\n GBP: \"\\u00a3\",\r\n AUD: \"$\",\r\n CAD: \"$\",\r\n JPY: \"\\u00a5\"\r\n};\r\n\r\nexport enum eDateUnit {\r\n seconds = \"Seconds\",\r\n minutes = \"Minutes\",\r\n hours = \"Hours\",\r\n date = \"Date\",\r\n month = \"Month\",\r\n fullYear = \"FullYear\"\r\n}\r\n\r\nexport enum icons {\r\n error = \"\",\r\n childError = \"\",\r\n cancel = \"\",\r\n save = \"\",\r\n add = \"\", // \"\",\r\n minus = \"\",\r\n deleter = \"\",\r\n paste = \"\",\r\n anonymize = \"\",\r\n edit = \"\",\r\n hamburger = \"\",\r\n change = \"\",\r\n help = \"\",\r\n info = \"\",\r\n infoCircle = \"\",\r\n success = \"\",\r\n folder = \"\",\r\n upload = \"\",\r\n download = \"\",\r\n refresh = \"\",\r\n rename = \"\",\r\n crumb = \"\",\r\n image = \"\",\r\n addFolder = \"\",\r\n open = \"\",\r\n localization = \"\",\r\n camera = \"\",\r\n user = \"\",\r\n users = \"\",\r\n quote = \"\",\r\n products = \"\",\r\n standardProducts = \"\",\r\n company = \"\",\r\n gear = \"\",\r\n gears = \"\",\r\n role = \"\",\r\n roles = \"\", // \"\",\r\n theme = \"\",\r\n queue = \"\",\r\n builder = \"\",\r\n tag = \"\",\r\n tags = \"\",\r\n comment = \"\",\r\n attachment = \"\",\r\n rule = \"\", // \"\",\r\n popout = \"\",\r\n popin = \"\",\r\n play = \"\", \r\n list = \"\",\r\n tile = \"\",\r\n search = \"\",\r\n earth = \"\",\r\n flag = \"\",\r\n mail = \"\",\r\n all = \"\",\r\n clear = \"\",\r\n dollar = \"\",\r\n template = \"\",\r\n templates = \"\",\r\n up = \"\",\r\n down = \"\",\r\n right = \"\",\r\n left = \"\",\r\n infrastructure = \"\",\r\n database = \"\",\r\n integrations = \"\",\r\n workflowSelector = \"\",\r\n tools = \"\",\r\n settings = \"\",\r\n permission = \"\",\r\n workflow = \"\",\r\n email = \"\",\r\n approve = \"\",\r\n reject = \"\",\r\n shipping = \"\",\r\n logout = \"\",\r\n deploy = \"\",\r\n globe = \"\",\r\n generators = \"\",\r\n generator = \"\",\r\n resources = \"\",\r\n output = \"\",\r\n cleanworkspace = \"\",\r\n undo = \"\",\r\n redo = \"\",\r\n bold = \"\",\r\n italic = \"\",\r\n heading = \"\",\r\n link = \"\",\r\n img = \"\",\r\n capture = \"\",\r\n submit = \"\",\r\n discount = \"\",\r\n log = \"\",\r\n zoomIn = \"\",\r\n zoomOut = \"\",\r\n visible = \"\",\r\n notVisible = \"\",\r\n table = \"\",\r\n chevronLeft = \"\",\r\n chevronRight = \"\",\r\n chevronUp = \"\",\r\n chevronDown = \"\",\r\n fullscreen = \"\",\r\n exitFullscreen = \"\",\r\n vr = \"\",\r\n clone = \"\",\r\n hand = \"\",\r\n embed = \"\",\r\n safeFunction = \"\",\r\n function = \"\",\r\n globalDefinition = \"\",\r\n reference = \"\",\r\n more = \"\",\r\n plus = \"\",\r\n removed = \"\",\r\n test = \"\",\r\n name = \"\",\r\n cloud = \"\",\r\n filter = \"\",\r\n warning = \"\",\r\n hotspot = \"\",\r\n threeD = \"\",\r\n cube = \"\",\r\n column = \"\",\r\n report = \"\",\r\n lock = \"\",\r\n layout = \"\",\r\n layoutConfig = \"\",\r\n channels = \"\",\r\n history = \"\",\r\n view = \"\",\r\n automationStudio = \"\",\r\n\r\n complete = \"\",\r\n generating = \"\",\r\n failed = \"\",\r\n\r\n cast = \"\",\r\n setVar = \"\",\r\n getVar = \"\",\r\n\r\n alignVertical = \"\",\r\n alignRight = \"\",\r\n alignLeft = \"\",\r\n alignTop = \"\",\r\n alignBottom = \"\",\r\n alignHorizontal = \"\",\r\n shrink = \"\",\r\n stretch = \"\",\r\n\r\n centerText = \"\",\r\n leftText = \"\",\r\n rightText = \"\",\r\n justifyText = \"\",\r\n leftIndent = \"\",\r\n rightIndent = \"\",\r\n\r\n rotateRight = \"\",\r\n rotateLeft = \"\",\r\n\r\n // configurator types\r\n actionBar = \"\",\r\n configurator = \"\",\r\n page = \"\",\r\n group = \"\",\r\n ruleContainer = \"\", // folder\r\n pricingRuleContainer = \"\",\r\n action = \"\",\r\n builds = \"\",\r\n build = \"\",\r\n tabControl = \"◰\", //\"\", //\"\",\r\n tab = \"◳\", //\"\", // \"\",\r\n gridRow = \"▤\", //\"\",\r\n gridColumn = \"▥\", // \"\",\r\n accordion = \"\",\r\n expander = \"\", //\"\",\r\n button = \"\",\r\n toolbar = \"\",\r\n popup = \"\",\r\n dropdownButton = \"\",\r\n content = \"\",\r\n priceWidget = \"\",\r\n pageControl = \"\", //\"\",\r\n viewer = \"\", //\"\",\r\n canvas = \"\",\r\n container = \"\",\r\n pageNavigator = \"\",\r\n pageTabs = \"◰\",\r\n nestedSet = \"\",\r\n\r\n // controls\r\n textbox = \"\",\r\n numberbox = \"#\",\r\n checkbox = \"\",\r\n select = \"\",\r\n none = \"\",\r\n colorPicker = \"\",\r\n colorSelect = \"\",\r\n slider = \"\",\r\n multilineTextbox = \"\",\r\n label = \"L\",\r\n imageSelect = \"\",\r\n imageMultiSelect = \"\",\r\n autoComplete = \"\",\r\n media = \"\",\r\n mediaPicker = \"\",\r\n html = \"\",\r\n datePicker = \"\",\r\n swatchSelect = \"\",\r\n multiSelect = \"\", // \"\",\r\n colorMultiSelect = \"\",\r\n toggle = \"\",\r\n radio = \"\",\r\n svgViewer = \"\",\r\n\r\n\r\n // column types\r\n text = \"\",\r\n number = \"\",\r\n boolean = \"\",\r\n color = \"\",\r\n date = \"\",\r\n // localized = \"\",\r\n\r\n manufacture = \"\",\r\n material = \"\",\r\n operation = \"\",\r\n opdetail = \"\",\r\n\r\n outputFieldDefault = \"\",\r\n outputFieldWordList = \"\",\r\n outputFieldWordText = \"\",\r\n outputFieldWordImage = \"\",\r\n outputFieldWordContainer = \"\",\r\n outputFieldCadAnnotation = \"\",\r\n outputFieldCadDimension = \"\",\r\n outputFieldCadDynamicComponent = \"\",\r\n outputFieldMate = \"\",\r\n outputFieldCustomProperty = \"\",\r\n outputFieldCadComponent = \"\",\r\n kbmaxNotifications = \"\",\r\n send = \"\",\r\n}\r\n","\r\n/**\r\n * A color utility library. Inspired by tinycolor, but modified to work for us\r\n */\r\nexport class Color {\r\n\r\n private _originalInput: any;\r\n private _r: number;\r\n private _g: number;\r\n private _b: number;\r\n private _a: number;\r\n private _roundA: number;\r\n private _ok: boolean;\r\n\r\n constructor(color: any) {\r\n let rgb = Color.inputToRGB(color);\r\n this._originalInput = color,\r\n this._r = rgb.r,\r\n this._g = rgb.g,\r\n this._b = rgb.b,\r\n this._a = rgb.a,\r\n this._roundA = Math.round(100 * this._a) / 100;\r\n\r\n // Don't let the range of [0,255] come back in [0,1].\r\n // Potentially lose a little bit of precision here, but will fix issues where\r\n // .5 gets interpreted as half of the total, instead of half of 1\r\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\r\n if (this._r < 1) { this._r = Math.round(this._r); }\r\n if (this._g < 1) { this._g = Math.round(this._g); }\r\n if (this._b < 1) { this._b = Math.round(this._b); }\r\n\r\n this._ok = rgb.ok;\r\n }\r\n\r\n // Big List of Colors\r\n // ------------------\r\n // \r\n public static names = {\r\n aliceblue: \"f0f8ff\",\r\n antiquewhite: \"faebd7\",\r\n aqua: \"0ff\",\r\n aquamarine: \"7fffd4\",\r\n azure: \"f0ffff\",\r\n beige: \"f5f5dc\",\r\n bisque: \"ffe4c4\",\r\n black: \"000\",\r\n blanchedalmond: \"ffebcd\",\r\n blue: \"00f\",\r\n blueviolet: \"8a2be2\",\r\n brown: \"a52a2a\",\r\n burlywood: \"deb887\",\r\n burntsienna: \"ea7e5d\",\r\n cadetblue: \"5f9ea0\",\r\n chartreuse: \"7fff00\",\r\n chocolate: \"d2691e\",\r\n coral: \"ff7f50\",\r\n cornflowerblue: \"6495ed\",\r\n cornsilk: \"fff8dc\",\r\n crimson: \"dc143c\",\r\n cyan: \"0ff\",\r\n darkblue: \"00008b\",\r\n darkcyan: \"008b8b\",\r\n darkgoldenrod: \"b8860b\",\r\n darkgray: \"a9a9a9\",\r\n darkgreen: \"006400\",\r\n darkgrey: \"a9a9a9\",\r\n darkkhaki: \"bdb76b\",\r\n darkmagenta: \"8b008b\",\r\n darkolivegreen: \"556b2f\",\r\n darkorange: \"ff8c00\",\r\n darkorchid: \"9932cc\",\r\n darkred: \"8b0000\",\r\n darksalmon: \"e9967a\",\r\n darkseagreen: \"8fbc8f\",\r\n darkslateblue: \"483d8b\",\r\n darkslategray: \"2f4f4f\",\r\n darkslategrey: \"2f4f4f\",\r\n darkturquoise: \"00ced1\",\r\n darkviolet: \"9400d3\",\r\n deeppink: \"ff1493\",\r\n deepskyblue: \"00bfff\",\r\n dimgray: \"696969\",\r\n dimgrey: \"696969\",\r\n dodgerblue: \"1e90ff\",\r\n firebrick: \"b22222\",\r\n floralwhite: \"fffaf0\",\r\n forestgreen: \"228b22\",\r\n fuchsia: \"f0f\",\r\n gainsboro: \"dcdcdc\",\r\n ghostwhite: \"f8f8ff\",\r\n gold: \"ffd700\",\r\n goldenrod: \"daa520\",\r\n gray: \"808080\",\r\n green: \"008000\",\r\n greenyellow: \"adff2f\",\r\n grey: \"808080\",\r\n honeydew: \"f0fff0\",\r\n hotpink: \"ff69b4\",\r\n indianred: \"cd5c5c\",\r\n indigo: \"4b0082\",\r\n ivory: \"fffff0\",\r\n khaki: \"f0e68c\",\r\n lavender: \"e6e6fa\",\r\n lavenderblush: \"fff0f5\",\r\n lawngreen: \"7cfc00\",\r\n lemonchiffon: \"fffacd\",\r\n lightblue: \"add8e6\",\r\n lightcoral: \"f08080\",\r\n lightcyan: \"e0ffff\",\r\n lightgoldenrodyellow: \"fafad2\",\r\n lightgray: \"d3d3d3\",\r\n lightgreen: \"90ee90\",\r\n lightgrey: \"d3d3d3\",\r\n lightpink: \"ffb6c1\",\r\n lightsalmon: \"ffa07a\",\r\n lightseagreen: \"20b2aa\",\r\n lightskyblue: \"87cefa\",\r\n lightslategray: \"789\",\r\n lightslategrey: \"789\",\r\n lightsteelblue: \"b0c4de\",\r\n lightyellow: \"ffffe0\",\r\n lime: \"0f0\",\r\n limegreen: \"32cd32\",\r\n linen: \"faf0e6\",\r\n magenta: \"f0f\",\r\n maroon: \"800000\",\r\n mediumaquamarine: \"66cdaa\",\r\n mediumblue: \"0000cd\",\r\n mediumorchid: \"ba55d3\",\r\n mediumpurple: \"9370db\",\r\n mediumseagreen: \"3cb371\",\r\n mediumslateblue: \"7b68ee\",\r\n mediumspringgreen: \"00fa9a\",\r\n mediumturquoise: \"48d1cc\",\r\n mediumvioletred: \"c71585\",\r\n midnightblue: \"191970\",\r\n mintcream: \"f5fffa\",\r\n mistyrose: \"ffe4e1\",\r\n moccasin: \"ffe4b5\",\r\n navajowhite: \"ffdead\",\r\n navy: \"000080\",\r\n oldlace: \"fdf5e6\",\r\n olive: \"808000\",\r\n olivedrab: \"6b8e23\",\r\n orange: \"ffa500\",\r\n orangered: \"ff4500\",\r\n orchid: \"da70d6\",\r\n palegoldenrod: \"eee8aa\",\r\n palegreen: \"98fb98\",\r\n paleturquoise: \"afeeee\",\r\n palevioletred: \"db7093\",\r\n papayawhip: \"ffefd5\",\r\n peachpuff: \"ffdab9\",\r\n peru: \"cd853f\",\r\n pink: \"ffc0cb\",\r\n plum: \"dda0dd\",\r\n powderblue: \"b0e0e6\",\r\n purple: \"800080\",\r\n rebeccapurple: \"663399\",\r\n red: \"f00\",\r\n rosybrown: \"bc8f8f\",\r\n royalblue: \"4169e1\",\r\n saddlebrown: \"8b4513\",\r\n salmon: \"fa8072\",\r\n sandybrown: \"f4a460\",\r\n seagreen: \"2e8b57\",\r\n seashell: \"fff5ee\",\r\n sienna: \"a0522d\",\r\n silver: \"c0c0c0\",\r\n skyblue: \"87ceeb\",\r\n slateblue: \"6a5acd\",\r\n slategray: \"708090\",\r\n slategrey: \"708090\",\r\n snow: \"fffafa\",\r\n springgreen: \"00ff7f\",\r\n steelblue: \"4682b4\",\r\n tan: \"d2b48c\",\r\n teal: \"008080\",\r\n thistle: \"d8bfd8\",\r\n tomato: \"ff6347\",\r\n turquoise: \"40e0d0\",\r\n violet: \"ee82ee\",\r\n wheat: \"f5deb3\",\r\n white: \"fff\",\r\n whitesmoke: \"f5f5f5\",\r\n yellow: \"ff0\",\r\n yellowgreen: \"9acd32\"\r\n };\r\n\r\n // Make it easy to access colors via `hexNames[hex]`\r\n public static hexNames = Color.flip(Color.names);\r\n\r\n public isDark(): boolean {\r\n return this.getBrightness() < 128;\r\n }\r\n public isLight(): boolean {\r\n return !this.isDark();\r\n }\r\n public isValid(): boolean {\r\n return this._ok;\r\n }\r\n public getOriginalInput() {\r\n return this._originalInput;\r\n }\r\n public getAlpha() {\r\n return this._a;\r\n }\r\n public getBrightness() {\r\n // http://www.w3.org/TR/AERT#color-contrast\r\n let rgb = this.toRgb();\r\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\r\n }\r\n public getLuminance() {\r\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\r\n let rgb = this.toRgb();\r\n let R;\r\n let G;\r\n let B;\r\n let rsRGB = rgb.r / 255;\r\n let gsRGB = rgb.g / 255;\r\n let bsRGB = rgb.b / 255;\r\n\r\n if (rsRGB <= 0.03928) { R = rsRGB / 12.92; } else { R = Math.pow(((rsRGB + 0.055) / 1.055), 2.4); }\r\n if (gsRGB <= 0.03928) { G = gsRGB / 12.92; } else { G = Math.pow(((gsRGB + 0.055) / 1.055), 2.4); }\r\n if (bsRGB <= 0.03928) { B = bsRGB / 12.92; } else { B = Math.pow(((bsRGB + 0.055) / 1.055), 2.4); }\r\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\r\n }\r\n public setAlpha(value) {\r\n this._a = Color.boundAlpha(value);\r\n this._roundA = Math.round(100 * this._a) / 100;\r\n return this;\r\n }\r\n public toHsv() {\r\n let hsv = Color.rgbToHsv(this._r, this._g, this._b);\r\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\r\n }\r\n public toHsvString() {\r\n let hsv = Color.rgbToHsv(this._r, this._g, this._b);\r\n let h = Math.round(hsv.h * 360);\r\n let s = Math.round(hsv.s * 100);\r\n let v = Math.round(hsv.v * 100);\r\n return (this._a == 1) ?\r\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\r\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\r\n }\r\n public toHsl() {\r\n let hsl = Color.rgbToHsl(this._r, this._g, this._b);\r\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\r\n }\r\n public toHslString() {\r\n let hsl = Color.rgbToHsl(this._r, this._g, this._b);\r\n let h = Math.round(hsl.h * 360);\r\n let s = Math.round(hsl.s * 100);\r\n let l = Math.round(hsl.l * 100);\r\n return (this._a == 1) ?\r\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\r\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\r\n }\r\n public toHex(allow3Char: boolean = true) {\r\n return Color.rgbToHex(this._r, this._g, this._b, allow3Char);\r\n }\r\n public toHexString(allow3Char: boolean = true) {\r\n return \"#\" + this.toHex(allow3Char);\r\n }\r\n public toHex8() {\r\n return Color.rgbaToHex(this._r, this._g, this._b, this._a);\r\n }\r\n public toHex8String() {\r\n return \"#\" + this.toHex8();\r\n }\r\n public toRgb() {\r\n return { r: Math.round(this._r), g: Math.round(this._g), b: Math.round(this._b), a: this._a };\r\n }\r\n public toRgbString() {\r\n return (this._a == 1) ?\r\n \"rgb(\" + Math.round(this._r) + \", \" +\r\n Math.round(this._g) + \", \" +\r\n Math.round(this._b) + \")\" :\r\n \"rgba(\" + Math.round(this._r) + \", \" +\r\n Math.round(this._g) + \", \" +\r\n Math.round(this._b) + \", \" +\r\n this._roundA + \")\";\r\n }\r\n public toPercentageRgb() {\r\n return {\r\n r: Math.round(Color.bound01(this._r, 255) * 100) + \"%\",\r\n g: Math.round(Color.bound01(this._g, 255) * 100) + \"%\",\r\n b: Math.round(Color.bound01(this._b, 255) * 100) + \"%\", a: this._a\r\n };\r\n }\r\n public toPercentageRgbString() {\r\n return (this._a == 1) ?\r\n \"rgb(\" +\r\n Math.round(Color.bound01(this._r, 255) * 100) + \"%, \" +\r\n Math.round(Color.bound01(this._g, 255) * 100) + \"%, \" +\r\n Math.round(Color.bound01(this._b, 255) * 100) + \"%)\" :\r\n \"rgba(\" +\r\n Math.round(Color.bound01(this._r, 255) * 100) + \"%, \" +\r\n Math.round(Color.bound01(this._g, 255) * 100) + \"%, \" +\r\n Math.round(Color.bound01(this._b, 255) * 100) + \"%, \" +\r\n this._roundA + \")\";\r\n }\r\n public toName(): string {\r\n if (this._a === 0) {\r\n return \"transparent\";\r\n }\r\n\r\n if (this._a < 1) {\r\n return undefined;\r\n }\r\n\r\n return Color.hexNames[Color.rgbToHex(this._r, this._g, this._b, true)] || undefined;\r\n }\r\n public toString(format) {\r\n let formatSet = !!format;\r\n\r\n let formattedString: string;\r\n let hasAlpha = this._a < 1 && this._a >= 0;\r\n let needsAlphaFormat = !formatSet && hasAlpha &&\r\n (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"name\");\r\n\r\n if (needsAlphaFormat) {\r\n // Special case for \"transparent\", all other non-alpha formats\r\n // will return rgba when there is transparency.\r\n if (format === \"name\" && this._a === 0) {\r\n return this.toName();\r\n }\r\n return this.toRgbString();\r\n }\r\n if (format === \"rgb\") {\r\n formattedString = this.toRgbString();\r\n }\r\n if (format === \"prgb\") {\r\n formattedString = this.toPercentageRgbString();\r\n }\r\n if (format === \"hex\" || format === \"hex6\") {\r\n formattedString = this.toHexString();\r\n }\r\n if (format === \"hex3\") {\r\n formattedString = this.toHexString(true);\r\n }\r\n if (format === \"hex8\") {\r\n formattedString = this.toHex8String();\r\n }\r\n if (format === \"name\") {\r\n formattedString = this.toName();\r\n }\r\n if (format === \"hsl\") {\r\n formattedString = this.toHslString();\r\n }\r\n if (format === \"hsv\") {\r\n formattedString = this.toHsvString();\r\n }\r\n\r\n return formattedString || this.toHexString();\r\n }\r\n\r\n protected _applyModification(fn, args) {\r\n let color = fn.apply(null, [this].concat([].slice.call(args)));\r\n this._r = color._r;\r\n this._g = color._g;\r\n this._b = color._b;\r\n this.setAlpha(color._a);\r\n return this;\r\n }\r\n public lighten(amount: number) {\r\n return this._applyModification(Color.lighten, arguments);\r\n }\r\n public brighten(amount: number) {\r\n return this._applyModification(Color.brighten, arguments);\r\n }\r\n public darken(amount: number) {\r\n return this._applyModification(Color.darken, arguments);\r\n }\r\n public desaturate(amount: number) {\r\n return this._applyModification(Color.desaturate, arguments);\r\n }\r\n public saturate(amount: number) {\r\n return this._applyModification(Color.saturate, arguments);\r\n }\r\n public greyscale() {\r\n return this._applyModification(Color.greyscale, arguments);\r\n }\r\n public spin(amount: number) {\r\n return this._applyModification(Color.spin, arguments);\r\n }\r\n\r\n private _applyCombination(fn, args) {\r\n return fn.apply(null, [this].concat([].slice.call(args)));\r\n }\r\n public analogous(results: number, slices: number) {\r\n return this._applyCombination(Color.analogous, arguments);\r\n }\r\n public complement() {\r\n return this._applyCombination(Color.complement, arguments);\r\n }\r\n public monochromatic(results: number) {\r\n return this._applyCombination(Color.monochromatic, arguments);\r\n }\r\n public splitcomplement() {\r\n return this._applyCombination(Color.splitcomplement, arguments);\r\n }\r\n public triad() {\r\n return this._applyCombination(Color.triad, arguments);\r\n }\r\n public tetrad() {\r\n return this._applyCombination(Color.tetrad, arguments);\r\n }\r\n\r\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\r\n // String input requires \"1.0\" as input, so 1 will be treated as 1\r\n public static fromRatio(color) {\r\n if (typeof color == \"object\") {\r\n let newColor = {};\r\n for (let i in color) {\r\n if (color.hasOwnProperty(i)) {\r\n if (i === \"a\") {\r\n newColor[i] = color[i];\r\n } else {\r\n newColor[i] = Color.convertToPercentage(color[i]);\r\n }\r\n }\r\n }\r\n color = newColor;\r\n }\r\n\r\n return new Color(color);\r\n }\r\n\r\n // Given a string or object, convert that input to RGB\r\n // Possible string inputs:\r\n //\r\n // \"red\"\r\n // \"#f00\" or \"f00\"\r\n // \"#ff0000\" or \"ff0000\"\r\n // \"#ff000000\" or \"ff000000\"\r\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\r\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\r\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\r\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\r\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\r\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\r\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\r\n //\r\n public static inputToRGB(color) {\r\n\r\n let rgb = { r: 0, g: 0, b: 0 };\r\n let a = 1;\r\n let ok = false;\r\n let format: string;\r\n\r\n if (color instanceof Color) {\r\n rgb.r = color._r;\r\n rgb.b = color._b;\r\n rgb.g = color._g;\r\n a = color._a;\r\n }\r\n if (typeof color == \"string\") {\r\n color = Color.stringInputToObject(color);\r\n }\r\n\r\n if (typeof color == \"object\" && color != null) {\r\n if (color.hasOwnProperty(\"r\") && color.hasOwnProperty(\"g\") && color.hasOwnProperty(\"b\")) {\r\n rgb = Color.rgbToRgb(color.r, color.g, color.b);\r\n ok = true;\r\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\r\n } else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"v\")) {\r\n color.s = Color.convertToPercentage(color.s);\r\n color.v = Color.convertToPercentage(color.v);\r\n rgb = Color.hsvToRgb(color.h, color.s, color.v);\r\n ok = true;\r\n format = \"hsv\";\r\n } else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"l\")) {\r\n color.s = Color.convertToPercentage(color.s);\r\n color.l = Color.convertToPercentage(color.l);\r\n rgb = Color.hslToRgb(color.h, color.s, color.l);\r\n ok = true;\r\n format = \"hsl\";\r\n }\r\n\r\n if (color.hasOwnProperty(\"a\")) {\r\n a = color.a;\r\n }\r\n }\r\n\r\n a = Color.boundAlpha(a);\r\n\r\n return {\r\n ok,\r\n format: color.format || format,\r\n r: Math.min(255, Math.max(rgb.r, 0)),\r\n g: Math.min(255, Math.max(rgb.g, 0)),\r\n b: Math.min(255, Math.max(rgb.b, 0)),\r\n a\r\n };\r\n }\r\n\r\n // Conversion Functions\r\n // --------------------\r\n\r\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\r\n // \r\n\r\n // `rgbToRgb`\r\n // Handle bounds / percentage checking to conform to CSS color spec\r\n // \r\n // *Assumes:* r, g, b in [0, 255] or [0, 1]\r\n // *Returns:* { r, g, b } in [0, 255]\r\n public static rgbToRgb(r, g, b) {\r\n return {\r\n r: Color.bound01(r, 255) * 255,\r\n g: Color.bound01(g, 255) * 255,\r\n b: Color.bound01(b, 255) * 255\r\n };\r\n }\r\n\r\n // `rgbToHsl`\r\n // Converts an RGB color value to HSL.\r\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\r\n // *Returns:* { h, s, l } in [0,1]\r\n public static rgbToHsl(r, g, b) {\r\n\r\n r = Color.bound01(r, 255);\r\n g = Color.bound01(g, 255);\r\n b = Color.bound01(b, 255);\r\n\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n let h;\r\n let s;\r\n let l = (max + min) / 2;\r\n\r\n if (max == min) {\r\n h = s = 0; // achromatic\r\n } else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n\r\n h /= 6;\r\n }\r\n\r\n return { h, s, l };\r\n }\r\n\r\n // `hslToRgb`\r\n // Converts an HSL color value to RGB.\r\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\r\n // *Returns:* { r, g, b } in the set [0, 255]\r\n public static hslToRgb(h, s, l) {\r\n let r;\r\n let g;\r\n let b;\r\n\r\n h = Color.bound01(h, 360);\r\n s = Color.bound01(s, 100);\r\n l = Color.bound01(l, 100);\r\n\r\n function hue2rgb(p, q, t) {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n }\r\n\r\n if (s === 0) {\r\n r = g = b = l; // achromatic\r\n } else {\r\n let q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n let p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n return { r: r * 255, g: g * 255, b: b * 255 };\r\n }\r\n\r\n // `rgbToHsv`\r\n // Converts an RGB color value to HSV\r\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\r\n // *Returns:* { h, s, v } in [0,1]\r\n public static rgbToHsv(r, g, b) {\r\n\r\n r = Color.bound01(r, 255);\r\n g = Color.bound01(g, 255);\r\n b = Color.bound01(b, 255);\r\n\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n let h;\r\n let s;\r\n let v = max;\r\n\r\n let d = max - min;\r\n s = max === 0 ? 0 : d / max;\r\n\r\n if (max == min) {\r\n h = 0; // achromatic\r\n } else {\r\n switch (max) {\r\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n case g: h = (b - r) / d + 2; break;\r\n case b: h = (r - g) / d + 4; break;\r\n }\r\n h /= 6;\r\n }\r\n return { h, s, v };\r\n }\r\n\r\n // `hsvToRgb`\r\n // Converts an HSV color value to RGB.\r\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\r\n // *Returns:* { r, g, b } in the set [0, 255]\r\n public static hsvToRgb(h, s, v) {\r\n\r\n h = Color.bound01(h, 360) * 6;\r\n s = Color.bound01(s, 100);\r\n v = Color.bound01(v, 100);\r\n\r\n let i = Math.floor(h);\r\n let f = h - i;\r\n let p = v * (1 - s);\r\n let q = v * (1 - f * s);\r\n let t = v * (1 - (1 - f) * s);\r\n let mod = i % 6;\r\n let r = [v, q, p, p, t, v][mod];\r\n let g = [t, v, v, q, p, p][mod];\r\n let b = [p, p, t, v, v, q][mod];\r\n\r\n return { r: r * 255, g: g * 255, b: b * 255 };\r\n }\r\n\r\n // `rgbToHex`\r\n // Converts an RGB color to hex\r\n // Assumes r, g, and b are contained in the set [0, 255]\r\n // Returns a 3 or 6 character hex\r\n public static rgbToHex(r, g, b, allow3Char) {\r\n\r\n let hex = [\r\n Color.pad2(Math.round(r).toString(16)),\r\n Color.pad2(Math.round(g).toString(16)),\r\n Color.pad2(Math.round(b).toString(16))\r\n ];\r\n\r\n // Return a 3 character hex if possible\r\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) &&\r\n hex[2].charAt(0) == hex[2].charAt(1)) {\r\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\r\n }\r\n\r\n return hex.join(\"\");\r\n }\r\n // `rgbaToHex`\r\n // Converts an RGBA color plus alpha transparency to hex\r\n // Assumes r, g, b and a are contained in the set [0, 255]\r\n // Returns an 8 character hex\r\n public static rgbaToHex(r, g, b, a) {\r\n\r\n let hex = [\r\n Color.pad2(Color.convertDecimalToHex(a)),\r\n Color.pad2(Math.round(r).toString(16)),\r\n Color.pad2(Math.round(g).toString(16)),\r\n Color.pad2(Math.round(b).toString(16))\r\n ];\r\n\r\n return hex.join(\"\");\r\n }\r\n\r\n // `equals`\r\n // Can be called with any tinycolor input\r\n public static equals(color1, color2) {\r\n if (!color1 || !color2) { return false; }\r\n return new Color(color1).toRgbString() == new Color(color2).toRgbString();\r\n }\r\n public static random() {\r\n return Color.fromRatio({\r\n r: Math.random(),\r\n g: Math.random(),\r\n b: Math.random()\r\n });\r\n }\r\n\r\n // Modification Functions\r\n // ----------------------\r\n // Thanks to less.js for some of the basics here\r\n // \r\n\r\n public static desaturate(color, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 10);\r\n let hsl = new Color(color).toHsl();\r\n hsl.s -= amount / 100;\r\n hsl.s = Color.clamp01(hsl.s);\r\n return new Color(hsl);\r\n }\r\n\r\n public static saturate(color, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 10);\r\n let hsl = new Color(color).toHsl();\r\n hsl.s += amount / 100;\r\n hsl.s = Color.clamp01(hsl.s);\r\n return new Color(hsl);\r\n }\r\n\r\n public static greyscale(color): Color {\r\n return Color.desaturate(color, 100);\r\n }\r\n\r\n public static lighten(color, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 10);\r\n let hsl = new Color(color).toHsl();\r\n hsl.l += amount / 100;\r\n hsl.l = Color.clamp01(hsl.l);\r\n return new Color(hsl);\r\n }\r\n\r\n public static brighten(color, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 10);\r\n let rgb = new Color(color).toRgb();\r\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\r\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\r\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\r\n return new Color(rgb);\r\n }\r\n\r\n public static darken(color, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 10);\r\n let hsl = new Color(color).toHsl();\r\n hsl.l -= amount / 100;\r\n hsl.l = Color.clamp01(hsl.l);\r\n return new Color(hsl);\r\n }\r\n\r\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\r\n // Values outside of this range will be wrapped into this range.\r\n public static spin(color, amount): Color {\r\n let hsl = new Color(color).toHsl();\r\n let hue = (Math.round(hsl.h) + amount) % 360;\r\n hsl.h = hue < 0 ? 360 + hue : hue;\r\n return new Color(hsl);\r\n }\r\n\r\n // Combination Functions\r\n // ---------------------\r\n // Thanks to jQuery xColor for some of the ideas behind these\r\n // \r\n public static complement(color): Color {\r\n let hsl = new Color(color).toHsl();\r\n hsl.h = (hsl.h + 180) % 360;\r\n return new Color(hsl);\r\n }\r\n\r\n public static triad(color): Color[] {\r\n let hsl = new Color(color).toHsl();\r\n let h = hsl.h;\r\n return [\r\n new Color(color),\r\n new Color({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\r\n new Color({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\r\n ];\r\n }\r\n\r\n public static tetrad(color): Color[] {\r\n let hsl = new Color(color).toHsl();\r\n let h = hsl.h;\r\n return [\r\n new Color(color),\r\n new Color({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\r\n new Color({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\r\n new Color({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\r\n ];\r\n }\r\n\r\n public static splitcomplement(color): Color[] {\r\n let hsl = new Color(color).toHsl();\r\n let h = hsl.h;\r\n return [\r\n new Color(color),\r\n new Color({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\r\n new Color({ h: (h + 216) % 360, s: hsl.s, l: hsl.l })\r\n ];\r\n }\r\n\r\n public static analogous(color, results: number, slices: number): Color[] {\r\n results = results || 6;\r\n slices = slices || 30;\r\n\r\n let hsl = new Color(color).toHsl();\r\n let part = 360 / slices;\r\n let ret = [new Color(color)];\r\n\r\n // tslint:disable-next-line:no-bitwise\r\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results;) {\r\n hsl.h = (hsl.h + part) % 360;\r\n ret.push(new Color(hsl));\r\n }\r\n return ret;\r\n }\r\n\r\n public static monochromatic(color, results: number): Color[] {\r\n results = results || 6;\r\n let hsv = new Color(color).toHsv();\r\n let h = hsv.h;\r\n let s = hsv.s;\r\n let v = hsv.v;\r\n let ret = [];\r\n let modification = 1 / results;\r\n\r\n while (results--) {\r\n ret.push(new Color({ h, s, v }));\r\n v = (v + modification) % 1;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n // Utility Functions\r\n // ---------------------\r\n public static mix(color1, color2, amount: number): Color {\r\n amount = (amount === 0) ? 0 : (amount || 50);\r\n\r\n let rgb1 = new Color(color1).toRgb();\r\n let rgb2 = new Color(color2).toRgb();\r\n\r\n let p = amount / 100;\r\n let w = p * 2 - 1;\r\n let a = rgb2.a - rgb1.a;\r\n\r\n let w1;\r\n\r\n if (w * a == -1) {\r\n w1 = w;\r\n } else {\r\n w1 = (w + a) / (1 + w * a);\r\n }\r\n\r\n w1 = (w1 + 1) / 2;\r\n\r\n let w2 = 1 - w1;\r\n\r\n let rgba = {\r\n r: rgb2.r * w1 + rgb1.r * w2,\r\n g: rgb2.g * w1 + rgb1.g * w2,\r\n b: rgb2.b * w1 + rgb1.b * w2,\r\n a: rgb2.a * p + rgb1.a * (1 - p)\r\n };\r\n\r\n return new Color(rgba);\r\n }\r\n\r\n // Readability Functions\r\n // ---------------------\r\n // false\r\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\r\n\r\n public static isReadable(color1, color2, wcag2): boolean {\r\n let readability = Color.readability(color1, color2);\r\n let wcag2Parms;\r\n let out;\r\n\r\n out = false;\r\n\r\n wcag2Parms = Color.validateWCAG2Parms(wcag2);\r\n switch (wcag2Parms.level + wcag2Parms.size) {\r\n case \"AAsmall\":\r\n case \"AAAlarge\":\r\n out = readability >= 4.5;\r\n break;\r\n case \"AAlarge\":\r\n out = readability >= 3;\r\n break;\r\n case \"AAAsmall\":\r\n out = readability >= 7;\r\n break;\r\n }\r\n return out;\r\n\r\n }\r\n\r\n /**\r\n * Given a base color and a list of possible foreground or background\r\n * colors for that base, returns the most readable color.\r\n * Optionally returns Black or White if the most readable color is unreadable.\r\n * @param baseColor \r\n * @param colorList \r\n * @param args \r\n */\r\n public static mostReadable(baseColor, colorList: any[], args): Color {\r\n let bestColor = null;\r\n let bestScore = 0;\r\n let readability;\r\n let includeFallbackColors;\r\n let level;\r\n let size;\r\n\r\n args = args || {};\r\n includeFallbackColors = args.includeFallbackColors;\r\n level = args.level;\r\n size = args.size;\r\n\r\n for (let c of colorList) {\r\n readability = Color.readability(baseColor, c);\r\n if (readability > bestScore) {\r\n bestScore = readability;\r\n bestColor = new Color(c);\r\n }\r\n }\r\n\r\n if (Color.isReadable(baseColor, bestColor, { level, size }) || !includeFallbackColors) {\r\n return bestColor;\r\n } else {\r\n args.includeFallbackColors = false;\r\n return Color.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\r\n }\r\n }\r\n\r\n // Utilities\r\n // ---------\r\n\r\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\r\n protected static flip(o) {\r\n let flipped = {};\r\n for (let i in o) {\r\n if (o.hasOwnProperty(i)) {\r\n flipped[o[i]] = i;\r\n }\r\n }\r\n return flipped;\r\n }\r\n\r\n // Return a valid alpha value [0,1] with all invalid values being set to 1\r\n protected static boundAlpha(a) {\r\n a = parseFloat(a);\r\n\r\n if (isNaN(a) || a < 0 || a > 1) {\r\n a = 1;\r\n }\r\n\r\n return a;\r\n }\r\n\r\n // Take input from [0, n] and return it as [0, 1]\r\n protected static bound01(n, max): number {\r\n if (Color.isOnePointZero(n)) { n = \"100%\"; }\r\n\r\n let processPercent = Color.isPercentage(n);\r\n n = Math.min(max, Math.max(0, parseFloat(n)));\r\n\r\n // Automatically convert percentage into number\r\n if (processPercent) {\r\n n = parseInt((n * max).toString(), 10) / 100;\r\n }\r\n\r\n // Handle floating point rounding errors\r\n if ((Math.abs(n - max) < 0.000001)) {\r\n return 1;\r\n }\r\n\r\n // Convert into [0, 1] range if it isn't already\r\n return (n % max) / parseFloat(max);\r\n }\r\n\r\n // Force a number between 0 and 1\r\n protected static clamp01(val) {\r\n return Math.min(1, Math.max(0, val));\r\n }\r\n\r\n // Parse a base-16 hex value into a base-10 integer\r\n protected static parseIntFromHex(val) {\r\n return parseInt(val, 16);\r\n }\r\n\r\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\r\n // \r\n protected static isOnePointZero(n) {\r\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\r\n }\r\n\r\n // Check to see if string passed in is a percentage\r\n protected static isPercentage(n) {\r\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\r\n }\r\n\r\n // Force a hex value to have 2 characters\r\n protected static pad2(c) {\r\n return c.length == 1 ? \"0\" + c : \"\" + c;\r\n }\r\n\r\n // Replace a decimal with it's percentage value\r\n protected static convertToPercentage(n) {\r\n if (n <= 1) {\r\n n = (n * 100) + \"%\";\r\n }\r\n\r\n return n;\r\n }\r\n\r\n // Converts a decimal to a hex value\r\n protected static convertDecimalToHex(d) {\r\n return Math.round(parseFloat(d) * 255).toString(16);\r\n }\r\n // Converts a hex value to a decimal\r\n protected static convertHexToDecimal(h) {\r\n return (Color.parseIntFromHex(h) / 255);\r\n }\r\n\r\n protected static matchers = (() => {\r\n\r\n // \r\n let CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\r\n\r\n // \r\n let CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\r\n\r\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\r\n let CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\r\n\r\n // Actual matching.\r\n // Parentheses and commas are optional, but not required.\r\n // Whitespace can take the place of commas or opening paren \r\n let PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" +\r\n CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\r\n let PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" +\r\n CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\r\n\r\n return {\r\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\r\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\r\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\r\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\r\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\r\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\r\n hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\r\n hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\r\n hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\r\n };\r\n })();\r\n\r\n // `stringInputToObject`\r\n // Permissive string parsing. Take in a number of formats, and output an object\r\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\r\n protected static stringInputToObject(color): any {\r\n let trimLeft = /^[\\s,#]+/;\r\n let trimRight = /\\s+$/;\r\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\r\n let named = false;\r\n if (Color.names[color]) {\r\n color = Color.names[color];\r\n named = true;\r\n } else if (color == \"transparent\") {\r\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\r\n }\r\n\r\n // Try to match string input using regular expressions.\r\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\r\n // Just return an object and let the conversion functions handle that.\r\n // This way the result will be the same whether the tinycolor is initialized with string or object.\r\n let match;\r\n // tslint:disable:no-conditional-assignment\r\n if ((match = Color.matchers.rgb.exec(color))) {\r\n return { r: match[1], g: match[2], b: match[3] };\r\n }\r\n if ((match = Color.matchers.rgba.exec(color))) {\r\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\r\n }\r\n if ((match = Color.matchers.hsl.exec(color))) {\r\n return { h: match[1], s: match[2], l: match[3] };\r\n }\r\n if ((match = Color.matchers.hsla.exec(color))) {\r\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\r\n }\r\n if ((match = Color.matchers.hsv.exec(color))) {\r\n return { h: match[1], s: match[2], v: match[3] };\r\n }\r\n if ((match = Color.matchers.hsva.exec(color))) {\r\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\r\n }\r\n if ((match = Color.matchers.hex8.exec(color))) {\r\n return {\r\n a: Color.convertHexToDecimal(match[1]),\r\n r: Color.parseIntFromHex(match[2]),\r\n g: Color.parseIntFromHex(match[3]),\r\n b: Color.parseIntFromHex(match[4]),\r\n format: named ? \"name\" : \"hex8\"\r\n };\r\n }\r\n if ((match = Color.matchers.hex6.exec(color))) {\r\n return {\r\n r: Color.parseIntFromHex(match[1]),\r\n g: Color.parseIntFromHex(match[2]),\r\n b: Color.parseIntFromHex(match[3]),\r\n format: named ? \"name\" : \"hex\"\r\n };\r\n }\r\n if ((match = Color.matchers.hex3.exec(color))) {\r\n return {\r\n r: Color.parseIntFromHex(match[1] + \"\" + match[1]),\r\n g: Color.parseIntFromHex(match[2] + \"\" + match[2]),\r\n b: Color.parseIntFromHex(match[3] + \"\" + match[3]),\r\n format: named ? \"name\" : \"hex\"\r\n };\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected static validateWCAG2Parms(parms) {\r\n // return valid WCAG2 parms for isReadable.\r\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\r\n let level;\r\n let size;\r\n parms = parms || { level: \"AA\", size: \"small\" };\r\n level = (parms.level || \"AA\").toUpperCase();\r\n size = (parms.size || \"small\").toLowerCase();\r\n if (level !== \"AA\" && level !== \"AAA\") {\r\n level = \"AA\";\r\n }\r\n if (size !== \"small\" && size !== \"large\") {\r\n size = \"small\";\r\n }\r\n return { level, size };\r\n }\r\n}\r\n","// tslint:disable\r\nimport { currencies } from \"@tools/constants\";\r\n\r\ndeclare global {\r\n interface String {\r\n format(...texts: string[]): string;\r\n toCamelCase(): string;\r\n toPascalCase(): string;\r\n toKebabCase(): string;\r\n toSentence(): string;\r\n removeSpaces(): string;\r\n capitalize(): string;\r\n addSlashes(): string;\r\n isEqual(str: string): boolean;\r\n equalsAny(...strings: string[]): boolean;\r\n startsWith(str: string, position?: number): boolean;\r\n /**\r\n * polyfill for string.endsWith from MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\r\n * @param str \r\n * @param position \r\n */\r\n endsWith(str: string, position?: number): boolean;\r\n replaceAll(find: string, replace: string): string;\r\n repeat(count: number): string;\r\n }\r\n\r\n interface Number {\r\n /**\r\n * rounding to a certain number of decimals\r\n */\r\n rounder(precision: number): number;\r\n formatNumber(pattern: string): string;\r\n format(args: INumberFormatArgs): string;\r\n stripScientificNotation(): string;\r\n }\r\n\r\n interface INumberFormatArgs {\r\n formatType: string; //eFormatType: none, number, currency, percentage\r\n minPrecision: number; //the minimum number of decimal places. If the min and max are same, you can just set min\r\n maxPrecision?: number; //the maximum number of decimal places\r\n currency?: string; //the currency iso\r\n thousandsSeparator?: string;\r\n decimalSeparator?: string;\r\n prefix?: string;\r\n suffix?: string;\r\n }\r\n\r\n interface Array {\r\n clear(): void;\r\n remove(item: T): Array;\r\n /**\r\n * Conditionally removes items from an array and returns a new array with the removed items.\r\n */\r\n removeWhere(predicate: (item: T) => boolean): Array;\r\n contains(item: T): boolean;\r\n pushArray(items: T[]): void;\r\n /**\r\n * If the condition is true, then pushes the given items into the array.\r\n * Either way it returns the array in a fluent style.\r\n * @param condition \r\n * @param items \r\n */\r\n pushIf(condition: boolean, ...items: T[]): Array;\r\n equals(a: T[]): boolean;\r\n /**\r\n * Useful in cases where you want to find the length of an array that is not zero-indexed and has holes in its keys.\r\n * E.g. if you have an array like this:\r\n * [1] => \"foo\"\r\n * [3] => \"bar\"\r\n *\r\n * array.length would return 4 (since it fills in [0] and [2] with undefined values). array.getDefinedLength will return\r\n * 2, which is the number of \"filled in\" values. Note that this only discounts truly undefined values. Nulls, zeros, and\r\n * empty strings will still be counted.\r\n */\r\n getDefinedLength(): number;\r\n move(fromIndex, toIndex): Array;\r\n removeNulls(): Array;\r\n find(predicate: (element: T, index: number, array: T[]) => boolean): T;\r\n first(): T;\r\n last(): T;\r\n next(item: T, predicate?: (item: T) => boolean): T;\r\n previous(item: T, predicate?: (item: T) => boolean): T;\r\n sortBy(predicate: (element: T) => any): void;\r\n sortByDescending(predicate: (element: T) => any): void;\r\n fill(value: any, start?: number, end?: number);\r\n unique(selector?: (item: T) => any): T[];\r\n top(n: number, predicate: (element: T, index: number) => boolean): Array;\r\n innerJoin(otherArr: TOther[], keySelector: (item: T) => any, otherKeySelector: (item: TOther) => any): any[];\r\n leftJoin(otherArr: TOther[], keySelector: (item: T) => any, otherKeySelector: (item: TOther) => any): any[];\r\n rightJoin(otherArr: TOther[], keySelector: (item: T) => any, otherKeySelector: (item: TOther) => any): any[];\r\n recurse(childSelector: (item: T) => T[], action: (item: T, parent: T) => void): void;\r\n toObject(keySelector: (item: T) => string | number): { [key: string]: T };\r\n flatten(childSelector: (item: T) => U[]): U[];\r\n selectMany(selector: (item: T) => TChild[] | TChild): TChild[];\r\n }\r\n\r\n interface ObjectConstructor {\r\n assign(target: any, ...sources: any[]): any;\r\n values(o: {}): any[];\r\n }\r\n}\r\n\r\n\r\nString.prototype.replaceAll = function (find, replace) {\r\n return this.replace(new RegExp(find, 'g'), replace);\r\n}\r\n\r\nString.prototype.format = function (...texts: string[]) {\r\n return this.replace(/\\{\\{|\\}\\}|\\{(\\d+)\\}/g, function (m, n) {\r\n if (m == \"{{\") { return \"{\"; }\r\n if (m == \"}}\") { return \"}\"; }\r\n return texts[n];\r\n });\r\n};\r\n\r\nString.prototype.toCamelCase = function () {\r\n return this.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toLowerCase() + txt.substr(1); });\r\n};\r\n\r\nString.prototype.toPascalCase = function () {\r\n return this.replace(/\\w\\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1); });\r\n};\r\n\r\nString.prototype.capitalize = function () {\r\n return this.charAt(0).toUpperCase() + this.slice(1);\r\n}\r\n\r\nlet kebabCaseRegex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g;\r\nString.prototype.toKebabCase = function () {\r\n return this.match(kebabCaseRegex)\r\n .map(x => x.toLowerCase())\r\n .join('-');\r\n}\r\n\r\nString.prototype.toSentence = function () {\r\n return this.replace(/([A-Z])/g, ' $1') // insert a space before all caps \r\n .replace(/^./, function (str) { return str.toUpperCase(); })// uppercase the first character\r\n}\r\n\r\nString.prototype.removeSpaces = function () {\r\n return this.replace(/\\s+/g, '');\r\n}\r\n\r\nString.prototype.addSlashes = function () {\r\n return this.replace(/\\\\/g, '\\\\\\\\').\r\n //replace(/\\u0008/g, '\\\\b').\r\n replace(/\\t/g, '\\\\t').\r\n replace(/\\n/g, '\\\\n').\r\n replace(/\\f/g, '\\\\f').\r\n replace(/\\r/g, '\\\\r').\r\n replace(/'/g, '\\\\\\'').\r\n replace(/\"/g, '\\\\\"');\r\n}\r\n\r\nString.prototype.isEqual = function (str: string) {\r\n return (this ? this.toUpperCase() : undefined) === (str ? str.toUpperCase() : undefined);\r\n}\r\n\r\nString.prototype.equalsAny = function (...strings: string[]) {\r\n return strings && strings.some(s => s.isEqual(this));\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function (searchString, position) {\r\n var subjectString = this.toString();\r\n if (position === undefined || position > subjectString.length) {\r\n position = subjectString.length;\r\n }\r\n position -= searchString.length;\r\n var lastIndex = subjectString.indexOf(searchString, position);\r\n return lastIndex !== -1 && lastIndex === position;\r\n };\r\n}\r\n\r\nif (!String.prototype.startsWith) {\r\n String.prototype.startsWith = function (searchString, position) {\r\n position = position || 0;\r\n return this.indexOf(searchString, position) === position;\r\n };\r\n}\r\n\r\nif (!String.prototype.repeat) {\r\n String.prototype.repeat = function (count) {\r\n 'use strict';\r\n if (this == null) {\r\n throw new TypeError('can\\'t convert ' + this + ' to object');\r\n }\r\n var str = '' + this;\r\n count = +count;\r\n if (count != count) {\r\n count = 0;\r\n }\r\n if (count < 0) {\r\n throw new RangeError('repeat count must be non-negative');\r\n }\r\n if (count == Infinity) {\r\n throw new RangeError('repeat count must be less than infinity');\r\n }\r\n count = Math.floor(count);\r\n if (str.length == 0 || count == 0) {\r\n return '';\r\n }\r\n // Ensuring count is a 31-bit integer allows us to heavily optimize the\r\n // main part. But anyway, most current (August 2014) browsers can't handle\r\n // strings 1 << 28 chars or longer, so:\r\n if (str.length * count >= 1 << 28) {\r\n throw new RangeError('repeat count must not overflow maximum string size');\r\n }\r\n var maxCount = str.length * count;\r\n count = Math.floor(Math.log(count) / Math.log(2));\r\n while (count) {\r\n str += str;\r\n count--;\r\n }\r\n str += str.substring(0, maxCount - str.length);\r\n return str;\r\n }\r\n}\r\n\r\nNumber.prototype.rounder = function (precision: number) {\r\n const num = this.stripScientificNotation();\r\n return +(Math.round(+(num + 'e' + precision)) + 'e-' + precision);\r\n}\r\n\r\n/**\r\n * Converts scientific notation to decimal or big number string.\r\n */\r\nNumber.prototype.stripScientificNotation = function(): string {\r\n let strNum = this.toString();\r\n \r\n if (strNum.indexOf(\"e\") === -1) return strNum;\r\n const strNumArr = strNum.split(\"e\");\r\n if (strNumArr.length === 2) {\r\n let formattedNum = strNumArr[0].replace(\".\", \"\");\r\n let numZeros;\r\n if (strNumArr[1].charAt(0) === \"-\") {\r\n let isNegative = strNumArr[0].charAt(0) === \"-\";\r\n if (isNegative) {\r\n formattedNum = formattedNum.substr(1);\r\n }\r\n numZeros = parseInt(strNumArr[1].substr(1), 10) - 1;\r\n if (numZeros > 50) return \"0\"; //Let's not bother with extremely small numbers\r\n for(let i = 0; i < numZeros; i++) {\r\n formattedNum = \"0\" + formattedNum;\r\n }\r\n formattedNum = \"0.\" + formattedNum;\r\n if (isNegative) {\r\n formattedNum = \"-\" + formattedNum;\r\n }\r\n } else {\r\n // Then maybe a very large number, ex: 5.302923e+22\r\n numZeros = parseInt(strNumArr[1].substr(1), 10) - (formattedNum.length -1);\r\n if (numZeros > 50) return \"Infinity\"; //Let's not bother with extremely large numbers\r\n for(let i = 0; i < numZeros; i++) {\r\n formattedNum += \"0\";\r\n }\r\n }\r\n\r\n return formattedNum;\r\n }\r\n return \"0\";\r\n}\r\n\r\n\r\n/**\r\n * formats a number given different formatting options\r\n */\r\nNumber.prototype.format = function (args: INumberFormatArgs) {\r\n var pattern: string;\r\n var t = args.thousandsSeparator;\r\n var d = args.decimalSeparator || \".\";\r\n var type = args.formatType;\r\n var currency = args.currency || \"USD\";\r\n var minPrecision: number = isNaN(args.minPrecision) ? 0 : args.minPrecision;\r\n var maxPrecision: number = isNaN(args.maxPrecision) ? 0 : args.maxPrecision;\r\n maxPrecision = maxPrecision < minPrecision ? minPrecision : maxPrecision;\r\n var prefix = args.prefix || \"\";\r\n var suffix = args.suffix || \"\";\r\n\r\n //for currency, we should always have a thousands separator\r\n if (type === \"currency\") {\r\n t = t || \",\";\r\n }\r\n if (type === \"number\" || type === \"currency\" || type === \"percentage\") {\r\n pattern = \"#\" + t + \"##0\" + d + Array(minPrecision + 1).join(\"0\") + Array(maxPrecision - minPrecision + 1).join(\"#\");\r\n }\r\n\r\n var v = (this).formatNumber(pattern);\r\n\r\n if (type === \"currency\") {\r\n // Not sure why it's not picking up the currencies declaration in icons\r\n var symbol = currencies[args.currency] || \"\";\r\n v = symbol + v + \" \" + args.currency;\r\n }\r\n if (type === \"percentage\") {\r\n v += \"%\";\r\n }\r\n \r\n return prefix + v + suffix;\r\n}\r\n\r\n/**\r\n * formats a number using a pattern: see here for documentation: https://code.google.com/p/javascript-number-formatter/\r\n */\r\nNumber.prototype.formatNumber = function (pattern: string) {\r\n var m: any = pattern;\r\n var v: any = this;\r\n var num: number = v;\r\n\r\n // Make sure it's not in scientific notation\r\n // (Javascript switches automatically when you get to 7 decimal places)\r\n if (num < 1e-6) v = num.stripScientificNotation();\r\n\r\n if (!m || isNaN(+v)) {\r\n return v; //return as it is.\r\n }\r\n //convert any string to number according to formation sign.\r\n v = m.charAt(0) == '-' ? -v : +v;\r\n var isNegative = v < 0 ? v = -v : 0; //process only abs(), and turn on flag.\r\n\r\n //search for separator for grp & decimal, anything not digit, not +/- sign, not #.\r\n var result = m.match(/[^\\d\\-\\+#]/g);\r\n var Decimal = (result && result[result.length - 1]) || '.'; //treat the right most symbol as decimal \r\n var Group = (result && result[1] && result[0]) || ','; //treat the left most symbol as group separator\r\n\r\n //split the decimal for the format string if any.\r\n var m = m.split(Decimal);\r\n //Fix the decimal first, toFixed will auto fill trailing zero.\r\n v = v.toFixed(m[1] && m[1].length);\r\n v = +(v) + ''; //convert number to string to trim off *all* trailing decimal zero(es)\r\n\r\n //fill back any trailing zero according to format\r\n var pos_trail_zero = m[1] && m[1].lastIndexOf('0'); //look for last zero in format\r\n var part = v.split('.');\r\n //integer will get !part[1]\r\n if (!part[1] || part[1] && part[1].length <= pos_trail_zero) {\r\n v = (+v).toFixed(pos_trail_zero + 1);\r\n }\r\n var szSep = m[0].split(Group); //look for separator\r\n m[0] = szSep.join(''); //join back without separator for counting the pos of any leading 0.\r\n\r\n var pos_lead_zero = m[0] && m[0].indexOf('0');\r\n if (pos_lead_zero > -1) {\r\n while (part[0].length < (m[0].length - pos_lead_zero)) {\r\n part[0] = '0' + part[0];\r\n }\r\n }\r\n else if (+part[0] == 0) {\r\n part[0] = '';\r\n }\r\n\r\n v = v.split('.');\r\n v[0] = part[0];\r\n\r\n //process the first group separator from decimal (.) only, the rest ignore.\r\n //get the length of the last slice of split result.\r\n var pos_separator = (szSep[1] && szSep[szSep.length - 1].length);\r\n if (pos_separator) {\r\n var integer = v[0];\r\n var str = '';\r\n var offset = integer.length % pos_separator;\r\n for (var i = 0, l = integer.length; i < l; i++) {\r\n\r\n str += integer.charAt(i); //ie6 only support charAt for sz.\r\n //-pos_separator so that won't trail separator on full length\r\n if (!((i - offset + 1) % pos_separator) && i < l - pos_separator) {\r\n str += Group;\r\n }\r\n }\r\n v[0] = str;\r\n }\r\n\r\n v[1] = (m[1] && v[1]) ? Decimal + v[1] : \"\";\r\n return (isNegative ? '-' : '') + v[0] + v[1]; //put back any negation and combine integer and fraction.\r\n}\r\n\r\nObject.defineProperty(Array.prototype, \"clear\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (): void {\r\n this.length = 0;\r\n }\r\n});\r\n//Array.prototype.clear = function (): void {\r\n// this.length = 0;\r\n//}\r\n\r\nObject.defineProperty(Array.prototype, \"remove\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (item: any): Array {\r\n var index = this.indexOf(item);\r\n if (index != -1) {\r\n return this.splice(this.indexOf(item), 1);\r\n }\r\n }\r\n});\r\n//Array.prototype.remove = function (item: any): Array {\r\n// var index = this.indexOf(item);\r\n// if (index != -1) {\r\n// return this.splice(this.indexOf(item), 1);\r\n// }\r\n//}\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"removeWhere\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (predicate) {\r\n var removed = [];\r\n for (var i = this.length - 1; i >= 0; i--) {\r\n var item = this[i];\r\n if (predicate(item)) {\r\n removed.pushArray(this.splice(i, 1));\r\n }\r\n }\r\n return removed;\r\n }\r\n});\r\n//Array.prototype.removeWhere = function(predicate) {\r\n// for (var i = this.length - 1; i >= 0; i--) {\r\n// var item = this[i];\r\n// if (predicate(item)) {\r\n// this.splice(i, 1);\r\n// }\r\n// }\r\n//}\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"move\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (fromIndex, toIndex) {\r\n if (toIndex >= this.length) {\r\n var k = toIndex - this.length;\r\n while ((k--) + 1) {\r\n this.push(undefined);\r\n }\r\n }\r\n this.splice(toIndex, 0, this.splice(fromIndex, 1)[0]);\r\n return this; // for testing purposes\r\n }\r\n});\r\n//Array.prototype.move = function (fromIndex, toIndex) {\r\n// if (toIndex >= this.length) {\r\n// var k = toIndex - this.length;\r\n// while ((k--) + 1) {\r\n// this.push(undefined);\r\n// }\r\n// }\r\n// this.splice(toIndex, 0, this.splice(fromIndex, 1)[0]);\r\n// return this; // for testing purposes\r\n//};\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"contains\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (item: any): boolean {\r\n var index = this.indexOf(item);\r\n return (index != -1);\r\n }\r\n});\r\n//Array.prototype.contains = function (item: any): boolean {\r\n// var index = this.indexOf(item);\r\n// return (index != -1);\r\n//}\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"pushArray\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (items: any[]): void {\r\n this.push(...items);\r\n }\r\n});\r\n//Array.prototype.pushArray = function (items: any[]): void {\r\n// this.push.apply(this, items);\r\n//}\r\n\r\nObject.defineProperty(Array.prototype, \"pushIf\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (condition: boolean, ...items: any[]): any[] {\r\n if (condition) this.push(...items);\r\n return this;\r\n }\r\n});\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"equals\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (b) {\r\n if (this === b) return true;\r\n if (b == null) return false;\r\n if (this.length != b.length) return false;\r\n\r\n // If you don't care about the order of the elements inside\r\n // the array, you should sort both arrays here.\r\n\r\n for (var i = 0; i < this.length; ++i) {\r\n if (this[i] !== b[i]) return false;\r\n }\r\n return true;\r\n }\r\n});\r\n\r\nif (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, \"find\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (predicate) {\r\n if (this == null) {\r\n throw new TypeError('Array.prototype.find called on null or undefined');\r\n }\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n var list = Object(this);\r\n var length = list.length >>> 0;\r\n var thisArg = arguments[1];\r\n var value;\r\n\r\n for (var i = 0; i < length; i++) {\r\n value = list[i];\r\n if (predicate.call(thisArg, value, i, list)) {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n }\r\n });\r\n}\r\n\r\n\r\n\r\nObject.defineProperty(Array.prototype, \"getDefinedLength\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n var result = 0;\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i] !== undefined) result++;\r\n }\r\n return result;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"first\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n var item;\r\n if (this.length) {\r\n item = this[0];\r\n }\r\n return item;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"last\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n if (this.length) {\r\n return this[this.length - 1];\r\n }\r\n return undefined;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"next\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (item, predicate?: (item) => boolean) {\r\n var next;\r\n var i = this.indexOf(item);\r\n if (i >= -1 && i < this.length - 1) {\r\n if (predicate) {\r\n for (var n = i + 1; n < this.length; n++) {\r\n if (predicate(this[n])) {\r\n next = this[n];\r\n break;\r\n }\r\n }\r\n } else {\r\n next = this[i + 1];\r\n }\r\n }\r\n return next;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"previous\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (item, predicate?: (item) => boolean) {\r\n var prev;\r\n var i = this.indexOf(item);\r\n if (i == -1) i = this.length;\r\n if (i > 0 && i <= this.length) {\r\n if (predicate) {\r\n for (var n = i - 1; n >= 0; n--) {\r\n if (predicate(this[n])) {\r\n prev = this[n];\r\n break;\r\n }\r\n }\r\n } else {\r\n prev = this[i - 1];\r\n }\r\n }\r\n return prev;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"removeNulls\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n return this.filter(function (x) {\r\n return x !== null && x !== undefined;\r\n });\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"sortBy\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (predicate) {\r\n return this.sort((a, b) => {\r\n if (predicate(a) < predicate(b)) {\r\n return -1;\r\n } else if (predicate(a) > predicate(b)) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"sortByDescending\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (predicate) {\r\n return this.sort((a, b) => {\r\n if (predicate(a) > predicate(b)) {\r\n return -1;\r\n } else if (predicate(a) < predicate(b)) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n }\r\n});\r\n\r\nif (!Array.prototype.fill) {\r\n Object.defineProperty(Array.prototype, \"fill\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (value) {\r\n\r\n // Steps 1-2.\r\n if (this == null) {\r\n throw new TypeError('this is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // Steps 3-5.\r\n var len = O.length >>> 0;\r\n\r\n // Steps 6-7.\r\n var start = arguments[1];\r\n var relativeStart = start >> 0;\r\n\r\n // Step 8.\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n\r\n // Steps 9-10.\r\n var end = arguments[2];\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n\r\n // Step 11.\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n\r\n // Step 12.\r\n while (k < final) {\r\n O[k] = value;\r\n k++;\r\n }\r\n\r\n // Step 13.\r\n return O;\r\n }\r\n }); \r\n}\r\n\r\nObject.defineProperty(Array.prototype, \"unique\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (selector) {\r\n var u = {}, a = [];\r\n for (var i = 0, l = this.length; i < l; ++i) {\r\n var val = this[i];\r\n if (selector) val = selector(val);\r\n\r\n if (u.hasOwnProperty(val)) {\r\n continue;\r\n }\r\n a.push(this[i]);\r\n u[val] = 1;\r\n }\r\n return a;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"top\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (n, predicate) {\r\n if (this == null) {\r\n throw new TypeError('Array.prototype.find called on null or undefined');\r\n }\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n var length = this.length;\r\n var thisArg = arguments[1];\r\n var value;\r\n\r\n var matches = [];\r\n for (var i = 0; i < length; i++) {\r\n value = this[i];\r\n if (predicate.call(thisArg, value, i)) {\r\n matches.push(value);\r\n if (matches.length >= n) {\r\n return matches;\r\n }\r\n }\r\n }\r\n return matches;\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"innerJoin\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (otherArr, keySelector, otherKeySelector) {\r\n return ArrayExt.innerJoin(this, otherArr, keySelector, otherKeySelector);\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"leftJoin\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (otherArr, keySelector, otherKeySelector) {\r\n return ArrayExt.leftJoin(this, otherArr, keySelector, otherKeySelector);\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"rightJoin\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (otherArr, keySelector, otherKeySelector) {\r\n return ArrayExt.leftJoin(otherArr, this, keySelector, otherKeySelector);\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"fullOuterJoin\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (otherArr, keySelector, otherKeySelector) {\r\n return ArrayExt.fullOuterJoin(otherArr, this, keySelector, otherKeySelector);\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"recurse\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (childSelector: (item) => any[], action: (item) => void) {\r\n for (var i = 0; i < this.length; i++) {\r\n action(this[i]);\r\n var childArr = childSelector(this[i]);\r\n if (childArr) {\r\n childArr.recurse(childSelector, action);\r\n }\r\n }\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"selectMany\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (selector: (item) => any[]) {\r\n return this.reduce((out, v) => {\r\n let vres = selector(v);\r\n if (vres != null){\r\n if (!Array.isArray(vres)) vres = [vres];\r\n out.push(...vres);\r\n }\r\n \r\n return out;\r\n }, []);\r\n }\r\n});\r\n\r\nexport class ArrayExt {\r\n static innerJoin(\r\n thisArr: T[],\r\n otherArr: TOther[],\r\n keySelector: (item: T) => any,\r\n otherKeySelector: (item: TOther) => any): Array {\r\n\r\n var arrSmall: any[];\r\n var dbBig = {}; //dictionary of the bigger array indexed by key\r\n var smallKeySelector: (item) => any;\r\n if (thisArr.length <= otherArr.length) {\r\n arrSmall = thisArr;\r\n smallKeySelector = keySelector;\r\n //fill in the big db\r\n otherArr.forEach(i => {\r\n var key = otherKeySelector(i);\r\n dbBig[key] = dbBig[key] || [];\r\n dbBig[key].push(i);\r\n });\r\n\r\n } else {\r\n arrSmall = otherArr;\r\n smallKeySelector = otherKeySelector;\r\n //fill in the big db\r\n thisArr.forEach(i => {\r\n var key = keySelector(i);\r\n dbBig[key] = dbBig[key] || [];\r\n dbBig[key].push(i);\r\n });\r\n }\r\n\r\n var result: Array = [];\r\n arrSmall.forEach(item => {\r\n var key = smallKeySelector(item);\r\n if (dbBig.hasOwnProperty(key)) {\r\n dbBig[key].forEach(i => {\r\n //create a new object to leave the source arrays as is\r\n result.push(Object.assign({}, item, i));\r\n });\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n static leftJoin(\r\n thisArr: T[],\r\n otherArr: TOther[],\r\n keySelector: (item: T) => any,\r\n otherKeySelector: (item: TOther) => any): Array {\r\n\r\n var dbOther = {};\r\n otherArr.forEach(i => {\r\n var key = otherKeySelector(i);\r\n dbOther[key] = dbOther[key] || [];\r\n dbOther[key].push(i);\r\n });\r\n\r\n var result: Array = [];\r\n thisArr.forEach(item => {\r\n var key = keySelector(item);\r\n if (dbOther[key]) {\r\n dbOther[key].forEach(i => {\r\n //create a new object to leave the source arrays as is\r\n result.push(Object.assign({}, item, i));\r\n });\r\n } else {\r\n result.push(Object.assign({}, item));\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n static fullOuterJoin(\r\n thisArr: T[],\r\n otherArr: TOther[],\r\n keySelector: (item: T) => any,\r\n otherKeySelector: (item: TOther) => any): Array {\r\n \r\n var arrSmall: any[];\r\n var dbBig = {}; //dictionary of the bigger array indexed by key\r\n var smallKeySelector: (item) => any;\r\n if (thisArr.length <= otherArr.length) {\r\n arrSmall = thisArr;\r\n smallKeySelector = keySelector;\r\n //fill in the big db\r\n otherArr.forEach(i => {\r\n var key = otherKeySelector(i);\r\n dbBig[key] = dbBig[key] || [];\r\n dbBig[key].push(i);\r\n });\r\n\r\n } else {\r\n arrSmall = otherArr;\r\n smallKeySelector = otherKeySelector;\r\n //fill in the big db\r\n thisArr.forEach(i => {\r\n var key = keySelector(i);\r\n dbBig[key] = dbBig[key] || [];\r\n dbBig[key].push(i);\r\n });\r\n }\r\n\r\n var result: Array = [];\r\n arrSmall.forEach(item => {\r\n var key = smallKeySelector(item);\r\n if (dbBig.hasOwnProperty(key)) {\r\n dbBig[key].forEach(i => {\r\n //create a new object to leave the source arrays as is\r\n result.push(Object.assign({}, item, i));\r\n });\r\n // Delete the item from dbBig... anything remaining in this\r\n // list will be added at the end.\r\n delete dbBig[key];\r\n }\r\n else {\r\n // The item is not in the \"big\" array, but we add it to the\r\n // result as part of the outer join.\r\n result.push(Object.assign({}, item));\r\n }\r\n });\r\n\r\n // Now we just add the items left over from the big array that\r\n // didn't match the keys.\r\n for (let key in dbBig) {\r\n let item = dbBig[key];\r\n item.forEach(i => result.push(Object.assign({}, i)));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nObject.defineProperty(Array.prototype, \"toObject\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (keySelector: (item) => number | string) {\r\n return this.reduce((o, item) => {\r\n o[keySelector(item)] = item;\r\n return o;\r\n }, {});\r\n }\r\n});\r\n\r\nObject.defineProperty(Array.prototype, \"flatten\", {\r\n enumerable: false,\r\n writable: true,\r\n value: function (childSelector: (item) => any[]) {\r\n let r = [];\r\n let f = (item) => {\r\n r.push(item);\r\n let children = childSelector(item);\r\n if (children) {\r\n for (let i of children) {\r\n f(i);\r\n }\r\n }\r\n };\r\n for (let i of this) f(i); \r\n \r\n return r;\r\n }\r\n});\r\n\r\nif (!Object.assign) {\r\n Object.defineProperty(Object, 'assign', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: function (target) {\r\n 'use strict';\r\n if (target === undefined || target === null) {\r\n throw new TypeError('Cannot convert first argument to object');\r\n }\r\n\r\n var to = Object(target);\r\n for (var i = 1; i < arguments.length; i++) {\r\n var nextSource = arguments[i];\r\n if (nextSource === undefined || nextSource === null) {\r\n continue;\r\n }\r\n nextSource = Object(nextSource);\r\n\r\n var keysArray = Object.keys(nextSource);\r\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\r\n var nextKey = keysArray[nextIndex];\r\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\r\n if (desc !== undefined && desc.enumerable) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n return to;\r\n }\r\n });\r\n}\r\n\r\nif (!Object.values) {\r\n Object.defineProperty(Object, 'values', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: function (o: {}) {\r\n 'use strict';\r\n return Object.keys(o).map(key => o[key]);\r\n }\r\n });\r\n}\r\n\r\nif (!('toJSON' in Error.prototype)) {\r\n Object.defineProperty(Error.prototype, 'toJSON', {\r\n value: function () {\r\n var alt = {};\r\n\r\n Object.getOwnPropertyNames(this).forEach(function (key) {\r\n alt[key] = this[key];\r\n }, this);\r\n\r\n return alt;\r\n },\r\n configurable: true,\r\n writable: true\r\n });\r\n}","export interface IKbEventListener {\r\n callback: (args?: T) => void;\r\n tag?: string;\r\n}\r\n\r\nexport class KbEvent {\r\n /** ordered list to hold the listeners sorted by their priority. The lower the number, the higher the priority */\r\n protected _listeners = [];\r\n\r\n public add(callback: (args?: T) => void, tag: string = null): void {\r\n this._listeners.push({ callback, tag});\r\n }\r\n\r\n public remove(callback?: (args?: T) => void): void {\r\n if (typeof callback === \"function\") {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n if (this._listeners[i].callback === callback) {\r\n this._listeners.splice(i, 1);\r\n break;\r\n }\r\n }\r\n } else {\r\n this._listeners.length = 0;\r\n }\r\n }\r\n\r\n /*\r\n * removes all listeners with the given tag\r\n */\r\n public removeByTag(tag: string): void {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n if (this._listeners[i].tag === tag) {\r\n this._listeners.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n public trigger(args?: T): void {\r\n for (let l of this._listeners) {\r\n l.callback.apply(null, [args]);\r\n }\r\n }\r\n}\r\n\r\n","\r\nexport class Logger{\r\n public static writeRuleCycleLogs = false;\r\n public static writeSceneChangeLogs = false;\r\n\r\n public static logRuleStart(configName: string, ruleType: string) {\r\n if (Logger.writeRuleCycleLogs) {\r\n let startTime = Date.now();\r\n if (Logger.writeRuleCycleLogs) {\r\n console.log(`%cRULE -> ${configName} -> ${ruleType} -> START`, \"background: rgba(0,182,255,0.3)\");\r\n }\r\n return startTime;\r\n }\r\n }\r\n\r\n public static logRuleEnd(configName: string, ruleType: string, start: number) {\r\n if (Logger.writeRuleCycleLogs) {\r\n let time = Date.now() - start;\r\n console.log(`%cRULE -> ${configName} -> ${ruleType} -> END ${time}ms`, \"background: rgba(0,85,255,0.3)\");\r\n }\r\n }\r\n\r\n public static logSceneChange(msg: string) {\r\n if (Logger.writeSceneChangeLogs) {\r\n console.log(msg);\r\n }\r\n }\r\n}\r\n\r\nif (typeof window !== \"undefined\") {\r\n try {\r\n Logger.writeRuleCycleLogs = localStorage.getItem(\"writeRuleCycleLogs\") == \"true\";\r\n Logger.writeSceneChangeLogs = localStorage.getItem(\"writeSceneChangeLogs\") == \"true\";\r\n } catch {}\r\n}","import * as Q from \"q\";\r\nimport { IMessage } from \"./models\";\r\n\r\nexport enum eScrollMode {\r\n nearest,\r\n middleIfNecessary,\r\n}\r\n\r\nexport class Utils {\r\n public static readonly MOBILE_WIDTH = 847;\r\n\r\n public static loadScriptAsync(src): Q.Promise {\r\n let deferred = Q.defer();\r\n var s, t;\r\n s = document.createElement('script');\r\n s.type = 'text/javascript';\r\n s.src = src;\r\n s.onload = () => {\r\n deferred.resolve();\r\n };\r\n t = document.getElementsByTagName('script')[0];\r\n t.parentNode.insertBefore(s, t);\r\n return deferred.promise;\r\n }\r\n\r\n public static replaceAll(str: string, find: string, replace: string) {\r\n if (str) {\r\n return str.replaceAll(find, replace);\r\n }\r\n return str;\r\n }\r\n\r\n public static scrubName(str: string) {\r\n if (!str) return \"\";\r\n return str.replace(/[^a-z0-9]/gi, \"_\");\r\n }\r\n \r\n public static guard(condition: boolean, failMessage?: string): void {\r\n if (!condition) throw (failMessage ? failMessage : \"Guard failed\");\r\n }\r\n\r\n public static guardNotNull(variable: any, failMessage?: string): void {\r\n Utils.guard(\r\n variable !== null && variable !== undefined,\r\n (failMessage ? failMessage : \"Value must not be null\")\r\n );\r\n }\r\n\r\n public static guardNotEmpty(variable: string, failMessage?: string): void {\r\n Utils.guard(\r\n variable !== null && variable !== undefined && variable.length > 0,\r\n (failMessage ? failMessage : \"String must not be empty\")\r\n );\r\n }\r\n\r\n public static getParameterByName(url: string, name: string): string {\r\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\r\n let regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\r\n let results = regex.exec(url);\r\n return results == null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\r\n }\r\n\r\n public static isDefined(o): boolean {\r\n return typeof o !== \"undefined\";\r\n }\r\n\r\n public static extend(...objects: any[]): any {\r\n let o;\r\n if (objects && objects.length) {\r\n o = objects[0];\r\n for (let i = 1; i < objects.length; i++) {\r\n let o2 = objects[i];\r\n for (let prop in o2) {\r\n if (o2.hasOwnProperty(prop)) {\r\n o[prop] = o2[prop];\r\n }\r\n }\r\n }\r\n\r\n }\r\n return o;\r\n }\r\n\r\n public static getFilenameWithoutExtension(path: string): string {\r\n let filename = path.substring(path.lastIndexOf(\"/\") + 1);\r\n let sections = filename.split(\".\");\r\n\r\n return sections[0];\r\n }\r\n\r\n public static getExtension(path: string): string {\r\n let a = document.createElement(\"a\");\r\n a.href = path;\r\n // tslint:disable-next-line:no-bitwise\r\n return a.pathname.substr((~-a.pathname.lastIndexOf(\".\") >>> 0) + 2);\r\n }\r\n\r\n static ABS_URL_REGEX = /^(?:[a-z]+:)?\\/\\//i;\r\n public static isAbsoluteUrl(url: string): boolean {\r\n return Utils.ABS_URL_REGEX.test(url);\r\n }\r\n\r\n static GUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n public static isGuid(guid: string): boolean {\r\n return (Utils.GUID_REGEX.exec(guid) != null);\r\n }\r\n \r\n /**\r\n * a shorter version of a uuid that is way more unique than we need\r\n */\r\n public static shortId(): string {\r\n let x = 2147483648;\r\n // added the slice to get us down to 9 characters\r\n return Math.floor(Math.random() * x).toString(36).slice(0, 3) +\r\n // tslint:disable-next-line:no-bitwise\r\n Math.abs(Math.floor(Math.random() * x) ^ (new Date()).getTime()).toString(36);\r\n }\r\n \r\n public static areEqual(str1: string, str2: string) {\r\n return (str1 ? str1.toString().toUpperCase() : undefined) ===\r\n (str2 ? str2.toString().toUpperCase() : undefined);\r\n }\r\n\r\n public static toSafeString(o) {\r\n return (o === undefined || o === null ? \"\" : String(o));\r\n }\r\n\r\n public static supportsFullscreen(): boolean {\r\n let doc: any = document;\r\n return !!(\r\n doc.documentElement.requestFullscreen ||\r\n doc.documentElement.msRequestFullscreen ||\r\n doc.documentElement.mozRequestFullScreen ||\r\n doc.documentElement.webkitRequestFullscreen\r\n );\r\n }\r\n\r\n public static toggleFullscreen() {\r\n let doc: any = document;\r\n if (!doc.fullscreenElement && // alternative standard method\r\n !doc.mozFullScreenElement &&\r\n !doc.webkitFullscreenElement &&\r\n !doc.msFullscreenElement\r\n ) { // current working methods\r\n if (doc.documentElement.requestFullscreen) {\r\n doc.documentElement.requestFullscreen();\r\n } else if (doc.documentElement.msRequestFullscreen) {\r\n doc.documentElement.msRequestFullscreen();\r\n } else if (doc.documentElement.mozRequestFullScreen) {\r\n doc.documentElement.mozRequestFullScreen();\r\n } else if (doc.documentElement.webkitRequestFullscreen) {\r\n doc.documentElement.webkitRequestFullscreen((Element as any).ALLOW_KEYBOARD_INPUT);\r\n }\r\n } else {\r\n if (doc.exitFullscreen) {\r\n doc.exitFullscreen();\r\n } else if (doc.msExitFullscreen) {\r\n doc.msExitFullscreen();\r\n } else if (doc.mozCancelFullScreen) {\r\n doc.mozCancelFullScreen();\r\n } else if (doc.webkitExitFullscreen) {\r\n doc.webkitExitFullscreen();\r\n }\r\n }\r\n }\r\n\r\n public static supportsVr(): Q.IPromise {\r\n try {\r\n if ((window.navigator as any).getVRDisplays) {\r\n return (window.navigator as any).getVRDisplays().then(displays => {\r\n let res = false;\r\n if (displays.length) {\r\n const userAgent = window.navigator.userAgent;\r\n let deviceIncapable = /iPad|iPhone|iPod/.test(userAgent);\r\n if (/Android/.test(userAgent)) {\r\n deviceIncapable = /^(?!.*Mobile).*$/.test(userAgent);\r\n }\r\n\r\n res = displays[0].capabilities.canPresent && !deviceIncapable;\r\n }\r\n return res;\r\n });\r\n } else {\r\n return >Q.when(false);\r\n }\r\n } catch (e) {\r\n return >Q.when(false);\r\n }\r\n }\r\n\r\n private static _isIos: boolean;\r\n private static _iosChecked: boolean;\r\n public static isIos(): boolean {\r\n if (!this._iosChecked) {\r\n this._isIos = new RegExp(\"/iPad|iPhone|iPod/\").test(navigator.userAgent) && !(window as any).MSStream;\r\n this._iosChecked = true;\r\n }\r\n return this._isIos;\r\n }\r\n\r\n /**\r\n * sends a message to the parent page, if the current page is in an iframe\r\n */\r\n public static sendMessageToParent(msg: IMessage) {\r\n //if we are not in an iframe, then window.parent just returns the window we are in\r\n if (window) {\r\n window.postMessage(msg, \"*\");\r\n }\r\n if (window.parent && window.parent != window) {\r\n window.parent.postMessage(msg, \"*\");\r\n }\r\n }\r\n\r\n public static downloadFile(url: string) {\r\n let ext = Utils.getExtension(url);\r\n let filename = Utils.getFilenameWithoutExtension(url);\r\n let link = $(\"\");\r\n link.attr(\"href\", url)\r\n .attr(\"target\", \"_blank\")\r\n .attr(\"download\", filename + \".\" + ext)\r\n [0].click();\r\n }\r\n\r\n /**\r\n * Returns a function, that, as long as it continues to be invoked, will not\r\n * be triggered. The function will be called after it stops being called for\r\n * N milliseconds. If `immediate` is passed, trigger the function on the\r\n * leading edge, instead of the trailing.\r\n */\r\n public static debounce(func: Function, wait: number, immediate?: boolean) {\r\n let timeout;\r\n return function() {\r\n let context = this;\r\n let args = arguments;\r\n let later = () => {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n let callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n }\r\n\r\n /// **\r\n // * debounces a promise returning function so that at any instant only one call is pending\r\n // * @param func\r\n // */\r\n // public static promiseDebounce(func: Function) {\r\n // var pending = null;\r\n // function clear() { pending = null; }\r\n // return function () {\r\n // var ctx = this;\r\n // if (pending) return pending;\r\n // pending = func.apply(ctx, arguments);\r\n // pending.then(clear, clear);\r\n // return pending;\r\n // }\r\n // }\r\n\r\n /**\r\n * throttles a function to only be called at most only once every n milliseconds\r\n */\r\n public static throttle(fn: Function, threshhold: number, scope?) {\r\n let last;\r\n let deferTimer;\r\n return function() {\r\n let context = scope || this;\r\n let args = arguments;\r\n\r\n if (threshhold <= 0) {\r\n fn.apply(context, args);\r\n } else {\r\n let now = +new Date();\r\n if (last && now < last + threshhold) {\r\n // hold on to it\r\n clearTimeout(deferTimer);\r\n deferTimer = setTimeout(() => {\r\n last = now;\r\n fn.apply(context, args);\r\n }, threshhold);\r\n } else {\r\n last = now;\r\n fn.apply(context, args);\r\n }\r\n }\r\n };\r\n }\r\n\r\n public static getRelativePos(child: HTMLElement, ancestor: HTMLElement): { left: number, top: number } {\r\n let left = 0;\r\n let top = 0;\r\n let el = child;\r\n do {\r\n left += el.offsetLeft;\r\n top += el.offsetTop;\r\n } while ((el = el.offsetParent as HTMLElement) && el !== ancestor)\r\n\r\n return { left, top};\r\n }\r\n\r\n public static escapeMarkup(value: string) {\r\n var textNode = document.createTextNode(value);\r\n var div = document.createElement('div');\r\n div.appendChild(textNode);\r\n return div.innerHTML;\r\n }\r\n\r\n public static scrollIntoView(o: { elem: HTMLElement, mode: eScrollMode, animate: boolean, horizontal?: boolean, nearestStartPadding?: number, nearestEndPadding?: number }) {\r\n if (!o.elem) return;\r\n let $elem = $(o.elem);\r\n let $scrollParent = $elem.scrollParent();\r\n o.nearestStartPadding = o.nearestStartPadding || 0;\r\n o.nearestEndPadding = o.nearestEndPadding || 0;\r\n\r\n let set = (scrollProp: string, value: number) => {\r\n if (o.animate) {\r\n $scrollParent.animate({ [scrollProp]: value }, 150);\r\n } else {\r\n $scrollParent[0][scrollProp] = value;\r\n }\r\n };\r\n\r\n let elemPos = this.getRelativePos(o.elem, $scrollParent[0]);\r\n let elemRect = o.elem.getBoundingClientRect();\r\n\r\n if (o.mode == eScrollMode.nearest) {\r\n if (o.horizontal) {\r\n let elemLeft = elemPos.left; \r\n let elemRight = elemLeft + elemRect.width;\r\n let scrollLeft = $scrollParent[0].scrollLeft;\r\n let containerWidth = $scrollParent[0].clientWidth;\r\n\r\n if (elemLeft - scrollLeft < 0) {\r\n set(\"scrollLeft\", elemLeft - o.nearestStartPadding);\r\n } else if (elemRight > scrollLeft + containerWidth) {\r\n set(\"scrollLeft\", elemRight - containerWidth + o.nearestEndPadding);\r\n }\r\n } else {\r\n let elemTop = elemPos.top;\r\n let elemBottom = elemTop + elemRect.height;\r\n let scrollTop = $scrollParent[0].scrollTop;\r\n let containerHeight = $scrollParent[0].clientHeight;\r\n\r\n if (elemTop - scrollTop < 0) {\r\n set(\"scrollTop\", elemTop - o.nearestStartPadding);\r\n } else if (elemBottom > scrollTop + containerHeight) {\r\n set(\"scrollTop\", elemBottom - containerHeight + o.nearestEndPadding);\r\n }\r\n }\r\n } else if (o.mode == eScrollMode.middleIfNecessary) {\r\n if (o.horizontal) {\r\n let elemLeft = elemPos.left;\r\n let elemWidth = elemRect.width;\r\n let scrollLeft = $scrollParent[0].scrollLeft;\r\n let containerWidth = $scrollParent[0].clientWidth;\r\n\r\n if (elemLeft - scrollLeft < 0 || elemLeft + elemWidth > scrollLeft + containerWidth) {\r\n let newScrollLeft = elemLeft + (elemWidth / 2) - (containerWidth / 2);\r\n //if the elem is taller than the scroll window, we at least want the top visible\r\n if (newScrollLeft > elemLeft) newScrollLeft = elemLeft;\r\n set(\"scrollLeft\", newScrollLeft);\r\n } \r\n }else{\r\n let elemTop = elemPos.top;\r\n let elemHeight = elemRect.height;\r\n let scrollTop = $scrollParent[0].scrollTop;\r\n let containerHeight = $scrollParent[0].clientHeight;\r\n\r\n if (elemTop - scrollTop < 0 || elemTop + elemHeight > scrollTop + containerHeight) {\r\n let newScrollTop = elemTop + (elemHeight / 2) - (containerHeight / 2);\r\n //if the elem is taller than the scroll window, we at least want the top visible\r\n if (newScrollTop > elemTop) newScrollTop = elemTop;\r\n set(\"scrollTop\", newScrollTop);\r\n } \r\n } \r\n }\r\n\r\n // let itemPosition = $item.position();\r\n // let itemBottom = itemPosition.top + $item.outerHeight(true);\r\n // let scrollTop = $scrollParent.scrollTop();\r\n\r\n // $scrollParent.scrollTop(scrollTop + itemBottom - $scrollParent.innerHeight());\r\n }\r\n}\r\n","\r\nexport interface IMapping {\r\n key: KeyType;\r\n value: ValueType;\r\n}\r\n\r\nexport class Map {\r\n private _data: IMapping[] = [];\r\n\r\n public set(key: KeyType, value: ValueType) {\r\n let existingValue = this.getItem(key);\r\n if (existingValue) {\r\n existingValue.value = value;\r\n }\r\n this._data.push({\r\n key,\r\n value\r\n });\r\n }\r\n\r\n public get(key: KeyType): ValueType {\r\n let mapping = this.getItem(key);\r\n if (!mapping) return null;\r\n return mapping.value;\r\n }\r\n\r\n public delete(key: KeyType) {\r\n this._data.removeWhere(d => d.key == key);\r\n }\r\n\r\n private getItem(key: KeyType): IMapping {\r\n return this._data.find(d => d.key == key);\r\n }\r\n}\r\n","import { IMessage } from \"./models\";\r\nimport { Utils } from \"./utils\";\r\n\r\nexport class MessageDispatcher {\r\n\r\n constructor(private postTo: Window | Worker, private listenOn: Window | Worker, private $q?: ng.IQService) {\r\n // catch messages coming from the iframe\r\n listenOn.addEventListener(\"message\", event => {\r\n let msg: IMessage = (event as any).data;\r\n if (msg) {\r\n // if we are on the ask side, then we need to see if an answer came in\r\n let ask = this.asks.find(a => a.msg.id == msg.id);\r\n if (ask) {\r\n // remove the ask\r\n this.asks.remove(ask);\r\n // resolve the promise\r\n ask.deferred.resolve(msg.data);\r\n } else { // if we are on the listen side, then we're listening for a name\r\n let listenMsg = { name: msg.name, id: msg.id, data: msg.data } as IMessage;\r\n let listens = this.listens.filter(l => l.name == msg.name);\r\n listens.forEach(l => {\r\n l.handler(listenMsg);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n public asks: { msg: IMessage; deferred: ng.IDeferred }[] = [];\r\n public listens: { name: string; handler: (msg: IMessage) => void }[] = [];\r\n\r\n public ask(name: string, data?: any): ng.IPromise {\r\n let deferred = this.$q.defer();\r\n let msg: IMessage = {\r\n id: Utils.shortId(),\r\n name,\r\n data // data sent through postMessage cannot have functions or methods on it\r\n };\r\n this.asks.push({ msg, deferred });\r\n this.postMessage(msg);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n public listen(name: string, handler: (msg: IMessage) => void) {\r\n this.listens.push({ name, handler });\r\n }\r\n\r\n public removeListen(name: string, handler?: (msg: IMessage) => void) {\r\n if (handler) { // if handler is specified, we only remove that specific listen\r\n this.listens.removeWhere(l => l.name == name && l.handler == handler);\r\n } else {\r\n this.listens.removeWhere(l => l.name == name);\r\n }\r\n }\r\n\r\n public answer(originalMsg: IMessage, data: any) {\r\n // post message back to other window\r\n let msg: IMessage = {\r\n id: originalMsg.id,\r\n name: originalMsg.name + \" answer\",\r\n data\r\n };\r\n this.postMessage(msg);\r\n }\r\n\r\n private inWorker() {\r\n return typeof Worker === \"undefined\";\r\n }\r\n\r\n private postMessage(msg: IMessage) {\r\n if (this.inWorker() || this.postTo instanceof Worker) {\r\n (this.postTo as Worker).postMessage(msg);\r\n } else {\r\n this.postTo.postMessage(msg, \"*\");\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * helpers for filtering and ranking arrays for autocomplete type functionality\r\n */\r\nexport class SearchUtils\r\n{\r\n\r\n public static search(query: string, arr: T[], valueFn: (item: T) => string, maxItems: number = 10, matchFn: (item: T) => void = null, noMatchFn: (item: T) => void = null): T[] {\r\n var sorted: T[] = [];\r\n\r\n var add = (item) => {// Insert using binary search. \r\n var value = valueFn(item); \r\n var score = scoreDb[value];\r\n var indexMin = 0;\r\n var indexMax = sorted.length;\r\n while (indexMin < indexMax) {\r\n var indexMid = Math.floor((indexMin + indexMax) / 2);\r\n var midScore = scoreDb[valueFn(sorted[indexMid])];\r\n\r\n //if the insert item is less than existing\r\n if (score > midScore) {\r\n indexMax = indexMid;\r\n } else if (score < midScore) {\r\n indexMin = indexMid + 1;\r\n } else { //they are equal\r\n indexMin = indexMid;\r\n break;\r\n }\r\n }\r\n sorted.splice(indexMin, 0, item);\r\n };\r\n\r\n //first get rid of duplicates\r\n var db = {};\r\n arr.forEach(item => db[valueFn(item)] = item);\r\n var scoreDb: { [value: string]: number } = {};\r\n\r\n var keys = Object.keys(db);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n var score = 0;\r\n if (key && query) score = SearchUtils.score(key, query, 0);\r\n if (score > 0) {\r\n scoreDb[key] = score;\r\n add(db[key]);\r\n if (matchFn) matchFn(db[key]);\r\n } else {\r\n if (noMatchFn) noMatchFn(db[key]);\r\n }\r\n }\r\n \r\n if (maxItems > 0 && sorted.length >= maxItems) {\r\n sorted = sorted.slice(0, maxItems - 1);\r\n }\r\n\r\n return sorted;\r\n }\r\n \r\n /*!\r\n * string_score.js: String Scoring Algorithm 0.1.22\r\n *\r\n * http://joshaven.com/string_score\r\n * https://github.com/joshaven/string_score\r\n */\r\n public static score(phrase: string, query: string, fuzziness: number): number {\r\n // If the string is equal to the word, perfect match.\r\n if (phrase === query) { return 1; }\r\n\r\n //if it's not a perfect match and is empty return 0\r\n if (query === \"\") { return 0; }\r\n\r\n var runningScore = 0,\r\n charScore,\r\n finalScore,\r\n string = phrase,\r\n lString = string.toLowerCase(),\r\n strLength = string.length,\r\n lWord = query.toLowerCase(),\r\n wordLength = query.length,\r\n idxOf,\r\n startAt = 0,\r\n fuzzies = 1,\r\n fuzzyFactor,\r\n i;\r\n\r\n // Cache fuzzyFactor for speed increase\r\n if (fuzziness) { fuzzyFactor = 1 - fuzziness; }\r\n\r\n // Walk through word and add up scores.\r\n // Code duplication occurs to prevent checking fuzziness inside for loop\r\n if (fuzziness) {\r\n for (i = 0; i < wordLength; i += 1) {\r\n\r\n // Find next first case-insensitive match of a character.\r\n idxOf = lString.indexOf(lWord[i], startAt);\r\n\r\n if (idxOf === -1) {\r\n fuzzies += fuzzyFactor;\r\n } else {\r\n if (startAt === idxOf) {\r\n // Consecutive letter & start-of-string Bonus\r\n charScore = 0.7;\r\n } else {\r\n charScore = 0.1;\r\n\r\n // Acronym Bonus\r\n // Weighing Logic: Typing the first character of an acronym is as if you\r\n // preceded it with two perfect character matches.\r\n if (string[idxOf - 1] === ' ') { charScore += 0.5; }\r\n }\r\n\r\n // Same case bonus.\r\n if (string[idxOf] === query[i]) { charScore += 0.1; }\r\n\r\n // Update scores and startAt position for next round of indexOf\r\n runningScore += charScore;\r\n startAt = idxOf + 1;\r\n }\r\n }\r\n } else {\r\n for (i = 0; i < wordLength; i += 1) {\r\n idxOf = lString.indexOf(lWord[i], startAt);\r\n if (-1 === idxOf) { return 0; }\r\n\r\n if (startAt === idxOf) {\r\n charScore = 0.7;\r\n } else {\r\n charScore = 0.1;\r\n if (string[idxOf - 1] === ' ') { charScore += 0.5; }\r\n }\r\n if (string[idxOf] === query[i]) { charScore += 0.1; }\r\n runningScore += charScore;\r\n startAt = idxOf + 1;\r\n }\r\n }\r\n\r\n // Reduce penalty for longer strings.\r\n finalScore = 0.5 * (runningScore / strLength + runningScore / wordLength) / fuzzies;\r\n\r\n if ((lWord[0] === lString[0]) && (finalScore < 0.85)) {\r\n finalScore += 0.15;\r\n }\r\n\r\n return finalScore;\r\n }\r\n \r\n\r\n\r\n\r\n\r\n}","export class UnitOfMeasurement {\r\n public name: string;\r\n public multiplier: number;\r\n public offset: number;\r\n \r\n public static create(name: string, multiplier: number, offset?: number) {\r\n let result = new UnitOfMeasurement();\r\n result.name = name;\r\n result.multiplier = multiplier;\r\n result.offset = offset ? offset : 0;\r\n return result;\r\n }\r\n}\r\n\r\nexport class Units {\r\n public static distance: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"meters\", 1),\r\n UnitOfMeasurement.create(\"millimeters\", 1000),\r\n UnitOfMeasurement.create(\"centimeters\", 100),\r\n UnitOfMeasurement.create(\"kilometers\", 0.001),\r\n UnitOfMeasurement.create(\"inches\", 39.3701),\r\n UnitOfMeasurement.create(\"feet\", 3.28084),\r\n UnitOfMeasurement.create(\"yards\", 1.09361),\r\n UnitOfMeasurement.create(\"miles\", 0.000621371)\r\n ];\r\n\r\n public static area: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"sq. millimeters\", 1000000),\r\n UnitOfMeasurement.create(\"sq. centimeters\", 10000),\r\n UnitOfMeasurement.create(\"sq. meters\", 1),\r\n UnitOfMeasurement.create(\"sq. kilometers\", 0.000001),\r\n UnitOfMeasurement.create(\"sq. yard\", 1.19599),\r\n UnitOfMeasurement.create(\"sq. feet\", 10.7639),\r\n UnitOfMeasurement.create(\"sq. inch\", 1550),\r\n UnitOfMeasurement.create(\"hectacre\", 0.0001),\r\n UnitOfMeasurement.create(\"acre\", 0.000247105)\r\n ];\r\n\r\n public static volume: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"liters\", 1),\r\n UnitOfMeasurement.create(\"US gallons\", 0.264172),\r\n UnitOfMeasurement.create(\"US quarts\", 1.05669),\r\n UnitOfMeasurement.create(\"US pints\", 2.11338),\r\n UnitOfMeasurement.create(\"US cups\", 4.16667),\r\n UnitOfMeasurement.create(\"US ounces\", 33.814),\r\n UnitOfMeasurement.create(\"US tablespoons\", 67.628),\r\n UnitOfMeasurement.create(\"US teaspoons\", 202.884),\r\n UnitOfMeasurement.create(\"cubic meters\", 0.001),\r\n UnitOfMeasurement.create(\"milliliters\", 1000),\r\n UnitOfMeasurement.create(\"imperial gallons\", 0.219969),\r\n UnitOfMeasurement.create(\"imperial quarts\", 0.879877),\r\n UnitOfMeasurement.create(\"imperial pints\", 1.75975),\r\n UnitOfMeasurement.create(\"imperial cups\", 3.51951),\r\n UnitOfMeasurement.create(\"imperial ounces\", 35.1951),\r\n UnitOfMeasurement.create(\"imperial tablespoons\", 56.3121),\r\n UnitOfMeasurement.create(\"imperial teaspoons\", 168.936),\r\n UnitOfMeasurement.create(\"cubic feet\", 0.0353147),\r\n UnitOfMeasurement.create(\"cubic inches\", 61.0237)\r\n ];\r\n\r\n /*public static temperature: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"kelvin\", 1),\r\n UnitOfMeasurement.create(\"celsius\", 1, 272.15),\r\n UnitOfMeasurement.create(\"fahrenheit\", 1.8, 255.372)\r\n ];*/\r\n\r\n public static weight: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"kilograms\", 1),\r\n UnitOfMeasurement.create(\"grams\", 1000),\r\n UnitOfMeasurement.create(\"metric tons\", 0.001),\r\n UnitOfMeasurement.create(\"milligrams\", 1000000),\r\n UnitOfMeasurement.create(\"micrograms\", 1000000000),\r\n UnitOfMeasurement.create(\"imperial tons\", 0.000984207),\r\n UnitOfMeasurement.create(\"US tons\", 0.00110231),\r\n UnitOfMeasurement.create(\"stones\", 0.157473),\r\n UnitOfMeasurement.create(\"pounds\", 2.20462),\r\n UnitOfMeasurement.create(\"ounces\", 35.274)\r\n ];\r\n\r\n public static pressure: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"pascals\", 1),\r\n UnitOfMeasurement.create(\"bars\", 0.00001),\r\n UnitOfMeasurement.create(\"atmospheres\", 0.0000098692),\r\n UnitOfMeasurement.create(\"psi\", 0.000145038),\r\n UnitOfMeasurement.create(\"torrs\", 0.00750062),\r\n UnitOfMeasurement.create(\"hg\", 0.0002953)\r\n ];\r\n\r\n public static angle: UnitOfMeasurement[] = [\r\n UnitOfMeasurement.create(\"radians\", 1),\r\n UnitOfMeasurement.create(\"degrees\", 57.2958),\r\n UnitOfMeasurement.create(\"gradians\", 63.662),\r\n UnitOfMeasurement.create(\"milliradians\", 1000),\r\n UnitOfMeasurement.create(\"minutes\", 3437.75),\r\n UnitOfMeasurement.create(\"seconds\", 206265)\r\n ];\r\n\r\n public static convert(type: string, from: string, to: string, value: number): number {\r\n let measurements: UnitOfMeasurement[] = Units[type];\r\n if (!measurements) throw new Error(\"Unit type \" + type + \" not found\");\r\n let fromUnit = measurements.find(m => m.name == from);\r\n if (!fromUnit) throw new Error(\"Unit \" + from + \"not found\");\r\n let toUnit = measurements.find(m => m.name == to);\r\n if (!toUnit) throw new Error(\"Unit \" + to + \" not found\");\r\n return Math.round(((value * 1 / fromUnit.multiplier * toUnit.multiplier) -\r\n ((toUnit.offset * toUnit.multiplier) - (fromUnit.offset * fromUnit.multiplier))) * 10000) / 10000;\r\n }\r\n}\r\n","/*\r\n This file is a shim to make rule utilities available globally. We concat it with the rules bundle\r\n after the bundle is already made.\r\n*/\r\n\r\nvar Units = tools.Units;"]}