{"version":3,"file":"index.js","mappings":"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","sources":["webpack://@amcharts/amcharts5/webpack/runtime/chunk loaded","webpack://@amcharts/amcharts5/webpack/runtime/create fake namespace object","webpack://@amcharts/amcharts5/webpack/runtime/load script","webpack://@amcharts/amcharts5/./src/.internal/core/Registry.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/ResizeSensor.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Language.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Matrix.ts","webpack://@amcharts/amcharts5/./node_modules/svg-arc-to-cubic-bezier/modules/index.js","webpack://@amcharts/amcharts5/./src/.internal/core/render/backend/CanvasRenderer.ts","webpack://@amcharts/amcharts5/./src/.internal/core/Root.ts","webpack://@amcharts/amcharts5/./src/.internal/core/Theme.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Bullet.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Button.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Chart.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Circle.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Component.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Children.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Container.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Ellipse.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Graphics.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/GridLayout.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/HorizontalLayout.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Label.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Layout.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Legend.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Draw.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Line.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/MonotoneXTension.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/MonotoneYTension.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Picture.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/PointedRectangle.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Polygon.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/RadialLabel.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/RadialText.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Rectangle.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/RoundedRectangle.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Scrollbar.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/SerialChart.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Series.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Slice.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Sprite.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/SpriteResizer.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Text.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Tick.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Tooltip.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/VerticalLayout.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/backend/Renderer.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/gradients/Gradient.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/gradients/LinearGradient.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/Pattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/PicturePattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Animation.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Array.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Color.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/ColorSet.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Data.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/DateFormatter.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Disposer.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/DurationFormatter.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Ease.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/States.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Entity.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/EventDispatcher.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/InterfaceColors.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/List.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Math.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Modal.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/NumberFormatter.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Object.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Order.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Percent.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/PopulateString.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Template.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/TextFormatter.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Time.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Timezone.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Type.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Utils.ts","webpack://@amcharts/amcharts5/./src/.internal/plugins/json/Classes-script.ts","webpack://@amcharts/amcharts5/./src/.internal/plugins/json/Json.ts","webpack://@amcharts/amcharts5/./src/.internal/plugins/json/Serializer.ts","webpack://@amcharts/amcharts5/./src/.internal/themes/DefaultTheme.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Star.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/HeatLegend.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Triangle.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/Slider.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/GrainPattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/gradients/RadialGradient.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/CirclePattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/LinePattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/RectanglePattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/render/patterns/PathPattern.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/DataParser.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/DataProcessor.ts","webpack://@amcharts/amcharts5/./src/.internal/core/util/Net.ts","webpack://@amcharts/amcharts5/./src/locales/en.ts","webpack://@amcharts/amcharts5/./node_modules/regenerator-runtime/runtime.js","webpack://@amcharts/amcharts5/./tmp/webpack/polyfill.js","webpack://@amcharts/amcharts5/./tmp/webpack/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-dispatch/src/dispatch.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/accessors.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/lcg.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/pack/enclose.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/pack/siblings.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/array.js","webpack://@amcharts/amcharts5/./node_modules/d3-hierarchy/src/pack/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-path/src/path.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/math.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/arc.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/area.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/array.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/curve/linear.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/line.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/path.js","webpack://@amcharts/amcharts5/./node_modules/d3-shape/src/point.js","webpack://@amcharts/amcharts5/./node_modules/d3-timer/src/timer.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selector.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selectorAll.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/matcher.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/selectChild.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/selectChildren.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/sparse.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/enter.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/data.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/sort.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/namespaces.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/namespace.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/attr.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/window.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/style.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/property.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/classed.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/text.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/html.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/raise.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/lower.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/creator.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/insert.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/remove.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/clone.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/on.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/dispatch.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/select.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/selectAll.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/array.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/filter.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/exit.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/join.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/merge.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/order.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/call.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/nodes.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/node.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/size.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/empty.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/each.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/append.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/datum.js","webpack://@amcharts/amcharts5/./node_modules/d3-selection/src/selection/iterator.js","webpack://@amcharts/amcharts5/./node_modules/d3-timer/src/timeout.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/schedule.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/number.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/transform/decompose.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/transform/parse.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/transform/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/tween.js","webpack://@amcharts/amcharts5/./node_modules/d3-color/src/define.js","webpack://@amcharts/amcharts5/./node_modules/d3-color/src/color.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/basis.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/color.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/rgb.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/basisClosed.js","webpack://@amcharts/amcharts5/./node_modules/d3-interpolate/src/string.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/interpolate.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/attr.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/attrTween.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/delay.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/duration.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/selection.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/style.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/select.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/selectAll.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/filter.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/merge.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/transition.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/on.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/styleTween.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/text.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/textTween.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/remove.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/ease.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/easeVarying.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/transition/end.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/selection/transition.js","webpack://@amcharts/amcharts5/./node_modules/d3-ease/src/cubic.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/selection/index.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/selection/interrupt.js","webpack://@amcharts/amcharts5/./node_modules/d3-transition/src/interrupt.js","webpack://@amcharts/amcharts5/./node_modules/tslib/tslib.es6.mjs","webpack://@amcharts/amcharts5/webpack/bootstrap","webpack://@amcharts/amcharts5/webpack/runtime/amd define","webpack://@amcharts/amcharts5/webpack/runtime/amd options","webpack://@amcharts/amcharts5/webpack/runtime/compat get default export","webpack://@amcharts/amcharts5/webpack/runtime/define property getters","webpack://@amcharts/amcharts5/webpack/runtime/ensure chunk","webpack://@amcharts/amcharts5/webpack/runtime/get javascript chunk filename","webpack://@amcharts/amcharts5/webpack/runtime/hasOwnProperty shorthand","webpack://@amcharts/amcharts5/webpack/runtime/make namespace object","webpack://@amcharts/amcharts5/webpack/runtime/node module decorator","webpack://@amcharts/amcharts5/webpack/runtime/publicPath","webpack://@amcharts/amcharts5/webpack/runtime/jsonp chunk loading","webpack://@amcharts/amcharts5/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"@amcharts/amcharts5:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","\r\n/**\r\n * @ignore\r\n */\r\nexport class Registry {\r\n\t/**\r\n\t * Currently running version of amCharts.\r\n\t */\r\n\treadonly version: string = \"5.7.7\";\r\n\r\n\t/**\r\n\t * List of applied licenses.\r\n\t * @ignore\r\n\t */\r\n\tlicenses: String[] = [];\r\n\r\n\t/**\r\n\t * Entities that have their `id` setting set.\r\n\t */\r\n\tentitiesById: { [index: string]: any } = {};\r\n\r\n\t/**\r\n\t * All created [[Root]] elements.\r\n\t */\r\n\trootElements: any[] = [];\r\n\r\n}\r\n\r\n/**\r\n\t* @ignore\r\n */\r\nexport const registry = new Registry();\r\n\r\n/**\r\n * Adds a license, e.g.:\r\n *\r\n * ```TypeScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n * ```JavaScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n *\r\n * Multiple licenses can be added to cover for multiple products.\r\n *\r\n * @param license License key\r\n */\r\nexport function addLicense(license: string): void {\r\n\tregistry.licenses.push(license);\r\n}\r\n\r\n\r\n/**\r\n * Disposes all [[Root]] elements.\r\n */\r\nexport function disposeAllRootElements(): void {\r\n\tlet root;\r\n\twhile(root = registry.rootElements.pop()) {\r\n\t\troot.dispose();\r\n\t}\r\n}\r\n","/** @ignore *//** */\n\nimport type { IDisposer } from \"./Disposer\";\nimport * as $array from \"./Array\";\nimport * as $utils from \"./Utils\";\n\n/**\n * @ignore\n */\ninterface Sensor {\n\taddTarget(target: Element, callback: () => void): void;\n\tremoveTarget(target: Element): void;\n}\n\n/**\n * @ignore\n */\ndeclare const ResizeObserver: any;\n\n/**\n * @ignore\n */\nclass Native implements Sensor {\n\tprivate _observer: any;\n\tprivate _targets: Array<{ target: Element, callback: () => void }> = [];\n\n\tconstructor() {\n\t\tthis._observer = new ResizeObserver((entries: Array) => {\n\t\t\t$array.each(entries, (entry) => {\n\t\t\t\t$array.each(this._targets, (x) => {\n\t\t\t\t\tif (x.target === entry.target) {\n\t\t\t\t\t\tx.callback();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\taddTarget(target: Element, callback: () => void) {\n\t\tthis._observer.observe(target, { box: \"border-box\" });\n\t\tthis._targets.push({ target, callback });\n\t}\n\n\tremoveTarget(target: Element) {\n\t\tthis._observer.unobserve(target);\n\n\t\t$array.keepIf(this._targets, (x) => {\n\t\t\treturn x.target !== target;\n\t\t});\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ClientBounds {\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttop: number,\n\tbottom: number,\n\tx: number,\n\ty: number\n}\n\n\n/**\n * @ignore\n */\nclass Raf implements Sensor {\n\tpublic static delay: number = 200;\n\n\tprivate _timer: number | null = null;\n\tprivate _targets: Array<{ target: Element, callback: () => void, size: ClientRect | DOMRect | ClientBounds }> = [];\n\n\taddTarget(target: Element, callback: () => void) {\n\t\tif (this._timer === null) {\n\t\t\tlet lastTime: number | null = null;\n\n\t\t\tconst loop = () => {\n\t\t\t\tconst currentTime = Date.now();\n\n\t\t\t\tif (lastTime === null || currentTime > (lastTime + Raf.delay)) {\n\t\t\t\t\tlastTime = currentTime;\n\n\t\t\t\t\t$array.each(this._targets, (x) => {\n\t\t\t\t\t\tlet newSize = x.target.getBoundingClientRect();\n\n\t\t\t\t\t\tif (newSize.width !== x.size.width || newSize.height !== x.size.height) {\n\t\t\t\t\t\t\tx.size = newSize;\n\t\t\t\t\t\t\tx.callback();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (this._targets.length === 0) {\n\t\t\t\t\tthis._timer = null;\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._timer = requestAnimationFrame(loop);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._timer = requestAnimationFrame(loop);\n\t\t}\n\n\t\t// We start off with fake bounds so that sensor always kicks in\n\t\tlet size = { width: 0, height: 0, left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 };\n\t\tthis._targets.push({ target, callback, size });\n\t}\n\n\tremoveTarget(target: Element) {\n\t\t$array.keepIf(this._targets, (x) => {\n\t\t\treturn x.target !== target;\n\t\t});\n\n\t\tif (this._targets.length === 0) {\n\t\t\tif (this._timer !== null) {\n\t\t\t\tcancelAnimationFrame(this._timer);\n\t\t\t\tthis._timer = null;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * @ignore\n */\nlet observer: Sensor | null = null;\n\n/**\n * @ignore\n */\nfunction makeSensor(): Sensor {\n\tif (observer === null) {\n\t\tif (typeof ResizeObserver !== \"undefined\") {\n\t\t\tobserver = new Native();\n\n\t\t} else {\n\t\t\tobserver = new Raf();\n\t\t}\n\t}\n\n\treturn observer;\n}\n\n/**\n * @ignore\n */\nexport class ResizeSensor implements IDisposer {\n\tprivate _sensor: Sensor;\n\tprivate _element: Element;\n\tprivate _listener: IDisposer;\n\tprivate _disposed: boolean = false;\n\n\tconstructor(element: Element, callback: () => void) {\n\t\tthis._sensor = makeSensor();\n\t\tthis._element = element;\n\n\t\t// This is needed because we need to know when the window is zoomed\n\t\tthis._listener = $utils.onZoom(callback);\n\n\t\tthis._sensor.addTarget(element, callback);\n\t}\n\n\tpublic isDisposed() {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose() {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\t\t\tthis._sensor.removeTarget(this._element);\n\t\t\tthis._listener.dispose();\n\t\t}\n\t}\n\n\tpublic get sensor(): Sensor {\n\t\treturn this._sensor;\n\t}\n}\n","import { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\nimport * as $array from \"./Array\"\nimport * as $object from \"./Object\"\nimport en from \"../../../locales/en\";\n\n/**\n * Defines properties that exist for the locale.\n *\n * @ignore\n */\nexport interface ILocaleSettings {\n\t\"firstDayOfWeek\"?: number,\n\n\t// number formatter related\n\t\"_decimalSeparator\"?: string;\n\t\"_thousandSeparator\"?: string;\n\n\t\"_percentPrefix\"?: string | null;\n\t\"_percentSuffix\"?: string | null;\n\n\t\"_big_number_suffix_3\"?: string;\n\t\"_big_number_suffix_6\"?: string;\n\t\"_big_number_suffix_9\"?: string;\n\t\"_big_number_suffix_12\"?: string;\n\t\"_big_number_suffix_15\"?: string;\n\t\"_big_number_suffix_18\"?: string;\n\t\"_big_number_suffix_21\"?: string;\n\t\"_big_number_suffix_24\"?: string;\n\n\t\"_small_number_suffix_24\"?: string;\n\t\"_small_number_suffix_21\"?: string;\n\t\"_small_number_suffix_18\"?: string;\n\t\"_small_number_suffix_15\"?: string;\n\t\"_small_number_suffix_12\"?: string;\n\t\"_small_number_suffix_9\"?: string;\n\t\"_small_number_suffix_6\"?: string;\n\t\"_small_number_suffix_3\"?: string;\n\n\t\"_byte_suffix_B\"?: string;\n\t\"_byte_suffix_KB\"?: string;\n\t\"_byte_suffix_MB\"?: string;\n\t\"_byte_suffix_GB\"?: string;\n\t\"_byte_suffix_TB\"?: string;\n\t\"_byte_suffix_PB\"?: string;\n\n\t// Default date formats for various periods\n\t\"_date\"?: string;\n\t\"_date_millisecond\"?: string;\n\t\"_date_millisecond_full\"?: string;\n\t\"_date_second\"?: string;\n\t\"_date_second_full\"?: string;\n\t\"_date_minute\"?: string;\n\t\"_date_minute_full\"?: string;\n\t\"_date_hour\"?: string;\n\t\"_date_hour_full\"?: string;\n\t\"_date_day\"?: string;\n\t\"_date_day_full\"?: string;\n\t\"_date_week\"?: string;\n\t\"_date_week_full\"?: string;\n\t\"_date_month\"?: string;\n\t\"_date_month_full\"?: string;\n\t\"_date_year\"?: string;\n\n\t// Default duration formats for various base units\n\t\"_duration_millisecond\"?: string;\n\t\"_duration_millisecond_second\"?: string;\n\t\"_duration_millisecond_minute\"?: string;\n\t\"_duration_millisecond_hour\"?: string;\n\t\"_duration_millisecond_day\"?: string;\n\t\"_duration_millisecond_week\"?: string;\n\t\"_duration_millisecond_month\"?: string;\n\t\"_duration_millisecond_year\"?: string;\n\n\t\"_duration_second\"?: string;\n\t\"_duration_second_minute\"?: string;\n\t\"_duration_second_hour\"?: string;\n\t\"_duration_second_day\"?: string;\n\t\"_duration_second_week\"?: string;\n\t\"_duration_second_month\"?: string;\n\t\"_duration_second_year\"?: string;\n\n\t\"_duration_minute\"?: string;\n\t\"_duration_minute_hour\"?: string;\n\t\"_duration_minute_day\"?: string;\n\t\"_duration_minute_week\"?: string;\n\t\"_duration_minute_month\"?: string;\n\t\"_duration_minute_year\"?: string;\n\n\t\"_duration_hour\"?: string;\n\t\"_duration_hour_day\"?: string;\n\t\"_duration_hour_week\"?: string;\n\t\"_duration_hour_month\"?: string;\n\t\"_duration_hour_year\"?: string;\n\n\t\"_duration_day\"?: string;\n\t\"_duration_day_week\"?: string;\n\t\"_duration_day_month\"?: string;\n\t\"_duration_day_year\"?: string;\n\n\t\"_duration_week\"?: string;\n\t\"_duration_week_month\"?: string;\n\t\"_duration_week_year\"?: string;\n\n\t\"_duration_month\"?: string;\n\t\"_duration_month_year\"?: string;\n\n\t\"_duration_year\"?: string;\n\n\t// Era\n\t\"_era_ad\"?: string;\n\t\"_era_bc\"?: string;\n\n\t// Period\n\t\"A\"?: string;\n\t\"P\"?: string;\n\t\"AM\"?: string;\n\t\"PM\"?: string;\n\t\"A.M.\"?: string;\n\t\"P.M.\"?: string;\n\n\t// Dates\n\t\"January\"?: string;\n\t\"February\"?: string;\n\t\"March\"?: string;\n\t\"April\"?: string;\n\t\"May\"?: string;\n\t\"June\"?: string;\n\t\"July\"?: string;\n\t\"August\"?: string;\n\t\"September\"?: string;\n\t\"October\"?: string;\n\t\"November\"?: string;\n\t\"December\"?: string;\n\t\"Jan\"?: string;\n\t\"Feb\"?: string;\n\t\"Mar\"?: string;\n\t\"Apr\"?: string;\n\t\"May(short)\"?: string;\n\t\"Jun\"?: string;\n\t\"Jul\"?: string;\n\t\"Aug\"?: string;\n\t\"Sep\"?: string;\n\t\"Oct\"?: string;\n\t\"Nov\"?: string;\n\t\"Dec\"?: string;\n\t\"Sunday\"?: string;\n\t\"Monday\"?: string;\n\t\"Tuesday\"?: string;\n\t\"Wednesday\"?: string;\n\t\"Thursday\"?: string;\n\t\"Friday\"?: string;\n\t\"Saturday\"?: string;\n\t\"Sun\"?: string;\n\t\"Mon\"?: string;\n\t\"Tue\"?: string;\n\t\"Wed\"?: string;\n\t\"Thu\"?: string;\n\t\"Fri\"?: string;\n\t\"Sat\"?: string;\n\n\t// Chart elements\n\t\"Zoom Out\"?: string;\n\t\"Play\"?: string;\n\t\"Stop\"?: string;\n\t\"Legend\"?: string;\n\t\"Press ENTER to toggle\"?: string;\n\t\"Loading\"?: string;\n\t\"%1 shown\"?: string;\n\t\"%1 hidden\"?: string;\n\n\t// Chart types\n\t\"Chart\"?: string;\n\t\"Serial chart\"?: string;\n\t\"X/Y chart\"?: string;\n\t\"Pie chart\"?: string;\n\t\"Sunburst chart\"?: string;\n\t\"Gauge chart\"?: string;\n\t\"Radar chart\"?: string;\n\t\"Sankey diagram\"?: string;\n\t\"Flow diagram\"?: string;\n\t\"Chord diagram\"?: string;\n\t\"TreeMap chart\"?: string;\n\t\"Force directed tree\"?: string;\n\t\"Sliced chart\"?: string;\n\n\t// Series types\n\t\"Series\"?: string;\n\t\"Candlestick Series\"?: string;\n\t\"OHLC Series\"?: string;\n\t\"Column Series\"?: string;\n\t\"Line Series\"?: string;\n\t\"Pie Slice Series\"?: string;\n\t\"Funnel Series\"?: string;\n\t\"Pyramid Series\"?: string;\n\t\"X/Y Series\"?: string;\n\n\t// Map-related\n\t\"Map\"?: string;\n\t\"Press ENTER to zoom in\"?: string;\n\t\"Press ENTER to zoom out\"?: string;\n\t\"Use arrow keys to zoom in and out\"?: string;\n\t\"Use plus and minus keys on your keyboard to zoom in and out\"?: string;\n\t\"Home\"?: string;\n\t\"Zoom level changed to %1\"?: string;\n\n\t// Export-related\n\t\"Export\"?: string;\n\t\"Image\"?: string;\n\t\"Data\"?: string;\n\t\"Print\"?: string;\n\t\"Press ENTER or use arrow keys to navigate\"?: string;\n\t\"Press ENTER to open\"?: string;\n\t\"Press ENTER to print.\"?: string;\n\t\"Press ENTER to export as %1.\"?: string;\n\t\"(Press ESC to close this message)\"?: string;\n\t\"Image Export Complete\"?: string;\n\t\"Export operation took longer than expected. Something might have gone wrong.\"?: string;\n\t\"Saved from\"?: string;\n\t\"PNG\"?: string;\n\t\"JPG\"?: string;\n\t\"GIF\"?: string;\n\t\"SVG\"?: string;\n\t\"PDF\"?: string;\n\t\"JSON\"?: string;\n\t\"CSV\"?: string;\n\t\"XLSX\"?: string;\n\t\"HTML\"?: string;\n\n\t// Scrollbar-related\n\t\"Use TAB to select grip buttons or left and right arrows to change selection\"?: string;\n\t\"Use left and right arrows to move selection\"?: string;\n\t\"Use left and right arrows to move left selection\"?: string;\n\t\"Use left and right arrows to move right selection\"?: string;\n\t\"Use TAB select grip buttons or up and down arrows to change selection\"?: string;\n\t\"Use up and down arrows to move selection\"?: string;\n\t\"Use up and down arrows to move lower selection\"?: string;\n\t\"Use up and down arrows to move upper selection\"?: string;\n\t\"From %1 to %2\"?: string;\n\t\"From %1\"?: string;\n\t\"To %1\"?: string;\n\n\t// Data loader-related\n\t\"No parser available for file: %1\"?: string;\n\t\"Error parsing file: %1\"?: string;\n\t\"Unable to load file: %1\"?: string;\n\t\"Invalid date\"?: string;\n\n\t// Common actions\n\t\"Close\"?: string;\n\t\"Minimize\"?: string;\n\n\t\"Venn Series\"?: string;\n\t\"Venn Diagram\"?: string;\n}\n\n/**\n * Defines functions that exist for the locale.\n *\n * @ignore\n */\nexport interface ILocaleFunctions {\n\t// ordinal function\n\t\"_dateOrd\": (day: number) => string;\n}\n\n/**\n * Defines all of the defaults for locale properties.\n * @ignore\n */\nexport interface ILocaleDefault extends ILocaleSettings, ILocaleFunctions { }\n\n/**\n * Defines locale interface.\n *\n * @ignore\n */\nexport interface ILocale extends Partial { };\n\nexport interface ILanguageSettings extends IEntitySettings {\n}\n\nexport interface ILanguagePrivate extends IEntityPrivate {\n\n\t/**\n\t * A locale for International English (default).\n\t */\n\tdefaultLocale: ILocale;\n\n}\n\n/**\n * Add localization functionality.\n */\nexport class Language extends Entity {\n\tdeclare public _settings: ILanguageSettings;\n\tdeclare public _privateSettings: ILanguagePrivate;\n\n\tprotected _setDefaults() {\n\t\tthis.setPrivate(\"defaultLocale\", en);\n\t\tsuper._setDefaults();\n\t}\n\n\t/**\n\t * Returns a prompt translation.\n\t * \n\t * @param prompt Prompt to translate\n\t * @param locale Target locale\n\t * @param ...rest Parameters\n\t * @return Translation\n\t */\n\tpublic translate(prompt: Key, locale?: ILocale, ...rest: Array): string {\n\n\t\t// Get langauge\n\t\tif (!locale) {\n\t\t\tlocale = this._root.locale || this.getPrivate(\"defaultLocale\");\n\t\t}\n\n\t\t// Init translation\n\t\tlet translation: string = prompt;\n\t\tlet value = locale[prompt];\n\n\t\t// Try to look for the translation\n\t\tif (value === null) {\n\t\t\ttranslation = \"\";\n\t\t}\n\t\telse if (value != null) {\n\t\t\t// It might be an empty string\n\t\t\tif (value) {\n\t\t\t\ttranslation = value!;\n\t\t\t}\n\t\t}\n\t\telse if (locale !== this.getPrivate(\"defaultLocale\")) {\n\t\t\t// Try to look in default language\n\t\t\treturn this.translate(prompt, this.getPrivate(\"defaultLocale\"), ...rest);\n\t\t}\n\n\t\t// Replace %1, %2, etc params\n\t\tif (rest.length) {\n\t\t\tfor (let len = rest.length, i = 0; i < len; ++i) {\n\t\t\t\ttranslation = translation.split(\"%\" + (i + 1)).join(rest[i]);\n\t\t\t}\n\t\t}\n\n\t\t// Return the translation\n\t\treturn translation;\n\t}\n\n\t/**\n\t * Returns a prompt translation, including custom prompts.\n\t * \n\t * @param prompt Prompt to translate\n\t * @param locale Target locale\n\t * @param ...rest Parameters\n\t * @return Translation\n\t */\n\tpublic translateAny(prompt: string, locale?: ILocale, ...rest: Array): string {\n\t\treturn this.translate(prompt, locale, ...rest);\n\t}\n\n\t/**\n\t * Add a custom prompt to locale.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/creating-translations/#Extending_locale_with_custom_prompts}\n\t * @param prompt Source prompt\n\t * @param translation Tanslation\n\t * @param locale Target locale\n\t */\n\tpublic setTranslationAny(prompt: string, translation: string, locale?: ILocale): void {\n\t\tconst localeTarget = locale || this._root.locale;\n\t\t(localeTarget)[prompt] = translation;\n\t}\n\n\t/**\n\t * Add a batch of custom prompts.\n\t *\n\t * @since 5.3.3\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/creating-translations/#Extending_locale_with_custom_prompts}\n\t * @param translations Translations\n\t * @param locale Target locale\n\t */\n\tpublic setTranslationsAny(translations: { [index: string]: any }, locale?: ILocale): void {\n\t\t$object.each(translations, (key, val) => {\n\t\t\tthis.setTranslationAny(key as string, val, locale);\n\t\t});\n\t}\n\n\tpublic translateEmpty(prompt: Key, locale?: ILocale, ...rest: Array): string {\n\t\tlet translation = this.translate(prompt, locale, ...rest);\n\t\treturn translation == prompt ? \"\" : translation;\n\t}\n\n\tpublic translateFunc(prompt: Key, locale?: ILocale): ILocaleFunctions[Key] {\n\n\t\tif ((this._root.locale)[prompt]) {\n\t\t\treturn (this._root.locale)[prompt];\n\t\t}\n\n\t\t// Try to look in default language\n\t\tif (locale !== this.getPrivate(\"defaultLocale\")) {\n\t\t\treturn this.translateFunc(prompt, this.getPrivate(\"defaultLocale\"));\n\t\t}\n\n\t\t// Fail - return empty function\n\t\treturn (): string => {\n\t\t\treturn \"\";\n\t\t};\n\t}\n\n\t/**\n\t * Translates a btach of prompts.\n\t * \n\t * @param list Array of prompts to translate\n\t * @param locale Target locale\n\t * @return Array of translations\n\t */\n\tpublic translateAll(list: Array, locale?: ILocale): Array {\n\t\t// Translate all items in the list\n\t\tif (!this.isDefault()) {\n\t\t\treturn $array.map(list, (x) => this.translate(x, locale));\n\n\t\t} else {\n\t\t\treturn list;\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if the currently selected locale is a default locale.\n\t *\n\t * @return `true` if locale is default; `false` if it is not.\n\t */\n\tpublic isDefault(): boolean {\n\t\treturn this.getPrivate(\"defaultLocale\") === this._root.locale;\n\t}\n\n}\n","/**\n * Modified from Pixi:\n *\n * The MIT License\n *\n * Copyright (c) 2013-2017 Mathew Groves, Chad Engler\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport type { IPoint } from \"./IPoint\";\n\n/**\n * @ignore\n */\nexport class Matrix {\n\tpublic a: number;\n\tpublic b: number;\n\tpublic c: number;\n\tpublic d: number;\n\tpublic tx: number;\n\tpublic ty: number;\n\n\tconstructor(a = 1, b = 0, c = 0, d = 1, tx = 0, ty = 0) {\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\t\tthis.d = d;\n\t\tthis.tx = tx;\n\t\tthis.ty = ty;\n\t}\n\n\t/**\n\t * Sets the matrix based on all the available properties\n\t */\n\tsetTransform(x: number, y: number, pivotX: number, pivotY: number, rotation: number, scale: number = 1): void {\n\t\tthis.a = Math.cos(rotation) * scale;\n\t\tthis.b = Math.sin(rotation) * scale;\n\t\tthis.c = -Math.sin(rotation) * scale;\n\t\tthis.d = Math.cos(rotation) * scale;\n\t\tthis.tx = x - ((pivotX * this.a) + (pivotY * this.c));\n\t\tthis.ty = y - ((pivotX * this.b) + (pivotY * this.d));\n\t}\n\n\t/**\n\t * Get a new position with the current transformation applied.\n\t * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\n\t */\n\tapply(origin: IPoint): IPoint {\n\t\treturn {\n\t\t\tx: (this.a * origin.x) + (this.c * origin.y) + this.tx,\n\t\t\ty: (this.b * origin.x) + (this.d * origin.y) + this.ty\n\t\t};\n\t}\n\n\t/**\n\t * Get a new position with the inverse of the current transformation applied.\n\t * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\n\t */\n\tapplyInverse(origin: IPoint): IPoint {\n\t\tconst id = 1 / ((this.a * this.d) + (this.c * -this.b));\n\n\t\treturn {\n\t\t\tx: (this.d * id * origin.x) + (-this.c * id * origin.y) + (((this.ty * this.c) - (this.tx * this.d)) * id),\n\t\t\ty: (this.a * id * origin.y) + (-this.b * id * origin.x) + (((-this.ty * this.a) + (this.tx * this.b)) * id)\n\t\t};\n\t}\n\n\t/**\n\t * Appends the given Matrix to this Matrix.\n\t */\n\tappend(matrix: Matrix): void {\n\t\tconst a1 = this.a;\n\t\tconst b1 = this.b;\n\t\tconst c1 = this.c;\n\t\tconst d1 = this.d;\n\t\tthis.a = (matrix.a * a1) + (matrix.b * c1);\n\t\tthis.b = (matrix.a * b1) + (matrix.b * d1);\n\t\tthis.c = (matrix.c * a1) + (matrix.d * c1);\n\t\tthis.d = (matrix.c * b1) + (matrix.d * d1);\n\t\tthis.tx = (matrix.tx * a1) + (matrix.ty * c1) + this.tx;\n\t\tthis.ty = (matrix.tx * b1) + (matrix.ty * d1) + this.ty;\n\t}\n\n\t/**\n\t * Prepends the given Matrix to this Matrix.\n\t */\n\tprepend(matrix: Matrix): void {\n\t\tconst tx1 = this.tx;\n\t\tif (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\n\t\t\tconst a1 = this.a;\n\t\t\tconst c1 = this.c;\n\t\t\tthis.a = (a1 * matrix.a) + (this.b * matrix.c);\n\t\t\tthis.b = (a1 * matrix.b) + (this.b * matrix.d);\n\t\t\tthis.c = (c1 * matrix.a) + (this.d * matrix.c);\n\t\t\tthis.d = (c1 * matrix.b) + (this.d * matrix.d);\n\t\t}\n\t\tthis.tx = (tx1 * matrix.a) + (this.ty * matrix.c) + matrix.tx;\n\t\tthis.ty = (tx1 * matrix.b) + (this.ty * matrix.d) + matrix.ty;\n\t}\n\n\t/**\n\t * Copies the other matrix's properties into this matrix\n\t */\n\tcopyFrom(matrix: Matrix): void {\n\t\tthis.a = matrix.a;\n\t\tthis.b = matrix.b;\n\t\tthis.c = matrix.c;\n\t\tthis.d = matrix.d;\n\t\tthis.tx = matrix.tx;\n\t\tthis.ty = matrix.ty;\n\t}\n}\n\n","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar TAU = Math.PI * 2;\n\nvar mapToEllipse = function mapToEllipse(_ref, rx, ry, cosphi, sinphi, centerx, centery) {\n var x = _ref.x,\n y = _ref.y;\n\n x *= rx;\n y *= ry;\n\n var xp = cosphi * x - sinphi * y;\n var yp = sinphi * x + cosphi * y;\n\n return {\n x: xp + centerx,\n y: yp + centery\n };\n};\n\nvar approxUnitArc = function approxUnitArc(ang1, ang2) {\n // If 90 degree circular arc, use a constant\n // as derived from http://spencermortensen.com/articles/bezier-circle\n var a = ang2 === 1.5707963267948966 ? 0.551915024494 : ang2 === -1.5707963267948966 ? -0.551915024494 : 4 / 3 * Math.tan(ang2 / 4);\n\n var x1 = Math.cos(ang1);\n var y1 = Math.sin(ang1);\n var x2 = Math.cos(ang1 + ang2);\n var y2 = Math.sin(ang1 + ang2);\n\n return [{\n x: x1 - y1 * a,\n y: y1 + x1 * a\n }, {\n x: x2 + y2 * a,\n y: y2 - x2 * a\n }, {\n x: x2,\n y: y2\n }];\n};\n\nvar vectorAngle = function vectorAngle(ux, uy, vx, vy) {\n var sign = ux * vy - uy * vx < 0 ? -1 : 1;\n\n var dot = ux * vx + uy * vy;\n\n if (dot > 1) {\n dot = 1;\n }\n\n if (dot < -1) {\n dot = -1;\n }\n\n return sign * Math.acos(dot);\n};\n\nvar getArcCenter = function getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp) {\n var rxsq = Math.pow(rx, 2);\n var rysq = Math.pow(ry, 2);\n var pxpsq = Math.pow(pxp, 2);\n var pypsq = Math.pow(pyp, 2);\n\n var radicant = rxsq * rysq - rxsq * pypsq - rysq * pxpsq;\n\n if (radicant < 0) {\n radicant = 0;\n }\n\n radicant /= rxsq * pypsq + rysq * pxpsq;\n radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n\n var centerxp = radicant * rx / ry * pyp;\n var centeryp = radicant * -ry / rx * pxp;\n\n var centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n var centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n\n var vx1 = (pxp - centerxp) / rx;\n var vy1 = (pyp - centeryp) / ry;\n var vx2 = (-pxp - centerxp) / rx;\n var vy2 = (-pyp - centeryp) / ry;\n\n var ang1 = vectorAngle(1, 0, vx1, vy1);\n var ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n\n if (sweepFlag === 0 && ang2 > 0) {\n ang2 -= TAU;\n }\n\n if (sweepFlag === 1 && ang2 < 0) {\n ang2 += TAU;\n }\n\n return [centerx, centery, ang1, ang2];\n};\n\nvar arcToBezier = function arcToBezier(_ref2) {\n var px = _ref2.px,\n py = _ref2.py,\n cx = _ref2.cx,\n cy = _ref2.cy,\n rx = _ref2.rx,\n ry = _ref2.ry,\n _ref2$xAxisRotation = _ref2.xAxisRotation,\n xAxisRotation = _ref2$xAxisRotation === undefined ? 0 : _ref2$xAxisRotation,\n _ref2$largeArcFlag = _ref2.largeArcFlag,\n largeArcFlag = _ref2$largeArcFlag === undefined ? 0 : _ref2$largeArcFlag,\n _ref2$sweepFlag = _ref2.sweepFlag,\n sweepFlag = _ref2$sweepFlag === undefined ? 0 : _ref2$sweepFlag;\n\n var curves = [];\n\n if (rx === 0 || ry === 0) {\n return [];\n }\n\n var sinphi = Math.sin(xAxisRotation * TAU / 360);\n var cosphi = Math.cos(xAxisRotation * TAU / 360);\n\n var pxp = cosphi * (px - cx) / 2 + sinphi * (py - cy) / 2;\n var pyp = -sinphi * (px - cx) / 2 + cosphi * (py - cy) / 2;\n\n if (pxp === 0 && pyp === 0) {\n return [];\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n var _getArcCenter = getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp),\n _getArcCenter2 = _slicedToArray(_getArcCenter, 4),\n centerx = _getArcCenter2[0],\n centery = _getArcCenter2[1],\n ang1 = _getArcCenter2[2],\n ang2 = _getArcCenter2[3];\n\n // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n // 1.0000000001. This causes `segments` to be greater than one, which is an\n // unecessary split, and adds extra points to the bezier curve. To alleviate\n // this issue, we round to 1.0 when the ratio is close to 1.0.\n\n\n var ratio = Math.abs(ang2) / (TAU / 4);\n if (Math.abs(1.0 - ratio) < 0.0000001) {\n ratio = 1.0;\n }\n\n var segments = Math.max(Math.ceil(ratio), 1);\n\n ang2 /= segments;\n\n for (var i = 0; i < segments; i++) {\n curves.push(approxUnitArc(ang1, ang2));\n ang1 += ang2;\n }\n\n return curves.map(function (curve) {\n var _mapToEllipse = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery),\n x1 = _mapToEllipse.x,\n y1 = _mapToEllipse.y;\n\n var _mapToEllipse2 = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery),\n x2 = _mapToEllipse2.x,\n y2 = _mapToEllipse2.y;\n\n var _mapToEllipse3 = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery),\n x = _mapToEllipse3.x,\n y = _mapToEllipse3.y;\n\n return { x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y };\n });\n};\n\nexport default arcToBezier;","/** @ignore *//** */\n\nimport {\n\tIRenderer, IContainer, IDisplayObject, IGraphics, IRendererEvents, IMargin,\n\tIText, ITextStyle, IRadialText, IPicture, IRendererEvent, ILayer, ICanvasOptions, BlendMode, IPointerEvent, Id\n} from \"./Renderer\";\nimport type { IBounds } from \"../../util/IBounds\";\nimport type { IPoint } from \"../../util/IPoint\";\nimport { Color } from \"../../util/Color\";\nimport { Matrix } from \"../../util/Matrix\";\nimport { Percent, percent } from \"../../util/Percent\";\n//import { Throttler } from \"../../util/Throttler\";\nimport { ArrayDisposer, Disposer, DisposerClass, IDisposer, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\nimport { TextFormatter, ITextChunk } from \"../../util/TextFormatter\";\nimport * as $utils from \"../../util/Utils\";\nimport * as $array from \"../../util/Array\";\nimport * as $object from \"../../util/Object\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\n\n\n/**\n * @ignore\n */\nfunction checkArgs(name: string, actual: number, expected: number) {\n\tif (actual !== expected) {\n\t\tthrow new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkMinArgs(name: string, actual: number, expected: number) {\n\tif (actual < expected) {\n\t\tthrow new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\n\t}\n}\n\n/**\n * @ignore\n */\nfunction checkEvenArgs(name: string, actual: number, expected: number) {\n\tcheckMinArgs(name, actual, expected);\n\n\tif ((actual % expected) !== 0) {\n\t\tthrow new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\n\t}\n}\n\n/**\n * @ignore\n * This splits the flag so that way 0017 will be processed as 0 0 17\n *\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\n */\nfunction splitArcFlags(args: Array) {\n\tfor (let i = 0; i < args.length; i += 7) {\n\t\tlet index = i + 3;\n\t\tlet flag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])([01])(.*)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs.splice(index, 0, a[2]);\n\t\t\t\t++index;\n\n\t\t\t\tif (a[3].length > 0) {\n\t\t\t\t\targs[index] = a[3];\n\n\t\t\t\t} else {\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++index;\n\n\t\tflag = args[index];\n\n\t\tif (flag.length > 1) {\n\t\t\tconst a = /^([01])(.+)$/.exec(flag);\n\n\t\t\tif (a !== null) {\n\t\t\t\targs.splice(index, 0, a[1]);\n\t\t\t\t++index;\n\n\t\t\t\targs[index] = a[2];\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction assertBinary(value: number): 0 | 1 {\n\tif (value === 0 || value === 1) {\n\t\treturn value;\n\n\t} else {\n\t\tthrow new Error(\"Flag must be 0 or 1\");\n\t}\n}\n\n// 1 -> 0xffffff * (2 / 2)\n// 2 -> 0xffffff * (1 / 2)\n//\n// 3 -> 0xffffff * (3 / 4)\n// 4 -> 0xffffff * (1 / 4)\n//\n// 5 -> 0xffffff * (7 / 8)\n// 6 -> 0xffffff * (5 / 8)\n// 7 -> 0xffffff * (3 / 8)\n// 8 -> 0xffffff * (1 / 8)\n//\n// 9 -> 0xffffff * (15 / 16)\n// 10 -> 0xffffff * (13 / 16)\n// 11 -> 0xffffff * (11 / 16)\n// 12 -> 0xffffff * (9 / 16)\n// 13 -> 0xffffff * (7 / 16)\n// 14 -> 0xffffff * (5 / 16)\n// 15 -> 0xffffff * (3 / 16)\n// 16 -> 0xffffff * (1 / 16)\n// @todo remove this old color distribution algo if the new one pans out\n/*function distributeId(id: number): number {\n\tif (id === 1) {\n\t\treturn 0x000001;\n\n\t} else {\n\t\t// Finds the closest power of 2\n\t\tconst base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\n\n\t\t// Translates the id into an odd fraction index\n\t\tconst index = ((base - id) * 2) + 1;\n\n\t\t// TODO is Math.round correct ?\n\t\treturn Math.round(0xffffff * (index / base));\n\t}\n}*/\n\n/**\n * Function by smeans:\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\n * @ignore\n */\nfunction distributeId(id: number): number {\n\tconst rgb = [0, 0, 0];\n\n\tfor (let i = 0; i < 24; i++) {\n\t\trgb[i % 3] <<= 1;\n\t\trgb[i % 3] |= id & 0x01;\n\t\tid >>= 1;\n\t}\n\n\treturn (rgb[0] | 0) + (rgb[1] << 8) + (rgb[2] << 16);\n}\n\n/**\n * @ignore\n */\nfunction eachTargets(hitTarget: CanvasDisplayObject, f: (target: CanvasDisplayObject) => boolean): void {\n\tfor (; ;) {\n\t\tif (hitTarget.interactive) {\n\t\t\tif (!f(hitTarget)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (hitTarget._parent) {\n\t\t\thitTarget = hitTarget._parent;\n\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// TODO feature detection for mouse/touch/pointer\n/**\n * @ignore\n */\nfunction onPointerEvent(element: EventTarget, name: string, f: (event: Array, target: Node | null) => void): IDisposer {\n\treturn $utils.addEventListener(element, $utils.getRendererEvent(name), (event: MouseEvent | TouchEvent) => {\n\t\tconst target = $utils.getEventTarget(event);\n\n\t\tlet touches = (event).touches;\n\t\tif (touches) {\n\t\t\tif (touches.length == 0) {\n\t\t\t\ttouches = (event).changedTouches;\n\t\t\t}\n\n\t\t\tf($array.copy(touches), target);\n\n\t\t} else {\n\t\t\tf([event], target);\n\t\t}\n\t});\n}\n\n/**\n * @ignore\n */\nfunction isTainted(image: HTMLImageElement): boolean {\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = 1;\n\tcanvas.height = 1;\n\tconst context = canvas.getContext(\"2d\", { willReadFrequently: true })! as CanvasRenderingContext2D;\n\tcontext.drawImage(image, 0, 0, 1, 1);\n\n\ttry {\n\t\tcontext.getImageData(0, 0, 1, 1);\n\t\treturn false;\n\t}\n\tcatch (err) {\n\t\tconsole.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\n\t\treturn true;\n\t}\n}\n\n/**\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\n *\n * @ignore\n */\nfunction clearCanvas(view: HTMLCanvasElement) {\n\tview.width = 0;\n\tview.height = 0;\n\tview.style.width = \"0px\";\n\tview.style.height = \"0px\";\n}\n\n\n/**\n * Aligns the coordinate to the pixel, so it renders crisp\n *\n * @ignore\n */\nfunction crisp(x: number): number {\n\treturn Math.floor(x) + .5;\n}\n\n/**\n * @ignore\n */\nexport class CanvasPivot implements IPoint {\n\tprotected _x: number = 0;\n\tprotected _y: number = 0;\n\n\tget x(): number {\n\t\treturn this._x;\n\t}\n\n\tget y(): number {\n\t\treturn this._y;\n\t}\n\n\tset x(value: number) {\n\t\tthis._x = value;\n\t}\n\n\tset y(value: number) {\n\t\tthis._y = value;\n\t}\n}\n\n\ninterface IStatus {\n\tlayer: CanvasLayer;\n\tinactive: boolean | null;\n}\n\n/**\n * @ignore\n */\nexport class CanvasDisplayObject extends DisposerClass implements IDisplayObject, IDisposer {\n\tpublic _layer?: CanvasLayer;\n\n\tpublic mask: CanvasGraphics | null = null;\n\tpublic visible: boolean = true;\n\tpublic exportable?: boolean = true;\n\tpublic interactive: boolean = false;\n\tpublic inactive: boolean | null = null;\n\tpublic wheelable: boolean = false;\n\tpublic cancelTouch: boolean = false;\n\tpublic isMeasured: boolean = false;\n\tpublic buttonMode: boolean = false;\n\tpublic alpha: number = 1;\n\tpublic compoundAlpha: number = 1;\n\tpublic angle: number = 0;\n\tpublic scale: number = 1;\n\tpublic x: number = 0;\n\tpublic y: number = 0;\n\tpublic crisp: boolean = false;\n\tpublic pivot: CanvasPivot = new CanvasPivot();\n\n\tpublic filter?: string;\n\n\tpublic cursorOverStyle?: string;\n\tpublic _replacedCursorStyle?: string;\n\n\tpublic _localMatrix: Matrix = new Matrix();\n\tpublic _matrix: Matrix = new Matrix();\n\t// TODO can this be replaced with _localMatrix ?\n\tprotected _uMatrix: Matrix = new Matrix();\n\n\tpublic _renderer: CanvasRenderer;\n\tpublic _parent: CanvasContainer | undefined;\n\n\tprotected _localBounds: IBounds | undefined;\n\tprotected _bounds: IBounds | undefined;\n\tpublic _colorId: string | undefined;\n\n\tconstructor(renderer: CanvasRenderer) {\n\t\tsuper();\n\t\tthis._renderer = renderer;\n\t}\n\n\tprotected subStatus(status: IStatus): IStatus {\n\t\treturn {\n\t\t\tinactive: (this.inactive == null ? status.inactive : this.inactive),\n\t\t\tlayer: this._layer || status.layer,\n\t\t};\n\t}\n\n\tprotected _dispose(): void {\n\t\tthis._renderer._removeObject(this);\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic getCanvas(): HTMLCanvasElement {\n\t\treturn this.getLayer().view;\n\t}\n\n\tpublic getLayer(): CanvasLayer {\n\t\tlet self: CanvasDisplayObject = this;\n\n\t\tfor (; ;) {\n\t\t\tif (self._layer) {\n\t\t\t\treturn self._layer;\n\n\t\t\t} else if (self._parent) {\n\t\t\t\tself = self._parent;\n\n\t\t\t} else {\n\t\t\t\treturn this._renderer.defaultLayer;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic setLayer(order: number | undefined, margin: IMargin | undefined): void {\n\t\tif (order == null) {\n\t\t\tthis._layer = undefined;\n\n\t\t} else {\n\t\t\tconst visible = true;\n\t\t\tthis._layer = this._renderer.getLayer(order, visible);\n\t\t\tthis._layer.visible = visible;\n\t\t\tthis._layer.margin = margin;\n\t\t\tif (margin) {\n\t\t\t\t$utils.setInteractive(this._layer.view, false);\n\t\t\t}\n\n\t\t\tthis._renderer._ghostLayer.setMargin(this._renderer.layers);\n\n\t\t\tif (this._parent) {\n\t\t\t\tthis._parent.registerChildLayer(this._layer);\n\t\t\t}\n\n\t\t\tthis._layer.dirty = true;\n\t\t\tthis._renderer.resizeLayer(this._layer);\n\t\t\tthis._renderer.resizeGhost();\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(): void {\n\t\tthis.getLayer().dirty = true;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.invalidateBounds();\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tthis._localBounds = undefined;\n\t}\n\n\tpublic _addBounds(_bounds: IBounds): void { }\n\n\tprotected _getColorId(): string {\n\t\tif (this._colorId === undefined) {\n\t\t\tthis._colorId = this._renderer.paintId(this);\n\t\t}\n\n\t\treturn this._colorId;\n\t}\n\n\tprotected _isInteractive(status: IStatus): boolean {\n\t\treturn !status.inactive && (this.interactive || this._renderer._forceInteractive > 0);\n\t}\n\n\tprotected _isInteractiveMask(status: IStatus): boolean {\n\t\treturn this._isInteractive(status);\n\t}\n\n\tpublic contains(child: CanvasDisplayObject): boolean {\n\t\tfor (; ;) {\n\t\t\tif (child === this) {\n\t\t\t\treturn true;\n\n\t\t\t} else if (child._parent) {\n\t\t\t\tchild = child._parent;\n\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\ttoGlobal(point: IPoint): IPoint {\n\t\treturn this._matrix.apply(point);\n\t}\n\n\ttoLocal(point: IPoint): IPoint {\n\t\treturn this._matrix.applyInverse(point);\n\t}\n\n\tpublic getLocalMatrix(): Matrix {\n\t\tthis._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\n\t\treturn this._uMatrix;\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\t\t\tconst bn = 10000000;\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: bn,\n\t\t\t\ttop: bn,\n\t\t\t\tright: -bn,\n\t\t\t\tbottom: -bn\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tgetAdjustedBounds(bounds: IBounds): IBounds {\n\t\tthis._setMatrix();\n\n\t\tconst matrix = this.getLocalMatrix();\n\n\t\tconst p0 = matrix.apply({ x: bounds.left, y: bounds.top });\n\t\tconst p1 = matrix.apply({ x: bounds.right, y: bounds.top });\n\t\tconst p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\n\t\tconst p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\n\n\t\treturn {\n\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t}\n\t}\n\n\ton(key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tif (this.interactive) {\n\t\t\treturn this._renderer._addEvent(this, key, callback, context);\n\n\t\t} else {\n\t\t\treturn new Disposer(() => { });\n\t\t}\n\t}\n\n\tpublic _setMatrix(): void {\n\t\t// TODO only calculate this if it has actually changed\n\t\tthis._localMatrix.setTransform(\n\t\t\tthis.x,\n\t\t\tthis.y,\n\t\t\tthis.pivot.x,\n\t\t\tthis.pivot.y,\n\t\t\t// Converts degrees to radians\n\t\t\tthis.angle * Math.PI / 180,\n\t\t\tthis.scale\n\t\t);\n\n\t\tthis._matrix.copyFrom(this._localMatrix);\n\n\t\tif (this._parent) {\n\t\t\t// TODO only calculate this if it has actually changed\n\t\t\tthis._matrix.prepend(this._parent._matrix);\n\t\t}\n\t}\n\n\tpublic _transform(context: CanvasRenderingContext2D, resolution: number): void {\n\t\tconst m = this._matrix;\n\t\tlet tx = m.tx * resolution;\n\t\tlet ty = m.ty * resolution;\n\t\tif (this.crisp) {\n\t\t\ttx = crisp(tx);\n\t\t\tty = crisp(ty);\n\t\t}\n\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\ttx,\n\t\t\tty)\n\n\t}\n\n\tpublic _transformMargin(context: CanvasRenderingContext2D, resolution: number, margin: IMargin): void {\n\t\tconst m = this._matrix;\n\t\tcontext.setTransform(\n\t\t\tm.a * resolution,\n\t\t\tm.b * resolution,\n\t\t\tm.c * resolution,\n\t\t\tm.d * resolution,\n\t\t\t(m.tx + margin.left) * resolution,\n\t\t\t(m.ty + margin.top) * resolution\n\t\t);\n\t}\n\n\tpublic _transformLayer(context: CanvasRenderingContext2D, resolution: number, layer: CanvasLayer): void {\n\t\tif (layer.margin) {\n\t\t\tthis._transformMargin(context, layer.scale || resolution, layer.margin);\n\n\t\t} else {\n\t\t\tthis._transform(context, layer.scale || resolution);\n\t\t}\n\t}\n\n\tpublic render(status: IStatus): void {\n\t\tif (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\n\t\t\tthis._setMatrix();\n\n\t\t\tconst subStatus = this.subStatus(status);\n\n\t\t\tconst resolution = this._renderer.resolution;\n\n\t\t\tconst layers = this._renderer.layers;\n\t\t\tconst ghostLayer = this._renderer._ghostLayer;\n\t\t\tconst ghostContext = ghostLayer.context;\n\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t}\n\n\t\t\t// TODO improve this\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tconst context = layer.context;\n\t\t\t\t\tcontext.save();\n\n\t\t\t\t\t// We must apply the mask before we transform the element\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tmask._transformLayer(context, resolution, layer);\n\t\t\t\t\t\tmask._runPath(context);\n\t\t\t\t\t\tcontext.clip();\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\t\t\tthis._transformLayer(context, resolution, layer);\n\n\t\t\t\t\tif (this.filter) {\n\t\t\t\t\t\tcontext.filter = this.filter;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tghostContext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tif (mask && this._isInteractiveMask(subStatus)) {\n\t\t\t\tmask._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\t\t\t\tmask._runPath(ghostContext);\n\t\t\t\tghostContext.clip();\n\t\t\t}\n\n\t\t\tthis._transformMargin(ghostContext, resolution, ghostLayer.margin);\n\n\t\t\tthis._render(subStatus);\n\n\t\t\tghostContext.restore();\n\n\t\t\t$array.each(layers, (layer) => {\n\t\t\t\tif (layer) {\n\t\t\t\t\tlayer.context.restore();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _render(status: IStatus): void {\n\t\tif (this.exportable === false) {\n\t\t\tstatus.layer.tainted = true;\n\t\t}\n\t}\n\n\thovering(): boolean {\n\t\treturn this._renderer._hovering.has(this);\n\t}\n\n\tdragging(): boolean {\n\t\treturn this._renderer._dragging.some((x) => x.value === this);\n\t}\n\n\n\tpublic shouldCancelTouch(): boolean {\n\t\tconst renderer = this._renderer;\n\t\tif (renderer.tapToActivate && !renderer._touchActive) {\n\t\t\treturn false;\n\t\t}\n\t\tif (this.cancelTouch) {\n\t\t\treturn true;\n\t\t}\n\t\telse if (this._parent) {\n\t\t\treturn this._parent.shouldCancelTouch();\n\t\t}\n\t\treturn false;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasContainer extends CanvasDisplayObject implements IContainer {\n\tpublic interactiveChildren: boolean = true;\n\tprivate _childLayers?: CanvasLayer[];\n\n\tprotected _children: Array = [];\n\n\tprotected _isInteractiveMask(status: IStatus): boolean {\n\t\treturn this.interactiveChildren || super._isInteractiveMask(status);\n\t}\n\n\taddChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = this;\n\t\tthis._children.push(child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\taddChildAt(child: CanvasDisplayObject, index: number): void {\n\t\tchild._parent = this;\n\t\tthis._children.splice(index, 0, child);\n\t\tif (child._layer) {\n\t\t\tthis.registerChildLayer(child._layer);\n\t\t}\n\t}\n\n\tremoveChild(child: CanvasDisplayObject): void {\n\t\tchild._parent = undefined;\n\t\t$array.removeFirst(this._children, child);\n\t}\n\n\tprotected _render(status: IStatus): void {\n\t\tsuper._render(status);\n\n\t\tconst renderer = this._renderer;\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t++renderer._forceInteractive;\n\t\t}\n\n\t\t$array.each(this._children, (child) => {\n\t\t\tchild.compoundAlpha = this.compoundAlpha * this.alpha;\n\t\t\tchild.render(status);\n\t\t});\n\n\t\tif (this.interactive && this.interactiveChildren) {\n\t\t\t--renderer._forceInteractive;\n\t\t}\n\t}\n\n\tregisterChildLayer(layer: CanvasLayer): void {\n\t\tif (!this._childLayers) {\n\t\t\tthis._childLayers = [];\n\t\t}\n\t\t$array.pushOne(this._childLayers, layer);\n\t\tif (this._parent) {\n\t\t\tthis._parent.registerChildLayer(layer);\n\t\t}\n\t}\n\n\tpublic markDirtyLayer(deep: boolean = false): void {\n\t\tsuper.markDirtyLayer();\n\t\tif (deep && this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => layer.dirty = true);\n\t\t}\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\t\tif (this._childLayers) {\n\t\t\t$array.each(this._childLayers, (layer) => {\n\t\t\t\tlayer.dirty = true;\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nfunction setPoint(bounds: IBounds, point: IPoint): void {\n\tbounds.left = Math.min(bounds.left, point.x);\n\tbounds.top = Math.min(bounds.top, point.y);\n\tbounds.right = Math.max(bounds.right, point.x);\n\tbounds.bottom = Math.max(bounds.bottom, point.y);\n}\n\n/**\n * @ignore\n */\nabstract class Op {\n\tpublic colorize(_context: CanvasRenderingContext2D, _forceColor: string | undefined): void { }\n\n\tpublic path(_context: CanvasRenderingContext2D): void { }\n\n\tpublic addBounds(_bounds: IBounds): void { }\n}\n\n/**\n * @ignore\n */\nclass BeginPath extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.beginPath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BeginFill extends Op {\n\tconstructor(public color: string | CanvasGradient | CanvasPattern) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.fillStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndFill extends Op {\n\tconstructor(public clearShadow: boolean) { super(); }\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.fill();\n\t\tif (this.clearShadow) {\n\t\t\tcontext.shadowColor = \"\";\n\t\t\tcontext.shadowBlur = 0;\n\t\t\tcontext.shadowOffsetX = 0;\n\t\t\tcontext.shadowOffsetY = 0;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass EndStroke extends Op {\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.stroke();\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineStyle extends Op {\n\tconstructor(public width: number, public color: string | CanvasGradient | CanvasPattern, public lineJoin?: \"miter\" | \"round\" | \"bevel\") { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, forceColor: string | undefined): void {\n\t\tif (forceColor !== undefined) {\n\t\t\tcontext.strokeStyle = forceColor;\n\n\t\t} else {\n\t\t\tcontext.strokeStyle = this.color;\n\t\t}\n\n\t\tcontext.lineWidth = this.width;\n\t\tif (this.lineJoin) {\n\t\t\tcontext.lineJoin = this.lineJoin;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDash extends Op {\n\tconstructor(public dash: number[]) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.setLineDash(this.dash);\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineDashOffset extends Op {\n\tconstructor(public dashOffset: number) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tcontext.lineDashOffset = this.dashOffset;\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawRect extends Op {\n\tconstructor(public x: number, public y: number, public width: number, public height: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.rect(this.x, this.y, this.width, this.height);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tconst l = this.x;\n\t\tconst t = this.y;\n\t\tconst r = l + this.width;\n\t\tconst b = t + this.height;\n\n\t\tsetPoint(bounds, { x: l, y: t });\n\t\tsetPoint(bounds, { x: r, y: t });\n\t\tsetPoint(bounds, { x: l, y: b });\n\t\tsetPoint(bounds, { x: r, y: b });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawCircle extends Op {\n\tconstructor(public x: number, public y: number, public radius: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x + this.radius, this.y);\n\t\tcontext.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\n\t\tsetPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\n\t}\n}\n\n/**\n * @ignore\n */\nclass DrawEllipse extends Op {\n\tconstructor(public x: number, public y: number, public radiusX: number, public radiusY: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\n\t}\n\n\t// TODO handle skewing and rotation\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\n\t\tsetPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Arc extends Op {\n\tconstructor(\n\t\tpublic cx: number,\n\t\tpublic cy: number,\n\t\tpublic radius: number,\n\t\tpublic startAngle: number,\n\t\tpublic endAngle: number,\n\t\tpublic anticlockwise: boolean,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\n\t\t}\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tlet arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\n\t\tsetPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\n\t\tsetPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ArcTo extends Op {\n\tconstructor(\n\t\tpublic x1: number,\n\t\tpublic y1: number,\n\t\tpublic x2: number,\n\t\tpublic y2: number,\n\t\tpublic radius: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tif (this.radius > 0) {\n\t\t\tcontext.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\n\t\t}\n\t}\n\n\t// TODO: add points\n\tpublic addBounds(_bounds: IBounds): void {\n\t\t/*\n\t\t// not finished\n\t\thttps://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\n\n\t\tif (prevPoint) {\n\t\t\tlet x1 = prevPoint.x;\n\t\t\tlet y1 = prevPoint.y;\n\t\t\tlet x2 = this.x2;\n\t\t\tlet y2 = this.y2;\n\t\t\tlet r = this.radius;\n\n\t\t\tlet xa = (x2 - x1) / 2;\n\t\t\tlet ya = (y2 - y1) / 2;\n\n\t\t\tlet x0 = x1 + xa;\n\t\t\tlet y0 = y1 + ya;\n\n\t\t\tlet a = Math.hypot(xa, ya);\n\t\t\tlet b = Math.sqrt(r * r - a * a);\n\n\t\t\tlet cx = x0 + b * ya / a;\n\t\t\tlet cy = y0 - b * xa / a;\n\n\t\t\tconsole.log(cx, cy);\n\t\t}*/\n\t}\n}\n\n/**\n * @ignore\n */\nclass LineTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.lineTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass MoveTo extends Op {\n\tconstructor(public x: number, public y: number) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.moveTo(this.x, this.y);\n\t}\n\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t}\n}\n\n/**\n * @ignore\n */\nclass ClosePath extends Op {\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.closePath();\n\t}\n}\n\n/**\n * @ignore\n */\nclass BezierCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic cpX2: number,\n\t\tpublic cpY2: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.cpX2, y: this.cpY2 });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass QuadraticCurveTo extends Op {\n\tconstructor(\n\t\tpublic cpX: number,\n\t\tpublic cpY: number,\n\t\tpublic toX: number,\n\t\tpublic toY: number,\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.cpX, y: this.cpY });\n\t\tsetPoint(bounds, { x: this.toX, y: this.toY });\n\t}\n}\n\n/**\n * @ignore\n */\nclass Shadow extends Op {\n\tconstructor(\n\t\tpublic color: string,\n\t\tpublic blur: number,\n\t\tpublic offsetX: number,\n\t\tpublic offsetY: number,\n\t\tpublic opacity?: number\n\t) { super(); }\n\n\tpublic colorize(context: CanvasRenderingContext2D, _forceColor: string | undefined): void {\n\t\tif (this.opacity) {\n\t\t\tcontext.fillStyle = this.color;\n\t\t}\n\t\tcontext.shadowColor = this.color;\n\t\tcontext.shadowBlur = this.blur;\n\t\tcontext.shadowOffsetX = this.offsetX;\n\t\tcontext.shadowOffsetY = this.offsetY;\n\t}\n}\n\n/**\n * @ignore\n */\nclass GraphicsImage extends Op {\n\tconstructor(\n\t\tpublic image: HTMLImageElement | HTMLCanvasElement,\n\t\tpublic width: number,\n\t\tpublic height: number,\n\t\tpublic x: number,\n\t\tpublic y: number\n\t) { super(); }\n\n\tpublic path(context: CanvasRenderingContext2D): void {\n\t\tcontext.drawImage(this.image, this.x, this.y, this.width, this.height);\n\t}\n\n\t// TODO: OK?\n\tpublic addBounds(bounds: IBounds): void {\n\t\tsetPoint(bounds, { x: this.x, y: this.y });\n\t\tsetPoint(bounds, { x: this.width, y: this.height });\n\t}\n}\n\n/**\n * @ignore\n */\nexport class CanvasGraphics extends CanvasDisplayObject implements IGraphics {\n\tprotected _operations: Array = [];\n\n\tpublic blendMode: BlendMode = BlendMode.NORMAL;\n\n\tprotected _hasShadows: boolean = false;\n\tprotected _fillAlpha?: number;\n\tprotected _strokeAlpha?: number;\n\n\tclear(): void {\n\t\tsuper.clear();\n\t\tthis._operations.length = 0;\n\t}\n\n\tprotected _pushOp(op: Op): void {\n\t\tthis._operations.push(op);\n\t}\n\n\tbeginFill(color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1): void {\n\t\tthis._fillAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new BeginFill(color.toCSS(alpha)));\n\n\t\t\t} else {\n\t\t\t\tthis.isMeasured = true;\n\t\t\t\tthis._pushOp(new BeginFill(color));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\n\t\t}\n\t}\n\n\tendFill(): void {\n\t\tthis._pushOp(new EndFill(this._hasShadows));\n\t}\n\n\tendStroke(): void {\n\t\tthis._pushOp(new EndStroke());\n\t}\n\n\tbeginPath(): void {\n\t\tthis._pushOp(new BeginPath());\n\t}\n\n\tlineStyle(width: number = 0, color?: Color | CanvasGradient | CanvasPattern, alpha: number = 1, lineJoin?: \"miter\" | \"round\" | \"bevel\"): void {\n\t\tthis._strokeAlpha = alpha;\n\t\tif (color) {\n\t\t\tif (color instanceof Color) {\n\t\t\t\tthis._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\n\t\t\t} else {\n\t\t\t\tthis._pushOp(new LineStyle(width, color, lineJoin));\n\t\t\t}\n\t\t} else {\n\t\t\tthis._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\n\t\t}\n\t}\n\n\tsetLineDash(dash?: number[]): void {\n\t\tthis._pushOp(new LineDash(dash ? dash : []));\n\t}\n\n\tsetLineDashOffset(dashOffset: number = 0): void {\n\t\tthis._pushOp(new LineDashOffset(dashOffset));\n\t}\n\n\tdrawRect(x: number, y: number, width: number, height: number): void {\n\t\tthis._pushOp(new DrawRect(x, y, width, height));\n\t}\n\n\tdrawCircle(x: number, y: number, radius: number): void {\n\t\tthis._pushOp(new DrawCircle(x, y, radius));\n\t}\n\n\tdrawEllipse(x: number, y: number, radiusX: number, radiusY: number): void {\n\t\tthis._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\n\t}\n\n\tarc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise: boolean = false): void {\n\t\tthis._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\n\t}\n\n\tarcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n\t\tthis._pushOp(new ArcTo(x1, y1, x2, y2, radius));\n\t}\n\n\tlineTo(x: number, y: number): void {\n\t\tthis._pushOp(new LineTo(x, y));\n\t}\n\n\tmoveTo(x: number, y: number): void {\n\t\tthis._pushOp(new MoveTo(x, y));\n\t}\n\n\tbezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\n\t}\n\n\tquadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): void {\n\t\tthis._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\n\t}\n\n\tclosePath(): void {\n\t\tthis._pushOp(new ClosePath());\n\t}\n\n\tshadow(color: Color, blur: number = 0, offsetX: number = 0, offsetY: number = 0, opacity?: number): void {\n\t\tthis._hasShadows = true;\n\t\tthis._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\n\t}\n\n\timage(image: HTMLImageElement | HTMLCanvasElement, width: number, height: number, x: number, y: number): void {\n\t\tthis._pushOp(new GraphicsImage(image, width, height, x, y));\n\t}\n\n\t// https://svgwg.org/svg2-draft/paths.html#DProperty\n\t// TODO better error checking\n\tsvgPath(path: string): void {\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tlet cpx: number | null = null;\n\t\tlet cpy: number | null = null;\n\t\tlet qcpx: number | null = null;\n\t\tlet qcpy: number | null = null;\n\n\t\tconst SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\n\t\tconst ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\n\n\t\tlet match;\n\n\t\twhile ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\n\t\t\tconst name = match[1];\n\t\t\tconst rest = match[2];\n\n\t\t\tconst args: Array = [];\n\n\t\t\twhile ((match = ARGS_REGEXP.exec(rest)) !== null) {\n\t\t\t\targs.push(match[1]);\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\n\t\t\t\tcpx = null;\n\t\t\t\tcpy = null;\n\t\t\t}\n\n\t\t\t// Reset control point\n\t\t\tif (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\n\t\t\t\tqcpx = null;\n\t\t\t\tqcpy = null;\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"M\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx = +args[0];\n\t\t\t\t\ty = +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tx += +args[0];\n\t\t\t\t\ty += +args[1];\n\t\t\t\t\tthis.moveTo(x, y);\n\n\t\t\t\t\tfor (let i = 2; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"L\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"l\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"h\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"V\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty = +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"v\":\n\t\t\t\t\tcheckMinArgs(name, args.length, 1);\n\t\t\t\t\tfor (let i = 0; i < args.length; ++i) {\n\t\t\t\t\t\ty += +args[i];\n\t\t\t\t\t\tthis.lineTo(x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"C\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i];\n\t\t\t\t\t\tconst y1 = +args[i + 1];\n\t\t\t\t\t\tcpx = +args[i + 2];\n\t\t\t\t\t\tcpy = +args[i + 3];\n\t\t\t\t\t\tx = +args[i + 4];\n\t\t\t\t\t\ty = +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"c\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 6);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 6) {\n\t\t\t\t\t\tconst x1 = +args[i] + x;\n\t\t\t\t\t\tconst y1 = +args[i + 1] + y;\n\t\t\t\t\t\tcpx = +args[i + 2] + x;\n\t\t\t\t\t\tcpy = +args[i + 3] + y;\n\t\t\t\t\t\tx += +args[i + 4];\n\t\t\t\t\t\ty += +args[i + 5];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i];\n\t\t\t\t\t\tcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"s\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tif (cpx === null || cpy === null) {\n\t\t\t\t\t\tcpx = x;\n\t\t\t\t\t\tcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tconst x1 = 2 * x - cpx;\n\t\t\t\t\t\tconst y1 = 2 * y - cpy;\n\t\t\t\t\t\tcpx = +args[i] + x;\n\t\t\t\t\t\tcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.bezierCurveTo(x1, y1, cpx, cpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i];\n\t\t\t\t\t\tqcpy = +args[i + 1];\n\t\t\t\t\t\tx = +args[i + 2];\n\t\t\t\t\t\ty = +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"q\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 4);\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 4) {\n\t\t\t\t\t\tqcpx = +args[i] + x;\n\t\t\t\t\t\tqcpy = +args[i + 1] + y;\n\t\t\t\t\t\tx += +args[i + 2];\n\t\t\t\t\t\ty += +args[i + 3];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"T\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx = +args[i];\n\t\t\t\t\t\ty = +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"t\":\n\t\t\t\t\tcheckEvenArgs(name, args.length, 2);\n\t\t\t\t\tif (qcpx === null || qcpy === null) {\n\t\t\t\t\t\tqcpx = x;\n\t\t\t\t\t\tqcpy = y;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 2) {\n\t\t\t\t\t\tqcpx = 2 * x - qcpx;\n\t\t\t\t\t\tqcpy = 2 * y - qcpy;\n\t\t\t\t\t\tx += +args[i];\n\t\t\t\t\t\ty += +args[i + 1];\n\t\t\t\t\t\tthis.quadraticCurveTo(qcpx, qcpy, x, y);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"A\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\tconst relative = (name === \"a\");\n\n\t\t\t\t\tsplitArcFlags(args);\n\t\t\t\t\tcheckEvenArgs(name, args.length, 7);\n\n\t\t\t\t\tfor (let i = 0; i < args.length; i += 7) {\n\t\t\t\t\t\tlet cx = +args[i + 5];\n\t\t\t\t\t\tlet cy = +args[i + 6];\n\n\t\t\t\t\t\tif (relative) {\n\t\t\t\t\t\t\tcx += x;\n\t\t\t\t\t\t\tcy += y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst bs = arcToBezier({\n\t\t\t\t\t\t\tpx: x,\n\t\t\t\t\t\t\tpy: y,\n\t\t\t\t\t\t\trx: +args[i],\n\t\t\t\t\t\t\try: +args[i + 1],\n\t\t\t\t\t\t\txAxisRotation: +args[i + 2],\n\t\t\t\t\t\t\tlargeArcFlag: assertBinary(+args[i + 3]),\n\t\t\t\t\t\t\tsweepFlag: assertBinary(+args[i + 4]),\n\t\t\t\t\t\t\tcx,\n\t\t\t\t\t\t\tcy,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$array.each(bs, (b) => {\n\t\t\t\t\t\t\tthis.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\n\t\t\t\t\t\t\tx = b.x;\n\t\t\t\t\t\t\ty = b.y;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"z\":\n\t\t\t\t\tcheckArgs(name, args.length, 0);\n\t\t\t\t\tthis.closePath();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpublic _runPath(context: CanvasRenderingContext2D): void {\n\t\tcontext.beginPath();\n\n\t\t$array.each(this._operations, (op) => {\n\t\t\top.path(context);\n\t\t});\n\t}\n\n\tprotected _render(status: IStatus): void {\n\t\tsuper._render(status);\n\n\t\tconst layerDirty = status.layer.dirty;\n\t\tconst interactive = this._isInteractive(status);\n\n\t\tif (layerDirty || interactive) {\n\n\t\t\tconst context = status.layer.context;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tif (layerDirty) {\n\t\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\t\tcontext.beginPath();\n\t\t\t}\n\n\t\t\tlet color: string | undefined;\n\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.beginPath();\n\t\t\t\tcolor = this._getColorId();\n\t\t\t}\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\tif (layerDirty) {\n\t\t\t\t\top.path(context);\n\t\t\t\t\top.colorize(context, undefined);\n\t\t\t\t}\n\n\t\t\t\tif (interactive) {\n\t\t\t\t\top.path(ghostContext);\n\t\t\t\t\top.colorize(ghostContext, color);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic renderDetached(context: CanvasRenderingContext2D): void {\n\t\tif (this.visible) {\n\t\t\tthis._setMatrix();\n\n\t\t\tcontext.save();\n\n\t\t\t// We must apply the mask before we transform the element\n\t\t\tconst mask = this.mask;\n\t\t\tif (mask) {\n\t\t\t\tmask._setMatrix();\n\t\t\t\tmask._transform(context, 1);\n\t\t\t\tmask._runPath(context);\n\t\t\t\tcontext.clip();\n\t\t\t}\n\n\t\t\t// TODO handle compoundAlpha somehow ?\n\t\t\tcontext.globalAlpha = this.compoundAlpha * this.alpha;\n\n\t\t\tthis._transform(context, 1);\n\n\t\t\tif (this.filter) {\n\t\t\t\tcontext.filter = this.filter;\n\t\t\t}\n\n\t\t\tcontext.globalCompositeOperation = this.blendMode;\n\n\t\t\tcontext.beginPath();\n\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.path(context);\n\t\t\t\top.colorize(context, undefined);\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t$array.each(this._operations, (op) => {\n\t\t\t\top.addBounds(bounds);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface ILineChunk {\n\tstyle: string | undefined,\n\tfill: Color | undefined,\n\ttext: string,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\tascent: number,\n\toffsetX: number,\n\toffsetY: number,\n\ttextDecoration: string | undefined,\n\tverticalAlign?: \"baseline\" | \"sub\" | \"super\"\n}\n\n/**\n * @ignore\n */\ninterface ILine {\n\toffsetY: number,\n\tascent: number,\n\twidth: number,\n\theight: number,\n\tleft: number,\n\tright: number,\n\ttextChunks: Array,\n}\n\n/**\n * @ignore\n */\nexport class CanvasText extends CanvasDisplayObject implements IText {\n\tpublic text: string;\n\tpublic style: CanvasTextStyle;\n\tpublic resolution: number = 1;\n\tpublic textVisible: boolean = true;\n\n\tprotected _textInfo: Array | undefined;\n\tprotected _originalScale?: number = 1;\n\n\tconstructor(renderer: CanvasRenderer, text: string, style: CanvasTextStyle) {\n\t\tsuper(renderer);\n\t\tthis.text = text;\n\t\tthis.style = style;\n\t}\n\n\tpublic invalidateBounds(): void {\n\t\tsuper.invalidateBounds();\n\t\tthis._textInfo = undefined;\n\t}\n\n\tprivate _shared(context: CanvasRenderingContext2D) {\n\t\tif (this.style.textAlign) {\n\t\t\tcontext.textAlign = this.style.textAlign;\n\t\t}\n\n\t\tif (this.style.direction) {\n\t\t\tcontext.direction = this.style.direction;\n\t\t}\n\n\t\tif (this.style.textBaseline) {\n\t\t\tcontext.textBaseline = this.style.textBaseline;\n\t\t}\n\n\t}\n\n\tprotected _prerender(status: IStatus, ignoreGhost = false, ignoreFontWeight = false): void {\n\t\tsuper._render(status);\n\n\t\tconst context = status.layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t// Font style\n\n\t\tconst style = this.style;\n\t\tlet fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\n\n\t\tcontext.font = fontStyle;\n\t\tif (this._isInteractive(status) && !ignoreGhost) {\n\t\t\tghostContext.font = fontStyle;\n\t\t}\n\n\t\t// Other parameters\n\t\tif (style.fill) {\n\t\t\tif (style.fill instanceof Color) {\n\t\t\t\tcontext.fillStyle = style.fill.toCSS(style.fillOpacity != undefined ? style.fillOpacity : 1);\n\t\t\t} else {\n\t\t\t\tcontext.fillStyle = style.fill;\n\t\t\t}\n\t\t}\n\n\t\tif (style.shadowColor) {\n\t\t\tstatus.layer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\n\t\t}\n\t\tif (style.shadowBlur) {\n\t\t\tstatus.layer.context.shadowBlur = style.shadowBlur;\n\t\t}\n\t\tif (style.shadowOffsetX) {\n\t\t\tstatus.layer.context.shadowOffsetX = style.shadowOffsetX;\n\t\t}\n\t\tif (style.shadowOffsetY) {\n\t\t\tstatus.layer.context.shadowOffsetY = style.shadowOffsetY;\n\t\t}\n\n\t\tthis._shared(context);\n\n\t\tif (this._isInteractive(status) && !ignoreGhost) {\n\t\t\tghostContext.fillStyle = this._getColorId();\n\t\t\tthis._shared(ghostContext);\n\t\t}\n\t}\n\n\tprotected _getFontStyle(style2?: ITextStyle, ignoreFontWeight = false): string {\n\n\t\t// Process defaults\n\t\tconst style = this.style;\n\t\tlet fontStyle: string[] = [];\n\n\t\tif (style2 && style2.fontVariant) {\n\t\t\tfontStyle.push(style2.fontVariant);\n\t\t}\n\t\telse if (style.fontVariant) {\n\t\t\tfontStyle.push(style.fontVariant);\n\t\t}\n\n\t\tif (!ignoreFontWeight) {\n\t\t\tif (style2 && style2.fontWeight) {\n\t\t\t\tfontStyle.push(style2.fontWeight);\n\t\t\t}\n\t\t\telse if (style.fontWeight) {\n\t\t\t\tfontStyle.push(style.fontWeight);\n\t\t\t}\n\t\t}\n\n\t\tif (style2 && style2.fontStyle) {\n\t\t\tfontStyle.push(style2.fontStyle);\n\t\t}\n\t\telse if (style.fontStyle) {\n\t\t\tfontStyle.push(style.fontStyle);\n\t\t}\n\n\t\tif (style2 && style2.fontSize) {\n\t\t\tif ($type.isNumber(style2.fontSize)) {\n\t\t\t\tstyle2.fontSize = style2.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style2.fontSize);\n\t\t}\n\t\telse if (style.fontSize) {\n\t\t\tif ($type.isNumber(style.fontSize)) {\n\t\t\t\tstyle.fontSize = style.fontSize + \"px\";\n\t\t\t}\n\t\t\tfontStyle.push(style.fontSize);\n\t\t}\n\n\t\tif (style2 && style2.fontFamily) {\n\t\t\tfontStyle.push(style2.fontFamily);\n\t\t}\n\t\telse if (style.fontFamily) {\n\t\t\tfontStyle.push(style.fontFamily);\n\t\t}\n\t\telse if (fontStyle.length) {\n\t\t\tfontStyle.push(\"Arial\");\n\t\t}\n\n\t\treturn fontStyle.join(\" \");\n\t}\n\n\tprotected _render(status: IStatus): void {\n\t\t// We need measurements in order to properly position text for alignment\n\t\tif (!this._textInfo) {\n\t\t\tthis._measure(status);\n\t\t}\n\n\t\tif (this.textVisible) {\n\n\t\t\tconst interactive = this._isInteractive(status);\n\t\t\tconst context = status.layer.context;\n\t\t\tconst layerDirty = status.layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\tcontext.save();\n\t\t\tghostContext.save();\n\t\t\tthis._prerender(status);\n\n\t\t\t// const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\t\t// const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (this._isInteractive(status)) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw text\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw underline\n\t\t\t\t\tif (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\n\n\t\t\t\t\t\tlet thickness = 1;\n\t\t\t\t\t\tlet offset = 1;\n\t\t\t\t\t\tlet fontSize = chunk.height;\n\n\t\t\t\t\t\tlet offsetX = chunk.offsetX;\n\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\toffsetX -= chunk.width / 2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\t\tconst format = TextFormatter.getTextStyle(chunk.style);\n\t\t\t\t\t\t\tswitch (format.fontWeight) {\n\t\t\t\t\t\t\t\tcase \"bolder\":\n\t\t\t\t\t\t\t\tcase \"bold\":\n\t\t\t\t\t\t\t\tcase \"700\":\n\t\t\t\t\t\t\t\tcase \"800\":\n\t\t\t\t\t\t\t\tcase \"900\":\n\t\t\t\t\t\t\t\t\tthickness = 2;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fontSize) {\n\t\t\t\t\t\t\toffset = fontSize / 20;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet y: number;\n\n\t\t\t\t\t\tif (chunk.textDecoration == \"line-through\") {\n\t\t\t\t\t\t\ty = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ty = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.beginPath();\n\t\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\t\tcontext.strokeStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (this.style.fill && this.style.fill instanceof Color) {\n\t\t\t\t\t\t\tcontext.strokeStyle = this.style.fill.toCSS();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontext.lineWidth = thickness * offset;\n\t\t\t\t\t\tcontext.moveTo(offsetX, y);\n\t\t\t\t\t\tcontext.lineTo(offsetX + chunk.width, y);\n\t\t\t\t\t\tcontext.stroke();\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (interactive && this.interactive) {\n\t\t\t\t\t\t// Draw text in ghost canvas ONLY if it is set as interactive\n\t\t\t\t\t\t// explicitly. This way we avoid hit test anomalies caused by anti\n\t\t\t\t\t\t// aliasing of text.\n\t\t\t\t\t\tghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\t}\n\n\tpublic _addBounds(bounds: IBounds): void {\n\t\tif (this.visible && this.isMeasured) {\n\t\t\t//if (this._textVisible) {\n\t\t\tconst x = this._measure({\n\t\t\t\tinactive: this.inactive,\n\t\t\t\tlayer: this.getLayer(),\n\t\t\t});\n\t\t\tsetPoint(bounds, { x: x.left, y: x.top });\n\t\t\tsetPoint(bounds, { x: x.right, y: x.bottom });\n\t\t\t//}\n\t\t}\n\t}\n\n\tprotected _ignoreFontWeight(): boolean {\n\t\treturn /apple/i.test(navigator.vendor);\n\t}\n\n\tpublic _measure(status: IStatus): IBounds {\n\t\tconst context = status.layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\t// Reset text info\n\t\tthis._textInfo = [];\n\n\t\t// Init\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(status, true, this._ignoreFontWeight());\n\n\t\t// Get default font metrix\n\t\tconst refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet minX = 0;\n\t\tlet maxX = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\tlet currentStyle: string | undefined;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks: ITextChunk[];\n\t\t\tif (line == \"\") {\n\t\t\t\tchunks = [{\n\t\t\t\t\ttype: \"value\",\n\t\t\t\t\ttext: \"\"\n\t\t\t\t}];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\t\t\t}\n\n\t\t\twhile (chunks.length > 0) {\n\n\t\t\t\t// Init line object\n\t\t\t\tlet lineInfo: ILine = {\n\t\t\t\t\toffsetY: offsetY,\n\t\t\t\t\tascent: 0,\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttextChunks: []\n\t\t\t\t};\n\n\t\t\t\t// Measure reference text\n\t\t\t\tconst metrics = this._measureText(refText, context);\n\n\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\tlineInfo.height = height;\n\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\n\t\t\t\tlet currentFormat: string;\n\t\t\t\tlet currentDecoration: string | undefined = this.style.textDecoration;\n\t\t\t\tlet currentFill: Color | undefined;\n\t\t\t\tlet currentChunkWidth: number | undefined;\n\t\t\t\tlet skipFurtherText = false;\n\t\t\t\tlet firstTextChunk = true;\n\t\t\t\tlet leftoverChunks: Array = [];\n\t\t\t\tlet currentVerticalAlign: \"baseline\" | \"sub\" | \"super\" | undefined;\n\t\t\t\t//let offsetX = 0;\n\t\t\t\t//let chunk;\n\n\t\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t\t$array.eachContinue(chunks, (chunk, index) => {\n\n\t\t\t\t\t// Format chunk\n\t\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t\t\tcurrentDecoration = this.style.textDecoration;\n\t\t\t\t\t\t\tcurrentVerticalAlign = undefined\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\t\tcurrentFormat = chunk.text;\n\t\t\t\t\t\t\tif (format.textDecoration) {\n\t\t\t\t\t\t\t\tcurrentDecoration = format.textDecoration;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\t\tcurrentFill = format.fill;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ((format).width) {\n\t\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((format).width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (format.verticalAlign) {\n\t\t\t\t\t\t\t\tcurrentVerticalAlign = format.verticalAlign;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyleRestored = false;\n\n\t\t\t\t\t\t\t// Measure reference text after change of format\n\t\t\t\t\t\t\tconst metrics = this._measureText(refText, context);\n\t\t\t\t\t\t\tconst height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\t\tif (height > lineInfo.height) {\n\t\t\t\t\t\t\t\tlineInfo.height = height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Text chunk\n\t\t\t\t\telse if (chunk.type == \"value\" && !skipFurtherText) {\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(chunk.text, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t// Check for fit\n\t\t\t\t\t\tif (truncate) {\n\n\t\t\t\t\t\t\t// Break words?\n\t\t\t\t\t\t\tlet breakWords = firstTextChunk || this.style.breakWords || false;\n\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\t\t\t\t\t\tconst ellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\n\t\t\t\t\t\t\t\tchunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\n\t\t\t\t\t\t\t\tchunk.text += ellipsis;\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (wrap) {\n\t\t\t\t\t\t\t// Check fit\n\t\t\t\t\t\t\tif ((lineInfo.width + chunkWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tconst excessWidth = maxWidth - lineInfo.width;\n\t\t\t\t\t\t\t\tconst tmpText = this._truncateText(\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\tchunk.text,\n\t\t\t\t\t\t\t\t\texcessWidth,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\t(firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\")\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (tmpText == \"\") {\n\t\t\t\t\t\t\t\t\t// Unable to fit a single letter - hide the whole label\n\t\t\t\t\t\t\t\t\tthis.textVisible = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t//skipFurtherText = true;\n\n\t\t\t\t\t\t\t\t//Add remaining chunks for the next line\n\t\t\t\t\t\t\t\tleftoverChunks = chunks.slice(index + 1);\n\n\t\t\t\t\t\t\t\t//Add remaining text of current chunk if it was forced-cut\n\t\t\t\t\t\t\t\tif ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\n\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\ttype: \"value\",\n\t\t\t\t\t\t\t\t\t\ttext: chunk.text.substr(tmpText.length)\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (currentFormat) {\n\t\t\t\t\t\t\t\t\t\tleftoverChunks.unshift({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"format\",\n\t\t\t\t\t\t\t\t\t\t\ttext: currentFormat\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Set current chunk (truncated)\n\t\t\t\t\t\t\t\tchunk.text = $utils.trim(tmpText);\n\n\t\t\t\t\t\t\t\tchunks = [];\n\t\t\t\t\t\t\t\tskipFurtherText = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tlet leftBoundMod = 1;\n\t\t\t\t\t\tlet rightBoundMod = 1;\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\t// increase horizontal bounding boxes accordingly\n\t\t\t\t\t\t\tconst boundsMod = chunkWidth / currentChunkWidth\n\t\t\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\t\t\tleftBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\trightBoundMod = boundsMod;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\n\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: 0,\n\t\t\t\t\t\t\ttextDecoration: currentDecoration,\n\t\t\t\t\t\t\tverticalAlign: currentVerticalAlign\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t//offsetX += chunkWidth;\n\n\t\t\t\t\t\tfirstTextChunk = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif (leftoverChunks) {\n\t\t\t\t\t\t//return false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\t//}\n\t\t\t\t});\n\n\t\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight.value;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t\t\tlineInfo.ascent *= this.style.lineHeight || 1.2;\n\t\t\t\t}\n\n\t\t\t\tif (minX < lineInfo.left) {\n\t\t\t\t\tminX = lineInfo.left;\n\t\t\t\t}\n\n\t\t\t\tif (maxX < lineInfo.right) {\n\t\t\t\t\tmaxX = lineInfo.right;\n\t\t\t\t}\n\n\t\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\t\toffsetY += lineInfo.height;\n\n\t\t\t\t// Reset chunks so that it can proceed to the next line\n\t\t\t\tchunks = leftoverChunks || [];\n\t\t\t}\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo, _index: number) => {\n\t\t\tlet currentChunkOffset = 0\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\n\t\t\t\tchunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\n\t\t\t\tcurrentChunkOffset += chunk.width;\n\n\t\t\t\tif (chunk.verticalAlign) {\n\t\t\t\t\tswitch (chunk.verticalAlign) {\n\t\t\t\t\t\tcase \"super\":\n\t\t\t\t\t\t\tchunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"sub\":\n\t\t\t\t\t\t\tchunk.offsetY += chunk.height / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tconst bounds = {\n\t\t\tleft: rtl ? -maxX : -minX,\n\t\t\ttop: 0,\n\t\t\tright: rtl ? minX : maxX,\n\t\t\tbottom: offsetY,\n\t\t};\n\n\n\t\t// We need to fit?\n\t\tif (oversizedBehavior !== \"none\") {\n\t\t\tconst ratio = this._fitRatio(bounds);\n\t\t\tif (ratio < 1) {\n\t\t\t\tif (oversizedBehavior == \"fit\") {\n\t\t\t\t\tif ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\n\t\t\t\t\t\tthis.textVisible = false;\n\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\tbounds.top = 0;\n\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\tbounds.bottom = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!this._originalScale || this._originalScale == 1) {\n\t\t\t\t\t\t\tthis._originalScale = this.scale;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.scale = ratio;\n\t\t\t\t\t\tthis.textVisible = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (oversizedBehavior == \"hide\") {\n\t\t\t\t\tthis.textVisible = false;\n\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\tbounds.top = 0;\n\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\tbounds.bottom = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\n\t\t\t\t\tswitch (this.style.textAlign) {\n\t\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tcase \"end\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth;\n\t\t\t\t\t\t\tbounds.right = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\t\tbounds.left = -maxWidth / 2;\n\t\t\t\t\t\t\tbounds.right = maxWidth / 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbounds.left = 0;\n\t\t\t\t\t\t\tbounds.right = maxWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\t\tthis._originalScale = undefined;\n\t\t\t\t\tthis.textVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.scale = this._originalScale || 1;\n\t\t\t\tthis._originalScale = undefined;\n\t\t\t\tthis.textVisible = true;\n\t\t\t}\n\t\t}\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn bounds;\n\t}\n\n\tprotected _fitRatio(bounds: IBounds): number {\n\t\tconst maxW = this.style.maxWidth;\n\t\tconst maxH = this.style.maxHeight;\n\t\tif (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\n\t\t\treturn 1;\n\t\t}\n\t\tconst w = bounds.right - bounds.left;\n\t\tconst h = bounds.bottom - bounds.top;\n\t\treturn Math.min(maxW! / w || 1, maxH! / h || 1);\n\t}\n\n\tprotected _truncateText(context: CanvasRenderingContext2D, text: string, maxWidth: number, breakWords: boolean = false, fallbackBreakWords: boolean = true): string {\n\t\tlet width: number;\n\t\tdo {\n\t\t\tif (breakWords) {\n\t\t\t\ttext = text.slice(0, -1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet tmp = text.replace(/[^,;:!?\\\\\\/\\s​]+[,;:!?\\\\\\/\\s​]*$/g, \"\");\n\t\t\t\tif ((tmp == \"\" || tmp === text) && fallbackBreakWords) {\n\t\t\t\t\tbreakWords = true;\n\t\t\t\t}\n\t\t\t\telse if (tmp == \"\") {\n\t\t\t\t\treturn text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst metrics = this._measureText(text, context);\n\t\t\twidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\n\t\t} while ((width > maxWidth) && text != \"\");\n\t\treturn text;\n\t}\n\n\tprotected _measureText(text: string, context: CanvasRenderingContext2D): TextMetrics {\n\t\tlet metrics = context.measureText(text);\n\t\tlet fakeMetrics: any = {};\n\t\tif (metrics.actualBoundingBoxAscent == null) {\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tdiv.innerText = text;\n\t\t\tdiv.style.visibility = \"hidden\";\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tdiv.style.top = \"-1000000px;\"\n\t\t\tdiv.style.fontFamily = this.style.fontFamily || \"\";\n\t\t\tdiv.style.fontSize = this.style.fontSize + \"\";\n\t\t\tdocument.body.appendChild(div);\n\t\t\tconst bbox = div.getBoundingClientRect();\n\t\t\tdocument.body.removeChild(div);\n\t\t\tconst h = bbox.height;\n\t\t\tconst w = metrics.width;\n\t\t\tlet left = 0;\n\t\t\tlet right = w;\n\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: h,\n\t\t\t\tactualBoundingBoxDescent: 0,\n\t\t\t\tactualBoundingBoxLeft: left,\n\t\t\t\tactualBoundingBoxRight: right,\n\t\t\t\tfontBoundingBoxAscent: h,\n\t\t\t\tfontBoundingBoxDescent: 0,\n\t\t\t\twidth: w\n\t\t\t}\n\t\t\t//return fake;\n\t\t}\n\t\telse {\n\t\t\tfakeMetrics = {\n\t\t\t\tactualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tactualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\tactualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\n\t\t\t\tactualBoundingBoxRight: metrics.actualBoundingBoxRight,\n\t\t\t\tfontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\n\t\t\t\tfontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\n\t\t\t\twidth: metrics.width\n\t\t\t}\n\t\t}\n\n\t\tconst w = metrics.width;\n\t\tswitch (this.style.textAlign) {\n\t\t\tcase \"right\":\n\t\t\tcase \"end\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"center\":\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = w / 2;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w / 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tfakeMetrics.actualBoundingBoxLeft = 0;\n\t\t\t\tfakeMetrics.actualBoundingBoxRight = w;\n\t\t}\n\n\t\treturn fakeMetrics;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasTextStyle implements ITextStyle {\n\t//public wordWrapWidth: number = 100;\n\tpublic fill?: Color | CanvasGradient | CanvasPattern;\n\tpublic fillOpacity?: number;\n\tpublic textAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\tpublic fontFamily?: string;\n\tpublic fontSize?: string | number;\n\tpublic fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'\n\tpublic fontStyle?: 'normal' | 'italic' | 'oblique';\n\tpublic fontVariant?: \"normal\" | \"small-caps\";\n\tpublic textDecoration?: \"underline\" | \"line-through\";\n\tpublic shadowColor?: Color | null;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\t// leading?: number;\n\t// letterSpacing?: number;\n\tpublic lineHeight?: number | Percent = percent(120);\n\tpublic baselineRatio?: number = 0.19;\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\tpublic direction?: \"ltr\" | \"rtl\";\n\tpublic textBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\tpublic oversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\" = \"none\";\n\tpublic breakWords?: boolean = false;\n\tpublic ellipsis?: string = \"…\";\n\tpublic maxWidth?: number;\n\tpublic maxHeight?: number;\n\tpublic minScale?: number;\n\tpublic ignoreFormatting?: boolean = false;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRadialText extends CanvasText implements IRadialText {\n\tpublic textType?: \"regular\" | \"circular\" | \"radial\" | \"aligned\" | \"adjusted\" = \"circular\";\n\tpublic radius?: number;\n\tpublic startAngle?: number;\n\tpublic inside?: boolean = false;\n\tpublic orientation?: \"inward\" | \"outward\" | \"auto\" = \"auto\";\n\tpublic kerning?: number = 0;\n\n\tprivate _textReversed: boolean = false;\n\n\tpublic _render(status: IStatus): void {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\tthis._renderCircular(status);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsuper._render(status);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpublic _renderCircular(status: IStatus): void {\n\t\tif (this.textVisible) {\n\t\t\tthis._prerender(status);\n\n\t\t\tconst interactive = this._isInteractive(status);\n\t\t\tconst context = status.layer.context;\n\t\t\tconst layerDirty = status.layer.dirty;\n\t\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\n\t\t\t// Savepoint\n\t\t\tcontext.save();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.save();\n\t\t\t}\n\n\t\t\t// We need measurements in order to properly position text for alignment\n\t\t\tif (!this._textInfo) {\n\t\t\t\tthis._measure(status);\n\t\t\t}\n\n\t\t\t// Init\n\t\t\tlet radius = (this.radius || 0);\n\t\t\tlet startAngle = (this.startAngle || 0);\n\t\t\tlet deltaAngle = 0;\n\t\t\tlet orientation = this.orientation;\n\t\t\tlet inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\n\t\t\tconst inside = this.inside;\n\t\t\tconst align = this.style.textAlign || \"left\";\n\t\t\tconst kerning = this.kerning || 0;\n\t\t\tlet clockwise = align == \"left\" ? 1 : -1;\n\t\t\tconst shouldReverse = !this._textReversed;\n\n\t\t\t// Check if we need to invert the whole stuff\n\t\t\tif (inward == \"auto\") {\n\t\t\t\t// Calc max angle so we know whether we need to flip it\n\t\t\t\tlet maxAngle = 0;\n\t\t\t\tlet midAngle = 0;\n\t\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\t\t\t\t\tconst deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\n\t\t\t\t\tif (deltaAngle > maxAngle) {\n\t\t\t\t\t\tmaxAngle = deltaAngle;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (align == \"left\") {\n\t\t\t\t\tmidAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse if (align == \"right\") {\n\t\t\t\t\tmidAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmidAngle = startAngle * $math.DEGREES;\n\t\t\t\t}\n\t\t\t\tmidAngle = $math.normalizeAngle(midAngle);\n\t\t\t\tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t}\n\n\t\t\tif (inward == true && shouldReverse) {\n\t\t\t\tthis._textInfo!.reverse();\n\t\t\t\tthis._textReversed = true;\n\t\t\t}\n\n\t\t\t// if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\n\t\t\t// \tclockwise *= -1;\n\t\t\t// }\n\n\t\t\t// Process text info produced by _measure()\n\t\t\t$array.each(this._textInfo!, (line, _index) => {\n\n\t\t\t\tconst textHeight = line.height;\n\n\t\t\t\t// Adjust radius (for `inside = false`)\n\t\t\t\t// Radius adjustment for `inside = false` is below the line calculation\n\t\t\t\tif (!inside) {\n\t\t\t\t\tradius += textHeight;\n\t\t\t\t}\n\n\t\t\t\t// Reverse letters if we're painting them counter-clockwise\n\t\t\t\tif (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\n\t\t\t\t\tline.textChunks.reverse();\n\t\t\t\t}\n\n\t\t\t\t// Init angles\n\t\t\t\tlet lineStartAngle = startAngle;\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t\t// Adjust for center-align\n\t\t\t\tif (align == \"center\") {\n\t\t\t\t\tlineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\n\t\t\t\t\tdeltaAngle = lineStartAngle - startAngle;\n\t\t\t\t}\n\n\t\t\t\t// if (inward == \"auto\") {\n\t\t\t\t// \tlet midAngle;\n\t\t\t\t// \tif (align == \"left\") {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \telse if () {\n\t\t\t\t// \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\n\t\t\t\t// \t}\n\t\t\t\t// \tinward = (midAngle >= 270) || (midAngle <= 90);\n\t\t\t\t// }\n\n\t\t\t\t// Rotate letters if they are facing outward\n\t\t\t\tlineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\n\n\t\t\t\t// Savepoint\n\t\t\t\tcontext.save();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.save();\n\t\t\t\t}\n\n\t\t\t\t// Assume starting angle\n\t\t\t\tcontext.rotate(lineStartAngle);\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.rotate(lineStartAngle);\n\t\t\t\t}\n\n\t\t\t\tlet angleShift = 0;\n\t\t\t\t$array.each(line.textChunks, (chunk, _index) => {\n\n\t\t\t\t\t// Draw the letter\n\t\t\t\t\tconst char = chunk.text;\n\t\t\t\t\tconst charWidth = chunk.width;\n\n\t\t\t\t\t// Rotate half a letter\n\t\t\t\t\tangleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\n\t\t\t\t\t\tcontext.font = chunk.style;\n\t\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\t\tghostContext.font = chunk.style;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tcontext.fillStyle = chunk.fill.toCSS();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Center letters\n\t\t\t\t\tcontext.textBaseline = \"middle\";\n\t\t\t\t\tcontext.textAlign = \"center\";\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.textBaseline = \"middle\";\n\t\t\t\t\t\tghostContext.textAlign = \"center\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Plop the letter\n\t\t\t\t\tif (layerDirty) {\n\t\t\t\t\t\tcontext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chunk.fill) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t// Color does not affect ghostContext so we not set it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset style\n\t\t\t\t\tif (chunk.style) {\n\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Rotate half a letter and add spacing\n\t\t\t\t\tangleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\n\t\t\t\t\tcontext.rotate(angleShift);\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\tghostContext.rotate(angleShift);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\t// Restore angle\n\t\t\t\tcontext.restore();\n\t\t\t\tif (interactive) {\n\t\t\t\t\tghostContext.restore();\n\t\t\t\t}\n\n\t\t\t\t// Adjust radius (for `inside = true`)\n\t\t\t\tif (inside) {\n\t\t\t\t\tradius -= textHeight;\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// Restore\n\t\t\tcontext.restore();\n\t\t\tif (interactive) {\n\t\t\t\tghostContext.restore();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _measure(status: IStatus): IBounds {\n\t\tswitch (this.textType) {\n\t\t\tcase \"circular\":\n\t\t\t\treturn this._measureCircular(status);\n\t\t\tdefault:\n\t\t\t\treturn super._measure(status);\n\t\t}\n\t}\n\n\tpublic _measureCircular(status: IStatus): IBounds {\n\t\tconst context = status.layer.context;\n\t\tconst ghostContext = this._renderer._ghostLayer.context;\n\t\tconst rtl = this.style.direction == \"rtl\";\n\n\t\tconst oversizedBehavior = this.style.oversizedBehavior;\n\t\tconst maxWidth = this.style.maxWidth!;\n\n\t\tconst truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\n\t\tconst ellipsis = this.style.ellipsis || \"\";\n\t\tlet ellipsisMetrics: TextMetrics;\n\t\t//const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\n\n\n\t\t// Reset text info\n\t\tthis.textVisible = true;\n\t\tthis._textInfo = [];\n\t\tthis._textReversed = false;\n\n\t\t// Pre-render\n\t\tcontext.save();\n\t\tghostContext.save();\n\t\tthis._prerender(status, true);\n\n\t\t// Split up text into lines\n\t\tconst lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\n\t\tlet styleRestored = true;\n\t\tlet totalWidth = 0;\n\n\t\t// Iterate through the lines\n\t\tlet offsetY = 0;\n\t\t$array.each(lines, (line, _index) => {\n\n\t\t\t// Split up line into format/value chunks\n\t\t\tlet chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\n\n\t\t\t// Init line object\n\t\t\tlet lineInfo: ILine = {\n\t\t\t\toffsetY: offsetY,\n\t\t\t\tascent: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttextChunks: []\n\t\t\t};\n\n\t\t\tlet currentStyle: string | undefined;\n\t\t\tlet currentFill: Color | undefined;\n\t\t\tlet currentChunkWidth: number | undefined;\n\n\t\t\t//while(chunk = chunks.shift()) {\n\t\t\t$array.each(chunks, (chunk, _index) => {\n\n\t\t\t\t// Format chunk\n\t\t\t\tif (chunk.type == \"format\") {\n\t\t\t\t\tif (chunk.text == \"[/]\") {\n\t\t\t\t\t\tif (!styleRestored) {\n\t\t\t\t\t\t\tcontext.restore();\n\t\t\t\t\t\t\tghostContext.restore();\n\t\t\t\t\t\t\tstyleRestored = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentFill = undefined;\n\t\t\t\t\t\tcurrentStyle = undefined;\n\t\t\t\t\t\tcurrentChunkWidth = undefined;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet format = TextFormatter.getTextStyle(chunk.text);\n\t\t\t\t\t\tconst fontStyle = this._getFontStyle(format);\n\t\t\t\t\t\tcontext.save();\n\t\t\t\t\t\tghostContext.save();\n\t\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\t\tcurrentStyle = fontStyle;\n\t\t\t\t\t\tif (format.fill) {\n\t\t\t\t\t\t\tcurrentFill = format.fill;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((format).width) {\n\t\t\t\t\t\t\tcurrentChunkWidth = $type.toNumber((format).width);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyleRestored = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Text format\n\t\t\t\telse if (chunk.type == \"value\") {\n\n\t\t\t\t\t// Measure each letter\n\t\t\t\t\tconst chars = chunk.text.match(/./ug) || [];\n\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\tchars.reverse();\n\t\t\t\t\t}\n\t\t\t\t\tfor (let i = 0; i < chars.length; i++) {\n\n\t\t\t\t\t\tconst char = chars[i];\n\n\t\t\t\t\t\t// Measure\n\t\t\t\t\t\tconst metrics = this._measureText(char, context);\n\t\t\t\t\t\tlet chunkWidth = metrics.width;\n\n\t\t\t\t\t\t// Chunk width?\n\t\t\t\t\t\tif (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\n\t\t\t\t\t\t\tchunkWidth = currentChunkWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n\t\t\t\t\t\tif (chunkHeight > lineInfo.height) {\n\t\t\t\t\t\t\tlineInfo.height = chunkHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\n\t\t\t\t\t\t\tlineInfo.ascent = metrics.actualBoundingBoxAscent;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttotalWidth += chunkWidth;\n\n\t\t\t\t\t\t// Handle oversized behavior\n\t\t\t\t\t\tif (truncate) {\n\t\t\t\t\t\t\t// Measure ellipsis and check if it fits\n\t\t\t\t\t\t\tif (!ellipsisMetrics) {\n\t\t\t\t\t\t\t\tellipsisMetrics = this._measureText(ellipsis, context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t//totalWidth += ellipsisWidth;\n\t\t\t\t\t\t\tif ((totalWidth + ellipsisWidth) > maxWidth) {\n\t\t\t\t\t\t\t\tif (lineInfo.textChunks.length == 1) {\n\t\t\t\t\t\t\t\t\tthis.textVisible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tlineInfo.width += ellipsisWidth;\n\t\t\t\t\t\t\t\t\tlineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\n\t\t\t\t\t\t\t\t\tlineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\n\t\t\t\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\t\t\t\ttext: ellipsis,\n\t\t\t\t\t\t\t\t\t\twidth: ellipsisWidth,\n\t\t\t\t\t\t\t\t\t\theight: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\t\t\t\tleft: ellipsisMetrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\t\t\t\tright: ellipsisMetrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\t\t\t\tascent: ellipsisMetrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlineInfo.width += chunkWidth;\n\t\t\t\t\t\tlineInfo.left += metrics.actualBoundingBoxLeft;\n\t\t\t\t\t\tlineInfo.right += metrics.actualBoundingBoxRight;\n\t\t\t\t\t\tlineInfo.textChunks.push({\n\t\t\t\t\t\t\tstyle: currentStyle,\n\t\t\t\t\t\t\tfill: currentFill,\n\t\t\t\t\t\t\ttext: char,\n\t\t\t\t\t\t\twidth: chunkWidth,\n\t\t\t\t\t\t\theight: chunkHeight + metrics.actualBoundingBoxDescent,\n\t\t\t\t\t\t\tleft: metrics.actualBoundingBoxLeft,\n\t\t\t\t\t\t\tright: metrics.actualBoundingBoxRight,\n\t\t\t\t\t\t\tascent: metrics.actualBoundingBoxAscent,\n\t\t\t\t\t\t\toffsetX: 0,\n\t\t\t\t\t\t\toffsetY: chunkHeight,\n\t\t\t\t\t\t\ttextDecoration: undefined\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (rtl) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this.style.lineHeight instanceof Percent) {\n\t\t\t\tlineInfo.height *= this.style.lineHeight.value;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineInfo.height *= this.style.lineHeight || 1.2;\n\t\t\t}\n\n\t\t\tthis._textInfo!.push(lineInfo);\n\n\t\t\t//lineInfo.offsetY += lineInfo.ascent;\n\t\t\toffsetY += lineInfo.height;\n\n\n\t\t});\n\n\t\tif (!styleRestored) {\n\t\t\tcontext.restore();\n\t\t\tghostContext.restore();\n\t\t}\n\n\n\t\tif (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\n\t\t\tthis.textVisible = false;\n\t\t}\n\n\t\t// Adjust chunk internal offsets\n\t\t$array.each(this._textInfo, (lineInfo) => {\n\t\t\t$array.each(lineInfo.textChunks, (chunk) => {\n\t\t\t\tchunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\n\t\t\t});\n\t\t});\n\n\t\tcontext.restore();\n\t\tghostContext.restore();\n\n\t\treturn {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t};\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasImage extends CanvasDisplayObject implements IPicture {\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic image: HTMLImageElement | undefined;\n\tpublic tainted?: boolean;\n\n\tpublic shadowColor?: Color;\n\tpublic shadowBlur?: number;\n\tpublic shadowOffsetX?: number;\n\tpublic shadowOffsetY?: number;\n\tpublic shadowOpacity?: number;\n\n\tprotected _imageMask: HTMLCanvasElement | undefined;\n\n\tconstructor(renderer: CanvasRenderer, image: HTMLImageElement | undefined) {\n\t\tsuper(renderer);\n\t\tthis.image = image;\n\t}\n\n\tprotected _dispose(): void {\n\t\tsuper._dispose();\n\n\t\tif (this._imageMask) {\n\t\t\tclearCanvas(this._imageMask);\n\t\t}\n\t}\n\n\tgetLocalBounds(): IBounds {\n\t\tif (!this._localBounds) {\n\n\n\t\t\tlet w = 0;\n\t\t\tlet h = 0;\n\n\t\t\tif (this.width) {\n\t\t\t\tw = this.width;\n\t\t\t}\n\t\t\tif (this.height) {\n\t\t\t\th = this.height;\n\t\t\t}\n\n\t\t\tthis._localBounds = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: w,\n\t\t\t\tbottom: h\n\t\t\t};\n\n\t\t\tthis._addBounds(this._localBounds);\n\t\t}\n\t\treturn this._localBounds;\n\t}\n\n\tprotected _render(status: IStatus): void {\n\t\tsuper._render(status);\n\n\t\tif (this.image) {\n\t\t\tif (this.tainted === undefined) {\n\t\t\t\tthis.tainted = isTainted(this.image);\n\t\t\t\tstatus.layer.tainted = true;\n\t\t\t}\n\n\t\t\tif (this.tainted && this._renderer._omitTainted) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (status.layer.dirty) {\n\n\t\t\t\tif (this.shadowColor) {\n\t\t\t\t\tstatus.layer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\n\t\t\t\t}\n\t\t\t\tif (this.shadowBlur) {\n\t\t\t\t\tstatus.layer.context.shadowBlur = this.shadowBlur;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetX) {\n\t\t\t\t\tstatus.layer.context.shadowOffsetX = this.shadowOffsetX;\n\t\t\t\t}\n\t\t\t\tif (this.shadowOffsetY) {\n\t\t\t\t\tstatus.layer.context.shadowOffsetY = this.shadowOffsetY;\n\t\t\t\t}\n\n\t\t\t\t// TODO should this round ?\n\t\t\t\tconst width = this.width || this.image.naturalWidth;\n\t\t\t\tconst height = this.height || this.image.naturalHeight;\n\n\t\t\t\tstatus.layer.context.drawImage(this.image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tif (this.interactive && this._isInteractive(status)) {\n\t\t\t\tconst mask = this._getMask(this.image);\n\n\t\t\t\tthis._renderer._ghostLayer.context.drawImage(mask, 0, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clear(): void {\n\t\tsuper.clear();\n\t\tthis.image = undefined;\n\t\tthis._imageMask = undefined;\n\t}\n\n\tprotected _getMask(image: HTMLImageElement): HTMLCanvasElement {\n\t\tif (this._imageMask === undefined) {\n\t\t\t// TODO should this round ?\n\t\t\tconst width = this.width || image.naturalWidth;\n\t\t\tconst height = this.height || image.naturalHeight;\n\n\t\t\t// We need to create a second canvas because destination-in clears out the entire canvas\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\t\tcontext.imageSmoothingEnabled = false;\n\n\t\t\tcontext.fillStyle = this._getColorId();\n\t\t\tcontext.fillRect(0, 0, width, height);\n\n\t\t\tif (!isTainted(image)) {\n\t\t\t\tcontext.globalCompositeOperation = \"destination-in\";\n\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t}\n\n\t\t\tthis._imageMask = canvas;\n\t\t}\n\n\t\treturn this._imageMask;\n\t}\n\n}\n\n/**\n * @ignore\n */\nexport class CanvasRendererEvent implements IRendererEvent {\n\tpublic id: Id;\n\tpublic simulated: boolean = false;\n\tpublic native: boolean = true;\n\n\tconstructor(public event: A, public originalPoint: IPoint, public point: IPoint, public bbox: DOMRect) {\n\t\tif ($utils.supports(\"touchevents\") && event instanceof Touch) {\n\t\t\tthis.id = event.identifier;\n\n\t\t} else {\n\t\t\tthis.id = null;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\ninterface IEvent {\n\tobject: CanvasDisplayObject;\n\tcontext: unknown;\n\tcallback: (event: IRendererEvents[Key]) => void;\n\tdisposed: boolean;\n}\n\n/**\n * @ignore\n */\ninterface IEvents {\n\tdisposer: IDisposer;\n\tcallbacks: Array>;\n\tdispatching: boolean;\n\tcleanup: boolean;\n}\n\n/**\n * @ignore\n */\nexport class CanvasRenderer extends ArrayDisposer implements IRenderer, IDisposer {\n\tpublic view: HTMLElement = document.createElement(\"div\");\n\tprotected _layerDom: HTMLElement = document.createElement(\"div\");\n\n\tpublic layers: Array = [];\n\tpublic _dirtyLayers: Array = [];\n\tpublic defaultLayer: CanvasLayer = this.getLayer(0);\n\n\tpublic _ghostLayer: GhostLayer = new GhostLayer();\n\n\tprotected _patternCanvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\tprotected _patternContext: CanvasRenderingContext2D = this._patternCanvas.getContext(\"2d\")!;\n\n\tprotected _realWidth: number = 0;\n\tprotected _realHeight: number = 0;\n\n\tprotected _calculatedWidth: number = 0;\n\tprotected _calculatedHeight: number = 0;\n\n\tpublic resolution: number;\n\tpublic interactionsEnabled: boolean = true;\n\n\tprotected _listeners: { [key: string]: CounterDisposer } = {};\n\tprotected _events: { [Key in keyof IRendererEvents]?: IEvents } = {};\n\n\tprotected _colorId: number = 0;\n\tprotected _colorMap: { [color: string]: CanvasDisplayObject } = {};\n\n\tpublic _forceInteractive: number = 0;\n\tpublic _omitTainted: boolean = false;\n\n\t// TODO this should store the Id as well\n\tpublic _hovering: Set = new Set();\n\tpublic _dragging: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\tpublic _mousedown: Array<{ id: Id, value: CanvasDisplayObject }> = [];\n\n\tprotected _lastPointerMoveEvent: { events: Array, target: Node | null, native: boolean } | undefined;\n\n\tpublic tapToActivate: boolean = false;\n\tpublic tapToActivateTimeout: number = 3000;\n\tpublic _touchActive: boolean = false;\n\tprotected _touchActiveTimeout?: number;\n\n\t/*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\n\t\tthis._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\n\t});\n\t*/\n\n\tpublic resetImageArray() {\n\t\tthis._ghostLayer.imageArray = undefined;\n\t}\n\n\tconstructor(resolution?: number) {\n\t\tsuper();\n\n\t\tif (resolution == null) {\n\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t} else {\n\t\t\tthis.resolution = resolution;\n\t\t}\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.setAttribute(\"aria-hidden\", \"true\");\n\t\tthis.view.appendChild(this._layerDom);\n\n\t\tthis._disposers.push(new Disposer(() => {\n\t\t\t$object.each(this._events, (_key, events) => {\n\t\t\t\tevents.disposer.dispose();\n\t\t\t});\n\n\t\t\t$array.each(this.layers, (layer) => {\n\t\t\t\tclearCanvas(layer.view);\n\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tclearCanvas(layer.exportableView);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tclearCanvas(this._ghostLayer.view);\n\t\t\tclearCanvas(this._patternCanvas);\n\t\t}));\n\n\t\t/*\n\t\tthis._disposers.push($utils.addEventListener(this._ghostLayer.view, \"click\", (originalEvent: MouseEvent) => {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox);\n\t\t\tconsole.debug(target);\n\t\t}));\n\t\t*/\n\n\t\t// Monitor for possible pixel ratio changes (when page is zoomed)\n\t\tthis._disposers.push($utils.onZoom(() => {\n\t\t\tif (resolution == null) {\n\t\t\t\tthis.resolution = window.devicePixelRatio;\n\t\t\t}\n\t\t}));\n\n\t\t// We need this in order top prevent default touch gestures when dragging\n\t\t// draggable elements\n\t\tif ($utils.supports(\"touchevents\")) {\n\t\t\tconst listener = (ev: any) => {\n\t\t\t\tif (this._dragging.length !== 0) {\n\t\t\t\t\t$array.eachContinue(this._dragging, (item) => {\n\t\t\t\t\t\tif (item.value.shouldCancelTouch()) {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If touch down happends, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\n\t\t\t\t// If touch is moving, delay touch out\n\t\t\t\tif (this._touchActiveTimeout) {\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(window, \"click\", (_ev: any) => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, { passive: true }));\n\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"click\", (_ev: any) => {\n\t\t\t\twindow.setTimeout(() => {\n\t\t\t\t\tthis._touchActive = true;\n\t\t\t\t\tthis._delayTouchDeactivate();\n\t\t\t\t}, 100);\n\t\t\t}, { passive: true }));\n\n\t\t}\n\n\t\t// Prevent scrolling of the window when hovering on \"wheelable\" object\n\t\tif ($utils.supports(\"wheelevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\n\t\t\t\tlet prevent = false;\n\t\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\t\tif (obj.wheelable) {\n\t\t\t\t\t\tprevent = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (prevent) {\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t}\n\t\t\t}, { passive: false }));\n\t\t}\n\n\t}\n\n\tprotected _delayTouchDeactivate(): void {\n\t\tif (this._touchActiveTimeout) {\n\t\t\tclearTimeout(this._touchActiveTimeout);\n\t\t}\n\t\tif (this.tapToActivateTimeout > 0) {\n\t\t\tthis._touchActiveTimeout = window.setTimeout(() => {\n\t\t\t\tthis._touchActive = false;\n\t\t\t}, this.tapToActivateTimeout);\n\t\t}\n\t}\n\n\tpublic get debugGhostView(): boolean {\n\t\treturn !!this._ghostLayer.view.parentNode;\n\t}\n\n\tpublic set debugGhostView(value: boolean) {\n\t\tif (value) {\n\t\t\tif (!this._ghostLayer.view.parentNode) {\n\t\t\t\tthis.view.appendChild(this._ghostLayer.view);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif (this._ghostLayer.view.parentNode) {\n\t\t\t\tthis._ghostLayer.view.parentNode.removeChild(this._ghostLayer.view);\n\t\t\t}\n\t\t}\n\t}\n\n\tcreateLinearGradient(x1: number, y1: number, x2: number, y2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\n\t}\n\n\tcreateRadialGradient(x1: number, y1: number, radius1: number, x2: number, y2: number, radius2: number): CanvasGradient {\n\t\treturn this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\n\t}\n\n\tcreatePattern(graphics: CanvasGraphics, background: CanvasGraphics, repetition: string, width: number, height: number): CanvasPattern {\n\t\t// const patternCanvas = document.createElement(\"canvas\");\n\t\t// const patternContext = patternCanvas.getContext(\"2d\")!;\n\t\t// patternCanvas.width = width;\n\t\t// patternCanvas.height = height;\n\t\t// if (fill) {\n\t\t// \tpatternContext.fillStyle = fill.toCSS();\n\t\t// \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\t\t// }\n\n\t\t// const layer = {\n\t\t// \tview: patternCanvas,\n\t\t// \tcontext: patternContext,\n\t\t// \tvisible: true,\n\t\t// \torder: 0,\n\t\t// \twidth: width,\n\t\t// \theight: height,\n\t\t// \tdirty: true\n\t\t// };\n\n\t\t// // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\n\t\t// // patternContext.stroke();\n\n\t\t// image.targetLayer = layer;\n\t\t// image.render(layer);\n\n\t\t//this._layerDom.appendChild(patternCanvas);\n\n\t\tthis._patternCanvas.width = width;\n\t\tthis._patternCanvas.height = height;\n\n\t\tthis._patternContext.clearRect(0, 0, width, height);\n\n\t\t// patternCanvas.style.width = width * this.resolution + \"px\";\n\t\t// patternCanvas.style.height = height * this.resolution + \"px\";\n\n\t\tbackground.renderDetached(this._patternContext);\n\t\tgraphics.renderDetached(this._patternContext);\n\n\t\treturn this._patternContext.createPattern(this._patternCanvas, repetition)!;\n\t}\n\n\n\n\tmakeContainer(): CanvasContainer {\n\t\treturn new CanvasContainer(this);\n\t}\n\n\tmakeGraphics(): CanvasGraphics {\n\t\treturn new CanvasGraphics(this);\n\t}\n\n\tmakeText(text: string, style: CanvasTextStyle): CanvasText {\n\t\treturn new CanvasText(this, text, style);\n\t}\n\n\tmakeTextStyle(): CanvasTextStyle {\n\t\treturn new CanvasTextStyle();\n\t}\n\n\tmakeRadialText(text: string, style: CanvasTextStyle): CanvasRadialText {\n\t\treturn new CanvasRadialText(this, text, style);\n\t}\n\n\tmakePicture(image: HTMLImageElement | undefined): CanvasImage {\n\t\treturn new CanvasImage(this, image);\n\t}\n\n\tresizeLayer(layer: CanvasLayer) {\n\t\tlayer.resize(this._calculatedWidth, this._calculatedHeight, this._calculatedWidth, this._calculatedHeight, this.resolution);\n\t}\n\n\tresizeGhost() {\n\t\tthis._ghostLayer.resize(this._calculatedWidth, this._calculatedHeight, this._calculatedWidth, this._calculatedHeight, this.resolution);\n\t}\n\n\tresize(realWidth: number, realHeight: number, calculatedWidth: number, calculatedHeight: number): void {\n\t\tthis._realWidth = realWidth;\n\t\tthis._realHeight = realHeight;\n\n\t\tthis._calculatedWidth = calculatedWidth;\n\t\tthis._calculatedHeight = calculatedHeight;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tlayer.dirty = true;\n\t\t\t\tthis.resizeLayer(layer);\n\t\t\t}\n\t\t});\n\n\t\tthis.resizeGhost();\n\n\t\tthis.view.style.width = calculatedWidth + \"px\";\n\t\tthis.view.style.height = calculatedHeight + \"px\";\n\t}\n\n\tprivate createDetachedLayer(willReadFrequently: boolean = false): CanvasLayer {\n\t\tconst view = document.createElement(\"canvas\");\n\t\tconst context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently })! as CanvasRenderingContext2D;\n\n\t\tconst layer = new CanvasLayer(view, context);\n\n\t\tview.style.position = \"absolute\";\n\t\tview.style.top = \"0px\";\n\t\tview.style.left = \"0px\";\n\n\t\treturn layer;\n\t}\n\n\tgetLayerByOrder(order: number): CanvasLayer | undefined {\n\t\tconst layers = this.layers;\n\t\tconst length = layers.length;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst layer = layers[i];\n\t\t\tif (layer.order == order) {\n\t\t\t\treturn layer;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetLayer(order: number, visible: boolean = true): CanvasLayer {\n\t\tlet existingLayer = this.getLayerByOrder(order);\n\t\tif (existingLayer) {\n\t\t\treturn existingLayer;\n\t\t}\n\n\t\tconst layer = this.createDetachedLayer(order == 99);\n\t\tlayer.order = order;\n\t\tlayer.visible = visible;\n\n\t\tlayer.view.className = \"am5-layer-\" + order;\n\n\t\tif (layer.visible) {\n\t\t\tthis.resizeLayer(layer);\n\t\t}\n\n\t\tconst layers = this.layers;\n\n\t\tlayers.push(layer);\n\n\t\tlayers.sort((a, b) => {\n\t\t\tif (a.order > b.order) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (a.order < b.order) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\n\t\tconst length = layers.length;\n\t\tconst layerIndex = $array.indexOf(layers, layer);\n\t\tlet next;\n\n\t\tfor (let i = layerIndex + 1; i < length; i++) {\n\t\t\tif (layers[i].visible) {\n\t\t\t\tnext = layers[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (layer.visible) {\n\t\t\tif (next === undefined) {\n\t\t\t\tthis._layerDom.appendChild(layer.view);\n\n\t\t\t} else {\n\t\t\t\tthis._layerDom.insertBefore(layer.view, next.view);\n\t\t\t}\n\t\t}\n\n\t\treturn layer;\n\t}\n\n\trender(root: CanvasDisplayObject): void {\n\n\t\tthis._dirtyLayers.length = 0;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tif (layer.dirty && layer.visible) {\n\t\t\t\t\tthis._dirtyLayers.push(layer);\n\t\t\t\t\tlayer.clear();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis._ghostLayer.clear();\n\n\t\troot.render({\n\t\t\tinactive: null,\n\t\t\tlayer: this.defaultLayer,\n\t\t});\n\n\t\tthis._ghostLayer.context.restore();\n\n\t\t//setTimeout(() => {\n\n\t\t// Remove this after the Chrome bug is fixed:\n\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer) {\n\t\t\t\tconst context = layer.context;\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(0, 0);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t});\n\n\t\t$array.each(this._dirtyLayers, (layer) => {\n\t\t\tlayer.context.restore();\n\t\t\tlayer.dirty = false;\n\t\t});\n\t\t//}, 100)\n\n\t\tif (this._hovering.size && this._lastPointerMoveEvent) {\n\t\t\tconst { events, target, native } = this._lastPointerMoveEvent;\n\n\t\t\t//this._mouseMoveThrottler.run();\n\n\t\t\t$array.each(events, (event) => {\n\t\t\t\tthis._dispatchGlobalMousemove(event, target, native);\n\t\t\t});\n\t\t}\n\t}\n\n\tpaintId(obj: CanvasDisplayObject): string {\n\t\tconst id = distributeId(++this._colorId);\n\t\tconst color = Color.fromHex(id).toCSS();\n\t\tthis._colorMap[color] = obj;\n\t\treturn color;\n\t}\n\n\t_removeObject(obj: CanvasDisplayObject): void {\n\t\tif (obj._colorId !== undefined) {\n\t\t\tdelete this._colorMap[obj._colorId];\n\t\t}\n\t}\n\n\t// protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\n\t// \treturn this._colorMap[colorId];\n\t// }\n\n\tprotected _adjustBoundingBox(bbox: DOMRect): DOMRect {\n\t\tconst margin = this._ghostLayer.margin;\n\n\t\treturn new DOMRect(\n\t\t\t-margin.left,\n\t\t\t-margin.top,\n\t\t\tbbox.width + margin.left + margin.right,\n\t\t\tbbox.height + margin.top + margin.bottom,\n\t\t);\n\t}\n\n\tpublic getEvent(originalEvent: A, adjustPoint: boolean = true): CanvasRendererEvent {\n\t\tconst bbox = this.view.getBoundingClientRect();\n\n\t\tconst x = originalEvent.clientX || 0;\n\t\tconst y = originalEvent.clientY || 0;\n\n\t\tconst widthScale = this._calculatedWidth / this._realWidth;\n\t\tconst heightScale = this._calculatedHeight / this._realHeight;\n\n\t\tconst originalPoint: IPoint = {\n\t\t\tx: x - bbox.left,\n\t\t\ty: y - bbox.top,\n\t\t};\n\n\t\tconst point: IPoint = {\n\t\t\tx: (x - (adjustPoint ? bbox.left : 0)) * widthScale,\n\t\t\ty: (y - (adjustPoint ? bbox.top : 0)) * heightScale,\n\t\t};\n\n\t\treturn new CanvasRendererEvent(\n\t\t\toriginalEvent,\n\t\t\toriginalPoint,\n\t\t\tpoint,\n\t\t\tthis._adjustBoundingBox(bbox),\n\t\t);\n\t}\n\n\t_getHitTarget(point: IPoint, bbox: DOMRect, target: Node | null): CanvasDisplayObject | undefined | false {\n\t\tif (bbox.width === 0 || bbox.height === 0 || point.x < bbox.left || point.x > bbox.right || point.y < bbox.top || point.y > bbox.bottom) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!target || !this._layerDom.contains(target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst pixel = this._ghostLayer.getImageData(point, bbox);\n\n\t\tif (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tconst colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\n\t\tconst hit = this._colorMap[colorId];\n\n\t\treturn hit;\n\t}\n\n\tgetObjectAtPoint(point: IPoint): CanvasDisplayObject | undefined {\n\t\tconst data = this._ghostLayer.getImageArray(point);\n\n\t\tif (data[0] === 0 && data[1] === 0 && data[2] === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst colorId = Color.fromRGB(data[0], data[1], data[2]).toCSS();\n\t\tconst hit = this._colorMap[colorId];\n\n\t\treturn hit;\n\t}\n\n\t_withEvents(key: Key, f: (events: IEvents) => void): void {\n\t\tconst events = this._events[key] as IEvents | undefined;\n\n\t\tif (events !== undefined) {\n\t\t\tevents.dispatching = true;\n\n\t\t\ttry {\n\t\t\t\tf(events);\n\n\t\t\t} finally {\n\t\t\t\tevents.dispatching = false;\n\n\t\t\t\tif (events.cleanup) {\n\t\t\t\t\tevents.cleanup = false;\n\n\t\t\t\t\t$array.keepIf(events.callbacks, (callback) => {\n\t\t\t\t\t\treturn !callback.disposed;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (events.callbacks.length === 0) {\n\t\t\t\t\t\tevents.disposer.dispose();\n\t\t\t\t\t\tdelete this._events[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_dispatchEventAll(key: Key, event: IRendererEvents[Key]): void {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t_dispatchEvent(key: Key, target: CanvasDisplayObject, event: IRendererEvents[Key]): boolean {\n\t\tif (!this.interactionsEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet dispatched = false;\n\n\t\tthis._withEvents(key, (events) => {\n\t\t\t$array.each(events.callbacks, (callback) => {\n\t\t\t\tif (!callback.disposed && callback.object === target) {\n\t\t\t\t\tcallback.callback.call(callback.context, event);\n\t\t\t\t\tdispatched = true;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn dispatched;\n\t}\n\n\t_dispatchMousedown(originalEvent: IPointerEvent, originalTarget: Node | null): void {\n\t\tconst button = (originalEvent).button;\n\t\tif (button != 0 && button != 2 && button != 1 && button !== undefined) {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\n\n\n\t\tif (target) {\n\t\t\tconst id = event.id;\n\n\t\t\tlet dragged = false;\n\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tconst info = { id: id, value: obj };\n\n\t\t\t\tthis._mousedown.push(info);\n\n\t\t\t\tif (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\n\t\t\t\t\t// Only dispatch the first element which matches\n\t\t\t\t\tdragged = true;\n\n\t\t\t\t\tconst has = this._dragging.some((x) => {\n\t\t\t\t\t\treturn x.value === obj && x.id === id;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!has) {\n\t\t\t\t\t\tthis._dragging.push(info);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchGlobalMousemove(originalEvent: IPointerEvent, originalTarget: Node | null, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\n\t\tevent.native = native;\n\n\t\tif (target) {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (!obj.contains(target)) {\n\t\t\t\t\tthis._hovering.delete(obj);\n\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t\t}\n\t\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (event.native) {\n\t\t\t\teachTargets(target, (obj) => {\n\t\t\t\t\tif (!this._hovering.has(obj)) {\n\t\t\t\t\t\tthis._hovering.add(obj);\n\t\t\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t\t\tobj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\n\t\t\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._dispatchEvent(\"pointerover\", obj, event);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//} else if (target === false) {\n\t\t} else {\n\t\t\tthis._hovering.forEach((obj) => {\n\t\t\t\tif (obj.cursorOverStyle) {\n\t\t\t\t\t$utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle!);\n\t\t\t\t}\n\t\t\t\tthis._dispatchEvent(\"pointerout\", obj, event);\n\t\t\t});\n\n\t\t\tthis._hovering.clear();\n\t\t}\n\t\tthis._dispatchEventAll(\"globalpointermove\", event);\n\t}\n\n\tremoveHovering(graphics: CanvasGraphics) {\n\t\tthis._hovering.delete(graphics);\n\t\tif (graphics.cursorOverStyle) {\n\t\t\t$utils.setStyle(document.body, \"cursor\", graphics._replacedCursorStyle!);\n\t\t}\n\t}\n\n\t_dispatchGlobalMouseup(originalEvent: IPointerEvent, native: boolean): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tevent.native = native;\n\t\t//const target = this._getHitTarget(event.originalPoint);\n\t\tthis._dispatchEventAll(\"globalpointerup\", event);\n\t}\n\n\t_dispatchDragMove(originalEvent: IPointerEvent): void {\n\t\tif (this._dragging.length !== 0) {\n\t\t\tconst event = this.getEvent(originalEvent);\n\t\t\tconst id = event.id;\n\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointermove\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchDragEnd(originalEvent: IPointerEvent, originalTarget: Node | null): void {\n\t\tconst button = (originalEvent).button;\n\t\tlet clickevent: \"click\" | \"rightclick\" | \"middleclick\";\n\t\tif (button == 0 || button === undefined) {\n\t\t\tclickevent = \"click\";\n\t\t}\n\t\telse if (button == 2) {\n\t\t\tclickevent = \"rightclick\";\n\t\t}\n\t\telse if (button == 1) {\n\t\t\tclickevent = \"middleclick\";\n\t\t}\n\t\telse {\n\t\t\t// Ignore non-primary mouse buttons\n\t\t\treturn;\n\t\t}\n\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst id = event.id;\n\n\t\tif (this._mousedown.length !== 0) {\n\t\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\n\n\t\t\tif (target) {\n\t\t\t\tthis._mousedown.forEach((obj) => {\n\t\t\t\t\tif (obj.id === id && obj.value.contains(target)) {\n\t\t\t\t\t\tthis._dispatchEvent(clickevent, obj.value, event);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._mousedown.length = 0;\n\t\t}\n\n\t\tif (this._dragging.length !== 0) {\n\t\t\tthis._dragging.forEach((obj) => {\n\t\t\t\tif (obj.id === id) {\n\t\t\t\t\tthis._dispatchEvent(\"pointerup\", obj.value, event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._dragging.length = 0;\n\t\t}\n\t}\n\n\t_dispatchDoubleClick(originalEvent: IPointerEvent, originalTarget: Node | null): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"dblclick\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatchWheel(originalEvent: WheelEvent, originalTarget: Node | null): void {\n\t\tconst event = this.getEvent(originalEvent);\n\t\tconst target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\n\n\t\tif (target) {\n\t\t\teachTargets(target, (obj) => {\n\t\t\t\tif (this._dispatchEvent(\"wheel\", obj, event)) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t_makeSharedEvent(key: string, f: () => IDisposer): IDisposer {\n\t\tif (this._listeners[key] === undefined) {\n\t\t\tconst listener = f();\n\n\t\t\tthis._listeners[key] = new CounterDisposer(() => {\n\t\t\t\tdelete this._listeners[key];\n\t\t\t\tlistener.dispose();\n\t\t\t});\n\t\t}\n\n\t\treturn this._listeners[key].increment();\n\t}\n\n\t_onPointerEvent(name: string, f: (event: Array, target: Node | null, native: boolean) => void): IDisposer {\n\t\tlet native = false;\n\t\tlet timer: number | null = null;\n\n\t\tfunction clear() {\n\t\t\ttimer = null;\n\t\t\tnative = false;\n\t\t}\n\n\t\treturn new MultiDisposer([\n\t\t\tnew Disposer(() => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\tclear();\n\t\t\t}),\n\n\t\t\t$utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\n\t\t\t\tnative = true;\n\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t}\n\n\t\t\t\ttimer = window.setTimeout(clear, 0);\n\t\t\t}),\n\n\t\t\tonPointerEvent(window, name, (ev, target) => {\n\t\t\t\tif (timer !== null) {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = null;\n\t\t\t\t}\n\n\t\t\t\tf(ev, target, native);\n\n\t\t\t\tnative = false;\n\t\t\t}),\n\t\t]);\n\t}\n\n\t// This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\n\t_initEvent(key: keyof IRendererEvents): IDisposer | undefined {\n\t\tswitch (key) {\n\t\t\tcase \"globalpointermove\":\n\t\t\tcase \"pointerover\":\n\t\t\tcase \"pointerout\":\n\t\t\t\treturn this._makeSharedEvent(\"pointermove\", () => {\n\t\t\t\t\tconst listener = (events: Array, target: Node | null, native: boolean) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, target, native };\n\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMousemove(event, target, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\n\t\t\t\t\treturn new MultiDisposer([\n\t\t\t\t\t\tthis._onPointerEvent(\"pointerdown\", listener),\n\t\t\t\t\t\tthis._onPointerEvent(\"pointermove\", listener),\n\t\t\t\t\t]);\n\t\t\t\t});\n\t\t\tcase \"globalpointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerup\", () => {\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (events, target, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, target, native };\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (events, target, native) => {\n\t\t\t\t\t\t$array.each(events, (event) => {\n\t\t\t\t\t\t\tthis._dispatchGlobalMouseup(event, native);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { events, target, native };\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"click\":\n\t\t\tcase \"rightclick\":\n\t\t\tcase \"middleclick\":\n\t\t\tcase \"pointerdown\":\n\t\t\t/*\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"pointerdown\", (event, target, native) => {\n\t\t\t\t\t\tthis._lastPointerMoveEvent = { event, target, native };\n\t\t\t\t\t\tthis._dispatchMousedown(event)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t*/\n\t\t\tcase \"pointermove\":\n\t\t\tcase \"pointerup\":\n\t\t\t\treturn this._makeSharedEvent(\"pointerdown\", () => {\n\t\t\t\t\t//const throttler = new Throttler();\n\n\t\t\t\t\tconst mousedown = this._onPointerEvent(\"pointerdown\", (events, target) => {\n\t\t\t\t\t\t$array.each(events, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchMousedown(ev, target);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO handle throttling properly for multitouch\n\t\t\t\t\tconst mousemove = this._onPointerEvent(\"pointermove\", (ev: Array) => {\n\t\t\t\t\t\t//throttler.throttle(() => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragMove(ev);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst mouseup = this._onPointerEvent(\"pointerup\", (ev: Array, target) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev, target);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tconst pointercancel = this._onPointerEvent(\"pointercancel\", (ev: Array, target) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDragEnd(ev, target);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn new Disposer(() => {\n\t\t\t\t\t\tmousedown.dispose();\n\t\t\t\t\t\tmousemove.dispose();\n\t\t\t\t\t\tmouseup.dispose();\n\t\t\t\t\t\tpointercancel.dispose();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"dblclick\":\n\t\t\t\treturn this._makeSharedEvent(\"dblclick\", () => {\n\t\t\t\t\treturn this._onPointerEvent(\"dblclick\", (ev, target) => {\n\t\t\t\t\t\t$array.each(ev, (ev) => {\n\t\t\t\t\t\t\tthis._dispatchDoubleClick(ev, target);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\tcase \"wheel\":\n\t\t\t\treturn this._makeSharedEvent(\"wheel\", () => {\n\t\t\t\t\treturn $utils.addEventListener(this.view, $utils.getRendererEvent(\"wheel\"), (event: WheelEvent) => {\n\t\t\t\t\t\tthis._dispatchWheel(event, $utils.getEventTarget(event));\n\t\t\t\t\t}, { passive: false });\n\t\t\t\t});\n\t\t}\n\t}\n\n\t_addEvent(object: CanvasDisplayObject, key: Key, callback: (this: C, event: IRendererEvents[Key]) => void, context?: C): IDisposer {\n\t\tlet events: IEvents | undefined = this._events[key] as any;\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._events[key] = {\n\t\t\t\tdisposer: this._initEvent(key)!,\n\t\t\t\tcallbacks: [],\n\t\t\t\tdispatching: false,\n\t\t\t\tcleanup: false,\n\t\t\t};\n\t\t}\n\n\t\tconst listener = { object, context, callback, disposed: false };\n\n\t\tevents!.callbacks.push(listener);\n\n\t\treturn new Disposer(() => {\n\t\t\tlistener.disposed = true;\n\n\t\t\tif (events!.dispatching) {\n\t\t\t\tevents!.cleanup = true;\n\n\t\t\t} else {\n\t\t\t\t$array.removeFirst(events!.callbacks, listener);\n\n\t\t\t\tif (events!.callbacks.length === 0) {\n\t\t\t\t\tevents!.disposer.dispose();\n\t\t\t\t\tdelete this._events[key];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getCanvas(root: CanvasDisplayObject, options?: ICanvasOptions): HTMLCanvasElement {\n\n\t\t// Make sure everything is rendered\n\t\tthis.render(root);\n\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tlet scale: number = this.resolution;\n\n\t\tlet canvasWidth = Math.floor(this._calculatedWidth * this.resolution);\n\t\tlet canvasHeight = Math.floor(this._calculatedHeight * this.resolution);\n\n\t\t// Check if we need to scale\n\t\tif (options.minWidth && (options.minWidth > canvasWidth)) {\n\t\t\tlet minScale = options.minWidth / canvasWidth;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.minHeight && (options.minHeight > canvasHeight)) {\n\t\t\tlet minScale = options.minHeight / canvasHeight;\n\t\t\tif (minScale > scale) {\n\t\t\t\tscale = minScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxWidth && (options.maxWidth < canvasWidth)) {\n\t\t\tlet maxScale = options.maxWidth / canvasWidth;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\tif (options.maxHeight && (options.maxHeight > canvasHeight)) {\n\t\t\tlet maxScale = options.maxHeight / canvasHeight;\n\t\t\tif (maxScale < scale) {\n\t\t\t\tscale = maxScale * this.resolution;\n\t\t\t}\n\t\t}\n\n\t\t// Check if we need to compensate for pixel ratio\n\t\tif (options.maintainPixelRatio) {\n\t\t\tscale /= this.resolution;\n\t\t}\n\n\t\t// Init list canvases to remove from DOM after export\n\t\tconst canvases: HTMLCanvasElement[] = [];\n\n\t\t// Set up new canvas for export\n\t\tlet forceRender = false;\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tif (scale != this.resolution) {\n\t\t\tforceRender = true;\n\t\t\tcanvasWidth = canvasWidth * scale / this.resolution;\n\t\t\tcanvasHeight = canvasHeight * scale / this.resolution;\n\t\t}\n\n\t\tcanvas.width = canvasWidth;\n\t\tcanvas.height = canvasHeight;\n\n\t\t// Add to DOM so it inherits CSS\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis.view.appendChild(canvas);\n\t\tcanvases.push(canvas);\n\n\t\t// Context\n\t\tconst context = canvas.getContext(\"2d\")!;\n\n\t\tlet width = 0;\n\t\tlet height = 0;\n\t\tlet needRerender = false;\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\t\t\t\tif (layer.tainted || forceRender) {\n\t\t\t\t\tneedRerender = true;\n\n\t\t\t\t\tlayer.exportableView = layer.view;\n\t\t\t\t\tlayer.exportableContext = layer.context;\n\n\t\t\t\t\tlayer.view = document.createElement(\"canvas\");\n\n\t\t\t\t\t// Add to DOM so it inherits CSS\n\t\t\t\t\tlayer.view.style.position = \"fixed\";\n\t\t\t\t\tlayer.view.style.top = \"-10000px\";\n\t\t\t\t\tthis.view.appendChild(layer.view);\n\t\t\t\t\tcanvases.push(layer.view);\n\n\t\t\t\t\tlet extraX = 0;\n\t\t\t\t\tlet extraY = 0;\n\t\t\t\t\tif (layer.margin) {\n\t\t\t\t\t\textraX += layer.margin.left || 0 + layer.margin.right || 0;\n\t\t\t\t\t\textraY += layer.margin.top || 0 + layer.margin.bottom || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer.view.width = canvasWidth + extraX;\n\t\t\t\t\tlayer.view.height = canvasHeight + extraY;\n\n\t\t\t\t\tlayer.context = layer.view.getContext(\"2d\")!;\n\n\t\t\t\t\tlayer.dirty = true;\n\t\t\t\t\tlayer.scale = scale;\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (needRerender) {\n\t\t\tthis._omitTainted = true;\n\t\t\tthis.render(root);\n\t\t\tthis._omitTainted = false;\n\t\t}\n\n\t\t$array.each(this.layers, (layer) => {\n\t\t\tif (layer && layer.visible) {\n\n\t\t\t\t// Layer is fine. Just plop it into our target canvas\n\t\t\t\tlet x = 0;\n\t\t\t\tlet y = 0;\n\t\t\t\tif (layer.margin) {\n\t\t\t\t\tx = -(layer.margin.left || 0) * this.resolution;\n\t\t\t\t\ty = -(layer.margin.top || 0) * this.resolution;\n\t\t\t\t}\n\t\t\t\tcontext.drawImage(layer.view, x, y);\n\n\t\t\t\t// Restore layer original canvas\n\t\t\t\tif (layer.exportableView) {\n\t\t\t\t\tlayer.view = layer.exportableView;\n\t\t\t\t\tlayer.exportableView = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (layer.exportableContext) {\n\t\t\t\t\tlayer.context = layer.exportableContext;\n\t\t\t\t\tlayer.exportableContext = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (width < layer.view.clientWidth) {\n\t\t\t\t\twidth = layer.view.clientWidth;\n\t\t\t\t}\n\t\t\t\tif (height < layer.view.clientHeight) {\n\t\t\t\t\theight = layer.view.clientHeight;\n\t\t\t\t}\n\n\t\t\t\tlayer.scale = undefined;\n\t\t\t}\n\t\t});\n\n\t\tcanvas.style.width = width + \"px\";\n\t\tcanvas.style.height = height + \"px\";\n\n\t\t$array.each(canvases, (canvas) => {\n\t\t\tcanvas.style.position = \"\";\n\t\t\tcanvas.style.top = \"\";\n\t\t\tthis.view.removeChild(canvas);\n\t\t})\n\t\treturn canvas;\n\t}\n}\n\n\nclass GhostLayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic margin: IMargin = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0,\n\t};\n\n\tprivate _resolution: number = 1;\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tpublic imageArray?: Uint8ClampedArray;\n\n\tconstructor() {\n\t\tthis.view = document.createElement(\"canvas\");\n\t\tthis.context = this.view.getContext(\"2d\", { alpha: false, willReadFrequently: true })! as CanvasRenderingContext2D;\n\t\tthis.context.imageSmoothingEnabled = false;\n\n\t\tthis.view.style.position = \"absolute\";\n\t\tthis.view.style.top = \"0px\";\n\t\tthis.view.style.left = \"0px\";\n\t}\n\n\tresize(canvasWidth: number, canvasHeight: number, domWidth: number, domHeight: number, resolution: number) {\n\t\tthis._resolution = resolution;\n\n\t\tcanvasWidth += (this.margin.left + this.margin.right);\n\t\tcanvasHeight += (this.margin.top + this.margin.bottom);\n\n\t\t// TODO this should take into account calculateSize\n\t\tdomWidth += (this.margin.left + this.margin.right);\n\t\tdomHeight += (this.margin.top + this.margin.bottom);\n\n\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\tthis._width = Math.floor(canvasWidth * resolution);\n\t\tthis._height = Math.floor(canvasHeight * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = domWidth + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = domHeight + \"px\";\n\t}\n\n\tgetImageData(point: IPoint, bbox: DOMRect): ImageData {\n\t\treturn this.context.getImageData(\n\t\t\t// TODO should this round ?\n\t\t\tMath.round(((point.x - bbox.left) / bbox.width) * this._width),\n\t\t\tMath.round(((point.y - bbox.top) / bbox.height) * this._height),\n\t\t\t1,\n\t\t\t1,\n\t\t);\n\t}\n\n\tgetImageArray(point: IPoint): Array {\n\n\t\tif (!this.imageArray) {\n\t\t\tthis.imageArray = this.context.getImageData(0, 0, this._width, this._height).data;\n\t\t}\n\n\t\tconst data = this.imageArray;\n\n\t\tconst x = Math.round(point.x * this._resolution);\n\t\tconst y = Math.round(point.y * this._resolution);\n\n\t\tconst i = (y * this._width + x) * 4;\n\t\treturn [data[i], data[i + 1], data[i + 2], data[i + 3]];\n\t}\n\n\tsetMargin(layers: Array): void {\n\t\tthis.margin.left = 0;\n\t\tthis.margin.right = 0;\n\t\tthis.margin.top = 0;\n\t\tthis.margin.bottom = 0;\n\n\t\t$array.each(layers, (layer) => {\n\t\t\tif (layer.margin) {\n\t\t\t\tthis.margin.left = Math.max(this.margin.left, layer.margin.left);\n\t\t\t\tthis.margin.right = Math.max(this.margin.right, layer.margin.right);\n\t\t\t\tthis.margin.top = Math.max(this.margin.top, layer.margin.top);\n\t\t\t\tthis.margin.bottom = Math.max(this.margin.bottom, layer.margin.bottom);\n\t\t\t}\n\t\t});\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.fillStyle = '#000';\n\t\tthis.context.fillRect(0, 0, this._width, this._height);\n\t}\n}\n\n\n/**\n * @ignore\n */\nexport class CanvasLayer implements ILayer {\n\tpublic view: HTMLCanvasElement;\n\tpublic context: CanvasRenderingContext2D;\n\tpublic tainted: boolean = true;\n\tpublic margin: IMargin | undefined;\n\tpublic order: number = 0;\n\tpublic visible: boolean = true;\n\tpublic width: number | undefined;\n\tpublic height: number | undefined;\n\tpublic scale: number | undefined;\n\tpublic dirty: boolean = true;\n\tpublic exportableView: HTMLCanvasElement | undefined;\n\tpublic exportableContext: CanvasRenderingContext2D | undefined;\n\n\tprivate _width: number = 0;\n\tprivate _height: number = 0;\n\n\tconstructor(view: HTMLCanvasElement, context: CanvasRenderingContext2D) {\n\t\tthis.view = view;\n\t\tthis.context = context;\n\t}\n\n\tresize(canvasWidth: number, canvasHeight: number, domWidth: number, domHeight: number, resolution: number) {\n\t\t// TODO should this take into account calculateSize ?\n\t\tif (this.width != null) {\n\t\t\tcanvasWidth = this.width;\n\t\t\tdomWidth = this.width;\n\t\t}\n\n\t\t// TODO should this take into account calculateSize ?\n\t\tif (this.height != null) {\n\t\t\tcanvasHeight = this.height;\n\t\t\tdomHeight = this.height;\n\t\t}\n\n\t\tif (this.margin) {\n\t\t\tcanvasWidth += (this.margin.left + this.margin.right);\n\t\t\tcanvasHeight += (this.margin.top + this.margin.bottom);\n\n\t\t\t// TODO this should take into account calculateSize\n\t\t\tdomWidth += (this.margin.left + this.margin.right);\n\t\t\tdomHeight += (this.margin.top + this.margin.bottom);\n\n\t\t\tthis.view.style.left = -this.margin.left + \"px\";\n\t\t\tthis.view.style.top = -this.margin.top + \"px\";\n\n\t\t} else {\n\t\t\tthis.view.style.left = \"0px\";\n\t\t\tthis.view.style.top = \"0px\";\n\t\t}\n\n\t\tthis._width = Math.floor(canvasWidth * resolution);\n\t\tthis._height = Math.floor(canvasHeight * resolution);\n\n\t\tthis.view.width = this._width;\n\t\tthis.view.style.width = domWidth + \"px\";\n\n\t\tthis.view.height = this._height;\n\t\tthis.view.style.height = domHeight + \"px\";\n\t}\n\n\tclear() {\n\t\tthis.context.save();\n\t\tthis.context.clearRect(0, 0, this._width, this._height);\n\t}\n}\n","import type { IAnimation } from \"./util/Animation\";\nimport type { Entity } from \"./util/Entity\";\nimport type { Sprite } from \"./render/Sprite\";\nimport type { Theme } from \"./Theme\";\nimport type { IPoint } from \"./util/IPoint\";\nimport type { IRenderer, IPointerEvent } from \"./render/backend/Renderer\";\nimport type { Timezone } from \"./util/Timezone\";\n\nimport { AnimationState } from \"./util/Animation\";\nimport { Container } from \"./render/Container\";\nimport { Text } from \"./render/Text\";\nimport { HorizontalLayout } from \"./render/HorizontalLayout\";\nimport { VerticalLayout } from \"./render/VerticalLayout\";\nimport { GridLayout } from \"./render/GridLayout\";\nimport { IDisposer, Disposer } from \"./util/Disposer\";\nimport { ResizeSensor } from \"./util/ResizeSensor\";\nimport { InterfaceColors } from \"./util/InterfaceColors\";\nimport { Graphics } from \"./render/Graphics\";\nimport { Rectangle } from \"./render/Rectangle\";\nimport { Tooltip } from \"./render/Tooltip\";\nimport { NumberFormatter } from \"./util/NumberFormatter\";\nimport { DateFormatter } from \"./util/DateFormatter\";\nimport { DurationFormatter } from \"./util/DurationFormatter\";\nimport { ILocale, Language } from \"./util/Language\";\nimport { Events, EventDispatcher } from \"./util/EventDispatcher\";\nimport { DefaultTheme } from \"../themes/DefaultTheme\";\nimport { CanvasRenderer } from \"./render/backend/CanvasRenderer\";\nimport { p100, percent } from \"./util/Percent\";\nimport { color } from \"./util/Color\";\nimport { populateString } from \"./util/PopulateString\";\nimport { registry } from \"./Registry\";\n\nimport * as $order from \"./util/Order\";\nimport * as $array from \"./util/Array\";\nimport * as $object from \"./util/Object\";\nimport * as $utils from \"./util/Utils\";\nimport * as $type from \"./util/Type\";\n\n\nimport en from \"../../locales/en\";\n\n\nfunction rAF(fps: number | undefined, callback: (currentTime: number) => void): void {\n\tif (fps == null) {\n\t\trequestAnimationFrame(callback);\n\n\t} else {\n\t\tsetTimeout(() => {\n\t\t\trequestAnimationFrame(callback);\n\t\t}, 1000 / fps);\n\t}\n}\n\n\n/**\n * @ignore\n */\ninterface IParent extends Entity {\n\t_prepareChildren(): void;\n\t_updateChildren(): void;\n}\n\ninterface IBounds extends Entity {\n\tdepth(): number;\n\t_updateBounds(): void;\n}\n\n\nexport interface ISize {\n\twidth: number,\n\theight: number,\n}\n\n\nexport interface IRootEvents {\n\tframestarted: {\n\t\ttimestamp: number;\n\t};\n\tframeended: {\n\t\ttimestamp: number;\n\t};\n}\n\n\nexport interface IRootSettings {\n\n\t/**\n\t * Indicates whether chart should use \"safe\" resolution on some memory-limiting\n\t * platforms such as Safari.\n\t *\n\t * @default true\n\t */\n\tuseSafeResolution?: boolean;\n\n\t/**\n\t * Allows defining margins around chart area for tooltips to go outside the\n\t * chart itself.\n\t *\n\t * @since 5.2.24\n\t */\n\ttooltipContainerBounds?: { top: number, left: number, right: number, bottom: number };\n\n\t/**\n\t * Set to `false` to disable all accessibility features.\n\t *\n\t * NOTE: once disabled, accessibility cannot be re-enabled on a live `Root` object.\n\t *\n\t * @default true\n\t * @since 5.3.0\n\t */\n\taccessible?: boolean;\n\n\t/**\n\t * If set to `true`, the parent inner `
` element will become a focusable\n\t * element.\n\t *\n\t * @since 5.3.17\n\t * @default false\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tfocusable?: boolean;\n\n\t/**\n\t * Distance between focused element and its highlight square in pixels.\n\t *\n\t * @since 5.6.0\n\t * @default 2\n\t */\n\tfocusPadding?: number;\n\n\t/**\n\t * If set to some string, it will be used as inner `
` ARIA-LABEL.\n\t *\n\t * Should be used in conjuction with `focusable`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\tariaLabel?: string;\n\n\t/**\n\t * Allows setting a \"role\" for the inner `
`.\n\t *\n\t * @since 5.3.17\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element} for more info\n\t */\n\trole?: string;\n\n\t/**\n\t * Allows for specifying a custom width / height for the chart.\n\t *\n\t * This function will be called automatically when the chart is resized.\n\t */\n\tcalculateSize?: (dimensions: DOMRect) => ISize;\n}\n\n\n// TODO implement Disposer\n/**\n * Root element of the chart.\n *\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#Root_element} for more info\n */\nexport class Root implements IDisposer {\n\n\t/**\n\t * A reference to original chart container (div element).\n\t */\n\tpublic dom: HTMLElement;\n\tpublic _inner: HTMLElement;\n\n\tprotected _settings: IRootSettings;\n\tprotected _isDirty: boolean = false;\n\tprotected _isDirtyParents: boolean = false;\n\tprotected _dirty: { [id: number]: Entity } = {};\n\tprotected _dirtyParents: { [id: number]: IParent } = {};\n\tprotected _dirtyBounds: { [id: number]: IBounds } = {};\n\tprotected _dirtyPositions: { [id: number]: Sprite } = {};\n\n\tprotected _ticker: ((currentTime: number) => void) | null = null;\n\tprotected _tickers: Array<(currentTime: number) => void> = [];\n\n\tprotected _updateTick: boolean = true;\n\n\t/**\n\t * Root's event dispatcher.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\n\t */\n\tpublic events: EventDispatcher> = new EventDispatcher();\n\n\t/**\n\t * @ignore\n\t * @todo needs description\n\t */\n\tpublic animationTime: number | null = null;\n\n\tprivate _animations: Array = [];\n\n\tpublic _renderer: IRenderer;\n\n\tpublic _rootContainer!: Container;\n\n\t/**\n\t * Main content container.\n\t */\n\tpublic container!: Container;\n\n\t/**\n\t * A [[Container]] used to display tooltips in.\n\t */\n\tpublic tooltipContainer!: Container\n\tprotected _tooltipContainerSettings!: { top: number, left: number, right: number, bottom: number };\n\n\tpublic _tooltip!: Tooltip;\n\n\t// Locale-related\n\n\t/**\n\t * @ignore\n\t */\n\tpublic language: Language = Language.new(this, {});\n\n\t/**\n\t * Locale used by the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/}\n\t */\n\tpublic locale: ILocale = en;\n\n\t// Date-time related\n\n\t/**\n\t * Use UTC when formatting date/time.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#utc-and-time-zones} for more info\n\t */\n\tpublic utc: boolean = false;\n\n\t/**\n\t * If set, will format date/time in specific time zone.\n\t *\n\t * The value should be named time zone, e.g.:\n\t * `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`.\n\t *\n\t * NOTE: Using time zone feature may noticeable affect performance of the\n\t * chart, especially with large data sets, since every single date will need\n\t * to be recalculated.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#time-zone} for more info\n\t * @since 5.1.0\n\t */\n\tpublic timezone?: Timezone;\n\n\t/**\n\t * The maximum FPS that the Root will run at.\n\t *\n\t * If `undefined` it will run at the highest FPS.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Performance} for more info\n\t */\n\tpublic fps: number | undefined;\n\n\t/**\n\t * Number formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n\t */\n\tpublic numberFormatter: NumberFormatter = NumberFormatter.new(this, {});\n\n\t/**\n\t * Date/time formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic dateFormatter: DateFormatter = DateFormatter.new(this, {});\n\n\t/**\n\t * Duration formatter.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tpublic durationFormatter: DurationFormatter = DurationFormatter.new(this, {});\n\n\n\t// Accessibility\n\n\t/**\n\t * Global tab index for using for the whole chart\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t */\n\tpublic tabindex: number = 0;\n\n\t//@todo maybe make this better\n\tprotected _tabindexes: Sprite[] = [];\n\n\tprotected _a11yD: boolean = false;\n\tprotected _focusElementDirty: boolean = false;\n\tprotected _focusElementContainer: HTMLDivElement | undefined;\n\tprotected _focusedSprite: Sprite | undefined;\n\tprotected _isShift: boolean | undefined;\n\tprotected _keyboardDragPoint: IPoint | undefined;\n\tprotected _tooltipElementContainer: HTMLDivElement | undefined;\n\tprotected _readerAlertElement: HTMLDivElement | undefined;\n\n\tpublic _logo?: Container;\n\n\tpublic _tooltipDiv: HTMLDivElement | undefined;\n\n\t/**\n\t * Used for dynamically-created CSS and JavaScript with strict source policies.\n\t */\n\tpublic nonce?: string;\n\n\t/**\n\t * Special color set to be used for various controls.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors} for more info\n\t */\n\tpublic interfaceColors: InterfaceColors;\n\n\t/**\n\t * An instance of vertical layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic verticalLayout: VerticalLayout = VerticalLayout.new(this, {});\n\n\t/**\n\t * An instance of horizontal layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default HorizontalLayout.new()\n\t */\n\tpublic horizontalLayout: VerticalLayout = HorizontalLayout.new(this, {});\n\n\t/**\n\t * An instance of grid layout object that can be used to set `layout` setting\n\t * of a [[Container]].\n\t *\n\t * @default VerticalLayout.new()\n\t */\n\tpublic gridLayout: VerticalLayout = GridLayout.new(this, {});\n\n\tpublic _paused: boolean = false;\n\n\t/**\n\t * Indicates whether chart should resized automatically when parent container\n\t * width and/or height changes.\n\t *\n\t * If disabled (`autoResize = false`) you can make the chart resize manually\n\t * by calling root element's `resize()` method.\n\t */\n\tpublic autoResize: boolean = true;\n\n\tprotected _fontHash: string = \"\";\n\n\tprotected _isDisposed: boolean = false;\n\tprotected _disposers: Array = [];\n\n\tprotected _resizeSensorDisposer?: IDisposer;\n\n\tpublic _tooltips: Array = [];\n\n\tprotected _htmlElementContainer: HTMLDivElement | undefined;\n\tprotected _htmlEnabledContainers: Container[] = [];\n\n\tprotected constructor(id: string | HTMLElement, settings: IRootSettings = {}, isReal: boolean) {\n\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis._settings = settings;\n\n\t\tif (settings.accessible == false) {\n\t\t\tthis._a11yD = true;\n\t\t}\n\n\t\tif (settings.useSafeResolution == null) {\n\t\t\tsettings.useSafeResolution = true;\n\t\t}\n\n\t\tlet resolution;\n\n\t\tif (settings.useSafeResolution) {\n\t\t\tresolution = $utils.getSafeResolution();\n\t\t}\n\n\t\tthis._renderer = new CanvasRenderer(resolution);\n\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\t$array.each(registry.rootElements, (root) => {\n\t\t\tif (root.dom === dom) {\n\t\t\t\tthrow new Error(\"You cannot have multiple Roots on the same DOM node\");\n\t\t\t}\n\t\t});\n\n\t\tthis.interfaceColors = InterfaceColors.new(this, {});\n\n\t\tif (dom === null) {\n\t\t\tthrow new Error(\"Could not find HTML element with id `\" + id + \"`\");\n\t\t}\n\n\t\tthis.dom = dom;\n\n\t\tlet inner: HTMLDivElement = document.createElement(\"div\");\n\t\tinner.style.position = \"relative\";\n\t\tinner.style.width = \"100%\";\n\t\tinner.style.height = \"100%\";\n\t\tdom.appendChild(inner);\n\n\t\tconst tooltipContainerBounds = settings.tooltipContainerBounds;\n\t\tif (tooltipContainerBounds) {\n\t\t\tthis._tooltipContainerSettings = tooltipContainerBounds;\n\t\t}\n\n\t\tthis._inner = inner;\n\n\t\tthis._updateComputedStyles();\n\n\t\tregistry.rootElements.push(this);\n\t}\n\n\n\tpublic static new(id: string | HTMLElement, settings?: IRootSettings): Root {\n\t\tconst root = new Root(id, settings, true);\n\t\troot._init();\n\t\treturn root;\n\t}\n\n\tpublic moveDOM(id: string | HTMLElement): void {\n\t\tlet dom: HTMLElement | null;\n\n\t\tif (id instanceof HTMLElement) {\n\t\t\tdom = id;\n\t\t}\n\t\telse {\n\t\t\tdom = document.getElementById(id);\n\t\t}\n\n\t\tif (dom) {\n\t\t\twhile (this.dom.childNodes.length > 0) {\n\t\t\t\tdom.appendChild(this.dom.childNodes[0]);\n\t\t\t}\n\t\t\tthis.dom = dom;\n\t\t\tthis._initResizeSensor();\n\t\t\tthis.resize();\n\t\t}\n\n\t}\n\n\n\tprotected _handleLogo(): void {\n\t\tif (this._logo) {\n\t\t\tconst w = this.dom.offsetWidth;\n\t\t\tconst h = this.dom.offsetHeight;\n\t\t\tif ((w <= 150) || (h <= 60)) {\n\t\t\t\tthis._logo.hide();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._logo.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _showBranding(): void {\n\t\tif (!this._logo) {\n\t\t\tconst logo = this.tooltipContainer.children.push(Container.new(this, {\n\t\t\t\tinteractive: true,\n\t\t\t\tinteractiveChildren: false,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tsetStateOnChildren: true,\n\t\t\t\tpaddingTop: 9,\n\t\t\t\tpaddingRight: 9,\n\t\t\t\tpaddingBottom: 9,\n\t\t\t\tpaddingLeft: 9,\n\t\t\t\tscale: .6,\n\t\t\t\ty: percent(100),\n\t\t\t\tcenterY: p100,\n\t\t\t\ttooltipText: \"Created using amCharts 5\",\n\t\t\t\ttooltipX: p100,\n\t\t\t\tcursorOverStyle: \"pointer\",\n\t\t\t\tbackground: Rectangle.new(this, {\n\t\t\t\t\tfill: color(0x474758),\n\t\t\t\t\tfillOpacity: 0,\n\t\t\t\t\ttooltipY: 5\n\t\t\t\t})\n\t\t\t}));\n\n\t\t\tconst tooltip = Tooltip.new(this, {\n\t\t\t\tpointerOrientation: \"horizontal\",\n\t\t\t\tpaddingTop: 4,\n\t\t\t\tpaddingRight: 7,\n\t\t\t\tpaddingBottom: 4,\n\t\t\t\tpaddingLeft: 7\n\t\t\t});\n\t\t\ttooltip.label.setAll({\n\t\t\t\tfontSize: 12\n\t\t\t});\n\t\t\ttooltip.get(\"background\")!.setAll({\n\t\t\t\tfill: this.interfaceColors.get(\"background\"),\n\t\t\t\tstroke: this.interfaceColors.get(\"grid\"),\n\t\t\t\tstrokeOpacity: 0.3\n\t\t\t})\n\t\t\tlogo.set(\"tooltip\", tooltip);\n\n\t\t\tlogo.events.on(\"click\", () => {\n\t\t\t\twindow.open(\"https://www.amcharts.com/\", \"_blank\");\n\t\t\t});\n\n\t\t\tlogo.states.create(\"hover\", {});\n\n\t\t\tconst m = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0xcccccc),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M5 25 L13 25h13.6c3.4 0 6 0 10.3-4.3s5.2-12 8.6-12c3.4 0 4.3 8.6 7.7 8.6M83.4 25H79.8c-3.4 0-6 0-10.3-4.3s-5.2-12-8.6-12-4.3 8.6-7.7 8.6\"\n\t\t\t}));\n\n\t\t\tm.states.create(\"hover\", { stroke: color(0x3CABFF) });\n\n\t\t\tconst a = logo.children.push(Graphics.new(this, {\n\t\t\t\tstroke: color(0x888888),\n\t\t\t\tstrokeWidth: 3,\n\t\t\t\tsvgPath: \"M83.4 25h-31C37 25 39.5 4.4 28.4 4.4S18.9 24.2 4.3 25H0\"\n\t\t\t}));\n\n\t\t\ta.states.create(\"hover\", { stroke: color(0x474758) });\n\n\t\t\t//logo.set(\"tooltip\", this._tooltip);\n\t\t\t//logo.setPrivate(\"tooltipTarget\", logo.get(\"background\"));\n\t\t\tthis._logo = logo;\n\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprotected _getRealSize(): DOMRect {\n\t\treturn this.dom.getBoundingClientRect();\n\t}\n\n\tprotected _getCalculatedSize(rect: DOMRect): ISize {\n\t\tif (this._settings.calculateSize) {\n\t\t\treturn this._settings.calculateSize(rect);\n\n\t\t} else {\n\t\t\treturn {\n\t\t\t\twidth: rect.width,\n\t\t\t\theight: rect.height,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected _init(): void {\n\n\t\tconst settings = this._settings;\n\t\tif (settings.accessible !== false) {\n\t\t\tif (settings.focusable) {\n\t\t\t\tthis._inner.setAttribute(\"focusable\", \"true\");\n\t\t\t\tthis._inner.setAttribute(\"tabindex\", this.tabindex + \"\");\n\t\t\t}\n\n\t\t\tif (settings.ariaLabel) {\n\t\t\t\tthis._inner.setAttribute(\"aria-label\", settings.ariaLabel);\n\t\t\t}\n\n\t\t\tif (settings.role) {\n\t\t\t\tthis._inner.setAttribute(\"role\", settings.role);\n\t\t\t}\n\t\t}\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst width = Math.floor(size.width);\n\t\tconst height = Math.floor(size.height);\n\n\t\tconst realWidth = Math.floor(rect.width);\n\t\tconst realHeight = Math.floor(rect.height);\n\n\t\tconst rootContainer = Container.new(this, {\n\t\t\tvisible: true,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t});\n\t\tthis._rootContainer = rootContainer;\n\t\tthis._rootContainer._defaultThemes.push(DefaultTheme.new(this));\n\n\t\tconst container = rootContainer.children.push(Container.new(this, { visible: true, width: p100, height: p100 }));\n\t\tthis.container = container;\n\n\t\trenderer.resize(realWidth, realHeight, width, height);\n\n\t\t//@todo: better appendChild - refer\n\t\tthis._inner.appendChild(renderer.view);\n\n\t\t// TODO: TMP TMP TMP for testing only, remove\n\t\t//renderer.debugGhostView = true;\n\n\t\tthis._initResizeSensor();\n\n\t\t// HTML content holder\n\t\tconst htmlElementContainer = document.createElement(\"div\");\n\t\tthis._htmlElementContainer = htmlElementContainer;\n\t\thtmlElementContainer.className = \"am5-html-container\";\n\t\thtmlElementContainer.style.position = \"absolute\";\n\t\thtmlElementContainer.style.pointerEvents = \"none\";\n\t\tif (!this._tooltipContainerSettings) {\n\t\t\thtmlElementContainer.style.overflow = \"hidden\";\n\t\t}\n\t\tthis._inner.appendChild(htmlElementContainer);\n\n\t\tif (this._a11yD !== true) {\n\n\t\t\t// Create element which is used to make announcements to screen reader\n\t\t\tconst readerAlertElement = document.createElement(\"div\");\n\t\t\treaderAlertElement.className = \"am5-reader-container\";\n\t\t\treaderAlertElement.setAttribute(\"role\", \"alert\");\n\t\t\t// readerAlertElement.style.zIndex = \"-100000\";\n\t\t\t// readerAlertElement.style.opacity = \"0\";\n\t\t\t// readerAlertElement.style.top = \"0\";\n\t\t\treaderAlertElement.style.position = \"absolute\";\n\t\t\treaderAlertElement.style.width = \"1px\";\n\t\t\treaderAlertElement.style.height = \"1px\";\n\t\t\treaderAlertElement.style.overflow = \"hidden\";\n\t\t\treaderAlertElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\t\t\tthis._readerAlertElement = readerAlertElement;\n\t\t\tthis._inner.appendChild(this._readerAlertElement);\n\n\t\t\tconst focusElementContainer = document.createElement(\"div\");\n\t\t\tfocusElementContainer.className = \"am5-focus-container\";\n\t\t\tfocusElementContainer.style.position = \"absolute\";\n\t\t\tfocusElementContainer.style.pointerEvents = \"none\";\n\t\t\tfocusElementContainer.style.top = \"0px\";\n\t\t\tfocusElementContainer.style.left = \"0px\";\n\t\t\tfocusElementContainer.style.overflow = \"hidden\";\n\t\t\tfocusElementContainer.style.width = width + \"px\";\n\t\t\tfocusElementContainer.style.height = height + \"px\";\n\n\t\t\tfocusElementContainer.setAttribute(\"role\", \"graphics-document\");\n\n\t\t\t$utils.setInteractive(focusElementContainer, false);\n\t\t\tthis._focusElementContainer = focusElementContainer;\n\t\t\tthis._inner.appendChild(this._focusElementContainer);\n\n\t\t\tconst tooltipElementContainer = document.createElement(\"div\");\n\t\t\tthis._tooltipElementContainer = tooltipElementContainer;\n\t\t\ttooltipElementContainer.className = \"am5-tooltip-container\";\n\t\t\tthis._inner.appendChild(tooltipElementContainer);\n\n\t\t\t// Add keyboard events for accessibility, e.g. simulating drag with arrow\n\t\t\t// keys and click with ENTER\n\t\t\tif ($utils.supports(\"keyboardevents\")) {\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tif (ev.keyCode == 16) {\n\t\t\t\t\t\tthis._isShift = true;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ev.keyCode == 9) {\n\t\t\t\t\t\tthis._isShift = ev.shiftKey;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(window, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tif (ev.keyCode == 16) {\n\t\t\t\t\t\tthis._isShift = false;\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"click\", () => {\n\t\t\t\t\t// Some screen readers convert ENTER (and some SPACE) press whil on\n\t\t\t\t\t// focused element to a \"click\" event, preventing actual \"keydown\"\n\t\t\t\t\t// event from firing. We're using this \"click\" event to still\n\t\t\t\t\t// generate internal click events.\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"click\"));\n\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\tif (focusedSprite) {\n\t\t\t\t\t\tif (ev.keyCode == 27) {\n\t\t\t\t\t\t\t// ESC pressed - lose current focus\n\t\t\t\t\t\t\t$utils.blur();\n\t\t\t\t\t\t\tthis._focusedSprite = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet dragOffsetX = 0;\n\t\t\t\t\t\tlet dragOffsetY = 0;\n\t\t\t\t\t\t// TODO: figure out if using bogus MouseEvent is fine, or it will\n\t\t\t\t\t\t// fail on some platforms\n\t\t\t\t\t\tswitch (ev.keyCode) {\n\t\t\t\t\t\t\tcase 13:\n\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"click\"));\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"click\", {\n\t\t\t\t\t\t\t\t\ttype: \"click\",\n\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\t\t\tdragOffsetX = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\t\t\tdragOffsetX = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\t\t\tdragOffsetY = -6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\t\tdragOffsetY = 6;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dragOffsetX != 0 || dragOffsetY != 0) {\n\t\t\t\t\t\t\tev.preventDefault();\n\n\t\t\t\t\t\t\tif (!focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t// Start dragging\n\t\t\t\t\t\t\t\tthis._keyboardDragPoint = {\n\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\ty: 0\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst downEvent = renderer.getEvent(new MouseEvent(\"mousedown\", {\n\t\t\t\t\t\t\t\t\tclientX: 0,\n\t\t\t\t\t\t\t\t\tclientY: 0\n\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"pointerdown\")) {\n\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"pointerdown\", {\n\t\t\t\t\t\t\t\t\t\ttype: \"pointerdown\",\n\t\t\t\t\t\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\t\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Move focus marker\n\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Move incrementally\n\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\tdragPoint.x += dragOffsetX;\n\t\t\t\t\t\t\tdragPoint.y += dragOffsetY;\n\t\t\t\t\t\t\tconst moveEvent = renderer.getEvent(new MouseEvent(\"mousemove\", {\n\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t}), false);\n\n\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointermove\")) {\n\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointermove\", {\n\t\t\t\t\t\t\t\t\ttype: \"globalpointermove\",\n\t\t\t\t\t\t\t\t\toriginalEvent: moveEvent.event,\n\t\t\t\t\t\t\t\t\tpoint: moveEvent.point,\n\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\t\tthis._disposers.push($utils.addEventListener(focusElementContainer, \"keyup\", (ev: KeyboardEvent) => {\n\t\t\t\t\tif (this._focusedSprite) {\n\t\t\t\t\t\tconst focusedSprite = this._focusedSprite;\n\t\t\t\t\t\tconst keyCode = ev.keyCode;\n\t\t\t\t\t\tswitch (keyCode) {\n\t\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\t\tif (focusedSprite.isDragging()) {\n\t\t\t\t\t\t\t\t\t// Simulate drag stop\n\t\t\t\t\t\t\t\t\tconst dragPoint = this._keyboardDragPoint!;\n\t\t\t\t\t\t\t\t\tconst upEvent = renderer.getEvent(new MouseEvent(\"mouseup\", {\n\t\t\t\t\t\t\t\t\t\tclientX: dragPoint.x,\n\t\t\t\t\t\t\t\t\t\tclientY: dragPoint.y\n\t\t\t\t\t\t\t\t\t}));\n\n\t\t\t\t\t\t\t\t\tif (focusedSprite.events.isEnabled(\"globalpointerup\")) {\n\t\t\t\t\t\t\t\t\t\tfocusedSprite.events.dispatch(\"globalpointerup\", {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"globalpointerup\",\n\t\t\t\t\t\t\t\t\t\t\toriginalEvent: upEvent.event,\n\t\t\t\t\t\t\t\t\t\t\tpoint: upEvent.point,\n\t\t\t\t\t\t\t\t\t\t\tsimulated: true,\n\t\t\t\t\t\t\t\t\t\t\ttarget: focusedSprite\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//this._positionFocusElement(focusedSprite);\n\t\t\t\t\t\t\t\t\tthis._keyboardDragPoint = undefined;\n\t\t\t\t\t\t\t\t\t// @todo dispatch mouseup event instead of calling dragStop?\n\t\t\t\t\t\t\t\t\t// this._dispatchEvent(\"globalpointerup\", target, upEvent);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (focusedSprite.get(\"focusableGroup\")) {\n\t\t\t\t\t\t\t\t\t// Find next item in focusable group\n\t\t\t\t\t\t\t\t\tconst group = focusedSprite.get(\"focusableGroup\");\n\t\t\t\t\t\t\t\t\tconst items = this._tabindexes.filter((item) => {\n\t\t\t\t\t\t\t\t\t\treturn item.get(\"focusableGroup\") == group && item.getPrivate(\"focusable\") !== false ? true : false;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tlet index = items.indexOf(focusedSprite);\n\t\t\t\t\t\t\t\t\tconst lastIndex = items.length - 1;\n\t\t\t\t\t\t\t\t\tindex += (keyCode == 39 || keyCode == 40) ? 1 : -1;\n\t\t\t\t\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\t\t\t\t\tindex = lastIndex;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse if (index > lastIndex) {\n\t\t\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$utils.focus(items[index].getPrivate(\"focusElement\")!.dom);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t}\n\n\t\tthis._startTicker();\n\t\tthis.setThemes([]);\n\n\t\tthis._addTooltip();\n\n\t\tif (!this._hasLicense()) {\n\t\t\tthis._showBranding();\n\t\t}\n\t}\n\n\tprivate _initResizeSensor(): void {\n\t\tif (this._resizeSensorDisposer) {\n\t\t\tthis._resizeSensorDisposer.dispose();\n\t\t}\n\t\tthis._resizeSensorDisposer = new ResizeSensor(this.dom, () => {\n\t\t\tif (this.autoResize) {\n\t\t\t\tthis.resize();\n\t\t\t}\n\t\t});\n\t\tthis._disposers.push(this._resizeSensorDisposer);\n\t}\n\n\t/**\n\t * If automatic resizing of char is disabled (`root.autoResize = false`), it\n\t * can be resized manually by calling this method.\n\t */\n\tpublic resize(): void {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\t\tconst w = Math.floor(size.width);\n\t\tconst h = Math.floor(size.height);\n\n\t\tif (w > 0 && h > 0) {\n\t\t\tconst realWidth = Math.floor(rect.width);\n\t\t\tconst realHeight = Math.floor(rect.height);\n\n\t\t\tconst htmlElementContainer = this._htmlElementContainer!;\n\t\t\thtmlElementContainer.style.width = w + \"px\";\n\t\t\thtmlElementContainer.style.height = h + \"px\";\n\n\t\t\tif (this._a11yD !== true) {\n\t\t\t\tconst focusElementContainer = this._focusElementContainer!;\n\t\t\t\tfocusElementContainer.style.width = w + \"px\";\n\t\t\t\tfocusElementContainer.style.height = h + \"px\";\n\t\t\t}\n\n\t\t\tthis._renderer.resize(realWidth, realHeight, w, h);\n\n\t\t\tconst rootContainer = this._rootContainer;\n\n\t\t\trootContainer.setPrivate(\"width\", w);\n\t\t\trootContainer.setPrivate(\"height\", h);\n\t\t\tthis._render();\n\t\t\tthis._handleLogo();\n\t\t}\n\t}\n\n\tprivate _render() {\n\t\tthis._renderer.render(this._rootContainer._display);\n\n\t\tif (this._focusElementDirty) {\n\t\t\tthis._updateCurrentFocus();\n\t\t\tthis._focusElementDirty = false;\n\t\t}\n\t}\n\n\tprivate _runTickers(currentTime: number) {\n\t\t$array.each(this._tickers, (f) => {\n\t\t\tf(currentTime);\n\t\t});\n\t}\n\n\tprivate _runAnimations(currentTime: number): boolean {\n\t\tlet running = 0;\n\n\t\t$array.keepIf(this._animations, (animation) => {\n\t\t\tconst state = animation._runAnimation(currentTime);\n\n\t\t\tif (state === AnimationState.Stopped) {\n\t\t\t\treturn false;\n\n\t\t\t} else if (state === AnimationState.Playing) {\n\t\t\t\t++running;\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\n\t\treturn running === 0;\n\t}\n\n\tprivate _runDirties() {\n\t\t//console.log(\"tick **************************************************************\");\n\t\tlet allParents: { [id: number]: IParent } = {};\n\n\t\twhile (this._isDirtyParents) {\n\t\t\t// This must be before calling _prepareChildren\n\t\t\tthis._isDirtyParents = false;\n\n\t\t\t$object.keys(this._dirtyParents).forEach((key) => {\n\t\t\t\tconst parent = this._dirtyParents[key];\n\n\t\t\t\tdelete this._dirtyParents[key];\n\n\t\t\t\tif (!parent.isDisposed()) {\n\t\t\t\t\tallParents[parent.uid] = parent;\n\t\t\t\t\tparent._prepareChildren();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$object.keys(allParents).forEach((key) => {\n\t\t\tallParents[key]._updateChildren();\n\t\t});\n\n\n\t\tconst objects: Array = [];\n\n\t\t//\t\tconsole.log(\"_beforeChanged\")\n\t\t$object.keys(this._dirty).forEach((key) => {\n\t\t\tconst entity = this._dirty[key];\n\n\t\t\tif (entity.isDisposed()) {\n\t\t\t\tdelete this._dirty[entity.uid];\n\n\t\t\t} else {\n\t\t\t\tobjects.push(entity);\n\t\t\t\tentity._beforeChanged();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_changed\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._changed();\n\t\t\tdelete this._dirty[entity.uid];\n\t\t\tentity._clearDirty();\n\t\t});\n\n\t\tthis._isDirty = false;\n\n\t\tconst depths: { [id: number]: number } = {};\n\t\tconst bounds: Array = [];\n\n\t\t$object.keys(this._dirtyBounds).forEach((key) => {\n\t\t\tconst entity = this._dirtyBounds[key];\n\n\t\t\tdelete this._dirtyBounds[key];\n\n\t\t\tif (!entity.isDisposed()) {\n\t\t\t\tdepths[entity.uid] = entity.depth();\n\t\t\t\tbounds.push(entity);\n\t\t\t}\n\t\t});\n\n\t\tthis._positionHTMLElements();\n\n\t\t// High depth -> low depth\n\t\tbounds.sort((x, y) => {\n\t\t\treturn $order.compare(depths[y.uid], depths[x.uid]);\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updateBounds\")\n\t\tbounds.forEach((entity) => {\n\t\t\tentity._updateBounds();\n\t\t});\n\n\t\t//\t\tconsole.log(\"_updatePosition\")\n\t\tconst dirtyPositions = this._dirtyPositions;\n\t\t$object.keys(dirtyPositions).forEach((key) => {\n\t\t\tconst sprite = dirtyPositions[key];\n\n\t\t\tdelete dirtyPositions[key];\n\n\t\t\tif (!sprite.isDisposed()) {\n\t\t\t\tsprite._updatePosition();\n\t\t\t}\n\t\t});\n\n\t\t//\t\tconsole.log(\"_afterChanged\")\n\t\tobjects.forEach((entity) => {\n\t\t\tentity._afterChanged();\n\t\t});\n\n\t}\n\n\tprivate _renderFrame(currentTime: number): boolean {\n\t\tif (this._updateTick) {\n\t\t\tif (this.events.isEnabled(\"framestarted\")) {\n\t\t\t\tthis.events.dispatch(\"framestarted\", {\n\t\t\t\t\ttype: \"framestarted\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._checkComputedStyles();\n\t\t\tthis._runTickers(currentTime);\n\n\t\t\tconst animationDone = this._runAnimations(currentTime);\n\n\t\t\tthis._runDirties();\n\t\t\tthis._render();\n\t\t\tthis._renderer.resetImageArray();\n\t\t\tthis._positionHTMLElements();\n\n\t\t\tif (this.events.isEnabled(\"frameended\")) {\n\t\t\t\tthis.events.dispatch(\"frameended\", {\n\t\t\t\t\ttype: \"frameended\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t\ttimestamp: currentTime,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this._tickers.length === 0 &&\n\t\t\t\tanimationDone &&\n\t\t\t\t!this._isDirty;\n\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic _runTicker(currentTime: number, now?: boolean) {\n\t\tif (!this.isDisposed()) {\n\t\t\tthis.animationTime = currentTime;\n\n\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t// No more work to do\n\t\t\tif (done) {\n\t\t\t\tthis._ticker = null;\n\t\t\t\tthis.animationTime = null;\n\n\t\t\t} else {\n\t\t\t\tif (!this._paused) {\n\t\t\t\t\tif (now) {\n\t\t\t\t\t\tthis._ticker!\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\trAF(this.fps, this._ticker!);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _runTickerNow(timeout: number = 10000) {\n\t\tif (!this.isDisposed()) {\n\t\t\tconst endTime = performance.now() + timeout;\n\n\t\t\tfor (; ;) {\n\t\t\t\tconst currentTime = performance.now();\n\n\t\t\t\tif (currentTime >= endTime) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.animationTime = currentTime;\n\n\t\t\t\tconst done = this._renderFrame(currentTime);\n\n\t\t\t\tif (done) {\n\t\t\t\t\tthis.animationTime = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _startTicker() {\n\t\tif (this._ticker === null) {\n\t\t\tthis.animationTime = null;\n\n\t\t\tthis._ticker = (currentTime) => {\n\t\t\t\tthis._runTicker(currentTime);\n\t\t\t};\n\n\t\t\trAF(this.fps, this._ticker!);\n\t\t}\n\t}\n\n\t/**\n\t * Returns whether the root is updating or not.\n\t */\n\tpublic get updateTick(): boolean {\n\t\treturn this._updateTick;\n\t}\n\n\t/**\n\t * Enables or disables the root updating.\n\t */\n\tpublic set updateTick(value: boolean) {\n\t\tthis._updateTick = value;\n\n\t\tif (value) {\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyEntity(entity: Entity) {\n\t\tif (this._dirty[entity.uid] === undefined) {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._dirty[entity.uid] = entity;\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyParent(parent: IParent) {\n\t\tif (this._dirtyParents[parent.uid] === undefined) {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._isDirtyParents = true;\n\t\t\tthis._dirtyParents[parent.uid] = parent;\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyBounds(entity: IBounds) {\n\t\tif (this._dirtyBounds[entity.uid] === undefined) {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._dirtyBounds[entity.uid] = entity;\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addDirtyPosition(sprite: Sprite) {\n\t\tif (this._dirtyPositions[sprite.uid] === undefined) {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._dirtyPositions[sprite.uid] = sprite;\n\t\t\tthis._startTicker();\n\t\t}\n\t}\n\n\tpublic _addAnimation(animation: IAnimation) {\n\t\t// TODO use numeric id instead\n\t\tif (this._animations.indexOf(animation) === -1) {\n\t\t\tthis._animations.push(animation);\n\t\t}\n\n\t\tthis._startTicker();\n\t}\n\n\tpublic _markDirty() {\n\t\tthis._isDirty = true;\n\t}\n\n\tpublic _markDirtyRedraw() {\n\t\tthis.events.once(\"frameended\", () => {\n\t\t\tthis._isDirty = true;\n\t\t\tthis._startTicker();\n\t\t})\n\t}\n\n\tpublic eachFrame(f: (currentTime: number) => void): IDisposer {\n\t\tthis._tickers.push(f);\n\t\tthis._startTicker();\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(this._tickers, f);\n\t\t});\n\t}\n\n\tpublic markDirtyGlobal(container?: Container): void {\n\t\tif (!container) {\n\t\t\tcontainer = this.container;\n\t\t}\n\t\tcontainer.walkChildren((child) => {\n\t\t\tif (child instanceof Container) {\n\t\t\t\tthis.markDirtyGlobal(child);\n\t\t\t}\n\t\t\tchild.markDirty();\n\t\t\tchild.markDirtyBounds();\n\t\t});\n\t}\n\n\t/**\n\t * Returns width of the target container, in pixels.\n\t *\n\t * @return Width\n\t */\n\tpublic width(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's width ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).width);\n\t}\n\n\t/**\n\t * Returns height of the target container, in pixels.\n\t *\n\t * @return Height\n\t */\n\tpublic height(): number {\n\t\t// TODO make this more efficient, maybe just return the renderer's height ?\n\t\treturn Math.floor(this._getCalculatedSize(this._getRealSize()).height);\n\t}\n\n\t/**\n\t * Disposes root and all the content in it.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._isDisposed) {\n\t\t\tthis._isDisposed = true;\n\n\t\t\tthis._rootContainer.dispose();\n\t\t\tthis._renderer.dispose();\n\t\t\tthis.horizontalLayout.dispose();\n\t\t\tthis.verticalLayout.dispose();\n\t\t\tthis.interfaceColors.dispose();\n\n\t\t\t$array.each(this._disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\n\t\t\tif (this._inner) {\n\t\t\t\t$utils.removeElement(this._inner);\n\t\t\t}\n\n\t\t\t$array.remove(registry.rootElements, this);\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if root element is disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._isDisposed;\n\t}\n\n\t/**\n\t * Triggers screen reader read out a message.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\n\t * @param text Alert text\n\t */\n\tpublic readerAlert(text: string): void {\n\t\tif (this._a11yD !== true) {\n\t\t\tthis._readerAlertElement!.innerHTML = $utils.stripTags(text);\n\t\t}\n\t}\n\n\t/**\n\t * Sets themes to be used for the chart.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n\t * @param themes A list of themes\n\t */\n\tpublic setThemes(themes: Array): void {\n\t\tthis._rootContainer.set(\"themes\", themes);\n\n\t\t// otherwise new themes are not applied\n\t\tconst tooltipContainer = this.tooltipContainer;\n\t\tif (tooltipContainer) {\n\t\t\ttooltipContainer._applyThemes();\n\t\t}\n\n\t\t// @todo review this\n\t\tconst interfaceColors = this.interfaceColors;\n\t\tif (interfaceColors) {\n\t\t\tinterfaceColors._applyThemes();\n\t\t}\n\n\n\t}\n\n\tprotected _addTooltip() {\n\t\tif (!this.tooltipContainer) {\n\t\t\tconst tooltipContainerSettings = this._tooltipContainerSettings;\n\t\t\tconst tooltipContainer = this._rootContainer.children.push(Container.new(this, {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tisMeasured: false,\n\t\t\t\twidth: p100,\n\t\t\t\theight: p100,\n\t\t\t\tlayer: tooltipContainerSettings ? 35 : 30,\n\t\t\t\tlayerMargin: tooltipContainerSettings ? tooltipContainerSettings : undefined\n\t\t\t}));\n\t\t\tthis.tooltipContainer = tooltipContainer;\n\n\t\t\tconst tooltip = Tooltip.new(this, {});\n\t\t\tthis.container.set(\"tooltip\", tooltip);\n\t\t\ttooltip.hide(0);\n\t\t\tthis._tooltip = tooltip;\n\t\t}\n\t}\n\n\t/**\n\t * Accesibility\n\t */\n\n\tpublic _registerTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (target.get(\"focusable\")) {\n\t\t\t$array.pushOne(this._tabindexes, target);\n\t\t}\n\t\telse {\n\t\t\t$array.remove(this._tabindexes, target);\n\t\t}\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _unregisterTabindexOrder(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tthis._invalidateTabindexes();\n\t}\n\n\tpublic _invalidateTabindexes(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tabindexes.sort((a: Sprite, b: Sprite) => {\n\t\t\tconst aindex = a.get(\"tabindexOrder\", 0);\n\t\t\tconst bindex = b.get(\"tabindexOrder\", 0);\n\t\t\tif (aindex == bindex) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse if (aindex > bindex) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t});\n\n\t\tconst groups: Array = [];\n\t\t$array.each(this._tabindexes, (item, index) => {\n\t\t\tif (!item.getPrivate(\"focusElement\")) {\n\t\t\t\tthis._makeFocusElement(index, item);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._moveFocusElement(index, item);\n\t\t\t}\n\t\t\tconst group = item.get(\"focusableGroup\");\n\t\t\tif (group && item.getPrivate(\"focusable\") !== false) {\n\t\t\t\tif (groups.indexOf(group) !== -1) {\n\t\t\t\t\t// Non-first element in the group, make it not directly focusable\n\t\t\t\t\titem.getPrivate(\"focusElement\")!.dom.setAttribute(\"tabindex\", \"-1\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tgroups.push(group);\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t}\n\n\tpublic _updateCurrentFocus(): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._focusedSprite) {\n\t\t\tthis._decorateFocusElement(this._focusedSprite);\n\t\t\tthis._positionFocusElement(this._focusedSprite);\n\t\t}\n\t}\n\n\tpublic _decorateFocusElement(target: Sprite, focusElement?: HTMLDivElement): void {\n\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Decorate with proper accessibility attributes\n\t\tif (!focusElement) {\n\t\t\tfocusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\t}\n\n\t\tif (!focusElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst role = target.get(\"role\");\n\t\tif (role) {\n\t\t\tfocusElement.setAttribute(\"role\", role);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"role\");\n\t\t}\n\n\t\tconst ariaLabel = target.get(\"ariaLabel\");\n\t\tif (ariaLabel) {\n\t\t\tconst label = populateString(target, ariaLabel);\n\t\t\tfocusElement.setAttribute(\"aria-label\", label);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-label\");\n\t\t}\n\n\t\tconst ariaLive = target.get(\"ariaLive\");\n\t\tif (ariaLive) {\n\t\t\tfocusElement.setAttribute(\"aria-live\", ariaLive);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-live\");\n\t\t}\n\n\t\tconst ariaChecked = target.get(\"ariaChecked\");\n\t\tif (ariaChecked != null && role && [\"checkbox\", \"option\", \"radio\", \"menuitemcheckbox\", \"menuitemradio\", \"treeitem\"].indexOf(role) !== -1) {\n\t\t\tfocusElement.setAttribute(\"aria-checked\", ariaChecked ? \"true\" : \"false\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-checked\");\n\t\t}\n\n\t\tif (target.get(\"ariaHidden\")) {\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\n\t\tconst ariaOrientation = target.get(\"ariaOrientation\");\n\t\tif (ariaOrientation) {\n\t\t\tfocusElement.setAttribute(\"aria-orientation\", ariaOrientation);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-orientation\");\n\t\t}\n\n\t\tconst ariaValueNow = target.get(\"ariaValueNow\");\n\t\tif (ariaValueNow) {\n\t\t\tfocusElement.setAttribute(\"aria-valuenow\", ariaValueNow);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuenow\");\n\t\t}\n\n\t\tconst ariaValueMin = target.get(\"ariaValueMin\");\n\t\tif (ariaValueMin) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemin\", ariaValueMin);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemin\");\n\t\t}\n\n\t\tconst ariaValueMax = target.get(\"ariaValueMax\");\n\t\tif (ariaValueMax) {\n\t\t\tfocusElement.setAttribute(\"aria-valuemax\", ariaValueMax);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuemax\");\n\t\t}\n\n\t\tconst ariaValueText = target.get(\"ariaValueText\");\n\t\tif (ariaValueText) {\n\t\t\tfocusElement.setAttribute(\"aria-valuetext\", ariaValueText);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-valuetext\");\n\t\t}\n\n\t\tconst ariaControls = target.get(\"ariaControls\");\n\t\tif (ariaControls) {\n\t\t\tfocusElement.setAttribute(\"aria-controls\", ariaControls);\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"aria-controls\");\n\t\t}\n\n\t\tif (target.get(\"visible\") && target.get(\"opacity\") !== 0 && target.get(\"role\") != \"tooltip\" && !target.isHidden() && target.getPrivate(\"focusable\") !== false) {\n\t\t\tif (focusElement.getAttribute(\"tabindex\") != \"-1\") {\n\t\t\t\tfocusElement.setAttribute(\"tabindex\", \"\" + this.tabindex);\n\t\t\t}\n\t\t\tfocusElement.removeAttribute(\"aria-hidden\");\n\t\t}\n\t\telse {\n\t\t\tfocusElement.removeAttribute(\"tabindex\");\n\t\t\tfocusElement.setAttribute(\"aria-hidden\", \"true\");\n\t\t}\n\t}\n\n\tpublic _makeFocusElement(index: number, target: Sprite): void {\n\n\t\tif (target.getPrivate(\"focusElement\") || this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Init\n\t\tconst focusElement = document.createElement(\"div\");\n\t\tif (target.get(\"role\") != \"tooltip\") {\n\t\t\tfocusElement.tabIndex = this.tabindex;\n\t\t}\n\t\tfocusElement.style.position = \"absolute\";\n\t\t$utils.setInteractive(focusElement, false);\n\n\t\tconst disposers: Array = [];\n\n\t\ttarget.setPrivate(\"focusElement\", {\n\t\t\tdom: focusElement,\n\t\t\tdisposers,\n\t\t});\n\n\t\tthis._decorateFocusElement(target);\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"focus\", (ev: FocusEvent) => {\n\t\t\tthis._handleFocus(ev, index);\n\t\t}));\n\n\t\tdisposers.push($utils.addEventListener(focusElement, \"blur\", (ev: FocusEvent) => {\n\t\t\tthis._handleBlur(ev, index);\n\t\t}));\n\n\t\tthis._moveFocusElement(index, target);\n\n\t}\n\n\tpublic _removeFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t$array.remove(this._tabindexes, target);\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (focusElement) {\n\t\t\tconst container = this._focusElementContainer!;\n\t\t\tcontainer.removeChild(focusElement.dom);\n\t\t\t$array.each(focusElement.disposers, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic _hideFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!;\n\t\tfocusElement.dom.style.display = \"none\";\n\t}\n\n\tprotected _moveFocusElement(index: number, target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get container\n\t\tconst container = this._focusElementContainer!;\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\n\t\tif (focusElement === this._focusElementContainer!.children[index]) {\n\t\t\t// Nothing to do\n\t\t\treturn;\n\t\t}\n\n\t\tconst next = this._focusElementContainer!.children[index + 1];\n\t\tif (next) {\n\t\t\tcontainer.insertBefore(focusElement, next);\n\t\t}\n\t\telse {\n\t\t\tcontainer.append(focusElement);\n\t\t}\n\t}\n\n\tprotected _positionFocusElement(target: Sprite): void {\n\t\tif (this._a11yD == true || target == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bounds = target.globalBounds();\n\n\t\tlet width = bounds.right == bounds.left ? target.width() : bounds.right - bounds.left;\n\t\tlet height = bounds.top == bounds.bottom ? target.height() : bounds.bottom - bounds.top;\n\n\t\tconst padding = this._settings.focusPadding !== undefined ? this._settings.focusPadding : 2;\n\n\t\tlet x = bounds.left - padding;\n\t\tlet y = bounds.top - padding;\n\n\t\tif (width < 0) {\n\t\t\tx += width;\n\t\t\twidth = Math.abs(width);\n\t\t}\n\n\t\tif (height < 0) {\n\t\t\ty += height;\n\t\t\theight = Math.abs(height);\n\t\t}\n\n\t\tconst focusElement = target.getPrivate(\"focusElement\")!.dom;\n\t\tfocusElement.style.top = y + \"px\";\n\t\tfocusElement.style.left = x + \"px\";\n\t\tfocusElement.style.width = (width + padding * 2) + \"px\";\n\t\tfocusElement.style.height = (height + padding * 2) + \"px\";\n\n\t}\n\n\tprotected _handleFocus(ev: FocusEvent, index: number): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get element\n\t\tconst focused = this._tabindexes[index];\n\n\t\t// Jump over hidden elements\n\t\tif (!focused.isVisibleDeep()) {\n\t\t\tthis._focusNext(ev.target, this._isShift ? -1 : 1);\n\t\t\treturn;\n\t\t}\n\n\t\t// Size and position\n\t\tthis._positionFocusElement(focused);\n\t\t//this._decorateFocusElement(focused);\n\n\t\tthis._focusedSprite = focused;\n\n\t\tif (focused.events.isEnabled(\"focus\")) {\n\t\t\tfocused.events.dispatch(\"focus\", {\n\t\t\t\ttype: \"focus\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _focusNext(el: HTMLDivElement, direction: 1 | -1): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focusableElements = Array.from(document.querySelectorAll([\n\t\t\t'a[href]',\n\t\t\t'area[href]',\n\t\t\t'button:not([disabled])',\n\t\t\t'details',\n\t\t\t'input:not([disabled])',\n\t\t\t'iframe:not([disabled])',\n\t\t\t'select:not([disabled])',\n\t\t\t'textarea:not([disabled])',\n\t\t\t'[contentEditable=\"\"]',\n\t\t\t'[contentEditable=\"true\"]',\n\t\t\t'[contentEditable=\"TRUE\"]',\n\t\t\t'[tabindex]:not([tabindex^=\"-\"])',\n\t\t\t//':not([disabled])'\n\t\t].join(',')));\n\n\t\tlet index = focusableElements.indexOf(el) + direction;\n\n\t\tif (index < 0) {\n\t\t\tindex = focusableElements.length - 1;\n\t\t}\n\t\telse if (index >= focusableElements.length) {\n\t\t\tindex = 0;\n\t\t}\n\n\t\t(focusableElements[index]).focus();\n\t}\n\n\tprotected _handleBlur(ev: FocusEvent, _index: number): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst focused = this._focusedSprite;\n\t\tif (focused && !focused.isDisposed() && focused.events.isEnabled(\"blur\")) {\n\t\t\tfocused.events.dispatch(\"blur\", {\n\t\t\t\ttype: \"blur\",\n\t\t\t\toriginalEvent: ev,\n\t\t\t\ttarget: focused\n\t\t\t});\n\t\t}\n\t\tthis._focusedSprite = undefined;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateTooltip(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = $utils.stripTags(target._getText());\n\t\tlet tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (target.get(\"role\") == \"tooltip\" && text != \"\") {\n\t\t\tif (!tooltipElement) {\n\t\t\t\ttooltipElement = this._makeTooltipElement(target);\n\t\t\t}\n\t\t\tif (tooltipElement.innerHTML != text) {\n\t\t\t\ttooltipElement.innerHTML = text!;\n\t\t\t}\n\t\t}\n\t\telse if (tooltipElement) {\n\t\t\ttooltipElement.remove();\n\t\t\ttarget.removePrivate(\"tooltipElement\");\n\t\t}\n\t}\n\n\tpublic _makeTooltipElement(target: Text): HTMLDivElement {\n\t\tconst container = this._tooltipElementContainer!;\n\t\tconst tooltipElement = document.createElement(\"div\");\n\t\ttooltipElement.style.position = \"absolute\";\n\t\ttooltipElement.style.width = \"1px\";\n\t\ttooltipElement.style.height = \"1px\";\n\t\ttooltipElement.style.overflow = \"hidden\";\n\t\ttooltipElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\n\n\t\t$utils.setInteractive(tooltipElement, false);\n\n\t\tthis._decorateFocusElement(target, tooltipElement);\n\t\tcontainer.append(tooltipElement);\n\t\ttarget.setPrivate(\"tooltipElement\", tooltipElement);\n\n\t\treturn tooltipElement;\n\t}\n\n\tpublic _removeTooltipElement(target: Text): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tconst tooltipElement = target.getPrivate(\"tooltipElement\");\n\t\tif (tooltipElement) {\n\t\t\tconst parent = tooltipElement.parentElement;\n\t\t\tif (parent) {\n\t\t\t\tparent.removeChild(tooltipElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _invalidateAccessibility(target: Sprite): void {\n\t\tif (this._a11yD == true) {\n\t\t\treturn;\n\t\t}\n\t\tthis._focusElementDirty = true;\n\t\tconst focusElement = target.getPrivate(\"focusElement\");\n\t\tif (target.get(\"focusable\")) {\n\t\t\tif (focusElement) {\n\t\t\t\tthis._decorateFocusElement(target);\n\t\t\t\tthis._positionFocusElement(target);\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tthis._renderer._makeFocusElement(0, this);\n\t\t\t// }\n\t\t}\n\t\telse if (focusElement) {\n\t\t\tthis._removeFocusElement(target);\n\t\t}\n\t\t//this.updateCurrentFocus();\n\t}\n\n\t/**\n\t * Returns `true` if `target` is currently focused.\n\t *\n\t * @param target Target\n\t * @return Focused?\n\t */\n\tpublic focused(target: Sprite): boolean {\n\t\treturn this._focusedSprite === target;\n\t}\n\n\t/**\n\t * Converts document coordinates to coordinates withing root element.\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic documentPointToRoot(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x - rect.left) * scaleWidth,\n\t\t\ty: (point.y - rect.top) * scaleHeight,\n\t\t};\n\t}\n\n\t/**\n\t * Converts root coordinates to document\n\t *\n\t * @param point Document point\n\t * @return Root point\n\t */\n\tpublic rootPointToDocument(point: IPoint): IPoint {\n\t\tconst rect = this._getRealSize();\n\t\tconst size = this._getCalculatedSize(rect);\n\n\t\tconst scaleWidth = size.width / rect.width;\n\t\tconst scaleHeight = size.height / rect.height;\n\n\t\treturn {\n\t\t\tx: (point.x / scaleWidth) + rect.left,\n\t\t\ty: (point.y / scaleHeight) + rect.top\n\t\t};\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic addDisposer(disposer: T): T {\n\t\tthis._disposers.push(disposer);\n\t\treturn disposer;\n\t}\n\n\tprotected _updateComputedStyles(): boolean {\n\t\tconst styles = window.getComputedStyle(this.dom);\n\t\tlet fontHash = \"\";\n\t\t$object.each(styles, (key, val) => {\n\t\t\tif ($type.isString(key) && key.match(/^font/)) {\n\t\t\t\tfontHash += val;\n\t\t\t}\n\t\t})\n\t\tconst changed = fontHash != this._fontHash;\n\t\tif (changed) {\n\t\t\tthis._fontHash = fontHash;\n\t\t}\n\t\treturn changed;\n\t}\n\n\tprotected _checkComputedStyles(): void {\n\t\tif (this._updateComputedStyles()) {\n\t\t\tthis._invalidateLabelBounds(this.container);\n\t\t}\n\t}\n\n\tprotected _invalidateLabelBounds(target: Sprite): void {\n\t\tif (target instanceof Container) {\n\t\t\ttarget.children.each((child) => {\n\t\t\t\tthis._invalidateLabelBounds(child);\n\t\t\t});\n\t\t}\n\t\telse if (target instanceof Text) {\n\t\t\ttarget.markDirtyBounds();\n\t\t}\n\t}\n\n\t/**\n\t * To all the clever heads out there. Yes, we did not make any attempts to\n\t * scramble this.\n\t *\n\t * This is a part of a tool meant for our users to manage their commercial\n\t * licenses for removal of amCharts branding from charts.\n\t *\n\t * The only legit way to do so is to purchase a commercial license for amCharts:\n\t * https://www.amcharts.com/online-store/\n\t *\n\t * Removing or altering this code, or disabling amCharts branding in any other\n\t * way is against the license and thus illegal.\n\t */\n\tprotected _hasLicense(): boolean {\n\t\tfor (let i = 0; i < registry.licenses.length; i++) {\n\t\t\tif (registry.licenses[i].match(/^AM5C.{5,}/i)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic _licenseApplied(): void {\n\t\tif (this._logo) {\n\t\t\tthis._logo.set(\"forceHidden\", true);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic get debugGhostView(): boolean {\n\t\treturn this._renderer.debugGhostView;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic set debugGhostView(value: boolean) {\n\t\tthis._renderer.debugGhostView = value;\n\t}\n\n\t/**\n\t * Set this to `true` if you need chart to require first a tap onto it before\n\t * touch gesture related functionality like zoom/pan is turned on.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default false\n\t * @since 5.2.9\n\t * @param value Needs a tap to activate touch functions\n\t */\n\tpublic set tapToActivate(value: boolean) {\n\t\tthis._renderer.tapToActivate = value;\n\t}\n\n\t/**\n\t * @return Needs a tap to activate touch functions\n\t */\n\tpublic get tapToActivate(): boolean {\n\t\treturn this._renderer.tapToActivate;\n\t}\n\n\t/**\n\t * If `tapToActivate` is set to `true`, this setting will determine number\n\t * of milliseconds the chart will stay \"active\", before releasing the\n\t * controls back to the page.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\n\t * @default 3000\n\t * @since 5.2.9\n\t * @param value Timeout\n\t */\n\tpublic set tapToActivateTimeout(value: number) {\n\t\tthis._renderer.tapToActivateTimeout = value;\n\t}\n\n\t/**\n\t * @return Timeout\n\t */\n\tpublic get tapToActivateTimeout(): number {\n\t\treturn this._renderer.tapToActivateTimeout;\n\t}\n\n\tpublic _makeHTMLElement(target: Container): HTMLDivElement {\n\n\t\t// Get container\n\t\tconst container = this._htmlElementContainer!;\n\n\t\t// Init\n\t\tconst htmlElement = document.createElement(\"div\");\n\t\ttarget.setPrivate(\"htmlElement\", htmlElement);\n\n\t\t//htmlElement.tabIndex = this.tabindex;\n\t\thtmlElement.style.position = \"absolute\";\n\t\thtmlElement.style.overflow = \"auto\";\n\t\thtmlElement.style.boxSizing = \"border-box\";\n\t\t$utils.setInteractive(htmlElement, target.get(\"interactive\", false));\n\n\t\t// Translate events\n\t\tif (target.events.isEnabled(\"click\")) {\n\t\t\t$utils.setInteractive(htmlElement, true);\n\t\t\tthis._disposers.push($utils.addEventListener(htmlElement, \"click\", (ev: IPointerEvent) => {\n\t\t\t\tconst downEvent = this._renderer.getEvent(ev);\n\t\t\t\ttarget.events.dispatch(\"click\", {\n\t\t\t\t\ttype: \"click\",\n\t\t\t\t\toriginalEvent: downEvent.event,\n\t\t\t\t\tpoint: downEvent.point,\n\t\t\t\t\tsimulated: false,\n\t\t\t\t\ttarget: target\n\t\t\t\t});\n\t\t\t}));\n\t\t}\n\n\t\tthis._positionHTMLElement(target);\n\n\t\tcontainer.append(htmlElement);\n\n\t\t$array.pushOne(this._htmlEnabledContainers, target);\n\n\t\treturn htmlElement;\n\t}\n\n\tpublic _positionHTMLElements(): void {\n\t\t$array.each(this._htmlEnabledContainers, (target) => {\n\t\t\tthis._positionHTMLElement(target);\n\t\t});\n\t}\n\n\tpublic _positionHTMLElement(target: Container): void {\n\t\tconst htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\n\t\t\t// Translate settings\n\t\t\tconst visualSettings = [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\", \"minWidth\", \"minHeight\", \"maxWidth\", \"maxHeight\"];\n\t\t\t$array.each(visualSettings, (setting: any) => {\n\t\t\t\tconst value = target.get(setting);\n\t\t\t\tif (value) {\n\t\t\t\t\thtmlElement.style[setting] = value + \"px\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\thtmlElement.style[setting] = \"\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Deal with opacity\n\t\t\tconst opacity = target.compositeOpacity();\n\t\t\tsetTimeout(() => {\n\t\t\t\thtmlElement.style.opacity = opacity + \"\";\n\t\t\t}, 10);\n\n\t\t\tconst visible = target.isVisibleDeep();\n\t\t\tif (visible) {\n\t\t\t\thtmlElement.style.display = \"block\";\n\t\t\t}\n\n\t\t\t// Deal with position\n\t\t\tconst bounds = target.globalBounds();\n\t\t\thtmlElement.style.top = (bounds.top) + \"px\";\n\t\t\thtmlElement.style.left = (bounds.left) + \"px\";\n\n\t\t\t// Use width/height if those are set\n\t\t\tconst width = target.get(\"width\");\n\t\t\tconst height = target.get(\"height\");\n\n\t\t\tlet w: number = 0;\n\t\t\tlet h: number = 0;\n\n\t\t\tif (width) {\n\t\t\t\tw = target.width();\n\t\t\t}\n\n\t\t\tif (height) {\n\t\t\t\th = target.height();\n\t\t\t}\n\n\n\t\t\tif (!width || !height) {\n\t\t\t\thtmlElement.style.position = \"fixed\";\n\t\t\t\thtmlElement.style.width = \"\";\n\t\t\t\thtmlElement.style.height = \"\";\n\t\t\t\tconst bbox = htmlElement.getBoundingClientRect();\n\t\t\t\thtmlElement.style.position = \"absolute\";\n\t\t\t\tw = bbox.width;\n\t\t\t\th = bbox.height;\n\n\t\t\t\ttarget._adjustedLocalBounds = { left: 0, right: 0, top: 0, bottom: 0 };\n\t\t\t\ttarget.setPrivate(\"minWidth\", w);\n\t\t\t\ttarget.setPrivate(\"minHeight\", h);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttarget.removePrivate(\"minWidth\");\n\t\t\t\ttarget.removePrivate(\"minHeight\");\n\t\t\t}\n\n\t\t\tif (w > 0) {\n\t\t\t\thtmlElement.style.minWidth = (w) + \"px\";\n\t\t\t}\n\t\t\tif (h > 0) {\n\t\t\t\thtmlElement.style.minHeight = (h) + \"px\";\n\t\t\t}\n\n\t\t\t// Hide or show\n\t\t\tif (!visible || opacity == 0) {\n\t\t\t\thtmlElement.style.display = \"none\";\n\t\t\t}\n\n\t\t}\n\t}\n\n\tpublic _setHTMLContent(target: Container, html: string): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (!htmlElement) {\n\t\t\thtmlElement = this._makeHTMLElement(target);\n\t\t}\n\t\tif (htmlElement.innerHTML != html) {\n\t\t\thtmlElement.innerHTML = html;\n\t\t}\n\t}\n\n\tpublic _removeHTMLContent(target: Container): void {\n\t\tlet htmlElement = target.getPrivate(\"htmlElement\");\n\t\tif (htmlElement) {\n\t\t\tthis._htmlElementContainer!.removeChild(htmlElement);\n\t\t\ttarget.removePrivate(\"htmlElement\");\n\t\t}\n\t\t$array.remove(this._htmlEnabledContainers, target);\n\t}\n}\n","import type { Entity } from \"./util/Entity\";\nimport { Template } from \"./util/Template\";\nimport type { Root } from \"./Root\";\nimport type { IClasses } from \"./Classes\";\nimport * as $order from \"./util/Order\";\nimport * as $array from \"./util/Array\";\n\nexport interface IRule {\n\ttags: Array;\n\ttemplate: Template;\n}\n\n/**\n * A base class for an amCharts theme.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n * @important\n */\nexport class Theme {\n\n\tprotected _root!: Root;\n\n\t/**\n\t * Use this method to create an instance of this class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @param root Root element\n\t * @param settings Settings\n\t * @param template Template\n\t * @return Instantiated object\n\t */\n\tstatic new(this: T, root: Root): InstanceType {\n\t\tconst x = (new this(root, true)) as InstanceType;\n\t\tx.setupDefaultRules();\n\t\treturn x;\n\t}\n\n\tconstructor(root: Root, isReal:boolean) {\n\t\tthis._root = root;\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\t}\n\n\tprotected setupDefaultRules(): void {}\n\n\tprotected _rules: { [type: string]: Array>; } = {};\n\n\t/**\n\t * Looks up the rules for a specific theme class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\n\t * @param themeClass Theme class\n\t * @return Array>\n\t */\n\tpublic _lookupRules(themeClass: string): Array> | undefined {\n\t\treturn this._rules[themeClass] as unknown as Array> | undefined;\n\t}\n\n\t/**\n\t * Creates a [[Template]] for specific theme class and tags.\n\t *\n\t * NOTE: the difference from `rule()` is that `ruleRaw()` does not do any\n\t * type checks.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\n\t * @param themeClass Theme class\n\t * @param themeTags Theme tags\n\t * @return Template\n\t */\n\tpublic ruleRaw(themeClass: string, themeTags: Array = []): Template {\n\t\tlet rules = this._rules[themeClass];\n\n\t\tif (!rules) {\n\t\t\trules = this._rules[themeClass] = [];\n\t\t}\n\n\t\tthemeTags.sort($order.compare);\n\n\t\tconst { index, found } = $array.getSortedIndex(rules, (x) => {\n\t\t\tconst order = $order.compare(x.tags.length, themeTags.length);\n\n\t\t\tif (order === 0) {\n\t\t\t\treturn $order.compareArray(x.tags, themeTags, $order.compare);\n\n\t\t\t} else {\n\t\t\t\treturn order;\n\t\t\t}\n\t\t});\n\n\t\tif (found) {\n\t\t\treturn rules[index].template as Template;\n\n\t\t} else {\n\t\t\tconst template = Template.new({});\n\n\t\t\trules.splice(index, 0, {\n\t\t\t\ttags: themeTags,\n\t\t\t\ttemplate,\n\t\t\t});\n\n\t\t\treturn template;\n\t\t}\n\t}\n\n\t/**\n\t * Creates a [[Template]] for specific theme class and tags.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\n\t * @param themeClass Theme class\n\t * @param themeTags Theme tags\n\t * @return Template\n\t */\n\tpublic rule(themeClass: K, themeTags: Array = []): Template {\n\t\treturn this.ruleRaw(themeClass, themeTags) as Template;\n\t}\n}\n","import { Entity, IEntitySettings, IEntityPrivate } from \"../../core/util/Entity\";\nimport type { Sprite } from \"../../core/render/Sprite\";\nimport type { Series } from \"../../core/render/Series\";\n\nexport interface IBulletSettings extends IEntitySettings {\n\n\t/**\n\t * Horizontal location within target element.\n\t *\n\t * 0 - left, 1 - right, or anything inbetweeen.\n\t */\n\tlocationX?: number;\n\n\t/**\n\t * Vertical location within target element.\n\t *\n\t * 0 - top, 1 - bottom, or anything inbetweeen.\n\t */\n\tlocationY?: number;\n\n\t/**\n\t * A visual element of the bullet.\n\t */\n\tsprite: Sprite;\n\n\t/**\n\t * If set to `true`, the bullet will redraw its `sprite` element whenever\n\t * anything in its parent series changes.\n\t *\n\t * @default false\n\t */\n\tdynamic?: boolean;\n\n\t/**\n\t * If set to `true`, the bullet will be automatically rotated to face\n\t * direction of line it is attached to.\n\t *\n\t * NOTE: Works only in [[Flow]] and [[MapPointSeries]] (when [[MapPoint]] is\n\t * attached to a [[MapLine]]).\n\t *\n\t * @default false\n\t */\n\tautoRotate?: boolean;\n\n\t/**\n\t * If `autoRotate` is set to `true`, value of `autoRotateAngle` will be added\n\t * to the automatically-calculated angle.\n\t */\n\tautoRotateAngle?: number;\n\n\t/**\n\t * If a field will be set, the bullet will be located at exact value of that field, not paying atention to locationY/locationX. Works with XYSeries\tonly.\n\t * If `field` is set, bullet will be placed at the specific data value, ignoring\n\t * any `locationX` and `locationY` settings.\n\t *\n\t * **IMPORTANT: this setting works with [[XYSeries]] only.**\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#By_data_field} for more info\n\t * @since 5.6.0\n\t */\n\tfield?: \"open\" | \"high\" | \"low\" | \"value\";\n\n\t/**\n\t * If set, will stack bullets instead of overlapping them.\n\t *\n\t * * `\"up` - stacks bullets upwards.\n\t * * `\"down` - stacks bullets downwards.\n\t * * `\"auto` - stacks bullets in the direction that offers more space.\n\t * \n\t * **IMPORTANT: this setting works with [[XYSeries]] only.**\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#Stacked_bullets} for more info\n\t * @since 5.6.0\n\t */\n\tstacked?: \"up\" | \"down\" | \"auto\";\n}\n\nexport interface IBulletPrivate extends IEntityPrivate {\n\thidden?: boolean;\n}\n\n/**\n * A universal placeholder for bullet elements.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/} for more info\n */\nexport class Bullet extends Entity {\n\tpublic static className: string = \"Bullet\";\n\tpublic static classNames: Array = Entity.classNames.concat([Bullet.className]);\n\n\tdeclare public _settings: IBulletSettings;\n\tdeclare public _privateSettings: IBulletPrivate;\n\n\t// used by MapPolygons where one data item can have multiple bullets of the same kind\n\tpublic _index?: number;\n\n\t/**\n\t * Target series object if it's a bullet for series.\n\t */\n\tpublic series: Series | undefined;\n\n\tprotected _afterNew() {\n\t\t// Applying themes because bullet will not have parent\n\t\tsuper._afterNewApplyThemes();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"sprite\")) {\n\t\t\tconst sprite = this.get(\"sprite\");\n\t\t\tif (sprite) {\n\t\t\t\tsprite.setAll({ position: \"absolute\", role: \"figure\" });\n\t\t\t\tthis._disposers.push(sprite);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"locationX\") || this.isDirty(\"locationY\")) {\n\t\t\tif (this.series) {\n\t\t\t\tthis.series._positionBullet(this);\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { Label } from \"../render/Label\";\nimport type { Graphics } from \"../render/Graphics\";\n\nimport { RoundedRectangle } from \"../render/RoundedRectangle\";\nimport { Container, IContainerPrivate, IContainerSettings } from \"./Container\";\n\nimport * as $utils from \"../../core/util/Utils\";\n\nexport interface IButtonSettings extends IContainerSettings {\n\n\t/**\n\t * A [[Label]] element for the button to show as a label.\n\t */\n\tlabel?: Label;\n\n\t/**\n\t * A [[Graphics]] element for the button to show as icon.\n\t */\n\ticon?: Graphics;\n\n}\n\nexport interface IButtonPrivate extends IContainerPrivate {\n}\n\n/**\n * Draws an interactive button.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/buttons/} for more info\n * @important\n */\nexport class Button extends Container {\n\tprotected _afterNew() {\n\t\tthis._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"button\"]);\n\n\t\tsuper._afterNew();\n\n\t\tif (!this._settings.background) {\n\t\t\tthis.set(\"background\", RoundedRectangle.new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this._settings.themeTags, [\"background\"])\n\t\t\t}));\n\t\t}\n\n\t\tthis.setPrivate(\"trustBounds\", true);\n\t}\n\n\tdeclare public _settings: IButtonSettings;\n\tdeclare public _privateSettings: IButtonPrivate;\n\n\tpublic static className: string = \"Button\";\n\tpublic static classNames: Array = Container.classNames.concat([Button.className]);\n\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tif (this.isDirty(\"icon\")) {\n\t\t\tconst previous = this._prevSettings.icon;\n\t\t\tconst icon = this.get(\"icon\")!;\n\t\t\tif (icon !== previous) {\n\t\t\t\tthis._disposeProperty(\"icon\");\n\n\t\t\t\tif (previous) {\n\t\t\t\t\tprevious.dispose();\n\t\t\t\t}\n\t\t\t\tif (icon) {\n\t\t\t\t\tthis.children.push(icon);\n\t\t\t\t}\n\n\t\t\t\tthis._prevSettings.icon = icon;\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"label\")) {\n\t\t\tconst previous = this._prevSettings.label;\n\t\t\tconst label = this.get(\"label\")!;\n\t\t\tif (label !== previous) {\n\t\t\t\tthis._disposeProperty(\"label\");\n\t\t\t\tif (previous) {\n\t\t\t\t\tprevious.dispose();\n\t\t\t\t}\n\n\t\t\t\tif (label) {\n\t\t\t\t\tthis.children.push(label);\n\t\t\t\t}\n\n\t\t\t\tthis._prevSettings.label = label;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { Container, IContainerSettings, IContainerPrivate, IContainerEvents } from \"../../core/render/Container\";\nimport { p100 } from \"../../core/util/Percent\";\n\nexport interface IChartSettings extends IContainerSettings {\n}\n\nexport interface IChartPrivate extends IContainerPrivate {\n}\n\nexport interface IChartEvents extends IContainerEvents {\n}\n\n/**\n * A base class for all charts.\n */\nexport abstract class Chart extends Container {\n\tpublic static className: string = \"Chart\";\n\tpublic static classNames: Array = Container.classNames.concat([Chart.className]);\n\n\tdeclare public _settings: IChartSettings;\n\tdeclare public _privateSettings: IChartPrivate;\n\tdeclare public _events: IChartEvents;\n\n\t/**\n\t * A [[Container]] chart places its elements in.\n\t * \n\t * @default Container.new()\n\t */\n\tpublic readonly chartContainer: Container = this.children.push(Container.new(this._root, { width: p100, height: p100, interactiveChildren: false }));\n\n\t/**\n\t * A [[Container]] chart places its bullets in.\n\t * \n\t * @default Container.new()\n\t */\n\tpublic readonly bulletsContainer: Container = Container.new(this._root, { interactiveChildren: false, isMeasured: false, position: \"absolute\", width: p100, height: p100 });\n\n}","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"./Graphics\";\n\nexport interface ICircleSettings extends IGraphicsSettings {\n\n\t/**\n\t * Circle radius in pixels.\n\t */\n\tradius?: number;\n\n}\n\nexport interface ICirclePrivate extends IGraphicsPrivate {\n}\n\n/**\n * Draws a circle.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\n * @important\n */\nexport class Circle extends Graphics {\n\n\tdeclare public _settings: ICircleSettings;\n\tdeclare public _privateSettings: ICirclePrivate;\n\n\tpublic static className: string = \"Circle\";\n\tpublic static classNames: Array = Graphics.classNames.concat([Circle.className]);\n\n\tpublic _afterNew(){\n\t\tsuper._afterNew();\n\t\tthis._display.isMeasured = true;\n\t\tthis.setPrivateRaw(\"trustBounds\", true);\n\t}\t\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"radius\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tpublic _changed() {\n\t\tsuper._changed();\n\n\t\tif (this._clear) {\n\t\t\tthis._display.drawCircle(0, 0, this.get(\"radius\", 10));\n\t\t}\n\t}\n}\n","import { Settings } from \"../util/Entity\";\nimport { Container, IContainerSettings, IContainerPrivate, IContainerEvents } from \"./Container\";\nimport { ListData } from \"../util/Data\";\nimport * as $array from \"../util/Array\";\nimport * as $object from \"../util/Object\";\nimport type * as $ease from \"../util/Ease\";\nimport type { Bullet } from \"./Bullet\";\n\n/**\n * A base element that holds data bit (data item) for any [[Component]].\n */\nexport class DataItem

extends Settings {\n\tdeclare public _settings: P;\n\n\t/**\n\t * A data item's owener [[Component]].\n\t */\n\tpublic component: Component;\n\n\t/**\n\t * A reference to actual item in source data this item is based on.\n\t */\n\tpublic dataContext: unknown;\n\n\t/**\n\t * @todo requires description\n\t */\n\tpublic bullets: Array | undefined;\n\n\t/**\n\t * A set of \"open\" values.\n\t */\n\tpublic open: { [index: string]: any } | undefined;\n\n\t/**\n\t * A set of \"close\" values.\n\t */\n\tpublic close: { [index: string]: any } | undefined;\n\n\tconstructor(component: Component, dataContext: unknown, settings: P) {\n\t\tsuper(settings);\n\n\t\tthis.dataContext = dataContext;\n\t\tthis.component = component;\n\t\tthis._settings.visible = true;\n\t\tthis._checkDirty();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirty(): void {\n\t\tthis.component.markDirtyValues(this);\n\t}\n\n\tpublic _startAnimation(): void {\n\t\tthis.component._root._addAnimation(this);\n\t}\n\n\tprotected _animationTime(): number | null {\n\t\treturn this.component._root.animationTime;\n\t}\n\n\tprotected _dispose() {\n\t\tif (this.component) {\n\t\t\tthis.component.disposeDataItem(this);\n\t\t}\n\t\tsuper._dispose();\n\t}\n\n\t/**\n\t * Shows a data item that's currently hidden.\n\t */\n\tpublic show(duration?: number) {\n\t\tthis.setRaw(\"visible\", true);\n\t\tif (this.component) {\n\t\t\tthis.component.showDataItem(this, duration);\n\t\t}\n\t}\n\n\t/**\n\t * Hides a data item that's currently visible.\n\t */\n\tpublic hide(duration?: number) {\n\t\tthis.setRaw(\"visible\", false);\n\t\tif (this.component) {\n\t\t\tthis.component.hideDataItem(this, duration);\n\t\t}\n\t}\n\n\tpublic isHidden() {\n\t\treturn !this.get(\"visible\");\n\t}\n}\n\n\nexport interface IComponentDataItem {\n\tvisible?: boolean;\n}\n\nexport interface IComponentSettings extends IContainerSettings {\n\n\t/**\n\t * A duration of the animation from one setting value to another, in\n\t * milliseconds.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Animating_data_values} for more info\n\t */\n\tinterpolationDuration?: number;\n\n\t/**\n\t * Easing function to use for cross setting value animations.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Easing_functions} for more info\n\t */\n\tinterpolationEasing?: $ease.Easing;\n\n}\n\nexport interface IComponentPrivate extends IContainerPrivate {\n}\n\nexport interface IComponentEvents extends IContainerEvents {\n\tdatavalidated: {}\n}\n\n/**\n * A base class for elements that make use of data.\n */\nexport abstract class Component extends Container {\n\tpublic static className: string = \"Component\";\n\tpublic static classNames: Array = Container.classNames.concat([Component.className]);\n\n\tdeclare public _settings: IComponentSettings;\n\tdeclare public _privateSettings: IComponentPrivate;\n\tdeclare public _dataItemSettings: IComponentDataItem;\n\tdeclare public _events: IComponentEvents;\n\n\tprotected _data: ListData = new ListData();\n\n\tprotected _dataItems: Array> = [];\n\n\tpublic _mainDataItems = this._dataItems;\n\n\tprotected valueFields: Array = [];\n\tprotected fields: Array = [\"id\"];\n\n\tprotected _valueFields!: Array;\n\tprotected _valueFieldsF!: { [index: string]: { fieldKey: string, workingKey: string } };\n\n\tprotected _fields!: Array;\n\tprotected _fieldsF!: { [index: string]: string };\n\n\tpublic _valuesDirty: boolean = false;\n\n\tprotected _dataChanged: boolean = false;\n\n\tprotected _dataGrouped = false;\n\n\t/**\n\t * Indicates if the component has already been initialized.\n\t */\n\tpublic inited: boolean = false;\n\n\t/**\n\t * Component's data.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\n\t */\n\tpublic set data(data: ListData) {\n\t\tdata.incrementRef();\n\t\tthis._data.decrementRef();\n\t\tthis._data = data;\n\t}\n\n\t/**\n\t * @return Data\n\t */\n\tpublic get data(): ListData {\n\t\treturn this._data;\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\t\tthis._data.decrementRef();\n\t}\n\n\tprotected _onDataClear() {\n\n\t}\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\n\t\tthis._data.incrementRef();\n\t\tthis._updateFields();\n\n\t\tthis._disposers.push(this.data.events.onAll((change) => {\n\t\t\tconst dataItems = this._mainDataItems;\n\t\t\tthis.markDirtyValues();\n\t\t\tthis._markDirtyGroup();\n\t\t\tthis._dataChanged = true;\n\t\t\tif (change.type === \"clear\") {\n\t\t\t\t$array.each(dataItems, (dataItem) => {\n\t\t\t\t\tdataItem.dispose();\n\t\t\t\t});\n\n\t\t\t\tdataItems.length = 0;\n\t\t\t\tthis._onDataClear();\n\t\t\t} else if (change.type === \"push\") {\n\t\t\t\tconst dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\n\t\t\t\tdataItems.push(dataItem);\n\t\t\t\tthis.processDataItem(dataItem);\n\n\t\t\t} else if (change.type === \"setIndex\") {\n\t\t\t\tconst dataItem = dataItems[change.index];\n\t\t\t\tconst properties = this._makeDataItem(change.newValue);\n\t\t\t\tif (dataItem.bullets && dataItem.bullets.length == 0) {\n\t\t\t\t\tdataItem.bullets = undefined;\n\t\t\t\t}\n\n\t\t\t\t$object.keys(properties).forEach((key) => {\n\t\t\t\t\tdataItem.animate({\n\t\t\t\t\t\tkey: key,\n\t\t\t\t\t\tto: properties[key],\n\t\t\t\t\t\tduration: this.get(\"interpolationDuration\", 0),\n\t\t\t\t\t\teasing: this.get(\"interpolationEasing\"),\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tdataItem.dataContext = change.newValue;\n\n\t\t\t} else if (change.type === \"insertIndex\") {\n\t\t\t\tconst dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\n\t\t\t\tdataItems.splice(change.index, 0, dataItem);\n\t\t\t\tthis.processDataItem(dataItem);\n\n\t\t\t} else if (change.type === \"removeIndex\") {\n\t\t\t\tconst dataItem = dataItems[change.index];\n\t\t\t\tdataItem.dispose();\n\t\t\t\tdataItems.splice(change.index, 1);\n\n\t\t\t} else if (change.type === \"moveIndex\") {\n\t\t\t\tconst dataItem = dataItems[change.oldIndex];\n\t\t\t\tdataItems.splice(change.oldIndex, 1);\n\t\t\t\tdataItems.splice(change.newIndex, 0, dataItem);\n\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unknown IStreamEvent type\");\n\t\t\t}\n\n\t\t\tthis._afterDataChange();\n\t\t}));\n\t}\n\n\tprotected _updateFields() {\n\t\tif (this.valueFields) {\n\t\t\tthis._valueFields = [];\n\t\t\tthis._valueFieldsF = {};\n\n\t\t\t$array.each(this.valueFields as Array, (key) => {\n\t\t\t\tconst field = this.get((key + \"Field\"));\n\t\t\t\tif (field) {\n\t\t\t\t\tthis._valueFields.push(key);\n\t\t\t\t\tthis._valueFieldsF[key as string] = { fieldKey: key + \"Field\", workingKey: key + \"Working\" };\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.fields) {\n\t\t\tthis._fields = [];\n\t\t\tthis._fieldsF = {};\n\n\t\t\t$array.each(this.fields as Array, (key) => {\n\t\t\t\tconst field = this.get((key + \"Field\"));\n\t\t\t\tif (field) {\n\t\t\t\t\tthis._fields.push(key);\n\t\t\t\t\tthis._fieldsF[key as string] = key + \"Field\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * A list of component's data items.\n\t *\n\t * @return Data items\n\t */\n\tpublic get dataItems(): Array> {\n\t\treturn this._dataItems;\n\t}\n\n\tprotected processDataItem(_dataItem: DataItem) { }\n\n\n\tpublic _makeDataItem(data: unknown): this[\"_dataItemSettings\"] {\n\t\t//const output: this[\"_dataItemSettings\"] = {};\n\t\tconst output: any = {}; // temporary to solve error\n\t\tif (this._valueFields) {\n\t\t\t$array.each(this._valueFields, (key) => {\n\t\t\t\tconst field = this.get((this._valueFieldsF[key].fieldKey));\n\t\t\t\toutput[key] = (data as any)[field];\n\n\t\t\t\toutput[this._valueFieldsF[key].workingKey] = output[key];\n\t\t\t});\n\t\t}\n\t\tif (this._fields) {\n\t\t\t$array.each(this._fields, (key) => {\n\t\t\t\tconst field = this.get((this._fieldsF[key]));\n\t\t\t\toutput[key] = (data as any)[field];\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeDataItem(data: this[\"_dataItemSettings\"]): DataItem {\n\t\tlet dataItem = new DataItem(this, undefined, data);\n\t\tthis.processDataItem(dataItem);\n\t\treturn dataItem;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic pushDataItem(data: this[\"_dataItemSettings\"]): DataItem {\n\t\tconst dataItem = this.makeDataItem(data);\n\t\tthis._mainDataItems.push(dataItem);\n\t\treturn dataItem;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(_dataItem: DataItem) {\n\n\t}\n\n\t/**\n\t * Shows component's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param _duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async showDataItem(dataItem: DataItem, _duration?: number): Promise {\n\t\tdataItem.set(\"visible\", true);\n\t}\n\n\t/**\n\t * Hides component's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param _duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async hideDataItem(dataItem: DataItem, _duration?: number): Promise {\n\t\tdataItem.set(\"visible\", false);\n\t}\n\n\tpublic _clearDirty() {\n\t\tsuper._clearDirty();\n\t\tthis._valuesDirty = false;\n\t}\n\n\tprotected _afterDataChange() {\n\n\t}\n\n\tpublic _afterChanged() {\n\t\tsuper._afterChanged();\n\t\tif (this._dataChanged) {\n\t\t\tconst type = \"datavalidated\";\n\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t\t}\n\t\t\tthis._dataChanged = false;\n\t\t}\n\n\t\tthis.inited = true;\n\t}\n\n\t/**\n\t * Forces a repaint of the element which relies on data.\n\t *\n\t * @since 5.0.21\n\t */\n\tpublic markDirtyValues(_dataItem?: DataItem) {\n\t\tthis.markDirty();\n\t\tthis._valuesDirty = true;\n\t}\n\n\tpublic _markDirtyGroup() {\n\t\tthis._dataGrouped = false;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirtySize() {\n\t\tthis._sizeDirty = true;\n\t\tthis.markDirty();\n\t}\n\n}\n","import { List } from \"./List\";\nimport type { IDisposer } from \"./Disposer\";\nimport type { Container } from \"../render/Container\";\nimport type { Sprite } from \"../render/Sprite\";\nimport * as $array from \"./Array\";\n\n/**\n * A version of [[List]] to hold children of the [[Container]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\n */\nexport class Children extends List implements IDisposer {\n\tprivate _disposed: boolean = false;\n\tprivate _container: Container;\n\tprivate _events: IDisposer;\n\n\tpublic constructor(container: Container) {\n\t\tsuper();\n\n\t\tthis._container = container;\n\n\t\tthis._events = this.events.onAll((change) => {\n\t\t\tif (change.type === \"clear\") {\n\t\t\t\t$array.each(change.oldValues, (x) => {\n\t\t\t\t\tthis._onRemoved(x);\n\t\t\t\t});\n\n\t\t\t} else if (change.type === \"push\") {\n\t\t\t\tthis._onInserted(change.newValue);\n\n\t\t\t} else if (change.type === \"setIndex\") {\n\t\t\t\tthis._onRemoved(change.oldValue);\n\t\t\t\tthis._onInserted(change.newValue, change.index);\n\n\t\t\t} else if (change.type === \"insertIndex\") {\n\t\t\t\tthis._onInserted(change.newValue, change.index);\n\n\t\t\t} else if (change.type === \"removeIndex\") {\n\t\t\t\tthis._onRemoved(change.oldValue);\n\n\t\t\t} else if (change.type === \"moveIndex\") {\n\t\t\t\tthis._onRemoved(change.value);\n\t\t\t\tthis._onInserted(change.value, change.newIndex);\n\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unknown IListEvent type\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _onInserted(child: A, index?: number) {\n\t\tchild._setParent(this._container, true);\n\t\tconst childrenDisplay = this._container._childrenDisplay;\n\t\tif (index === undefined) {\n\t\t\tchildrenDisplay.addChild(child._display);\n\n\t\t} else {\n\t\t\tchildrenDisplay.addChildAt(child._display, index);\n\t\t}\n\t}\n\n\tprotected _onRemoved(child: A) {\n\t\tthis._container._childrenDisplay.removeChild(child._display);\n\t\tthis._container.markDirtyBounds();\n\t\tthis._container.markDirty();\n\t}\n\n\t/**\n\t * Returns `true` if obejct is disposed.\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Permanently dispose this object.\n\t */\n\tpublic dispose() {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\n\t\t\tthis._events.dispose();\n\n\t\t\t$array.each(this.values, (child) => {\n\t\t\t\tchild.dispose();\n\t\t\t});\n\t\t}\n\t}\n}\n","import type { Graphics } from \"./Graphics\";\nimport type { Layout } from \"./Layout\";\nimport type { IContainer } from \"./backend/Renderer\";\nimport type { IBounds } from \"../util/IBounds\";\nimport type { Scrollbar } from \"./Scrollbar\";\nimport type { DataItem, IComponentDataItem } from \"./Component\";\n\nimport { Children } from \"../util/Children\";\nimport { Percent } from \"../util/Percent\";\nimport { Sprite, ISpriteSettings, ISpritePrivate, ISpriteEvents } from \"./Sprite\";\nimport { Rectangle } from \"./Rectangle\";\nimport { HorizontalLayout } from \"./HorizontalLayout\";\nimport { VerticalLayout } from \"./VerticalLayout\";\nimport { GridLayout } from \"./GridLayout\";\nimport { populateString } from \"../util/PopulateString\";\nimport type { IDisposer } from \"../util/Disposer\";\n\nimport * as $array from \"../util/Array\";\nimport * as $type from \"../util/Type\";\nimport * as $utils from \"../util/Utils\";\n\nexport interface IContainerSettings extends ISpriteSettings {\n\n\t/**\n\t * Left padding in pixels.\n\t */\n\tpaddingLeft?: number;\n\n\t/**\n\t * Right padding in pixels.\n\t */\n\tpaddingRight?: number;\n\n\t/**\n\t * Top padding in pixels.\n\t */\n\tpaddingTop?: number;\n\n\t/**\n\t * Bottom padding in pixels.\n\t */\n\tpaddingBottom?: number;\n\n\t/**\n\t * Background element.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/containers/#Background} for more info\n\t */\n\tbackground?: Graphics;\n\n\t/**\n\t * A method to layout\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/containers/#Layout} for more info\n\t */\n\tlayout?: Layout | null;\n\n\t/**\n\t * An element to use as a container's mask (clipping region).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/containers/#Masks} for more info\n\t */\n\tmask?: Graphics | null;\n\n\t/**\n\t * If set to `true` all content going outside the bounds of the container\n\t * will be clipped.\n\t */\n\tmaskContent?: boolean;\n\n\t/**\n\t * If set to `true` all descendants - not just direct children, but every\n\t * element in it - will become \"interactive\".\n\t */\n\tinteractiveChildren?: boolean;\n\n\t/**\n\t * If set to `true`, applying a state on a container will also apply the same\n\t * state on its children.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/containers/#States} for more info\n\t */\n\tsetStateOnChildren?: boolean;\n\n\t/**\n\t * Setting this to an instance of [[Scrollbar]] will enable vertical\n\t * scrolling of content if it does not fit into the Container.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/containers/#Scrollbar} for more info\n\t */\n\tverticalScrollbar?: Scrollbar;\n\n\t/**\n\t * If set to `true` its children will be laid out in opposite order.\n\t *\n\t * @since 5.1.1\n\t */\n\treverseChildren?: boolean;\n\n\t/**\n\t * HTML content of the container.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/html-content/} for more info\n\t * @since 5.2.11\n\t */\n\thtml?: string;\n\n}\n\nexport interface IContainerEvents extends ISpriteEvents {\n}\n\nexport interface IContainerPrivate extends ISpritePrivate {\n\n\t/**\n\t * A `

` element used for HTML content of the `Container`.\n\t */\n\thtmlElement?: HTMLDivElement;\n\n}\n\nexport interface IContainerEvents extends ISpriteEvents {\n}\n\n/**\n * A basic element that can have child elements, maintain their layout, and\n * have a background.\n *\n * It can have any [[Sprite]] element as a child, from very basic shapes, to\n * full-fledged charts.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\n * @important\n */\nexport class Container extends Sprite {\n\n\tdeclare public _settings: IContainerSettings;\n\tdeclare public _privateSettings: IContainerPrivate;\n\tdeclare public _events: IContainerEvents;\n\n\tpublic _display: IContainer = this._root._renderer.makeContainer();\n\n\tpublic _childrenDisplay: IContainer = this._root._renderer.makeContainer();\n\n\t/**\n\t * List of Container's child elements.\n\t */\n\tpublic children: Children = new Children(this);\n\n\tpublic _percentageSizeChildren: Array = [];\n\tpublic _percentagePositionChildren: Array = [];\n\n\tpublic static className: string = \"Container\";\n\tpublic static classNames: Array = Sprite.classNames.concat([Container.className]);\n\n\tpublic _prevWidth: number = 0;\n\tpublic _prevHeight: number = 0;\n\n\tprotected _contentWidth: number = 0;\n\tprotected _contentHeight: number = 0;\n\n\tprotected _contentMask: Rectangle | undefined;\n\n\tprotected _vsbd0: IDisposer | undefined;\n\tprotected _vsbd1: IDisposer | undefined;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis._display.addChild(this._childrenDisplay);\n\t}\n\n\tprotected _dispose() {\n\t\t$array.eachReverse(this.allChildren(), (child) => {\n\t\t\tchild.dispose();\n\t\t});\n\n\t\tif (this.getPrivate(\"htmlElement\")) {\n\t\t\tthis._root._removeHTMLContent(this);\n\t\t}\n\n\t\tsuper._dispose();\n\t}\n\n\tpublic _changed() {\n\t\tsuper._changed();\n\n\t\tif (this.isDirty(\"interactiveChildren\")) {\n\t\t\tthis._display.interactiveChildren = this.get(\"interactiveChildren\", false);\n\t\t}\n\n\t\tif (this.isDirty(\"layout\")) {\n\t\t\tthis._prevWidth = 0;\n\t\t\tthis._prevHeight = 0;\n\t\t\tthis.markDirtyBounds();\n\t\t\tif (this._prevSettings.layout) {\n\t\t\t\tthis.children.each((child) => {\n\t\t\t\t\tchild.removePrivate(\"x\");\n\t\t\t\t\tchild.removePrivate(\"y\");\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"paddingTop\") || this.isDirty(\"paddingBottom\") || this.isDirty(\"paddingLeft\") || this.isDirty(\"paddingRight\")) {\n\t\t\tthis.children.each((child) => {\n\t\t\t\tchild.markDirtyPosition();\n\t\t\t})\n\t\t}\n\n\t\tif (this.isDirty(\"maskContent\")) {\n\n\t\t\tconst childrenDisplay = this._childrenDisplay;\n\n\t\t\tlet contentMask = this._contentMask;\n\t\t\tif (this.get(\"maskContent\")) {\n\t\t\t\tif (!contentMask) {\n\t\t\t\t\tcontentMask = Rectangle.new(this._root, {\n\t\t\t\t\t\tx: -.5,\n\t\t\t\t\t\ty: -.5,\n\t\t\t\t\t\twidth: this.width() + 1,\n\t\t\t\t\t\theight: this.height() + 1\n\t\t\t\t\t});\n\t\t\t\t\tthis._contentMask = contentMask;\n\t\t\t\t\tchildrenDisplay.addChildAt(contentMask._display, 0);\n\t\t\t\t\tchildrenDisplay.mask = contentMask._display;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (contentMask) {\n\t\t\t\t\tchildrenDisplay.removeChild(contentMask._display);\n\t\t\t\t\tchildrenDisplay.mask = null;\n\t\t\t\t\tcontentMask.dispose();\n\t\t\t\t\tthis._contentMask = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _updateSize() {\n\t\tsuper._updateSize();\n\n\t\t$array.each(this._percentageSizeChildren, (child) => {\n\t\t\tchild._updateSize();\n\t\t});\n\n\t\t$array.each(this._percentagePositionChildren, (child) => {\n\t\t\tchild.markDirtyPosition();\n\t\t\tchild._updateSize();\n\t\t});\n\n\t\tthis.updateBackground();\n\t}\n\n\tprotected updateBackground() {\n\t\tconst background = this.get(\"background\");\n\t\tlet bounds = this._localBounds;\n\n\t\tif (bounds && !this.isHidden()) {\n\t\t\tlet x = bounds.left;\n\t\t\tlet y = bounds.top;\n\t\t\tlet w = bounds.right - x;\n\t\t\tlet h = bounds.bottom - y;\n\n\t\t\tlet maxWidth = this.get(\"maxWidth\");\n\t\t\tlet maxHeight = this.get(\"maxHeight\");\n\n\t\t\tif (maxHeight) {\n\t\t\t\tif (h > maxHeight) {\n\t\t\t\t\th = maxHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (maxWidth) {\n\t\t\t\tif (w > maxWidth) {\n\t\t\t\t\tw = maxWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet width = this.width();\n\t\t\tlet height = this.height();\n\n\t\t\tif (background) {\n\t\t\t\tbackground.setAll({ width: w, height: h, x: x, y: y });\n\t\t\t\tif (this._display.interactive) {\n\t\t\t\t\tbackground._display.interactive = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst contentMask = this._contentMask;\n\t\t\tif (contentMask) {\n\t\t\t\tcontentMask.setAll({ width: width + 1, height: height + 1 });\n\t\t\t}\n\n\t\t\tconst verticalScrollbar = this.get(\"verticalScrollbar\")!;\n\t\t\tif (verticalScrollbar) {\n\t\t\t\tverticalScrollbar.set(\"height\", height);\n\t\t\t\tverticalScrollbar.set(\"x\", width - verticalScrollbar.width() - verticalScrollbar.get(\"marginRight\", 0));\n\t\t\t\tverticalScrollbar.set(\"end\", verticalScrollbar.get(\"start\", 0) + height / this._contentHeight);\n\n\t\t\t\tconst bg = verticalScrollbar.get(\"background\");\n\t\t\t\tif (bg) {\n\t\t\t\t\tbg.setAll({ width: verticalScrollbar.width(), height: height })\n\t\t\t\t}\n\n\t\t\t\tlet visible = true;\n\t\t\t\tif (this._contentHeight <= height) {\n\t\t\t\t\tvisible = false;\n\t\t\t\t}\n\t\t\t\tverticalScrollbar.setPrivate(\"visible\", visible);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _applyThemes(force: boolean = false): boolean {\n\t\tif (super._applyThemes(force)) {\n\t\t\tthis.eachChildren((child) => {\n\t\t\t\tchild._applyThemes(force);\n\t\t\t});\n\n\t\t\treturn true;\n\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic _applyState(name: string): void {\n\t\tsuper._applyState(name);\n\n\t\tif (this.get(\"setStateOnChildren\")) {\n\t\t\tthis.eachChildren((child) => {\n\t\t\t\tchild.states.apply(name);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic _applyStateAnimated(name: string, duration?: number): void {\n\t\tsuper._applyStateAnimated(name, duration);\n\n\t\tif (this.get(\"setStateOnChildren\")) {\n\t\t\tthis.eachChildren((child) => {\n\t\t\t\tchild.states.applyAnimate(name, duration);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Returns container's inner width (width without padding) in pixels.\n\t *\n\t * @return Inner width (px)\n\t */\n\tpublic innerWidth(): number {\n\t\treturn this.width() - this.get(\"paddingRight\", 0) - this.get(\"paddingLeft\", 0);\n\t}\n\n\t/**\n\t * Returns container's inner height (height without padding) in pixels.\n\t *\n\t * @return Inner height (px)\n\t */\n\tpublic innerHeight(): number {\n\t\treturn this.height() - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0);\n\t}\n\n\tpublic _getBounds() {\n\n\t\tlet width = this.get(\"width\");\n\t\tlet height = this.get(\"height\");\n\n\t\tlet pWidth = this.getPrivate(\"width\");\n\t\tlet pHeight = this.getPrivate(\"height\");\n\n\t\tlet bounds: IBounds = {\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\tright: this.width(),\n\t\t\tbottom: this.height()\n\t\t};\n\n\t\tlet layout = this.get(\"layout\");\n\t\tlet horizontal = false;\n\t\tlet vertical = false;\n\t\tif (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\n\t\t\thorizontal = true;\n\t\t}\n\n\t\tif (layout instanceof VerticalLayout) {\n\t\t\tvertical = true;\n\t\t}\n\n\t\tif ((width != null || pWidth != null) && (height != null || pHeight != null) && !this.get(\"verticalScrollbar\")) {\n\t\t\t// void\n\t\t}\n\t\telse {\n\t\t\tlet m = Number.MAX_VALUE;\n\n\t\t\tlet l = m;\n\t\t\tlet r = -m;\n\t\t\tlet t = m;\n\t\t\tlet b = -m;\n\n\t\t\tconst paddingLeft = this.get(\"paddingLeft\", 0);\n\t\t\tconst paddingTop = this.get(\"paddingTop\", 0);\n\t\t\tconst paddingRight = this.get(\"paddingRight\", 0);\n\t\t\tconst paddingBottom = this.get(\"paddingBottom\", 0);\n\n\t\t\tthis.children.each((child) => {\n\t\t\t\tif (child.get(\"position\") != \"absolute\" && child.get(\"isMeasured\")) {\n\t\t\t\t\tlet childBounds = child.adjustedLocalBounds();\n\t\t\t\t\tlet childX = child.x();\n\t\t\t\t\tlet childY = child.y();\n\t\t\t\t\tlet cl = childX + childBounds.left;\n\t\t\t\t\tlet cr = childX + childBounds.right;\n\t\t\t\t\tlet ct = childY + childBounds.top;\n\t\t\t\t\tlet cb = childY + childBounds.bottom;\n\n\t\t\t\t\tif (horizontal) {\n\t\t\t\t\t\tcl -= child.get(\"marginLeft\", 0);\n\t\t\t\t\t\tcr += child.get(\"marginRight\", 0);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (vertical) {\n\t\t\t\t\t\tct -= child.get(\"marginTop\", 0);\n\t\t\t\t\t\tcb += child.get(\"marginBottom\", 0);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cl < l) {\n\t\t\t\t\t\tl = cl;\n\t\t\t\t\t}\n\t\t\t\t\tif (cr > r) {\n\t\t\t\t\t\tr = cr;\n\t\t\t\t\t}\n\t\t\t\t\tif (ct < t) {\n\t\t\t\t\t\tt = ct;\n\t\t\t\t\t}\n\t\t\t\t\tif (cb > b) {\n\t\t\t\t\t\tb = cb;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (l == m) {\n\t\t\t\tl = 0;\n\t\t\t}\n\n\t\t\tif (r == -m) {\n\t\t\t\tr = 0;\n\t\t\t}\n\n\t\t\tif (t == m) {\n\t\t\t\tt = 0;\n\t\t\t}\n\n\t\t\tif (b == -m) {\n\t\t\t\tb = 0;\n\t\t\t}\n\n\t\t\tbounds.left = l - paddingLeft;\n\t\t\tbounds.top = t - paddingTop;\n\t\t\tbounds.right = r + paddingRight;\n\t\t\tbounds.bottom = b + paddingBottom;\n\n\t\t\tconst minWidth = this.get(\"minWidth\");\n\n\t\t\tif($type.isNumber(minWidth) && minWidth > 0){\n\t\t\t\tif(bounds.right - bounds.left < minWidth){\n\t\t\t\t\tif(bounds.right >= minWidth){\n\t\t\t\t\t\tbounds.left = bounds.right - minWidth;\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tbounds.right = bounds.left + minWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst minHeight = this.get(\"minHeight\");\n\n\t\t\tif($type.isNumber(minHeight) && minHeight > 0){\n\t\t\t\tif(bounds.bottom - bounds.top < minHeight){\n\t\t\t\t\tif(bounds.bottom >= minHeight){\n\t\t\t\t\t\tbounds.top = bounds.bottom - minHeight;\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tbounds.bottom = bounds.top + minHeight;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\n\n\n\n\t\tthis._contentWidth = bounds.right - bounds.left;\n\t\tthis._contentHeight = bounds.bottom - bounds.top;\n\n\t\tif ($type.isNumber(width)) {\n\t\t\tbounds.left = 0;\n\t\t\tbounds.right = width;\n\t\t}\n\n\t\tif ($type.isNumber(pWidth)) {\n\t\t\tbounds.left = 0;\n\t\t\tbounds.right = pWidth;\n\t\t}\n\n\t\tif ($type.isNumber(height)) {\n\t\t\tbounds.top = 0;\n\t\t\tbounds.bottom = height;\n\t\t}\n\n\t\tif ($type.isNumber(pHeight)) {\n\t\t\tbounds.top = 0;\n\t\t\tbounds.bottom = pHeight;\n\t\t}\n\n\t\tthis._localBounds = bounds;\n\t}\n\n\tpublic _updateBounds() {\n\t\tconst layout = this.get(\"layout\");\n\n\t\tif (layout) {\n\t\t\tlayout.updateContainer(this);\n\t\t}\n\n\t\tsuper._updateBounds();\n\n\t\tthis.updateBackground();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirty(): void {\n\t\tsuper.markDirty();\n\t\tthis._root._addDirtyParent(this);\n\t}\n\n\tpublic _prepareChildren() {\n\t\tconst innerWidth = this.innerWidth();\n\t\tconst innerHeight = this.innerHeight();\n\n\t\tif (innerWidth != this._prevWidth || innerHeight != this._prevHeight) {\n\t\t\tlet layout = this.get(\"layout\");\n\t\t\tlet horizontal = false;\n\t\t\tlet vertical = false;\n\t\t\tif (layout) {\n\t\t\t\tif (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\n\t\t\t\t\thorizontal = true;\n\t\t\t\t}\n\t\t\t\tif (layout instanceof VerticalLayout) {\n\t\t\t\t\tvertical = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$array.each(this._percentageSizeChildren, (child) => {\n\t\t\t\tif (!horizontal) {\n\t\t\t\t\tlet width = child.get(\"width\");\n\t\t\t\t\tif (width instanceof Percent) {\n\t\t\t\t\t\tchild.setPrivate(\"width\", width.value * innerWidth);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!vertical) {\n\t\t\t\t\tlet height = child.get(\"height\");\n\t\t\t\t\tif (height instanceof Percent) {\n\t\t\t\t\t\tchild.setPrivate(\"height\", height.value * innerHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(this._percentagePositionChildren, (child) => {\n\t\t\t\tchild.markDirtyPosition();\n\t\t\t\tchild.markDirtyBounds();\n\t\t\t})\n\n\t\t\tthis._prevWidth = innerWidth;\n\t\t\tthis._prevHeight = innerHeight;\n\n\t\t\tthis._sizeDirty = true;\n\t\t\tthis.updateBackground();\n\t\t}\n\n\t\tthis._handleStates();\n\t}\n\n\tpublic _updateChildren() {\n\n\n\t\tif (this.isDirty(\"html\")) {\n\t\t\tconst html = this.get(\"html\");\n\t\t\tif (html && html !== \"\") {\n\t\t\t\tthis._root._setHTMLContent(this, populateString(this, this.get(\"html\", \"\")));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._root._removeHTMLContent(this);\n\t\t\t}\n\t\t\tthis._root._positionHTMLElement(this);\n\t\t}\n\n\t\tif (this.isDirty(\"verticalScrollbar\")) {\n\t\t\tconst verticalScrollbar = this.get(\"verticalScrollbar\")!;\n\t\t\tif (verticalScrollbar) {\n\t\t\t\tverticalScrollbar._setParent(this);\n\n\t\t\t\tverticalScrollbar.startGrip.setPrivate(\"visible\", false);\n\t\t\t\tverticalScrollbar.endGrip.setPrivate(\"visible\", false);\n\n\t\t\t\tthis.set(\"maskContent\", true);\n\t\t\t\tthis.set(\"paddingRight\", verticalScrollbar.width() + verticalScrollbar.get(\"marginRight\", 0) + verticalScrollbar.get(\"marginLeft\", 0));\n\n\t\t\t\tlet background = this.get(\"background\");\n\n\t\t\t\tif (!background) {\n\t\t\t\t\tbackground = this.set(\"background\", Rectangle.new(this._root, {\n\t\t\t\t\t\tthemeTags: [\"background\"],\n\t\t\t\t\t\tfillOpacity: 0,\n\t\t\t\t\t\tfill: this._root.interfaceColors.get(\"alternativeBackground\")\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis._vsbd0 = this.events.on(\"wheel\", (event) => {\n\t\t\t\t\tconst wheelEvent = event.originalEvent;\n\n\t\t\t\t\t// Ignore wheel event if it is happening on a non-chart element, e.g. if\n\t\t\t\t\t// some page element is over the chart.\n\t\t\t\t\tif ($utils.isLocalEvent(wheelEvent, this)) {\n\t\t\t\t\t\twheelEvent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet shiftY = wheelEvent.deltaY / 5000;\n\t\t\t\t\tconst start = verticalScrollbar.get(\"start\", 0);\n\t\t\t\t\tconst end = verticalScrollbar.get(\"end\", 1);\n\n\t\t\t\t\tif (start + shiftY <= 0) {\n\t\t\t\t\t\tshiftY = -start;\n\t\t\t\t\t}\n\t\t\t\t\tif (end + shiftY >= 1) {\n\t\t\t\t\t\tshiftY = 1 - end;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (start + shiftY >= 0 && end + shiftY <= 1) {\n\t\t\t\t\t\tverticalScrollbar.set(\"start\", start + shiftY);\n\t\t\t\t\t\tverticalScrollbar.set(\"end\", end + shiftY);\n\t\t\t\t\t}\n\n\t\t\t\t})\n\n\t\t\t\tthis._disposers.push(this._vsbd0);\n\n\t\t\t\tthis._vsbd1 = verticalScrollbar.events.on(\"rangechanged\", () => {\n\t\t\t\t\tlet h = this._contentHeight;\n\t\t\t\t\tconst childrenDisplay = this._childrenDisplay;\n\t\t\t\t\tconst contentMask = this._contentMask;\n\n\t\t\t\t\tchildrenDisplay.y = -verticalScrollbar.get(\"start\", 0) * h;\n\t\t\t\t\tchildrenDisplay.markDirtyLayer();\n\n\t\t\t\t\tif (contentMask) {\n\t\t\t\t\t\tcontentMask._display.y = -childrenDisplay.y;\n\t\t\t\t\t\tchildrenDisplay.mask = contentMask._display;\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\tthis._disposers.push(this._vsbd1);\n\n\t\t\t\tthis._display.addChild(verticalScrollbar._display);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst previous = this._prevSettings.verticalScrollbar\n\t\t\t\tif (previous) {\n\t\t\t\t\tthis._display.removeChild(previous._display);\n\t\t\t\t\tif (this._vsbd0) {\n\t\t\t\t\t\tthis._vsbd0.dispose();\n\t\t\t\t\t}\n\t\t\t\t\tif (this._vsbd1) {\n\t\t\t\t\t\tthis._vsbd1.dispose();\n\t\t\t\t\t}\n\t\t\t\t\tconst childrenDisplay = this._childrenDisplay;\n\t\t\t\t\tchildrenDisplay.y = 0;\n\n\t\t\t\t\tthis.setPrivate(\"height\", undefined);\n\t\t\t\t\tthis.set(\"maskContent\", false);\n\t\t\t\t\tthis.set(\"paddingRight\", undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"background\")) {\n\t\t\t// TODO maybe this should dispose ?\n\t\t\tconst previous = this._prevSettings[\"background\"];\n\t\t\tif (previous) {\n\t\t\t\tthis._display.removeChild(previous._display);\n\t\t\t}\n\n\t\t\tconst background = this.get(\"background\");\n\t\t\tif (background instanceof Sprite) {\n\t\t\t\tbackground.set(\"isMeasured\", false);\n\t\t\t\tbackground._setParent(this);\n\t\t\t\tthis._display.addChildAt(background._display, 0);\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"mask\")) {\n\n\t\t\tconst mask = this.get(\"mask\");\n\n\t\t\tconst previous = this._prevSettings[\"mask\"];\n\t\t\tif (previous) {\n\t\t\t\tthis._display.removeChild(previous._display);\n\t\t\t\tif (previous != mask) {\n\t\t\t\t\tprevious.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mask) {\n\t\t\t\tconst parent = mask.parent;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.children.removeValue(mask);\n\t\t\t\t}\n\n\t\t\t\tmask._setParent(this);\n\t\t\t\tthis._display.addChildAt(mask._display, 0);\n\t\t\t\tthis._childrenDisplay.mask = mask._display;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _processTemplateField(): void {\n\t\tsuper._processTemplateField();\n\t\tthis.children.each((child) => {\n\t\t\tchild._processTemplateField();\n\t\t})\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic walkChildren(f: (child: Sprite) => void): void {\n\t\tthis.children.each((child) => {\n\t\t\tif (child instanceof Container) {\n\t\t\t\tchild.walkChildren(f);\n\t\t\t}\n\t\t\tf(child);\n\t\t});\n\t}\n\n\tpublic eachChildren(f: (child: Sprite) => void): void {\n\t\tconst background = this.get(\"background\");\n\t\tif (background) {\n\t\t\tf(background);\n\t\t}\n\n\t\tconst verticalScrollbar = this.get(\"verticalScrollbar\");\n\t\tif (verticalScrollbar) {\n\t\t\tf(verticalScrollbar);\n\t\t}\n\n\t\tconst mask = this.get(\"mask\");\n\t\tif (mask) {\n\t\t\tf(mask);\n\t\t}\n\n\t\tthis.children.values.forEach((child) => {\n\t\t\tf(child);\n\t\t});\n\t}\n\n\tpublic allChildren(): Array {\n\t\tconst output: Array = [];\n\n\t\tthis.eachChildren((x) => {\n\t\t\toutput.push(x);\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tpublic _setDataItem(dataItem?: DataItem): void {\n\t\tconst updated = (dataItem !== this._dataItem);\n\t\tsuper._setDataItem(dataItem);\n\t\tconst html = this.get(\"html\", \"\");\n\t\tif (html && html !== \"\" && updated) {\n\t\t\tthis._root._setHTMLContent(this, populateString(this, html));\n\t\t}\n\t}\n}\n","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"./Graphics\";\r\n\r\nexport interface IEllipseSettings extends IGraphicsSettings {\r\n\r\n\t/**\r\n\t * The ellipse's major-axis radius. Must be non-negative.\r\n\t */\r\n\r\n\tradiusX: number\r\n\r\n\t/**\r\n\t * The ellipse's minor-axis radius. Must be non-negative.\r\n\t */\r\n\tradiusY: number\r\n}\r\n\r\nexport interface IEllipsePrivate extends IGraphicsPrivate {\r\n}\r\n\r\n/**\r\n * Draws a Ellipse.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Ellipse extends Graphics {\r\n\r\n\tdeclare public _settings: IEllipseSettings;\r\n\tdeclare public _privateSettings: IEllipsePrivate;\r\n\r\n\tpublic static className: string = \"Ellipse\";\r\n\tpublic static classNames: Array = Graphics.classNames.concat([Ellipse.className]);\r\n\r\n\tpublic _beforeChanged() {\r\n\t\tsuper._beforeChanged();\r\n\r\n\t\tif (this.isDirty(\"radiusX\") || this.isDirty(\"radiusY\") || this.isDirty(\"rotation\")) {\r\n\t\t\tthis._clear = true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic _changed() {\r\n\t\tsuper._changed();\r\n\r\n\t\tif (this._clear) {\r\n\t\t\tthis._display.drawEllipse(0, 0, Math.abs(this.get(\"radiusX\")), Math.abs(this.get(\"radiusY\")));\r\n\t\t}\r\n\t}\r\n}\r\n","import type { Color } from \"../util/Color\";\nimport type { Pattern } from \"../render/patterns/Pattern\";\nimport type { Gradient } from \"../render/gradients/Gradient\";\n\nimport { PicturePattern } from \"../render/patterns/PicturePattern\";\nimport { ISpriteSettings, ISpritePrivate, ISpriteEvents, Sprite } from \"./Sprite\";\nimport { IGraphics, BlendMode } from \"./backend/Renderer\";\n\nimport * as $type from \"../util/Type\";\nimport * as $array from \"../util/Array\";\n\n\nexport const visualSettings = [\"fill\", \"fillOpacity\", \"stroke\", \"strokeWidth\", \"strokeOpacity\", \"fillPattern\", \"strokePattern\", \"fillGradient\", \"strokeGradient\", \"strokeDasharray\", \"strokeDashoffset\", \"shadowBlur\", \"shadowColor\", \"shadowOpacity\", \"shadowOffsetX\", \"shadowOffsetY\", \"blur\", \"sepia\", \"invert\", \"brightness\", \"hue\", \"contrast\", \"saturate\"];\n\nexport interface IGraphicsSettings extends ISpriteSettings {\n\n\t/**\n\t * Fill color.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/} for more information\n\t */\n\tfill?: Color;\n\n\t/**\n\t * Stroke (border or line) color.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/} for more information\n\t */\n\tstroke?: Color;\n\n\t/**\n\t * Fill pattern.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more information\n\t */\n\tfillPattern?: Pattern;\n\n\t/**\n\t * Stroke (border or line) pattern.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more information\n\t */\n\tstrokePattern?: Pattern;\n\n\t/**\n\t * Fill gradient.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more information\n\t */\n\tfillGradient?: Gradient;\n\n\t/**\n\t * Stroke (border or line) gradient.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more information\n\t */\n\tstrokeGradient?: Gradient;\n\n\t/**\n\t * Stroke (border or line) dash settings.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Dashed_lines} for more information\n\t */\n\tstrokeDasharray?: number[] | number;\n\n\t/**\n\t * Stroke (border or line) dash offset.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Dashed_lines} for more information\n\t */\n\tstrokeDashoffset?: number;\n\n\t/**\n\t * Opacity of the fill. 0 - fully transparent; 1 - fully opaque.\n\t */\n\tfillOpacity?: number;\n\n\t/**\n\t * Opacity of the stroke (border or line). 0 - fully transparent; 1 - fully opaque.\n\t */\n\tstrokeOpacity?: number;\n\n\t/**\n\t * Width of the stroke (border or line) in pixels.\n\t */\n\tstrokeWidth?: number;\n\n\t/**\n\t * Indicates if stroke of a Graphics should stay the same when it's scale changes. Note, this doesn't take into account parent container scale changes.\n\t * @default false\n\t */\n\tnonScalingStroke?: boolean;\n\n\t/**\n\t * Drawing function.\n\t *\n\t * Must use renderer (`display` parameter) methods to draw.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/#Custom_draw_functions} for more info\n\t */\n\tdraw?: (display: IGraphics, graphics: Graphics) => void;\n\n\t/**\n\t * Rendering mode.\n\t *\n\t * @default BlendMode.NORMAL (\"source-over\")\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation} for more information\n\t * @ignore\n\t */\n\tblendMode?: BlendMode;\n\n\t/**\n\t * Draw a shape using an SVG path.\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths} for more information\n\t */\n\tsvgPath?: string;\n\n\t/**\n\t * Color of the element's shadow.\n\t *\n\t * For this to work at least one of the following needs to be set as well:\n\t * `shadowBlur`, `shadowOffsetX`, `shadowOffsetY`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowColor?: Color | null;\n\n\t/**\n\t * Blurriness of the the shadow.\n\t *\n\t * The bigger the number, the more blurry shadow will be.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowBlur?: number;\n\n\t/**\n\t * Horizontal shadow offset in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOffsetX?: number;\n\n\t/**\n\t * Vertical shadow offset in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOffsetY?: number;\n\n\t/**\n\t * Opacity of the shadow (0-1).\n\t *\n\t * If not set, will use the same as `fillOpacity` of the element.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOpacity?: number;\n\n\t/**\n\t * A method to be used on anchor points (joints) of the multi-point line.\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin} for more info\n\t * @default \"miter\"\n\t * @since 5.2.10\n\t */\n\tlineJoin?: \"miter\" | \"round\" | \"bevel\";\n}\n\nexport interface IGraphicsPrivate extends ISpritePrivate {\n\n}\n\nexport interface IGraphicsEvents extends ISpriteEvents {\n\n}\n\n/**\n * Base class used for drawing shapes.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\n * @important\n */\nexport class Graphics extends Sprite {\n\n\tdeclare public _settings: IGraphicsSettings;\n\tdeclare public _privateSettings: IGraphicsPrivate;\n\tdeclare public _events: IGraphicsEvents;\n\n\tpublic _display: IGraphics = this._root._renderer.makeGraphics();\n\n\tprotected _clear = false;\n\n\tpublic static className: string = \"Graphics\";\n\tpublic static classNames: Array = Sprite.classNames.concat([Graphics.className]);\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"draw\") || this.isDirty(\"svgPath\")) {\n\t\t\tthis.markDirtyBounds();\n\t\t}\n\n\t\tif (this.isDirty(\"fill\") || this.isDirty(\"stroke\") || this.isDirty(\"visible\") || this.isDirty(\"forceHidden\") || this.isDirty(\"scale\") || this.isDirty(\"fillGradient\") || this.isDirty(\"strokeGradient\") || this.isDirty(\"fillPattern\") || this.isDirty(\"strokePattern\") || this.isDirty(\"fillOpacity\") || this.isDirty(\"strokeOpacity\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"draw\") || this.isDirty(\"blendMode\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"svgPath\") || this.isDirty(\"lineJoin\") || this.isDirty(\"shadowColor\") || this.isDirty(\"shadowBlur\") || this.isDirty(\"shadowOffsetX\") || this.isDirty(\"shadowOffsetY\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\n\t\tthis._display.crisp = this.get(\"crisp\", false);\n\n\t\tif (this.isDirty(\"fillGradient\")) {\n\t\t\tconst gradient = this.get(\"fillGradient\");\n\t\t\tif (gradient) {\n\t\t\t\tthis._display.isMeasured = true;\n\t\t\t\tconst gradientTarget = gradient.get(\"target\");\n\t\t\t\tif (gradientTarget) {\n\t\t\t\t\tthis._disposers.push(gradientTarget.events.on(\"boundschanged\", () => {\n\t\t\t\t\t\tthis._markDirtyKey(\"fill\");\n\t\t\t\t\t}))\n\t\t\t\t\tthis._disposers.push(\n\t\t\t\t\t\tgradientTarget.events.on(\"positionchanged\", () => {\n\t\t\t\t\t\t\tthis._markDirtyKey(\"fill\");\n\t\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"strokeGradient\")) {\n\t\t\tconst gradient = this.get(\"strokeGradient\");\n\t\t\tif (gradient) {\n\t\t\t\tthis._display.isMeasured = true;\n\t\t\t\tconst gradientTarget = gradient.get(\"target\");\n\t\t\t\tif (gradientTarget) {\n\t\t\t\t\tthis._disposers.push(\n\t\t\t\t\t\tgradientTarget.events.on(\"boundschanged\", () => {\n\t\t\t\t\t\t\tthis._markDirtyKey(\"stroke\");\n\t\t\t\t\t\t}))\n\t\t\t\t\tthis._disposers.push(\n\t\t\t\t\t\tgradientTarget.events.on(\"positionchanged\", () => {\n\t\t\t\t\t\t\tthis._markDirtyKey(\"stroke\");\n\t\t\t\t\t\t}))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _changed() {\n\t\tsuper._changed();\n\n\t\tif (this._clear) {\n\t\t\tthis.markDirtyBounds();\n\t\t\tthis.markDirtyLayer();\n\t\t\tthis._display.clear();\n\n\t\t\tlet strokeDasharray = this.get(\"strokeDasharray\");\n\t\t\tif ($type.isNumber(strokeDasharray)) {\n\t\t\t\tif (strokeDasharray < 0.5) {\n\t\t\t\t\tstrokeDasharray = [0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstrokeDasharray = [strokeDasharray]\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._display.setLineDash(strokeDasharray as number[]);\n\n\t\t\tconst strokeDashoffset = this.get(\"strokeDashoffset\");\n\t\t\tif (strokeDashoffset) {\n\t\t\t\tthis._display.setLineDashOffset(strokeDashoffset);\n\t\t\t}\n\n\t\t\tconst blendMode = this.get(\"blendMode\", BlendMode.NORMAL);\n\t\t\tthis._display.blendMode = blendMode;\n\n\t\t\tconst draw = this.get(\"draw\");\n\t\t\tif (draw) {\n\t\t\t\tdraw(this._display, this);\n\t\t\t}\n\n\t\t\tconst svgPath = this.get(\"svgPath\");\n\t\t\tif (svgPath != null) {\n\t\t\t\tthis._display.svgPath(svgPath!);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _afterChanged() {\n\t\tsuper._afterChanged();\n\n\t\tif (this._clear) {\n\t\t\tconst fill = this.get(\"fill\");\n\t\t\tconst fillGradient = this.get(\"fillGradient\");\n\t\t\tconst fillPattern = this.get(\"fillPattern\");\n\t\t\tconst fillOpacity = this.get(\"fillOpacity\");\n\n\t\t\tconst stroke = this.get(\"stroke\");\n\t\t\tconst strokeGradient = this.get(\"strokeGradient\");\n\t\t\tconst strokePattern = this.get(\"strokePattern\");\n\n\t\t\tconst shadowColor = this.get(\"shadowColor\");\n\t\t\tconst shadowBlur = this.get(\"shadowBlur\");\n\t\t\tconst shadowOffsetX = this.get(\"shadowOffsetX\");\n\t\t\tconst shadowOffsetY = this.get(\"shadowOffsetY\");\n\t\t\tconst shadowOpacity = this.get(\"shadowOpacity\");\n\n\t\t\t//const bounds = this._display.getLocalBounds();\n\n\t\t\tif (shadowColor && (shadowBlur || shadowOffsetX || shadowOffsetY)) {\n\t\t\t\tthis._display.shadow(shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY, shadowOpacity);\n\t\t\t}\n\n\t\t\tif (fill && !fillGradient) {\n\t\t\t\tthis._display.beginFill(fill, fillOpacity);\n\t\t\t\tthis._display.endFill();\n\t\t\t}\n\n\t\t\tif (fillGradient) {\n\t\t\t\tif (fill) {\n\t\t\t\t\tconst stops = fillGradient.get(\"stops\", []);\n\t\t\t\t\tif (stops.length) {\n\t\t\t\t\t\t$array.each(stops, (stop: any) => {\n\t\t\t\t\t\t\tif ((!stop.color || stop.colorInherited) && fill) {\n\t\t\t\t\t\t\t\tstop.color = fill;\n\t\t\t\t\t\t\t\tstop.colorInherited = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (stop.opacity == null || stop.opacityInherited) {\n\t\t\t\t\t\t\t\tstop.opacity = fillOpacity;\n\t\t\t\t\t\t\t\tstop.opacityInherited = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst gradient = fillGradient.getFill(this);\n\t\t\t\tif (gradient) {\n\t\t\t\t\tthis._display.beginFill(gradient, fillOpacity);\n\t\t\t\t\tthis._display.endFill();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fillPattern) {\n\t\t\t\t/*\n\t\t\t\tlet changed = false;\n\t\t\t\tif (fill && (!fillPattern.get(\"fill\") || fillPattern.get(\"fillInherited\"))) {\n\t\t\t\t\tfillPattern.set(\"fill\", fill);\n\t\t\t\t\tfillPattern.set(\"fillInherited\", true)\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tif (stroke && (!fillPattern.get(\"color\") || fillPattern.get(\"colorInherited\"))) {\n\t\t\t\t\tfillPattern.set(\"color\", stroke);\n\t\t\t\t\tfillPattern.set(\"colorInherited\", true)\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tif (changed) {\n\t\t\t\t\t// @todo: is this OK?\n\t\t\t\t\tfillPattern._changed();\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\tconst pattern = fillPattern.pattern;\n\t\t\t\tif (pattern) {\n\t\t\t\t\tthis._display.beginFill(pattern, fillOpacity);\n\t\t\t\t\tthis._display.endFill();\n\n\t\t\t\t\tif (fillPattern instanceof PicturePattern) {\n\t\t\t\t\t\tfillPattern.events.once(\"loaded\", () => {\n\t\t\t\t\t\t\tthis._clear = true;\n\t\t\t\t\t\t\tthis.markDirty();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (stroke || strokeGradient || strokePattern) {\n\t\t\t\tconst strokeOpacity = this.get(\"strokeOpacity\");\n\t\t\t\tlet strokeWidth = this.get(\"strokeWidth\", 1);\n\n\t\t\t\tif (this.get(\"nonScalingStroke\")) {\n\t\t\t\t\tstrokeWidth = strokeWidth / this.get(\"scale\", 1)\n\t\t\t\t}\n\n\t\t\t\tif (this.get(\"crisp\")) {\n\t\t\t\t\tstrokeWidth /= this._root._renderer.resolution;\n\t\t\t\t}\n\n\t\t\t\tconst lineJoin = this.get(\"lineJoin\");\n\n\t\t\t\tif (stroke && !strokeGradient) {\n\t\t\t\t\tthis._display.lineStyle(strokeWidth, stroke, strokeOpacity, lineJoin);\n\t\t\t\t\tthis._display.endStroke();\n\t\t\t\t}\n\n\n\t\t\t\tif (strokeGradient) {\n\t\t\t\t\tconst stops = strokeGradient.get(\"stops\", []);\n\t\t\t\t\tif (stops.length) {\n\t\t\t\t\t\t$array.each(stops, (stop: any) => {\n\t\t\t\t\t\t\tif ((!stop.color || stop.colorInherited) && stroke) {\n\t\t\t\t\t\t\t\tstop.color = stroke;\n\t\t\t\t\t\t\t\tstop.colorInherited = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (stop.opacity == null || stop.opacityInherited) {\n\t\t\t\t\t\t\t\tstop.opacity = strokeOpacity;\n\t\t\t\t\t\t\t\tstop.opacityInherited = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tconst gradient = strokeGradient.getFill(this);\n\t\t\t\t\tif (gradient) {\n\t\t\t\t\t\tthis._display.lineStyle(strokeWidth, gradient, strokeOpacity, lineJoin);\n\t\t\t\t\t\tthis._display.endStroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (strokePattern) {\n\t\t\t\t\t/*\n\t\t\t\t\tlet changed = false;\n\t\t\t\t\t\n\t\t\t\t\tif (stroke && (!strokePattern.get(\"color\") || strokePattern.get(\"colorInherited\"))) {\n\t\t\t\t\t\tstrokePattern.set(\"color\", stroke);\n\t\t\t\t\t\tstrokePattern.set(\"colorInherited\", true);\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (changed) {\n\t\t\t\t\t\t// @todo: is this OK?\n\t\t\t\t\t\tstrokePattern._changed();\n\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\tlet pattern = strokePattern.pattern;\n\n\t\t\t\t\tif (pattern) {\n\t\t\t\t\t\tthis._display.lineStyle(strokeWidth, pattern, strokeOpacity, lineJoin);\n\t\t\t\t\t\tthis._display.endStroke();\n\n\t\t\t\t\t\tif (strokePattern instanceof PicturePattern) {\n\t\t\t\t\t\t\tstrokePattern.events.once(\"loaded\", () => {\n\t\t\t\t\t\t\t\tthis._clear = true;\n\t\t\t\t\t\t\t\tthis.markDirty();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.getPrivate(\"showingTooltip\")) {\n\t\t\t\tthis.showTooltip();\n\t\t\t}\n\t\t}\n\n\t\tthis._clear = false;\n\t}\n\n}\n","import { Layout, ILayoutSettings, ILayoutPrivate, eachChildren } from \"./Layout\";\nimport * as $array from \"../util/Array\";\nimport * as $math from \"../util/Math\";\nimport type { Container } from \"./Container\";\n\n\nexport interface IGridLayoutSettings extends ILayoutSettings {\n\n\t/**\n\t * If set to `true` all columns in the grid will be equal width.\n\t *\n\t * @default false\n\t */\n\tfixedWidthGrid?: boolean;\n\n\t/**\n\t * Maximum number of columns in the grid.\n\t */\n\tmaxColumns?: number;\n\n}\n\nexport interface IGridLayoutPrivate extends ILayoutPrivate {\n}\n\n/**\n * A grid children layout for [[Container]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\n */\nexport class GridLayout extends Layout {\n\n\tpublic static className: string = \"GridLayout\";\n\tpublic static classNames: Array = Layout.classNames.concat([GridLayout.className]);\n\n\tdeclare public _settings: IGridLayoutSettings;\n\tdeclare public _privateSettings: IGridLayoutPrivate;\n\n\n\tprotected _afterNew() {\n\t\tthis._setRawDefault(\"maxColumns\", Number.MAX_VALUE);\n\t\tsuper._afterNew();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateContainer(container: Container): void {\n\t\tlet paddingLeft = container.get(\"paddingLeft\", 0);\n\t\tlet paddingRight = container.get(\"paddingRight\", 0);\n\t\tlet paddingTop = container.get(\"paddingTop\", 0);\n\n\t\tlet availableWidth = container.maxWidth() - paddingLeft - paddingRight;\n\n\t\tlet minCellWidth = availableWidth;\n\t\tlet maxCellWidth = 1;\n\n\t\teachChildren(container, (child) => {\n\t\t\tif(child.get(\"visible\") && child.getPrivate(\"visible\") && !child.get(\"forceHidden\")){\n\t\t\t\tif (child.get(\"position\") != \"absolute\") {\n\t\t\t\t\tlet childWidth = child.width();\n\n\t\t\t\t\tif (childWidth < minCellWidth) {\n\t\t\t\t\t\tminCellWidth = childWidth;\n\t\t\t\t\t}\n\t\t\t\t\tif (childWidth > maxCellWidth) {\n\t\t\t\t\t\tmaxCellWidth = childWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tminCellWidth = $math.fitToRange(minCellWidth, 1, availableWidth);\n\t\tmaxCellWidth = $math.fitToRange(maxCellWidth, 1, availableWidth);\n\n\t\tlet columnCount = 1;\n\t\tif (this.get(\"fixedWidthGrid\")) {\n\t\t\tcolumnCount = availableWidth / maxCellWidth;\n\t\t}\n\t\telse {\n\t\t\tcolumnCount = availableWidth / minCellWidth;\n\t\t}\n\n\t\tcolumnCount = Math.max(1, Math.floor(columnCount));\n\t\tcolumnCount = Math.min(this.get(\"maxColumns\", Number.MAX_VALUE), columnCount);\n\n\t\tlet columnWidths = this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\n\n\t\tlet prevY = paddingTop;\n\n\t\tlet column = 0;\n\t\tlet maxColumnHeight = 0;\n\n\t\tcolumnCount = columnWidths.length;\n\n\t\tlet prevX = paddingLeft;\n\n\t\teachChildren(container, (child) => {\n\t\t\tif (child.get(\"position\") == \"relative\" && child.isVisible()) {\n\t\t\t\tconst marginTop = child.get(\"marginTop\", 0);\n\t\t\t\tconst marginBottom = child.get(\"marginBottom\", 0);\n\n\t\t\t\tlet bounds = child.adjustedLocalBounds();\n\n\t\t\t\tlet marginLeft = child.get(\"marginLeft\", 0);\n\t\t\t\tlet marginRight = child.get(\"marginRight\", 0);\n\t\t\t\tlet x = prevX + marginLeft - bounds.left;\n\t\t\t\tlet y = prevY + marginTop - bounds.top;\n\n\t\t\t\tchild.setPrivate(\"x\", x);\n\t\t\t\tchild.setPrivate(\"y\", y);\n\n\t\t\t\tprevX += columnWidths[column] + marginRight;\n\n\t\t\t\tmaxColumnHeight = Math.max(maxColumnHeight, child.height() + marginTop + marginBottom);\n\n\t\t\t\tcolumn++;\n\n\t\t\t\tif (column >= columnCount) {\n\t\t\t\t\tcolumn = 0;\n\t\t\t\t\tprevX = paddingLeft;\n\t\t\t\t\tprevY += maxColumnHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getColumnWidths(container: Container, columnCount: number, maxCellWidth: number, availableWidth: number): number[] {\n\t\tlet totalWidth = 0;\n\t\tlet columnWidths: Array = [];\n\t\tlet column = 0;\n\n\t\teachChildren(container, (child) => {\n\t\t\tlet bounds = child.adjustedLocalBounds();\n\t\t\tif (child.get(\"position\") != \"absolute\" && child.isVisible()) {\n\t\t\t\tif (this.get(\"fixedWidthGrid\")) {\n\t\t\t\t\tcolumnWidths[column] = maxCellWidth;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcolumnWidths[column] = Math.max(columnWidths[column] | 0, bounds.right - bounds.left + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0));\n\t\t\t\t}\n\n\t\t\t\tif (column < container.children.length - 1) {\n\t\t\t\t\tcolumn++;\n\t\t\t\t\tif (column == columnCount) {\n\t\t\t\t\t\tcolumn = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$array.each(columnWidths, (w) => {\n\t\t\ttotalWidth += w;\n\t\t})\n\n\t\tif (totalWidth > availableWidth) {\n\t\t\tif (columnCount > 2) {\n\t\t\t\tcolumnCount -= 1;\n\t\t\t\treturn this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [availableWidth];\n\t\t\t}\n\t\t}\n\n\t\treturn columnWidths;\n\t}\n}\n","import { Layout, eachChildren } from \"./Layout\";\nimport * as $type from \"../util/Type\";\nimport { Percent } from \"../util/Percent\";\nimport type { Container } from \"./Container\";\n\n/**\n * A horizontal children layout for [[Container]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\n */\nexport class HorizontalLayout extends Layout {\n\n\tpublic static className: string = \"HorizontalLayout\";\n\tpublic static classNames: Array = Layout.classNames.concat([HorizontalLayout.className]);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateContainer(container: Container): void {\n\n\t\tlet paddingLeft = container.get(\"paddingLeft\", 0);\n\n\t\tlet availableWidth = container.innerWidth();\n\n\t\tlet totalPercent = 0;\n\n\t\teachChildren(container, (child) => {\n\t\t\tif (child.isVisible()) {\n\t\t\t\tif (child.get(\"position\") == \"relative\") {\n\t\t\t\t\tlet childWidth = child.get(\"width\");\n\t\t\t\t\tif (childWidth instanceof Percent) {\n\t\t\t\t\t\ttotalPercent += childWidth.value;\n\n\t\t\t\t\t\tlet w = availableWidth * childWidth.value;\n\t\t\t\t\t\tlet minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\n\t\t\t\t\t\tif (minWidth > w) {\n\t\t\t\t\t\t\tavailableWidth -= minWidth;\n\t\t\t\t\t\t\ttotalPercent -= childWidth.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\n\t\t\t\t\t\tif (w > maxWidth) {\n\t\t\t\t\t\t\tavailableWidth -= maxWidth;\n\t\t\t\t\t\t\ttotalPercent -= childWidth.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!$type.isNumber(childWidth)) {\n\t\t\t\t\t\t\tchildWidth = child.width();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tavailableWidth -= childWidth + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (availableWidth <= 0 || availableWidth == Infinity) {\n\t\t\tavailableWidth = .1;\n\t\t}\n\n\t\t//if (availableWidth > 0) {\n\t\teachChildren(container, (child) => {\n\t\t\tif (child.isVisible()) {\n\t\t\t\tif (child.get(\"position\") == \"relative\") {\n\t\t\t\t\tlet childWidth = child.get(\"width\");\n\t\t\t\t\tif (childWidth instanceof Percent) {\n\t\t\t\t\t\tlet privateWidth = availableWidth * childWidth.value / totalPercent - child.get(\"marginLeft\", 0) - child.get(\"marginRight\", 0);\n\t\t\t\t\t\tlet minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\n\t\t\t\t\t\tlet maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\n\t\t\t\t\t\tprivateWidth = Math.min(Math.max(minWidth, privateWidth), maxWidth);\n\n\t\t\t\t\t\tchild.setPrivate(\"width\", privateWidth);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child._prevSettings.width instanceof Percent) {\n\t\t\t\t\t\t\tchild.setPrivate(\"width\", undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t//}\n\n\t\tlet prevX = paddingLeft;\n\n\t\teachChildren(container, (child) => {\n\n\t\t\tif (child.get(\"position\") == \"relative\") {\n\t\t\t\tif (child.isVisible()) {\n\t\t\t\t\tlet bounds = child.adjustedLocalBounds();\n\t\t\t\t\tlet marginLeft = child.get(\"marginLeft\", 0);\n\t\t\t\t\tlet marginRight = child.get(\"marginRight\", 0);\n\n\t\t\t\t\tlet maxWidth = child.get(\"maxWidth\");\n\n\t\t\t\t\tlet left = bounds.left;\n\t\t\t\t\tlet right = bounds.right;\n\t\t\t\t\tif (maxWidth) {\n\t\t\t\t\t\tif (right - left > maxWidth) {\n\t\t\t\t\t\t\tright = left + maxWidth\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet x = prevX + marginLeft - left;\n\t\t\t\t\tchild.setPrivate(\"x\", x);\n\t\t\t\t\tprevX = x + right + marginRight;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tchild.setPrivate(\"x\", undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import type { Color } from \"../util/Color\";\nimport type { Percent } from \"../util/Percent\";\nimport type { DataItem, IComponentDataItem } from \"./Component\";\n\nimport { Text } from \"../render/Text\";\nimport { p50, p100 } from \"../util/Percent\";\nimport { Container, IContainerPrivate, IContainerSettings } from \"./Container\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\n\n\nexport interface ILabelSettings extends IContainerSettings {\n\n\t/**\n\t * Labels' text.\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/text-styling/} for text styling info\n\t * \n\t */\n\ttext?: string;\n\n\t/**\n\t * Text color.\n\t */\n\tfill?: Color;\n\n\t/**\n\t * Text opacity.\n\t *\n\t * @default 1\n\t * @ince 5.2.39\n\t */\n\tfillOpacity?: number;\n\n\t/**\n\t * Alignment.\n\t */\n\ttextAlign?: \"start\" | \"end\" | \"left\" | \"right\" | \"center\";\n\n\t/**\n\t * Font family to use for the label.\n\t *\n\t * Multiple fonts can be separated by commas.\n\t */\n\tfontFamily?: string;\n\n\t/**\n\t * Font size in misc any supported CSS format (pixel, point, em, etc.).\n\t */\n\tfontSize?: string | number;\n\n\t/**\n\t * Font weight.\n\t */\n\tfontWeight?: \"normal\" | \"bold\" | \"bolder\" | \"lighter\" | \"100\" | \"200\" | \"300\" | \"400\" | \"500\" | \"600\" | \"700\" | \"800\" | \"900\";\n\n\t/**\n\t * Font style.\n\t */\n\tfontStyle?: \"normal\" | \"italic\" | \"oblique\";\n\n\t/**\n\t * Font variant.\n\t */\n\tfontVariant?: \"normal\" | \"small-caps\";\n\n\t/**\n\t * Text decoration.\n\t *\n\t * Supported options `\"underline\"`, `\"line-through\"`.\n\t *\n\t * @since 5.0.15\n\t */\n\ttextDecoration?: \"underline\" | \"line-through\";\n\n\t/**\n\t * Line height in percent or absolute pixels.\n\t */\n\tlineHeight?: Percent | number;\n\n\t/**\n\t * How mouch of the height should be considered to go below baseline.\n\t *\n\t * @default 0.19\n\t */\n\tbaselineRatio?: number;\n\n\t/**\n\t * Opacity of the label.\n\t *\n\t * 0 - fully transparent; 1 - fully opaque.\n\t */\n\topacity?: number;\n\n\t/**\n\t * Text direction.\n\t *\n\t * @default \"ltr\"\n\t */\n\tdirection?: \"ltr\" | \"rtl\";\n\n\t/**\n\t * A base line to use when aligning text chunks vertically.\n\t */\n\ttextBaseline?: \"top\" | \"hanging\" | \"middle\" | \"alphabetic\" | \"ideographic\" | \"bottom\";\n\n\t/**\n\t * How to handle labels that do not fit into its designated space.\n\t *\n\t * LIMITATIONS: on circular labels, the only values supported are `\"hide\"` and\n\t * `\"truncate\"`. The latter will ignore `breakWords` setting.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/labels/#Oversized_text} for more info\n\t */\n\toversizedBehavior?: \"none\" | \"hide\" | \"fit\" | \"wrap\" | \"wrap-no-break\" | \"truncate\";\n\n\t/**\n\t * Whether words can be broken when truncating or wrapping text.\n\t *\n\t * @default false\n\t */\n\tbreakWords?: boolean;\n\n\t/**\n\t * Ellipsis characters to use when truncating text.\n\t *\n\t * Will use Unicode ellipsis symbol (`\"…\"`) by default, which might not be\n\t * available in all fonts. If ellipsis looks broken, use different\n\t * characters. E.g.:\n\t *\n\t * ```TypeScript\n\t * label.set(\"ellipsis\", \"...\");\n\t * ```\n\t * ```JavaScript\n\t * label.set(\"ellipsis\", \"...\");\n\t * ```\n\t *\n\t *\n\t * @default \"…\"\n\t */\n\tellipsis?: string;\n\n\t/**\n\t * Minimum relative scale allowed for label when scaling down\n\t * when `oversizedBehavior` is set to `\"fit\"`.\n\t *\n\t * If fitting the label would require it to scale beyond `minScale` it would\n\t * be hidden instead.\n\t */\n\tminScale?: number;\n\n\t/**\n\t * If set to `true` the label will parse `text` for data placeholders and\n\t * will try to populate them with actual data.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/labels/#Data_placeholders} for more info\n\t */\n\tpopulateText?: boolean;\n\n\t/**\n\t * If set to `true`, will ignore in-line formatting blocks and will display\n\t * text exactly as it is.\n\t *\n\t * @default false\n\t */\n\tignoreFormatting?: boolean;\n\n\t/**\n\t * Color of the element's shadow.\n\t *\n\t * For this to work at least one of the following needs to be set as well:\n\t * `shadowBlur`, `shadowOffsetX`, `shadowOffsetY`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowColor?: Color | null;\n\n\t/**\n\t * Blurriness of the the shadow.\n\t *\n\t * The bigger the number, the more blurry shadow will be.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowBlur?: number;\n\n\t/**\n\t * Horizontal shadow offset in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOffsetX?: number;\n\n\t/**\n\t * Vertical shadow offset in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOffsetY?: number;\n\n\t/**\n\t * Opacity of the shadow (0-1).\n\t *\n\t * If not set, will use the same as `fillOpacity` of the element.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/} for more info\n\t */\n\tshadowOpacity?: number;\n\n\t/**\n\t * Maximum number of characters to allow in label.\n\t *\n\t * If the `text` is longer than `maxChars`, the text will be truncated\n\t * using the `breakWords` and `ellipsis` settings.\n\t * \n\t * @since 5.7.2\n\t */\n\tmaxChars?: number;\n\n\t// The following migh be supported some day:\n\t// padding?: number;\n\t// stroke?: number;\n\t// strokeThickness?: number;\n\t// trim?: number;\n\t// wordWrap?: boolean;\n\t// leading?: number;\n\t// letterSpacing?: number;\n}\n\nexport interface ILabelPrivate extends IContainerPrivate {\n}\n\n/**\n * Creates a label with support for in-line styling and data bindings.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/labels/} for more info\n */\nexport class Label extends Container {\n\n\tdeclare public _settings: ILabelSettings;\n\tdeclare public _privateSettings: ILabelPrivate;\n\n\tprotected _text!: Text;\n\n\tprotected _textKeys: Array = [\n\t\t\"text\",\n\t\t\"fill\",\n\t\t\"fillOpacity\",\n\t\t\"textAlign\",\n\t\t\"fontFamily\",\n\t\t\"fontSize\",\n\t\t\"fontStyle\",\n\t\t\"fontWeight\",\n\t\t\"fontStyle\",\n\t\t\"fontVariant\",\n\t\t\"textDecoration\",\n\t\t\"shadowColor\",\n\t\t\"shadowBlur\",\n\t\t\"shadowOffsetX\",\n\t\t\"shadowOffsetY\",\n\t\t\"shadowOpacity\",\n\t\t// \"leading\",\n\t\t// \"letterSpacing\",\n\t\t\"lineHeight\",\n\t\t\"baselineRatio\",\n\t\t//\"padding\",\n\t\t// \"stroke\",\n\t\t// \"strokeThickness\",\n\t\t// \"trim\",\n\t\t// \"wordWrap\",\n\t\t\"direction\",\n\t\t\"textBaseline\",\n\t\t\"oversizedBehavior\",\n\t\t\"breakWords\",\n\t\t\"ellipsis\",\n\t\t\"minScale\",\n\t\t\"populateText\",\n\t\t\"role\",\n\t\t\"ignoreFormatting\",\n\t\t\"maxChars\"\n\t];\n\n\tpublic static className: string = \"Label\";\n\tpublic static classNames: Array = Container.classNames.concat([Label.className]);\n\n\t/**\n\t * @ignore Text is not to be used directly\n\t */\n\tpublic get text(): Text {\n\t\treturn this._text;\n\t}\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\n\t\tthis._makeText();\n\n\t\t$array.each(this._textKeys, (property) => {\n\t\t\tconst propValue = this.get(property as any);\n\t\t\tif (propValue != undefined) {\n\t\t\t\tthis._text.set(property as any, propValue);\n\t\t\t}\n\t\t});\n\n\t\tif (this.get(\"html\", \"\") !== \"\") {\n\t\t\tthis._text.set(\"text\", \"\");\n\t\t}\n\n\t\tthis.onPrivate(\"maxWidth\", () => {\n\t\t\tthis._setMaxDimentions();\n\t\t});\n\n\t\tthis.onPrivate(\"maxHeight\", () => {\n\t\t\tthis._setMaxDimentions();\n\t\t});\n\t}\n\n\tpublic _makeText() {\n\t\tthis._text = this.children.push(Text.new(this._root, {}));\n\t}\n\n\tpublic _updateChildren() {\n\t\tsuper._updateChildren();\n\n\t\t$array.each(this._textKeys, (property) => {\n\t\t\tthis._text.set(property as any, this.get(property as any));\n\t\t})\n\n\t\tif (this.isDirty(\"maxWidth\")) {\n\t\t\tthis._setMaxDimentions();\n\t\t}\n\n\t\tif (this.isDirty(\"maxHeight\")) {\n\t\t\tthis._setMaxDimentions();\n\t\t}\n\n\t\tif (this.isDirty(\"rotation\")) {\n\t\t\tthis._setMaxDimentions();\n\t\t}\n\n\t\t// Do not show regular text if HTML is used\n\t\tif (this.get(\"html\", \"\") !== \"\") {\n\t\t\tthis._text.set(\"text\", \"\");\n\t\t}\n\t\telse {\n\t\t\tthis._text.set(\"text\", this.get(\"text\"));\n\t\t}\n\n\t\tif (this.isDirty(\"textAlign\") || this.isDirty(\"width\")) {\n\t\t\tconst textAlign = this.get(\"textAlign\");\n\t\t\tlet x: number | Percent | undefined;\n\t\t\tif (this.get(\"width\") != null) {\n\t\t\t\tif (textAlign == \"right\") {\n\t\t\t\t\tx = p100;\n\t\t\t\t}\n\t\t\t\telse if (textAlign == \"center\") {\n\t\t\t\t\tx = p50;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (textAlign == \"left\" || textAlign == \"start\") {\n\t\t\t\t\tx = this.get(\"paddingLeft\");\n\t\t\t\t}\n\t\t\t\telse if (textAlign == \"right\" || textAlign == \"end\") {\n\t\t\t\t\tx = -this.get(\"paddingRight\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.text.set(\"x\", x);\n\t\t}\n\t}\n\n\tprotected _setMaxDimentions() {\n\t\tconst rotation = this.get(\"rotation\");\n\t\tconst vertical = rotation == 90 || rotation == 270 || rotation == -90;\n\n\t\tconst maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\", Infinity));\n\t\tif ($type.isNumber(maxWidth)) {\n\t\t\tthis.text.set(vertical ? \"maxHeight\" : \"maxWidth\", maxWidth - this.get(\"paddingLeft\", 0) - this.get(\"paddingRight\", 0));\n\t\t}\n\t\telse {\n\t\t\tthis.text.set(vertical ? \"maxHeight\" : \"maxWidth\", undefined);\n\t\t}\n\n\t\tconst maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\", Infinity));\n\t\tif ($type.isNumber(maxHeight)) {\n\t\t\tthis.text.set(vertical ? \"maxWidth\" : \"maxHeight\", maxHeight - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0));\n\t\t}\n\t\telse {\n\t\t\tthis.text.set(vertical ? \"maxWidth\" : \"maxHeight\", undefined);\n\t\t}\n\t}\n\n\tpublic _setDataItem(dataItem?: DataItem): void {\n\t\tsuper._setDataItem(dataItem);\n\t\tthis._markDirtyKey(\"text\")\n\t\tif (this.text.get(\"populateText\")) {\n\t\t\tthis.text.markDirtyText();\n\t\t}\n\t}\n\n\t/**\n\t * Returns text with populated placeholders and formatting if `populateText` is\n\t * set to `true`.\n\t *\n\t * @return Populated text\n\t */\n\tpublic getText(): string {\n\t\treturn this._text._getText();\n\t}\n}\n","import type { Container } from \"./Container\";\nimport type { Sprite } from \"./Sprite\";\nimport { Entity, IEntitySettings, IEntityPrivate } from \"../util/Entity\";\n\nexport interface ILayoutSettings extends IEntitySettings {\n}\n\nexport interface ILayoutPrivate extends IEntityPrivate {\n}\n\nexport function eachChildren(container: Container, f: (sprite: Sprite) => void): void {\n if (container.get(\"reverseChildren\", false)) {\n container.children.eachReverse(f);\n } else {\n container.children.each(f);\n }\n}\n\n/**\n * Base class for [[Container]] layouts.\n */\nexport abstract class Layout extends Entity {\n\tdeclare public _settings: ILayoutSettings;\n\tdeclare public _privateSettings: ILayoutPrivate;\n\n\tpublic static className: string = \"Layout\";\n\tpublic static classNames: Array = Entity.classNames.concat([Layout.className]);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic abstract updateContainer(_container: Container): void;\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport { Series, ISeriesSettings, ISeriesDataItem, ISeriesPrivate, ISeriesEvents } from \"./Series\";\nimport { Container } from \"../../core/render/Container\";\nimport { Label } from \"../../core/render/Label\";\nimport { RoundedRectangle } from \"../../core/render/RoundedRectangle\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport type { Entity, IEntitySettings } from \"../../core/util/Entity\";\nimport type { Color } from \"../../core/util/Color\";\nimport * as $utils from \"../../core/util/Utils\";\n\nexport interface ILegendDataItem extends ISeriesDataItem {\n\n\t/**\n\t * [[Container]] element holding all other legend item elements, labels,\n\t * markers, etc.\n\t */\n\titemContainer: Container;\n\n\t/**\n\t * Marker element.\n\t */\n\tmarker: Container;\n\n\t/**\n\t * Marker rectangle element.\n\t */\n\tmarkerRectangle: RoundedRectangle;\n\n\t/**\n\t * Label element.\n\t */\n\tlabel: Label;\n\n\t/**\n\t * Value label element.\n\t */\n\tvalueLabel: Label;\n\n\t/**\n\t * Marker fill color.\n\t */\n\tfill?: Color;\n\n\t/**\n\t * Marker stroke (outline) color.\n\t */\n\tstroke?: Color;\n\n\t/**\n\t * Name of the legend item.\n\t */\n\tname?: string;\n\n}\n\nexport interface ILegendItemSettings extends IEntitySettings {\n\tvisible?: boolean;\n}\n\n/**\n * @ignore\n */\nexport interface ILegendItem extends Entity {\n\t_settings: ILegendItemSettings;\n\tisHidden?: () => boolean;\n\tshow?: () => void;\n\thide?: () => void;\n\tcreateLegendMarker?: () => {}\n\tcomponent?: Series;\n\tupdateLegendValue?: () => {}\n\t// how to define that properties of dataItem should have legendDataItem?\n}\n\n//type ILegendDataItemSettings = { [K in keyof ILegendDataItem]?: string; };\n\nexport interface ILegendSettings extends ISeriesSettings {\n\n\t/**\n\t * If set to `true` the legend will not try to mimic appearance of the actual\n\t * item but rather show default square marker.\n\t *\n\t * @default false\n\t */\n\tuseDefaultMarker?: boolean;\n\n\t/**\n\t * A key to look up in data for a name of the data item.\n\t *\n\t */\n\tnameField?: string;\n\n\t/**\n\t * A key to look up in data for a fill of the data item.\n\t *\n\t */\n\tfillField?: string;\n\n\t/**\n\t * A key to look up in data for a stroke of the data item.\n\t *\n\t */\n\tstrokeField?: string;\n\n\t/**\n\t * Which legend item element will be clickable to toggle related chart item:\n\t * * `\"itemContainer\"` - the whole legend item (default).\n\t * * `\"marker\"` - legend item marker.\n\t * * `\"none\"` - disables toggling of legend item.\n\t *\n\t * @default \"itemContainer\"\n\t * @since 5.0.13\n\t */\n\tclickTarget?: \"itemContainer\" | \"marker\" | \"none\"\n\n}\n\nexport interface ILegendPrivate extends ISeriesPrivate {\n}\n\nexport interface ILegendEvents extends ISeriesEvents {\n\n}\n\n/**\n * A universal legend control.\n *\n * @important\n * @see {@link https://www.amcharts.com/docs/v5/concepts/legend/} for more info\n */\nexport class Legend extends Series {\n\tprotected _afterNew() {\n\t\tthis._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"legend\"]);\n\t\tthis.fields.push(\"name\", \"stroke\", \"fill\");\n\t\tsuper._afterNew();\n\t}\n\n\tpublic static className: string = \"Legend\";\n\tpublic static classNames: Array = Series.classNames.concat([Legend.className]);\n\n\tdeclare public _settings: ILegendSettings;\n\tdeclare public _privateSettings: ILegendPrivate;\n\tdeclare public _dataItemSettings: ILegendDataItem;\n\tdeclare public _events: ILegendEvents;\n\n\t/**\n\t * List of all [[Container]] elements for legend items.\n\t *\n\t * @default new ListTemplate\n\t */\n\tpublic readonly itemContainers: ListTemplate = new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => Container._new(this._root, {\n\t\t\tthemeTags: $utils.mergeTags(this.itemContainers.template.get(\"themeTags\", []), [\"legend\", \"item\"]),\n\t\t\tthemeTagsSelf: $utils.mergeTags(this.itemContainers.template.get(\"themeTagsSelf\", []), [\"itemcontainer\"]),\n\t\t\tbackground: RoundedRectangle.new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.itemContainers.template.get(\"themeTags\", []), [\"legend\", \"item\", \"background\"]),\n\t\t\t\tthemeTagsSelf: $utils.mergeTags(this.itemContainers.template.get(\"themeTagsSelf\", []), [\"itemcontainer\"])\n\t\t\t})\n\t\t}, [this.itemContainers.template])\n\t);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeItemContainer(dataItem: DataItem): Container {\n\t\tconst itemContainer = this.children.push(this.itemContainers.make());\n\t\titemContainer._setDataItem(dataItem);\n\t\tthis.itemContainers.push(itemContainer);\n\t\titemContainer.states.create(\"disabled\", {});\n\t\treturn itemContainer;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeMarker(): Container {\n\t\tconst marker = this.markers.make();\n\t\tthis.markers.push(marker);\n\t\tmarker.states.create(\"disabled\", {});\n\t\treturn marker;\n\t}\n\n\t/**\n\t * List of legend marker elements.\n\t *\n\t * @default new ListTemplate\n\t */\n\tpublic readonly markers: ListTemplate = new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => Container._new(this._root, {\n\t\t\tthemeTags: $utils.mergeTags(this.markers.template.get(\"themeTags\", []), [\"legend\", \"marker\"])\n\t\t}, [this.markers.template])\n\t);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeLabel(): Label {\n\t\tconst label = this.labels.make();\n\t\tlabel.states.create(\"disabled\", {});\n\t\treturn label;\n\t}\n\n\t/**\n\t * List of legend label elements.\n\t *\n\t * @default new ListTemplate(originalEvent: A, adjustPoint?: boolean): IRendererEvent;\n\tgetObjectAtPoint(point: IPoint): IDisplayObject | undefined;\t\n\tresetImageArray():void;\n}\n\nexport interface ICanvasOptions {\n\tmaintainPixelRatio?: boolean;\n\tminWidth?: number;\n\tmaxWidth?: number;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport interface IMargin {\n\tleft: number;\n\tright: number;\n\ttop: number;\n\tbottom: number;\n}\n\n/**\n * @ignore\n */\nexport interface ILayer {\n\tvisible: boolean;\n\torder: number;\n\twidth: number | undefined;\n\theight: number | undefined;\n\tdirty: boolean;\n\tmargin: IMargin | undefined;\n}\n","import type { IBounds } from \"../../util/IBounds\"\nimport type { IGradient, IGradientStop } from \"../backend/Renderer\";\nimport type { Sprite } from \"../Sprite\";\n\nimport { Entity, IEntitySettings, IEntityPrivate } from \"../../util/Entity\"\n\n\nexport interface IGradientSettings extends IEntitySettings {\n\n\t/**\n\t * A list of color steps for the gradient.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\n\t */\n\tstops?: Array;\n\n\t/**\n\t * Gradient target.\n\t */\n\ttarget?: Sprite;\n\n}\n\nexport interface IGradientPrivate extends IEntityPrivate {\n}\n\n/**\n * Base class for gradients.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\n */\nexport abstract class Gradient extends Entity {\n\n\tdeclare public _settings: IGradientSettings;\n\tdeclare public _privateSettings: IGradientPrivate;\n\n\tpublic static className: string = \"Gradient\";\n\tpublic static classNames: Array = Entity.classNames.concat([Gradient.className]);\n\n\tprotected _afterNew() {\n\t\t// Applying themes because gradient will not have parent\n\t\tsuper._afterNewApplyThemes();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getFill(_target: Sprite): IGradient {\n\t\treturn {\n\t\t\taddColorStop: (_offset: number, _color: string) => { }\n\t\t};\n\t}\n\n\tpublic _changed() {\n\t\tsuper._changed();\n\n\t\t//if (this.isDirty(\"target\") && this.get(\"target\")) {\n\t\t//\tthis.get(\"target\")!.events.on(\"boundschanged\", () => {\n\n\t\t//\t});\n\t\t//}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getBounds(target: Sprite): IBounds {\n\t\tconst gradientTarget = this.get(\"target\");\n\t\tif (gradientTarget) {\n\t\t\tlet bounds = gradientTarget.globalBounds();\n\n\t\t\tconst p0 = target.toLocal({ x: bounds.left, y: bounds.top });\n\t\t\tconst p1 = target.toLocal({ x: bounds.right, y: bounds.top });\n\t\t\tconst p2 = target.toLocal({ x: bounds.right, y: bounds.bottom });\n\t\t\tconst p3 = target.toLocal({ x: bounds.left, y: bounds.bottom });\n\n\t\t\treturn {\n\t\t\t\tleft: Math.min(p0.x, p1.x, p2.x, p3.x),\n\t\t\t\ttop: Math.min(p0.y, p1.y, p2.y, p3.y),\n\t\t\t\tright: Math.max(p0.x, p1.x, p2.x, p3.x),\n\t\t\t\tbottom: Math.max(p0.y, p1.y, p2.y, p3.y)\n\t\t\t}\n\t\t}\n\t\treturn target._display.getLocalBounds();\n\t}\n\n}\n","import type { IGradient } from \"../backend/Renderer\";\nimport type { Sprite } from \"../Sprite\";\n\nimport { Gradient, IGradientSettings, IGradientPrivate } from \"./Gradient\";\nimport { Color } from \"../../util/Color\";\n\nimport * as $array from \"../../util/Array\";\nimport * as $type from \"../../util/Type\";\nimport * as $math from \"../../util/Math\";\n\n\nexport interface ILinearGradientSettings extends IGradientSettings {\n\n\t/**\n\t * Gradient rotation, in degrees.\n\t *\n\t * @default 90\n\t */\n\trotation?: number;\n\n}\n\nexport interface ILinearGradientPrivate extends IGradientPrivate {\n}\n\n/**\n * Linear gradient.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\n */\nexport class LinearGradient extends Gradient {\n\n\tdeclare public _settings: ILinearGradientSettings;\n\tdeclare public _privateSettings: ILinearGradientPrivate;\n\n\tpublic static className: string = \"LinearGradient\";\n\tpublic static classNames: Array = Gradient.classNames.concat([LinearGradient.className]);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getFill(target: Sprite): IGradient {\n\t\tconst rotation = this.get(\"rotation\", 0);\n\t\tlet bounds = this.getBounds(target);\n\n\t\tlet l = bounds.left || 0;\n\t\tlet r = bounds.right || 0;\n\t\tlet t = bounds.top || 0;\n\t\tlet b = bounds.bottom || 0;\n\n\t\tlet cos = $math.cos(rotation);\n\t\tlet sin = $math.sin(rotation);\n\n\t\tlet w = cos * (r - l);\n\t\tlet h = sin * (b - t);\n\n\t\tlet longer = Math.max(w, h);\n\n\t\tconst gradient = this._root._renderer.createLinearGradient(\n\t\t\tl,\n\t\t\tt,\n\t\t\tl + longer * cos,\n\t\t\tt + longer * sin\n\t\t);\n\n\t\tconst stops = this.get(\"stops\")!;\n\t\tif (stops) {\n\t\t\tlet i = 0;\n\t\t\t$array.each(stops, (stop) => {\n\n\t\t\t\tlet offset = stop.offset;\n\n\t\t\t\tif (!$type.isNumber(offset)) {\n\t\t\t\t\toffset = i / (stops.length - 1);\n\t\t\t\t}\n\n\t\t\t\tlet opacity = stop.opacity;\n\n\t\t\t\tif (!$type.isNumber(opacity)) {\n\t\t\t\t\topacity = 1;\n\t\t\t\t}\n\n\t\t\t\tlet color = stop.color;\n\n\t\t\t\tif (color) {\n\n\t\t\t\t\tconst lighten = stop.lighten;\n\t\t\t\t\tif (lighten) {\n\t\t\t\t\t\tcolor = Color.lighten(color, lighten)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst brighten = stop.brighten;\n\t\t\t\t\tif (brighten) {\n\t\t\t\t\t\tcolor = Color.brighten(color, brighten)\n\t\t\t\t\t}\n\n\t\t\t\t\tgradient.addColorStop(offset, 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + opacity + ')');\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t})\n\t\t}\n\t\treturn gradient;\n\t}\n}\n","import type { IGraphics, IPattern } from \"../backend/Renderer\";\nimport type { Color } from \"../../util/Color\";\n\nimport { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"../../util/Entity\";\n\nexport interface IPatternSettings extends IEntitySettings {\n\n\t/**\n\t * Rotation of patterm in degrees. Supported values: -90 to 90.\n\t *\n\t * @default 0\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Rotation} for more info\n\t */\n\trotation?: number;\n\n\t/**\n\t * How pattern tiles are repeated when filling the area.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Repetition} for more info\n\t */\n\trepetition?: \"repeat\" | \"repeat-x\" | \"repeat-y\" | \"no-repeat\";\n\n\t/**\n\t * Width of the pattern tile, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Sizing_patterns} for more info\n\t */\n\twidth?: number;\n\n\t/**\n\t * Width of the pattern tile, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Sizing_patterns} for more info\n\t */\n\theight?: number;\n\n\t/**\n\t * Color of the pattern shape.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Colors} for more info\n\t */\n\tcolor?: Color;\n\n\t/**\n\t * Opacity of the pattern shape.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Colors} for more info\n\t */\n\tcolorOpacity?: number;\n\n\t/**\n\t * Width of the pattern's line elements.\n\t *\n\t * @default 1\n\t */\n\tstrokeWidth?: number;\n\n\t/**\n\t * Stroke (border or line) dash settings.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Dashed_lines} for more information\n\t */\n\tstrokeDasharray?: number[] | number;\n\n\t/**\n\t * Stroke (border or line) dash offset.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Dashed_lines} for more information\n\t */\n\tstrokeDashoffset?: number;\n\n\t/**\n\t * Color to fill gaps between pattern shapes.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Colors} for more info\n\t */\n\tfill?: Color;\n\n\t/**\n\t * Opacity of the fill for gaps between pattern shapes.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Colors} for more info\n\t */\n\tfillOpacity?: number;\n\n\t/**\n\t * @ignore\n\t */\n\tcolorInherited?: boolean;\n\n\t/**\n\t * @ignore\n\t */\n\tfillInherited?: boolean;\n}\n\nexport interface IPatternPrivate extends IEntityPrivate {\n}\n\nexport interface IPatternEvents extends IEntityEvents {\n}\n\n/**\n * Base class for patterns.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class Pattern extends Entity {\n\tprotected _afterNew() {\n\t\t// Applying themes because pattern will not have parent\n\t\tsuper._afterNewApplyThemes();\n\t}\n\n\tdeclare public _settings: IPatternSettings;\n\tdeclare public _privateSettings: IPatternPrivate;\n\n\tpublic static className: string = \"Pattern\";\n\tpublic static classNames: Array = Entity.classNames.concat([Pattern.className]);\n\n\tpublic _display: IGraphics = this._root._renderer.makeGraphics();\n\tpublic _backgroundDisplay: IGraphics = this._root._renderer.makeGraphics();\n\n\tprotected _clear = false;\n\n\tprotected _pattern: IPattern | undefined | null;\n\n\tpublic get pattern(): IPattern | undefined | null {\n\t\treturn this._pattern;\n\t}\n\n\tprotected _draw(): void { }\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"repetition\") || this.isDirty(\"width\") || this.isDirty(\"height\") || this.isDirty(\"rotation\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"colorOpacity\") || this.isDirty(\"fillOpacity\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\n\t\tthis._checkDirtyFill();\n\t}\n\n\tprotected _checkDirtyFill() {\n\t\tif (this.isDirty(\"color\") || this.isDirty(\"fill\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tpublic _changed() {\n\t\tsuper._changed();\n\n\t\tif (this._clear) {\n\t\t\tconst repetition = this.get(\"repetition\", \"\");\n\t\t\tconst width = this.get(\"width\", 100);\n\t\t\tconst height = this.get(\"height\", 100);\n\t\t\tconst fill = this.get(\"fill\");\n\t\t\tconst fillOpacity = this.get(\"fillOpacity\", 1);\n\n\t\t\tconst backgroundDisplay = this._backgroundDisplay;\n\t\t\tconst display = this._display;\n\n\t\t\tdisplay.clear();\n\t\t\tbackgroundDisplay.clear();\n\n\t\t\tif (fill && (fillOpacity > 0)) {\n\t\t\t\tbackgroundDisplay.beginFill(fill, fillOpacity);\n\t\t\t\tbackgroundDisplay.drawRect(0, 0, width, height);\n\t\t\t\tbackgroundDisplay.endFill();\n\t\t\t}\n\n\t\t\tdisplay.angle = this.get(\"rotation\", 0);\n\t\t\t//display.pivot = { x: width / 2, y: height / 2 };\n\t\t\tthis._draw();\n\n\t\t\tthis._pattern = this._root._renderer.createPattern(display, backgroundDisplay, repetition, width, height);\n\t\t}\n\n\t\tthis._clear = false;\n\t}\n}\n","import { Pattern, IPatternSettings, IPatternPrivate, IPatternEvents } from \"./Pattern\";\n\nexport interface IPicturePatternSettings extends IPatternSettings {\n\n\t/**\n\t * A source URI of the image.\n\t *\n\t * Can be relative or absolute URL, or data-uri.\n\t */\n\tsrc?: string;\n\n\t/**\n\t * How pattern should be sized:\n\t *\n\t * * `\"image\"` (default) - pattern will be sized to actual image dimensions.\n\t * * `\"pattern\"` - image will sized to image dimensions.\n\t * * `\"none\"` - image will be placed in the pattern, regardless of either dimensions.\n\t * \n\t * @default \"image\"\n\t */\n\tfit?: \"image\" | \"pattern\" | \"none\";\n\n\t/**\n\t * Center images.\n\t *\n\t * @default true\n\t */\n\tcentered?: boolean;\n\n\n\n\tcanvas?: HTMLCanvasElement;\n\n}\n\nexport interface IPicturePatternPrivate extends IPatternPrivate {\n}\n\nexport interface IPicturePatternEvents extends IPatternEvents {\n\n\t/**\n\t * Invoked when related image is loaded.\n\t */\n\tloaded: {};\n\n}\n\n/**\n * Picture pattern.\n *\n * @since 5.2.15\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class PicturePattern extends Pattern {\n\tdeclare public _settings: IPicturePatternSettings;\n\tdeclare public _privateSettings: IPicturePatternPrivate;\n\tdeclare public _events: IPicturePatternEvents;\n\n\tpublic static className: string = \"PicturePattern\";\n\tpublic static classNames: Array = Pattern.classNames.concat([PicturePattern.className]);\n\n\tpublic _image: HTMLImageElement | undefined;\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tthis._clear = true;\n\n\t\tif (this.isDirty(\"src\")) {\n\t\t\tthis._load();\n\t\t}\n\n\t\tconst canvas = this.get(\"canvas\");\n\t\tif (canvas) {\n\t\t\tthis.set(\"width\", canvas.width);\n\t\t\tthis.set(\"height\", canvas.height)\n\t\t}\t\t\n\t}\n\n\tprotected _draw() {\n\t\tsuper._draw();\n\t\tconst image = this._image;\n\t\tif (image) {\n\t\t\tconst patternWidth = this.get(\"width\", 100);\n\t\t\tconst patternHeight = this.get(\"height\", 100);\n\n\t\t\t// Fit\n\t\t\tconst fit = this.get(\"fit\", \"image\");\n\t\t\tlet width = 0;\n\t\t\tlet height = 0;\n\t\t\tif (fit == \"pattern\") {\n\t\t\t\twidth = patternWidth;\n\t\t\t\theight = patternHeight;\n\t\t\t}\n\t\t\telse {\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tif (fit == \"image\") {\n\t\t\t\t\tthis.set(\"width\", width);\n\t\t\t\t\tthis.set(\"height\", height);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Position\n\t\t\tconst centered = this.get(\"centered\", true);\n\t\t\tlet x = 0;\n\t\t\tlet y = 0;\n\t\t\tif (centered) {\n\t\t\t\tx = patternWidth / 2 - width / 2;\n\t\t\t\ty = patternHeight / 2 - height / 2;\n\t\t\t}\n\t\t\tthis._display.image(image, width, height, x, y);\n\t\t}\n\n\t\tconst canvas = this.get(\"canvas\");\n\t\tif (canvas) {\n\t\t\tthis._display.image(canvas, canvas.width, canvas.height, 0, 0);\n\t\t}\n\t}\n\n\tprotected _load() {\n\t\tconst src = this.get(\"src\");\n\t\tif (src) {\n\t\t\tconst image = new Image();\n\t\t\t//image.crossOrigin = \"Anonymous\";\n\t\t\timage.src = src!;\n\t\t\timage.decode().then(() => {\n\t\t\t\tthis._image = image;\n\t\t\t\tthis._draw();\n\t\t\t\tif (this.events.isEnabled(\"loaded\")) {\n\t\t\t\t\tthis.events.dispatch(\"loaded\", { type: \"loaded\", target: this });\n\t\t\t\t}\n\t\t\t}).catch((_error: any) => {\n\t\t\t\t// TODO: maybe raise error?\n\t\t\t});\n\t\t}\n\t}\n\n}","import type { Entity, Animation } from \"./Entity\";\nimport { Percent } from \"./Percent\";\nimport { Color } from \"./Color\";\nimport type { Easing } from \"./Ease\";\nimport { EventDispatcher, Events } from \"./EventDispatcher\";\nimport * as $object from \"./Object\";\n\nexport type Animations = { [K in keyof T]?: Animation };\n\n/**\n * @ignore\n */\nexport async function waitForAnimations(animations: Animations | undefined): Promise {\n\tif (animations !== undefined) {\n\t\tconst promises: Array> = [];\n\n\t\t$object.each(animations, (_, animation) => {\n\t\t\tpromises.push(animation.waitForStop());\n\t\t});\n\n\t\tawait Promise.all(promises);\n\t}\n}\n\n\ninterface ITime {\n\treadonly tag: unique symbol;\n}\n\n/**\n * New type which allows for conversion from a number into a Time, but not from a Time to a number\n */\nexport type Time = number | ITime;\n\n\n/**\n * @ignore\n */\nexport function normalize(value: number, min: number, max: number): Time {\n\tif (min === max) {\n\t\treturn 0;\n\n\t} else {\n\t\treturn Math.min(Math.max((value - min) * (1 / (max - min)), 0), 1);\n\t}\n}\n\n/**\n * @ignore\n */\nexport function range(diff: Time, from: number, to: number): number {\n\treturn from + (diff as number * (to - from));\n}\n\n/**\n * @ignore\n */\nexport function defaultInterpolate(diff: Time, from: A, to: B): A | B {\n\tif (diff >= 1) {\n\t\treturn to;\n\n\t} else {\n\t\treturn from;\n\t}\n}\n\n/**\n * @ignore\n */\nexport function percentInterpolate(diff: Time, from: Percent, to: Percent): Percent {\n\treturn new Percent(range(diff, from.percent, to.percent));\n}\n\n/**\n * @ignore\n */\nexport function colorInterpolate(diff: Time, from: Color, to: Color): Color {\n\treturn Color.interpolate(diff, from, to);\n}\n\n/**\n * @ignore\n */\nexport function getInterpolate(from: number, to: number): typeof range;\n\n/**\n * @ignore\n */\nexport function getInterpolate(from: Percent, to: Percent): typeof percentInterpolate;\n\n/**\n * @ignore\n */\nexport function getInterpolate(from: any, to: any): typeof defaultInterpolate;\n\n/**\n * @ignore\n */\nexport function getInterpolate(from: any, to: any): (diff: Time, from: any, to: any) => any {\n\tif (typeof from === \"number\" && typeof to === \"number\") {\n\t\treturn range;\n\t}\n\n\tif (from instanceof Percent && to instanceof Percent) {\n\t\treturn percentInterpolate;\n\t}\n\n\tif (from instanceof Color && to instanceof Color) {\n\t\treturn colorInterpolate;\n\t}\n\n\treturn defaultInterpolate;\n}\n\n\nexport enum AnimationState {\n\tStopped,\n\tPlaying,\n\tPaused,\n}\n\nexport interface IAnimation {\n\t_runAnimation(_currentTime: number): AnimationState;\n}\n\n\n/**\n * @ignore\n */\nexport interface IEntityEvents {\n\tstarted: {};\n\tstopped: {};\n\t// TODO replace this with stopped\n\tended: {};\n\tprogress: { progress: number };\n}\n\n/**\n * @ignore\n */\nexport class AnimationTime implements IAnimation {\n\tprotected _entity: Entity;\n\tprotected _duration: number;\n\n\tprotected _playingDuration: number | null = null;\n\tprotected _startingTime: number | null = null;\n\tprotected _current: Time = 0;\n\tprotected _from: Time = 0;\n\tprotected _to: Time = 0;\n\n\tdeclare public _events: IEntityEvents;\n\tpublic events: EventDispatcher> = new EventDispatcher();\n\n\tpublic easing: Easing | undefined;\n\n\tconstructor(entity: Entity, duration: number) {\n\t\tthis._entity = entity;\n\t\tthis._duration = duration;\n\t}\n\n\tprivate _stopEvent() {\n\t\tconst type = \"stopped\";\n\t\tif (this.events.isEnabled(type)) {\n\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t}\n\t}\n\n\tpublic _runAnimation(currentTime: number): AnimationState {\n\t\tif (this._playingDuration !== null) {\n\t\t\tif (this._startingTime === null) {\n\t\t\t\tthis._startingTime = currentTime;\n\t\t\t\treturn AnimationState.Playing;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst diff = (currentTime - this._startingTime) / this._playingDuration;\n\n\t\t\t\tif (diff >= 1) {\n\t\t\t\t\tthis._playingDuration = null;\n\t\t\t\t\tthis._startingTime = null;\n\t\t\t\t\tthis._from = this._to;\n\t\t\t\t\tthis._current = this._to;\n\t\t\t\t\tthis._entity.markDirty();\n\t\t\t\t\tthis._stopEvent();\n\t\t\t\t\tconst type = \"ended\";\n\t\t\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t\t\t\t}\n\t\t\t\t\treturn AnimationState.Stopped;\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._current = range(diff, this._from as number, this._to as number);\n\t\t\t\t\tthis._entity.markDirty();\n\n\t\t\t\t\tconst type = \"progress\";\n\t\t\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\t\t\tthis.events.dispatch(type, { type: type, target: this, progress: diff });\n\t\t\t\t\t}\n\n\t\t\t\t\treturn AnimationState.Playing;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\treturn AnimationState.Stopped;\n\t\t}\n\t}\n\n\tprivate _play() {\n\t\tthis._from = this._current;\n\n\t\tif (this._playingDuration === null) {\n\t\t\tthis._entity._root._addAnimation(this);\n\n\t\t\tconst type = \"started\";\n\t\t\tif (this.events.isEnabled(type)) {\n\t\t\t\tthis.events.dispatch(type, { type: type, target: this });\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis._startingTime = null;\n\t\t}\n\n\t\tthis._playingDuration = Math.abs((this._to as number) - (this._from as number)) * this._duration;\n\t}\n\n\tpublic get duration(): number {\n\t\treturn this._duration;\n\t}\n\n\tpublic set duration(value: number) {\n\t\tif (this._duration !== value) {\n\t\t\tthis._duration = value;\n\n\t\t\tif (value === 0) {\n\t\t\t\tthis.jumpTo(this._to);\n\n\t\t\t} else if (this._current !== this._to) {\n\t\t\t\tthis._play();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic get current(): Time {\n\t\tif (this.easing) {\n\t\t\treturn this.easing(this._current);\n\n\t\t} else {\n\t\t\treturn this._current;\n\t\t}\n\t}\n\n\tpublic stop() {\n\t\tthis.jumpTo(this._current);\n\t}\n\n\tpublic jumpTo(value: Time) {\n\t\tif (this._current !== value) {\n\t\t\tthis._entity.markDirty();\n\t\t}\n\n\t\tif (this._playingDuration !== null) {\n\t\t\tthis._stopEvent();\n\t\t}\n\n\t\tthis._playingDuration = null;\n\t\tthis._startingTime = null;\n\t\tthis._current = value;\n\t\tthis._from = value;\n\t\tthis._to = value;\n\t}\n\n\tpublic tweenTo(value: Time) {\n\t\tif (this._current === value || this._duration === 0) {\n\t\t\tthis.jumpTo(value);\n\n\t\t} else {\n\t\t\tif (this._to !== value) {\n\t\t\t\tthis._to = value;\n\t\t\t\tthis._play();\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/*export class AnimationValue extends AnimationTime {\n\tpublic _min: number;\n\tpublic _max: number;\n\n\tconstructor(entity: Entity, duration: number, min: number, max: number) {\n\t\tsuper(entity, duration);\n\t\tthis._min = min;\n\t\tthis._max = max;\n\t}\n\n\tpublic get min(): number {\n\t\treturn this._min;\n\t}\n\n\tpublic set min(value: number) {\n\t\tif (this._min !== value) {\n\t\t\tthis._min = value;\n\t\t\tthis._entity.markDirty();\n\t\t}\n\t}\n\n\tpublic get max(): number {\n\t\treturn this._max;\n\t}\n\n\tpublic set max(value: number) {\n\t\tif (this._max !== value) {\n\t\t\tthis._max = value;\n\t\t\tthis._entity.markDirty();\n\t\t}\n\t}\n\n\tpublic currentValue(): number {\n\t\treturn range(super.currentTime(), this._min, this._max);\n\t}\n\n\tpublic jumpToValue(value: number) {\n\t\tsuper.jumpToTime(normalize(value, this._min, this._max));\n\t}\n\n\tpublic tweenToValue(value: number) {\n\t\tsuper.tweenToTime(normalize(value, this._min, this._max));\n\t}\n}\n*/\n","/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport type { Optional } from \"./Type\";\nimport * as $type from \"./Type\";\n\n\n/**\n * ============================================================================\n * UTILITY FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Searches `array` for `value`.\n *\n * Returns -1 if not found.\n *\n * @param array Source array\n * @param value Value to search\n * @returns Index\n */\nexport function indexOf(array: ArrayLike, value: A): number {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\t// TODO handle NaN\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n * Calls `test` for each element in `array`.\n *\n * If `test` returns `true` then it immediately returns `true`.\n *\n * If `test` returns `false` for all of the elements in `array` then it returns `false`.\n *\n * @param array Source array\n * @param test Function which is called on each element\n * @returns Whether `test` returned true or not\n */\nexport function any(array: ArrayLike, test: (value: A) => boolean): boolean {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tif (test(array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Calls `fn` function for every member of array and returns a new array out\n * of all outputs.\n *\n * @param array Source array\n * @param fn Callback function\n * @returns New array\n */\nexport function map(array: ArrayLike, fn: (value: A, index: number) => B): Array {\n\tconst length = array.length;\n\tconst output = new Array(length);\n\n\tfor (let i = 0; i < length; ++i) {\n\t\toutput[i] = fn(array[i], i);\n\t}\n\n\treturn output;\n}\n\n/**\n * Iterates through all items in array and calls `fn` function for each of\n * them.\n *\n * @param array Source array\n * @param fn Callback function\n */\nexport function each(array: ArrayLike, fn: (value: A, index: number) => void): void {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tfn(array[i], i);\n\t}\n}\n\n/**\n * Iterates through all items in array in reverse order and calls `fn` function for each of\n * them.\n *\n * @param array Source array\n * @param fn Callback function\n */\nexport function eachReverse(array: ArrayLike, fn: (value: A, index: number) => void): void {\n\tlet i = array.length;\n\n\twhile (i > 0) {\n\t\t--i;\n\t\tfn(array[i], i);\n\t}\n}\n\n/**\n * Iterates through all items in array and calls `fn` function for each of\n * them.\n *\n * If `fn` call evaluates to `false`, further iteration is cancelled.\n *\n * @param array Source array\n * @param fn Callback function\n */\nexport function eachContinue(array: ArrayLike, fn: (value: A, index: number) => boolean): void {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tif (!fn(array[i], i)) {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Shifts an item at `index` towards beginning of the array.\n *\n * @param array Source array\n * @param index Target element index\n */\nexport function shiftLeft(array: Array, index: number): void {\n\tconst length = array.length;\n\n\tfor (let i = index; i < length; ++i) {\n\t\tarray[i - index] = array[i];\n\t}\n\n\tarray.length = length - index;\n}\n\n/**\n * Returns the last item of the array.\n *\n * @param array Source array\n * @returns Last item\n */\nexport function last(array: Array): Optional {\n\tconst length = array.length;\n\treturn length ? array[length - 1] : undefined;\n}\n\n/**\n * Returns the first item of the array.\n *\n * @param array Source array\n * @returns Last item\n */\nexport function first(array: Array): Optional {\n\treturn array[0];\n}\n\n/**\n * Inserts `element` into `array` at `index`.\n *\n * Caps `index` to be between `0` and `array.length`\n *\n * @param array Source array\n * @param element Item to insert\n * @param array Index to insert item at\n */\nexport function insert(array: Array, element: A, index: number): void {\n\t//if (array) {\n\tindex = Math.max(0, Math.min(index, array.length));\n\tarray.splice(index, 0, element);\n\t//}\n}\n\n/**\n * Removes all copies of `element` from `array` (if they exist) and then\n * inserts `element` at `index`.\n *\n * @param array Source array\n * @param element Item\n * @param array Index to move item to\n */\nexport function setIndex(array: Array, element: A, index: number): void {\n\tremove(array, element);\n\tinsert(array, element, index);\n}\n\n\n/**\n * Pushes all of the elements from `input` into `array`.\n *\n * @param array Output array\n * @param input Input array\n */\nexport function pushAll(array: Array, input: Array) {\n\tconst length = input.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tarray.push(input[i]);\n\t}\n}\n\n\n/**\n * Removes `element` from `array`.\n *\n * If there are multiple copies of `element`, they are all removed.\n *\n * @param array Source array\n * @param element Item to remove\n */\nexport function remove(array: Array, element: A): boolean {\n\tlet found: boolean = false;\n\tlet index: number = 0;\n\n\tfor (;;) {\n\t\tindex = array.indexOf(element, index);\n\n\t\tif (index === -1) {\n\t\t\treturn found;\n\n\t\t} else {\n\t\t\tfound = true;\n\t\t\tarray.splice(index, 1);\n\t\t}\n\t}\n}\n\nexport function removeFirst(array: Array, element: A): boolean {\n\tlet index: number = array.indexOf(element);\n\n\tif (index !== -1) {\n\t\tarray.splice(index, 1);\n\t\treturn true;\n\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * Adds an `element` to `array`.\n *\n * If array already contains and item like this, it is removed before adding\n * it again.\n *\n * Optionally `toIndex` can be specified to add element at specific index.\n *\n * @param array Source array\n * @param element Item to add\n * @param array Index to move item to\n */\nexport function move(array: Array, element: A, toIndex?: number): void {\n\t// @todo this implementation must be the same as the List.moveValue method\n\t// @todo don't do anything if the desired index is the same as the current index\n\tlet index = indexOf(array, element);\n\n\t// @todo remove all old values rather than only the first ?\n\tif (index !== -1) {\n\t\tremoveIndex(array, index);\n\t}\n\n\tif (toIndex == null) {\n\t\tarray.push(element);\n\t} else {\n\t\tinsertIndex(array, toIndex, element);\n\t}\n}\n\n\n/**\n * Inserts `element` into `array` at `index`.\n *\n * If `index` is not provided, it will insert `element` at the end of `array`.\n *\n * @param array Source array\n * @param element Item to add\n * @param array Index to add item at\n */\nexport function add(array: Array, element: A, index?: number): void {\n\t// Append to the end if index is not set\n\tif (!$type.isNumber(index)) {\n\t\tarray.push(element);\n\t}\n\n\t// Add to the beginning of array if index is 0\n\telse if (index === 0) {\n\t\tarray.unshift(element);\n\t}\n\t// Add to indicated place if index is set\n\telse {\n\t\tarray.splice(index, 0, element);\n\t}\n}\n\n\n/**\n * Pushes `element` into `array` if it doesn't already exist.\n *\n * @param array Source array\n * @param element Item to add\n */\nexport function pushOne(array: Array, element: A): void {\n\tif (array.indexOf(element) === -1) {\n\t\tarray.push(element);\n\t}\n}\n\n\n/**\n * Removes `element` from `array` (if it exists) and then inserts `element` at\n * `index`.\n *\n * If `index` is not provided, it will insert `element` at the end of `array`.\n *\n * @param array Source array\n * @param element Item to remove\n * @param array Index to move item to\n */\nexport function replace(array: Array, element: A, index?: number): void {\n\t// check if exists\n\tlet ind: number = array.indexOf(element);\n\n\t// remove if exists\n\tif (ind !== -1) {\n\t\tarray.splice(ind, 1);\n\t}\n\n\t// add to end if index is not set\n\tif (!$type.isNumber(index)) {\n\t\tarray.push(element);\n\t}\n\t// add to indicated place if index is set\n\telse {\n\t\tarray.splice(index, 0, element);\n\t}\n}\n\n/**\n * Wraps `input` in an array, if it isn't already an array.\n *\n * @param input Source value\n * @return An array\n */\nexport function toArray(input: Array | A): Array {\n\tif (Array.isArray(input)) {\n\t\treturn input;\n\t}\n\telse {\n\t\treturn [input];\n\t}\n}\n\n/**\n * Returns `true` if `element` exists in `array`.\n *\n * @param array Source array\n * @param element Item to search for\n * @returns Item in array?\n */\nexport function has(array: ArrayLike, element: A): boolean {\n\treturn indexOf(array, element) !== -1;\n}\n\n/**\n * Returns a shallow copy of `array`.\n *\n * @param array Source array\n * @returns Copy of the array\n */\nexport function copy(array: ArrayLike): Array {\n\tconst length = array.length;\n\n\t// It's faster to create the array with a pre-defined length\n\tconst output = new Array(length);\n\n\tfor (let i = 0; i < length; ++i) {\n\t\t// Because the array has a pre-defined length, we have to assign rather than push\n\t\t// This is also faster than pushing\n\t\toutput[i] = array[i];\n\t}\n\n\treturn output;\n}\n\n\n/**\n * Returns a copy of `array` which contains all the elements between `start`\n * and `end`. (including `start` and excluding `end`)\n *\n * If `end` is not provided, it defaults to `array.length`.\n *\n * @param array Source array\n * @param start Start index\n * @param end End index\n * @returns Part of the array\n */\nexport function slice(array: ArrayLike, start: number, end: number = array.length): Array {\n\tconst output = new Array(end - start);\n\n\tfor (let i = start; i < end; ++i) {\n\t\toutput[i - start] = array[i];\n\t}\n\n\treturn output;\n}\n\n/**\n * Inserts a value into array at specific index.\n *\n * @param array Source array\n * @param index Index\n * @param value Value to insert\n */\nexport function insertIndex(array: Array, index: number, value: A): void {\n\tarray.splice(index, 0, value);\n}\n\n/**\n * Removes a value from array at specific index.\n *\n * @param array Source array\n * @param index Index\n */\nexport function removeIndex(array: Array, index: number): void {\n\tarray.splice(index, 1);\n}\n\n/**\n * @ignore Exclude from docs\n * @todo Description\n */\nexport interface SortResult {\n\tfound: boolean;\n\tindex: number\n}\n\n/**\n * Searches the array using custom function and returns index of the item if\n * found.\n *\n * Will call `matches` function on all items of the array. If return value\n * evaluates to `true`, index is returned.\n *\n * Otherwise returns -1.\n *\n * @param array Source array\n * @param matches Search function\n * @returns Index of the item if found\n */\nexport function findIndex(array: ArrayLike, matches: (value: A, index: number) => boolean): number {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tif (matches(array[i], i)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n * This is the same as `findIndex` except it searches from right to left.\n *\n * @param array Source array\n * @param matches Search function\n * @returns Index of the item if found\n */\nexport function findIndexReverse(array: ArrayLike, matches: (value: A, index: number) => boolean): number {\n\tlet i = array.length;\n\n\twhile (i > 0) {\n\t\t--i;\n\t\tif (matches(array[i], i)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n * Searches the array using custom function and returns item if found.\n *\n * Will call `matches` function on all items of the array. If return value\n * evaluates to `true`, index is returned.\n *\n * Otherwise returns `undefined`.\n *\n * @param array Source array\n * @param matches Search function\n * @returns Item if found\n */\nexport function find(array: ArrayLike, matches: (value: A, index: number) => boolean): A | undefined {\n\tconst index = findIndex(array, matches);\n\n\tif (index !== -1) {\n\t\treturn array[index];\n\t}\n}\n\n/**\n * This is the same as `find` except it searches from right to left.\n *\n * @param array Source array\n * @param matches Search function\n * @returns Item if found\n */\nexport function findReverse(array: ArrayLike, matches: (value: A, index: number) => boolean): A | undefined {\n\tconst index = findIndexReverse(array, matches);\n\n\tif (index !== -1) {\n\t\treturn array[index];\n\t}\n}\n\n/**\n * Searches the array using custom function and returns item if found.\n *\n * Will call `matches` function on all items of the array. If value\n * is not `undefined`, it returns it.\n *\n * Otherwise returns `undefined`.\n *\n * @param array Source array\n * @param matches Search function\n * @returns Item if found\n */\nexport function findMap(array: ArrayLike, matches: (value: A, index: number) => B | undefined): B | undefined {\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tconst value = matches(array[i], i);\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * Iterates through all items in array and calls `fn` function for each of\n * them.\n *\n * @param array Source array\n * @param fn Callback function\n */\nexport function shuffle(array: Array) {\n\t// https://stackoverflow.com/a/2450976/449477\n\tlet currentIndex = array.length,\n\t\ttemporaryValue,\n\t\trandomIndex;\n\n\t// While there remain elements to shuffle...\n\twhile (0 !== currentIndex) {\n\t\t// Pick a remaining element...\n\t\trandomIndex = Math.floor(Math.random() * currentIndex);\n\t\tcurrentIndex -= 1;\n\n\t\t// And swap it with the current element.\n\t\ttemporaryValue = array[currentIndex];\n\t\tarray[currentIndex] = array[randomIndex];\n\t\tarray[randomIndex] = temporaryValue;\n\t}\n}\n\n\nexport type Ordering = -1 | 0 | 1;\n\n/**\n * @ignore Exclude from docs\n * @todo Description\n */\nexport interface SortResult {\n\tfound: boolean;\n\tindex: number\n}\n\n/**\n * Orders an array using specific `ordering` function and returns right-most index of\n * the `value`.\n *\n * @ignore Exclude from docs\n * @param array Source array\n * @param ordering An ordering function\n * @returns Result of the search\n */\nexport function getSortedIndex(array: ArrayLike, ordering: (left: A) => Ordering): SortResult {\n\tlet start = 0;\n\tlet end = array.length;\n\tlet found = false;\n\n\twhile (start < end) {\n\t\t// TODO is this faster/slower than using Math.floor ?\n\t\tconst pivot = (start + end) >> 1;\n\n\t\tconst order = ordering(array[pivot]);\n\n\t\t// less\n\t\tif (order < 0) {\n\t\t\tstart = pivot + 1;\n\n\t\t// equal\n\t\t} else if (order === 0) {\n\t\t\tfound = true;\n\t\t\tstart = pivot + 1;\n\n\t\t// more\n\t\t} else {\n\t\t\tend = pivot;\n\t\t}\n\t}\n\n\treturn {\n\t\tfound: found,\n\t\tindex: (found ? start - 1 : start)\n\t};\n}\n\n\n/**\n * Orders an array using specific `ordering` function and returns left-most index of\n * the `value`.\n *\n * @ignore Exclude from docs\n * @param array Source array\n * @param ordering An ordering function\n * @returns Result of the search\n */\nexport function getFirstSortedIndex(array: ArrayLike, ordering: (left: A) => Ordering): SortResult {\n\tlet start = 0;\n\tlet end = array.length;\n\tlet found = false;\n\n\twhile (start < end) {\n\t\t// TODO is this faster/slower than using Math.floor ?\n\t\tconst pivot = (start + end) >> 1;\n\n\t\tconst order = ordering(array[pivot]);\n\n\t\t// less\n\t\tif (order < 0) {\n\t\t\tstart = pivot + 1;\n\n\t\t// equal\n\t\t} else if (order === 0) {\n\t\t\tfound = true;\n\t\t\tend = pivot;\n\n\t\t// more\n\t\t} else {\n\t\t\tend = pivot;\n\t\t}\n\t}\n\n\treturn {\n\t\tfound: found,\n\t\tindex: start\n\t};\n}\n\n\nexport function keepIf(array: Array, keep: (value: A) => boolean): void {\n\tlet i = array.length;\n\n\twhile (i > 0) {\n\t\t--i;\n\n\t\tif (!keep(array[i])) {\n\t\t\tarray.splice(i, 1);\n\t\t}\n\t}\n}\n","import { range, Time } from \"./Animation\";\nimport * as $utils from \"./Utils\";\nimport * as $type from \"./Type\";\n\n/**\n * @ignore\n */\nfunction string2hex(string: string): number {\n\t//string = cssColorNames[string.toLowerCase()] || string;\n\n\tif (string[0] === \"#\") {\n\t\tstring = string.substr(1);\n\t}\n\tif (string.length == 3) {\n\t\tstring = string[0].repeat(2) + string[1].repeat(2) + string[2].repeat(2);\n\t}\n\n\treturn parseInt(string, 16);\n}\n\n/**\n * @ignore\n */\nexport function rgba2hex(color: string): number {\n\tcolor = color.replace(/[ ]/g, \"\");\n\n\t// Init\n\tlet matches: string[] | null = color.match(/^rgb\\(([0-9]*),([0-9]*),([0-9]*)\\)/i);\n\n\t// Try rgb() format\n\tif (matches) {\n\t\tmatches.push(\"1\");\n\n\t} else {\n\t\tmatches = color.match(/^rgba\\(([0-9]*),([0-9]*),([0-9]*),([.0-9]*)\\)/i);\n\n\t\tif (!matches) {\n\t\t\treturn 0x000000;\n\t\t}\n\t}\n\n\tlet hex = \"\";\n\tfor (let i = 1; i <= 3; i++) {\n\t\tlet val = parseInt(matches[i]).toString(16);\n\t\tif (val.length == 1) {\n\t\t\tval = \"0\" + val;\n\t\t}\n\t\thex += val;\n\t}\n\n\treturn string2hex(hex);\n\n}\n\n/**\n * Returns a new [[Color]] object base on input.\n *\n * Accepts parameters in CSS hex or rgb/rtba strings, or hex numbers.\n *\n * * `\"#f00\"`\n * * `\"#ff0000\"`\n * * `\"rgb(255, 0, 0)\"`\n * * `\"rgba(255, 0, 0, 1)\"`\n * * `0xff0000`\n * \n * @param input Input color\n * @return Color\n */\nexport function color(input: number | string): Color {\n\treturn Color.fromAny(input);\n}\n\n/**\n * Wherever color needs to be specified in amCharts 5, `Color` object needs to\n * be used.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/} for more info\n * @important\n */\nexport class Color {\n\tprotected _hex: number;\n\n\tprivate constructor(hex: number) {\n\t\tthis._hex = hex | 0;\n\t}\n\n\t/**\n\t * Color numeric value.\n\t */\n\tpublic get hex(): number {\n\t\treturn this._hex;\n\t}\n\n\t/**\n\t * Value of color's R channel.\n\t * @return R value\n\t */\n\tpublic get r(): number {\n\t\treturn this._hex >>> 16;\n\t}\n\n\t/**\n\t * Value of color's G channel.\n\t * @return G value\n\t */\n\tpublic get g(): number {\n\t\treturn (this._hex >> 8) & 0xFF;\n\t}\n\n\t/**\n\t * Value of color's B channel.\n\t * @return B value\n\t */\n\tpublic get b(): number {\n\t\treturn this._hex & 0xFF;\n\t}\n\n\t/**\n\t * Returns color CSS representation in form of `rgba(r, g, b, a)` string.\n\t * \n\t * @param alpha Opacity\n\t * @return CSS string\n\t */\n\tpublic toCSS(alpha: number = 1): string {\n\t\treturn \"rgba(\" + this.r + \", \" + this.g + \", \" + this.b + \", \" + alpha + \")\";\n\t}\n\n\t/**\n\t * Returns color CSS representation in form of `#rgb` string.\n\t * \n\t * @return CSS string\n\t */\n\tpublic toCSSHex(): string {\n\t\treturn \"#\" + $utils.padString(this.r.toString(16), 2) + $utils.padString(this.g.toString(16), 2) + $utils.padString(this.b.toString(16), 2);\n\t}\n\n\t/**\n\t * Returns color's HSL info.\n\t * @param alpha Opacity\n\t * @return HSL info\n\t */\n\tpublic toHSL(alpha: number = 1): $utils.iHSL {\n\t\treturn $utils.rgbToHsl({\n\t\t\tr: this.r,\n\t\t\tg: this.g,\n\t\t\tb: this.b,\n\t\t\ta: alpha\n\t\t})\n\t}\n\n\t/**\n\t * Converts HSL values into a new [[Color]] object.\n\t *\n\t * @param h H value\n\t * @param s S value\n\t * @param l L value\n\t * @return Color object\n\t */\n\tpublic static fromHSL(h: number, s: number, l: number): Color {\n\t\tconst rgb = $utils.hslToRgb({\n\t\t\th: h,\n\t\t\ts: s,\n\t\t\tl: l\n\t\t});\n\t\treturn this.fromRGB(rgb.r, rgb.g, rgb.b);\n\t}\n\n\tpublic toString(): string {\n\t\treturn this.toCSSHex();\n\t}\n\n\t/**\n\t * Converts hex number into a new [[Color]] object.\n\t *\n\t * ```TypeScript\n\t * Color.fromHex(0xff0000) // red\n\t * ```\n\t * ```JavaScript\n\t * Color.fromHex(0xff0000) // red\n\t * ```\n\t *\n\t * @param hex Hex color\n\t * @return Color\n\t */\n\tpublic static fromHex(hex: number): Color {\n\t\treturn new Color(hex);\n\t}\n\n\t/**\n\t * Converts RGB values to a new [[Color]] object.\n\t *\n\t * @param r R value\n\t * @param g G value\n\t * @param b B value\n\t * @return Color\n\t */\n\tpublic static fromRGB(r: number, g: number, b: number): Color {\n\t\treturn new Color((b | 0) + (g << 8) + (r << 16));\n\t}\n\n\t/**\n\t * Converts RGB string to a new [[Color]] object.\n\t *\n\t * ```TypeScript\n\t * Color.fromString(\"#ff0000\") // red\n\t * ```\n\t * ```JavaScript\n\t * Color.fromString(\"#ff0000\") // red\n\t * ```\n\t *\n\t * @param s RGB string\n\t * @return Color\n\t */\n\tpublic static fromString(s: string): Color {\n\t\treturn new Color(string2hex(s));\n\t}\n\n\t/**\n\t * Converts CSS rgba() syntax to a new [[Color]] object.\n\t *\n\t * ```TypeScript\n\t * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\n\t * ```\n\t * ```JavaScript\n\t * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\n\t * ```\n\t *\n\t * @param {string} s [description]\n\t * @return {Color} [description]\n\t */\n\tpublic static fromCSS(s: string): Color {\n\t\treturn new Color(rgba2hex(s));\n\t}\n\n\t/**\n\t * Convert to color from virtually anything.\n\t *\n\t * Will throw an exception if unable to resolve the color.\n\t *\n\t * @param s Source\n\t * @return Color\n\t */\n\tpublic static fromAny(s: string | number | Color): Color {\n\t\tif ($type.isString(s)) {\n\t\t\tif (s[0] == \"#\") {\n\t\t\t\treturn Color.fromString(s);\n\t\t\t}\n\t\t\telse if (s.substr(0, 3) == \"rgb\") {\n\t\t\t\treturn Color.fromCSS(s);\n\t\t\t}\n\t\t}\n\t\telse if ($type.isNumber(s)) {\n\t\t\treturn Color.fromHex(s);\n\t\t}\n\t\telse if (s instanceof Color) {\n\t\t\treturn Color.fromHex(s.hex);\n\t\t}\n\n\t\tthrow new Error(\"Unknown color syntax: \" + s);\n\t}\n\n\t/**\n\t * Returns a new [[Color]] object based on either `lightAlternative` or\n\t * `darkAlternative` depending on which one is more contrasting with\n\t * the `color`.\n\t *\n\t * @param color Reference color\n\t * @param lightAlternative Light color\n\t * @param darkAlternative Dark color\n\t * @return Alternative color\n\t */\n\tpublic static alternative(color: Color, lightAlternative?: Color, darkAlternative?: Color): Color {\n\t\tconst rgb = $utils.alternativeColor(\n\t\t\t{ r: color.r, g: color.g, b: color.b },\n\t\t\tlightAlternative ? { r: lightAlternative.r, g: lightAlternative.g, b: lightAlternative.b } : undefined,\n\t\t\tdarkAlternative ? { r: darkAlternative.r, g: darkAlternative.g, b: darkAlternative.b } : undefined\n\t\t);\n\t\treturn this.fromRGB(rgb.r, rgb.g, rgb.b);\n\t}\n\n\t/**\n\t * Returns an intermediate Color between two reference colors depending on\n\t * the progress (`diff`) between the two.\n\t *\n\t * @param diff Progress\n\t * @param from Source color\n\t * @param to Target color\n\t * @param mode Interpolation mode\n\t * @return Color\n\t */\n\tpublic static interpolate(diff: Time, from: Color, to: Color, mode: \"rgb\" | \"hsl\" = \"rgb\"): Color {\n\t\tif (mode == \"hsl\") {\n\t\t\tconst fromHSL = from.toHSL();\n\t\t\tconst toHSL = to.toHSL();\n\t\t\treturn Color.fromHSL(\n\t\t\t\trange(diff, fromHSL.h, toHSL.h),\n\t\t\t\trange(diff, fromHSL.s, toHSL.s),\n\t\t\t\trange(diff, fromHSL.l, toHSL.l)\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\treturn Color.fromRGB(\n\t\t\t\trange(diff, from.r, to.r),\n\t\t\t\trange(diff, from.g, to.g),\n\t\t\t\trange(diff, from.b, to.b)\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a new [[Color]] lightened by `percent` value.\n\t *\n\t * Use negative value to darken the color.\n\t *\n\t * @param color Source color\n\t * @param percent Percent\n\t * @return New color\n\t */\n\tpublic static lighten(color: Color, percent: number): Color {\n\t\tconst rgb = $utils.lighten({ r: color.r, g: color.g, b: color.b }, percent);\n\t\treturn Color.fromRGB(rgb!.r, rgb!.g, rgb!.b);\n\t}\n\n\t/**\n\t * Returns a new [[Color]] brightened by `percent` value.\n\t *\n\t * Use negative value to dim the color.\n\t *\n\t * @param color Source color\n\t * @param percent Percent\n\t * @return New color\n\t */\n\tpublic static brighten(color: Color, percent: number): Color {\n\t\tconst rgb = $utils.brighten({ r: color.r, g: color.g, b: color.b }, percent);\n\t\treturn Color.fromRGB(rgb!.r, rgb!.g, rgb!.b);\n\t}\n\n\t/**\n\t * Returns a new [[Color]] saturated by `percent` value.\n\t *\n\t * Value range is between `0` (fully desaturated), to `1` (full color).\n\t *\n\t * @param color Source color\n\t * @param percent Percent\n\t * @return New color\n\t */\n\tpublic static saturate(color: Color, percent: number): Color {\n\t\tconst rgb = $utils.saturate({ r: color.r, g: color.g, b: color.b }, percent);\n\t\treturn Color.fromRGB(rgb!.r, rgb!.g, rgb!.b);\n\t}\n}\n","import { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\";\nimport { Color } from \"./Color\";\n\n\nexport interface IColorSetSettings extends IEntitySettings {\n\n\t/**\n\t * List of colors in the set.\n\t */\n\tcolors?: Color[];\n\n\t/**\n\t * A step size when using `next()`.\n\t *\n\t * E.g. setting to `2` will make it return every second color in the list.\n\t *\n\t * @default 1\n\t */\n\tstep?: number;\n\n\t/**\n\t * Start iterating colors from specific index.\n\t */\n\tstartIndex?: number;\n\n\t/**\n\t * If set to `true`, color set will reuse existing colors from the list\n\t * inestead of generating new ones.\n\t *\n\t * @default false\n\t */\n\treuse?: boolean;\n\n\t/**\n\t * A base color to generate new colors from if `colors` is not specified.\n\t * @type {[type]}\n\t */\n\tbaseColor?: Color;\n\n\t/**\n\t * A set of tranformation to apply to base list of colors when the set runs\n\t * out of colors and generates additional ones.\n\t */\n\tpassOptions?: IColorSetStepOptions;\n\n\t/**\n\t * If set, each returned color will be applied saturation.\n\t */\n\tsaturation?: number;\n\n\t// count?: number;\n}\n\nexport interface IColorSetPrivate extends IEntityPrivate {\n\n\tcurrentStep?: number;\n\tcurrentPass?: number;\n\n\t/**\n\t * @ignore\n\t */\n\tnumColors?: number;\n\n}\n\nexport interface IColorSetStepOptions {\n\n\t/**\n\t * Value to add to \"hue\".\n\t */\n\thue?: number;\n\n\t/**\n\t * Value to add to \"saturation\".\n\t */\n\tsaturation?: number;\n\n\t/**\n\t * Value to add to \"lightness\".\n\t */\n\tlightness?: number;\n\n}\n\n\n/**\n * An object which holds list of colors and can generate new ones.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Color_sets} for more info\n */\nexport class ColorSet extends Entity {\n\tpublic static className: string = \"ColorSet\";\n\tpublic static classNames: Array = Entity.classNames.concat([ColorSet.className]);\n\n\tdeclare public _settings: IColorSetSettings;\n\tdeclare public _privateSettings: IColorSetPrivate;\n\n\t//protected _currentPass: number = 0;\n\n\tprotected _afterNew() {\n\t\t// Applying themes because color set will not have parent\n\t\tsuper._afterNewApplyThemes();\n\t\tthis._dirty[\"colors\"] = false;\n\t}\n\n\tpublic _beforeChanged(): void {\n\t\tif (this.isDirty(\"colors\")) {\n\t\t\tthis.reset();\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic generateColors(): void {\n\t\tthis.setPrivate(\"currentPass\", this.getPrivate(\"currentPass\", 0) + 1)\n\t\tconst pass = this.getPrivate(\"currentPass\");\n\t\tconst colors = this.get(\"colors\", [this.get(\"baseColor\", Color.fromHex(0xff0000))]);\n\t\tif (!this.getPrivate(\"numColors\")) {\n\t\t\tthis.setPrivate(\"numColors\", colors.length);\n\t\t}\n\t\t//const len = colors.length;\n\t\tconst len = this.getPrivate(\"numColors\")!;\n\t\t//const start = len - this.getPrivate(\"numColors\")!;\n\t\tconst start = 0;\n\t\tconst passOptions = this.get(\"passOptions\")!;\n\t\tconst reuse = this.get(\"reuse\");\n\t\tfor (let i = start; i < len; i++) {\n\t\t\tif (reuse) {\n\t\t\t\tcolors.push(colors[i])\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst hsl = colors[i]!.toHSL();\n\t\t\t\tlet h = hsl.h + (passOptions.hue || 0) * pass!;\n\t\t\t\twhile (h > 1) h -= 1;\n\n\t\t\t\tlet s = hsl.s + (passOptions.saturation || 0) * pass!;\n\t\t\t\t//if (s > 1) s -= Math.floor(s);\n\t\t\t\tif (s > 1) s = 1;\n\t\t\t\tif (s < 0) s = 0;\n\n\t\t\t\tlet l = hsl.l + (passOptions.lightness || 0) * pass!;\n\t\t\t\t//if (l > 1) l -= Math.floor(l);\n\t\t\t\twhile (l > 1) l -= 1;\n\t\t\t\tcolors.push(Color.fromHSL(h, s, l));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns a [[Color]] at specific index.\n\t *\n\t * If there's no color at this index, a new color is generated.\n\t *\n\t * @param index Index\n\t * @return Color\n\t */\n\tpublic getIndex(index: number): Color {\n\t\tconst colors = this.get(\"colors\", []);\n\t\tconst saturation = this.get(\"saturation\");\n\t\tif (index >= colors.length) {\n\t\t\tthis.generateColors();\n\t\t\treturn this.getIndex(index);\n\t\t}\n\n\t\treturn saturation != null ? Color.saturate(colors[index], saturation!) : colors[index];\n\t}\n\n\t/**\n\t * Returns next [[Color]] in the list.\n\t *\n\t * If the list is out of colors, new ones are generated dynamically.\n\t */\n\tpublic next() {\n\t\tlet currentStep = this.getPrivate(\"currentStep\", this.get(\"startIndex\", 0));\n\t\tthis.setPrivate(\"currentStep\", currentStep + this.get(\"step\", 1));\n\t\treturn this.getIndex(currentStep);\n\t}\n\n\t/**\n\t * Resets counter to the start of the list, so the next call for `next()` will\n\t * return the first color.\n\t */\n\tpublic reset() {\n\t\tthis.setPrivate(\"currentStep\", this.get(\"startIndex\", 0));\n\t\tthis.setPrivate(\"currentPass\", 0);\n\t}\n}\n","import type { ICounterRef } from \"./Counter\";\nimport { List } from \"./List\";\nimport type { DataProcessor } from \"./DataProcessor\";\n\n/**\n * Defines interface for a [[List]] with a data processor.\n */\nexport interface IDataWithProcessor {\n\n\t/**\n\t * An optional processor for data.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Pre_processing_data} for more info\n\t */\n\tprocessor?: DataProcessor;\n\n}\n\n/**\n * A [[List]] that holds components data.\n * \n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\n */\nexport class ListData extends List implements ICounterRef, IDataWithProcessor {\n\n\t/**\n\t * @ignore\n\t */\n\tpublic incrementRef(): void { }\n\n\t/**\n\t * @ignore\n\t */\n\tpublic decrementRef(): void { }\n\n\t/**\n\t * An optional processor for data.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Pre_processing_data} for more info\n\t */\n\tpublic processor?: DataProcessor;\n\n\tprotected _onPush(newValue: T) {\n\t\tif (this.processor) {\n\t\t\tthis.processor.processRow(newValue);\n\t\t}\n\t\tsuper._onPush(newValue);\n\t}\n\n\tprotected _onInsertIndex(index: number, newValue: T) {\n\t\tif (this.processor) {\n\t\t\tthis.processor.processRow(newValue);\n\t\t}\n\t\tsuper._onInsertIndex(index, newValue);\n\t}\n\n\tprotected _onSetIndex(index: number, oldValue: T, newValue: T) {\n\t\tif (this.processor) {\n\t\t\tthis.processor.processRow(newValue);\n\t\t}\n\t\tsuper._onSetIndex(index, oldValue, newValue);\n\t}\n}\n\n/**\n * @deprecated\n * @todo remove\n */\nexport class JsonData implements ICounterRef, IDataWithProcessor {\n\tpublic incrementRef(): void { }\n\tpublic decrementRef(): void { }\n\n\tpublic processor?: DataProcessor;\n\tprotected _value: T;\n\n\tconstructor(value: T) {\n\t\tthis._value = value;\n\t}\n\n\t// TODO: how do we go about calling processor here?\n\n}\n","import type { ILocaleSettings } from \"./Language\"\n\nimport { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\nimport { TextFormatter } from \"./TextFormatter\"\nimport { Timezone } from \"./Timezone\"\n\nimport * as $type from \"./Type\"\nimport * as $utils from \"./Utils\";\n\n/**\n * Interface describing parsed date format definition.\n *\n * @ignore\n */\nexport interface DateFormatInfo {\n\t\"template\": string;\n\t\"parts\": any[];\n}\n\nexport interface IDateFormatterSettings extends IEntitySettings {\n\n\t/**\n\t * Should the first letter of the formatted date be capitalized?\n\t *\n\t * @default true\n\t */\n\tcapitalize?: boolean;\n\n\t/**\n\t * A date format to be used when formatting dates.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\n\t */\n\tdateFormat?: string | Intl.DateTimeFormatOptions;\n\n\t/**\n\t * An array of data fields that hold date values and should be formatted\n\t * with a [[DateFormatter]].\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/data-placeholders/#Formatting_placeholders} for more info\n\t */\n\tdateFields?: string[];\n\n\t/**\n\t * Locales to use when formatting using `Intl.DateFormatter`.\n\t */\n\tintlLocales?: string;\n\n}\n\nexport interface IDateFormatterPrivate extends IEntityPrivate {\n}\n\ntype Months = \"January\" | \"February\" | \"March\" | \"April\" | \"May\" | \"June\" | \"July\" | \"August\" | \"September\" | \"October\" | \"November\" | \"December\";\ntype ShortMonths = \"Jan\" | \"Feb\" | \"Mar\" | \"Apr\" | \"May(short)\" | \"Jun\" | \"Jul\" | \"Aug\" | \"Sep\" | \"Oct\" | \"Nov\" | \"Dec\";\ntype Weekdays = \"Sunday\" | \"Monday\" | \"Tuesday\" | \"Wednesday\" | \"Thursday\" | \"Friday\" | \"Saturday\";\ntype ShortWeekdays = \"Sun\" | \"Mon\" | \"Tue\" | \"Wed\" | \"Thu\" | \"Fri\" | \"Sat\";\n\nexport class DateFormatter extends Entity {\n\tdeclare public _settings: IDateFormatterSettings;\n\tdeclare public _privateSettings: IDateFormatterPrivate;\n\n\tprotected _setDefaults() {\n\t\t// Defaults\n\t\tthis._setDefault(\"capitalize\", true);\n\t\tthis._setDefault(\"dateFormat\", \"yyyy-MM-dd\");\n\n\t\tsuper._setDefaults();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\t}\n\n\tpublic format(source: any, format?: string | Intl.DateTimeFormatOptions): string {\n\n\t\t// Locale?\n\t\t// TODO\n\n\t\t// No format passed in or it's empty\n\t\tif (typeof format === \"undefined\" || format === \"\") {\n\t\t\tformat = this.get(\"dateFormat\", \"yyyy-MM-dd\");\n\t\t}\n\n\t\t// Init return value\n\t\tlet formatted;\n\n\t\t// Cast?\n\t\t// TODO: decide if we need to cast\n\t\tlet date: Date = source;\n\n\t\t// Is it a built-in format or Intl.DateTimeFormat\n\t\tif ($type.isObject(format)) {\n\n\t\t\ttry {\n\t\t\t\tconst locales = this.get(\"intlLocales\");\n\t\t\t\tif (locales) {\n\t\t\t\t\treturn new Intl.DateTimeFormat(locales, format).format(date);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn new Intl.DateTimeFormat(undefined, format).format(date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\treturn \"Invalid\";\n\t\t\t}\n\n\t\t}\n\n\t\t// get format info (it will also deal with parser caching)\n\t\tlet info = this.parseFormat(format);\n\n\t\t// Should we apply custom time zone?\n\t\tconst timezone = this._root.timezone;\n\t\tif (timezone && !this._root.utc) {\n\t\t\tdate = timezone.convertLocal(date);\n\t\t}\n\n\t\t// Check if it's a valid date\n\t\tif (!$type.isNumber(date.getTime())) {\n\t\t\t// TODO translation\n\t\t\t//return this._t(\"Invalid date\");\n\t\t\treturn \"Invalid date\";\n\t\t}\n\n\t\t// Apply format\n\t\tformatted = this.applyFormat(date, info);\n\n\t\t// Capitalize\n\t\tif (this.get(\"capitalize\")) {\n\t\t\tformatted = formatted.replace(\n\t\t\t\t/^.{1}/, formatted.substr(0, 1).toUpperCase()\n\t\t\t);\n\t\t}\n\n\t\t// We're done\n\t\treturn formatted;\n\t}\n\n\t/**\n\t * Applies format to Date.\n\t *\n\t * @param date Date object\n\t * @param info Parsed format information\n\t * @return Formatted date string\n\t */\n\tprotected applyFormat(date: Date, info: DateFormatInfo): string {\n\n\t\t// Init return value\n\t\tlet res = info.template;\n\n\t\t// Get values\n\t\tlet fullYear: number,\n\t\t\tmonth: number,\n\t\t\tweekday: number,\n\t\t\tday: number,\n\t\t\thours: number,\n\t\t\tminutes: number,\n\t\t\tseconds: number,\n\t\t\tmilliseconds: number,\n\t\t\ttimestamp: number = date.getTime();\n\t\tif (this._root.utc) {\n\t\t\tfullYear = date.getUTCFullYear();\n\t\t\tmonth = date.getUTCMonth();\n\t\t\tweekday = date.getUTCDay();\n\t\t\tday = date.getUTCDate();\n\t\t\thours = date.getUTCHours();\n\t\t\tminutes = date.getUTCMinutes();\n\t\t\tseconds = date.getUTCSeconds();\n\t\t\tmilliseconds = date.getUTCMilliseconds();\n\t\t}\n\t\telse {\n\t\t\tfullYear = date.getFullYear();\n\t\t\tmonth = date.getMonth();\n\t\t\tweekday = date.getDay();\n\t\t\tday = date.getDate();\n\t\t\thours = date.getHours();\n\t\t\tminutes = date.getMinutes();\n\t\t\tseconds = date.getSeconds();\n\t\t\tmilliseconds = date.getMilliseconds();\n\t\t}\n\n\t\t// Go through each part and format/replace it in template\n\t\tfor (let i = 0, len = info.parts.length; i < len; i++) {\n\t\t\tlet value: string = \"\";\n\t\t\tswitch (info.parts[i]) {\n\n\t\t\t\tcase \"G\":\n\t\t\t\t\tvalue = this._t(\n\t\t\t\t\t\tfullYear < 0\n\t\t\t\t\t\t\t? \"_era_bc\"\n\t\t\t\t\t\t\t: \"_era_ad\"\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"yyyy\":\n\t\t\t\t\tvalue = Math.abs(fullYear).toString();\n\t\t\t\t\tif (fullYear < 0) {\n\t\t\t\t\t\tvalue += this._t(\"_era_bc\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"yyy\":\n\t\t\t\tcase \"yy\":\n\t\t\t\tcase \"y\":\n\t\t\t\t\tvalue = Math.abs(fullYear).toString().substr(-info.parts[i].length);\n\t\t\t\t\tif (fullYear < 0) {\n\t\t\t\t\t\tvalue += this._t(\"_era_bc\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"YYYY\":\n\t\t\t\tcase \"YYY\":\n\t\t\t\tcase \"YY\":\n\t\t\t\tcase \"Y\":\n\t\t\t\t\tlet year = $utils.getWeekYear(date, this._root.utc);\n\t\t\t\t\tif (info.parts[i] == \"YYYY\") {\n\t\t\t\t\t\tvalue = Math.abs(year).toString();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalue = Math.abs(year).toString().substr(-info.parts[i].length);\n\t\t\t\t\t}\n\t\t\t\t\tif (year < 0) {\n\t\t\t\t\t\tvalue += this._t(\"_era_bc\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"u\":\n\t\t\t\t\t// @todo\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"q\":\n\t\t\t\t\tvalue = \"\" + Math.ceil((date.getMonth() + 1) / 3);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MMMMM\":\n\t\t\t\t\tvalue = this._t(this._getMonth(month)).substr(0, 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\tvalue = this._t(this._getMonth(month));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\tvalue = this._t(this._getShortMonth(month));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MM\":\n\t\t\t\t\tvalue = $utils.padString(month + 1, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"M\":\n\t\t\t\t\tvalue = (month + 1).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ww\":\n\t\t\t\t\tvalue = $utils.padString($utils.getWeek(date, this._root.utc), 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"w\":\n\t\t\t\t\tvalue = $utils.getWeek(date, this._root.utc).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"W\":\n\t\t\t\t\tvalue = $utils.getMonthWeek(date, this._root.utc).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"dd\":\n\t\t\t\t\tvalue = $utils.padString(day, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"d\":\n\t\t\t\t\tvalue = day.toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"DD\":\n\t\t\t\tcase \"DDD\":\n\t\t\t\t\tvalue = $utils.padString($utils.getYearDay(date, this._root.utc).toString(), info.parts[i].length, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"D\":\n\t\t\t\t\tvalue = $utils.getYearDay(date, this._root.utc).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"F\":\n\t\t\t\t\t// @todo\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"g\":\n\t\t\t\t\t// @todo\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"t\":\n\t\t\t\t\tvalue = this._root.language.translateFunc(\"_dateOrd\").call(this, day);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"E\":\n\t\t\t\t\tvalue = (weekday || 7).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"EE\":\n\t\t\t\t\tvalue = $utils.padString((weekday || 7).toString(), 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"EEE\":\n\t\t\t\tcase \"eee\":\n\t\t\t\t\tvalue = this._t(this._getShortWeekday(weekday));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"EEEE\":\n\t\t\t\tcase \"eeee\":\n\t\t\t\t\tvalue = this._t(this._getWeekday(weekday));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"EEEEE\":\n\t\t\t\tcase \"eeeee\":\n\t\t\t\t\tvalue = this._t(this._getShortWeekday(weekday)).substr(0, 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"e\":\n\t\t\t\tcase \"ee\":\n\t\t\t\t\tvalue = (weekday - (this._root.locale.firstDayOfWeek || 1) + 1).toString();\n\t\t\t\t\tif (info.parts[i] == \"ee\") {\n\t\t\t\t\t\tvalue = $utils.padString(value, 2, \"0\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif (hours >= 12) {\n\t\t\t\t\t\tvalue = this._t(\"PM\");\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalue = this._t(\"AM\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"aa\":\n\t\t\t\t\tif (hours >= 12) {\n\t\t\t\t\t\tvalue = this._t(\"P.M.\");\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalue = this._t(\"A.M.\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"aaa\":\n\t\t\t\t\tif (hours >= 12) {\n\t\t\t\t\t\tvalue = this._t(\"P\");\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalue = this._t(\"A\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"h\":\n\t\t\t\t\tvalue = $utils.get12Hours(hours).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"hh\":\n\t\t\t\t\tvalue = $utils.padString($utils.get12Hours(hours), 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"H\":\n\t\t\t\t\tvalue = hours.toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"HH\":\n\t\t\t\t\tvalue = $utils.padString(hours, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"K\":\n\t\t\t\t\tvalue = $utils.get12Hours(hours, 0).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"KK\":\n\t\t\t\t\tvalue = $utils.padString($utils.get12Hours(hours, 0), 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"k\":\n\t\t\t\t\tvalue = (hours + 1).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"kk\":\n\t\t\t\t\tvalue = $utils.padString(hours + 1, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"m\":\n\t\t\t\t\tvalue = minutes.toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"mm\":\n\t\t\t\t\tvalue = $utils.padString(minutes, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"s\":\n\t\t\t\t\tvalue = seconds.toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ss\":\n\t\t\t\t\tvalue = $utils.padString(seconds, 2, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"S\":\n\t\t\t\tcase \"SS\":\n\t\t\t\tcase \"SSS\":\n\t\t\t\t\tvalue = Math.round((milliseconds / 1000) * Math.pow(10, info.parts[i].length)).toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"x\":\n\t\t\t\t\tvalue = timestamp.toString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"n\":\n\t\t\t\tcase \"nn\":\n\t\t\t\tcase \"nnn\":\n\t\t\t\t\tvalue = $utils.padString(milliseconds, info.parts[i].length, \"0\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"z\":\n\t\t\t\t\tvalue = $utils.getTimeZone(date, false, false, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined).replace(/[+-]+[0-9]+$/, \"\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"zz\":\n\t\t\t\t\tvalue = $utils.getTimeZone(date, true, false, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"zzz\":\n\t\t\t\t\tvalue = $utils.getTimeZone(date, false, true, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined).replace(/[+-]+[0-9]+$/, \"\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"zzzz\":\n\t\t\t\t\tvalue = $utils.getTimeZone(date, true, true, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Z\":\n\t\t\t\tcase \"ZZ\":\n\t\t\t\t\tlet timezone = this._root.utc ? \"UTC\" : this._root.timezone;\n\t\t\t\t\tif (timezone instanceof Timezone) {\n\t\t\t\t\t\ttimezone = timezone.name;\n\t\t\t\t\t}\n\t\t\t\t\tconst offset = timezone ? $utils.getTimezoneOffset(timezone) : date.getTimezoneOffset();\n\n\t\t\t\t\tlet tz = Math.abs(offset) / 60;\n\t\t\t\t\tlet tzh = Math.floor(tz);\n\t\t\t\t\tlet tzm = tz * 60 - tzh * 60;\n\n\t\t\t\t\tif (this._root.utc) {\n\t\t\t\t\t\ttzh = 0;\n\t\t\t\t\t\ttzm = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (info.parts[i] == \"Z\") {\n\t\t\t\t\t\tvalue = \"GMT\";\n\t\t\t\t\t\tvalue += offset > 0 ? \"-\" : \"+\";\n\t\t\t\t\t\tvalue += $utils.padString(tzh, 2) + \":\" + $utils.padString(tzm, 2);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalue = offset > 0 ? \"-\" : \"+\";\n\t\t\t\t\t\tvalue += $utils.padString(tzh, 2) + $utils.padString(tzm, 2);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"i\":\n\t\t\t\t\tvalue = date.toISOString();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"I\":\n\t\t\t\t\tvalue = date.toUTCString();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t\tres = res.replace($type.PLACEHOLDER, value);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/**\n\t * Parses format into structured infromation.\n\t *\n\t * @param format Format template\n\t */\n\tprotected parseFormat(format: string): DateFormatInfo {\n\n\t\t// Check cache\n\t\t// TODO: implement caching of the parsed format\n\n\t\t// Init format parse info holder\n\t\tlet info: DateFormatInfo = {\n\t\t\t\"template\": \"\",\n\t\t\t\"parts\": []\n\t\t};\n\n\t\t// Let TextFormatter split into chunks\n\t\tlet chunks = TextFormatter.chunk(format, true);\n\t\tfor (let i: number = 0; i < chunks.length; i++) {\n\t\t\tlet chunk = chunks[i];\n\n\t\t\tif (chunk.type === \"value\") {\n\n\t\t\t\t// Just \"Date\"?\n\t\t\t\tif (chunk.text.match(/^date$/i)) {\n\t\t\t\t\tlet dateFormat = this.get(\"dateFormat\", \"yyyy-MM-dd\");\n\t\t\t\t\tif (!$type.isString(dateFormat)) {\n\t\t\t\t\t\tdateFormat = \"yyyy-MM-dd\";\n\t\t\t\t\t}\n\t\t\t\t\tchunk.text = dateFormat;\n\t\t\t\t}\n\n\t\t\t\t// Find all possible parts\n\t\t\t\tlet matches = chunk.text.match(/G|yyyy|yyy|yy|y|YYYY|YYY|YY|Y|u|q|MMMMM|MMMM|MMM|MM|M|ww|w|W|dd|d|DDD|DD|D|F|g|EEEEE|EEEE|EEE|EE|E|eeeee|eeee|eee|ee|e|aaa|aa|a|hh|h|HH|H|KK|K|kk|k|mm|m|ss|s|SSS|SS|S|A|zzzz|zzz|zz|z|ZZ|Z|t|x|nnn|nn|n|i|I/g);\n\n\t\t\t\t// Found?\n\t\t\t\tif (matches) {\n\n\t\t\t\t\t// Populate template\n\t\t\t\t\tfor (let x = 0; x < matches.length; x++) {\n\t\t\t\t\t\tinfo.parts.push(matches[x]);\n\t\t\t\t\t\tchunk.text = chunk.text.replace(matches[x], $type.PLACEHOLDER);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Apply to template\n\t\t\tinfo.template += chunk.text;\n\t\t}\n\n\t\t// Save cache\n\t\t// TODO\n\n\t\treturn info;\n\t}\n\n\tprotected _months(): Months[] {\n\t\treturn [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\t}\n\n\tprotected _getMonth(index: number): Months {\n\t\treturn this._months()[index];\n\t}\n\n\tprotected _shortMonths(): ShortMonths[] {\n\t\treturn [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May(short)\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t}\n\n\tprotected _getShortMonth(index: number): ShortMonths {\n\t\treturn this._shortMonths()[index];\n\t}\n\n\tprotected _weekdays(): Weekdays[] {\n\t\treturn [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\t}\n\n\tprotected _getWeekday(index: number): Weekdays {\n\t\treturn this._weekdays()[index];\n\t}\n\n\tprotected _shortWeekdays(): ShortWeekdays[] {\n\t\treturn [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t}\n\n\tprotected _getShortWeekday(index: number): ShortWeekdays {\n\t\treturn this._shortWeekdays()[index];\n\t}\n\n\tpublic parse(source: any, format: string): Date {\n\n\t\t// Is it already a Date\n\t\tif (source instanceof Date) {\n\t\t\treturn source;\n\t\t}\n\n\t\t// Is it a numeric timestamp\n\t\tif ($type.isNumber(source)) {\n\t\t\treturn new Date(source);\n\t\t}\n\n\t\t// Are we parsing a timestamp?\n\t\tif (format == \"x\") {\n\t\t\treturn new Date(parseInt(source));\n\t\t}\n\n\t\t// No? Let's check if it's string, and try converting to it if nec\n\t\tif (!$type.isString(source)) {\n\t\t\tsource = source.toString();\n\t\t}\n\n\t\t// Init return value\n\t\tlet res: Date;\n\n\t\t// Init RegEx for parsing\n\t\tlet reg: string = \"\";\n\n\t\t// Clean format\n\t\tformat = $utils.cleanFormat(format);\n\n\t\t// Clip format to length of the source string\n\t\tformat = format.substr(0, source.length);\n\n\t\t// Parse format\n\t\tlet info = this.parseFormat(format);\n\n\t\t// Init parsed items holder\n\t\tlet parsedIndexes = {\n\t\t\t\"year\": -1,\n\t\t\t\"year3\": -1,\n\t\t\t\"year2\": -1,\n\t\t\t\"year1\": -1,\n\t\t\t\"month\": -1,\n\t\t\t\"monthShort\": -1,\n\t\t\t\"monthLong\": -1,\n\t\t\t\"weekdayShort\": -1,\n\t\t\t\"weekdayLong\": -1,\n\t\t\t\"day\": -1,\n\t\t\t\"yearDay\": -1,\n\t\t\t\"week\": -1,\n\t\t\t\"hourBase0\": -1,\n\t\t\t\"hour12Base0\": -1,\n\t\t\t\"hourBase1\": -1,\n\t\t\t\"hour12Base1\": -1,\n\t\t\t\"minute\": -1,\n\t\t\t\"second\": -1,\n\t\t\t\"millisecond\": -1,\n\t\t\t\"millisecondDigits\": -1,\n\t\t\t\"am\": -1,\n\t\t\t\"zone\": -1,\n\t\t\t\"timestamp\": -1,\n\t\t\t\"iso\": -1\n\t\t};\n\n\t\t// Init values\n\t\tlet resValues = {\n\t\t\t\"year\": 1970,\n\t\t\t\"month\": 0,\n\t\t\t\"day\": 1,\n\t\t\t\"hour\": 0,\n\t\t\t\"minute\": 0,\n\t\t\t\"second\": 0,\n\t\t\t\"millisecond\": 0,\n\t\t\t\"timestamp\": null,\n\t\t\t\"offset\": 0,\n\t\t\t\"utc\": this._root.utc\n\t\t}\n\n\t\t// Index adjuster\n\t\tlet indexAdjust: number = 0;\n\t\tlet index: number = 0;\n\n\t\t// Iterate through all of the parts\n\t\tfor (let i: number = 0; i < info.parts.length; i++) {\n\n\t\t\t// Set current match index\n\t\t\tindex = i + indexAdjust + 1;\n\n\t\t\tswitch (info.parts[i]) {\n\n\t\t\t\tcase \"yyyy\":\n\t\t\t\tcase \"YYYY\":\n\t\t\t\t\treg += \"([0-9]{4})\";\n\t\t\t\t\tparsedIndexes.year = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"yyy\":\n\t\t\t\tcase \"YYY\":\n\t\t\t\t\treg += \"([0-9]{3})\";\n\t\t\t\t\tparsedIndexes.year3 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"yy\":\n\t\t\t\tcase \"YY\":\n\t\t\t\t\treg += \"([0-9]{2})\";\n\t\t\t\t\tparsedIndexes.year2 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"y\":\n\t\t\t\tcase \"Y\":\n\t\t\t\t\treg += \"([0-9]{1})\";\n\t\t\t\t\tparsedIndexes.year1 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MMMM\":\n\t\t\t\t\treg += \"(\" + this.getStringList(this._months()).join(\"|\") + \")\";\n\t\t\t\t\tparsedIndexes.monthLong = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MMM\":\n\t\t\t\t\treg += \"(\" + this.getStringList(this._shortMonths()).join(\"|\") + \")\";\n\t\t\t\t\tparsedIndexes.monthShort = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"MM\":\n\t\t\t\tcase \"M\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.month = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ww\":\n\t\t\t\tcase \"w\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.week = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"dd\":\n\t\t\t\tcase \"d\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.day = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"DDD\":\n\t\t\t\tcase \"DD\":\n\t\t\t\tcase \"D\":\n\t\t\t\t\treg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.yearDay = index;\n\t\t\t\t\tbreak;\n\n\n\t\t\t\tcase \"dddd\":\n\t\t\t\t\treg += \"(\" + this.getStringList(this._weekdays()).join(\"|\") + \")\";\n\t\t\t\t\tparsedIndexes.weekdayLong = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ddd\":\n\t\t\t\t\treg += \"(\" + this.getStringList(this._shortWeekdays()).join(\"|\") + \")\";\n\t\t\t\t\tparsedIndexes.weekdayShort = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"aaa\":\n\t\t\t\tcase \"aa\":\n\t\t\t\tcase \"a\":\n\t\t\t\t\t// TODO: fix (escape regex)\n\t\t\t\t\treg += \"(\" + this.getStringList([\"AM\", \"PM\", \"A\\.M\\.\", \"P\\.M\\.\", \"A\", \"P\"]).join(\"|\") + \")\";\n\t\t\t\t\tparsedIndexes.am = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"hh\":\n\t\t\t\tcase \"h\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.hour12Base1 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"HH\":\n\t\t\t\tcase \"H\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.hourBase0 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"KK\":\n\t\t\t\tcase \"K\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.hour12Base0 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"kk\":\n\t\t\t\tcase \"k\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.hourBase1 = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"mm\":\n\t\t\t\tcase \"m\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.minute = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ss\":\n\t\t\t\tcase \"s\":\n\t\t\t\t\treg += \"([0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.second = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"SSS\":\n\t\t\t\tcase \"SS\":\n\t\t\t\tcase \"S\":\n\t\t\t\t\treg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.millisecond = index;\n\t\t\t\t\tparsedIndexes.millisecondDigits = info.parts[i].length;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"nnn\":\n\t\t\t\tcase \"nn\":\n\t\t\t\tcase \"n\":\n\t\t\t\t\treg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\n\t\t\t\t\tparsedIndexes.millisecond = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"x\":\n\t\t\t\t\treg += \"([0-9]{1,})\";\n\t\t\t\t\tparsedIndexes.timestamp = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"Z\":\n\t\t\t\t\treg += \"GMT([-+]+[0-9]{2}:[0-9]{2})\";\n\t\t\t\t\tparsedIndexes.zone = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ZZ\":\n\t\t\t\t\treg += \"([\\\\-+]+[0-9]{2}[0-9]{2})\";\n\t\t\t\t\tparsedIndexes.zone = index;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"i\":\n\t\t\t\t\treg += \"([0-9]{4})-?([0-9]{2})-?([0-9]{2})T?([0-9]{2}):?([0-9]{2}):?([0-9]{2})\\\\.?([0-9]{0,3})([zZ]|[+\\\\-][0-9]{2}:?[0-9]{2}|$)\";\n\t\t\t\t\tparsedIndexes.iso = index;\n\t\t\t\t\tindexAdjust += 7;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"G\":\n\t\t\t\tcase \"YYYY\":\n\t\t\t\tcase \"YYY\":\n\t\t\t\tcase \"YY\":\n\t\t\t\tcase \"Y\":\n\t\t\t\tcase \"MMMMM\":\n\t\t\t\tcase \"W\":\n\t\t\t\tcase \"EEEEE\":\n\t\t\t\tcase \"EEEE\":\n\t\t\t\tcase \"EEE\":\n\t\t\t\tcase \"EE\":\n\t\t\t\tcase \"E\":\n\t\t\t\tcase \"eeeee\":\n\t\t\t\tcase \"eeee\":\n\t\t\t\tcase \"eee\":\n\t\t\t\tcase \"ee\":\n\t\t\t\tcase \"e\":\n\t\t\t\tcase \"zzzz\":\n\t\t\t\tcase \"zzz\":\n\t\t\t\tcase \"zz\":\n\t\t\t\tcase \"z\":\n\t\t\t\tcase \"t\":\n\t\t\t\t\t// Ignore\n\t\t\t\t\tindexAdjust--;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treg += \"[^0-9]*\";\n\t\t}\n\n\t\t// Try matching\n\t\tlet regex = new RegExp(reg);\n\t\tlet matches: RegExpMatchArray = source.match(regex);\n\n\t\tif (matches) {\n\t\t\t// Populate the date object\n\n\t\t\t// Full year\n\t\t\tif (parsedIndexes.year > -1) {\n\t\t\t\tresValues.year = parseInt(matches[parsedIndexes.year]);\n\t\t\t}\n\n\t\t\t// 3-digit year\n\t\t\tif (parsedIndexes.year3 > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.year3]);\n\t\t\t\tval += 1000;\n\t\t\t\tresValues.year = val;\n\t\t\t}\n\n\t\t\t// 2-digit year\n\t\t\tif (parsedIndexes.year2 > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.year2]);\n\t\t\t\tif (val > 50) {\n\t\t\t\t\tval += 1000;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tval += 2000;\n\t\t\t\t}\n\t\t\t\tresValues.year = val;\n\t\t\t}\n\n\t\t\t// 1-digit year\n\t\t\tif (parsedIndexes.year1 > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.year1]);\n\t\t\t\tval = Math.floor((new Date().getFullYear()) / 10) * 10 + val;\n\t\t\t\tresValues.year = val;\n\t\t\t}\n\n\t\t\t// Full month\n\t\t\tif (parsedIndexes.monthLong > -1) {\n\t\t\t\tresValues.month = this.resolveMonth(matches[parsedIndexes.monthLong]);\n\t\t\t}\n\n\t\t\t// Short month\n\t\t\tif (parsedIndexes.monthShort > -1) {\n\t\t\t\tresValues.month = this.resolveShortMonth(matches[parsedIndexes.monthShort]);\n\t\t\t}\n\n\t\t\t// Numeric month\n\t\t\tif (parsedIndexes.month > -1) {\n\t\t\t\tresValues.month = parseInt(matches[parsedIndexes.month]) - 1;\n\t\t\t}\n\n\t\t\t// Weekday\n\t\t\t// @todo\n\n\t\t\t// Week\n\t\t\tif ((parsedIndexes.week > -1) && (parsedIndexes.day === -1)) {\n\t\t\t\t// We parse weeks ONLY if day is not explicitly set\n\t\t\t\t// TODO: this needs work\n\t\t\t\t// (but maybe later - I can hardly imagine anyone passing their dates in weeks)\n\t\t\t\tresValues.month = 0;\n\t\t\t\tresValues.day = $utils.getDayFromWeek(\n\t\t\t\t\tparseInt(matches[parsedIndexes.week]),\n\t\t\t\t\tresValues.year,\n\t\t\t\t\t1,\n\t\t\t\t\tthis._root.utc\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Day\n\t\t\tif (parsedIndexes.day > -1) {\n\t\t\t\tresValues.day = parseInt(matches[parsedIndexes.day]);\n\t\t\t}\n\n\t\t\t// Year day\n\t\t\tif (parsedIndexes.yearDay > -1) {\n\t\t\t\tresValues.month = 0;\n\t\t\t\tresValues.day = parseInt(matches[parsedIndexes.yearDay]);\n\t\t\t}\n\n\t\t\t// 24 Hour (0-23)\n\t\t\tif (parsedIndexes.hourBase0 > -1) {\n\t\t\t\tresValues.hour = parseInt(matches[parsedIndexes.hourBase0]);\n\t\t\t}\n\n\t\t\t// 24 Hour (1-24)\n\t\t\tif (parsedIndexes.hourBase1 > -1) {\n\t\t\t\tresValues.hour = parseInt(matches[parsedIndexes.hourBase1]) - 1;\n\t\t\t}\n\n\t\t\t// 12 Hour (0-11)\n\t\t\tif (parsedIndexes.hour12Base0 > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.hour12Base0]);\n\t\t\t\tif (val == 11) {\n\t\t\t\t\tval = 0;\n\t\t\t\t}\n\t\t\t\tif ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\n\t\t\t\t\tval += 12;\n\t\t\t\t}\n\t\t\t\tresValues.hour = val;\n\t\t\t}\n\n\t\t\t// 12 Hour (1-12)\n\t\t\tif (parsedIndexes.hour12Base1 > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.hour12Base1]);\n\t\t\t\tif (val == 12) {\n\t\t\t\t\tval = 0;\n\t\t\t\t}\n\t\t\t\tif ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\n\t\t\t\t\tval += 12;\n\t\t\t\t}\n\t\t\t\tresValues.hour = val;\n\t\t\t}\n\n\t\t\t// Minute\n\t\t\tif (parsedIndexes.minute > -1) {\n\t\t\t\tresValues.minute = parseInt(matches[parsedIndexes.minute]);\n\t\t\t}\n\n\t\t\t// Second\n\t\t\tif (parsedIndexes.second > -1) {\n\t\t\t\tresValues.second = parseInt(matches[parsedIndexes.second]);\n\t\t\t}\n\n\t\t\t// Millisecond\n\t\t\tif (parsedIndexes.millisecond > -1) {\n\t\t\t\tlet val = parseInt(matches[parsedIndexes.millisecond]);\n\t\t\t\tif (parsedIndexes.millisecondDigits == 2) {\n\t\t\t\t\tval *= 10;\n\t\t\t\t}\n\t\t\t\telse if (parsedIndexes.millisecondDigits == 1) {\n\t\t\t\t\tval *= 100;\n\t\t\t\t}\n\t\t\t\tresValues.millisecond = val;\n\t\t\t}\n\n\t\t\t// Timestamp\n\t\t\tif (parsedIndexes.timestamp > -1) {\n\t\t\t\tresValues.timestamp = parseInt(matches[parsedIndexes.timestamp]);\n\n\t\t\t\tconst ts = new Date(resValues.timestamp);\n\t\t\t\tresValues.year = ts.getUTCFullYear();\n\t\t\t\tresValues.month = ts.getUTCMonth();\n\t\t\t\tresValues.day = ts.getUTCDate();\n\t\t\t\tresValues.hour = ts.getUTCHours();\n\t\t\t\tresValues.minute = ts.getUTCMinutes();\n\t\t\t\tresValues.second = ts.getUTCSeconds();\n\t\t\t\tresValues.millisecond = ts.getUTCMilliseconds();\n\t\t\t}\n\n\t\t\t// Adjust time zone\n\t\t\tif (parsedIndexes.zone > -1) {\n\t\t\t\tresValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.zone]);\n\t\t\t}\n\n\t\t\t// ISO\n\t\t\tif (parsedIndexes.iso > -1) {\n\n\t\t\t\tresValues.year = $type.toNumber(matches[parsedIndexes.iso + 0]);\n\t\t\t\tresValues.month = $type.toNumber(matches[parsedIndexes.iso + 1]) - 1;\n\t\t\t\tresValues.day = $type.toNumber(matches[parsedIndexes.iso + 2]);\n\t\t\t\tresValues.hour = $type.toNumber(matches[parsedIndexes.iso + 3]);\n\t\t\t\tresValues.minute = $type.toNumber(matches[parsedIndexes.iso + 4]);\n\t\t\t\tresValues.second = $type.toNumber(matches[parsedIndexes.iso + 5]);\n\t\t\t\tresValues.millisecond = $type.toNumber(matches[parsedIndexes.iso + 6]);\n\n\t\t\t\tif (matches[parsedIndexes.iso + 7] == \"Z\" || matches[parsedIndexes.iso + 7] == \"z\") {\n\t\t\t\t\tresValues.utc = true;\n\t\t\t\t}\n\t\t\t\telse if (matches[parsedIndexes.iso + 7] != \"\") {\n\t\t\t\t\tresValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.iso + 7]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create Date object\n\t\t\tif (resValues.utc) {\n\t\t\t\tres = new Date(Date.UTC(\n\t\t\t\t\tresValues.year,\n\t\t\t\t\tresValues.month,\n\t\t\t\t\tresValues.day,\n\t\t\t\t\tresValues.hour,\n\t\t\t\t\tresValues.minute,\n\t\t\t\t\tresValues.second,\n\t\t\t\t\tresValues.millisecond\n\t\t\t\t));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tres = new Date(\n\t\t\t\t\tresValues.year,\n\t\t\t\t\tresValues.month,\n\t\t\t\t\tresValues.day,\n\t\t\t\t\tresValues.hour,\n\t\t\t\t\tresValues.minute + resValues.offset,\n\t\t\t\t\tresValues.second,\n\t\t\t\t\tresValues.millisecond\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Didn't match anything\n\t\t\t// Let's try dropping it into Date constructor and hope for the best\n\t\t\tres = new Date(source);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tprotected resolveTimezoneOffset(date: Date, zone: string): number {\n\t\tlet value = zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/);\n\t\tif (value) {\n\t\t\tlet match = zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/)!;\n\t\t\tlet dir = match[1];\n\t\t\tlet hour = match[2];\n\t\t\tlet minute = match[3];\n\t\t\tlet offset = parseInt(hour) * 60 + parseInt(minute);\n\n\t\t\t// Adjust offset\n\t\t\t// Making it negative does not seem to make sense, but it's right\n\t\t\t// because of how JavaScript calculates GMT offsets\n\t\t\tif (dir == \"+\") {\n\t\t\t\toffset *= -1;\n\t\t\t}\n\n\t\t\t// Check the difference in offset\n\t\t\tlet originalOffset = (date || new Date()).getTimezoneOffset();\n\t\t\tlet diff = offset - originalOffset;\n\t\t\treturn diff;\n\t\t}\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Resolves month name (i.e. \"December\") into a month number (11).\n\t *\n\t * @param value Month name\n\t * @return Month number\n\t */\n\tprotected resolveMonth(value: Months): number {\n\n\t\t// Let's try English first\n\t\tlet month: number = this._months().indexOf(value);\n\t\tif (month > -1) {\n\t\t\treturn month;\n\t\t}\n\n\t\t// Try the translation\n\t\tif (!this._root.language.isDefault()) {\n\t\t\tmonth = this._root.language.translateAll(this._months()).indexOf(value);\n\t\t\tif (month > -1) {\n\t\t\t\treturn month\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Resolves short month name (i.e. \"Dec\") into a month number.\n\t *\n\t * @param value Short month name\n\t * @return Month number\n\t */\n\tprotected resolveShortMonth(value: ShortMonths): number {\n\n\t\t// Let's try English first\n\t\tlet month: number = this._shortMonths().indexOf(value);\n\t\tif (month > -1) {\n\t\t\treturn month;\n\t\t}\n\n\t\t// Maybe long month (workaround for May)\n\t\tmonth = this._months().indexOf(value);\n\t\tif (month > -1) {\n\t\t\treturn month;\n\t\t}\n\n\t\t// Try the translation\n\t\tif (this._root.language && !this._root.language.isDefault()) {\n\t\t\tmonth = this._root.language.translateAll(this._shortMonths()).indexOf(value);\n\t\t\tif (month > -1) {\n\t\t\t\treturn month\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Checks if passed in string represents AM/PM notation in many of its\n\t * versions.\n\t *\n\t * @param value Source string\n\t * @return Is it AM/PM?\n\t */\n\tprotected isAm(value: string): boolean {\n\t\tlet list = this.getStringList([\"AM\", \"A.M.\", \"A\"]);\n\t\treturn list.indexOf(value.toUpperCase()) > -1;\n\t}\n\n\t/**\n\t * Translates list of strings.\n\t *\n\t * @param list Source strings\n\t * @return Translated strings\n\t */\n\tprotected getStringList(list: Array): Array {\n\t\tlet res: string[] = [];\n\t\tfor (let i: number = 0; i < list.length; i++) {\n\t\t\t// translate?\n\t\t\tif (this._root.language) {\n\t\t\t\tres.push($utils.escapeForRgex(this._t(list[i])));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tres.push($utils.escapeForRgex(list[i]));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t}\n\n}\n","/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport * as $array from \"./Array\";\nimport type { Optional } from \"./Type\";\n\n/**\n * Defines interface for disposable objects.\n *\n * @ignore Exclude from docs\n */\nexport interface IDisposer {\n\tisDisposed(): boolean;\n\tdispose(): void;\n}\n\n/**\n * A base class for disposable objects.\n *\n * @ignore Exclude from docs\n */\nexport abstract class DisposerClass implements IDisposer {\n\n\t/**\n\t * Is object disposed?\n\t */\n\tprivate _disposed: boolean;\n\n\t/**\n\t * Constructor.\n\t */\n\tconstructor() {\n\t\tthis._disposed = false;\n\t}\n\n\t/**\n\t * Checks if object is disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\tprotected abstract _dispose(): void;\n\n\t/**\n\t * Disposes the object.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\t\t\tthis._dispose();\n\t\t}\n\t}\n}\n\n/**\n * A class for creating an IDisposer.\n *\n * @ignore Exclude from docs\n */\nexport class Disposer implements IDisposer {\n\n\t/**\n\t * Is object disposed?\n\t */\n\tprivate _disposed: boolean;\n\n\t/**\n\t * Method that disposes the object.\n\t */\n\tprivate _dispose: () => void;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param dispose Function that disposes object\n\t */\n\tconstructor(dispose: () => void) {\n\t\tthis._disposed = false;\n\t\tthis._dispose = dispose;\n\t}\n\n\t/**\n\t * Checks if object is disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Disposes the object.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\t\t\tthis._dispose();\n\t\t}\n\t}\n}\n\n/**\n * This can be extended by other classes to add a `_disposers` property.\n *\n * @ignore Exclude from docs\n */\nexport class ArrayDisposer extends DisposerClass {\n\tprotected _disposers: Array = [];\n\n\tprotected _dispose(): void {\n\t\t$array.each(this._disposers, (x) => {\n\t\t\tx.dispose();\n\t\t});\n\t}\n}\n\n/**\n * A collection of related disposers that can be disposed in one go.\n *\n * @ignore Exclude from docs\n */\nexport class MultiDisposer extends DisposerClass {\n\tprotected _disposers: Array;\n\n\tconstructor(disposers: Array) {\n\t\tsuper();\n\t\tthis._disposers = disposers;\n\t}\n\n\tprotected _dispose(): void {\n\t\t$array.each(this._disposers, (x) => {\n\t\t\tx.dispose();\n\t\t});\n\t}\n\n\tpublic get disposers(): Array {\n\t\treturn this._disposers;\n\t}\n}\n\n/**\n * A special kind of Disposer that has attached value set.\n *\n * If a new value is set using `set()` method, the old disposer value is\n * disposed.\n *\n * @ignore Exclude from docs\n * @todo Description\n */\nexport class MutableValueDisposer extends DisposerClass {\n\n\t/**\n\t * Current disposer.\n\t */\n\tprivate _disposer: Optional;\n\n\t/**\n\t * Current value.\n\t */\n\tprivate _value: Optional;\n\n\tprotected _dispose(): void {\n\t\tif (this._disposer != null) {\n\t\t\tthis._disposer.dispose();\n\t\t\tthis._disposer = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Returns current value.\n\t *\n\t * @return Value\n\t */\n\tpublic get(): Optional {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Sets value and disposes previous disposer if it was set.\n\t *\n\t * @param value New value\n\t * @param disposer Disposer\n\t */\n\tpublic set(value: Optional, disposer: Optional): void {\n\t\tif (this._disposer != null) {\n\t\t\tthis._disposer.dispose();\n\t\t}\n\n\t\tthis._disposer = disposer;\n\t\tthis._value = value;\n\t}\n\n\t/**\n\t * Resets the disposer value.\n\t */\n\tpublic reset(): void {\n\t\tthis.set(undefined, undefined);\n\t}\n\n}\n\n/**\n * @ignore Exclude from docs\n * @todo Description\n */\nexport class CounterDisposer extends Disposer {\n\n\t/**\n\t * [_counter description]\n\t *\n\t * @todo Description\n\t */\n\tprivate _counter: number = 0;\n\n\t/**\n\t * [increment description]\n\t *\n\t * @todo Description\n\t */\n\tpublic increment() {\n\t\t// TODO throw an error if it is disposed\n\t\t++this._counter;\n\n\t\t// TODO make this more efficient\n\t\treturn new Disposer(() => {\n\t\t\t--this._counter;\n\n\t\t\tif (this._counter === 0) {\n\t\t\t\tthis.dispose();\n\t\t\t}\n\t\t});\n\t}\n\n}\n","import type { TimeUnit } from \"./Time\";\r\n\r\nimport { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\r\nimport { TextFormatter } from \"./TextFormatter\";\r\n\r\nimport * as $object from \"./Object\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $type from \"./Type\";\r\n\r\n\r\nexport interface IDurationFormatterSettings extends IEntitySettings {\r\n\r\n\t/**\r\n\t * A universal duration format to use wherever number needs to be formatted\r\n\t * as a duration.\r\n\t */\r\n\tdurationFormat?: string;\r\n\r\n\t/**\r\n\t * A base value. Any number below it will be considered \"negative\".\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tnegativeBase?: number;\r\n\r\n\t/**\r\n\t * Identifies what values are used in duration.\r\n\t *\r\n\t * Available options: `\"millisecond\"`, `\"second\"` (default), `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-durations/#Base_unit} for more info\r\n\t * @default \"second\"\r\n\t */\r\n\tbaseUnit?: TimeUnit;\r\n\r\n\t/**\r\n\t * Time unit dependent duration formats.\r\n\t *\r\n\t * Used be [[DurationAxis]].\r\n\t */\r\n\tdurationFormats?: Partial>>>;\r\n\r\n\t/**\r\n\t * An array of data fields that hold duration values and should be formatted\r\n\t * with a [[DurationFormatter]].\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/data-placeholders/#Formatting_placeholders} for more info\r\n\t */\r\n\tdurationFields?: string[];\r\n\r\n}\r\n\r\nexport interface IDurationFormatterPrivate extends IEntityPrivate {\r\n}\r\n\r\n/**\r\n * A class used to format numberic values as time duration.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-durations/} for more info\r\n */\r\nexport class DurationFormatter extends Entity {\r\n\tdeclare public _settings: IDurationFormatterSettings;\r\n\tdeclare public _privateSettings: IDurationFormatterPrivate;\r\n\r\n\tprotected _setDefaults() {\r\n\t\tconst dmillisecond = \"_duration_millisecond\";\r\n\t\tconst dsecond = \"_duration_second\";\r\n\t\tconst dminute = \"_duration_minute\";\r\n\t\tconst dhour = \"_duration_hour\";\r\n\t\tconst dday = \"_duration_day\";\r\n\t\tconst dweek = \"_duration_week\";\r\n\t\tconst dmonth = \"_duration_month\";\r\n\t\tconst dyear = \"_duration_year\";\r\n\r\n\t\tconst asecond = \"_second\";\r\n\t\tconst aminute = \"_minute\";\r\n\t\tconst ahour = \"_hour\";\r\n\t\tconst aday = \"_day\";\r\n\t\tconst aweek = \"_week\";\r\n\t\tconst amonth = \"_week\";\r\n\t\tconst ayear = \"_year\";\r\n\r\n\t\t// Defaults\r\n\t\tthis._setDefault(\"negativeBase\", 0);\r\n\t\tthis._setDefault(\"baseUnit\", \"second\");\r\n\t\tthis._setDefault(\"durationFormats\", {\r\n\t\t\t\"millisecond\": {\r\n\t\t\t\t\"millisecond\": this._t(dmillisecond),\r\n\t\t\t\t\"second\": this._t((dmillisecond + asecond) as any),\r\n\t\t\t\t\"minute\": this._t((dmillisecond + aminute) as any),\r\n\t\t\t\t\"hour\": this._t((dmillisecond + ahour) as any),\r\n\t\t\t\t\"day\": this._t((dmillisecond + aday) as any),\r\n\t\t\t\t\"week\": this._t((dmillisecond + aweek) as any),\r\n\t\t\t\t\"month\": this._t((dmillisecond + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dmillisecond + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"second\": {\r\n\t\t\t\t\"second\": this._t((dsecond) as any),\r\n\t\t\t\t\"minute\": this._t((dsecond + aminute) as any),\r\n\t\t\t\t\"hour\": this._t((dsecond + ahour) as any),\r\n\t\t\t\t\"day\": this._t((dsecond + aday) as any),\r\n\t\t\t\t\"week\": this._t((dsecond + aweek) as any),\r\n\t\t\t\t\"month\": this._t((dsecond + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dsecond + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"minute\": {\r\n\t\t\t\t\"minute\": this._t((dminute) as any),\r\n\t\t\t\t\"hour\": this._t((dminute + ahour) as any),\r\n\t\t\t\t\"day\": this._t((dminute + aday) as any),\r\n\t\t\t\t\"week\": this._t((dminute + aweek) as any),\r\n\t\t\t\t\"month\": this._t((dminute + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dminute + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"hour\": {\r\n\t\t\t\t\"hour\": this._t((dhour) as any),\r\n\t\t\t\t\"day\": this._t((dhour + aday) as any),\r\n\t\t\t\t\"week\": this._t((dhour + aweek) as any),\r\n\t\t\t\t\"month\": this._t((dhour + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dhour + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"day\": {\r\n\t\t\t\t\"day\": this._t((dday) as any),\r\n\t\t\t\t\"week\": this._t((dday + aweek) as any),\r\n\t\t\t\t\"month\": this._t((dday + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dday + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"week\": {\r\n\t\t\t\t\"week\": this._t((dweek) as any),\r\n\t\t\t\t\"month\": this._t((dweek + amonth) as any),\r\n\t\t\t\t\"year\": this._t((dweek + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"month\": {\r\n\t\t\t\t\"month\": this._t((dmonth) as any),\r\n\t\t\t\t\"year\": this._t((dmonth + ayear) as any)\r\n\t\t\t},\r\n\t\t\t\"year\": {\r\n\t\t\t\t\"year\": this._t(dyear)\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tsuper._setDefaults();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Collection of aliases for units.\r\n\t */\r\n\tprotected _unitAliases: { [index: string]: string } = {\r\n\t\t\"Y\": \"y\",\r\n\t\t\"D\": \"d\",\r\n\t\t\"H\": \"h\",\r\n\t\t\"K\": \"h\",\r\n\t\t\"k\": \"h\",\r\n\t\t\"n\": \"S\"\r\n\t};\r\n\r\n\tpublic _beforeChanged() {\r\n\t\tsuper._beforeChanged();\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the number as duration.\r\n\t *\r\n\t * For example `1000` (base unit seconds) would be converted to `16:40` as in\r\n\t * 16 minutes and 40 seconds.\r\n\t *\r\n\t * @param value Value to format\r\n\t * @param format Format to apply\r\n\t * @param base Override base unit\r\n\t * @return Formatted number\r\n\t */\r\n\tpublic format(value: number | string, format?: string, base?: TimeUnit): string {\r\n\r\n\t\t// no base unit?\r\n\t\tlet baseUnit = base || this.get(\"baseUnit\");\r\n\r\n\t\t// no format passed in or empty\r\n\t\tif (typeof format === \"undefined\" || format === \"\") {\r\n\t\t\tif (this.get(\"durationFormat\") != null) {\r\n\t\t\t\tformat = this.get(\"durationFormat\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tformat = this.getFormat($type.toNumber(value), undefined, baseUnit);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Clean format\r\n\t\tformat = $utils.cleanFormat(format!);\r\n\r\n\t\t// get format info (it will also deal with parser caching)\r\n\t\tlet info = this.parseFormat(format, baseUnit);\r\n\r\n\t\t// cast to number just in case\r\n\t\t// TODO: maybe use better casting\r\n\t\tlet source: number = Number(value);\r\n\r\n\t\t// format and replace the number\r\n\t\tlet details;\r\n\t\tif (source > this.get(\"negativeBase\")) {\r\n\t\t\tdetails = info.positive;\r\n\t\t}\r\n\t\telse if (source < this.get(\"negativeBase\")) {\r\n\t\t\tdetails = info.negative;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdetails = info.zero;\r\n\t\t}\r\n\r\n\r\n\t\t// Format\r\n\t\tlet formatted = this.applyFormat(source, details);\r\n\r\n\t\t// Apply color?\r\n\t\tif (details.color !== \"\") {\r\n\t\t\tformatted = \"[\" + details.color + \"]\" + formatted + \"[/]\";\r\n\t\t}\r\n\r\n\t\treturn formatted;\r\n\t}\r\n\r\n\t/**\r\n\t * Parses supplied format into structured object which can be used to format\r\n\t * the number.\r\n\t *\r\n\t * @param format Format string, i.e. \"#,###.00\"\r\n\t * @param base Override base unit\r\n\t * @return Parsed information\r\n\t */\r\n\tprotected parseFormat(format: string, base?: TimeUnit): any {\r\n\r\n\t\t// Check cache\r\n\t\t// TODO\r\n\t\t// let cached = this.getCache(format);\r\n\t\t// if (cached != null) {\r\n\t\t// \treturn cached;\r\n\t\t// }\r\n\r\n\t\t// no base unit?\r\n\t\tlet baseUnit = base || this.get(\"baseUnit\");\r\n\r\n\t\t// Initialize duration parsing info\r\n\t\tlet info = {\r\n\t\t\t\"positive\": {\r\n\t\t\t\t\"color\": \"\",\r\n\t\t\t\t\"template\": \"\",\r\n\t\t\t\t\"parts\": [],\r\n\t\t\t\t\"source\": \"\",\r\n\t\t\t\t\"baseUnit\": baseUnit,\r\n\t\t\t\t\"parsed\": false,\r\n\t\t\t\t\"absolute\": false\r\n\t\t\t},\r\n\t\t\t\"negative\": {\r\n\t\t\t\t\"color\": \"\",\r\n\t\t\t\t\"template\": \"\",\r\n\t\t\t\t\"parts\": [],\r\n\t\t\t\t\"source\": \"\",\r\n\t\t\t\t\"baseUnit\": baseUnit,\r\n\t\t\t\t\"parsed\": false,\r\n\t\t\t\t\"absolute\": false\r\n\t\t\t},\r\n\t\t\t\"zero\": {\r\n\t\t\t\t\"color\": \"\",\r\n\t\t\t\t\"template\": \"\",\r\n\t\t\t\t\"parts\": [],\r\n\t\t\t\t\"source\": \"\",\r\n\t\t\t\t\"baseUnit\": baseUnit,\r\n\t\t\t\t\"parsed\": false,\r\n\t\t\t\t\"absolute\": false\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Escape double vertical bars (that mean display one vertical bar)\r\n\t\tformat = format.replace(\"||\", $type.PLACEHOLDER2);\r\n\r\n\t\t// Split it up and deal with different formats\r\n\t\tlet parts = format.split(\"|\");\r\n\t\tinfo.positive.source = parts[0];\r\n\r\n\t\tif (typeof parts[2] === \"undefined\") {\r\n\t\t\tinfo.zero = info.positive;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinfo.zero.source = parts[2];\r\n\t\t}\r\n\r\n\t\tif (typeof parts[1] === \"undefined\") {\r\n\t\t\tinfo.negative = info.positive;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinfo.negative.source = parts[1];\r\n\t\t}\r\n\r\n\t\t// Parse each\r\n\t\t$object.each(info, (_part, item) => {\r\n\t\t\t// Already parsed\r\n\t\t\tif (item.parsed) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Check cached\r\n\t\t\t// TODO\r\n\t\t\t// if (typeof this.getCache(item.source) !== \"undefined\") {\r\n\t\t\t// \tinfo[part] = this.getCache(item.source);\r\n\t\t\t// \treturn;\r\n\t\t\t// }\r\n\r\n\t\t\t// Begin parsing\r\n\t\t\tlet partFormat: string = item.source;\r\n\r\n\t\t\t// Check for [] directives\r\n\t\t\tlet dirs: string[] | null = [];\r\n\t\t\tdirs = item.source.match(/^\\[([^\\]]*)\\]/);\r\n\t\t\tif (dirs && dirs.length && dirs[0] !== \"\") {\r\n\t\t\t\tpartFormat = item.source.substr(dirs[0].length);\r\n\t\t\t\titem.color = dirs[1];\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Let TextFormatter split into chunks\r\n\t\t\tlet chunks = TextFormatter.chunk(partFormat, true);\r\n\t\t\tfor (let i: number = 0; i < chunks.length; i++) {\r\n\t\t\t\tlet chunk = chunks[i];\r\n\r\n\t\t\t\t// replace back double vertical bar\r\n\t\t\t\tchunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\r\n\r\n\t\t\t\tif (chunk.type === \"value\") {\r\n\r\n\t\t\t\t\t// Just \"Duration\"?\r\n\t\t\t\t\t// if (chunk.text.toLowerCase() === \"duration\") {\r\n\t\t\t\t\t// \tchunk.text = durationFormat;\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t// Check for \"a\" (absolute) modifier\r\n\t\t\t\t\tif (chunk.text.match(/[yYMdDwhHKkmsSn]+a/)) {\r\n\t\t\t\t\t\titem.absolute = true;\r\n\t\t\t\t\t\tchunk.text = chunk.text.replace(/([yYMdDwhHKkmsSn]+)a/, \"$1\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Find all possible parts\r\n\t\t\t\t\tlet matches = chunk.text.match(/y+|Y+|M+|d+|D+|w+|h+|H+|K+|k+|m+|s+|S+|n+/g);\r\n\r\n\t\t\t\t\tif (matches) {\r\n\t\t\t\t\t\t// Populate template\r\n\t\t\t\t\t\tfor (let x = 0; x < matches.length; x++) {\r\n\t\t\t\t\t\t\t// Is it an alias?\r\n\t\t\t\t\t\t\tif (matches[x] == null) {\r\n\t\t\t\t\t\t\t\tmatches[x] = this._unitAliases[matches[x]];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\titem.parts.push(matches[x]);\r\n\t\t\t\t\t\t\tchunk.text = chunk.text.replace(matches[x], $type.PLACEHOLDER);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Apply to template\r\n\t\t\t\titem.template += chunk.text;\r\n\t\t\t}\r\n\r\n\t\t\t// Apply style formatting\r\n\t\t\t//item.template = TextFormatter.format(item.template, this.outputFormat);\r\n\r\n\t\t\t// Save cache\r\n\t\t\t// TODO\r\n\t\t\t//this.setCache(item.source, item);\r\n\r\n\t\t\t// Mark this as parsed\r\n\t\t\titem.parsed = true;\r\n\t\t});\r\n\r\n\t\t// Save cache (the whole thing)\r\n\t\t// TODO\r\n\t\t//this.setCache(format, info);\r\n\r\n\t\treturn info;\r\n\t}\r\n\r\n\t/**\r\n\t * Applies parsed format to a numeric value.\r\n\t *\r\n\t * @param value Value\r\n\t * @param details Parsed format as returned by {parseFormat}\r\n\t * @return Formatted duration\r\n\t */\r\n\tprotected applyFormat(value: number, details: any): string {\r\n\r\n\t\t// Use absolute values\r\n\t\tlet negative = !details.absolute && (value < this.get(\"negativeBase\"));\r\n\t\tvalue = Math.abs(value);\r\n\r\n\t\t// Recalculate to milliseconds\r\n\t\tlet tstamp = this.toTimeStamp(value, details.baseUnit);\r\n\r\n\t\t// Init return value\r\n\t\tlet res = details.template;\r\n\r\n\t\t// Iterate through duration parts\r\n\t\tfor (let i = 0, len = details.parts.length; i < len; i++) {\r\n\r\n\t\t\t// Gather the part\r\n\t\t\tlet part = details.parts[i];\r\n\t\t\tlet unit = this._toTimeUnit(part.substr(0, 1));\r\n\t\t\tlet digits = part.length;\r\n\r\n\t\t\t// Calculate current unit value\r\n\t\t\tlet ints = Math.floor(tstamp / this._getUnitValue(unit!));\r\n\t\t\tres = res.replace($type.PLACEHOLDER, $utils.padString(ints, digits, \"0\"));\r\n\r\n\t\t\t// Reduce timestamp\r\n\t\t\ttstamp -= ints * this._getUnitValue(unit!);\r\n\t\t}\r\n\r\n\t\t// Reapply negative sign\r\n\t\tif (negative) {\r\n\t\t\tres = \"-\" + res;\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts numeric value to timestamp in milliseconds.\r\n\t *\r\n\t * @param value A source value\r\n\t * @param baseUnit Base unit the source value is in: \"q\", \"s\", \"i\", \"h\", \"d\", \"w\", \"m\", \"y\"\r\n\t * @return Value representation as a timestamp in milliseconds\r\n\t */\r\n\tpublic toTimeStamp(value: number, baseUnit: TimeUnit): number {\r\n\t\treturn value * this._getUnitValue(baseUnit);\r\n\t}\r\n\r\n\tprotected _toTimeUnit(code: string): TimeUnit | undefined {\r\n\t\tswitch (code) {\r\n\t\t\tcase \"S\":\r\n\t\t\t\treturn \"millisecond\";\r\n\t\t\tcase \"s\":\r\n\t\t\t\treturn \"second\";\r\n\t\t\tcase \"m\":\r\n\t\t\t\treturn \"minute\";\r\n\t\t\tcase \"h\":\r\n\t\t\t\treturn \"hour\";\r\n\t\t\tcase \"d\":\r\n\t\t\t\treturn \"day\";\r\n\t\t\tcase \"w\":\r\n\t\t\t\treturn \"week\";\r\n\t\t\tcase \"M\":\r\n\t\t\t\treturn \"month\";\r\n\t\t\tcase \"y\":\r\n\t\t\t\treturn \"year\";\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Returns appropriate default format for the value.\r\n\t *\r\n\t * If `maxValue` is sepcified, it will use that value to determine the time\r\n\t * unit for the format.\r\n\t *\r\n\t * For example if your `baseUnit` is `\"second\"` and you pass in `10`, you\r\n\t * will get `\"10\"`.\r\n\t *\r\n\t * However, you might want it to be formatted in the context of bigger scale,\r\n\t * say 10 minutes (600 seconds). If you pass in `600` as `maxValue`, all\r\n\t * values, including small ones will use format with minutes, e.g.:\r\n\t * `00:10`, `00:50`, `12: 30`, etc.\r\n\t *\r\n\t * @param value Value to format\r\n\t * @param maxValue Maximum value to be used to determine format\r\n\t * @param baseUnit Base unit of the value\r\n\t * @return Format\r\n\t */\r\n\tpublic getFormat(value: number, maxValue?: number, baseUnit?: TimeUnit): string {\r\n\r\n\t\t// Is format override set?\r\n\t\tif (this.get(\"durationFormat\") != null) {\r\n\t\t\treturn this.get(\"durationFormat\")!;\r\n\t\t}\r\n\r\n\t\t// Get base unit\r\n\t\tif (!baseUnit) {\r\n\t\t\tbaseUnit = this.get(\"baseUnit\");\r\n\t\t}\r\n\r\n\t\tif (maxValue != null && value != maxValue) {\r\n\t\t\tvalue = Math.abs(value);\r\n\t\t\tmaxValue = Math.abs(maxValue);\r\n\t\t\tlet maxUnit = this.getValueUnit(Math.max(value, maxValue), baseUnit);\r\n\t\t\treturn (this.get(\"durationFormats\"))[baseUnit!][maxUnit!];\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet unit = this.getValueUnit(value, baseUnit);\r\n\t\t\treturn (this.get(\"durationFormats\"))[baseUnit!][unit!];\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns value's closest denominator time unit, e.g 100 seconds is\r\n\t * `\"minute\"`, while 59 seconds would still be `second`.\r\n\t *\r\n\t * @param value Source duration value\r\n\t * @param baseUnit Base unit\r\n\t * @return Denominator\r\n\t */\r\n\tpublic getValueUnit(value: number, baseUnit?: TimeUnit): TimeUnit | undefined {\r\n\r\n\t\t// Get base unit\r\n\t\tif (!baseUnit) {\r\n\t\t\tbaseUnit = this.get(\"baseUnit\");\r\n\t\t}\r\n\r\n\t\t// Convert to milliseconds\r\n\t\tlet currentUnit: any;\r\n\t\tlet ms = this.getMilliseconds(value, baseUnit);\r\n\t\t$object.eachContinue(this._getUnitValues(), (key, val) => {\r\n\t\t\tif (key == baseUnit || currentUnit) {\r\n\t\t\t\tlet num = ms / val;\r\n\t\t\t\tif (num <= 1) {\r\n\t\t\t\t\tif (!currentUnit) {\r\n\t\t\t\t\t\tcurrentUnit = key;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUnit = key;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn currentUnit;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts value to milliseconds according to `baseUnit`.\r\n\t *\r\n\t * @param value Source duration value\r\n\t * @param baseUnit Base unit\r\n\t * @return Value in milliseconds\r\n\t */\r\n\tpublic getMilliseconds(value: number, baseUnit?: TimeUnit): number {\r\n\r\n\t\t// Get base unit\r\n\t\tif (!baseUnit) {\r\n\t\t\tbaseUnit = this.get(\"baseUnit\");\r\n\t\t}\r\n\r\n\t\treturn value * this._getUnitValue(baseUnit!);\r\n\t}\r\n\r\n\tprotected _getUnitValue(timeUnit: TimeUnit): number {\r\n\t\treturn this._getUnitValues()[timeUnit];\r\n\t}\r\n\r\n\tprotected _getUnitValues(): any {\r\n\t\treturn {\r\n\t\t\t\"millisecond\": 1,\r\n\t\t\t\"second\": 1000,\r\n\t\t\t\"minute\": 60000,\r\n\t\t\t\"hour\": 3600000,\r\n\t\t\t\"day\": 86400000,\r\n\t\t\t\"week\": 604800000,\r\n\t\t\t\"month\": 2592000000,\r\n\t\t\t\"year\": 31536000000,\r\n\t\t};\r\n\t}\r\n\r\n}\r\n","/**\n * A collection of easing functions\n *\n * Parts of this collection are taken from D3.js library (https://d3js.org/)\n */\n\n/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport * as $math from \"./Math\";\nimport type { Time } from \"./Animation\";\n\nexport type Easing = (time: Time) => Time;\n\n/**\n * The functions below are from D3.js library (https://d3js.org/)\n *\n * ----------------------------------------------------------------------------\n * Copyright 2017 Mike Bostock\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n *\tthis list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *\tthis list of conditions and the following disclaimer in the documentation\n *\tand/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n *\tcontributors may be used to endorse or promote products derived from this\n *\tsoftware without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n * ----------------------------------------------------------------------------\n * @hidden\n */\n\n/**\n */\nexport function linear(t: Time): Time {\n\treturn t;\n}\n\nexport function quad(t: Time): Time {\n\treturn (t as number) * (t as number);\n}\n\nexport function cubic(t: Time): Time {\n\treturn (t as number) * (t as number) * (t as number);\n}\n\nexport function pow(t: Time, e: number): Time {\n\treturn Math.pow(t as number, e);\n}\n\nexport function exp(t: Time): Time {\n\treturn Math.pow(2, 10 * (t as number) - 10);\n}\n\nexport function sine(t: Time): Time {\n\treturn 1 - Math.cos((t as number) * $math.HALFPI);\n}\n\nexport function circle(t: Time): Time {\n\treturn 1 - Math.sqrt(1 - (t as number) * (t as number));\n}\n\n/**\n * ============================================================================\n * TRANSFORMERS\n * ============================================================================\n * @hidden\n */\n\n/**\n */\nexport function yoyo(ease: Easing): Easing {\n\treturn function (t: Time) {\n\t\tif ((t as number) < 0.5) {\n\t\t\treturn ease((t as number) * 2.0);\n\n\t\t} else {\n\t\t\treturn ease((1.0 - (t as number)) * 2.0);\n\t\t}\n\t};\n}\n\nexport function out(ease: Easing): Easing {\n\treturn function (t: Time) {\n\t\treturn 1.0 - (ease(1.0 - (t as number)) as number);\n\t};\n}\n\nexport function inOut(ease: Easing): Easing {\n\treturn function (t: Time) {\n\t\tif (t as number <= 0.5) {\n\t\t\treturn ease(t as number * 2.0) as number / 2.0;\n\n\t\t} else {\n\t\t\treturn 1.0 - (ease((1.0 - (t as number)) * 2.0) as number / 2.0);\n\t\t}\n\t};\n}\n\n/**\n * ============================================================================\n * BOUNCE\n * ============================================================================\n * @hidden\n */\nlet b1 = 4 / 11,\n\tb2 = 6 / 11,\n\tb3 = 8 / 11,\n\tb4 = 3 / 4,\n\tb5 = 9 / 11,\n\tb6 = 10 / 11,\n\tb7 = 15 / 16,\n\tb8 = 21 / 22,\n\tb9 = 63 / 64,\n\tb0 = 1 / b1 / b1;\n\nexport function bounce(t: Time): Time {\n\treturn 1 - (bounceOut(1 - (t as number)) as number);\n}\n\n/**\n * @ignore\n */\nfunction bounceOut(t: Time): Time {\n\tt = t as number;\n\tif (t < b1) {\n\t\treturn b0 * t * t;\n\t} else if (t < b3) {\n\t\treturn b0 * (t -= b2) * t + b4;\n\t} else if (t < b6) {\n\t\treturn b0 * (t -= b5) * t + b7;\n\t} else {\n\t\treturn b0 * (t -= b8) * t + b9;\n\t}\n}\n\n/**\n * ============================================================================\n * ELASTIC\n * ============================================================================\n * @hidden\n */\n\n/**\n * @ignore\n */\nlet tau = 2 * Math.PI;\n\n/**\n * @ignore\n */\nlet amplitude = 1;\n\n/**\n * @ignore\n */\nlet period = 0.3 / tau;\n\n/**\n * @ignore\n */\nlet s = Math.asin(1 / amplitude) * period;\n\nexport function elastic(t: Time): Time {\n\tlet v = t as number;\n\treturn amplitude * Math.pow(2, 10 * --v) * Math.sin((s - v) / period);\n}\n","import type { Entity, Dirty } from \"./Entity\";\nimport type { Animations } from \"./Animation\";\nimport * as $object from \"./Object\";\nimport * as $ease from \"./Ease\";\n\n/**\n * An object representing a collection of setting values to apply as required.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\n */\nexport class State {\n\tprivate _entity: E;\n\tpublic _settings: Partial;\n\tpublic _userSettings: Dirty = {};\n\n\tconstructor(entity: E, settings: Partial) {\n\t\tthis._entity = entity;\n\t\tthis._settings = settings;\n\n\t\t$object.each(settings, (key) => {\n\t\t\tthis._userSettings[key] = true;\n\t\t});\n\t}\n\n\t/**\n\t * Returns settings value for the specified `key`.\n\t *\n\t * If there is no value, `fallback` is returned instead (if set).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Settings value\n\t * @param callback Fallback value\n\t * @return Value\n\t */\n\tpublic get(key: Key): this[\"_settings\"][Key];\n\tpublic get(key: Key, fallback: F): NonNullable | F;\n\tpublic get(key: Key, fallback?: any): any {\n\t\tconst value = this._settings[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setRaw(key: Key, value: E[\"_settings\"][Key]) {\n\t\tthis._settings[key] = value;\n\t}\n\n\t/**\n\t * Sets a setting `value` for the specified `key` to be set when the state\n\t * is applied.\n\t *\n\t * @param key Setting key\n\t * @param value Setting value\n\t * @return Setting value\n\t */\n\tpublic set(key: Key, value: E[\"_settings\"][Key]) {\n\t\tthis._userSettings[key] = true;\n\t\tthis.setRaw(key, value);\n\t}\n\n\t/**\n\t * Removes a setting value for the specified `key`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t */\n\tpublic remove(key: Key) {\n\t\tdelete this._userSettings[key];\n\t\tdelete this._settings[key];\n\t}\n\n\t/**\n\t * Sets multiple settings at once.\n\t *\n\t * `settings` must be an object with key: value pairs.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param settings Settings\n\t */\n\tpublic setAll(settings: this[\"_settings\"]) {\n\t\t$object.keys(settings).forEach((key) => {\n\t\t\tthis.set(key, settings[key]);\n\t\t});\n\t}\n\n\tprivate _eachSetting(f: (key: Key, value: Value) => void): void {\n\t\t$object.each(this._settings, f as any);\n\t}\n\n\t/**\n\t * Applies the state to the target element.\n\t *\n\t * All setting values are set immediately.\n\t */\n\tpublic apply() {\n\t\tconst seen: Dirty = {};\n\n\t\tseen[\"stateAnimationEasing\"] = true;\n\t\tseen[\"stateAnimationDuration\"] = true;\n\n\t\tconst defaultState = this._entity.states.lookup(\"default\")!;\n\n\t\tthis._eachSetting((key, value) => {\n\t\t\tif (!seen[key]) {\n\t\t\t\tseen[key] = true;\n\n\t\t\t\t// save values to default state\n\t\t\t\tif (this !== defaultState) {\n\t\t\t\t\tif (!(key in defaultState._settings)) {\n\t\t\t\t\t\tdefaultState._settings[key] = this._entity.get(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._entity.set(key, value);\n\t\t\t}\n\t\t});\n\t}\n\n\n\n\t/**\n\t * Applies the state to the target element.\n\t *\n\t * Returns an object representing all [[Animation]] objects created for\n\t * each setting key transition.\n\t *\n\t * @return Animations\n\t */\n\tpublic applyAnimate(duration?: number): Animations {\n\n\t\tif (duration == null) {\n\t\t\tduration = this._settings.stateAnimationDuration;\n\t\t}\n\t\tif (duration == null) {\n\t\t\tduration = this.get(\"stateAnimationDuration\", this._entity.get(\"stateAnimationDuration\", 0));\n\t\t}\n\n\t\tlet easing = this._settings.stateAnimationEasing;\n\t\tif (easing == null) {\n\t\t\teasing = this.get(\"stateAnimationEasing\", this._entity.get(\"stateAnimationEasing\", $ease.cubic));\n\t\t}\n\n\t\tconst defaultState = this._entity.states.lookup(\"default\")!;\n\n\t\tconst seen: Dirty = {};\n\n\t\tseen[\"stateAnimationEasing\"] = true;\n\t\tseen[\"stateAnimationDuration\"] = true;\n\n\t\tconst animations: Animations = {};\n\n\t\tthis._eachSetting((key, value) => {\n\t\t\tif (!seen[key]) {\n\t\t\t\tseen[key] = true;\n\n\t\t\t\t// save values to default state\n\t\t\t\tif (this != defaultState) {\n\t\t\t\t\tif (!(key in defaultState._settings)) {\n\t\t\t\t\t\tdefaultState._settings[key] = this._entity.get(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst animation = this._entity.animate({\n\t\t\t\t\tkey: key,\n\t\t\t\t\tto: value,\n\t\t\t\t\tduration: duration!,\n\t\t\t\t\teasing: easing\n\t\t\t\t});\n\n\t\t\t\tif (animation) {\n\t\t\t\t\tanimations[key] = animation;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn animations;\n\t}\n}\n\n/**\n * Collection of [[State]] objects for an element.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\n */\nexport class States {\n\tprivate _states: { [key: string]: State } = {};\n\tprivate _entity: E;\n\n\tconstructor(entity: E) {\n\t\tthis._entity = entity;\n\t}\n\n\t/**\n\t * Checks if a state by `name` exists. Returns it there is one.\n\t *\n\t * @param name State name\n\t * @return State\n\t */\n\tpublic lookup(name: string): State | undefined {\n\t\treturn this._states[name];\n\t}\n\n\t/**\n\t * Sets supplied `settings` on a state by the `name`.\n\t *\n\t * If such state does not yet exists, it is created.\n\t *\n\t * @param name State name\n\t * @param settings Settings\n\t * @return New State\n\t */\n\tpublic create(name: string, settings: Partial): State {\n\t\tconst state = this._states[name];\n\n\t\tif (state) {\n\t\t\tstate.setAll(settings);\n\t\t\treturn state;\n\n\t\t} else {\n\t\t\tconst state = new State(this._entity, settings);\n\t\t\tthis._states[name] = state;\n\t\t\treturn state;\n\t\t}\n\t}\n\n\t/**\n\t * Removes the state called `name`.\n\t *\n\t * @param name State name\n\t */\n\tpublic remove(name: string): void {\n\t\tdelete this._states[name];\n\t}\n\n\t/**\n\t * Applies a named state to the target element.\n\t *\n\t * @param newState State name\n\t */\n\tpublic apply(newState: string) {\n\t\tconst state = this._states[newState];\n\n\t\tif (state) {\n\t\t\tstate.apply();\n\t\t}\n\n\t\tthis._entity._applyState(newState);\n\t}\n\n\t/**\n\t * Applies a named state to the element.\n\t *\n\t * Returns an object representing all [[Animation]] objects created for\n\t * each setting key transition.\n\t *\n\t * @param newState State name\n\t * @return Animations\n\t */\n\tpublic applyAnimate(newState: string, duration?: number): Animations | undefined {\n\t\tlet animations;\n\t\tconst state = this._states[newState];\n\n\t\tif (state) {\n\t\t\tanimations = state.applyAnimate(duration);\n\t\t}\n\n\t\tthis._entity._applyStateAnimated(newState, duration);\n\t\treturn animations;\n\t}\n}\n","import type { Root } from \"../Root\";\nimport type { Template, ApplyState } from \"./Template\";\nimport type { Theme, IRule } from \"../Theme\";\nimport type { ILocale } from \"./Language\";\n\nimport { IDisposer, Disposer } from \"./Disposer\";\nimport { EventDispatcher, Events } from \"./EventDispatcher\";\nimport { Time, IAnimation, AnimationState, getInterpolate } from \"./Animation\";\nimport { States } from \"./States\";\nimport { registry } from \"../Registry\";\n\nimport * as $object from \"./Object\";\nimport * as $ease from \"./Ease\";\nimport * as $array from \"./Array\";\nimport * as $order from \"./Order\";\n\n/**\n * @ignore\n */\nexport type Dirty = { [K in keyof A]?: boolean };\n\n\n/**\n * Allows to dynamically modify setting value of its target element.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\n */\nexport class Adapters {\n\tprivate _entity: E;\n\tprivate _callbacks: { [K in keyof E[\"_settings\"]]?: Array<(value: O[\"_settings\"][K], target: O, key: K) => O[\"_settings\"][K]> } = {};\n\tprivate _disabled: { [K in keyof E[\"_settings\"]]?: boolean } = {};\n\n\tconstructor(entity: E) {\n\t\tthis._entity = entity;\n\t}\n\n\t/**\n\t * Add a function (`callback`) that will modify value for setting `key`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\n\t */\n\tpublic add(key: Key, callback: (value: E[\"_settings\"][Key], target: E, key: Key) => E[\"_settings\"][Key]): IDisposer {\n\t\tlet callbacks = this._callbacks[key];\n\n\t\tif (callbacks === undefined) {\n\t\t\tcallbacks = this._callbacks[key] = [];\n\t\t}\n\n\t\tcallbacks.push(callback);\n\n\t\tthis._entity._markDirtyKey(key);\n\n\t\treturn new Disposer(() => {\n\t\t\tif ($array.removeFirst(callbacks!, callback)) {\n\t\t\t\tthis._entity._markDirtyKey(key);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Removes all adapters for the specific key.\n\t *\n\t * @since 5.1.0\n\t */\n\tpublic remove(key: Key) {\n\t\tconst callbacks = this._callbacks[key];\n\n\t\tif (callbacks !== undefined) {\n\t\t\tdelete this._callbacks[key];\n\n\t\t\tif (callbacks.length !== 0) {\n\t\t\t\tthis._entity._markDirtyKey(key);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Enables (previously disabled) adapters for specific key.\n\t *\n\t * @since 5.1.0\n\t */\n\tpublic enable(key: Key) {\n\t\tif (this._disabled[key]) {\n\t\t\tdelete this._disabled[key];\n\t\t\tthis._entity._markDirtyKey(key);\n\t\t}\n\t}\n\n\t/**\n\t * Disables all adapters for specific key.\n\t *\n\t * @since 5.1.0\n\t */\n\tpublic disable(key: Key) {\n\t\tif (!this._disabled[key]) {\n\t\t\tthis._disabled[key] = true;\n\t\t\tthis._entity._markDirtyKey(key);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic fold(key: Key, value: E[\"_settings\"][Key]): E[\"_settings\"][Key] {\n\t\tif (!this._disabled[key]) {\n\t\t\tconst callbacks = this._callbacks[key];\n\n\t\t\tif (callbacks !== undefined) {\n\t\t\t\tfor (let i = 0, len = callbacks.length; i < len; ++i) {\n\t\t\t\t\tvalue = callbacks[i](value, this._entity, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\n\nexport interface IEntitySettings {\n\n\t/**\n\t * Tags which can be used by the theme rules.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n\t */\n\tthemeTags?: Array;\n\n\t/**\n\t * Tags which can be used by the theme rules.\n\t *\n\t * These tags only apply to this object, not any children.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\n\t */\n\tthemeTagsSelf?: Array;\n\n\t/**\n\t * A list of themes applied to the element.\n\t */\n\tthemes?: Array;\n\n\n\t/**\n\t * Duration of transition from one state to another.\n\t */\n\tstateAnimationDuration?:number;\n\n\t/**\n\t * Easing of transition from one state to another.\n\t */\n\tstateAnimationEasing?:$ease.Easing;\n\n\t/**\n\t * A custom string ID for the element.\n\t *\n\t * If set, element can be looked up via `am5.registry.entitiesById`.\n\t *\n\t * Will raise error if an element with the same ID already exists.\n\t */\n\tid?: string;\n\n\t/**\n\t * A storage for any custom user data that needs to be associated with the\n\t * element.\n\t */\n\tuserData?: any;\n\n}\n\nexport interface IEntityPrivate {\n}\n\nexport interface IEntityEvents {\n}\n\n/**\n * Animation options.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/} for more info\n */\nexport interface AnimationOptions {\n\n\t/**\n\t * A setting key to animate value for.\n\t */\n\tkey: Key,\n\n\t/**\n\t * Initial value to animate from. If not set, will use current value.\n\t */\n\tfrom?: Value;\n\n\t/**\n\t * Target value to animate to.\n\t */\n\tto: Value;\n\n\t/**\n\t * Animation duration in milliseconds.\n\t */\n\tduration: number;\n\n\t/**\n\t * Easing function. Defaults to linear.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Easing_functions} for more info\n\t */\n\teasing?: $ease.Easing;\n\n\t/**\n\t * How many times to play the animation. Defaults to 1.\n\t */\n\tloops?: number;\n}\n\nexport interface IAnimationEvents {\n\t/**\n\t * Invoked when animation was stopped, which happens in these situations:\n\t * 1. When the animation reached the end.\n\t * 2. When the `stop()` method is called.\n\t * 3. When a new animation starts for the same key.\n\t * 4. When calling `set` for the same key.\n\t */\n\tstopped: {};\n}\n\n/**\n * Animation object.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/} for more info\n */\nexport class Animation {\n\tprivate _animation: IStartAnimation;\n\tprivate _from: Value;\n\tprivate _to: Value;\n\tprivate _duration: number;\n\tprivate _easing: $ease.Easing;\n\tprivate _loops: number;\n\tprivate _interpolate: (diff: Time, from: A, to: A) => A;\n\tprivate _oldTime: number | null;\n\tprivate _time: number = 0;\n\n\tpublic _stopped: boolean = false;\n\tpublic _playing: boolean = true;\n\n\tpublic events: EventDispatcher> = new EventDispatcher();\n\n\tconstructor(animation: IStartAnimation, from: Value, to: Value, duration: number, easing: $ease.Easing, loops: number, startingTime: number | null) {\n\t\tthis._animation = animation;\n\t\tthis._from = from;\n\t\tthis._to = to;\n\t\tthis._duration = duration;\n\t\tthis._easing = easing;\n\t\tthis._loops = loops;\n\t\tthis._interpolate = getInterpolate(from, to);\n\t\tthis._oldTime = startingTime;\n\t}\n\n\tpublic get to() {\n\t\treturn this._to;\n\t}\n\n\tpublic get from() {\n\t\treturn this._from;\n\t}\n\n\tpublic get playing() {\n\t\treturn this._playing;\n\t}\n\n\tpublic get stopped() {\n\t\treturn this._stopped;\n\t}\n\n\tpublic stop(): void {\n\t\tif (!this._stopped) {\n\t\t\tthis._stopped = true;\n\t\t\tthis._playing = false;\n\n\t\t\tif (this.events.isEnabled(\"stopped\")) {\n\t\t\t\tthis.events.dispatch(\"stopped\", {\n\t\t\t\t\ttype: \"stopped\",\n\t\t\t\t\ttarget: this,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic pause(): void {\n\t\tthis._playing = false;\n\t\tthis._oldTime = null;\n\t}\n\n\tpublic play(): void {\n\t\tif (!this._stopped && !this._playing) {\n\t\t\tthis._playing = true;\n\t\t\tthis._animation._startAnimation();\n\t\t}\n\t}\n\n\tpublic get percentage(): Time {\n\t\treturn this._time / this._duration;\n\t}\n\n\tpublic waitForStop(): Promise {\n\t\treturn new Promise((resolve, _reject) => {\n\t\t\tif (this._stopped) {\n\t\t\t\tresolve();\n\n\t\t\t} else {\n\t\t\t\tconst listener = () => {\n\t\t\t\t\tstopped.dispose();\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\n\t\t\t\tconst stopped = this.events.on(\"stopped\", listener);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic _checkEnded(): boolean {\n\t\tif (this._loops > 1) {\n\t\t\t--this._loops;\n\t\t\treturn false;\n\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic _run(currentTime: number): void {\n\t\tif (this._oldTime !== null) {\n\t\t\tthis._time += currentTime - this._oldTime;\n\n\t\t\tif (this._time > this._duration) {\n\t\t\t\tthis._time = this._duration;\n\t\t\t}\n\t\t}\n\n\t\tthis._oldTime = currentTime;\n\t}\n\n\tpublic _reset(currentTime: number): void {\n\t\tthis._oldTime = currentTime;\n\t\tthis._time = 0;\n\t}\n\n\tpublic _value(diff: Time): Value {\n\t\treturn this._interpolate(this._easing(diff), this._from, this._to);\n\t}\n}\n\ntype Animated

= { [K in keyof P]?: Animation };\n\n\ninterface IStartAnimation {\n\t_startAnimation(): void;\n}\n\n\n/**\n * @ignore\n */\nlet counter = 0;\n\n/**\n * Base class for [[Entity]] objects that support Settings.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n */\nexport abstract class Settings implements IDisposer, IAnimation, IStartAnimation {\n\n\t/**\n\t * Unique ID.\n\t */\n\tpublic uid: number = ++counter;\n\n\tpublic _settings: {};\n\tpublic _privateSettings: {} = {};\n\n\tpublic _settingEvents: { [K in keyof this[\"_settings\"]]?: Array<(value: V, target?: O, key?: K) => void> } = {};\n\tpublic _privateSettingEvents: { [K in keyof this[\"_settings\"]]?: Array<(value: V, target?: O, key?: K) => void> } = {};\n\n\tpublic _prevSettings: this[\"_settings\"] = {};\n\tpublic _prevPrivateSettings: this[\"_privateSettings\"] = {};\n\n\tprotected _animatingSettings: Animated = {};\n\tprotected _animatingPrivateSettings: Animated = {};\n\n\tprivate _disposed: boolean = false;\n\n\t// TODO move this into Entity\n\tprotected _userProperties: Dirty = {};\n\n\tconstructor(settings: Settings[\"_settings\"]) {\n\t\tthis._settings = settings;\n\t}\n\n\tprotected _checkDirty(): void {\n\t\t$object.keys(this._settings).forEach((key) => {\n\t\t\t(this._userProperties as any)[key] = true;\n\t\t\tthis._markDirtyKey(key);\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic resetUserSettings(){\n\t\tthis._userProperties = {};\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic abstract markDirty(): void;\n\n\tpublic _runAnimation(currentTime: number): AnimationState {\n\t\tlet state = AnimationState.Stopped;\n\n\t\tif (!this.isDisposed()) {\n\t\t\tlet playing = false;\n\t\t\tlet paused = false;\n\n\t\t\t$object.each(this._animatingSettings, (key, animation) => {\n\t\t\t\tif (animation.stopped) {\n\t\t\t\t\tthis._stopAnimation(key);\n\n\t\t\t\t} else if (animation.playing) {\n\t\t\t\t\tanimation._run(currentTime);\n\n\t\t\t\t\tconst diff = animation.percentage;\n\n\t\t\t\t\tif (diff >= 1) {\n\t\t\t\t\t\tif (animation._checkEnded()) {\n\t\t\t\t\t\t\tthis.set(key, animation._value(1));\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaying = true;\n\t\t\t\t\t\t\tanimation._reset(currentTime);\n\t\t\t\t\t\t\tthis._set(key, animation._value(1));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplaying = true;\n\t\t\t\t\t\tthis._set(key, animation._value(diff));\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpaused = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$object.each(this._animatingPrivateSettings, (key, animation) => {\n\t\t\t\tif (animation.stopped) {\n\t\t\t\t\tthis._stopAnimationPrivate(key);\n\n\t\t\t\t} else if (animation.playing) {\n\t\t\t\t\tanimation._run(currentTime);\n\n\t\t\t\t\tconst diff = animation.percentage;\n\n\t\t\t\t\tif (diff >= 1) {\n\t\t\t\t\t\tif (animation._checkEnded()) {\n\t\t\t\t\t\t\tthis.setPrivate(key, animation._value(1));\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tplaying = true;\n\t\t\t\t\t\t\tanimation._reset(currentTime);\n\t\t\t\t\t\t\tthis._setPrivate(key, animation._value(1));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplaying = true;\n\t\t\t\t\t\tthis._setPrivate(key, animation._value(diff));\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpaused = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (playing) {\n\t\t\t\tstate = AnimationState.Playing;\n\n\t\t\t} else if (paused) {\n\t\t\t\tstate = AnimationState.Paused;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t}\n\n\tpublic abstract _startAnimation(): void;\n\tprotected abstract _animationTime(): number | null;\n\n\tpublic _markDirtyKey(_key: Key) {\n\t\tthis.markDirty();\n\t}\n\n\tpublic _markDirtyPrivateKey(_key: Key) {\n\t\tthis.markDirty();\n\t}\n\n\t/**\n\t * Sets a callback function to invoke when specific key of settings changes\n\t * or is set.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\n\t * @param key Settings key\n\t * @param callback Callback\n\t * @return Disposer for event\n\t */\n\tpublic on(key: Key, callback: (value: this[\"_settings\"][Key], target?: this, key?: Key) => void): IDisposer {\n\t\tlet events = this._settingEvents[key];\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._settingEvents[key] = [];\n\t\t}\n\n\t\tevents.push(callback);\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(events!, callback);\n\n\t\t\tif (events!.length === 0) {\n\t\t\t\tdelete this._settingEvents[key];\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sets a callback function to invoke when specific key of private settings\n\t * changes or is set.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\n\t * @ignore\n\t * @param key Private settings key\n\t * @param callback Callback\n\t * @return Disposer for event\n\t */\n\tpublic onPrivate(key: Key, callback: (value: this[\"_privateSettings\"][Key], target?: this, key?: Key) => void): IDisposer {\n\t\tlet events = this._privateSettingEvents[key];\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._privateSettingEvents[key] = [];\n\t\t}\n\n\t\tevents.push(callback);\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(events!, callback);\n\n\t\t\tif (events!.length === 0) {\n\t\t\t\tdelete this._privateSettingEvents[key];\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getRaw(key: Key, fallback: F): NonNullable | F;\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getRaw(key: Key): this[\"_settings\"][Key];\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getRaw(key: Key, fallback?: any): any {\n\t\tconst value = (this._settings)[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\t/**\n\t * Returns settings value for the specified `key`.\n\t *\n\t * If there is no value, `fallback` is returned instead (if set).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Settings value\n\t * @param callback Fallback value\n\t * @return {any} Value\n\t */\n\tpublic get(key: Key, fallback: F): NonNullable | F;\n\tpublic get(key: Key): this[\"_settings\"][Key];\n\tpublic get(key: Key, fallback?: any): any {\n\t\treturn this.getRaw(key, fallback);\n\t}\n\n\tprotected _sendKeyEvent(key: Key, value: Value): void {\n\t\tconst events = this._settingEvents[key];\n\n\t\tif (events !== undefined) {\n\t\t\t$array.each(events!, (callback) => {\n\t\t\t\tcallback(value, this, key);\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _sendPrivateKeyEvent(key: Key, value: Value): void {\n\t\tconst events = this._privateSettingEvents[key];\n\n\t\tif (events !== undefined) {\n\t\t\t$array.each(events!, (callback) => {\n\t\t\t\tcallback(value, this, key);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprivate _setRaw(key: Key, old: Value, value: Value) {\n\t\tthis._prevSettings[key] = old;\n\t\tthis._sendKeyEvent(key, value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setRaw(key: Key, value: Value) {\n\t\tconst old = (this._settings)[key];\n\n\t\t(this._settings)[key] = value;\n\n\t\tif (old !== value) {\n\t\t\tthis._setRaw(key, old, value);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprivate _set(key: Key, value: this[\"_settings\"][Key]) {\n\t\tconst old = (this._settings)[key];\n\n\t\t(this._settings)[key] = value;\n\n\t\tif (old !== value) {\n\t\t\tthis._setRaw(key, old, value);\n\t\t\tthis._markDirtyKey(key);\n\t\t}\n\t}\n\n\n\tprotected _stopAnimation(key: Key): void {\n\t\tconst animation = this._animatingSettings[key];\n\n\t\tif (animation) {\n\t\t\tdelete this._animatingSettings[key];\n\t\t\tanimation.stop();\n\t\t}\n\t}\n\n\t/**\n\t * Sets a setting `value` for the specified `key`, and returns the same `value`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t * @param value Setting value\n\t * @return Setting value\n\t */\n\tpublic set(key: Key, value: Value): Value {\n\t\tthis._set(key, value);\n\t\tthis._stopAnimation(key);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Removes a setting value for the specified `key`;\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t */\n\tpublic remove(key: Key): void {\n\t\tif (key in this._settings) {\n\t\t\tthis._prevSettings[key] = (this._settings)[key];\n\n\t\t\tdelete (this._settings)[key];\n\n\t\t\tthis._sendKeyEvent(key, undefined as any);\n\t\t\tthis._markDirtyKey(key);\n\t\t}\n\n\t\tthis._stopAnimation(key);\n\t}\n\n\t/**\n\t * Removes all keys;\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t */\n\tpublic removeAll(): void {\n\t\t$array.each($object.keys(this._settings), (key) => {\n\t\t\tthis.remove(key);\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPrivate(key: Key, fallback: F): NonNullable | F;\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPrivate(key: Key): this[\"_privateSettings\"][Key];\n\n\t/**\n\t * Returns a value of a private setting.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/#Private_settings} for more info\n\t */\n\tpublic getPrivate(key: Key, fallback?: any): any {\n\t\tconst value = (this._privateSettings)[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprivate _setPrivateRaw(key: Key, old: Value, value: Value) {\n\t\tthis._prevPrivateSettings[key] = old;\n\t\tthis._sendPrivateKeyEvent(key, value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setPrivateRaw(key: Key, value: Value) {\n\t\tconst old = (this._privateSettings)[key];\n\n\t\t(this._privateSettings)[key] = value;\n\n\t\tif (old !== value) {\n\t\t\tthis._setPrivateRaw(key, old, value);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tprivate _setPrivate(key: Key, value: this[\"_privateSettings\"][Key]) {\n\t\tconst old = (this._privateSettings)[key];\n\n\t\t(this._privateSettings)[key] = value;\n\n\t\tif (old !== value) {\n\t\t\tthis._setPrivateRaw(key, old, value);\n\t\t\tthis._markDirtyPrivateKey(key);\n\t\t}\n\t}\n\n\tprotected _stopAnimationPrivate(key: Key): void {\n\t\tconst animation = this._animatingPrivateSettings[key];\n\n\t\tif (animation) {\n\t\t\tanimation.stop();\n\t\t\tdelete this._animatingPrivateSettings[key];\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setPrivate(key: Key, value: Value): Value {\n\t\tthis._setPrivate(key, value);\n\t\tthis._stopAnimationPrivate(key);\n\t\treturn value;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic removePrivate(key: Key): void {\n\t\tif (key in this._privateSettings) {\n\t\t\tthis._prevPrivateSettings[key] = (this._privateSettings)[key];\n\n\t\t\tdelete (this._privateSettings)[key];\n\n\t\t\tthis._markDirtyPrivateKey(key);\n\t\t}\n\n\t\tthis._stopAnimationPrivate(key);\n\t}\n\n\t/**\n\t * Sets multiple settings at once.\n\t *\n\t * `settings` must be an object with key: value pairs.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param settings Settings\n\t */\n\tpublic setAll(settings: Partial) {\n\t\t$object.each(settings, (key, value) => {\n\t\t\tthis.set(key, value);\n\t\t});\n\t}\n\n\t/**\n\t * Animates setting values from current/start values to new ones.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Animating_settings} for more info\n\t * @param options Animation options\n\t * @return Animation object\n\t */\n\tpublic animate(options: AnimationOptions): Animation {\n\t\tconst key = options.key;\n\t\tconst to = options.to;\n\t\tconst duration = options.duration || 0;\n\t\tconst loops = options.loops || 1;\n\n\t\tconst from = (options.from === undefined ? this.get(key) : options.from);\n\t\tconst easing = (options.easing === undefined ? $ease.linear : options.easing);\n\n\t\tif (duration === 0) {\n\t\t\tthis.set(key, to);\n\n\t\t} else {\n\t\t\tif (from === undefined || from === to) {\n\t\t\t\tthis.set(key, to);\n\n\t\t\t} else {\n\t\t\t\tthis.set(key, from);\n\n\t\t\t\tconst animation = this._animatingSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\n\n\t\t\t\tthis._startAnimation();\n\n\t\t\t\treturn animation;\n\t\t\t}\n\t\t}\n\n\t\tconst animation = new Animation(this, from, to, duration, easing, loops, null);\n\t\tanimation.stop();\n\t\treturn animation;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic animatePrivate(options: AnimationOptions): Animation {\n\t\tconst key = options.key;\n\t\tconst to = options.to;\n\t\tconst duration = options.duration || 0;\n\t\tconst loops = options.loops || 1;\n\n\t\tconst from = (options.from === undefined ? this.getPrivate(key) : options.from);\n\t\tconst easing = (options.easing === undefined ? $ease.linear : options.easing);\n\n\t\tif (duration === 0) {\n\t\t\tthis.setPrivate(key, to);\n\n\t\t} else {\n\t\t\tif (from === undefined || from === to) {\n\t\t\t\tthis.setPrivate(key, to);\n\n\t\t\t} else {\n\t\t\t\tthis.setPrivate(key, from);\n\n\t\t\t\tconst animation = this._animatingPrivateSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\n\n\t\t\t\tthis._startAnimation();\n\n\t\t\t\treturn animation;\n\t\t\t}\n\t\t}\n\n\t\tconst animation = new Animation(this, from, to, duration, easing, loops, null);\n\t\tanimation.stop();\n\t\treturn animation;\n\t}\n\n\tprotected _dispose() {}\n\n\t/**\n\t * Returns `true` if this element is disposed.\n\t *\n\t * @return Disposed\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Disposes this object.\n\t */\n\tpublic dispose() {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\t\t\tthis._dispose();\n\t\t}\n\t}\n}\n\n/**\n * Base class.\n *\n * @important\n */\nexport class Entity extends Settings implements IDisposer {\n\tpublic _root: Root;\n\n\tpublic _user_id:any; // for testing purposes\n\n\tdeclare public _settings: IEntitySettings;\n\tdeclare public _privateSettings: IEntityPrivate;\n\tdeclare public _events: IEntityEvents;\n\n\tpublic states: States = new States(this);\n\tpublic adapters: Adapters = new Adapters(this);\n\tpublic events: EventDispatcher> = this._createEvents();\n\n\tprotected _userPrivateProperties: Dirty = {};\n\n\tpublic _dirty: Dirty = {};\n\tpublic _dirtyPrivate: Dirty = {};\n\n\tprotected _template: Template | undefined;\n\n\t// Templates for the themes\n\tprotected _templates: Array> = [];\n\n\t// Internal templates which can be overridden by the user's templates\n\tprotected _internalTemplates: Array>;\n\n\t// Default themes which can be overridden by the user's themes\n\tpublic _defaultThemes: Array = [];\n\n\t// Disposers for all of the templates\n\tprotected _templateDisposers: Array = [];\n\n\tprotected _disposers: Array = [];\n\n\t// Whether the template setup function should be run\n\tprotected _runSetup: boolean = true;\n\n\tpublic static className: string = \"Entity\";\n\tpublic static classNames: Array = [\"Entity\"];\n\n\tprotected _disposerProperties: { [Key in keyof this[\"_settings\"]]?: Array } = {};\n\n\t/**\n\t * IMPORTANT! Do not instantiate this class via `new Class()` syntax.\n\t *\n\t * Use static method `Class.new()` instead.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @ignore\n\t */\n\tconstructor(root: Root, settings: Entity[\"_settings\"], isReal: boolean, templates: Array> = []) {\n\t\tsuper(settings);\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\t\tthis._root = root;\n\t\tthis._internalTemplates = templates as Array>;\n\n\t\tif (settings.id) {\n\t\t\tthis._registerId(settings.id);\n\t\t}\n\t}\n\n\t/**\n\t * Use this method to create an instance of this class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @param root Root element\n\t * @param settings Settings\n\t * @param template Template\n\t * @return Instantiated object\n\t */\n\tstatic new>(this: C, root: Root, settings: T[\"_settings\"], template?: Template): T {\n\t\tconst x = (new this(root, settings, true)) as T;\n\t\tx._template = template;\n\t\tx._afterNew();\n\t\treturn x;\n\t}\n\n\tstatic _new>(this: C, root: Root, settings: T[\"_settings\"], templates: Array> = []): T {\n\t\tconst x = (new this(root, settings, true, templates)) as T;\n\t\tx._afterNew();\n\t\treturn x;\n\t}\n\n\tprotected _afterNew() {\n\t\tthis._checkDirty();\n\n\t\tlet shouldApply = false;\n\n\t\tconst template = this._template;\n\n\t\tif (template) {\n\t\t\tshouldApply = true;\n\t\t\ttemplate._setObjectTemplate(this);\n\t\t}\n\n\t\t$array.each(this._internalTemplates, (template) => {\n\t\t\tshouldApply = true;\n\t\t\ttemplate._setObjectTemplate(this);\n\t\t});\n\n\t\tif (shouldApply) {\n\t\t\tthis._applyTemplates(false);\n\t\t}\n\n\t\tthis.states.create(\"default\", {});\n\n\t\tthis._setDefaults();\n\t}\n\n\t// This is the same as _afterNew, except it also applies the themes.\n\t// This should only be used for classes which don't have a parent (because they extend from Entity and not Sprite).\n\tprotected _afterNewApplyThemes() {\n\t\tthis._checkDirty();\n\n\t\tconst template = this._template;\n\n\t\tif (template) {\n\t\t\ttemplate._setObjectTemplate(this);\n\t\t}\n\n\t\t$array.each(this._internalTemplates, (template) => {\n\t\t\ttemplate._setObjectTemplate(this);\n\t\t});\n\n\t\tthis.states.create(\"default\", {});\n\n\t\tthis._setDefaults();\n\n\t\tthis._applyThemes();\n\t}\n\n\tprotected _createEvents(): EventDispatcher> {\n\t\treturn new EventDispatcher();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic get classNames(): Array {\n\t\treturn (this.constructor as any).classNames;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic get className(): string {\n\t\treturn (this.constructor as any).className;\n\t}\n\n\tprotected _setDefaults(){\n\n\t}\n\n\tpublic _setDefault(key: Key, value: this[\"_settings\"][Key]) {\n\t\tif (!(key in this._settings)) {\n\t\t\tsuper.set(key, value);\n\t\t}\n\t}\n\n\tpublic _setRawDefault(key: Key, value: this[\"_settings\"][Key]) {\n\t\tif (!(key in this._settings)) {\n\t\t\tsuper.setRaw(key, value);\n\t\t}\n\t}\n\n\tpublic _clearDirty() {\n\t\t$object.keys(this._dirty).forEach((key) => {\n\t\t\tthis._dirty[key] = false;\n\t\t});\n\n\t\t$object.keys(this._dirtyPrivate).forEach((key) => {\n\t\t\tthis._dirtyPrivate[key] = false;\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isDirty(key: Key): boolean {\n\t\treturn !!this._dirty[key];\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isPrivateDirty(key: Key): boolean {\n\t\treturn !!this._dirtyPrivate[key];\n\t}\n\n\tpublic _markDirtyKey(key: Key) {\n\t\tthis._dirty[key] = true;\n\t\tsuper._markDirtyKey(key);\n\t}\n\n\tpublic _markDirtyPrivateKey(key: Key) {\n\t\tthis._dirtyPrivate[key] = true;\n\t\tsuper._markDirtyKey(key);\n\t}\n\n\t/**\n\t * Checks if element is of certain class (or inherits one).\n\t *\n\t * @param type Class name to check\n\t * @return {boolean} Is of class?\n\t */\n\tpublic isType(type: string): this is A {\n\t\treturn this.classNames.indexOf(type) !== -1;\n\t}\n\n\tprotected _pushPropertyDisposer(key: Key, disposer: D): D {\n\t\tlet disposers = this._disposerProperties[key];\n\n\t\tif (disposers === undefined) {\n\t\t\tdisposers = this._disposerProperties[key] = [];\n\t\t}\n\n\t\tdisposers.push(disposer);\n\n\t\treturn disposer;\n\t}\n\n\tprotected _disposeProperty(key: Key): void {\n\t\tconst disposers = this._disposerProperties[key];\n\n\t\tif (disposers !== undefined) {\n\t\t\t$array.each(disposers!, (disposer) => {\n\t\t\t\tdisposer.dispose();\n\t\t\t});\n\n\t\t\tdelete this._disposerProperties[key];\n\t\t}\n\t}\n\n\t/**\n\t * @todo needs description\n\t * @param value Template\n\t */\n\tpublic set template(value: Template | undefined) {\n\t\tconst template = this._template;\n\n\t\tif (template !== value) {\n\t\t\tthis._template = value;\n\n\t\t\tif (template) {\n\t\t\t\ttemplate._removeObjectTemplate(this);\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tvalue._setObjectTemplate(this);\n\t\t\t}\n\n\t\t\tthis._applyTemplates();\n\t\t}\n\t}\n\n\tpublic get template(): Template | undefined {\n\t\treturn this._template;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic markDirty() {\n\t\tthis._root._addDirtyEntity(this);\n\t}\n\n\tpublic _startAnimation(): void {\n\t\tthis._root._addAnimation(this);\n\t}\n\n\tprotected _animationTime(): number | null {\n\t\treturn this._root.animationTime;\n\t}\n\n\tpublic _applyState(_name: string): void { }\n\tpublic _applyStateAnimated(_name: string, _duration?: number): void { }\n\n\t/**\n\t * Returns settings value for the specified `key`.\n\t *\n\t * If there is no value, `fallback` is returned instead (if set).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Settings value\n\t * @param callback Fallback value\n\t * @return Value\n\t */\n\tpublic get(key: Key, fallback: F): NonNullable | F;\n\tpublic get(key: Key): this[\"_settings\"][Key];\n\tpublic get(key: Key, fallback?: any): any {\n\t\tconst value = this.adapters.fold(key, (this._settings)[key]);\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isUserSetting(key: Key): boolean {\n\t\treturn this._userProperties[key] || false;\n\t}\n\n\t/**\n\t * Sets a setting `value` for the specified `key`, and returns the same `value`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t * @param value Setting value\n\t * @return Setting value\n\t */\n\tpublic set(key: Key, value: Value): Value {\n\t\tthis._userProperties[key] = true;\n\t\treturn super.set(key, value);\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setRaw(key: Key, value: Value) {\n\t\tthis._userProperties[key] = true;\n\t\tsuper.setRaw(key, value);\n\t}\n\n\t/**\n\t * Sets a setting `value` for the specified `key` only if the value for this key was not set previously using set method, and returns the same `value`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t * @param value Setting value\n\t * @return Setting value\n\t */\n\tpublic _setSoft(key: Key, value: Value): Value {\n\t\tif(!this._userProperties[key]){\n\t\t\treturn super.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Removes a setting value for the specified `key`.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\n\t * @param key Setting key\n\t */\n\tpublic remove(key: Key) {\n\t\tdelete this._userProperties[key];\n\t\tthis._removeTemplateProperty(key);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setPrivate(key: Key, value: Value): Value {\n\t\tthis._userPrivateProperties[key] = true;\n\t\treturn super.setPrivate(key, value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic setPrivateRaw(key: Key, value: Value) {\n\t\tthis._userPrivateProperties[key] = true;\n\t\tsuper.setPrivateRaw(key, value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic removePrivate(key: Key) {\n\t\tdelete this._userPrivateProperties[key];\n\t\tthis._removeTemplatePrivateProperty(key);\n\t}\n\n\tpublic _setTemplateProperty(template: Template, key: Key, value: this[\"_settings\"][Key]) {\n\t\tif (!this._userProperties[key]) {\n\t\t\tconst match = this._findTemplateByKey(key);\n\n\t\t\tif (template === match) {\n\t\t\t\tsuper.set(key, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _setTemplatePrivateProperty(template: Template, key: Key, value: this[\"_privateSettings\"][Key]) {\n\t\tif (!this._userPrivateProperties[key]) {\n\t\t\tconst match = this._findTemplateByPrivateKey(key);\n\n\t\t\tif (template === match) {\n\t\t\t\tsuper.setPrivate(key, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _removeTemplateProperty(key: Key) {\n\t\tif (!this._userProperties[key]) {\n\t\t\tconst match = this._findTemplateByKey(key);\n\n\t\t\tif (match) {\n\t\t\t\t// TODO don't stop the animation if the property didn't change\n\t\t\t\tsuper.set(key, match._settings[key]!);\n\n\t\t\t} else {\n\t\t\t\tsuper.remove(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _removeTemplatePrivateProperty(key: Key) {\n\t\tif (!this._userPrivateProperties[key]) {\n\t\t\tconst match = this._findTemplateByPrivateKey(key);\n\n\t\t\tif (match) {\n\t\t\t\t// TODO don't stop the animation if the property didn't change\n\t\t\t\tsuper.setPrivate(key, match._privateSettings[key]);\n\n\t\t\t} else {\n\t\t\t\tsuper.removePrivate(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _walkParents(f: (parent: Entity) => void): void {\n\t\tf(this._root._rootContainer);\n\t\tf(this);\n\t}\n\n\t// TODO faster version of this method which is specialized to just 1 key\n\tpublic _applyStateByKey(name: string): void {\n\t\tconst other = this.states.create(name, {});\n\t\tconst seen: Dirty = {};\n\n\t\tthis._eachTemplate((template) => {\n\t\t\tconst state = template.states.lookup(name);\n\n\t\t\tif (state) {\n\t\t\t\tstate._apply(other, seen);\n\t\t\t}\n\t\t});\n\n\t\t$object.each(other._settings, (key) => {\n\t\t\tif (!seen[key] && !other._userSettings[key]) {\n\t\t\t\tother.remove(key);\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _applyTemplate(template: Template, state: ApplyState): void {\n\t\tthis._templateDisposers.push(template._apply(this, state));\n\n\t\t$object.each(template._settings, (key, value) => {\n\t\t\tif (!state.settings[key] && !this._userProperties[key]) {\n\t\t\t\tstate.settings[key] = true;\n\t\t\t\tsuper.set(key, value);\n\t\t\t}\n\t\t});\n\n\t\t$object.each(template._privateSettings, (key, value) => {\n\t\t\tif (!state.privateSettings[key] && !this._userPrivateProperties[key]) {\n\t\t\t\tstate.privateSettings[key] = true;\n\t\t\t\tsuper.setPrivate(key, value);\n\t\t\t}\n\t\t});\n\n\t\tif (this._runSetup && template.setup) {\n\t\t\tthis._runSetup = false;\n\t\t\ttemplate.setup(this);\n\t\t}\n\t}\n\n\t/**\n\t * Calls the closure with each template and returns the first template which is true\n\t */\n\tprotected _findStaticTemplate(f: (template: Template) => boolean): Template | undefined {\n\t\tif (this._template) {\n\t\t\tif (f(this._template)) {\n\t\t\t\treturn this._template;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic _eachTemplate(f: (template: Template) => void): void {\n\t\tthis._findStaticTemplate((template) => {\n\t\t\tf(template);\n\t\t\treturn false;\n\t\t});\n\n\t\t// _internalTemplates is sorted with most specific to the right\n\t\t$array.eachReverse(this._internalTemplates, f);\n\n\t\t// _templates is sorted with most specific to the left\n\t\t$array.each(this._templates, f);\n\t}\n\n\tpublic _applyTemplates(remove: boolean = true): void {\n\t\tif (remove) {\n\t\t\tthis._disposeTemplates();\n\t\t}\n\n\t\tconst state: ApplyState = {\n\t\t\tsettings: {},\n\t\t\tprivateSettings: {},\n\t\t\tstates: {},\n\t\t};\n\n\t\tthis._eachTemplate((template) => {\n\t\t\tthis._applyTemplate(template, state);\n\t\t});\n\n\t\tif (remove) {\n\t\t\t$object.each(this._settings, (key) => {\n\t\t\t\tif (!this._userProperties[key] && !state.settings[key]) {\n\t\t\t\t\tsuper.remove(key);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$object.each(this._privateSettings, (key) => {\n\t\t\t\tif (!this._userPrivateProperties[key] && !state.privateSettings[key]) {\n\t\t\t\t\tsuper.removePrivate(key);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _findTemplate(f: (template: Template) => boolean): Template | undefined {\n\t\tconst value = this._findStaticTemplate(f);\n\n\t\tif (value === undefined) {\n\t\t\t// _internalTemplates is sorted with most specific to the right\n\t\t\tconst value = $array.findReverse(this._internalTemplates, f);\n\n\t\t\tif (value === undefined) {\n\t\t\t\t// _templates is sorted with most specific to the left\n\t\t\t\treturn $array.find(this._templates, f);\n\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tprotected _findTemplateByKey(key: Key): Template | undefined {\n\t\treturn this._findTemplate((template) => {\n\t\t\treturn key in template._settings;\n\t\t});\n\t}\n\n\tprotected _findTemplateByPrivateKey(key: Key): Template | undefined {\n\t\treturn this._findTemplate((template) => {\n\t\t\treturn key in template._privateSettings;\n\t\t});\n\t}\n\n\tprotected _disposeTemplates() {\n\t\t$array.each(this._templateDisposers, (disposer) => {\n\t\t\tdisposer.dispose();\n\t\t});\n\n\t\tthis._templateDisposers.length = 0;\n\t}\n\n\tprotected _removeTemplates() {\n\t\t$array.each(this._templates, (template) => {\n\t\t\ttemplate._removeObjectTemplate(this);\n\t\t});\n\n\t\tthis._templates.length = 0;\n\t}\n\n\tpublic _applyThemes(force: boolean = false): boolean {\n\t\tlet isConnected = false;\n\n\t\tconst defaults: Array> = [];\n\n\t\tlet themes: Array> = [];\n\n\t\tconst themeTags: Set = new Set();\n\n\t\tconst tags = this.get(\"themeTagsSelf\");\n\n\t\tif (tags) {\n\t\t\t$array.each(tags, (tag) => {\n\t\t\t\tthemeTags.add(tag);\n\t\t\t});\n\t\t}\n\n\t\tthis._walkParents((entity) => {\n\t\t\tif (entity === this._root._rootContainer) {\n\t\t\t\tisConnected = true;\n\t\t\t}\n\n\t\t\tif (entity._defaultThemes.length > 0) {\n\t\t\t\tdefaults.push(entity._defaultThemes);\n\t\t\t}\n\n\t\t\tconst theme = entity.get(\"themes\");\n\n\t\t\tif (theme) {\n\t\t\t\tthemes.push(theme);\n\t\t\t}\n\n\t\t\tconst tags = entity.get(\"themeTags\");\n\n\t\t\tif (tags) {\n\t\t\t\t$array.each(tags, (tag) => {\n\t\t\t\t\tthemeTags.add(tag);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthemes = defaults.concat(themes);\n\n\t\tthis._removeTemplates();\n\n\t\tif (isConnected || force) {\n\t\t\t$array.eachReverse(this.classNames, (name) => {\n\t\t\t\tconst allRules: Array> = [];\n\n\t\t\t\t$array.each(themes, (themes) => {\n\t\t\t\t\t$array.each(themes, (theme) => {\n\t\t\t\t\t\tconst rules = theme._lookupRules(name);\n\n\t\t\t\t\t\tif (rules) {\n\t\t\t\t\t\t\t$array.eachReverse(rules, (rule) => {\n\t\t\t\t\t\t\t\tconst matches = rule.tags.every((tag) => {\n\t\t\t\t\t\t\t\t\treturn themeTags.has(tag);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\t\tconst result = $array.getFirstSortedIndex(allRules, (x) => {\n\t\t\t\t\t\t\t\t\t\tconst order = $order.compare(rule.tags.length, x.tags.length);\n\n\t\t\t\t\t\t\t\t\t\tif (order === 0) {\n\t\t\t\t\t\t\t\t\t\t\treturn $order.compareArray(rule.tags, x.tags, $order.compare);\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn order;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tallRules.splice(result.index, 0, rule);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t$array.each(allRules, (rule) => {\n\t\t\t\t\tthis._templates.push(rule.template);\n\t\t\t\t\trule.template._setObjectTemplate(this);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tthis._applyTemplates();\n\n\t\tif (isConnected || force) {\n\t\t\t// This causes it to only run the setup function the first time that the themes are applied\n\t\t\tthis._runSetup = false;\n\t\t}\n\n\t\treturn isConnected || force;\n\t}\n\n\tpublic _changed(): void { }\n\n\tpublic _beforeChanged(): void {\n\n\t\tif (this.isDirty(\"id\")) {\n\t\t\tconst id = this.get(\"id\")!;\n\t\t\tif (id) {\n\t\t\t\tthis._registerId(id);\n\t\t\t}\n\n\t\t\tconst prevId = this._prevSettings.id;\n\t\t\tif(prevId) {\n\t\t\t\tdelete registry.entitiesById[prevId];\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _registerId(id: string): void {\n\t\tif (registry.entitiesById[id] && registry.entitiesById[id] !== this) {\n\t\t\tthrow new Error(\"An entity with id \\\"\" + id + \"\\\" already exists.\");\n\t\t}\n\t\tregistry.entitiesById[id] = this;\n\t}\n\n\tpublic _afterChanged(): void { }\n\n\t/**\n\t * @ignore\n\t */\n\tpublic addDisposer(disposer: T): T {\n\t\tthis._disposers.push(disposer);\n\t\treturn disposer;\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\n\t\tconst template = this._template;\n\n\t\tif (template) {\n\t\t\ttemplate._removeObjectTemplate(this);\n\t\t}\n\n\t\t$array.each(this._internalTemplates, (template) => {\n\t\t\ttemplate._removeObjectTemplate(this);\n\t\t});\n\n\t\tthis._removeTemplates();\n\t\tthis._disposeTemplates();\n\n\t\tthis.events.dispose();\n\n\t\tthis._disposers.forEach((x) => {\n\t\t\tx.dispose();\n\t\t});\n\n\t\t$object.each(this._disposerProperties, (_, disposers) => {\n\t\t\t$array.each(disposers, (disposer) => {\n\t\t\t\tdisposer.dispose();\n\t\t\t});\n\t\t});\n\n\t\tconst id = this.get(\"id\")!;\n\t\tif (id) {\n\t\t\tdelete registry.entitiesById[id];\n\t\t}\n\t}\n\n\t/**\n\t * Creates and returns a \"disposable\" timeout.\n\t *\n\t * @param fn Callback\n\t * @param delay Delay in milliseconds\n\t * @return Timeout disposer\n\t */\n\tpublic setTimeout(fn: () => void, delay: number): IDisposer {\n\t\tconst id = setTimeout(() => {\n\t\t\tthis.removeDispose(disposer);\n\t\t\tfn();\n\t\t}, delay);\n\n\t\tconst disposer = new Disposer(() => {\n\t\t\tclearTimeout(id);\n\t\t});\n\n\t\tthis._disposers.push(disposer);\n\t\treturn disposer;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic removeDispose(target: IDisposer): void {\n\t\tif (!this.isDisposed()) {\n\t\t\tlet index = $array.indexOf(this._disposers, target);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._disposers.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\ttarget.dispose();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic hasTag(tag: string): boolean {\n\t\treturn $array.indexOf(this.get(\"themeTags\", []), tag) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic addTag(tag: string): void {\n\t\tif (!this.hasTag(tag)) {\n\t\t\tconst tags = (this).get(\"themeTags\", []);\n\t\t\ttags.push(tag);\n\t\t\tthis.set(\"themeTags\", tags);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic removeTag(tag: string): void {\n\t\tif (this.hasTag(tag)) {\n\t\t\tconst tags = (this).get(\"themeTags\", []);\n\t\t\t$array.remove(tags, tag);\n\t\t\tthis.set(\"themeTags\", tags);\n\t\t}\n\t}\n\n\tprotected _t(text: any, locale?: ILocale, ...rest: Array){\n\t\treturn this._root.language.translate(text, locale, ...rest);\n\t}\n\n\t/**\n\t * An instance of [[Root]] object.\n\t *\n\t * @readonly\n\t * @since 5.0.6\n\t * @return Root object\n\t */\n\tpublic get root(): Root {\n\t\treturn this._root;\n\t}\n\n}\n","/**\n * Event Dispatcher module is used for registering listeners and dispatching\n * events across amCharts system.\n */\n\n/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport { Disposer, IDisposer, MultiDisposer } from \"./Disposer\";\nimport * as $array from \"./Array\";\nimport * as $type from \"./Type\";\n\n/**\n * @ignore\n */\nexport type Events = {\n\t[K in keyof T]: T[K] & { type: K, target: Target }\n};\n\n/**\n * A universal interface for event listeners.\n *\n * @ignore\n */\nexport interface EventListener {\n\tkilled: boolean;\n\tonce: boolean;\n\ttype: any | null;\n\tcallback: (event: any) => void;\n\tcontext: unknown;\n\tshouldClone: boolean;\n\tdispatch: (type: any, event: any) => void;\n\tdisposer: IDisposer;\n}\n\n/**\n * Universal Event Dispatcher.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\n */\nexport class EventDispatcher implements IDisposer {\n\tprotected _listeners: Array;\n\tprotected _killed: Array;\n\tprotected _disabled: { [key in keyof T]?: number };\n\tprotected _iterating: number;\n\tprotected _enabled: boolean;\n\tprotected _disposed: boolean;\n\n\n\t/**\n\t * Constructor\n\t */\n\tconstructor() {\n\t\tthis._listeners = [];\n\t\tthis._killed = [];\n\t\tthis._disabled = {};\n\t\tthis._iterating = 0;\n\t\tthis._enabled = true;\n\t\tthis._disposed = false;\n\t}\n\n\t/**\n\t * Returns if this object has been already disposed.\n\t *\n\t * @return Disposed?\n\t */\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Dispose (destroy) this object.\n\t */\n\tpublic dispose(): void {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\n\t\t\tconst a = this._listeners;\n\n\t\t\tthis._iterating = 1;\n\t\t\tthis._listeners = null;\n\t\t\tthis._disabled = null;\n\n\t\t\ttry {\n\t\t\t\t$array.each(a, (x) => {\n\t\t\t\t\tx.disposer.dispose();\n\t\t\t\t});\n\n\t\t\t} finally {\n\t\t\t\tthis._killed = null;\n\t\t\t\tthis._iterating = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if this particular event dispatcher has any listeners set.\n\t *\n\t * @return Has listeners?\n\t */\n\tpublic hasListeners(): boolean {\n\t\treturn this._listeners.length !== 0;\n\t}\n\n\t/**\n\t * Checks if this particular event dispatcher has any particular listeners set.\n\t *\n\t * @return Has particular event listeners?\n\t */\n\tpublic hasListenersByType(type: Key): boolean {\n\t\treturn $array.any(this._listeners, (x) => (x.type === null || x.type === type) && !x.killed);\n\t}\n\n\t/**\n\t * Enable dispatching of events if they were previously disabled by\n\t * `disable()`.\n\t */\n\tpublic enable(): void {\n\t\tthis._enabled = true;\n\t}\n\n\t/**\n\t * Disable dispatching of events until re-enabled by `enable()`.\n\t */\n\tpublic disable(): void {\n\t\tthis._enabled = false;\n\t}\n\n\t/**\n\t * Enable dispatching particular event, if it was disabled before by\n\t * `disableType()`.\n\t *\n\t * @param type Event type\n\t */\n\tpublic enableType(type: Key): void {\n\t\tdelete this._disabled[type];\n\t}\n\n\t/**\n\t * Disable dispatching of events for a certain event type.\n\t *\n\t * Optionally, can set how many dispatches to skip before automatically\n\t * re-enabling the dispatching.\n\t *\n\t * @param type Event type\n\t * @param amount Number of event dispatches to skip\n\t */\n\tpublic disableType(type: Key, amount: number = Infinity): void {\n\t\tthis._disabled[type] = amount;\n\t}\n\n\t/**\n\t * Removes listener from dispatcher.\n\t *\n\t * Will throw an exception if such listener does not exists.\n\t *\n\t * @param listener Listener to remove\n\t */\n\tprotected _removeListener(listener: EventListener): void {\n\t\tif (this._iterating === 0) {\n\t\t\tconst index = this._listeners.indexOf(listener);\n\n\t\t\tif (index === -1) {\n\t\t\t\tthrow new Error(\"Invalid state: could not remove listener\");\n\t\t\t}\n\n\t\t\tthis._listeners.splice(index, 1);\n\n\t\t} else {\n\t\t\tthis._killed.push(listener);\n\t\t}\n\t}\n\n\t/**\n\t * Removes existing listener by certain parameters.\n\t *\n\t * @param once Listener's once setting\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t */\n\tprotected _removeExistingListener(once: boolean, type: Key | null, callback?: (this: C, event: T[Key]) => void, context?: C): void {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tthis._eachListener((info) => {\n\t\t\tif (info.once === once && // TODO is this correct ?\n\t\t\t\tinfo.type === type &&\n\t\t\t\t(callback === undefined || info.callback === callback) &&\n\t\t\t\tinfo.context === context) {\n\t\t\t\tinfo.disposer.dispose();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Checks if dispatching for particular event type is enabled.\n\t *\n\t * @param type Event type\n\t * @return Enabled?\n\t */\n\tpublic isEnabled(type: Key): boolean {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\t// TODO is this check correct ?\n\t\treturn this._enabled && this._listeners.length > 0 && this.hasListenersByType(type) && this._disabled[type] === undefined;\n\t}\n\n\t/**\n\t * Removes all listeners of a particular event type\n\t *\n\t * @param type Listener's type\n\t */\n\tpublic removeType(type: Key): void {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tthis._eachListener((info) => {\n\t\t\tif (info.type === type) {\n\t\t\t\tinfo.disposer.dispose();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Checks if there's already a listener with specific parameters.\n\t *\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t * @return Has listener?\n\t */\n\tpublic has(type: Key, callback?: (this: C, event: T[Key]) => void, context?: C): boolean {\n\t\tconst index = $array.findIndex(this._listeners, (info) => {\n\t\t\treturn info.once !== true && // Ignoring \"once\" listeners\n\t\t\t\tinfo.type === type &&\n\t\t\t\t(callback === undefined || info.callback === callback) &&\n\t\t\t\tinfo.context === context;\n\t\t});\n\n\t\treturn index !== -1;\n\t}\n\n\t/**\n\t * Checks whether event of the particular type should be dispatched.\n\t *\n\t * @param type Event type\n\t * @return Dispatch?\n\t */\n\tprotected _shouldDispatch(type: Key): boolean {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tconst count = this._disabled[type];\n\n\t\tif (!$type.isNumber(count)) {\n\t\t\treturn this._enabled;\n\n\t\t} else {\n\t\t\tif (count <= 1) {\n\t\t\t\tdelete this._disabled[type];\n\n\t\t\t} else {\n\t\t\t\t--this._disabled[type]!;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * [_eachListener description]\n\t *\n\t * All of this extra code is needed when a listener is removed while iterating\n\t *\n\t * @todo Description\n\t * @param fn [description]\n\t */\n\tprotected _eachListener(fn: (listener: EventListener) => void): void {\n\t\t++this._iterating;\n\n\t\ttry {\n\t\t\t$array.each(this._listeners, fn);\n\n\t\t} finally {\n\t\t\t--this._iterating;\n\n\t\t\t// TODO should this be inside or outside the finally ?\n\t\t\tif (this._iterating === 0 && this._killed.length !== 0) {\n\t\t\t\t// Remove killed listeners\n\t\t\t\t$array.each(this._killed, (killed) => {\n\t\t\t\t\tthis._removeListener(killed);\n\t\t\t\t});\n\n\t\t\t\tthis._killed.length = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Dispatches an event immediately without waiting for next cycle.\n\t *\n\t * @param type Event type\n\t * @param event Event object\n\t * @todo automatically add in type and target properties if they are missing\n\t */\n\tpublic dispatch(type: Key, event: T[Key]): void {\n\t\tif (this._shouldDispatch(type)) {\n\t\t\t// TODO check if it's faster to use an object of listeners rather than a single big array\n\t\t\t// TODO if the function throws, maybe it should keep going ?\n\t\t\tthis._eachListener((listener) => {\n\t\t\t\tif (!listener.killed && (listener.type === null || listener.type === type)) {\n\t\t\t\t\tlistener.dispatch(type, event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Shelves the event to be dispatched within next update cycle.\n\t *\n\t * @param type Event type\n\t * @param event Event object\n\t * @todo automatically add in type and target properties if they are missing\n\t */\n\t/*public dispatchLater(type: Key, event: T[Key]): void {\n\t\tif (this._shouldDispatch(type)) {\n\t\t\tthis._eachListener((listener) => {\n\t\t\t\t// TODO check if it's faster to use an object of listeners rather than a single big array\n\t\t\t\tif (!listener.killed && (listener.type === null || listener.type === type)) {\n\t\t\t\t\t// TODO if the function throws, maybe it should keep going ?\n\t\t\t\t\t// TODO dispatch during the update cycle, rather than using whenIdle\n\t\t\t\t\t$async.whenIdle(() => {\n\t\t\t\t\t\tif (!listener.killed) {\n\t\t\t\t\t\t\tlistener.dispatch(type, event);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}*/\n\n\t/**\n\t * Creates, catalogs and returns an [[EventListener]].\n\t *\n\t * Event listener can be disposed.\n\t *\n\t * @param once Listener's once setting\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\n\t * @param dispatch\n\t * @returns An event listener\n\t */\n\tprotected _on(once: boolean, type: Key | null, callback: any, context: C, shouldClone: boolean, dispatch: (type: Key, event: T[Key]) => void): EventListener {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tthis._removeExistingListener(once, type, callback, context);\n\n\t\tconst info: EventListener = {\n\t\t\ttype: type,\n\t\t\tcallback: callback,\n\t\t\tcontext: context,\n\t\t\tshouldClone: shouldClone,\n\t\t\tdispatch: dispatch,\n\t\t\tkilled: false,\n\t\t\tonce: once,\n\t\t\tdisposer: new Disposer(() => {\n\t\t\t\tinfo.killed = true;\n\t\t\t\tthis._removeListener(info);\n\t\t\t})\n\t\t};\n\n\t\tthis._listeners.push(info);\n\n\t\treturn info;\n\t}\n\n\t/**\n\t * Creates an event listener to be invoked on **any** event.\n\t *\n\t * @param callback Callback function\n\t * @param context Callback context\n\t * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\n\t * @returns A disposable event listener\n\t */\n\tpublic onAll(callback: (this: C, event: T[K]) => void, context?: C, shouldClone: boolean = true): IDisposer {\n\t\treturn this._on(false, null, callback, context, shouldClone, (_type, event) => (callback).call(context, event as any)).disposer;\n\t}\n\n\t/**\n\t * Creates an event listener to be invoked on a specific event type.\n\t *\n\t * ```TypeScript\n\t * button.events.once(\"click\", (ev) => {\n\t * console.log(\"Button clicked\");\n\t * }, this);\n\t * ```\n\t * ```JavaScript\n\t * button.events.once(\"click\", (ev) => {\n\t * console.log(\"Button clicked\");\n\t * }, this);\n\t * ```\n\t *\n\t * The above will invoke our custom event handler whenever series we put\n\t * event on is hidden.\n\t *\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\n\t * @returns A disposable event listener\n\t */\n\tpublic on(type: Key, callback: (this: C | undefined, event: T[Key]) => void, context?: C, shouldClone: boolean = true): IDisposer {\n\t\treturn this._on(false, type, callback, context, shouldClone, (_type, event) => callback.call(context, event)).disposer;\n\t}\n\n\t/**\n\t * Creates an event listener to be invoked on a specific event type once.\n\t *\n\t * Once the event listener is invoked, it is automatically disposed.\n\t *\n\t * ```TypeScript\n\t * button.events.once(\"click\", (ev) => {\n\t * console.log(\"Button clicked\");\n\t * }, this);\n\t * ```\n\t * ```JavaScript\n\t * button.events.once(\"click\", (ev) => {\n\t * console.log(\"Button clicked\");\n\t * }, this);\n\t * ```\n\t *\n\t * The above will invoke our custom event handler the first time series we\n\t * put event on is hidden.\n\t *\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\n\t * @returns A disposable event listener\n\t */\n\tpublic once(type: Key, callback: (this: C | undefined, event: T[Key]) => void, context?: C, shouldClone: boolean = true): IDisposer {\n\t\tconst x = this._on(true, type, callback, context, shouldClone, (_type, event) => {\n\t\t\tx.disposer.dispose();\n\t\t\tcallback.call(context, event)\n\t\t});\n\n\t\t// TODO maybe this should return a different Disposer ?\n\t\treturn x.disposer;\n\t}\n\n\t/**\n\t * Removes the event listener with specific parameters.\n\t *\n\t * @param type Listener's type\n\t * @param callback Callback function\n\t * @param context Callback context\n\t */\n\tpublic off(type: Key, callback?: (this: C, event: T[Key]) => void, context?: C): void {\n\t\tthis._removeExistingListener(false, type, callback, context);\n\t}\n\n\n\t/**\n\t * Copies all dispatcher parameters, including listeners, from another event\n\t * dispatcher.\n\t *\n\t * @param source Source event dispatcher\n\t * @ignore\n\t */\n\tpublic copyFrom(source: this): IDisposer {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tif (source === this) {\n\t\t\tthrow new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\n\t\t}\n\n\t\tconst disposers: Array = [];\n\n\t\t$array.each(source._listeners, (x) => {\n\t\t\t// TODO is this correct ?\n\t\t\tif (!x.killed && x.shouldClone) {\n\t\t\t\tif (x.type === null) {\n\t\t\t\t\tdisposers.push(this.onAll(x.callback as any, x.context));\n\n\t\t\t\t} else if (x.once) {\n\t\t\t\t\tdisposers.push(this.once(x.type, x.callback, x.context));\n\n\t\t\t\t} else {\n\t\t\t\t\tdisposers.push(this.on(x.type, x.callback, x.context));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn new MultiDisposer(disposers);\n\t}\n\n}\n\n/**\n * A version of the [[EventDispatcher]] that dispatches events for a specific\n * target object.\n *\n * @ignore\n */\nexport class TargetedEventDispatcher extends EventDispatcher {\n\n\t/**\n\t * A target object which is originating events using this dispatcher.\n\t */\n\tpublic target: Target;\n\n\t/**\n\t * Constructor\n\t *\n\t * @param target Event dispatcher target\n\t */\n\tconstructor(target: Target) {\n\t\tsuper();\n\t\tthis.target = target;\n\t}\n\n\t/**\n\t * Copies all dispatcher parameters, including listeners, from another event\n\t * dispatcher.\n\t *\n\t * @param source Source event dispatcher\n\t * @ignore\n\t */\n\tpublic copyFrom(source: this): IDisposer {\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(\"EventDispatcher is disposed\");\n\t\t}\n\n\t\tif (source === this) {\n\t\t\tthrow new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\n\t\t}\n\n\t\tconst disposers: Array = [];\n\n\t\t$array.each(source._listeners, (x) => {\n\t\t\t// TODO very hacky\n\t\t\tif (x.context === source.target) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// TODO is this correct ?\n\t\t\tif (!x.killed && x.shouldClone) {\n\t\t\t\tif (x.type === null) {\n\t\t\t\t\tdisposers.push(this.onAll(x.callback as any, x.context));\n\n\t\t\t\t} else if (x.once) {\n\t\t\t\t\tdisposers.push(this.once(x.type, x.callback, x.context));\n\n\t\t\t\t} else {\n\t\t\t\t\tdisposers.push(this.on(x.type, x.callback, x.context));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn new MultiDisposer(disposers);\n\t}\n\n}\n","import type { Color } from \"./Color\"\n\nimport { Entity, IEntitySettings } from \"./Entity\"\n\n\nexport interface IInterfaceColorsSettings extends IEntitySettings {\n\n\t/**\n\t * Used for generic outlines.\n\t */\n\tstroke?: Color,\n\n\t/**\n\t * Used for generic fills.\n\t */\n\tfill?: Color,\n\n\t/**\n\t * Primary button fill color.\n\t */\n\tprimaryButton?: Color,\n\n\t/**\n\t * Primary button fill color on hover.\n\t */\n\tprimaryButtonHover?: Color,\n\n\t/**\n\t * Primary button fill color when pressing down on it.\n\t */\n\tprimaryButtonDown?: Color,\n\n\t/**\n\t * Primary button fill color when it is set as active.\n\t */\n\tprimaryButtonActive?: Color,\n\n\t/**\n\t * Primary button text color.\n\t */\n\tprimaryButtonText?: Color,\n\n\t/**\n\t * Primary button stroke (outline) color.\n\t */\n\tprimaryButtonStroke?: Color,\n\n\t/**\n\t * Secondary button fill color.\n\t */\n\tsecondaryButton?: Color,\n\n\t/**\n\t * Secondary button fill color on hover.\n\t */\n\tsecondaryButtonHover?: Color,\n\n\t/**\n\t * Secondary button fill color when pressing down on it.\n\t */\n\tsecondaryButtonDown?: Color,\n\n\t/**\n\t * Secondary button fill color when it is set as active.\n\t */\n\tsecondaryButtonActive?: Color,\n\n\t/**\n\t * Secondary button text color.\n\t */\n\tsecondaryButtonText?: Color,\n\n\t/**\n\t * Secondary button stroke (outline) color.\n\t */\n\tsecondaryButtonStroke?: Color,\n\n\t/**\n\t * Grid color.\n\t */\n\tgrid?: Color,\n\n\t/**\n\t * Chart background color.\n\t */\n\tbackground?: Color,\n\n\t/**\n\t * Alternative background, for elements that need to contrast with primary\n\t * background.\n\t */\n\talternativeBackground?: Color,\n\n\t/**\n\t * Label text color.\n\t */\n\ttext?: Color,\n\n\t/**\n\t * Alternative text color, used for inverted (dark) backgrounds.\n\t * @type {[type]}\n\t */\n\talternativeText?: Color,\n\n\t/**\n\t * Color for disabled elements.\n\t */\n\tdisabled?: Color,\n\n\t/**\n\t * Color to indicate positive value.\n\t */\n\tpositive?: Color,\n\n\t/**\n\t * Color to indicate negative value.\n\t */\n\tnegative?: Color\n\n}\n\n\n/**\n * Presets for common UI elements.\n */\nexport class InterfaceColors extends Entity {\n\tpublic static className: string = \"InterfaceColors\";\n\tpublic static classNames: Array = Entity.classNames.concat([InterfaceColors.className]);\n\n\tdeclare public _settings: IInterfaceColorsSettings;\n}\n","/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport type { Entity } from \"./Entity\";\nimport type { Template } from \"./Template\";\nimport type { IDisposer } from \"./Disposer\";\nimport { EventDispatcher, Events } from \"./EventDispatcher\";\nimport * as $array from \"./Array\";\nimport type { Optional } from \"./Type\";\n\n\n/**\n * Checks if specific index fits into length.\n *\n * @param index Index\n * @param len Length\n * @ignore\n */\nfunction checkBounds(index: number, len: number): void {\n\tif (!(index >= 0 && index < len)) {\n\t\tthrow new Error(\"Index out of bounds: \" + index);\n\t}\n}\n\n\nexport interface IListEvents {\n\tclear: {\n\t\toldValues: Array,\n\t};\n\tpush: {\n\t\tnewValue: A,\n\t};\n\tinsertIndex: {\n\t\tindex: number,\n\t\tnewValue: A,\n\t};\n\tsetIndex: {\n\t\tindex: number,\n\t\toldValue: A,\n\t\tnewValue: A,\n\t};\n\tremoveIndex: {\n\t\tindex: number,\n\t\toldValue: A,\n\t};\n\tmoveIndex: {\n\t\toldIndex: number,\n\t\tnewIndex: number,\n\t\tvalue: A,\n\t};\n}\n\n\n/**\n * A List class is used to hold a number of indexed items of the same type.\n */\nexport class List {\n\n\t/**\n\t * List values.\n\t */\n\tprotected _values: Array;\n\n\tpublic events: EventDispatcher>> = new EventDispatcher();\n\n\t/**\n\t * Constructor\n\t *\n\t * @param initial Inital list of values to add to list\n\t */\n\tconstructor(initial: Array = []) {\n\t\tthis._values = initial;\n\t}\n\n\t/**\n\t * An array of values in the list.\n\t *\n\t * Do not use this property to add values. Rather use dedicated methods, like\n\t * `push()`, `removeIndex()`, etc.\n\t *\n\t * @readonly\n\t * @return List values\n\t */\n\tpublic get values(): Array {\n\t\treturn this._values;\n\t}\n\n\t/**\n\t * Checks if list contains specific item reference.\n\t *\n\t * @param item Item to search for\n\t * @return `true` if found, `false` if not found\n\t */\n\tpublic contains(value: T): boolean {\n\t\treturn this._values.indexOf(value) !== -1;\n\t}\n\n\t/**\n\t * Removes specific item from the list.\n\t *\n\t * @param item An item to remove\n\t */\n\tpublic removeValue(value: T): void {\n\t\tlet i = 0;\n\t\tlet length = this._values.length;\n\n\t\twhile (i < length) {\n\t\t\t// TODO handle NaN\n\t\t\tif (this._values[i] === value) {\n\t\t\t\tthis.removeIndex(i);\n\t\t\t\t--length;\n\n\t\t\t} else {\n\t\t\t\t++i;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Searches the list for specific item and returns its index.\n\t *\n\t * @param item An item to search for\n\t * @return Index or -1 if not found\n\t */\n\tpublic indexOf(value: T): number {\n\t\treturn $array.indexOf(this._values, value);\n\t}\n\n\t/**\n\t * Number of items in list.\n\t *\n\t * @readonly\n\t * @return Number of items\n\t */\n\tpublic get length(): number {\n\t\treturn this._values.length;\n\t}\n\n\t/**\n\t * Checks if there's a value at specific index.\n\t *\n\t * @param index Index\n\t * @return Value exists?\n\t */\n\tpublic hasIndex(index: number): boolean {\n\t\treturn index >= 0 && index < this._values.length;\n\t}\n\n\t/**\n\t * Returns an item at specified index.\n\t *\n\t * @param index Index\n\t * @return List item\n\t */\n\tpublic getIndex(index: number): T | undefined {\n\t\treturn this._values[index];\n\t}\n\n\tprotected _onPush(newValue: T) {\n\t\tif (this.events.isEnabled(\"push\")) {\n\t\t\tthis.events.dispatch(\"push\", {\n\t\t\t\ttype: \"push\",\n\t\t\t\ttarget: this,\n\t\t\t\tnewValue\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _onInsertIndex(index: number, newValue: T) {\n\t\tif (this.events.isEnabled(\"insertIndex\")) {\n\t\t\tthis.events.dispatch(\"insertIndex\", {\n\t\t\t\ttype: \"insertIndex\",\n\t\t\t\ttarget: this,\n\t\t\t\tindex,\n\t\t\t\tnewValue\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _onSetIndex(index: number, oldValue: T, newValue: T) {\n\t\tif (this.events.isEnabled(\"setIndex\")) {\n\t\t\tthis.events.dispatch(\"setIndex\", {\n\t\t\t\ttype: \"setIndex\",\n\t\t\t\ttarget: this,\n\t\t\t\tindex,\n\t\t\t\toldValue,\n\t\t\t\tnewValue\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _onRemoveIndex(index: number, oldValue: T) {\n\t\tif (this.events.isEnabled(\"removeIndex\")) {\n\t\t\tthis.events.dispatch(\"removeIndex\", {\n\t\t\t\ttype: \"removeIndex\",\n\t\t\t\ttarget: this,\n\t\t\t\tindex,\n\t\t\t\toldValue\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _onMoveIndex(oldIndex: number, newIndex: number, value: T) {\n\t\tif (this.events.isEnabled(\"moveIndex\")) {\n\t\t\tthis.events.dispatch(\"moveIndex\", {\n\t\t\t\ttype: \"moveIndex\",\n\t\t\t\ttarget: this,\n\t\t\t\toldIndex,\n\t\t\t\tnewIndex,\n\t\t\t\tvalue,\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected _onClear(oldValues: Array) {\n\t\tif (this.events.isEnabled(\"clear\")) {\n\t\t\tthis.events.dispatch(\"clear\", {\n\t\t\t\ttype: \"clear\",\n\t\t\t\ttarget: this,\n\t\t\t\toldValues\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Sets value at specific index.\n\t *\n\t * If there's already a value at the index, it is overwritten.\n\t *\n\t * @param index Index\n\t * @param value New value\n\t * @return New value\n\t */\n\tpublic setIndex(index: number, value: T): T {\n\t\tcheckBounds(index, this._values.length);\n\n\t\tconst oldValue = this._values[index];\n\n\t\t// Do nothing if the old value and the new value are the same\n\t\tif (oldValue !== value) {\n\t\t\tthis._values[index] = value;\n\t\t\tthis._onSetIndex(index, oldValue, value);\n\t\t}\n\n\t\treturn oldValue;\n\t}\n\n\t/**\n\t * Adds an item to the list at a specific index, which pushes all the other\n\t * items further down the list.\n\t *\n\t * @param index Index\n\t * @param item An item to add\n\t */\n\tpublic insertIndex(index: number, value: K): K {\n\t\tcheckBounds(index, this._values.length + 1);\n\n\t\t$array.insertIndex(this._values, index, value);\n\t\tthis._onInsertIndex(index, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Swaps indexes of two items in the list.\n\t *\n\t * @param a Item 1\n\t * @param b Item 2\n\t */\n\tpublic swap(a: number, b: number): void {\n\t\tconst len = this._values.length;\n\n\t\tcheckBounds(a, len);\n\t\tcheckBounds(b, len);\n\n\t\tif (a !== b) {\n\t\t\tconst value_a = this._values[a];\n\t\t\tconst value_b = this._values[b];\n\n\t\t\tthis._values[a] = value_b;\n\t\t\tthis._onSetIndex(a, value_a, value_b);\n\n\t\t\tthis._values[b] = value_a;\n\t\t\tthis._onSetIndex(b, value_b, value_a);\n\t\t}\n\t}\n\n\t/**\n\t * Removes a value at specific index.\n\t *\n\t * @param index Index of value to remove\n\t * @return Removed value\n\t */\n\tpublic removeIndex(index: number): T {\n\t\tcheckBounds(index, this._values.length);\n\n\t\tconst oldValue = this._values[index];\n\n\t\t$array.removeIndex(this._values, index);\n\t\tthis._onRemoveIndex(index, oldValue);\n\n\t\treturn oldValue;\n\t}\n\n\t/**\n\t * Moves an item to a specific index within the list.\n\t *\n\t * If the index is not specified it will move the item to the end of the\n\t * list.\n\t *\n\t * @param value Item to move\n\t * @param index Index to place item at\n\t */\n\tpublic moveValue(value: K, toIndex?: number): K {\n\t\t// TODO don't do anything if the desired index is the same as the current index\n\t\tlet index = this.indexOf(value);\n\n\t\t// TODO remove all old values rather than only the first ?\n\t\tif (index !== -1) {\n\t\t\t$array.removeIndex(this._values, index);\n\n\t\t\tif (toIndex == null) {\n\t\t\t\tconst toIndex = this._values.length;\n\t\t\t\tthis._values.push(value);\n\t\t\t\tthis._onMoveIndex(index, toIndex, value);\n\n\t\t\t} else {\n\t\t\t\t$array.insertIndex(this._values, toIndex, value);\n\t\t\t\tthis._onMoveIndex(index, toIndex, value);\n\t\t\t}\n\n\t\t} else if (toIndex == null) {\n\t\t\tthis._values.push(value);\n\t\t\tthis._onPush(value);\n\n\t\t} else {\n\t\t\t$array.insertIndex(this._values, toIndex, value);\n\t\t\tthis._onInsertIndex(toIndex, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * Adds an item to the end of the list.\n\t *\n\t * @param item An item to add\n\t */\n\tpublic push(value: K): K {\n\t\tthis._values.push(value);\n\t\tthis._onPush(value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Adds an item as a first item in the list.\n\t *\n\t * @param item An item to add\n\t */\n\tpublic unshift(value: K): K {\n\t\tthis.insertIndex(0, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Adds multiple items to the list.\n\t *\n\t * @param items An Array of items to add\n\t */\n\tpublic pushAll(values: Array): void {\n\t\t$array.each(values, (value) => {\n\t\t\tthis.push(value);\n\t\t});\n\t}\n\n\t/**\n\t * Copies and adds items from abother list.\n\t *\n\t * @param source A list top copy items from\n\t */\n\tpublic copyFrom(source: this): void {\n\t\tthis.pushAll(source._values);\n\t}\n\n\t/**\n\t * Returns the last item from the list, and removes it.\n\t *\n\t * @return Item\n\t */\n\tpublic pop(): Optional {\n\t\tlet index = this._values.length - 1;\n\t\treturn index < 0 ? undefined : this.removeIndex(this._values.length - 1);\n\t}\n\n\t/**\n\t * Returns the first item from the list, and removes it.\n\t *\n\t * @return Item\n\t */\n\tpublic shift(): Optional {\n\t\treturn this._values.length ? this.removeIndex(0) : undefined;\n\t}\n\n\t/**\n\t * Sets multiple items to the list.\n\t *\n\t * All current items are removed.\n\t *\n\t * @param newArray New items\n\t */\n\tpublic setAll(newArray: Array): void {\n\t\tconst old = this._values;\n\t\tthis._values = [];\n\t\tthis._onClear(old);\n\n\t\t$array.each(newArray, (value) => {\n\t\t\tthis._values.push(value);\n\t\t\tthis._onPush(value);\n\t\t});\n\t}\n\n\t/**\n\t * Removes all items from the list.\n\t */\n\tpublic clear(): void {\n\t\tthis.setAll([]);\n\t}\n\n\t/**\n\t * Returns an ES6 iterator for the list.\n\t */\n\tpublic *[Symbol.iterator](): Iterator {\n\t\tconst length = this._values.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tyield this._values[i];\n\t\t}\n\t}\n\n\t/**\n\t * Calls `f` for each element in the list.\n\t *\n\t * `f` should have at least one parameter defined which will get a current\n\t * item, with optional second argument - index.\n\t */\n\tpublic each(f: (value: T, index: number) => void): void {\n\t\t$array.each(this._values, f);\n\t}\n\n\t/**\n\t * Calls `f` for each element in the list, from right to left.\n\t *\n\t * `f` should have at least one parameter defined which will get a current\n\t * item, with optional second argument - index.\n\t */\n\tpublic eachReverse(f: (value: T, index: number) => void): void {\n\t\t$array.eachReverse(this._values, f);\n\t}\n}\n\n\n/**\n * A version of a [[List]] where the elements are disposed automatically when\n * removed from the list, unless `autoDispose` is set to `false`.\n */\nexport class ListAutoDispose extends List implements IDisposer {\n\t/**\n\t * Automatically disposes elements that are removed from the list.\n\t *\n\t * @default true\n\t */\n\tpublic autoDispose: boolean = true;\n\n\tprivate _disposed: boolean = false;\n\n\tprotected _onSetIndex(index: number, oldValue: A, newValue: A) {\n\t\tif (this.autoDispose) {\n\t\t\toldValue.dispose();\n\t\t}\n\n\t\tsuper._onSetIndex(index, oldValue, newValue);\n\t}\n\n\tprotected _onRemoveIndex(index: number, oldValue: A) {\n\t\tif (this.autoDispose) {\n\t\t\toldValue.dispose();\n\t\t}\n\n\t\tsuper._onRemoveIndex(index, oldValue);\n\t}\n\n\tprotected _onClear(oldValues: Array) {\n\t\tif (this.autoDispose) {\n\t\t\t$array.each(oldValues, (x) => {\n\t\t\t\tx.dispose();\n\t\t\t});\n\t\t}\n\n\t\tsuper._onClear(oldValues);\n\t}\n\n\tpublic isDisposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (!this._disposed) {\n\t\t\tthis._disposed = true;\n\n\t\t\tif (this.autoDispose) {\n\t\t\t\t$array.each(this._values, (x) => {\n\t\t\t\t\tx.dispose();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * A version of a [[List]] that is able to create new elements as well as\n * apply additional settings to newly created items.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/list-templates/} for more info\n */\nexport class ListTemplate extends ListAutoDispose {\n\tpublic template: Template;\n\tpublic make: () => A;\n\n\tconstructor(template: Template, make: () => A) {\n\t\tsuper();\n\t\tthis.template = template;\n\t\tthis.make = make;\n\t}\n}\n","import type { IPoint } from \"./IPoint\";\nimport { isNumber } from \"./Type\";\nimport type { IBounds } from \"./IBounds\";\n\n/**\n * ============================================================================\n * CONSTANTS\n * ============================================================================\n * @hidden\n */\nexport const PI = Math.PI;\nexport const HALFPI = PI / 2;\nexport const RADIANS = PI / 180;\nexport const DEGREES = 180 / PI;\n\n/**\n * Rounds the numeric value to whole number or specific precision of set.\n *\n * @param value Value\n * @param precision Precision (number of decimal points)\n * @param floor In case value ends with 0.5 and precision is 0, we might need to floor the value instead of ceiling it.\n * @return Rounded value\n */\nexport function round(value: number, precision?: number, floor?: boolean): number {\n\tif (!isNumber(precision) || precision <= 0) {\n\n\t\tlet rounded = Math.round(value);\n\t\tif (floor) {\n\t\t\tif (rounded - value == 0.5) {\n\t\t\t\trounded--;\n\t\t\t}\n\t\t}\n\t\treturn rounded;\n\t}\n\telse {\n\t\tlet d: number = Math.pow(10, precision);\n\t\treturn Math.round(value * d) / d;\n\t}\n}\n\n\n/**\n * Ceils the numeric value to whole number or specific precision of set.\n *\n * @param value Value\n * @param precision Precision (number of decimal points)\n * @return Rounded value\n */\nexport function ceil(value: number, precision: number): number {\n\tif (!isNumber(precision) || precision <= 0) {\n\t\treturn Math.ceil(value);\n\t}\n\telse {\n\t\tlet d: number = Math.pow(10, precision);\n\t\treturn Math.ceil(value * d) / d;\n\t}\n}\n\n\n/**\n * [getCubicControlPointA description]\n *\n * @ignore Exclude from docs\n * @todo Description\n * @param p0 [description]\n * @param p1 [description]\n * @param p2 [description]\n * @param p3 [description]\n * @param tensionX [description]\n * @param tensionY [description]\n * @return [description]\n */\nexport function getCubicControlPointA(p0: IPoint, p1: IPoint, p2: IPoint, tensionX: number, tensionY: number): IPoint {\n\treturn { x: ((-p0.x + p1.x / tensionX + p2.x) * tensionX), y: ((-p0.y + p1.y / tensionY + p2.y) * tensionY) };\n}\n\n/**\n * [getCubicControlPointB description]\n *\n * @ignore Exclude from docs\n * @todo Description\n * @param p0 [description]\n * @param p1 [description]\n * @param p2 [description]\n * @param p3 [description]\n * @param tensionX [description]\n * @param tensionY [description]\n * @return [description]\n */\nexport function getCubicControlPointB(p1: IPoint, p2: IPoint, p3: IPoint, tensionX: number, tensionY: number): IPoint {\n\treturn { x: ((p1.x + p2.x / tensionX - p3.x) * tensionX), y: ((p1.y + p2.y / tensionY - p3.y) * tensionY) };\n}\n\n\nexport function fitToRange(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns sine of an angle specified in degrees.\n *\n * @param value Value\n * @return Sine\n */\nexport function sin(angle: number): number {\n\treturn Math.sin(RADIANS * angle);\n}\n\n/**\n * Returns tan of an angle specified in degrees.\n *\n * @param value Value\n * @return Sine\n */\nexport function tan(angle: number): number {\n\treturn Math.tan(RADIANS * angle);\n}\n\n/**\n * Returns cosine of an angle specified in degrees.\n *\n * @param value Value\n * @return Cosine\n */\nexport function cos(angle: number): number {\n\treturn Math.cos(RADIANS * angle);\n}\n\n// 0 to 360\nexport function normalizeAngle(value: number): number {\n\tvalue = value % 360;\n\tif (value < 0) {\n\t\tvalue += 360;\n\t}\n\treturn value;\n}\n\n// TODO this doesn't work properly for skewing, and it's probably broken for rotation too\nexport function getArcBounds(cx: number, cy: number, startAngle: number, endAngle: number, radius: number): IBounds {\n\n\tlet minX = Number.MAX_VALUE;\n\tlet minY = Number.MAX_VALUE;\n\tlet maxX = -Number.MAX_VALUE;\n\tlet maxY = -Number.MAX_VALUE;\n\n\tlet bpoints = [];\n\n\tbpoints.push(getArcPoint(radius, startAngle));\n\tbpoints.push(getArcPoint(radius, endAngle));\n\n\tlet fromAngle = Math.min(Math.floor(startAngle / 90) * 90, Math.floor(endAngle / 90) * 90);\n\tlet toAngle = Math.max(Math.ceil(startAngle / 90) * 90, Math.ceil(endAngle / 90) * 90);\n\n\tfor (let angle = fromAngle; angle <= toAngle; angle += 90) {\n\t\tif (angle >= startAngle && angle <= endAngle) {\n\t\t\tbpoints.push(getArcPoint(radius, angle));\n\t\t}\n\t}\n\n\tfor (let i = 0; i < bpoints.length; i++) {\n\t\tlet pt = bpoints[i];\n\t\tif (pt.x < minX) { minX = pt.x; }\n\t\tif (pt.y < minY) { minY = pt.y; }\n\t\tif (pt.x > maxX) { maxX = pt.x; }\n\t\tif (pt.y > maxY) { maxY = pt.y; }\n\t}\n\n\treturn ({ left: cx + minX, top: cy + minY, right: cx + maxX, bottom: cy + maxY });\n}\n\n/**\n * Returns point on arc\n *\n * @param center point\n * @param radius\n * @param arc\n * @return {boolean}\n */\nexport function getArcPoint(radius: number, arc: number) {\n\treturn ({ x: radius * cos(arc), y: radius * sin(arc) });\n}\n\n\nexport function mergeBounds(bounds: IBounds[]): IBounds {\n\tconst len = bounds.length;\n\n\tif (len > 0) {\n\t\tlet bound = bounds[0];\n\t\tlet left = bound.left;\n\t\tlet top = bound.top;\n\t\tlet right = bound.right;\n\t\tlet bottom = bound.bottom;\n\n\t\tif (len > 1) {\n\t\t\tfor (let i = 1; i < len; i++) {\n\t\t\t\tbound = bounds[i];\n\t\t\t\tleft = Math.min(bound.left, left);\n\t\t\t\tright = Math.max(bound.right, right);\n\t\t\t\ttop = Math.min(bound.top, top);\n\t\t\t\tbottom = Math.max(bound.bottom, bottom);\n\t\t\t}\n\t\t}\n\n\t\treturn { left, right, top, bottom };\n\t}\n\treturn { left: 0, right: 0, top: 0, bottom: 0 };\n}\n\n\nexport function fitAngleToRange(value: number, startAngle: number, endAngle: number): number {\n\n\tif (startAngle > endAngle) {\n\t\tlet temp: number = startAngle;\n\t\tstartAngle = endAngle;\n\t\tendAngle = temp;\n\t}\n\n\tvalue = normalizeAngle(value);\n\n\tlet count = (startAngle - normalizeAngle(startAngle)) / 360;\n\n\tif (value < startAngle) {\n\t\tvalue += 360 * (count + 1);\n\t}\n\n\tlet maxEnd: number = startAngle + (endAngle - startAngle) / 2 + 180;\n\tlet maxStart: number = startAngle + (endAngle - startAngle) / 2 - 180;\n\n\tif (value > endAngle) {\n\n\t\tif (value - 360 > startAngle) {\n\t\t\tvalue -= 360;\n\t\t}\n\t\telse {\n\t\t\tif (value < maxEnd) {\n\t\t\t\tvalue = endAngle;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = startAngle;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (value < startAngle) {\n\t\tif (value > maxStart) {\n\t\t\tvalue = startAngle;\n\t\t}\n\t\telse {\n\t\t\tvalue = endAngle;\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function inBounds(point: IPoint, bounds: IBounds) {\n\tif (point.x >= bounds.left && point.y >= bounds.top && point.x <= bounds.right && point.y <= bounds.bottom) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport function getAngle(point1: IPoint, point2?: IPoint): number {\n\tif (!point2) {\n\t\tpoint2 = { x: point1.x * 2, y: point1.y * 2 };\n\t}\n\tlet diffX: number = point2.x - point1.x;\n\tlet diffY: number = point2.y - point1.y;\n\tlet angle: number = Math.atan2(diffY, diffX) * DEGREES;\n\tif (angle < 0) {\n\t\tangle += 360;\n\t}\n\treturn normalizeAngle(angle);\n}\n\n/**\n * [getPointOnQuadraticCurve description]\n *\n * @ignore Exclude from docs\n * @todo Description\n * @param pointA [description]\n * @param pointB [description]\n * @param controlPoint [description]\n * @param position [description]\n * @return [description]\n */\nexport function getPointOnQuadraticCurve(pointA: IPoint, pointB: IPoint, controlPoint: IPoint, position: number): IPoint {\n\tlet x: number = (1 - position) * (1 - position) * pointA.x + 2 * (1 - position) * position * controlPoint.x + position * position * pointB.x;\n\tlet y: number = (1 - position) * (1 - position) * pointA.y + 2 * (1 - position) * position * controlPoint.y + position * position * pointB.y;\n\treturn { x: x, y: y };\n}\n\nexport function getPointOnLine(pointA: IPoint, pointB: IPoint, position: number): IPoint {\n\treturn { x: pointA.x + (pointB.x - pointA.x) * position, y: pointA.y + (pointB.y - pointA.y) * position };\n}\n\n\n/**\n * Returns the closest value from the array of values to the reference value.\n *\n * @param values Array of values\n * @param value Reference value\n * @return Closes value from the array\n */\nexport function closest(values: number[], referenceValue: number): number {\n\treturn values.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - referenceValue) < Math.abs(prev - referenceValue) ? curr : prev);\n\t});\n}\n\n/**\n * Returns true if bounds overlap\n * @param bounds1 IBounds\n * @param bounds2 IBounds\n * @returns boolean\n */\nexport function boundsOverlap(bounds1: IBounds, bounds2: IBounds): boolean {\n\tconst horizontalOverlap = bounds1.left < bounds2.right && bounds1.right > bounds2.left;\n\tconst verticalOverlap = bounds1.top < bounds2.bottom && bounds1.bottom > bounds2.top;\n\treturn horizontalOverlap && verticalOverlap;\n}\n\n/**\n * Generates points of a spiral\n * @param cx \n * @param cy \n * @param radius \n * @param radiusY \n * @param innerRadius \n * @param step \n * @param radiusStep \n * @param startAngle \n * @param endAngle \n * @returns IPoint[]\n */\nexport function spiralPoints(cx: number, cy: number, radius: number, radiusY: number, innerRadius: number, step: number, radiusStep: number, startAngle: number, endAngle: number): IPoint[] {\n\n\tlet r = innerRadius + 0.01;\n\tlet angle = startAngle * RADIANS;\n\tlet points = [];\n\n\twhile (r < radius + radiusStep) {\n\n\t\tlet stepSize = step;\n\t\tif (stepSize / 2 > r) {\n\t\t\tstepSize = 2 * r;\n\t\t}\n\n\t\tangle += 2 * Math.asin(stepSize / 2 / r);\n\n\t\tif (angle * DEGREES > endAngle + ((radius - innerRadius) / radiusStep) * 360) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet degrees = angle * DEGREES;\n\n\t\tlet point = { x: cx + r * Math.cos(angle), y: cy + r * radiusY / radius * Math.sin(angle) };\n\t\tpoints.push(point);\n\n\t\tr = innerRadius + degrees / 360 * radiusStep;\n\t}\n\n\tpoints.shift();\n\n\treturn points;\n}\n\n/**\n * Returns true if circles overlap\n * @param circle1\n * @param circle2 \n * @returns boolean\n */\nexport function circlesOverlap(circle1: { x: number, y: number, radius: number }, circle2: { x: number, y: number, radius: number }): boolean {\n\treturn Math.hypot(circle1.x - circle2.x, circle1.y - circle2.y) <= circle1.radius + circle2.radius;\n}","import type { Root } from \"../Root\"\n\nimport { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"./Entity\";\nimport { StyleRule } from \"./Utils\"\nimport { MultiDisposer, IDisposer, CounterDisposer } from \"../../core/util/Disposer\";\n\nimport * as $utils from \"./Utils\"\n\n\n/**\n * @ignore\n */\nlet rules: CounterDisposer | undefined;\n\n/**\n * @ignore\n */\nfunction modalCSS(element: ShadowRoot | null, root: Root, _prefix?: string): IDisposer {\n\tconst ic = root.interfaceColors;\n\tconst active = ic.get(\"secondaryButton\")!.toCSS();\n\tconst text = ic.get(\"text\")!.toCSS();\n\tconst shadow = ic.get(\"alternativeBackground\")!.toCSS(0.45);\n\t//const altbg = ic.get(\"alternativeBackground\")!.toCSS();\n\n\tif (!rules) {\n\t\tconst disposer = new MultiDisposer([\n\n\t\t\tnew StyleRule(element, \".am5-modal\", {\n\t\t\t\t\"width\": \"100%\",\n\t\t\t\t\"height\": \"100%\",\n\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\"z-index\": \"100000\",\n\t\t\t\t\"top\": \"0\",\n\t\t\t\t\"left\": \"0\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-curtain\", {\n\t\t\t\t\"top\": \"0\",\n\t\t\t\t\"left\": \"0\",\n\t\t\t\t\"width\": \"100%\",\n\t\t\t\t\"height\": \"100%\",\n\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\"background\": ic.get(\"background\")!.toCSS(0.5),\n\t\t\t\t\"z-index\": \"100\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-wrapper\", {\n\t\t\t\t\"top\": \"0\",\n\t\t\t\t\"left\": \"0\",\n\t\t\t\t\"width\": \"100%\",\n\t\t\t\t\"height\": \"100%\",\n\t\t\t\t\"position\": \"absolute\",\n\t\t\t\t\"text-align\": \"center\",\n\t\t\t\t\"white-space\": \"nowrap\",\n\t\t\t\t\"background\": ic.get(\"background\")!.toCSS(0.5),\n\t\t\t\t\"z-index\": \"101\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-wrapper:before\", {\n\t\t\t\t\"content\": \"''\",\n\t\t\t\t\"display\": \"inline-block\",\n\t\t\t\t\"height\": \"100%\",\n\t\t\t\t\"vertical-align\": \"middle\",\n\t\t\t\t\"margin-right\": \"-0.25em\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-content\", {\n\t\t\t\t\"display\": \"inline-block\",\n\t\t\t\t\"padding\": \"1.2em\",\n\t\t\t\t\"vertical-align\": \"middle\",\n\t\t\t\t\"text-align\": \"left\",\n\t\t\t\t\"white-space\": \"normal\",\n\t\t\t\t\"background\": ic.get(\"background\")!.toCSS(),\n\t\t\t\t//\"border\": \"1px solid \" + ic.get(\"alternativeBackground\")!.toCSS(),\n\t\t\t\t\"border-radius\": \"4px\",\n\t\t\t\t\"-webkit-box-shadow\": \"0px 0px 36px 0px \" + shadow,\n\t\t\t\t\"box-shadow\": \"0px 0px 36px 0px \" + shadow,\n\t\t\t\t\"color\": text\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-content h1\", {\n\t\t\t\t\"font-size\": \"1em\",\n\t\t\t\t\"margin\": \"0 0 0.5em 0\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-table\", {\n\t\t\t\t\"display\": \"table\",\n\t\t\t\t\"margin\": \"1em 0\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-table-row\", {\n\t\t\t\t\"display\": \"table-row\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-table-heading\", {\n\t\t\t\t\"display\": \"table-heading\",\n\t\t\t\t\"padding\": \"3px 10px 3px 0\",\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-table-cell\", {\n\t\t\t\t\"display\": \"table-cell\",\n\t\t\t\t\"padding\": \"3px 0 3px 0\",\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-table-cell > *\", {\n\t\t\t\t\"vertical-align\": \"middle\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-content input[type=text], .am5-modal-content input[type=number], .am5-modal-content select\", {\n\t\t\t\t\"border\": \"1px solid \" + active,\n\t\t\t\t\"border-radius\": \"4px\",\n\t\t\t\t\"padding\": \"3px 5px\",\n\t\t\t\t\"margin\": \"2px\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-input-narrow\", {\n\t\t\t\t\"width\": \"50px\"\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-button\", {\n\t\t\t\t\"font-weight\": \"400\",\n\t\t\t\t\"color\": ic.get(\"secondaryButtonText\")!.toCSS(),\n\t\t\t\t\"line-height\": \"1.5\",\n\t\t\t\t\"text-align\": \"center\",\n\t\t\t\t\"text-decoration\": \"none\",\n\t\t\t\t\"vertical-align\": \"middle\",\n\t\t\t\t\"cursor\": \"pointer\",\n\t\t\t\t\"padding\": \"0.2em 0.8em\",\n\t\t\t\t\"font-size\": \"1em\",\n\t\t\t\t\"border-radius\": \"0.25em\",\n\t\t\t\t\"margin\": \"0 0.25em 0 0\",\n\t\t\t\t\"border\": \"1px solid \" + ic.get(\"secondaryButtonStroke\")!.toCSS(),\n\t\t\t\t\"background\": ic.get(\"secondaryButton\")!.toCSS()\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-button:hover\", {\n\t\t\t\t\"background\": ic.get(\"secondaryButtonHover\")!.toCSS()\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-button.am5-modal-primary\", {\n\t\t\t\t\"color\": ic.get(\"primaryButtonText\")!.toCSS(),\n\t\t\t\t\"border\": \"1px solid \" + ic.get(\"primaryButtonStroke\")!.toCSS(),\n\t\t\t\t\"background\": ic.get(\"primaryButton\")!.toCSS()\n\t\t\t}),\n\n\t\t\tnew StyleRule(element, \".am5-modal-button.am5-modal-primary:hover\", {\n\t\t\t\t\"background\": ic.get(\"primaryButtonHover\")!.toCSS()\n\t\t\t}),\n\n\t\t]);\n\n\t\trules = new CounterDisposer(() => {\n\t\t\trules = undefined;\n\t\t\tdisposer.dispose();\n\t\t});\n\t}\n\n\treturn rules.increment();\n}\n\n\nexport interface IModalSettings extends IEntitySettings {\n\n\t/**\n\t * HTML content of the modal.\n\t */\n\tcontent?: string;\n\n\t/**\n\t * When modal is open, all interactions for the underlying chart will be\n\t * disabled.\n\t *\n\t * @default true\n\t * @since 5.2.11\n\t */\n\tdeactivateRoot?: boolean;\n\n}\n\nexport interface IModalPrivate extends IEntityPrivate {\n\tcontainer: HTMLDivElement;\n\tcurtain: HTMLDivElement;\n\twrapper: HTMLDivElement;\n\tcontent: HTMLDivElement;\n}\n\nexport interface IModalEvents extends IEntityEvents {\n\t\"opened\": {}\n\t\"closed\": {}\n\t\"cancelled\": {}\n}\n\n/**\n * Used to display a modal dialog with HTML content.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/modal-popups/} for more info\n */\nexport class Modal extends Entity {\n\tpublic static className: string = \"Modal\";\n\tpublic static classNames: Array = Entity.classNames.concat([Modal.className]);\n\n\tdeclare public _settings: IModalSettings;\n\tdeclare public _privateSettings: IModalPrivate;\n\tdeclare public _events: IModalEvents;\n\n\t//protected _currentPass: number = 0;\n\n\tprotected _afterNew() {\n\t\t// Applying themes because this will not have parents\n\t\tsuper._afterNewApplyThemes();\n\n\t\t// Defaults\n\t\tthis._setRawDefault(\"deactivateRoot\", true);\n\n\t\t// Load CSS\n\t\tmodalCSS($utils.getShadowRoot(this._root.dom), this._root);\n\n\t\t// Create elements\n\t\tconst container = document.createElement(\"div\");\n\t\tcontainer.className = \"am5-modal\";\n\t\tcontainer.style.display = \"none\";\n\t\tthis.root._inner.appendChild(container);\n\t\tthis.setPrivate(\"container\", container);\n\n\t\tconst curtain = document.createElement(\"div\");\n\t\tcurtain.className = \"am5-modal-curtain\";\n\t\tcontainer.appendChild(curtain);\n\t\tthis.setPrivate(\"curtain\", curtain);\n\n\t\tthis._disposers.push($utils.addEventListener(curtain, \"click\", () => {\n\t\t\tthis.cancel();\n\t\t}));\n\n\t\tconst wrapper = document.createElement(\"div\");\n\t\twrapper.className = \"am5-modal-wrapper\";\n\t\tcontainer.appendChild(wrapper);\n\t\tthis.setPrivate(\"wrapper\", wrapper);\n\n\t\tconst content = document.createElement(\"div\");\n\t\tcontent.className = \"am5-modal-content\";\n\t\twrapper.appendChild(content);\n\t\tthis.setPrivate(\"content\", content);\n\n\t\tconst html = this.get(\"content\");\n\t\tif (html) {\n\t\t\tcontent.innerHTML = html;\n\t\t}\n\n\t\t// Close on ESC\n\t\tif ($utils.supports(\"keyboardevents\")) {\n\t\t\tthis._disposers.push($utils.addEventListener(document, \"keydown\", (ev: KeyboardEvent) => {\n\t\t\t\tif (this.isOpen() && ev.keyCode == 27) {\n\t\t\t\t\tthis.cancel();\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"content\")) {\n\t\t\tthis.getPrivate(\"content\").innerHTML = this.get(\"content\", \"\");\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if modal is currently open.\n\t * \n\t * @return Modal open?\n\t */\n\tpublic isOpen(): boolean {\n\t\treturn this.getPrivate(\"container\").style.display != \"none\";\n\t}\n\n\t/**\n\t * Opens modal.\n\t */\n\tpublic open(): void {\n\t\tthis.getPrivate(\"container\").style.display = \"block\";\n\t\tif (this.get(\"deactivateRoot\")) {\n\t\t\tthis.setTimeout(() => {\n\t\t\t\tthis._root._renderer.interactionsEnabled = false;\n\t\t\t}, 10);\n\t\t}\n\t\tthis.events.dispatch(\"opened\", {\n\t\t\ttype: \"opened\",\n\t\t\ttarget: this\n\t\t});\n\t}\n\n\t/**\n\t * Closes modal.\n\t */\n\tpublic close(): void {\n\t\tthis.getPrivate(\"container\").style.display = \"none\";\n\t\tif (this.get(\"deactivateRoot\")) {\n\t\t\tthis._root._renderer.interactionsEnabled = true;\n\t\t}\n\t\tthis.events.dispatch(\"closed\", {\n\t\t\ttype: \"closed\",\n\t\t\ttarget: this\n\t\t});\n\t}\n\n\t/**\n\t * Closes modal and invokes `cancelled` event.\n\t */\n\tpublic cancel(): void {\n\t\tthis.getPrivate(\"container\").style.display = \"none\";\n\t\tif (this.get(\"deactivateRoot\")) {\n\t\t\tthis._root._renderer.interactionsEnabled = true;\n\t\t}\n\t\tthis.events.dispatch(\"cancelled\", {\n\t\t\ttype: \"cancelled\",\n\t\t\ttarget: this\n\t\t});\n\t}\n\n\t/**\n\t * Disposes modal.\n\t */\n\tpublic dispose() {\n\t\tsuper.dispose();\n\t\tconst container = this.getPrivate(\"container\");\n\t\tif (container.parentElement) {\n\t\t\tcontainer.parentElement.removeChild(container);\n\t\t}\n\t}\n\n}","import type { Language } from \"./Language\";\n\nimport { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\nimport { TextFormatter } from \"./TextFormatter\";\n\nimport * as $object from \"./Object\";\nimport * as $utils from \"./Utils\";\nimport * as $type from \"./Type\";\n\n/**\n * @ignore\n */\nexport interface INumberSuffix {\n\tnumber: number;\n\tsuffix: string;\n}\n\nexport interface INumberFormatterSettings extends IEntitySettings {\n\n\t/**\n\t * Number format to be used when formatting numbers.\n\t *\n\t * @default \"#,###.#####\"\n\t */\n\tnumberFormat?: string | Intl.NumberFormatOptions;\n\n\t/**\n\t * A threshold value for negative numbers.\n\t *\n\t * @default 0\n\t */\n\tnegativeBase?: number;\n\n\t/**\n\t * Prefixes and thresholds to group big numbers into, e.g. 1M.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tbigNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * Prefixes and thresholds to group small numbers into, e.g. 1m.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tsmallNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * All numbers below this value are considered small.\n\t *\n\t * @default 1\n\t */\n\tsmallNumberThreshold?: number;\n\n\t/**\n\t * Prefixes to and thresholds to use when grouping data size numbers, e.g. 1MB.\n\t *\n\t * Used in conjunction with `b` modifier of the number format.\n\t */\n\tbytePrefixes?: INumberSuffix[];\n\n\t/**\n\t * Indicates which fields in data should be considered numeric.\n\t *\n\t * It is used when formatting data placeholder values.\n\t */\n\tnumericFields?: string[];\n\n\t/**\n\t * Locales if you are using date formats in `Intl.NumberFormatOptions` syntax.\n\t *\n\t * @see (@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) about using Intl for number formatting\n\t * @param value Locales\n\t */\n\tintlLocales?: string;\n\n\t/**\n\t * If set to `true` will force the number string to be LTR, even if RTL is\n\t * enabled.\n\t * \n\t * @default false\n\t * @since 5.3.13\n\t */\n\tforceLTR?: boolean;\n\n}\n\nexport interface INumberFormatterPrivate extends IEntityPrivate {\n}\n\n/**\n * Number formatter\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n * @important\n */\nexport class NumberFormatter extends Entity {\n\tdeclare public _settings: INumberFormatterSettings;\n\tdeclare public _privateSettings: INumberFormatterPrivate;\n\n\tprotected _setDefaults() {\n\t\t// Defaults\n\t\tthis._setDefault(\"negativeBase\", 0);\n\t\tthis._setDefault(\"numberFormat\", \"#,###.#####\");\n\t\tthis._setDefault(\"smallNumberThreshold\", 1.00);\n\n\t\tconst bns = \"_big_number_suffix_\";\n\t\tconst sns = \"_small_number_suffix_\";\n\t\tconst bs = \"_byte_suffix_\";\n\n\t\tthis._setDefault(\"bigNumberPrefixes\", [\n\t\t\t{ \"number\": 1e+3, \"suffix\": this._t(bns + \"3\") },\n\t\t\t{ \"number\": 1e+6, \"suffix\": this._t(bns + \"6\") },\n\t\t\t{ \"number\": 1e+9, \"suffix\": this._t(bns + \"9\") },\n\t\t\t{ \"number\": 1e+12, \"suffix\": this._t(bns + \"12\") },\n\t\t\t{ \"number\": 1e+15, \"suffix\": this._t(bns + \"15\") },\n\t\t\t{ \"number\": 1e+18, \"suffix\": this._t(bns + \"18\") },\n\t\t\t{ \"number\": 1e+21, \"suffix\": this._t(bns + \"21\") },\n\t\t\t{ \"number\": 1e+24, \"suffix\": this._t(bns + \"24\") }\n\t\t]);\n\n\t\tthis._setDefault(\"smallNumberPrefixes\", [\n\t\t\t{ \"number\": 1e-24, \"suffix\": this._t(sns + \"24\") },\n\t\t\t{ \"number\": 1e-21, \"suffix\": this._t(sns + \"21\") },\n\t\t\t{ \"number\": 1e-18, \"suffix\": this._t(sns + \"18\") },\n\t\t\t{ \"number\": 1e-15, \"suffix\": this._t(sns + \"15\") },\n\t\t\t{ \"number\": 1e-12, \"suffix\": this._t(sns + \"12\") },\n\t\t\t{ \"number\": 1e-9, \"suffix\": this._t(sns + \"9\") },\n\t\t\t{ \"number\": 1e-6, \"suffix\": this._t(sns + \"6\") },\n\t\t\t{ \"number\": 1e-3, \"suffix\": this._t(sns + \"3\") }\n\t\t]);\n\n\t\tthis._setDefault(\"bytePrefixes\", [\n\t\t\t{ \"number\": 1, suffix: this._t(bs + \"B\") },\n\t\t\t{ \"number\": 1024, suffix: this._t(bs + \"KB\") },\n\t\t\t{ \"number\": 1048576, suffix: this._t(bs + \"MB\") },\n\t\t\t{ \"number\": 1073741824, suffix: this._t(bs + \"GB\") },\n\t\t\t{ \"number\": 1099511627776, suffix: this._t(bs + \"TB\") },\n\t\t\t{ \"number\": 1125899906842624, suffix: this._t(bs + \"PB\") }\n\t\t]);\n\n\t\tsuper._setDefaults();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\t}\n\n\t/**\n\t * Formats the number according to specific format.\n\t *\n\t * @param value Value to format\n\t * @param format Format to apply\n\t * @return Formatted number\n\t */\n\tpublic format(value: number | string, format?: string | Intl.NumberFormatOptions, precision?: number): string {\n\n\t\t// no format passed in or \"Number\"\n\t\tif (format == null || ($type.isString(format) && format.toLowerCase() === \"number\")) {\n\t\t\tformat = this.get(\"numberFormat\", \"\");\n\t\t}\n\n\t\t// Init return value\n\t\tlet formatted;\n\n\t\t// Cast to number just in case\n\t\t// TODO: maybe use better casting\n\t\tlet source: number = Number(value);\n\n\t\t// Is it a built-in format or Intl.NumberFormatOptions\n\t\tif ($type.isObject(format)) {\n\t\t\ttry {\n\t\t\t\tif (this.get(\"intlLocales\")) {\n\t\t\t\t\treturn new Intl.NumberFormat(this.get(\"intlLocales\"), format).format(source);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn new Intl.NumberFormat(undefined, format).format(source);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\treturn \"Invalid\";\n\t\t\t}\n\n\t\t}\n\t\telse {\n\n\t\t\t// Clean format\n\t\t\tformat = $utils.cleanFormat(format!);\n\n\t\t\t// Get format info (it will also deal with parser caching)\n\t\t\tlet info = this.parseFormat(format, this._root.language);\n\n\n\t\t\t// format and replace the number\n\t\t\tlet details;\n\t\t\tif (source > this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.positive;\n\t\t\t}\n\t\t\telse if (source < this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.negative;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdetails = info.zero;\n\t\t\t}\n\n\t\t\t// Adjust precision\n\t\t\tif (precision != null && !details.mod) {\n\t\t\t\tdetails = $object.copy(details);\n\t\t\t\tdetails.decimals.active = source == 0 ? 0 : precision;\n\t\t\t}\n\n\t\t\t// Format\n\t\t\tformatted = details.template.split($type.PLACEHOLDER).join(this.applyFormat(source, details));\n\n\t\t}\n\n\t\tif (this.get(\"forceLTR\") === true) {\n\t\t\tformatted = \"‎\" + formatted;\n\t\t}\n\n\t\treturn formatted;\n\t}\n\n\t/**\n\t * Parses supplied format into structured object which can be used to format\n\t * the number.\n\t *\n\t * @param format Format string, i.e. \"#,###.00\"\n\t * @param language Language\n\t * @ignore\n\t */\n\tprotected parseFormat(format: string, language: Language): any {\n\n\t\t// Check cache\n\t\t// TODO\n\t\t// let cached = this.getCache(format);\n\t\t// if (cached != null) {\n\t\t// \treturn cached;\n\t\t// }\n\n\t\tconst thousandSeparator = language.translateEmpty(\"_thousandSeparator\");\n\t\tconst decimalSeparator = language.translateEmpty(\"_decimalSeparator\")\n\n\t\t// init format parse info holder\n\t\tlet info: any = {\n\t\t\t\"positive\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"negative\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"zero\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t}\n\t\t};\n\n\t\t// Escape double vertical bars (that mean display one vertical bar)\n\t\tformat = format.replace(\"||\", $type.PLACEHOLDER2);\n\n\t\t// Split it up and deal with different formats\n\t\tlet parts = format.split(\"|\");\n\t\tinfo.positive.source = parts[0];\n\n\t\tif (typeof parts[2] === \"undefined\") {\n\t\t\tinfo.zero = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.zero.source = parts[2];\n\t\t}\n\n\t\tif (typeof parts[1] === \"undefined\") {\n\t\t\tinfo.negative = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.negative.source = parts[1];\n\t\t}\n\n\t\t// Parse each\n\t\t$object.each(info, (_part, item) => {\n\t\t\t// Already parsed\n\t\t\tif (item.parsed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check cached\n\t\t\t// TODO\n\t\t\t// if (typeof this.getCache(item.source) !== \"undefined\") {\n\t\t\t// \tinfo[part] = this.getCache(item.source);\n\t\t\t// \treturn;\n\t\t\t// }\n\n\t\t\t// Begin parsing\n\t\t\tlet partFormat = item.source;\n\n\t\t\t// Just \"Number\"?\n\t\t\tif (partFormat.toLowerCase() === \"number\") {\n\t\t\t\tpartFormat = this.get(\"numberFormat\", \"#,###.#####\");\n\t\t\t}\n\n\t\t\t// Let TextFormatter split into chunks\n\t\t\tlet chunks = TextFormatter.chunk(partFormat, true);\n\t\t\tfor (let i: number = 0; i < chunks.length; i++) {\n\t\t\t\tlet chunk = chunks[i];\n\n\t\t\t\t// replace back double vertical bar\n\t\t\t\tchunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\n\n\t\t\t\tif (chunk.type === \"value\") {\n\t\t\t\t\t// Parse format\n\n\t\t\t\t\t// Look for codes\n\t\t\t\t\tlet matches: string[] | null = chunk.text.match(/[#0.,]+[ ]?[abespABESP%!]?[abespABESP‰!]?/);\n\n\t\t\t\t\tif (matches) {\n\t\t\t\t\t\tif (matches === null || matches[0] === \"\") {\n\t\t\t\t\t\t\t// no codes here - assume string\n\t\t\t\t\t\t\t// nothing to do here\n\t\t\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t// look for the format modifiers at the end\n\t\t\t\t\t\t\tlet mods: string[] | null = matches[0].match(/[abespABESP%‰!]{2}|[abespABESP%‰]{1}$/);\n\n\t\t\t\t\t\t\tif (mods) {\n\t\t\t\t\t\t\t\titem.mod = mods[0].toLowerCase();\n\t\t\t\t\t\t\t\titem.modSpacing = matches[0].match(/[ ]{1}[abespABESP%‰!]{1}$/) ? true : false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// break the format up\n\t\t\t\t\t\t\tlet a = matches[0].split(\".\");\n\n\t\t\t\t\t\t\t// Deal with thousands\n\t\t\t\t\t\t\tif (a[0] === \"\") {\n\t\t\t\t\t\t\t\t// No directives for thousands\n\t\t\t\t\t\t\t\t// Leave default settings (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.thousands.active = (a[0].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active;\n\n\t\t\t\t\t\t\t\t// Separator interval\n\t\t\t\t\t\t\t\tlet b = a[0].split(\",\");\n\t\t\t\t\t\t\t\tif (b.length === 1) {\n\t\t\t\t\t\t\t\t\t// No thousands separators\n\t\t\t\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// Use length fo the last chunk as thousands length\n\t\t\t\t\t\t\t\t\titem.thousands.interval = (b.pop() || \"\").length;\n\n\t\t\t\t\t\t\t\t\tif (item.thousands.interval === 0) {\n\t\t\t\t\t\t\t\t\t\titem.thousands.interval = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Deal with decimals\n\t\t\t\t\t\t\tif (typeof (a[1]) === \"undefined\") {\n\t\t\t\t\t\t\t\t// No directives for decimals\n\t\t\t\t\t\t\t\t// Leave at defaults (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.decimals.active = (a[1].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Add special code to template\n\t\t\t\t\t\t\titem.template += chunk.text.split(matches[0]).join($type.PLACEHOLDER);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Quoted string - take it as it is\n\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply style formatting\n\t\t\t//item.template = getTextFormatter().format(item.template, this.outputFormat);\n\n\t\t\t// Save cache\n\t\t\t// TODO\n\t\t\t//this.setCache(item.source, item);\n\n\t\t\t// Mark this as parsed\n\t\t\titem.parsed = true;\n\n\t\t});\n\n\t\t// Save cache (the whole thing)\n\t\t// TODO\n\t\t//this.setCache(format, info);\n\n\t\treturn info;\n\t}\n\n\t/**\n\t * Applies parsed format to a numeric value.\n\t *\n\t * @param value Value\n\t * @param details Parsed format as returned by parseFormat()\n\t * @return Formatted number\n\t * @ignore\n\t */\n\tprotected applyFormat(value: number, details: any): string {\n\n\t\t// Use absolute values\n\t\tlet negative: boolean = value < 0;\n\t\tvalue = Math.abs(value);\n\n\t\t// Recalculate according to modifier\n\t\tlet prefix: string = \"\", suffix: string = \"\";\n\t\tlet mods: string[] = details.mod ? details.mod.split(\"\") : [];\n\t\tif (mods.indexOf(\"b\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, this.get(\"bytePrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"a\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, value < this.get(\"smallNumberThreshold\")! ? this.get(\"smallNumberPrefixes\")! : this.get(\"bigNumberPrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"p\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\t//value *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tprefix = this._root.language.translate(\"_percentPrefix\");\n\t\t\tsuffix = this._root.language.translate(\"_percentSuffix\");\n\t\t\tif (prefix == \"\" && suffix == \"\") {\n\t\t\t\tsuffix = \"%\";\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"%\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\tvalue *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"%\";\n\t\t}\n\t\telse if (mods.indexOf(\"‰\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 3, 21);\n\t\t\tvalue *= 1000;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"‰\";\n\t\t}\n\n\t\t// Round to passive\n\t\tif (mods.indexOf(\"e\") !== -1) {\n\t\t\t// convert the value to exponential\n\t\t\tlet exp: string[];\n\t\t\tif (details.decimals.passive >= 0) {\n\t\t\t\texp = value.toExponential(details.decimals.passive).split(\"e\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\texp = value.toExponential().split(\"e\");\n\t\t\t}\n\t\t\tvalue = Number(exp[0]);\n\t\t\tsuffix = \"e\" + exp[1];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (details.decimals.passive === 0) {\n\t\t\tvalue = Math.round(value);\n\t\t}\n\t\telse if (details.decimals.passive > 0) {\n\t\t\tlet d: number = Math.pow(10, details.decimals.passive);\n\t\t\tvalue = Math.round(value * d) / d;\n\t\t}\n\n\t\t// Init return value\n\t\tlet res: string = \"\";\n\n\t\t// Calc integer and decimal parts\n\t\tlet a = $type.numberToString(value).split(\".\");\n\n\t\t// Format integers\n\t\tlet ints = a[0];\n\n\t\t// Pad integers to active length\n\t\tif (ints.length < details.thousands.active) {\n\t\t\tints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\n\t\t}\n\n\t\t// Insert thousands separators\n\t\tif (details.thousands.interval > 0) {\n\t\t\tlet ip: string[] = [];\n\t\t\tlet intsr: string = ints.split(\"\").reverse().join(\"\");\n\t\t\tfor (let i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\n\t\t\t\tlet c: string = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\n\t\t\t\tif (c !== \"\") {\n\t\t\t\t\tip.unshift(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tints = ip.join(details.thousands.separator);\n\t\t}\n\n\t\t// Add integers\n\t\tres += ints;\n\n\t\t// Add decimals\n\t\tif (a.length === 1) {\n\t\t\ta.push(\"\");\n\t\t}\n\t\tlet decs: string = a[1];\n\n\t\t// Fill zeros?\n\t\tif (decs.length < details.decimals.active) {\n\t\t\tdecs += Array(details.decimals.active - decs.length + 1).join(\"0\");\n\t\t}\n\n\t\tif (decs !== \"\") {\n\t\t\tres += details.decimals.separator + decs;\n\t\t}\n\n\t\t// Can't have empty return value\n\t\tif (res === \"\") {\n\t\t\tres = \"0\";\n\t\t}\n\n\t\t// Add minus sign back\n\t\tif (value !== 0 && negative && (mods.indexOf(\"s\") === -1)) {\n\t\t\tres = \"-\" + res;\n\t\t}\n\n\t\t// Add suffixes/prefixes\n\t\tif (prefix) {\n\t\t\tres = prefix + res;\n\t\t}\n\t\tif (suffix) {\n\t\t\tres += suffix;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\n\tprotected applyPrefix(value: number, prefixes: any[], force: boolean = false): any[] {\n\t\tlet newvalue = value;\n\t\tlet prefix = \"\";\n\t\tlet suffix = \"\";\n\t\tlet applied = false;\n\t\tlet k = 1;\n\n\t\tfor (let i = 0, len = prefixes.length; i < len; i++) {\n\t\t\tif (prefixes[i].number <= value) {\n\t\t\t\tif (prefixes[i].number === 0) {\n\t\t\t\t\tnewvalue = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewvalue = value / prefixes[i].number;\n\t\t\t\t\tk = prefixes[i].number;\n\t\t\t\t}\n\t\t\t\tprefix = prefixes[i].prefix;\n\t\t\t\tsuffix = prefixes[i].suffix;\n\t\t\t\tapplied = true;\n\t\t\t}\n\t\t}\n\n\n\t\tif (!applied && force && prefixes.length && value != 0) {\n\t\t\t// Prefix was not applied. Use the first prefix.\n\t\t\tnewvalue = value / prefixes[0].number;\n\t\t\tprefix = prefixes[0].prefix;\n\t\t\tsuffix = prefixes[0].suffix;\n\t\t\tapplied = true;\n\t\t}\n\n\t\tif (applied) {\n\t\t\tnewvalue = parseFloat(\n\t\t\t\tnewvalue.toPrecision(\n\t\t\t\t\tMath.min(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length, 21)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn [newvalue, prefix, suffix];\n\t}\n\n\t/**\n\t * Replaces brackets with temporary placeholders.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Input text\n\t * @return Escaped text\n\t */\n\tpublic escape(text: string): string {\n\t\treturn text.replace(\"||\", $type.PLACEHOLDER2);\n\t}\n\n\t/**\n\t * Replaces placeholders back to brackets.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Escaped text\n\t * @return Unescaped text\n\t */\n\tpublic unescape(text: string): string {\n\t\treturn text.replace($type.PLACEHOLDER2, \"|\");\n\t}\n\n}\n","import * as $array from \"./Array\";\nimport type { Keyof } from \"./Type\";\n\nexport function keys(object: O): Array> {\n\treturn Object.keys(object) as Array>;\n}\n\n/**\n * Returns an array of object's property names ordered using specific ordering\n * function.\n *\n * @param object Source object\n * @param order Ordering function\n * @returns Object property names\n */\nexport function keysOrdered(object: Object, order: (a: Keyof, b: Keyof) => number): Array> {\n\treturn keys(object).sort(order);\n}\n\nexport function copy(object: O): O {\n\treturn Object.assign({}, object);\n}\n\nexport function each(object: O, f: (key: K, value: Exclude) => void): void {\n\tkeys(object).forEach((key) => {\n\t\tf(key, object[key] as any);\n\t});\n}\n\n/**\n * Iterates through all properties of the object calling `fn` for each of them.\n *\n * If return value of the function evaluates to `false` further iteration is\n * cancelled.\n *\n * @param object Source object\n * @param fn Callback function\n */\nexport function eachContinue(object: Object, fn: >(key: Key, value: Object[Key]) => boolean): void {\n\tfor (let key in object) {\n\t\tif (hasKey(object, key)) {\n\t\t\tif (!fn(key as Keyof, object[key] as Object[Keyof])) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Orders object properties using custom `ord` function and iterates through\n * them calling `fn` for each of them.\n *\n * @param object Source object\n * @param fn Callback function\n * @param order Ordering function\n */\nexport function eachOrdered(object: Object, fn: >(key: Key, value: Object[Key]) => void, ord: (a: Keyof, b: Keyof) => number): void {\n\t$array.each(keysOrdered(object, ord), (key) => {\n\t\tfn(key, object[key]);\n\t});\n}\n\n/**\n * Checks if `object` has a specific `key`.\n *\n * @param object Source object\n * @param key Property name\n * @returns Has key?\n */\nexport function hasKey(object: Object, key: Key): boolean {\n\treturn {}.hasOwnProperty.call(object, key);\n}\n\n/**\n * Copies all properties of one object to the other, omitting undefined, but only if property in target object doesn't have a value set.\n *\n * @param fromObject Source object\n * @param toObject Target object\n * @return Updated target object\n * @todo Maybe consolidate with utils.copy?\n */\nexport function softCopyProperties(source: Object, target: Object): Object {\n\teach(source, (key, value) => {\n\t\t// only if value is set\n\t\t//if ($type.hasValue(value) && !($type.hasValue((target)[key]))) {\n\t\tif (value != null && (target)[key] == null) {\n\t\t\t(target)[key] = value;\n\t\t}\n\t});\n\treturn target;\n}\n","export type Order = -1 | 0 | 1;\n\n/**\n * @ignore\n */\nexport function compare(left: A, right: A): Order {\n\tif (left === right) {\n\t\treturn 0;\n\n\t} else if (left < right) {\n\t\treturn -1;\n\n\t} else {\n\t\treturn 1;\n\t}\n}\n\n/**\n * @ignore\n */\nexport function compareArray(left: ArrayLike, right: ArrayLike, f: (x: A, y: A) => Order): Order {\n\tconst leftLength = left.length;\n\tconst rightLength = right.length;\n\n\tconst length = Math.min(leftLength, rightLength);\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tconst order = f(left[i], right[i]);\n\n\t\tif (order !== 0) {\n\t\t\treturn order;\n\t\t}\n\t}\n\n\treturn compare(leftLength, rightLength);\n}\n\n/**\n * @ignore\n */\nexport function reverse(order: Order): Order {\n\tif (order < 0) {\n\t\treturn 1;\n\n\t} else if (order > 0) {\n\t\treturn -1;\n\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n/**\n * @ignore\n */\nexport function compareNumber(a: number, b: number): Order {\n\tif (a === b) {\n\t\treturn 0;\n\n\t} else if (a < b) {\n\t\treturn -1;\n\n\t} else {\n\t\treturn 1;\n\t}\n}\n","/**\n * ============================================================================\n * MAIN CLASS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Represents a relative value (percent).\n *\n * The Percent object, can be instantiated using two ways:\n *\n * * Via `new Percent(X)`.\n * * Via `am5.percent(X)`.\n *\n * You can also use shortcut functions for `0%`, `50%`, and `100%`:\n * * `am5.p0`\n * * `am5.p50`\n * * `am5.p100`\n */\nexport class Percent {\n\n\t/**\n\t * Value in percent.\n\t */\n\tprotected _value: number;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param percent Percent value\n\t */\n\tconstructor(percent: number) {\n\t\tthis._value = percent;\n\t}\n\n\t/**\n\t * Relative value.\n\t *\n\t * E.g. 100% is 1, 50% is 0.5, etc.\n\t *\n\t * This is useful to apply transformations to other values. E.g.:\n\t *\n\t * ```TypeScript\n\t * let value = 256;\n\t * let percent = new am5.p50;\n\t * console.log(value * percent.value); // outputs 128\n\t * ```\n\t * ```JavaScript\n\t * var value = 256;\n\t * var percent = new am5.p50;\n\t * console.log(value * percent.value); // outputs 128\n\t * ```\n\t *\n\t * Alternatively, you can use `am5.percent()` helper function:\n\t *\n\t * ```TypeScript\n\t * let value = 256;\n\t * let percent = am5.p50;\n\t * console.log(value * percent.value); // outputs 128\n\t * ```\n\t * ```JavaScript\n\t * var value = 256;\n\t * var percent = am5.p50;\n\t * console.log(value * percent.value); // outputs 128\n\t * ```\n\t *\n\t * @readonly\n\t * @return Relative value\n\t */\n\tpublic get value(): number {\n\t\treturn this._value / 100;\n\t}\n\n\t/**\n\t * Value in percent.\n\t *\n\t * @readonly\n\t * @return Percent\n\t */\n\tpublic get percent(): number {\n\t\treturn this._value;\n\t}\n\n\tpublic toString(): string {\n\t\treturn \"\" + this._value + \"%\";\n\t}\n\n\tpublic interpolate(min: number, max: number): number {\n\t\treturn min + (this.value * (max - min));\n\t}\n\n\tstatic normalize(percent: Percent | number, min: number, max: number): Percent {\n\t\tif (percent instanceof Percent) {\n\t\t\treturn percent;\n\n\t\t} else {\n\t\t\tif (min === max) {\n\t\t\t\treturn new Percent(0);\n\n\t\t\t} else {\n\t\t\t\treturn new Percent(Math.min(Math.max((percent - min) * (1 / (max - min)), 0), 1) * 100);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*public toNumber(): number {\n\t\treturn this.percent;\n\t}*/\n\n}\n\n\n/**\n * Converts numeric percent value to a proper [[Percent]] object.\n *\n * ```TypeScript\n * pieSeries.set(\"radius\", am5.percent(80));\n * ```\n * ```JavaScript\n * pieSeries.set(\"radius\", am5.percent(80));\n * ```\n *\n * @param value Percent\n * @return Percent object\n */\nexport function percent(value: number): Percent {\n\treturn new Percent(value);\n}\n\n/**\n * A shortcut function to `am5.percent(0)`.\n */\nexport const p0 = percent(0);\n\n/**\n * A shortcut function to `am5.percent(100)`.\n */\nexport const p100 = percent(100);\n\n/**\n * A shortcut function to `am5.percent(50)`.\n */\nexport const p50 = percent(50);\n\n\n/**\n * Checks if value is a [[Percent]] object.\n *\n * @ignore Exclude from docs\n * @param value Input value\n * @return Is percent?\n */\nexport function isPercent(value: any): boolean {\n\treturn value instanceof Percent;\n}\n","/** @ignore *//** */\n\nimport * as $type from \"./Type\";\nimport * as $utils from \"./Utils\";\nimport { Sprite } from \"../render/Sprite\";\nimport { TextFormatter } from \"./TextFormatter\";\n\n/**\n * @ignore\n */\nexport function populateString(target: Sprite, string: string): string {\n\tif (string != null) {\n\t\tstring = \"\" + string;\n\t\tstring = TextFormatter.escape(string);\n\t\tlet tags = string.match(/\\{([^}]+)\\}/g);\n\t\tlet i;\n\t\tif (tags) {\n\t\t\tfor (i = 0; i < tags.length; i++) {\n\t\t\t\tlet tag = tags[i].replace(/\\{([^}]+)\\}/, \"$1\");\n\t\t\t\tlet value = getTagValue(target, tag, \"\");\n\n\t\t\t\tif (value == null) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t}\n\n\t\t\t\tstring = string.split(tags[i]).join(value);\n\t\t\t}\n\t\t}\n\t\tstring = TextFormatter.unescape(string);\n\t}\n\telse {\n\t\tstring = \"\";\n\t}\n\n\t// TODO: apply adapter?\n\treturn string;\n}\n\n/**\n * @ignore\n */\nfunction getTagValue(target: Sprite, tagName: string, format?: string): string {\n\tlet value: any;\n\tconst dataItem = target.dataItem;\n\n\t// Parse parts\n\tlet parts: any[] = [];\n\tlet reg = /(format[a-zA-Z]*)\\((.*)\\)|([^.]+)/g;\n\tlet matches;\n\n\twhile (true) {\n\t\tmatches = reg.exec(tagName);\n\n\t\tif (matches === null) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (matches[3]) {\n\t\t\t// Simple property\n\t\t\tparts.push({\n\t\t\t\tprop: matches[3]\n\t\t\t});\n\n\t\t\t// Check if maybe we should force a formatter on this value\n\t\t\tconst dateFields = target.getDateFormatter().get(\"dateFields\", []);\n\t\t\tconst numericFields = target.getNumberFormatter().get(\"numericFields\", []);\n\t\t\tconst durationFields = target.getDurationFormatter().get(\"durationFields\", []);\n\t\t\tif ((dateFields).indexOf(matches[3]) !== -1) {\n\t\t\t\tparts.push({\n\t\t\t\t\tmethod: \"formatDate\",\n\t\t\t\t\tparams: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if ((numericFields).indexOf(matches[3]) !== -1) {\n\t\t\t\tparts.push({\n\t\t\t\t\tmethod: \"formatNumber\",\n\t\t\t\t\tparams: []\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if ((durationFields).indexOf(matches[3]) !== -1) {\n\t\t\t\tparts.push({\n\t\t\t\t\tmethod: \"formatDuration\",\n\t\t\t\t\tparams: []\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Method\n\t\t\t// Parse parameters\n\t\t\tlet params: any[] = [];\n\t\t\tif ($utils.trim(matches[2]) != \"\") {\n\t\t\t\tlet reg2 = /'([^']*)'|\"([^\"]*)\"|([0-9\\-]+)/g;\n\t\t\t\tlet matches2;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tmatches2 = reg2.exec(matches[2]);\n\n\t\t\t\t\tif (matches2 === null) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tparams.push(matches2[1] || matches2[2] || matches2[3])\n\t\t\t\t}\n\t\t\t}\n\t\t\tparts.push({\n\t\t\t\tmethod: matches[1],\n\t\t\t\tparams: params\n\t\t\t})\n\t\t}\n\t}\n\n\t// Check if we can retrieve the value from data item\n\tif (dataItem) {\n\n\n\t\t// Check values\n\t\tvalue = getTagValueFromObject(target, parts, dataItem._settings);\n\n\t\t// Check properties\n\t\tif (value == null || $type.isObject(value)) { // isObject helps to solve problem with date axis, as for example dateX will get dateX from values object and won't get to the dateX date.\n\t\t\tvalue = getTagValueFromObject(target, parts, dataItem);\n\t\t}\n\n\t\t// Check data context\n\t\tlet dataContext: any = dataItem.dataContext;\n\n\t\tif (value == null && dataContext) {\n\t\t\tvalue = getTagValueFromObject(target, parts, dataContext);\n\n\t\t\t// Maybe it's a literal dot-separated name of the key in dataContext?\n\t\t\tif (value == null) {\n\t\t\t\tvalue = getTagValueFromObject(target, [{\n\t\t\t\t\tprop: tagName\n\t\t\t\t}], dataContext);\n\t\t\t}\n\n\t\t\t// scond data context level sometimes exist (tree map)\n\t\t\tif (value == null && dataContext.dataContext) {\n\t\t\t\tvalue = getTagValueFromObject(target, parts, dataContext.dataContext);\n\t\t\t}\n\t\t}\n\n\t\t// Check component's data item\n\t\tif (value == null && dataItem.component && dataItem.component.dataItem !== dataItem) {\n\t\t\tvalue = getTagValue(dataItem.component, tagName, format);\n\t\t}\n\t}\n\n\t// Check sprite's properties\n\tif (value == null) {\n\t\tvalue = getTagValueFromObject(target, parts, target);\n\t}\n\n\t// Finally, check the parent\n\tif (value == null && target.parent) {\n\t\tvalue = getTagValue(target.parent, tagName, format);\n\t}\n\n\treturn value;\n}\n\n/**\n * @ignore\n */\nfunction getCustomDataValue(target: Sprite, prop: string): any {\n\tconst customData = target.getPrivate(\"customData\");\n\tif ($type.isObject(customData)) {\n\t\treturn (customData)[prop];\n\t}\n}\n\n/**\n * @ignore\n */\nexport function getTagValueFromObject(target: Sprite, parts: any[], object: any, format?: string): any {\n\tlet current: any = object;\n\tlet formatApplied = false;\n\tfor (let i = 0, len = parts.length; i < len; i++) {\n\t\tlet part = parts[i];\n\t\tif (part.prop) {\n\t\t\t// Regular property\n\t\t\tif (current instanceof Sprite) {\n\t\t\t\tlet tmp = current.get(part.prop);\n\t\t\t\tif (tmp == null) tmp = current.getPrivate(part.prop);\n\t\t\t\tif (tmp == null) tmp = getCustomDataValue(current, part.prop);\n\t\t\t\tif (tmp == null) tmp = (current)[part.prop];\n\t\t\t\tcurrent = tmp;\n\t\t\t}\n\t\t\telse if (current.get) {\n\t\t\t\tlet tmp = current.get(part.prop);\n\t\t\t\tif (tmp == null) tmp = (current)[part.prop];\n\t\t\t\tcurrent = tmp;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcurrent = current[part.prop];\n\t\t\t}\n\n\t\t\tif (current == null) {\n\t\t\t\t// Not set, return undefined\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Method\n\n\t\t\tswitch (part.method) {\n\t\t\t\tcase \"formatNumber\":\n\t\t\t\t\tlet numberValue = $type.toNumber(current);\n\t\t\t\t\tif (numberValue != null) {\n\t\t\t\t\t\tcurrent = target.getNumberFormatter().format(\n\t\t\t\t\t\t\tnumberValue,\n\t\t\t\t\t\t\tformat || part.params[0] || undefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\tformatApplied = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"formatDate\":\n\t\t\t\t\tlet dateValue = $type.toDate(current);\n\t\t\t\t\tif (!$type.isDate(dateValue) || $type.isNaN(dateValue.getTime())) {\n\t\t\t\t\t\t// Was not able to get date out of value, quitting and letting\n\t\t\t\t\t\t// calling method try another value\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (dateValue != null) {\n\t\t\t\t\t\tcurrent = target.getDateFormatter().format(\n\t\t\t\t\t\t\tdateValue,\n\t\t\t\t\t\t\tformat || part.params[0] || undefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\tformatApplied = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"formatDuration\":\n\t\t\t\t\tlet durationValue = $type.toNumber(current);\n\t\t\t\t\tif (durationValue != null) {\n\t\t\t\t\t\tcurrent = target.getDurationFormatter().format(\n\t\t\t\t\t\t\tdurationValue,\n\t\t\t\t\t\t\tformat || part.params[0] || undefined,\n\t\t\t\t\t\t\tpart.params[1] || undefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\tformatApplied = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"urlEncode\":\n\t\t\t\tcase \"encodeURIComponent\":\n\t\t\t\t\tcurrent = encodeURIComponent(current);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (current[part.method]) {\n\t\t\t\t\t\tcurrent[part.method].apply(object, part.params);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Apply default format if it wasn't applied explicitly\n\tif (!formatApplied) {\n\n\t\tlet formatParts = [{\n\t\t\tmethod: \"\",\n\t\t\tparams: format\n\t\t}];\n\n\t\tif (format == null) {\n\n\t\t\t// Format is not set\n\t\t\t// Determine from the type of the value\n\t\t\tif ($type.isNumber(current)) {\n\t\t\t\tformatParts[0].method = \"formatNumber\";\n\t\t\t\tformatParts[0].params = \"\";\n\t\t\t}\n\t\t\telse if ($type.isDate(current)) {\n\t\t\t\tformatParts[0].method = \"formatDate\";\n\t\t\t\tformatParts[0].params = \"\";\n\t\t\t}\n\n\t\t}\n\t\telse {\n\n\t\t\t// Format set\n\t\t\t// Try to determine formatter based on the format\n\t\t\tlet formatterType: string = $utils.getFormat(format);\n\n\t\t\t// format\n\t\t\tif (formatterType === \"number\") {\n\t\t\t\tformatParts[0].method = \"formatNumber\";\n\t\t\t}\n\t\t\telse if (formatterType === \"date\") {\n\t\t\t\tformatParts[0].method = \"formatDate\";\n\t\t\t}\n\t\t\telse if (formatterType === \"duration\") {\n\t\t\t\tformatParts[0].method = \"formatDuration\";\n\t\t\t}\n\n\t\t}\n\n\t\t// Apply format\n\t\tif (formatParts[0].method) {\n\t\t\tcurrent = getTagValueFromObject(target, formatParts, current);\n\t\t}\n\n\t}\n\n\treturn current;\n}","import type { Entity, Dirty } from \"./Entity\";\nimport type { State } from \"./States\";\nimport { EventDispatcher, Events } from \"./EventDispatcher\";\nimport { IDisposer, Disposer, MultiDisposer } from \"./Disposer\";\nimport * as $array from \"./Array\";\nimport * as $object from \"./Object\";\n\nexport class TemplateState {\n\tpublic _settings: Partial;\n\n\tprivate _name: string;\n\tprivate _template: Template;\n\n\tconstructor(name: string, template: Template, settings: Partial) {\n\t\tthis._name = name;\n\t\tthis._template = template;\n\t\tthis._settings = settings;\n\t}\n\n\tpublic get(key: Key): this[\"_settings\"][Key];\n\tpublic get(key: Key, fallback: F): NonNullable | F;\n\tpublic get(key: Key, fallback?: any): any {\n\t\tconst value = this._settings[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\tpublic set(key: Key, value: E[\"_settings\"][Key]) {\n\t\tthis._settings[key] = value;\n\t\t// TODO maybe only do this if the value changed ?\n\t\tthis._template._stateChanged(this._name);\n\t}\n\n\tpublic remove(key: Key) {\n\t\tdelete this._settings[key];\n\t\t// TODO maybe only do this if the value changed ?\n\t\tthis._template._stateChanged(this._name);\n\t}\n\n\tpublic setAll(settings: this[\"_settings\"]) {\n\t\t$object.keys(settings).forEach((key) => {\n\t\t\tthis._settings[key] = settings[key];\n\t\t});\n\n\t\tthis._template._stateChanged(this._name);\n\t}\n\n\tpublic _apply(other: State, seen: Dirty): void {\n\t\t$object.each(this._settings, (key, value) => {\n\t\t\tif (!seen[key] && !other._userSettings[key]) {\n\t\t\t\tseen[key] = true;\n\t\t\t\tother.setRaw(key, value);\n\t\t\t}\n\t\t});\n\t}\n}\n\n\nexport class TemplateStates {\n\tprivate _template: Template;\n\tprivate _states: { [key: string]: TemplateState } = {};\n\n\tconstructor(template: Template) {\n\t\tthis._template = template;\n\t}\n\n\tpublic lookup(name: string): TemplateState | undefined {\n\t\treturn this._states[name];\n\t}\n\n\tpublic create(name: string, settings: Partial): TemplateState {\n\t\tconst state = this._states[name];\n\n\t\tif (state) {\n\t\t\tstate.setAll(settings);\n\t\t\treturn state;\n\n\t\t} else {\n\t\t\tconst state = new TemplateState(name, this._template, settings);\n\t\t\tthis._states[name] = state;\n\t\t\tthis._template._stateChanged(name);\n\t\t\treturn state;\n\t\t}\n\t}\n\n\tpublic remove(name: string) {\n\t\tdelete this._states[name];\n\t\tthis._template._stateChanged(name);\n\t}\n\n\tpublic _apply(entity: E, state: ApplyState): void {\n\t\t$object.each(this._states, (key, value) => {\n\t\t\tlet seen = state.states[key];\n\n\t\t\tif (seen == null) {\n\t\t\t\tseen = state.states[key] = {};\n\t\t\t}\n\n\t\t\tconst other = entity.states.create(key as string, {});\n\t\t\tvalue._apply(other, seen);\n\t\t});\n\t}\n}\n\n\nexport class TemplateAdapters {\n\tprivate _callbacks: { [K in keyof E[\"_settings\"]]?: Array<(value: O[\"_settings\"][K], target: O, key: K) => O[\"_settings\"][K]> } = {};\n\n\tpublic add(key: Key, callback: (value: E[\"_settings\"][Key], target: E, key: Key) => E[\"_settings\"][Key]): IDisposer {\n\t\tlet callbacks = this._callbacks[key];\n\n\t\tif (callbacks === undefined) {\n\t\t\tcallbacks = this._callbacks[key] = [];\n\t\t}\n\n\t\tcallbacks.push(callback);\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(callbacks!, callback);\n\n\t\t\tif (callbacks!.length === 0) {\n\t\t\t\tdelete this._callbacks[key];\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic remove(key: Key) {\n\t\tconst callbacks = this._callbacks[key];\n\n\t\tif (callbacks !== undefined) {\n\t\t\tdelete this._callbacks[key];\n\t\t}\n\t}\n\n\tpublic _apply(entity: E): IDisposer {\n\t\tconst disposers: Array = [];\n\n\t\t$object.each(this._callbacks, (key, callbacks) => {\n\t\t\t$array.each(callbacks, (callback) => {\n\t\t\t\tdisposers.push(entity.adapters.add(key, callback));\n\t\t\t});\n\t\t});\n\n\t\treturn new MultiDisposer(disposers);\n\t}\n}\n\n\nexport interface ApplyState {\n\tsettings: Dirty;\n\tprivateSettings: Dirty;\n\tstates: { [name: string]: Dirty };\n}\n\n\n// TODO maybe extend from Properties ?\nexport class Template {\n\tpublic _settings: Partial;\n\tpublic _privateSettings: E[\"_privateSettings\"] = {};\n\n\t// TODO code duplication with Properties\n\tpublic _settingEvents: { [K in keyof this[\"_settings\"]]?: Array<(value: V) => void> } = {};\n\tpublic _privateSettingEvents: { [K in keyof this[\"_settings\"]]?: Array<(value: V) => void> } = {};\n\n\tpublic _entities: Array = [];\n\n\tpublic readonly states: TemplateStates = new TemplateStates(this);\n\n\tpublic readonly adapters: TemplateAdapters = new TemplateAdapters();\n\tpublic readonly events: EventDispatcher> = new EventDispatcher();\n\n\tpublic setup: ((entity: O) => void) | undefined;\n\n\t/**\n\t * Use this method to create an instance of this class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @param root Root element\n\t * @param settings Settings\n\t * @param template Template\n\t * @return Instantiated object\n\t */\n\tpublic static new(settings: E[\"_settings\"]): Template {\n\t\treturn new Template(settings, true);\n\t}\n\n\t/**\n\t * Array of all entities using this template.\n\t */\n\tpublic get entities():Array{\n\t\treturn this._entities;\n\t}\n\n\tconstructor(settings: E[\"_settings\"], isReal: boolean) {\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis._settings = settings;\n\t}\n\n\tpublic get(key: Key): this[\"_settings\"][Key];\n\tpublic get(key: Key, fallback: F): NonNullable | F;\n\tpublic get(key: Key, fallback?: any): any {\n\t\tconst value = this._settings[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\tpublic setRaw(key: Key, value: this[\"_settings\"][Key]) {\n\t\tthis._settings[key] = value;\n\t}\n\n\tpublic set(key: Key, value: this[\"_settings\"][Key]) {\n\t\tif (this._settings[key] !== value) {\n\t\t\tthis.setRaw(key, value);\n\n\t\t\tthis._entities.forEach((entity) => {\n\t\t\t\tentity._setTemplateProperty(this, key, value);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic remove(key: Key): void {\n\t\tif (key in this._settings) {\n\t\t\tdelete this._settings[key];\n\n\t\t\tthis._entities.forEach((entity) => {\n\t\t\t\tentity._removeTemplateProperty(key);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic removeAll(): void {\n\t\t$object.each(this._settings, (key, _value) => {\n\t\t\tthis.remove(key);\n\t\t});\n\t}\n\n\tpublic getPrivate(key: Key, fallback: F): NonNullable | F;\n\tpublic getPrivate(key: Key): this[\"_privateSettings\"][Key];\n\tpublic getPrivate(key: Key, fallback?: any): any {\n\t\tconst value = this._privateSettings[key];\n\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\n\t\t} else {\n\t\t\treturn fallback;\n\t\t}\n\t}\n\n\tpublic setPrivateRaw(key: Key, value: Value): Value {\n\t\tthis._privateSettings[key] = value;\n\t\treturn value;\n\t}\n\n\tpublic setPrivate(key: Key, value: Value): Value {\n\t\tif (this._privateSettings[key] !== value) {\n\t\t\tthis.setPrivateRaw(key, value);\n\n\t\t\tthis._entities.forEach((entity) => {\n\t\t\t\tentity._setTemplatePrivateProperty(this, key, value);\n\t\t\t});\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tpublic removePrivate(key: Key): void {\n\t\tif (key in this._privateSettings) {\n\t\t\tdelete this._privateSettings[key];\n\n\t\t\tthis._entities.forEach((entity) => {\n\t\t\t\tentity._removeTemplatePrivateProperty(key);\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic setAll(value: this[\"_settings\"]) {\n\t\t$object.each(value, (key, value) => {\n\t\t\tthis.set(key, value);\n\t\t});\n\t}\n\n\t// TODO code duplication with Properties\n\tpublic on(key: Key, callback: (value: this[\"_settings\"][Key], target?: E, key?: Key) => void): IDisposer {\n\t\tlet events = this._settingEvents[key];\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._settingEvents[key] = [];\n\t\t}\n\n\t\tevents.push(callback);\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(events!, callback);\n\n\t\t\tif (events!.length === 0) {\n\t\t\t\tdelete this._settingEvents[key];\n\t\t\t}\n\t\t});\n\t}\n\n\t// TODO code duplication with Properties\n\tpublic onPrivate(key: Key, callback: (value: this[\"_privateSettings\"][Key], target?: E, key?: Key) => void): IDisposer {\n\t\tlet events = this._privateSettingEvents[key];\n\n\t\tif (events === undefined) {\n\t\t\tevents = this._privateSettingEvents[key] = [];\n\t\t}\n\n\t\tevents.push(callback);\n\n\t\treturn new Disposer(() => {\n\t\t\t$array.removeFirst(events!, callback);\n\n\t\t\tif (events!.length === 0) {\n\t\t\t\tdelete this._privateSettingEvents[key];\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic _apply(entity: E, state: ApplyState): IDisposer {\n\t\tconst disposers: Array = [];\n\n\t\t$object.each(this._settingEvents, (key, events) => {\n\t\t\t$array.each(events, (event) => {\n\t\t\t\tdisposers.push(entity.on(key, event));\n\t\t\t});\n\t\t});\n\n\t\t$object.each(this._privateSettingEvents, (key, events) => {\n\t\t\t$array.each(events, (event) => {\n\t\t\t\tdisposers.push(entity.onPrivate(key, event));\n\t\t\t});\n\t\t});\n\n\t\tthis.states._apply(entity, state);\n\n\t\tdisposers.push(this.adapters._apply(entity));\n\t\tdisposers.push(entity.events.copyFrom(this.events));\n\n\t\treturn new MultiDisposer(disposers);\n\t}\n\n\tpublic _setObjectTemplate(entity: E) {\n\t\tthis._entities.push(entity);\n\t}\n\n\tpublic _removeObjectTemplate(entity: E) {\n\t\t$array.remove(this._entities, entity);\n\t}\n\n\tpublic _stateChanged(name: string): void {\n\t\tthis._entities.forEach((entity) => {\n\t\t\tentity._applyStateByKey(name);\n\t\t});\n\t}\n}\n","import { Color } from \"./Color\"\nimport type { ITextStyle } from \"../render/backend/Renderer\"\nimport * as $type from \"./Type\";\n\n/**\n * Defines an interface for an object that holds a chunk of text.\n */\nexport interface ITextChunk {\n\n\t/**\n\t * Type of the chunk.\n\t */\n\t\"type\": \"value\" | \"text\" | \"format\" | \"image\",\n\n\t/**\n\t * Text.\n\t */\n\t\"text\": string\n\n}\n\nexport class TextFormatter {\n\n\tpublic static prefix = \"__amcharts__\";\n\n\t/**\n\t * Replaces brackets with temporary placeholders.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Input text\n\t * @return Escaped text\n\t */\n\tpublic static escape(text: string): string {\n\t\treturn text.\n\t\t\treplace(/\\[\\[/g, this.prefix + \"1\").\n\t\t\treplace(/([^\\/\\]]{1})\\]\\]/g, \"$1\" + this.prefix + \"2\").\n\t\t\treplace(/\\]\\]/g, this.prefix + \"2\").\n\t\t\treplace(/\\{\\{/g, this.prefix + \"3\").\n\t\t\treplace(/\\}\\}/g, this.prefix + \"4\").\n\t\t\treplace(/\\'\\'/g, this.prefix + \"5\");\n\t}\n\n\t/**\n\t * Replaces placeholders back to brackets.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Escaped text\n\t * @return Unescaped text\n\t */\n\tpublic static unescape(text: string): string {\n\t\treturn text.\n\t\t\treplace(new RegExp(this.prefix + \"1\", \"g\"), \"[[\").\n\t\t\treplace(new RegExp(this.prefix + \"2\", \"g\"), \"]]\").\n\t\t\treplace(new RegExp(this.prefix + \"3\", \"g\"), \"{{\").\n\t\t\treplace(new RegExp(this.prefix + \"4\", \"g\"), \"}}\").\n\t\t\treplace(new RegExp(this.prefix + \"5\", \"g\"), \"''\");\n\t}\n\n\t/**\n\t * Cleans up the text text for leftover double square brackets.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Input text\n\t * @return Cleaned up text\n\t */\n\tpublic static cleanUp(text: string): string {\n\t\treturn text.\n\t\t\treplace(/\\[\\[/g, \"[\").\n\t\t\treplace(/\\]\\]/g, \"]\").\n\t\t\treplace(/\\{\\{/g, \"{\").\n\t\t\treplace(/\\}\\}/g, \"}\").\n\t\t\treplace(/\\'\\'/g, \"'\");\n\t}\n\n\t/**\n\t * Splits string into chunks. (style blocks, quoted blocks, regular blocks)\n\t *\n\t * If the second parameter `quotedBlocks` is set to `true` this method will\n\t * also single out text blocks enclosed within single quotes that no\n\t * formatting should be applied to, and they should be displayed as is.\n\t *\n\t * Default for the above is `false`, so that you can use single quote in text\n\t * without escaping it.\n\t *\n\t * If enabled, single quotes can be escaped by doubling it - adding two\n\t * single quotes, which will be replaced by a one single quote in the final\n\t * output.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Text to chunk\n\t * @param quotedBlocks Use quoted blocks\n\t * @param noFormatting Formatting blocks will be treated as regular text\n\t * @return Array of string chunks\n\t */\n\tpublic static chunk(text: string, quotedBlocks: boolean = false, noFormatting: boolean = false): ITextChunk[] {\n\n\t\t// Init result\n\t\tlet res: ITextChunk[] = [];\n\n\t\t// Replace double (escaped) square spaces and quotes with temporary codes\n\t\ttext = this.escape(text);\n\n\t\t// Deal with style blocks\n\t\tlet chunks = quotedBlocks ? text.split(\"'\") : [text];\n\t\tfor (let i: number = 0; i < chunks.length; i++) {\n\t\t\tlet chunk = chunks[i];\n\n\t\t\t// Empty?\n\t\t\tif (chunk === \"\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ((i % 2) === 0) {\n\n\t\t\t\t// Text outside quotes\n\t\t\t\t// Parse for style blocks which are \"text\" chunks, the rest chunks are\n\t\t\t\t// \"value\"\n\n\t\t\t\tchunk = chunk.replace(/\\]\\[/g, \"]\" + $type.PLACEHOLDER + \"[\");\n\t\t\t\tchunk = chunk.replace(/\\[\\]/g, \"[ ]\");\n\t\t\t\tlet chunks2 = chunk.split(/[\\[\\]]+/);\n\t\t\t\tfor (let i2: number = 0; i2 < chunks2.length; i2++) {\n\t\t\t\t\tlet chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\n\n\t\t\t\t\t// Placeholder?\n\t\t\t\t\tif (chunk2 === $type.PLACEHOLDER) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Empty?\n\t\t\t\t\tif (chunk2 === \"\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Block or value\n\t\t\t\t\tif ((i2 % 2) === 0) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\t\"type\": \"value\",\n\t\t\t\t\t\t\t\"text\": chunk2\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\t\"type\": noFormatting ? \"value\" : \"format\",\n\t\t\t\t\t\t\t\"text\": \"[\" + chunk2 + \"]\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\telse {\n\n\t\t\t\t// A text within doublequotes\n\t\t\t\t// All chunks are \"text\"\n\n\t\t\t\tlet chunks2 = chunk.split(/[\\[\\]]+/);\n\t\t\t\tfor (let i2: number = 0; i2 < chunks2.length; i2++) {\n\t\t\t\t\tlet chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\n\n\t\t\t\t\t// Empty?\n\t\t\t\t\tif (chunk2 === \"\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Block or text\n\t\t\t\t\tif ((i2 % 2) === 0) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": chunk2\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.isImage(chunk2)) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\t\"type\": \"image\",\n\t\t\t\t\t\t\t\"text\": \"[\" + chunk2 + \"]\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\t\"type\": \"format\",\n\t\t\t\t\t\t\t\"text\": \"[\" + chunk2 + \"]\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/**\n\t * Checks if supplied format contains image information and should be\n\t * formatted as such.\n\t * I.e.: `[img: myImage.png]`\n\t *\n\t * @ignore\n\t * @param text Format\n\t * @return true if it is an image\n\t */\n\tpublic static isImage(text: string): boolean {\n\t\treturn text.match(/img[ ]?:/) ? true : false;\n\t}\n\n\tpublic static getTextStyle(style: string): ITextStyle {\n\n\t\t// let textStyle: string[] = [];\n\t\t// let textFill: string | undefined;\n\t\tlet format: ITextStyle = {};\n\n\t\tif (style == \"\" || style == \"[ ]\") {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Pre-process quoted text\n\t\tconst q = style.match(/('[^']*')|(\"[^\"]*\")/gi);\n\t\tif (q) {\n\t\t\tfor (let i: number = 0; i < q.length; i++) {\n\t\t\t\tstyle = style.replace(q[i], q[i].replace(/['\"]*/g, \"\").replace(/[ ]+/g, \"+\"));\n\t\t\t}\n\t\t}\n\n\t\t// Get style parts\n\t\tlet b: string[] | null = style.match(/([\\w\\-]*:[\\s]?[^;\\s\\]]*)|(\\#[\\w]{1,6})|([\\w\\-]+)|(\\/)/gi);\n\n\t\t// Empty?\n\t\tif (!b) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check each part\n\t\tfor (let i: number = 0; i < b.length; i++) {\n\n\t\t\tif (b[i].match(/^(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)$/i)) {\n\t\t\t\t(format).fontWeight = b[i];\n\t\t\t}\n\t\t\telse if (b[i].match(/^(underline|line-through)$/i)) {\n\t\t\t\t(format).textDecoration = b[i];\n\t\t\t}\n\t\t\telse if (b[i] == \"/\") {\n\t\t\t\t// Just closing tag\n\t\t\t\t// Do nothing\n\t\t\t}\n\t\t\telse if (!b[i].match(/:/)) {\n\t\t\t\t// Color\n\t\t\t\tformat.fill = Color.fromString(b[i]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst p = b[i].replace(\"+\", \" \").split(/:[ ]*/);\n\t\t\t\t(format)[p[0]] = p[1];\n\t\t\t\t//textStyle.push(b[i].replace(/^[a-zA-Z]:[ ]*/, \"\"));\n\t\t\t\t//b[i] = b[i].replace(/\\+/g, \" \");\n\t\t\t}\n\n\t\t}\n\n\t\treturn format;\n\t}\n\n}\n","/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport * as $type from \"./Type\";\nimport * as $utils from \"./Utils\";\nimport type { Timezone } from \"./Timezone\";\nimport type { Root } from \"../Root\";\n\nexport type TimeUnit = \"millisecond\" | \"second\" | \"minute\" | \"hour\" | \"day\" | \"week\" | \"month\" | \"year\";\n\nexport interface ITimeInterval {\n\ttimeUnit: TimeUnit;\n\tcount: number;\n}\n\n\n/**\n * Returns a `Promise` which can be used to execute code after number of\n * milliseconds.\n *\n * @param ms Sleep duration in ms\n * @return Promise\n */\nexport function sleep(ms: number): Promise {\n\treturn new Promise((resolve, _reject) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\n\n/**\n * Maps time period names to their numeric representations in milliseconds.\n *\n * @ignore Exclude from docs\n */\nexport let timeUnitDurations: { [Key in TimeUnit]: number } = {\n\tmillisecond: 1,\n\tsecond: 1000,\n\tminute: 60000,\n\thour: 3600000,\n\tday: 86400000,\n\tweek: 604800000,\n\tmonth: 365.242 / 12 * 86400000,\n\tyear: 31536000000\n};\n\n/**\n * Returns the next time unit that goes after source `unit`.\n *\n * E.g. \"hour\" is the next unit after \"minute\", etc.\n *\n * @ignore Exclude from docs\n * @param unit Source time unit\n * @return Next time unit\n */\nexport function getNextUnit(unit: TimeUnit): TimeUnit | undefined {\n\tswitch (unit) {\n\t\tcase \"year\":\n\t\t\treturn;\n\t\tcase \"month\":\n\t\t\treturn \"year\";\n\n\t\tcase \"week\":\n\t\t\treturn \"month\";\n\n\t\tcase \"day\":\n\t\t\treturn \"month\"; // not a mistake\n\n\t\tcase \"hour\":\n\t\t\treturn \"day\";\n\n\t\tcase \"minute\":\n\t\t\treturn \"hour\";\n\n\t\tcase \"second\":\n\t\t\treturn \"minute\"\n\n\t\tcase \"millisecond\":\n\t\t\treturn \"second\";\n\t}\n}\n\n/**\n * Returns number of milliseconds in the `count` of time `unit`.\n *\n * Available units: \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\",\n * \"month\", and \"year\".\n *\n * @param unit Time unit\n * @param count Number of units\n * @return Milliseconds\n */\nexport function getDuration(unit: TimeUnit, count?: number): number {\n\tif (count == null) {\n\t\tcount = 1;\n\t}\n\treturn timeUnitDurations[unit] * count;\n}\n\n/**\n * @ignore\n */\nexport function getIntervalDuration(interval: ITimeInterval | undefined) {\n\tif (interval) {\n\t\treturn timeUnitDurations[interval.timeUnit] * interval.count;\n\t}\n\treturn 0;\n}\n\n\nexport function getDateIntervalDuration(interval: ITimeInterval, date: Date, firstDateOfWeek?: number, utc?: boolean, timezone?: Timezone) {\n\tconst unit = interval.timeUnit;\n\tconst count = interval.count;\n\tif (unit == \"hour\" || unit == \"minute\" || unit == \"second\" || unit == \"millisecond\") {\n\t\treturn timeUnitDurations[interval.timeUnit] * interval.count;\n\t}\n\telse {\n\t\tconst firstTime = round(new Date(date.getTime()), unit, count, firstDateOfWeek, utc, undefined, timezone).getTime();\n\t\tlet lastTime = firstTime + count * getDuration(unit) * 1.05;\n\t\tlastTime = round(new Date(lastTime), unit, 1, firstDateOfWeek, utc, undefined, timezone).getTime();\n\t\treturn lastTime - firstTime;\n\t}\n}\n\n/**\n * Returns current `Date` object.\n *\n * @return Current date\n */\nexport function now(): Date {\n\treturn new Date();\n}\n\n/**\n * Returns current timestamp.\n *\n * @return Current timestamp\n */\nexport function getTime(): number {\n\treturn now().getTime();\n}\n\n/**\n * Returns a copy of the `Date` object.\n *\n * @param date Source date\n * @return Copy\n */\nexport function copy(date: Date): Date {\n\treturn new Date(date.getTime()); // todo: check if this is ok. new Date(date) used to strip milliseconds on FF in v3\n}\n\n/**\n * Checks if the `unit` part of two `Date` objects do not match. Two dates\n * represent a \"range\" of time, rather the same time date.\n *\n * @param timeOne timestamp\n * @param timeTwo timestamp\n * @param unit Time unit to check\n * @return Range?\n */\nexport function checkChange(timeOne: number, timeTwo: number, unit: TimeUnit, utc?: boolean, timezone?: Timezone): boolean {\n\t// quick\n\tif ((timeTwo - timeOne) > getDuration(unit, 1.2)) {\n\t\treturn true;\n\t}\n\n\tlet dateOne = new Date(timeOne);\n\tlet dateTwo = new Date(timeTwo);\n\n\tif (timezone) {\n\t\tdateOne = timezone.convertLocal(dateOne);\n\t\tdateTwo = timezone.convertLocal(dateTwo);\n\t}\n\n\tlet timeZoneOffset1 = 0;\n\tlet timeZoneOffset2 = 0;\n\n\tif (!utc && unit != \"millisecond\") {\n\t\ttimeZoneOffset1 = dateOne.getTimezoneOffset();\n\t\tdateOne.setUTCMinutes(dateOne.getUTCMinutes() - timeZoneOffset1);\n\n\t\ttimeZoneOffset2 = dateTwo.getTimezoneOffset();\n\t\tdateTwo.setUTCMinutes(dateTwo.getUTCMinutes() - timeZoneOffset2);\n\t}\n\n\tlet changed = false;\n\tswitch (unit) {\n\t\tcase \"year\":\n\t\t\tif (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"month\":\n\t\t\tif (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\telse if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"day\":\n\t\t\tif (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\telse if (dateOne.getUTCDate() != dateTwo.getUTCDate()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase \"hour\":\n\t\t\tif (dateOne.getUTCHours() != dateTwo.getUTCHours()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"minute\":\n\t\t\tif (dateOne.getUTCMinutes() != dateTwo.getUTCMinutes()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase \"second\":\n\t\t\tif (dateOne.getUTCSeconds() != dateTwo.getUTCSeconds()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"millisecond\":\n\t\t\tif (dateOne.getTime() != dateTwo.getTime()) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif (changed) {\n\t\treturn changed;\n\t}\n\n\tlet nextUnit = getNextUnit(unit);\n\tif (nextUnit) {\n\t\treturn checkChange(timeOne, timeTwo, nextUnit, utc, timezone);\n\t}\n\telse {\n\t\treturn false;\n\t}\n}\n\n/**\n * Adds `count` of time `unit` to the source date. Returns a modified `Date` object.\n *\n * @param date Source date\n * @param unit Time unit\n * @param count Number of units to add\n * @return Modified date\n */\nexport function add(date: Date, unit: TimeUnit, count: number, utc?: boolean, timezone?: Timezone): Date {\n\tlet timeZoneOffset = 0;\n\n\tif (!utc && unit != \"millisecond\") {\n\t\ttimeZoneOffset = date.getTimezoneOffset();\n\n\t\tif (timezone) {\n\t\t\ttimeZoneOffset -= timezone.offsetUTC(date);\n\t\t}\n\n\t\tdate.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\n\t}\n\n\n\tswitch (unit) {\n\t\tcase \"day\":\n\t\t\tlet day: number = date.getUTCDate();\n\t\t\tdate.setUTCDate(day + count);\n\t\t\tbreak;\n\n\t\tcase \"second\":\n\t\t\tlet seconds: number = date.getUTCSeconds();\n\t\t\tdate.setUTCSeconds(seconds + count);\n\t\t\tbreak;\n\n\t\tcase \"millisecond\":\n\t\t\tlet milliseconds: number = date.getUTCMilliseconds();\n\t\t\tdate.setUTCMilliseconds(milliseconds + count);\n\t\t\tbreak;\n\n\t\tcase \"hour\":\n\t\t\tlet hours: number = date.getUTCHours();\n\t\t\tdate.setUTCHours(hours + count);\n\t\t\tbreak;\n\n\t\tcase \"minute\":\n\t\t\tlet minutes: number = date.getUTCMinutes();\n\t\t\tdate.setUTCMinutes(minutes + count);\n\t\t\tbreak;\n\n\t\tcase \"year\":\n\t\t\tlet year: number = date.getUTCFullYear();\n\t\t\tdate.setUTCFullYear(year + count);\n\t\t\tbreak;\n\n\t\tcase \"month\":\n\t\t\tlet month: number = date.getUTCMonth();\n\t\t\tdate.setUTCMonth(month + count);\n\t\t\tbreak;\n\n\t\tcase \"week\":\n\t\t\tlet wday: number = date.getUTCDate();\n\t\t\tdate.setUTCDate(wday + count * 7);\n\t\t\tbreak;\n\t}\n\n\n\tif (!utc && unit != \"millisecond\") {\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\n\t\tif (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\n\n\t\t\tlet newTimeZoneOffset = date.getTimezoneOffset();\n\n\t\t\tif (timezone) {\n\t\t\t\tnewTimeZoneOffset += timezone.offsetUTC(date);\n\t\t\t}\n\n\t\t\tif (newTimeZoneOffset != timeZoneOffset) {\n\t\t\t\tlet diff = newTimeZoneOffset - timeZoneOffset;\n\t\t\t\tdate.setUTCMinutes(date.getUTCMinutes() + diff);\n\n\t\t\t\t// solves issues if new time falls back to old time zone\n\t\t\t\tif (date.getTimezoneOffset() != newTimeZoneOffset) {\n\t\t\t\t\tdate.setUTCMinutes(date.getUTCMinutes() - diff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn date;\n}\n\n/**\n * @ignore\n */\nexport function roun(time: number, unit: TimeUnit, count: number, root: Root, firstTime?: number): number {\n\tlet firstDate;\n\tif (firstTime != null) {\n\t\tfirstDate = new Date(firstTime);\n\t}\n\treturn round(new Date(time), unit, count, root.locale.firstDayOfWeek, root.utc, firstDate, root.timezone).getTime();\n}\n\n\n/**\n * \"Rounds\" the date to specific time unit.\n *\n * @param date Source date\n * @param unit Time unit\n * @param count Number of units to round to\n * @param firstDateOfWeek First day of week\n * @param utc Use UTC timezone\n * @param firstDate First date to round to\n * @param roundMinutes Minutes to round to (some timezones use non-whole hour)\n * @param timezone Use specific named timezone when rounding\n * @return New date\n */\nexport function round(date: Date, unit: TimeUnit, count: number, firstDateOfWeek?: number, utc?: boolean, firstDate?: Date, timezone?: Timezone): Date {\n\tif (!timezone || utc) {\n\n\t\tlet timeZoneOffset = 0;\n\n\t\tif (!utc && unit != \"millisecond\") {\n\t\t\ttimeZoneOffset = date.getTimezoneOffset();\n\t\t\tdate.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\n\t\t}\n\n\t\tswitch (unit) {\n\n\t\t\tcase \"day\":\n\t\t\t\tlet day = date.getUTCDate();\n\n\t\t\t\tif (count > 1) {\n\t\t\t\t\t//\tday = Math.floor(day / count) * count;\n\t\t\t\t\tif (firstDate) {\n\t\t\t\t\t\tfirstDate = round(firstDate, \"day\", 1);\n\n\t\t\t\t\t\tlet difference = date.getTime() - firstDate.getTime();\n\t\t\t\t\t\tlet unitCount = Math.floor(difference / getDuration(\"day\") / count);\n\t\t\t\t\t\tlet duration = getDuration(\"day\", unitCount * count);\n\t\t\t\t\t\tdate.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdate.setUTCDate(day);\n\t\t\t\t}\n\t\t\t\tdate.setUTCHours(0, 0, 0, 0);\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"second\":\n\t\t\t\tlet seconds = date.getUTCSeconds();\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tseconds = Math.floor(seconds / count) * count;\n\t\t\t\t}\n\t\t\t\tdate.setUTCSeconds(seconds, 0);\n\t\t\t\tbreak;\n\n\t\t\tcase \"millisecond\":\n\t\t\t\tif (count == 1) {\n\t\t\t\t\treturn date; // much better for perf!\n\t\t\t\t}\n\n\t\t\t\tlet milliseconds = date.getUTCMilliseconds();\n\t\t\t\tmilliseconds = Math.floor(milliseconds / count) * count;\n\t\t\t\tdate.setUTCMilliseconds(milliseconds);\n\t\t\t\tbreak;\n\n\t\t\tcase \"hour\":\n\n\t\t\t\tlet hours = date.getUTCHours();\n\t\t\t\tif (count > 1) {\n\t\t\t\t\thours = Math.floor(hours / count) * count;\n\t\t\t\t}\n\t\t\t\tdate.setUTCHours(hours, 0, 0, 0);\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"minute\":\n\n\t\t\t\tlet minutes = date.getUTCMinutes();\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tminutes = Math.floor(minutes / count) * count;\n\t\t\t\t}\n\n\t\t\t\tdate.setUTCMinutes(minutes, 0, 0);\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"month\":\n\n\t\t\t\tlet month = date.getUTCMonth();\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tmonth = Math.floor(month / count) * count;\n\t\t\t\t}\n\n\t\t\t\tdate.setUTCMonth(month, 1);\n\t\t\t\tdate.setUTCHours(0, 0, 0, 0);\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"year\":\n\n\t\t\t\tlet year = date.getUTCFullYear();\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tyear = Math.floor(year / count) * count;\n\t\t\t\t}\n\t\t\t\tdate.setUTCFullYear(year, 0, 1);\n\t\t\t\tdate.setUTCHours(0, 0, 0, 0);\n\t\t\t\tbreak;\n\n\t\t\tcase \"week\":\n\n\t\t\t\tlet wday = date.getUTCDate();\n\t\t\t\tlet weekDay = date.getUTCDay();\n\n\t\t\t\tif (!$type.isNumber(firstDateOfWeek)) {\n\t\t\t\t\tfirstDateOfWeek = 1;\n\t\t\t\t}\n\n\t\t\t\tif (weekDay >= firstDateOfWeek) {\n\t\t\t\t\twday = wday - weekDay + firstDateOfWeek;\n\t\t\t\t} else {\n\t\t\t\t\twday = wday - (7 + weekDay) + firstDateOfWeek;\n\t\t\t\t}\n\n\t\t\t\tdate.setUTCDate(wday);\n\t\t\t\tdate.setUTCHours(0, 0, 0, 0);\n\n\t\t\t\tbreak;\n\t\t}\n\t\tif (!utc && unit != \"millisecond\") {\n\t\t\tdate.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\n\n\t\t\tif (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\n\t\t\t\tlet newTimeZoneOffset = date.getTimezoneOffset();\n\t\t\t\tif (newTimeZoneOffset != timeZoneOffset) {\n\t\t\t\t\tlet diff = newTimeZoneOffset - timeZoneOffset;\n\n\t\t\t\t\tdate.setUTCMinutes(date.getUTCMinutes() + diff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn date;\n\t}\n\telse {\n\t\tif (isNaN(date.getTime())) {\n\t\t\treturn date;\n\t\t}\n\t\tlet tzoffset = timezone.offsetUTC(date);\n\t\tlet timeZoneOffset = date.getTimezoneOffset();\n\t\tlet parsedDate = timezone.parseDate(date);\n\t\tlet year = parsedDate.year;\n\t\tlet month = parsedDate.month;\n\t\tlet day = parsedDate.day;\n\t\tlet hour = parsedDate.hour;\n\t\tlet minute = parsedDate.minute;\n\t\tlet second = parsedDate.second;\n\t\tlet millisecond = parsedDate.millisecond;\n\t\tlet weekday = parsedDate.weekday;\n\n\t\tlet offsetDif = tzoffset - timeZoneOffset;\n\n\t\tswitch (unit) {\n\n\t\t\tcase \"day\":\n\t\t\t\tif (count > 1 && firstDate) {\n\t\t\t\t\tfirstDate = round(firstDate, \"day\", 1, firstDateOfWeek, utc, undefined, timezone);\n\t\t\t\t\tlet difference = date.getTime() - firstDate.getTime();\n\t\t\t\t\tlet unitCount = Math.floor(difference / getDuration(\"day\") / count);\n\t\t\t\t\tlet duration = getDuration(\"day\", unitCount * count);\n\t\t\t\t\tdate.setTime(firstDate.getTime() + duration);\n\n\t\t\t\t\tparsedDate = timezone.parseDate(date);\n\n\t\t\t\t\tyear = parsedDate.year;\n\t\t\t\t\tmonth = parsedDate.month;\n\t\t\t\t\tday = parsedDate.day;\n\t\t\t\t}\n\n\t\t\t\thour = 0;\n\t\t\t\tminute = offsetDif;\n\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"second\":\n\t\t\t\tminute += offsetDif;\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tsecond = Math.floor(second / count) * count;\n\t\t\t\t}\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"millisecond\":\n\t\t\t\tminute += offsetDif;\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tmillisecond = Math.floor(millisecond / count) * count;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"hour\":\n\t\t\t\tif (count > 1) {\n\t\t\t\t\thour = Math.floor(hour / count) * count;\n\t\t\t\t}\n\t\t\t\tminute = offsetDif;\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"minute\":\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tminute = Math.floor(minute / count) * count;\n\t\t\t\t}\n\t\t\t\tminute += offsetDif;\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"month\":\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tmonth = Math.floor(month / count) * count;\n\t\t\t\t}\n\t\t\t\tday = 1;\n\t\t\t\thour = 0;\n\t\t\t\tminute = offsetDif;\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"year\":\n\t\t\t\tif (count > 1) {\n\t\t\t\t\tyear = Math.floor(year / count) * count;\n\t\t\t\t}\n\t\t\t\tmonth = 0;\n\t\t\t\tday = 1;\n\t\t\t\thour = 0;\n\t\t\t\tminute = offsetDif;\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase \"week\":\n\t\t\t\tif (!$type.isNumber(firstDateOfWeek)) {\n\t\t\t\t\tfirstDateOfWeek = 1;\n\t\t\t\t}\n\n\t\t\t\tif (weekday >= firstDateOfWeek) {\n\t\t\t\t\tday = day - weekday + firstDateOfWeek;\n\t\t\t\t} else {\n\t\t\t\t\tday = day - (7 + weekday) + firstDateOfWeek;\n\t\t\t\t}\n\n\t\t\t\thour = 0;\n\t\t\t\tminute = offsetDif;\n\t\t\t\tsecond = 0;\n\t\t\t\tmillisecond = 0;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tdate = new Date(year, month, day, hour, minute, second, millisecond);\n\n\t\tlet newTimeZoneOffset = date.getTimezoneOffset();\n\t\tlet newTzoffset = timezone.offsetUTC(date);\n\t\tlet newDiff = newTzoffset - newTimeZoneOffset;\n\n\t\tif (newDiff != offsetDif) {\n\t\t\tdate.setTime(date.getTime() + (newDiff - offsetDif) * 60000);\n\t\t}\n\n\t\treturn date;\n\t}\n}\n\n/**\n * @ignore\n */\nexport function chooseInterval(index: number, duration: number, gridCount: number, intervals: Array): ITimeInterval {\n\tlet gridInterval: ITimeInterval = intervals[index];\n\tlet intervalDuration = getIntervalDuration(gridInterval);\n\n\tlet lastIndex = intervals.length - 1;\n\tif (index >= lastIndex) {\n\t\treturn { ...intervals[lastIndex] };\n\t}\n\n\tlet count = Math.ceil(duration / intervalDuration);\n\n\tif (duration < intervalDuration && index > 0) {\n\t\treturn { ...intervals[index - 1] };\n\t}\n\tif (count <= gridCount) {\n\t\treturn { ...intervals[index] };\n\t} else {\n\t\tif (index + 1 < intervals.length) {\n\t\t\treturn chooseInterval(index + 1, duration, gridCount, intervals);\n\t\t} else {\n\t\t\treturn { ...intervals[index] };\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nexport function getUnitValue(date: Date, unit: TimeUnit) {\n\tswitch (unit) {\n\t\tcase \"day\":\n\t\t\treturn date.getDate();\n\t\tcase \"second\":\n\t\t\treturn date.getSeconds();\n\t\tcase \"millisecond\":\n\t\t\treturn date.getMilliseconds();\n\t\tcase \"hour\":\n\t\t\treturn date.getHours();\n\t\tcase \"minute\":\n\t\t\treturn date.getMinutes();\n\t\tcase \"month\":\n\t\t\treturn date.getMonth();\n\t\tcase \"year\":\n\t\t\treturn date.getFullYear();\n\t\tcase \"week\":\n\t\t\treturn $utils.getWeek(date);\n\t}\n}\n","interface ParsedDate {\n\tyear: number,\n\tmonth: number,\n\tday: number,\n\thour: number,\n\tminute: number,\n\tsecond: number,\n\tmillisecond: number,\n\tweekday: number\n}\n\nfunction parseDate(timezone: Intl.DateTimeFormat, date: Date): ParsedDate {\n\tlet year = 0;\n\tlet month = 0;\n\tlet day = 1;\n\tlet hour = 0;\n\tlet minute = 0;\n\tlet second = 0;\n\tlet millisecond = 0;\n\tlet weekday = 0;\n\n\ttimezone.formatToParts(date).forEach((x) => {\n\t\tswitch (x.type) {\n\t\t\tcase \"year\":\n\t\t\t\tyear = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"month\":\n\t\t\t\tmonth = (+x.value) - 1;\n\t\t\t\tbreak;\n\t\t\tcase \"day\":\n\t\t\t\tday = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"hour\":\n\t\t\t\thour = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"minute\":\n\t\t\t\tminute = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"second\":\n\t\t\t\tsecond = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"fractionalSecond\" as any:\n\t\t\t\tmillisecond = +x.value;\n\t\t\t\tbreak;\n\t\t\tcase \"weekday\":\n\t\t\t\tswitch (x.value) {\n\t\t\t\t\tcase \"Sun\":\n\t\t\t\t\t\tweekday = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Mon\":\n\t\t\t\t\t\tweekday = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Tue\":\n\t\t\t\t\t\tweekday = 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Wed\":\n\t\t\t\t\t\tweekday = 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Thu\":\n\t\t\t\t\t\tweekday = 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Fri\":\n\t\t\t\t\t\tweekday = 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"Sat\":\n\t\t\t\t\t\tweekday = 6;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t});\n\n\tif (hour === 24) {\n\t\thour = 0;\n\t}\n\n\treturn { year, month, day, hour, minute, second, millisecond, weekday };\n}\n\n\nfunction toUTCDate(timezone: Intl.DateTimeFormat, date: Date): number {\n\tconst { year, month, day, hour, minute, second, millisecond } = parseDate(timezone, date);\n\treturn Date.UTC(year, month, day, hour, minute, second, millisecond);\n}\n\n\nexport class Timezone {\n\tprivate _utc: Intl.DateTimeFormat;\n\tprivate _dtf: Intl.DateTimeFormat;\n\n\tpublic readonly name: string | undefined;\n\n\t/**\n\t * Use this method to create an instance of this class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @param timezone IANA timezone\n\t * @return Instantiated object\n\t */\n\tstatic new>(this: C, timezone: string | undefined): T {\n\t\treturn (new this(timezone, true)) as T;\n\t}\n\n\tconstructor(timezone: string | undefined, isReal: boolean) {\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis.name = timezone;\n\n\t\tthis._utc = new Intl.DateTimeFormat(\"UTC\", {\n\t\t\thour12: false,\n\t\t\ttimeZone: \"UTC\",\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"2-digit\",\n\t\t\tday: \"2-digit\",\n\t\t\thour: \"2-digit\",\n\t\t\tminute: \"2-digit\",\n\t\t\tsecond: \"2-digit\",\n\t\t\tweekday: \"short\",\n\t\t\tfractionalSecondDigits: 3,\n\t\t} as any);\n\n\t\tthis._dtf = new Intl.DateTimeFormat(\"UTC\", {\n\t\t\thour12: false,\n\t\t\ttimeZone: timezone,\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"2-digit\",\n\t\t\tday: \"2-digit\",\n\t\t\thour: \"2-digit\",\n\t\t\tminute: \"2-digit\",\n\t\t\tsecond: \"2-digit\",\n\t\t\tweekday: \"short\",\n\t\t\tfractionalSecondDigits: 3,\n\t\t} as any);\n\t}\n\n\tconvertLocal(date: Date): Date {\n\t\tconst offset = this.offsetUTC(date);\n\t\tconst userOffset = date.getTimezoneOffset();\n\t\tconst output = new Date(date);\n\t\toutput.setUTCMinutes(output.getUTCMinutes() - (offset - userOffset));\n\n\t\tconst newUserOffset = output.getTimezoneOffset();\n\n\t\tif (userOffset != newUserOffset) {\n\t\t\toutput.setUTCMinutes(output.getUTCMinutes() + newUserOffset - userOffset)\n\t\t}\n\n\t\treturn output;\n\t}\n\n\toffsetUTC(date: Date): number {\n\t\tconst utc = toUTCDate(this._utc, date);\n\t\tconst dtf = toUTCDate(this._dtf, date);\n\t\treturn (utc - dtf) / 60000;\n\t}\n\n\tparseDate(date: Date): ParsedDate {\n\t\treturn parseDate(this._dtf, date)\n\t}\n}\n","/**\n * A collection of utility functions for various type checks and conversion\n * @hidden\n */\n\n/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\n\n/**\n * ============================================================================\n * MISC\n * ============================================================================\n * @hidden\n */\n\ntype Cond = Keys extends never\n\t? never\n\t: { [K in Keys]: T[K] };\n\ntype Never = T extends undefined ? never : T;\n\n/**\n * Selects all the keys of T which have a value of U.\n */\nexport type SelectKeys = Never<{ [K in keyof T]: T[K] extends U ? K : never }[keyof T]>;\n\n/**\n * Creates a new type which is the same as T except it only has the properties of type U.\n */\nexport type Select = Cond>;\n\n\n/**\n * @todo Description\n * @ignore Exclude from docs\n */\nexport type Public = { [P in keyof T]: T[P] };\n\n\n/**\n * `Keyof` is the same as `keyof T` except it only accepts string keys, not numbers or symbols.\n */\nexport type Keyof = Extract;\n\n\n\n/**\n * ============================================================================\n * TYPE CHECK\n * ============================================================================\n * @hidden\n */\n\n/**\n * Returns `true` if value is not a number (NaN).\n *\n * @param value Input value\n * @return Is NaN?\n */\nexport function isNaN(value: number): boolean {\n\treturn Number(value) !== value;\n}\n\n/**\n * Represents a type for all available JavaScript variable types.\n */\nexport type Type\n\t= \"[object Object]\"\n\t| \"[object Array]\"\n\t| \"[object String]\"\n\t| \"[object Number]\"\n\t| \"[object Boolean]\"\n\t| \"[object Date]\";\n\n/**\n * Returns a type of the value.\n *\n * @param value Input value\n * @return Type of the value\n * @ignore\n */\nexport function getType(value: A): Type {\n\treturn ({}).toString.call(value) as Type;\n}\n\n\n/**\n * Asserts that the condition is true.\n *\n * @param condition Condition to check\n * @param message Message to display in the error\n * @ignore\n */\nexport function assert(condition: boolean, message: string = \"Assertion failed\"): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(message);\n\t}\n}\n\n\n/**\n * ============================================================================\n * QUICK CONVERSION\n * ============================================================================\n * @hidden\n */\n\n\n/**\n * Converts any value into a `number`.\n *\n * @param value Source value\n * @return Number representation of value\n */\nexport function toNumber(value: any): number {\n\tif (value != null && !isNumber(value)) {\n\t\tlet converted = Number(value);\n\t\tif (isNaN(converted) && isString(value) && value != \"\") {\n\t\t\treturn toNumber(value.replace(/[^0-9.\\-]+/g, ''));\n\t\t}\n\t\treturn converted;\n\t}\n\treturn value;\n}\n\n\n\n/**\n * Converts anything to Date object.\n *\n * @param value A value of any type\n * @return Date object representing a value\n */\nexport function toDate(value: Date | number | string): Date {\n\tif (isDate(value)) {\n\t\t// TODO maybe don't create a new Date ?\n\t\treturn new Date(value);\n\t}\n\n\telse if (isNumber(value)) {\n\t\treturn new Date(value);\n\t}\n\n\telse {\n\t\t// Try converting to number (assuming timestamp)\n\t\tlet num = Number(value);\n\n\t\tif (!isNumber(num)) {\n\t\t\treturn new Date(value);\n\t\t}\n\t\telse {\n\t\t\treturn new Date(num);\n\t\t}\n\t}\n}\n\n/**\n * Converts numeric value into string. Deals with large or small numbers that\n * would otherwise use exponents.\n *\n * @param value Numeric value\n * @return Numeric value as string\n */\nexport function numberToString(value: number): string {\n\t// TODO handle Infinity and -Infinity\n\tif (isNaN(value)) {\n\t\treturn \"NaN\";\n\t}\n\n\tif (value === Infinity) {\n\t\treturn \"Infinity\";\n\t}\n\n\tif (value === -Infinity) {\n\t\treturn \"-Infinity\";\n\t}\n\n\t// Negative 0\n\tif ((value === 0) && (1 / value === -Infinity)) {\n\t\treturn \"-0\";\n\t}\n\n\t// Preserve negative and deal with absoute values\n\tlet negative = value < 0;\n\n\tvalue = Math.abs(value);\n\n\t// TODO test this\n\tlet parsed = /^([0-9]+)(?:\\.([0-9]+))?(?:e[\\+\\-]([0-9]+))?$/.exec(\"\" + value)!;\n\tlet digits = parsed[1];\n\tlet decimals = parsed[2] || \"\";\n\n\tlet res: string;\n\n\t// Leave the nummber as it is if it does not use exponents\n\tif (parsed[3] === undefined) {\n\t\tres = (decimals === \"\" ? digits : digits + \".\" + decimals);\n\n\t} else {\n\t\tlet exponent = +parsed[3];\n\n\t\t// Deal with decimals\n\t\tif (value < 1) {\n\t\t\tlet zeros = exponent - 1;\n\n\t\t\tres = \"0.\" + repeat(\"0\", zeros) + digits + decimals;\n\n\t\t\t// Deal with integers\n\t\t} else {\n\t\t\tlet zeros = exponent - decimals.length;\n\n\t\t\tif (zeros === 0) {\n\t\t\t\tres = digits + decimals;\n\n\t\t\t} else if (zeros < 0) {\n\t\t\t\tres = digits + decimals.slice(0, zeros) + \".\" + decimals.slice(zeros);\n\n\t\t\t} else {\n\t\t\t\tres = digits + decimals + repeat(\"0\", zeros);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn negative ? \"-\" + res : res;\n}\n\n/**\n * Repeats a `string` number of times as set in `amount`.\n *\n * @ignore Exclude from docs\n * @todo Make this faster\n * @param string Source string\n * @param amount Number of times to repeat string\n * @return New string\n */\nexport function repeat(string: string, amount: number): string {\n return new Array(amount + 1).join(string);\n}\n\n\n/**\n * ============================================================================\n * VALUE PRESENCE CHECK\n * ============================================================================\n * @hidden\n */\n\n/**\n * Defines an optional value that can be of any type or `undefined`.\n */\nexport type Optional = A | undefined;\n\n\n/**\n * ============================================================================\n * TYPE CHECK\n * ============================================================================\n * @hidden\n */\n\n/**\n * Checks if parameter is `Date`.\n *\n * @param value Input value\n * @return Is Date?\n */\nexport function isDate(value: any): value is Date {\n\treturn getType(value) === \"[object Date]\";\n}\n\n/**\n * Checks if parameter is `string`.\n *\n * @param value Input value\n * @return Is string?\n */\nexport function isString(value: any): value is string {\n\treturn typeof value === \"string\";\n}\n\n/**\n * Checks if parameter is `number`.\n *\n * @param value Input value\n * @return Is number?\n */\nexport function isNumber(value: any): value is number {\n\treturn typeof value === \"number\" && Number(value) == value;\n}\n\n/**\n * Checks if parameter is `object`.\n *\n * @param value Input value\n * @return Is object?\n */\nexport function isObject(value: any): value is object {\n\treturn typeof value === \"object\" && value !== null;\n}\n\n/**\n * Checks if parameter is `Array`.\n *\n * @param value Input value\n * @return Is Array?\n */\nexport function isArray(value: any): value is Array {\n\treturn Array.isArray(value);\n}\n\n\n/**\n * ============================================================================\n * STATIC CONSTANTS\n * ============================================================================\n * @hidden\n */\n\n\n/**\n * @ignore Exclude from docs\n */\nexport const PLACEHOLDER: string = \"__§§§__\";\n\n/**\n * @ignore Exclude from docs\n */\nexport const PLACEHOLDER2: string = \"__§§§§__\";\n","import type { Percent } from \"./Percent\";\nimport type { IPointerEvent } from \"../render/backend/Renderer\";\nimport type { Sprite } from \"../render/Sprite\";\n\nimport * as $type from \"./Type\";\nimport * as $array from \"./Array\";\nimport * as $object from \"./Object\";\nimport type { IBounds } from \"./IBounds\";\n\nimport { Disposer, DisposerClass, IDisposer } from \"./Disposer\";\n\n/**\n * ============================================================================\n * DOM FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Execute a function when DOM is ready.\n *\n * @since 5.0.2\n * @param f Callback\n */\nexport function ready(f: () => void): void {\n\tif (document.readyState !== \"loading\") {\n\t\tf();\n\n\t} else {\n\t\tconst listener = () => {\n\t\t\tif (document.readyState !== \"loading\") {\n\t\t\t\tdocument.removeEventListener(\"readystatechange\", listener);\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"readystatechange\", listener);\n\t}\n}\n\n/**\n * Removes a DOM element.\n * @param el Target element\n */\nexport function removeElement(el: HTMLElement): void {\n\tif (el.parentNode) {\n\t\tel.parentNode.removeChild(el);\n\t}\n}\n\n/**\n * Function that adds a disposable event listener directly to a DOM element.\n *\n * @ignore Exclude from docs\n * @param dom A DOM element to add event to\n * @param type Event type\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function addEventListener(dom: EventTarget, type: string, listener: (event: E) => void, options?: any): IDisposer {\n\t//@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\n\tdom.addEventListener(type, listener, options || false);\n\n\treturn new Disposer(() => {\n\t\tdom.removeEventListener(type, listener, options || false);\n\t});\n}\n\n/**\n * Function that adds an event listener which is triggered when the browser's zoom changes.\n *\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function onZoom(listener: () => void): IDisposer {\n\t// TODO use matchMedia instead ?\n\treturn addEventListener(window, \"resize\", (_ev) => {\n\t\tlistener();\n\t});\n}\n\n/**\n * @ignore\n */\nexport function supports(cap: \"touchevents\" | \"pointerevents\" | \"mouseevents\" | \"wheelevents\" | \"keyboardevents\"): boolean {\n\tswitch (cap) {\n\t\tcase \"touchevents\":\n\t\t\t//return \"ontouchstart\" in document.documentElement;\n\t\t\treturn window.hasOwnProperty(\"TouchEvent\");\n\n\t\tcase \"pointerevents\":\n\t\t\treturn window.hasOwnProperty(\"PointerEvent\");\n\n\t\tcase \"mouseevents\":\n\t\t\treturn window.hasOwnProperty(\"MouseEvent\");\n\n\t\tcase \"wheelevents\":\n\t\t\treturn window.hasOwnProperty(\"WheelEvent\");\n\n\t\tcase \"keyboardevents\":\n\t\t\treturn window.hasOwnProperty(\"KeyboardEvent\");\n\t}\n\treturn false;\n}\n\n/**\n * @ignore\n */\nexport function getPointerId(event: IPointerEvent) {\n\tlet id = (event).pointerId || 0;\n\treturn id;\n}\n\n/**\n * Removes focus from any element by shifting focus to body.\n *\n * @ignore\n */\nexport function blur(): void {\n\tif (document.activeElement && document.activeElement != document.body) {\n\t\tif ((document.activeElement).blur) {\n\t\t\t(document.activeElement).blur();\n\t\t}\n\t\telse {\n\t\t\tlet input = document.createElement(\"button\");\n\t\t\tinput.style.position = \"fixed\";\n\t\t\tinput.style.top = \"0px\";\n\t\t\tinput.style.left = \"-10000px\";\n\t\t\tdocument.body.appendChild(input);\n\t\t\tinput.focus();\n\t\t\tinput.blur();\n\t\t\tdocument.body.removeChild(input);\n\t\t}\n\t}\n}\n\n/**\n * Focuses element.\n *\n * @ignore\n */\nexport function focus(el: HTMLElement): void {\n\tif (el) {\n\t\tel.focus();\n\t}\n}\n\n/**\n * @ignore\n */\nexport function getRendererEvent(key: string): string {\n\tif (supports(\"pointerevents\")) {\n\t\treturn key;\n\t}\n\telse if (supports(\"touchevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"touchstart\";\n\t\t\tcase \"pointerout\": return \"touchend\";\n\t\t\tcase \"pointerleave\": return \"touchend\";\n\t\t\tcase \"pointerdown\": return \"touchstart\";\n\t\t\tcase \"pointermove\": return \"touchmove\";\n\t\t\tcase \"pointerup\": return \"touchend\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\telse if (supports(\"mouseevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"mouseover\";\n\t\t\tcase \"pointerout\": return \"mouseout\";\n\t\t\tcase \"pointerleave\": return \"mouseleave\";\n\t\t\tcase \"pointerdown\": return \"mousedown\";\n\t\t\tcase \"pointermove\": return \"mousemove\";\n\t\t\tcase \"pointerup\": return \"mouseup\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\treturn key;\n}\n\n/**\n * Determines if pointer event originated from a touch pointer or mouse.\n *\n * @param ev Original event\n * @return Touch pointer?\n */\nexport function isTouchEvent(ev: MouseEvent | Touch): boolean {\n\tif (typeof Touch !== \"undefined\" && ev instanceof Touch) {\n\t\treturn true;\n\t}\n\telse if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && (ev).pointerType != null) {\n\t\tswitch ((ev).pointerType) {\n\t\t\tcase \"touch\":\n\t\t\tcase \"pen\":\n\t\t\tcase 2:\n\t\t\t\treturn true;\n\t\t\tcase \"mouse\":\n\t\t\tcase 4:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn !(ev instanceof MouseEvent);\n\t\t}\n\t}\n\telse if ((ev).type != null) {\n\t\tif ((ev).type.match(/^mouse/)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Sets style property on DOM element.\n *\n * @ignore Exclude from docs\n */\nexport function setStyle(dom: HTMLElement, property: string, value: string | undefined): void {\n\t(dom.style)[property] = value;\n}\n\nexport function getStyle(dom: HTMLElement, property: string): string | undefined {\n\treturn (dom.style)[property];\n}\n\n/**\n * Gets the target of the event, works for shadow DOM too.\n */\nexport function getEventTarget(event: Event | Touch): Node | null {\n\tif ((event as any).composedPath) {\n\t\tconst path = (event as Event).composedPath();\n\n\t\tif (path.length === 0) {\n\t\t\treturn null;\n\n\t\t} else {\n\t\t\treturn path[0] as Node;\n\t\t}\n\n\t} else {\n\t\treturn event.target as Node | null;\n\t}\n}\n\n/**\n * Checks of element `a` contains element `b`.\n *\n * @param a Aleged ascendant\n * @param b Aleged descendant\n * @return Contains?\n */\nexport function contains(a: Element, b: Element): boolean {\n\tlet cursor: Node = b;\n\n\twhile (true) {\n\t\tif (a === cursor) {\n\t\t\treturn true;\n\n\t\t} else if (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((cursor).host == null) {\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\t\t\t\tcursor = (cursor).host;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns `true` if pointer event originated on an element within Root.\n *\n * @since 5.2.8\n * @param event Event\n * @param target Target element\n */\nexport function isLocalEvent(event: IPointerEvent, target: Sprite) {\n\treturn event.target && contains(target.root.dom, event.target);\n}\n\n/**\n * Disables or enables interactivity of a DOM element.\n *\n * @param target Target element\n * @param interactive Interactive?\n */\nexport function setInteractive(target: HTMLElement, interactive: boolean): void {\n\tif (interactive) {\n\t\ttarget.style.pointerEvents = \"auto\";\n\t}\n\telse {\n\t\ttarget.style.pointerEvents = \"none\";\n\t}\n}\n\n/**\n * Returns the shadow root of the element or null\n *\n * @param a Node\n * @return Root\n */\nexport function getShadowRoot(a: Node): ShadowRoot | null {\n\tlet cursor: Node = a;\n\n\twhile (true) {\n\t\tif (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((cursor).host != null) {\n\t\t\t\treturn cursor;\n\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * [rootStylesheet description]\n *\n * @ignore Exclude from docs\n * @todo Description\n */\nlet rootStylesheet: $type.Optional;\n\n/**\n * @ignore Exclude from docs\n */\nfunction createStylesheet(element: ShadowRoot | null, text: string, nonce: string = \"\"): HTMLStyleElement {\n\t// TODO use createElementNS ?\n\tconst e = document.createElement(\"style\");\n\te.type = \"text/css\";\n\tif (nonce != \"\") {\n\t\te.setAttribute(\"nonce\", nonce)\n\t}\n\te.textContent = text;\n\n\tif (element === null) {\n\t\tdocument.head.appendChild(e);\n\t} else {\n\t\telement.appendChild(e);\n\t}\n\n\treturn e;\n}\n\n/**\n * [getStylesheet description]\n *\n * @ignore Exclude from docs\n * @todo Description\n * @return [description]\n */\nfunction getStylesheet(element: ShadowRoot | null, nonce: string = \"\"): CSSStyleSheet {\n\tif (element === null) {\n\t\tif (rootStylesheet == null) {\n\t\t\t// TODO use createElementNS ?\n\t\t\tconst e = document.createElement(\"style\");\n\t\t\te.type = \"text/css\";\n\t\t\tif (nonce != \"\") {\n\t\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t\t}\n\t\t\tdocument.head.appendChild(e);\n\t\t\trootStylesheet = e.sheet as CSSStyleSheet;\n\t\t}\n\n\t\treturn rootStylesheet;\n\n\t} else {\n\t\t// TODO use createElementNS ?\n\t\tconst e = document.createElement(\"style\");\n\t\te.type = \"text/css\";\n\t\tif (nonce != \"\") {\n\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t}\n\t\telement.appendChild(e);\n\t\treturn e.sheet as CSSStyleSheet;\n\t}\n}\n\n/**\n * [makeStylesheet description]\n *\n * @ignore Exclude from docs\n * @todo Description\n * @param selector [description]\n * @return [description]\n */\nfunction appendStylesheet(root: CSSStyleSheet, selector: string): CSSStyleRule {\n\tconst index = root.cssRules.length;\n\troot.insertRule(selector + \"{}\", index);\n\n\treturn root.cssRules[index] as CSSStyleRule;\n}\n\n/**\n * Defines a class for a CSS rule.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleRule extends DisposerClass {\n\tprivate _root: CSSStyleSheet;\n\n\t/**\n\t * CSS rule.\n\t */\n\tprivate _rule: CSSStyleRule;\n\n\t/**\n\t * A CSS selector text.\n\t *\n\t * E.g.: `.myClass p`\n\t *\n\t * @param selector CSS selector\n\t */\n\tpublic set selector(selector: string) {\n\t\tthis._rule.selectorText = selector;\n\t}\n\n\t/**\n\t * @return CSS selector\n\t */\n\tpublic get selector(): string {\n\t\treturn this._rule.selectorText;\n\t}\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param selector CSS selector\n\t * @param styles An object of style attribute - value pairs\n\t */\n\tconstructor(element: ShadowRoot | null, selector: string, styles: { [name: string]: string }, nonce: string = \"\") {\n\t\tsuper();\n\n\t\tthis._root = getStylesheet(element, nonce);\n\n\t\ttry {\n\t\t\tthis._rule = appendStylesheet(this._root, selector);\n\t\t}\n\t\tcatch (err) {\n\t\t\t// Create an empty rule on failed selectors\n\t\t\tthis._rule = appendStylesheet(this._root, \":not(*)\");\n\t\t}\n\n\t\t$object.each(styles, (key, value) => {\n\t\t\tthis.setStyle(key, value);\n\t\t});\n\t}\n\n\t// TODO test this\n\tprotected _dispose(): void {\n\t\t// TODO a bit hacky\n\t\tconst index = $array.indexOf(this._root.cssRules, this._rule);\n\n\t\tif (index === -1) {\n\t\t\tthrow new Error(\"Could not dispose StyleRule\");\n\n\t\t} else {\n\t\t\t// TODO if it's empty remove it from the DOM ?\n\t\t\tthis._root.deleteRule(index);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the same style properties with browser-specific prefixes.\n\t *\n\t * @param name Attribute name\n\t * @param value Attribute value\n\t */\n\tprivate _setVendorPrefixName(name: string, value: string): void {\n\t\tconst style = this._rule.style;\n\t\tstyle.setProperty(\"-webkit-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-moz-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-ms-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-o-\" + name, value, \"\");\n\t\tstyle.setProperty(name, value, \"\");\n\t}\n\n\t/**\n\t * Sets a value for specific style attribute.\n\t *\n\t * @param name Attribute\n\t * @param value Value\n\t */\n\tpublic setStyle(name: string, value: string): void {\n\t\tif (name === \"transition\") {\n\t\t\tthis._setVendorPrefixName(name, value);\n\n\t\t} else {\n\t\t\tthis._rule.style.setProperty(name, value, \"\");\n\t\t}\n\t}\n}\n\n/**\n * Defines a class for an entire CSS style sheet.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleSheet extends DisposerClass {\n\tprivate _element: HTMLStyleElement;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param text CSS stylesheet\n\t */\n\tconstructor(element: ShadowRoot | null, text: string, nonce: string = \"\") {\n\t\tsuper();\n\t\tthis._element = createStylesheet(element, text, nonce);\n\t}\n\n\tprotected _dispose(): void {\n\t\tif (this._element.parentNode) {\n\t\t\tthis._element.parentNode.removeChild(this._element);\n\t\t}\n\t}\n}\n\n\n/**\n * Adds a class name to an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function addClass(element: HTMLElement | SVGElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\tconst classes = className.split(\" \");\n\t\t$array.each(classes, (name) => {\n\t\t\telement.classList.add(name);\n\t\t});\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \") + \" \" + className);\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(\"class\", className);\n\t\t}\n\t}\n}\n\n/**\n * Removes a class name from an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function removeClass(element: HTMLElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\telement.classList.remove(className);\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \"));\n\t\t}\n\t}\n}\n\n// /**\n// * Applies a set of styles to an element. Stores the original styles so they\n// * can be restored later.\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function prepElementForDrag(dom: HTMLElement): void {\n\n// \t// @todo: save current values\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"none\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\");\n\n// }\n\n// /**\n// * Restores replaced styles\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function unprepElementForDrag(dom: HTMLElement): void {\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"\");\n\n// }\n\nexport function iOS(): boolean {\n\treturn /apple/i.test(navigator.vendor) && \"ontouchend\" in document;\n}\n\nexport function getSafeResolution(): number | undefined {\n\treturn iOS() ? 1 : undefined;\n}\n\nexport function relativeToValue(percent: number | Percent | undefined | null, full: number): number {\n\tif ($type.isNumber(percent)) {\n\t\treturn percent;\n\t} else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\n\t\treturn full * percent.value;\n\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\n\n/**\n * Returns number of decimals\n *\n * @ignore Exclude from docs\n * @param number Input number\n * @return Number of decimals\n */\nexport function decimalPlaces(number: number): number {\n\tlet match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\tif (!match) { return 0; }\n\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n}\n\n\n/**\n * ============================================================================\n * STRING FORMATTING FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Pads a string with additional characters to certain length.\n *\n * @param value A numeric value\n * @param len Result string length in characters\n * @param char A character to use for padding\n * @return Padded value as string\n */\nexport function padString(value: any, len: number = 0, char: string = \"0\"): string {\n\tif (typeof value !== \"string\") {\n\t\tvalue = value.toString();\n\t}\n\n\treturn len > value.length ? Array(len - value.length + 1).join(char) + value : value;\n}\n\nexport function trimLeft(text: string): string {\n\treturn text.replace(/^[\\s]*/, \"\");\n}\n\nexport function trimRight(text: string): string {\n\treturn text.replace(/[\\s]*$/, \"\");\n}\n\nexport function trim(text: string): string {\n\treturn trimLeft(trimRight(text));\n}\n\nexport function truncateTextWithEllipsis(text: string, maxLength: number, breakWords: boolean = false, ellipsis: string = \"...\") {\n\tif (text.length > maxLength) {\n\t\t// Find the last non-alphanumeric character before maxLength\n\t\tlet lastNonAlphanumericIndex = maxLength - 1;\n\t\twhile (lastNonAlphanumericIndex >= 0 && text.charAt(lastNonAlphanumericIndex).match(/\\w/)) {\n\t\t\tlastNonAlphanumericIndex--;\n\t\t}\n\n\t\tif (lastNonAlphanumericIndex >= 0 && breakWords == false) {\n\t\t\treturn text.substring(0, lastNonAlphanumericIndex + 1) + '...';\n\t\t} else {\n\t\t\t// If no non-alphanumeric character found, truncate without breaking words\n\t\t\treturn text.substring(0, maxLength) + ellipsis;\n\t\t}\n\t} else {\n\t\treturn text;\n\t}\n}\n\n/**\n * Tries to determine format type.\n *\n * @ignore Exclude from docs\n * @param format Format string\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\n */\nexport function getFormat(format: string): string {\n\n\t// Undefined?\n\tif (typeof format === \"undefined\") {\n\t\treturn \"string\";\n\t}\n\n\t// Cleanup and lowercase format\n\tformat = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\n\n\t// Remove style tags\n\tformat = format.replace(/\\[[^\\]]+\\]/, \"\");\n\n\t// Trim\n\tformat = format.trim();\n\n\t// Check for any explicit format hints (i.e. /Date)\n\tlet hints: RegExpMatchArray | null = format.match(/\\/(date|number|duration)$/);\n\n\tif (hints) {\n\t\treturn hints[1];\n\t}\n\n\t// Check for explicit hints\n\tif (format === \"number\") {\n\t\treturn \"number\";\n\t}\n\n\tif (format === \"date\") {\n\t\treturn \"date\";\n\t}\n\n\tif (format === \"duration\") {\n\t\treturn \"duration\";\n\t}\n\n\t// Detect number formatting symbols\n\tif (format.match(/[#0]/)) {\n\t\treturn \"number\";\n\t}\n\n\t// Detect date formatting symbols\n\tif (format.match(/[ymwdhnsqaxkzgtei]/)) {\n\t\treturn \"date\";\n\t}\n\n\t// Nothing? Let's display as string\n\treturn \"string\";\n}\n\n/**\n * Cleans up format:\n * * Strips out formatter hints\n *\n * @ignore Exclude from docs\n * @param format Format\n * @return Cleaned format\n */\nexport function cleanFormat(format: string): string {\n\treturn format.replace(/\\/(date|number|duration)$/i, \"\");\n}\n\n/**\n * Strips all tags from the string.\n *\n * @param text Source string\n * @return String without tags\n */\nexport function stripTags(text: string): string {\n\treturn text ? text.replace(/<[^>]*>/g, \"\") : text;\n}\n\n/**\n * Removes new lines and tags from a string.\n *\n * @param text String to conver\n * @return Converted string\n */\nexport function plainText(text: string): string {\n\treturn text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\n}\n\n/**\n * Escapes string so it can safely be used in a Regex.\n *\n * @param value Unsescaped string\n * @return Escaped string\n */\nexport function escapeForRgex(value: string): string {\n\treturn value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Adds space before each uppercase letter.\n *\n * @param str Input string\n * @return Output string\n */\nexport function addSpacing(str: string): string {\n\tlet result = \"\";\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charAt(i);\n\t\tif (char.toUpperCase() == char && i != 0) {\n\t\t\tresult += \" \";\n\t\t}\n\t\tresult += char;\n\t}\n\treturn result;\n}\n\n/**\n * ============================================================================\n * DATE-RELATED FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Returns a year day.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year day\n * @todo Account for UTC\n */\nexport function getYearDay(date: Date, utc: boolean = false): number {\n\t// TODO: utc needed?\n\tutc;\n\tconst start = new Date(date.getFullYear(), 0, 0);\n\tconst diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\n\tconst oneDay = 1000 * 60 * 60 * 24;\n\treturn Math.floor(diff / oneDay);\n}\n\n/**\n * Returns week number for a given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Week number\n * @todo Account for UTC\n */\nexport function getWeek(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\n}\n\n/**\n * Returns a \"week year\" of the given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year of week\n * @since 5.3.0\n * @todo Account for UTC\n */\nexport function getWeekYear(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn firstDay.getFullYear();\n}\n\n/**\n * Returns a week number in the month.\n *\n * @param date Source Date\n * @param utc Assume UTC dates?\n * @return Week number in month\n */\nexport function getMonthWeek(date: Date, utc: boolean = false): number {\n\tconst firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\n\tlet currentWeek = getWeek(date, utc);\n\tif (currentWeek == 1) {\n\t\tcurrentWeek = 53;\n\t}\n\treturn currentWeek - firstWeek + 1;\n}\n\n/**\n * Returns a year day out of the given week number.\n *\n * @param week Week\n * @param year Year\n * @param weekday Weekday\n * @param utc Assume UTC dates\n * @return Day in a year\n */\nexport function getDayFromWeek(week: number, year: number, weekday: number = 1, utc: boolean = false): number {\n\tlet date = new Date(year, 0, 4, 0, 0, 0, 0);\n\tif (utc) {\n\t\tdate.setUTCFullYear(year);\n\t}\n\tlet day = week * 7 + weekday - ((date.getDay() || 7) + 3);\n\treturn day;\n}\n\n/**\n * Returns 12-hour representation out of the 24-hour hours.\n *\n * @param hours 24-hour number\n * @return 12-hour number\n */\nexport function get12Hours(hours: number, base?: number): number {\n\tif (hours > 12) {\n\t\thours -= 12;\n\t}\n\telse if (hours === 0) {\n\t\thours = 12;\n\t}\n\treturn base != null ? hours + (base - 1) : hours;\n}\n\n/**\n * Returns a string name of the time zone.\n *\n * @param date Date object\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\n * @param savings Include information if it's in daylight savings mode\n * @param utc Assume UTC dates\n * @return Time zone name\n */\nexport function getTimeZone(date: Date, long: boolean = false, savings: boolean = false, utc: boolean = false, timezone?: string): string {\n\tif (utc) {\n\t\treturn long ? \"Coordinated Universal Time\" : \"UTC\";\n\t}\n\telse if (timezone) {\n\t\tconst d1 = date.toLocaleString(\"en-US\", { timeZone: timezone });\n\t\tconst d2 = date.toLocaleString(\"en-US\", { timeZone: timezone, timeZoneName: long ? \"long\" : \"short\" });\n\t\treturn trim(d2.substr(d1.length));\n\t}\n\tlet wotz = date.toLocaleString(\"UTC\");\n\tlet wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\n\t//wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\n\tif (savings === false) {\n\t\twtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\n\t}\n\treturn trim(wtz);\n}\n\nexport function getTimezoneOffset(timezone: string): number {\n\tconst date = new Date(Date.UTC(2012, 0, 1, 0, 0, 0, 0));\n\tconst utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\n\tconst tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\n\treturn (tzDate.getTime() - utcDate.getTime()) / 6e4 * -1;\n}\n\n\nexport function capitalizeFirst(text: string): string {\n\treturn text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n\n/**\n * ============================================================================\n * COLOR UTILS\n * ============================================================================\n */\n\n\n/**\n * Represents an interface for an object that represents an RGB color.\n */\nexport interface iRGB {\n\tr: number;\n\tg: number;\n\tb: number;\n\ta?: number;\n}\n\n/**\n * Represents an interface for an object that represents an HSL color.\n */\nexport interface iHSL {\n\th: number;\n\ts: number;\n\tl: number;\n\ta?: number;\n}\n\n/**\n * The functions below are taken and adapted from Garry Tan's blog post:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * The further attributions go mjijackson.com, which now seems to be defunct.\n */\n\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @ignore Exclude from docs\n * @param h The hue\n * @param s The saturation\n * @param l The lightness\n * @return The RGB representation\n */\nexport function hslToRgb(color: iHSL): iRGB {\n\tlet r, g, b;\n\tlet h = color.h;\n\tlet s = color.s;\n\tlet l = color.l;\n\n\tif (s == 0) {\n\t\tr = g = b = l; // achromatic\n\t} else {\n\t\tlet hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n\t\t\tif (t < 0) { t += 1; }\n\t\t\tif (t > 1) { t -= 1; }\n\t\t\tif (t < 1 / 6) { return p + (q - p) * 6 * t; }\n\t\t\tif (t < 1 / 2) { return q; }\n\t\t\tif (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }\n\t\t\treturn p;\n\t\t}\n\n\t\tlet q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tlet p = 2 * l - q;\n\t\tr = hue2rgb(p, q, h + 1 / 3);\n\t\tg = hue2rgb(p, q, h);\n\t\tb = hue2rgb(p, q, h - 1 / 3);\n\t}\n\n\treturn {\n\t\tr: Math.round(r * 255),\n\t\tg: Math.round(g * 255),\n\t\tb: Math.round(b * 255)\n\t};\n}\n\n/**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @ignore Exclude from docs\n * @param r The red color value\n * @param g The green color value\n * @param b The blue color value\n * @return The HSL representation\n */\nexport function rgbToHsl(color: iRGB): iHSL {\n\tlet r = color.r / 255;\n\tlet g = color.g / 255;\n\tlet b = color.b / 255;\n\tlet max = Math.max(r, g, b);\n\tlet min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tlet l = (max + min) / 2;\n\n\tif (max === min) {\n\t\th = s = 0; // achromatic\n\n\t} else {\n\t\tlet d = max - min;\n\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n\t\tswitch (max) {\n\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\tcase b: h = (r - g) / d + 4; break;\n\t\t}\n\n\t\th /= 6;\n\t}\n\n\treturn {\n\t\th: h,\n\t\ts: s,\n\t\tl: l\n\t};\n}\n\n/**\n * Returns a color that is `percent` brighter than the reference color.\n *\n * @ignore Exclude from docs\n * @param color Reference color\n * @param percent Brightness percent\n * @return Hex code of the new color\n */\nexport function lighten(rgb: $type.Optional, percent: number): $type.Optional {\n\tif (rgb) {\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\n\t\t\tg: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\n\t\t\tb: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Gets lightness step.\n *\n * @ignore Exclude from docs\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getLightnessStep(value: number, percent: number): number {\n\tlet base = percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns a color that is `percent` brighter than the source `color`.\n *\n * @ignore Exclude from docs\n * @param color Source color\n * @param percent Brightness percent\n * @return New color\n */\nexport function brighten(rgb: $type.Optional, percent: number): $type.Optional {\n\tif (rgb) {\n\t\tlet base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\n\t\t//let base = Math.max(rgb.r, rgb.g, rgb.b);\n\t\tlet step = getLightnessStep(base, percent);\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\n\t\t\tg: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\n\t\t\tb: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Returns brightness step.\n *\n * @ignore Exclude from docs\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getBrightnessStep(_value: number, percent: number): number {\n\tlet base = 255; //percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\n * color to use for elements over this color. E.g.: you would want to use\n * black text over light background, and vice versa.\n *\n * @ignore Exclude from docs\n * @param color Source color\n * @return Light?\n */\nexport function isLight(color: iRGB): boolean {\n\treturn ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\n}\n\n/**\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\n * saturation applied.\n *\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\n * saturated).\n *\n * @ignore Exclude from docs\n * @param color Base color\n * @param saturation Saturation (0-1)\n * @return New color\n */\nexport function saturate(rgb: $type.Optional, saturation: number): $type.Optional {\n\tif (rgb === undefined || saturation == 1) {\n\t\treturn rgb;\n\t}\n\n\tlet hsl = rgbToHsl(rgb);\n\thsl.s = saturation;\n\treturn hslToRgb(hsl);\n}\n\nexport function alternativeColor(color: iRGB, lightAlternative: iRGB = { r: 255, g: 255, b: 255 }, darkAlternative: iRGB = { r: 255, g: 255, b: 255 }): iRGB {\n\tlet light = lightAlternative;\n\tlet dark = darkAlternative;\n\tif (isLight(darkAlternative)) {\n\t\tlight = darkAlternative;\n\t\tdark = lightAlternative;\n\t}\n\treturn isLight(color) ? dark : light;\n}\n\n/**\n * @ignore\n */\nexport function mergeTags(tags1: string[] | undefined, tags2: string[]): string[] {\n\tif (!tags1) {\n\t\ttags1 = [];\n\t}\n\treturn [...tags1, ...tags2].filter((value, index, self) => {\n\t\treturn self.indexOf(value) === index;\n\t});\n}\n\n/**\n * @ignore\n */\nexport function sameBounds(a: IBounds, b?: IBounds): boolean {\n\tif (!b) {\n\t\treturn false;\n\t}\n\tif (a.left != b.left) {\n\t\treturn false\n\t}\n\tif (a.right != b.right) {\n\t\treturn false\n\t}\n\tif (a.top != b.top) {\n\t\treturn false\n\t}\n\tif (a.bottom != b.bottom) {\n\t\treturn false\n\t}\n\treturn true;\n}\n","/**\n * This file is automatically generated by `yarn generate-classes`.\n * DO NOT MANUALLY EDIT IT OR YOUR CHANGES WILL BE LOST!\n */\n\nimport type { AccelerationBands } from \"./../../../stock\";\nimport type { AccumulationDistribution } from \"./../../../stock\";\nimport type { AccumulativeSwingIndex } from \"./../../../stock\";\nimport type { Annotator } from \"./../../../plugins/exporting\";\nimport type { ArcDiagram } from \"./../../../flow\";\nimport type { ArcDiagramLink } from \"./../../../flow\";\nimport type { ArcDiagramNodes } from \"./../../../flow\";\nimport type { Aroon } from \"./../../../stock\";\nimport type { AverageSeries } from \"./../../../stock\";\nimport type { AwesomeOscillator } from \"./../../../stock\";\nimport type { Axis } from \"./../../../xy\";\nimport type { AxisBullet } from \"./../../../xy\";\nimport type { AxisLabel } from \"./../../../xy\";\nimport type { AxisLabelRadial } from \"./../../../xy\";\nimport type { AxisRenderer } from \"./../../../xy\";\nimport type { AxisRendererCircular } from \"./../../../radar\";\nimport type { AxisRendererRadial } from \"./../../../radar\";\nimport type { AxisRendererX } from \"./../../../xy\";\nimport type { AxisRendererY } from \"./../../../xy\";\nimport type { AxisTick } from \"./../../../xy\";\nimport type { BaseColumnSeries } from \"./../../../xy\";\nimport type { BollingerBands } from \"./../../../stock\";\nimport type { BreadcrumbBar } from \"./../../../hierarchy\";\nimport type { BullBearPower } from \"./../../../stock\";\nimport type { Bullet } from \"./../../../index\";\nimport type { Button } from \"./../../../index\";\nimport type { CalloutSeries } from \"./../../../stock\";\nimport type { Candlestick } from \"./../../../xy\";\nimport type { CandlestickSeries } from \"./../../../xy\";\nimport type { CategoryAxis } from \"./../../../xy\";\nimport type { CategoryDateAxis } from \"./../../../xy\";\nimport type { ChaikinMoneyFlow } from \"./../../../stock\";\nimport type { ChaikinOscillator } from \"./../../../stock\";\nimport type { Chart } from \"./../../../index\";\nimport type { ChartIndicator } from \"./../../../stock\";\nimport type { Chord } from \"./../../../flow\";\nimport type { ChordDirected } from \"./../../../flow\";\nimport type { ChordLink } from \"./../../../flow\";\nimport type { ChordLinkDirected } from \"./../../../flow\";\nimport type { ChordNodes } from \"./../../../flow\";\nimport type { ChordNonRibbon } from \"./../../../flow\";\nimport type { Circle } from \"./../../../index\";\nimport type { CirclePattern } from \"./../../../index\";\nimport type { ClockHand } from \"./../../../radar\";\nimport type { ClusteredPointSeries } from \"./../../../map\";\nimport type { ColorControl } from \"./../../../stock\";\nimport type { ColorSet } from \"./../../../index\";\nimport type { ColumnSeries } from \"./../../../xy\";\nimport type { CommodityChannelIndex } from \"./../../../stock\";\nimport type { ComparisonControl } from \"./../../../stock\";\nimport type { Component } from \"./../../../index\";\nimport type { Container } from \"./../../../index\";\nimport type { DataSaveControl } from \"./../../../stock\";\nimport type { DateAxis } from \"./../../../xy\";\nimport type { DateRangeSelector } from \"./../../../stock\";\nimport type { DisparityIndex } from \"./../../../stock\";\nimport type { DoodleSeries } from \"./../../../stock\";\nimport type { DrawingControl } from \"./../../../stock\";\nimport type { DrawingSeries } from \"./../../../stock\";\nimport type { DrawingToolControl } from \"./../../../stock\";\nimport type { Dropdown } from \"./../../../stock\";\nimport type { DropdownColors } from \"./../../../stock\";\nimport type { DropdownControl } from \"./../../../stock\";\nimport type { DropdownList } from \"./../../../stock\";\nimport type { DropdownListControl } from \"./../../../stock\";\nimport type { DurationAxis } from \"./../../../xy\";\nimport type { Ellipse } from \"./../../../index\";\nimport type { EllipseSeries } from \"./../../../stock\";\nimport type { Entity } from \"./../../../index\";\nimport type { Exporting } from \"./../../../plugins/exporting\";\nimport type { ExportingMenu } from \"./../../../plugins/exporting\";\nimport type { FibonacciSeries } from \"./../../../stock\";\nimport type { FibonacciTimezoneSeries } from \"./../../../stock\";\nimport type { Flow } from \"./../../../flow\";\nimport type { FlowLink } from \"./../../../flow\";\nimport type { FlowNode } from \"./../../../flow\";\nimport type { FlowNodes } from \"./../../../flow\";\nimport type { ForceDirected } from \"./../../../hierarchy\";\nimport type { FunnelSeries } from \"./../../../percent\";\nimport type { FunnelSlice } from \"./../../../percent\";\nimport type { GaplessDateAxis } from \"./../../../xy\";\nimport type { Gradient } from \"./../../../index\";\nimport type { GrainPattern } from \"./../../../index\";\nimport type { Graphics } from \"./../../../index\";\nimport type { GraticuleSeries } from \"./../../../map\";\nimport type { Grid } from \"./../../../xy\";\nimport type { GridLayout } from \"./../../../index\";\nimport type { HeatLegend } from \"./../../../index\";\nimport type { Hierarchy } from \"./../../../hierarchy\";\nimport type { HierarchyLink } from \"./../../../hierarchy\";\nimport type { HierarchyNode } from \"./../../../hierarchy\";\nimport type { HorizontalLayout } from \"./../../../index\";\nimport type { HorizontalLineSeries } from \"./../../../stock\";\nimport type { HorizontalRaySeries } from \"./../../../stock\";\nimport type { IconControl } from \"./../../../stock\";\nimport type { IconSeries } from \"./../../../stock\";\nimport type { Indicator } from \"./../../../stock\";\nimport type { IndicatorControl } from \"./../../../stock\";\nimport type { InterfaceColors } from \"./../../../index\";\nimport type { IntervalControl } from \"./../../../stock\";\nimport type { Label } from \"./../../../index\";\nimport type { LabelSeries } from \"./../../../stock\";\nimport type { Layout } from \"./../../../index\";\nimport type { Legend } from \"./../../../index\";\nimport type { Line } from \"./../../../index\";\nimport type { LinePattern } from \"./../../../index\";\nimport type { LineSeries } from \"./../../../xy\";\nimport type { LinearGradient } from \"./../../../index\";\nimport type { LinkedHierarchy } from \"./../../../hierarchy\";\nimport type { LinkedHierarchyNode } from \"./../../../hierarchy\";\nimport type { MACD } from \"./../../../stock\";\nimport type { MACross } from \"./../../../stock\";\nimport type { MapChart } from \"./../../../map\";\nimport type { MapLine } from \"./../../../map\";\nimport type { MapLineSeries } from \"./../../../map\";\nimport type { MapPointSeries } from \"./../../../map\";\nimport type { MapPolygon } from \"./../../../map\";\nimport type { MapPolygonSeries } from \"./../../../map\";\nimport type { MapSeries } from \"./../../../map\";\nimport type { Measure } from \"./../../../stock\";\nimport type { MedianPrice } from \"./../../../stock\";\nimport type { Modal } from \"./../../../index\";\nimport type { Momentum } from \"./../../../stock\";\nimport type { MovingAverage } from \"./../../../stock\";\nimport type { MovingAverageDeviation } from \"./../../../stock\";\nimport type { MovingAverageEnvelope } from \"./../../../stock\";\nimport type { OHLC } from \"./../../../xy\";\nimport type { OHLCSeries } from \"./../../../xy\";\nimport type { OnBalanceVolume } from \"./../../../stock\";\nimport type { OverboughtOversold } from \"./../../../stock\";\nimport type { PVT } from \"./../../../stock\";\nimport type { Pack } from \"./../../../hierarchy\";\nimport type { PanelControls } from \"./../../../stock\";\nimport type { ParallelChannelSeries } from \"./../../../stock\";\nimport type { Partition } from \"./../../../hierarchy\";\nimport type { PathPattern } from \"./../../../index\";\nimport type { Pattern } from \"./../../../index\";\nimport type { PercentChart } from \"./../../../percent\";\nimport type { PercentSeries } from \"./../../../percent\";\nimport type { PeriodSelector } from \"./../../../stock\";\nimport type { PictorialStackedSeries } from \"./../../../percent\";\nimport type { Picture } from \"./../../../index\";\nimport type { PicturePattern } from \"./../../../index\";\nimport type { PieChart } from \"./../../../percent\";\nimport type { PieSeries } from \"./../../../percent\";\nimport type { PointedRectangle } from \"./../../../index\";\nimport type { Polygon } from \"./../../../index\";\nimport type { PolylineSeries } from \"./../../../stock\";\nimport type { PyramidSeries } from \"./../../../percent\";\nimport type { QuadrantLineSeries } from \"./../../../stock\";\nimport type { RadarChart } from \"./../../../radar\";\nimport type { RadarColumnSeries } from \"./../../../radar\";\nimport type { RadarCursor } from \"./../../../radar\";\nimport type { RadarLineSeries } from \"./../../../radar\";\nimport type { RadialGradient } from \"./../../../index\";\nimport type { RadialLabel } from \"./../../../index\";\nimport type { RadialText } from \"./../../../index\";\nimport type { Rectangle } from \"./../../../index\";\nimport type { RectanglePattern } from \"./../../../index\";\nimport type { RectangleSeries } from \"./../../../stock\";\nimport type { RegressionSeries } from \"./../../../stock\";\nimport type { RelativeStrengthIndex } from \"./../../../stock\";\nimport type { ResetControl } from \"./../../../stock\";\nimport type { RoundedRectangle } from \"./../../../index\";\nimport type { Sankey } from \"./../../../flow\";\nimport type { SankeyLink } from \"./../../../flow\";\nimport type { SankeyNodes } from \"./../../../flow\";\nimport type { Scrollbar } from \"./../../../index\";\nimport type { SerialChart } from \"./../../../index\";\nimport type { Serializer } from \"./../../../plugins/json\";\nimport type { Series } from \"./../../../index\";\nimport type { SeriesTypeControl } from \"./../../../stock\";\nimport type { SettingsControl } from \"./../../../stock\";\nimport type { SettingsModal } from \"./../../../stock\";\nimport type { SimpleLineSeries } from \"./../../../stock\";\nimport type { Slice } from \"./../../../index\";\nimport type { SliceGrouper } from \"./../../../plugins/sliceGrouper\";\nimport type { SlicedChart } from \"./../../../percent\";\nimport type { Slider } from \"./../../../index\";\nimport type { SmoothedRadarLineSeries } from \"./../../../radar\";\nimport type { SmoothedXLineSeries } from \"./../../../xy\";\nimport type { SmoothedXYLineSeries } from \"./../../../xy\";\nimport type { SmoothedYLineSeries } from \"./../../../xy\";\nimport type { Sprite } from \"./../../../index\";\nimport type { SpriteResizer } from \"./../../../index\";\nimport type { StandardDeviation } from \"./../../../stock\";\nimport type { Star } from \"./../../../index\";\nimport type { StepLineSeries } from \"./../../../xy\";\nimport type { StochasticMomentumIndex } from \"./../../../stock\";\nimport type { StochasticOscillator } from \"./../../../stock\";\nimport type { StockChart } from \"./../../../stock\";\nimport type { StockControl } from \"./../../../stock\";\nimport type { StockLegend } from \"./../../../stock\";\nimport type { StockPanel } from \"./../../../stock\";\nimport type { StockToolbar } from \"./../../../stock\";\nimport type { Sunburst } from \"./../../../hierarchy\";\nimport type { Text } from \"./../../../index\";\nimport type { Tick } from \"./../../../index\";\nimport type { Tooltip } from \"./../../../index\";\nimport type { Tree } from \"./../../../hierarchy\";\nimport type { Treemap } from \"./../../../hierarchy\";\nimport type { TrendLineSeries } from \"./../../../stock\";\nimport type { Triangle } from \"./../../../index\";\nimport type { Trix } from \"./../../../stock\";\nimport type { TypicalPrice } from \"./../../../stock\";\nimport type { VWAP } from \"./../../../stock\";\nimport type { ValueAxis } from \"./../../../xy\";\nimport type { Venn } from \"./../../../venn\";\nimport type { VerticalLayout } from \"./../../../index\";\nimport type { VerticalLineSeries } from \"./../../../stock\";\nimport type { Volume } from \"./../../../stock\";\nimport type { VolumeProfile } from \"./../../../stock\";\nimport type { VoronoiTreemap } from \"./../../../hierarchy\";\nimport type { WilliamsR } from \"./../../../stock\";\nimport type { WordCloud } from \"./../../../wc\";\nimport type { XYChart } from \"./../../../xy\";\nimport type { XYChartScrollbar } from \"./../../../xy\";\nimport type { XYCursor } from \"./../../../xy\";\nimport type { XYSeries } from \"./../../../xy\";\nimport type { ZigZag } from \"./../../../stock\";\nimport type { ZoomControl } from \"./../../../map\";\n\nexport interface IClasses {\n\t\"AccelerationBands\": () => Promise;\n\t\"AccumulationDistribution\": () => Promise;\n\t\"AccumulativeSwingIndex\": () => Promise;\n\t\"Annotator\": () => Promise;\n\t\"ArcDiagram\": () => Promise;\n\t\"ArcDiagramLink\": () => Promise;\n\t\"ArcDiagramNodes\": () => Promise;\n\t\"Aroon\": () => Promise;\n\t\"AverageSeries\": () => Promise;\n\t\"AwesomeOscillator\": () => Promise;\n\t\"Axis\": () => Promise;\n\t\"AxisBullet\": () => Promise;\n\t\"AxisLabel\": () => Promise;\n\t\"AxisLabelRadial\": () => Promise;\n\t\"AxisRenderer\": () => Promise;\n\t\"AxisRendererCircular\": () => Promise;\n\t\"AxisRendererRadial\": () => Promise;\n\t\"AxisRendererX\": () => Promise;\n\t\"AxisRendererY\": () => Promise;\n\t\"AxisTick\": () => Promise;\n\t\"BaseColumnSeries\": () => Promise;\n\t\"BollingerBands\": () => Promise;\n\t\"BreadcrumbBar\": () => Promise;\n\t\"BullBearPower\": () => Promise;\n\t\"Bullet\": () => Promise;\n\t\"Button\": () => Promise;\n\t\"CalloutSeries\": () => Promise;\n\t\"Candlestick\": () => Promise;\n\t\"CandlestickSeries\": () => Promise;\n\t\"CategoryAxis\": () => Promise;\n\t\"CategoryDateAxis\": () => Promise;\n\t\"ChaikinMoneyFlow\": () => Promise;\n\t\"ChaikinOscillator\": () => Promise;\n\t\"Chart\": () => Promise;\n\t\"ChartIndicator\": () => Promise;\n\t\"Chord\": () => Promise;\n\t\"ChordDirected\": () => Promise;\n\t\"ChordLink\": () => Promise;\n\t\"ChordLinkDirected\": () => Promise;\n\t\"ChordNodes\": () => Promise;\n\t\"ChordNonRibbon\": () => Promise;\n\t\"Circle\": () => Promise;\n\t\"CirclePattern\": () => Promise;\n\t\"ClockHand\": () => Promise;\n\t\"ClusteredPointSeries\": () => Promise;\n\t\"ColorControl\": () => Promise;\n\t\"ColorSet\": () => Promise;\n\t\"ColumnSeries\": () => Promise;\n\t\"CommodityChannelIndex\": () => Promise;\n\t\"ComparisonControl\": () => Promise;\n\t\"Component\": () => Promise;\n\t\"Container\": () => Promise;\n\t\"DataSaveControl\": () => Promise;\n\t\"DateAxis\": () => Promise;\n\t\"DateRangeSelector\": () => Promise;\n\t\"DisparityIndex\": () => Promise;\n\t\"DoodleSeries\": () => Promise;\n\t\"DrawingControl\": () => Promise;\n\t\"DrawingSeries\": () => Promise;\n\t\"DrawingToolControl\": () => Promise;\n\t\"Dropdown\": () => Promise;\n\t\"DropdownColors\": () => Promise;\n\t\"DropdownControl\": () => Promise;\n\t\"DropdownList\": () => Promise;\n\t\"DropdownListControl\": () => Promise;\n\t\"DurationAxis\": () => Promise;\n\t\"Ellipse\": () => Promise;\n\t\"EllipseSeries\": () => Promise;\n\t\"Entity\": () => Promise;\n\t\"Exporting\": () => Promise;\n\t\"ExportingMenu\": () => Promise;\n\t\"FibonacciSeries\": () => Promise;\n\t\"FibonacciTimezoneSeries\": () => Promise;\n\t\"Flow\": () => Promise;\n\t\"FlowLink\": () => Promise;\n\t\"FlowNode\": () => Promise;\n\t\"FlowNodes\": () => Promise;\n\t\"ForceDirected\": () => Promise;\n\t\"FunnelSeries\": () => Promise;\n\t\"FunnelSlice\": () => Promise;\n\t\"GaplessDateAxis\": () => Promise;\n\t\"Gradient\": () => Promise;\n\t\"GrainPattern\": () => Promise;\n\t\"Graphics\": () => Promise;\n\t\"GraticuleSeries\": () => Promise;\n\t\"Grid\": () => Promise;\n\t\"GridLayout\": () => Promise;\n\t\"HeatLegend\": () => Promise;\n\t\"Hierarchy\": () => Promise;\n\t\"HierarchyLink\": () => Promise;\n\t\"HierarchyNode\": () => Promise;\n\t\"HorizontalLayout\": () => Promise;\n\t\"HorizontalLineSeries\": () => Promise;\n\t\"HorizontalRaySeries\": () => Promise;\n\t\"IconControl\": () => Promise;\n\t\"IconSeries\": () => Promise;\n\t\"Indicator\": () => Promise;\n\t\"IndicatorControl\": () => Promise;\n\t\"InterfaceColors\": () => Promise;\n\t\"IntervalControl\": () => Promise;\n\t\"Label\": () => Promise;\n\t\"LabelSeries\": () => Promise;\n\t\"Layout\": () => Promise;\n\t\"Legend\": () => Promise;\n\t\"Line\": () => Promise;\n\t\"LinePattern\": () => Promise;\n\t\"LineSeries\": () => Promise;\n\t\"LinearGradient\": () => Promise;\n\t\"LinkedHierarchy\": () => Promise;\n\t\"LinkedHierarchyNode\": () => Promise;\n\t\"MACD\": () => Promise;\n\t\"MACross\": () => Promise;\n\t\"MapChart\": () => Promise;\n\t\"MapLine\": () => Promise;\n\t\"MapLineSeries\": () => Promise;\n\t\"MapPointSeries\": () => Promise;\n\t\"MapPolygon\": () => Promise;\n\t\"MapPolygonSeries\": () => Promise;\n\t\"MapSeries\": () => Promise;\n\t\"Measure\": () => Promise;\n\t\"MedianPrice\": () => Promise;\n\t\"Modal\": () => Promise;\n\t\"Momentum\": () => Promise;\n\t\"MovingAverage\": () => Promise;\n\t\"MovingAverageDeviation\": () => Promise;\n\t\"MovingAverageEnvelope\": () => Promise;\n\t\"OHLC\": () => Promise;\n\t\"OHLCSeries\": () => Promise;\n\t\"OnBalanceVolume\": () => Promise;\n\t\"OverboughtOversold\": () => Promise;\n\t\"PVT\": () => Promise;\n\t\"Pack\": () => Promise;\n\t\"PanelControls\": () => Promise;\n\t\"ParallelChannelSeries\": () => Promise;\n\t\"Partition\": () => Promise;\n\t\"PathPattern\": () => Promise;\n\t\"Pattern\": () => Promise;\n\t\"PercentChart\": () => Promise;\n\t\"PercentSeries\": () => Promise;\n\t\"PeriodSelector\": () => Promise;\n\t\"PictorialStackedSeries\": () => Promise;\n\t\"Picture\": () => Promise;\n\t\"PicturePattern\": () => Promise;\n\t\"PieChart\": () => Promise;\n\t\"PieSeries\": () => Promise;\n\t\"PointedRectangle\": () => Promise;\n\t\"Polygon\": () => Promise;\n\t\"PolylineSeries\": () => Promise;\n\t\"PyramidSeries\": () => Promise;\n\t\"QuadrantLineSeries\": () => Promise;\n\t\"RadarChart\": () => Promise;\n\t\"RadarColumnSeries\": () => Promise;\n\t\"RadarCursor\": () => Promise;\n\t\"RadarLineSeries\": () => Promise;\n\t\"RadialGradient\": () => Promise;\n\t\"RadialLabel\": () => Promise;\n\t\"RadialText\": () => Promise;\n\t\"Rectangle\": () => Promise;\n\t\"RectanglePattern\": () => Promise;\n\t\"RectangleSeries\": () => Promise;\n\t\"RegressionSeries\": () => Promise;\n\t\"RelativeStrengthIndex\": () => Promise;\n\t\"ResetControl\": () => Promise;\n\t\"RoundedRectangle\": () => Promise;\n\t\"Sankey\": () => Promise;\n\t\"SankeyLink\": () => Promise;\n\t\"SankeyNodes\": () => Promise;\n\t\"Scrollbar\": () => Promise;\n\t\"SerialChart\": () => Promise;\n\t\"Serializer\": () => Promise;\n\t\"Series\": () => Promise;\n\t\"SeriesTypeControl\": () => Promise;\n\t\"SettingsControl\": () => Promise;\n\t\"SettingsModal\": () => Promise;\n\t\"SimpleLineSeries\": () => Promise;\n\t\"Slice\": () => Promise;\n\t\"SliceGrouper\": () => Promise;\n\t\"SlicedChart\": () => Promise;\n\t\"Slider\": () => Promise;\n\t\"SmoothedRadarLineSeries\": () => Promise;\n\t\"SmoothedXLineSeries\": () => Promise;\n\t\"SmoothedXYLineSeries\": () => Promise;\n\t\"SmoothedYLineSeries\": () => Promise;\n\t\"Sprite\": () => Promise;\n\t\"SpriteResizer\": () => Promise;\n\t\"StandardDeviation\": () => Promise;\n\t\"Star\": () => Promise;\n\t\"StepLineSeries\": () => Promise;\n\t\"StochasticMomentumIndex\": () => Promise;\n\t\"StochasticOscillator\": () => Promise;\n\t\"StockChart\": () => Promise;\n\t\"StockControl\": () => Promise;\n\t\"StockLegend\": () => Promise;\n\t\"StockPanel\": () => Promise;\n\t\"StockToolbar\": () => Promise;\n\t\"Sunburst\": () => Promise;\n\t\"Text\": () => Promise;\n\t\"Tick\": () => Promise;\n\t\"Tooltip\": () => Promise;\n\t\"Tree\": () => Promise;\n\t\"Treemap\": () => Promise;\n\t\"TrendLineSeries\": () => Promise;\n\t\"Triangle\": () => Promise;\n\t\"Trix\": () => Promise;\n\t\"TypicalPrice\": () => Promise;\n\t\"VWAP\": () => Promise;\n\t\"ValueAxis\": () => Promise;\n\t\"Venn\": () => Promise;\n\t\"VerticalLayout\": () => Promise;\n\t\"VerticalLineSeries\": () => Promise;\n\t\"Volume\": () => Promise;\n\t\"VolumeProfile\": () => Promise;\n\t\"VoronoiTreemap\": () => Promise;\n\t\"WilliamsR\": () => Promise;\n\t\"WordCloud\": () => Promise;\n\t\"XYChart\": () => Promise;\n\t\"XYChartScrollbar\": () => Promise;\n\t\"XYCursor\": () => Promise;\n\t\"XYSeries\": () => Promise;\n\t\"ZigZag\": () => Promise;\n\t\"ZoomControl\": () => Promise;\n}\n\nconst classes: IClasses = {\n\t\"AccelerationBands\": () => import(/* webpackExports: \"AccelerationBands\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.AccelerationBands),\n\t\"AccumulationDistribution\": () => import(/* webpackExports: \"AccumulationDistribution\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.AccumulationDistribution),\n\t\"AccumulativeSwingIndex\": () => import(/* webpackExports: \"AccumulativeSwingIndex\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.AccumulativeSwingIndex),\n\t\"Annotator\": () => import(/* webpackExports: \"Annotator\", webpackMode: \"weak\" */ \"./../../../plugins/exporting\").then((m) => m.Annotator),\n\t\"ArcDiagram\": () => import(/* webpackExports: \"ArcDiagram\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ArcDiagram),\n\t\"ArcDiagramLink\": () => import(/* webpackExports: \"ArcDiagramLink\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ArcDiagramLink),\n\t\"ArcDiagramNodes\": () => import(/* webpackExports: \"ArcDiagramNodes\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ArcDiagramNodes),\n\t\"Aroon\": () => import(/* webpackExports: \"Aroon\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Aroon),\n\t\"AverageSeries\": () => import(/* webpackExports: \"AverageSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.AverageSeries),\n\t\"AwesomeOscillator\": () => import(/* webpackExports: \"AwesomeOscillator\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.AwesomeOscillator),\n\t\"Axis\": () => import(/* webpackExports: \"Axis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.Axis),\n\t\"AxisBullet\": () => import(/* webpackExports: \"AxisBullet\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisBullet),\n\t\"AxisLabel\": () => import(/* webpackExports: \"AxisLabel\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisLabel),\n\t\"AxisLabelRadial\": () => import(/* webpackExports: \"AxisLabelRadial\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisLabelRadial),\n\t\"AxisRenderer\": () => import(/* webpackExports: \"AxisRenderer\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisRenderer),\n\t\"AxisRendererCircular\": () => import(/* webpackExports: \"AxisRendererCircular\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.AxisRendererCircular),\n\t\"AxisRendererRadial\": () => import(/* webpackExports: \"AxisRendererRadial\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.AxisRendererRadial),\n\t\"AxisRendererX\": () => import(/* webpackExports: \"AxisRendererX\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisRendererX),\n\t\"AxisRendererY\": () => import(/* webpackExports: \"AxisRendererY\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisRendererY),\n\t\"AxisTick\": () => import(/* webpackExports: \"AxisTick\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.AxisTick),\n\t\"BaseColumnSeries\": () => import(/* webpackExports: \"BaseColumnSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.BaseColumnSeries),\n\t\"BollingerBands\": () => import(/* webpackExports: \"BollingerBands\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.BollingerBands),\n\t\"BreadcrumbBar\": () => import(/* webpackExports: \"BreadcrumbBar\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.BreadcrumbBar),\n\t\"BullBearPower\": () => import(/* webpackExports: \"BullBearPower\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.BullBearPower),\n\t\"Bullet\": () => import(/* webpackExports: \"Bullet\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Bullet),\n\t\"Button\": () => import(/* webpackExports: \"Button\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Button),\n\t\"CalloutSeries\": () => import(/* webpackExports: \"CalloutSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.CalloutSeries),\n\t\"Candlestick\": () => import(/* webpackExports: \"Candlestick\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.Candlestick),\n\t\"CandlestickSeries\": () => import(/* webpackExports: \"CandlestickSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.CandlestickSeries),\n\t\"CategoryAxis\": () => import(/* webpackExports: \"CategoryAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.CategoryAxis),\n\t\"CategoryDateAxis\": () => import(/* webpackExports: \"CategoryDateAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.CategoryDateAxis),\n\t\"ChaikinMoneyFlow\": () => import(/* webpackExports: \"ChaikinMoneyFlow\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ChaikinMoneyFlow),\n\t\"ChaikinOscillator\": () => import(/* webpackExports: \"ChaikinOscillator\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ChaikinOscillator),\n\t\"Chart\": () => import(/* webpackExports: \"Chart\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Chart),\n\t\"ChartIndicator\": () => import(/* webpackExports: \"ChartIndicator\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ChartIndicator),\n\t\"Chord\": () => import(/* webpackExports: \"Chord\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.Chord),\n\t\"ChordDirected\": () => import(/* webpackExports: \"ChordDirected\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ChordDirected),\n\t\"ChordLink\": () => import(/* webpackExports: \"ChordLink\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ChordLink),\n\t\"ChordLinkDirected\": () => import(/* webpackExports: \"ChordLinkDirected\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ChordLinkDirected),\n\t\"ChordNodes\": () => import(/* webpackExports: \"ChordNodes\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ChordNodes),\n\t\"ChordNonRibbon\": () => import(/* webpackExports: \"ChordNonRibbon\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.ChordNonRibbon),\n\t\"Circle\": () => import(/* webpackExports: \"Circle\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Circle),\n\t\"CirclePattern\": () => import(/* webpackExports: \"CirclePattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.CirclePattern),\n\t\"ClockHand\": () => import(/* webpackExports: \"ClockHand\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.ClockHand),\n\t\"ClusteredPointSeries\": () => import(/* webpackExports: \"ClusteredPointSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.ClusteredPointSeries),\n\t\"ColorControl\": () => import(/* webpackExports: \"ColorControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ColorControl),\n\t\"ColorSet\": () => import(/* webpackExports: \"ColorSet\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.ColorSet),\n\t\"ColumnSeries\": () => import(/* webpackExports: \"ColumnSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.ColumnSeries),\n\t\"CommodityChannelIndex\": () => import(/* webpackExports: \"CommodityChannelIndex\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.CommodityChannelIndex),\n\t\"ComparisonControl\": () => import(/* webpackExports: \"ComparisonControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ComparisonControl),\n\t\"Component\": () => import(/* webpackExports: \"Component\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Component),\n\t\"Container\": () => import(/* webpackExports: \"Container\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Container),\n\t\"DataSaveControl\": () => import(/* webpackExports: \"DataSaveControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DataSaveControl),\n\t\"DateAxis\": () => import(/* webpackExports: \"DateAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.DateAxis),\n\t\"DateRangeSelector\": () => import(/* webpackExports: \"DateRangeSelector\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DateRangeSelector),\n\t\"DisparityIndex\": () => import(/* webpackExports: \"DisparityIndex\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DisparityIndex),\n\t\"DoodleSeries\": () => import(/* webpackExports: \"DoodleSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DoodleSeries),\n\t\"DrawingControl\": () => import(/* webpackExports: \"DrawingControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DrawingControl),\n\t\"DrawingSeries\": () => import(/* webpackExports: \"DrawingSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DrawingSeries),\n\t\"DrawingToolControl\": () => import(/* webpackExports: \"DrawingToolControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DrawingToolControl),\n\t\"Dropdown\": () => import(/* webpackExports: \"Dropdown\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Dropdown),\n\t\"DropdownColors\": () => import(/* webpackExports: \"DropdownColors\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DropdownColors),\n\t\"DropdownControl\": () => import(/* webpackExports: \"DropdownControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DropdownControl),\n\t\"DropdownList\": () => import(/* webpackExports: \"DropdownList\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DropdownList),\n\t\"DropdownListControl\": () => import(/* webpackExports: \"DropdownListControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.DropdownListControl),\n\t\"DurationAxis\": () => import(/* webpackExports: \"DurationAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.DurationAxis),\n\t\"Ellipse\": () => import(/* webpackExports: \"Ellipse\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Ellipse),\n\t\"EllipseSeries\": () => import(/* webpackExports: \"EllipseSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.EllipseSeries),\n\t\"Entity\": () => import(/* webpackExports: \"Entity\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Entity),\n\t\"Exporting\": () => import(/* webpackExports: \"Exporting\", webpackMode: \"weak\" */ \"./../../../plugins/exporting\").then((m) => m.Exporting),\n\t\"ExportingMenu\": () => import(/* webpackExports: \"ExportingMenu\", webpackMode: \"weak\" */ \"./../../../plugins/exporting\").then((m) => m.ExportingMenu),\n\t\"FibonacciSeries\": () => import(/* webpackExports: \"FibonacciSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.FibonacciSeries),\n\t\"FibonacciTimezoneSeries\": () => import(/* webpackExports: \"FibonacciTimezoneSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.FibonacciTimezoneSeries),\n\t\"Flow\": () => import(/* webpackExports: \"Flow\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.Flow),\n\t\"FlowLink\": () => import(/* webpackExports: \"FlowLink\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.FlowLink),\n\t\"FlowNode\": () => import(/* webpackExports: \"FlowNode\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.FlowNode),\n\t\"FlowNodes\": () => import(/* webpackExports: \"FlowNodes\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.FlowNodes),\n\t\"ForceDirected\": () => import(/* webpackExports: \"ForceDirected\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.ForceDirected),\n\t\"FunnelSeries\": () => import(/* webpackExports: \"FunnelSeries\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.FunnelSeries),\n\t\"FunnelSlice\": () => import(/* webpackExports: \"FunnelSlice\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.FunnelSlice),\n\t\"GaplessDateAxis\": () => import(/* webpackExports: \"GaplessDateAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.GaplessDateAxis),\n\t\"Gradient\": () => import(/* webpackExports: \"Gradient\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Gradient),\n\t\"GrainPattern\": () => import(/* webpackExports: \"GrainPattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.GrainPattern),\n\t\"Graphics\": () => import(/* webpackExports: \"Graphics\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Graphics),\n\t\"GraticuleSeries\": () => import(/* webpackExports: \"GraticuleSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.GraticuleSeries),\n\t\"Grid\": () => import(/* webpackExports: \"Grid\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.Grid),\n\t\"GridLayout\": () => import(/* webpackExports: \"GridLayout\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.GridLayout),\n\t\"HeatLegend\": () => import(/* webpackExports: \"HeatLegend\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.HeatLegend),\n\t\"Hierarchy\": () => import(/* webpackExports: \"Hierarchy\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Hierarchy),\n\t\"HierarchyLink\": () => import(/* webpackExports: \"HierarchyLink\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.HierarchyLink),\n\t\"HierarchyNode\": () => import(/* webpackExports: \"HierarchyNode\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.HierarchyNode),\n\t\"HorizontalLayout\": () => import(/* webpackExports: \"HorizontalLayout\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.HorizontalLayout),\n\t\"HorizontalLineSeries\": () => import(/* webpackExports: \"HorizontalLineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.HorizontalLineSeries),\n\t\"HorizontalRaySeries\": () => import(/* webpackExports: \"HorizontalRaySeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.HorizontalRaySeries),\n\t\"IconControl\": () => import(/* webpackExports: \"IconControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.IconControl),\n\t\"IconSeries\": () => import(/* webpackExports: \"IconSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.IconSeries),\n\t\"Indicator\": () => import(/* webpackExports: \"Indicator\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Indicator),\n\t\"IndicatorControl\": () => import(/* webpackExports: \"IndicatorControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.IndicatorControl),\n\t\"InterfaceColors\": () => import(/* webpackExports: \"InterfaceColors\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.InterfaceColors),\n\t\"IntervalControl\": () => import(/* webpackExports: \"IntervalControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.IntervalControl),\n\t\"Label\": () => import(/* webpackExports: \"Label\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Label),\n\t\"LabelSeries\": () => import(/* webpackExports: \"LabelSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.LabelSeries),\n\t\"Layout\": () => import(/* webpackExports: \"Layout\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Layout),\n\t\"Legend\": () => import(/* webpackExports: \"Legend\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Legend),\n\t\"Line\": () => import(/* webpackExports: \"Line\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Line),\n\t\"LinePattern\": () => import(/* webpackExports: \"LinePattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.LinePattern),\n\t\"LineSeries\": () => import(/* webpackExports: \"LineSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.LineSeries),\n\t\"LinearGradient\": () => import(/* webpackExports: \"LinearGradient\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.LinearGradient),\n\t\"LinkedHierarchy\": () => import(/* webpackExports: \"LinkedHierarchy\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.LinkedHierarchy),\n\t\"LinkedHierarchyNode\": () => import(/* webpackExports: \"LinkedHierarchyNode\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.LinkedHierarchyNode),\n\t\"MACD\": () => import(/* webpackExports: \"MACD\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MACD),\n\t\"MACross\": () => import(/* webpackExports: \"MACross\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MACross),\n\t\"MapChart\": () => import(/* webpackExports: \"MapChart\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapChart),\n\t\"MapLine\": () => import(/* webpackExports: \"MapLine\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapLine),\n\t\"MapLineSeries\": () => import(/* webpackExports: \"MapLineSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapLineSeries),\n\t\"MapPointSeries\": () => import(/* webpackExports: \"MapPointSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapPointSeries),\n\t\"MapPolygon\": () => import(/* webpackExports: \"MapPolygon\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapPolygon),\n\t\"MapPolygonSeries\": () => import(/* webpackExports: \"MapPolygonSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapPolygonSeries),\n\t\"MapSeries\": () => import(/* webpackExports: \"MapSeries\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.MapSeries),\n\t\"Measure\": () => import(/* webpackExports: \"Measure\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Measure),\n\t\"MedianPrice\": () => import(/* webpackExports: \"MedianPrice\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MedianPrice),\n\t\"Modal\": () => import(/* webpackExports: \"Modal\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Modal),\n\t\"Momentum\": () => import(/* webpackExports: \"Momentum\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Momentum),\n\t\"MovingAverage\": () => import(/* webpackExports: \"MovingAverage\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MovingAverage),\n\t\"MovingAverageDeviation\": () => import(/* webpackExports: \"MovingAverageDeviation\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MovingAverageDeviation),\n\t\"MovingAverageEnvelope\": () => import(/* webpackExports: \"MovingAverageEnvelope\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.MovingAverageEnvelope),\n\t\"OHLC\": () => import(/* webpackExports: \"OHLC\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.OHLC),\n\t\"OHLCSeries\": () => import(/* webpackExports: \"OHLCSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.OHLCSeries),\n\t\"OnBalanceVolume\": () => import(/* webpackExports: \"OnBalanceVolume\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.OnBalanceVolume),\n\t\"OverboughtOversold\": () => import(/* webpackExports: \"OverboughtOversold\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.OverboughtOversold),\n\t\"PVT\": () => import(/* webpackExports: \"PVT\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.PVT),\n\t\"Pack\": () => import(/* webpackExports: \"Pack\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Pack),\n\t\"PanelControls\": () => import(/* webpackExports: \"PanelControls\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.PanelControls),\n\t\"ParallelChannelSeries\": () => import(/* webpackExports: \"ParallelChannelSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ParallelChannelSeries),\n\t\"Partition\": () => import(/* webpackExports: \"Partition\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Partition),\n\t\"PathPattern\": () => import(/* webpackExports: \"PathPattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.PathPattern),\n\t\"Pattern\": () => import(/* webpackExports: \"Pattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Pattern),\n\t\"PercentChart\": () => import(/* webpackExports: \"PercentChart\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PercentChart),\n\t\"PercentSeries\": () => import(/* webpackExports: \"PercentSeries\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PercentSeries),\n\t\"PeriodSelector\": () => import(/* webpackExports: \"PeriodSelector\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.PeriodSelector),\n\t\"PictorialStackedSeries\": () => import(/* webpackExports: \"PictorialStackedSeries\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PictorialStackedSeries),\n\t\"Picture\": () => import(/* webpackExports: \"Picture\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Picture),\n\t\"PicturePattern\": () => import(/* webpackExports: \"PicturePattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.PicturePattern),\n\t\"PieChart\": () => import(/* webpackExports: \"PieChart\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PieChart),\n\t\"PieSeries\": () => import(/* webpackExports: \"PieSeries\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PieSeries),\n\t\"PointedRectangle\": () => import(/* webpackExports: \"PointedRectangle\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.PointedRectangle),\n\t\"Polygon\": () => import(/* webpackExports: \"Polygon\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Polygon),\n\t\"PolylineSeries\": () => import(/* webpackExports: \"PolylineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.PolylineSeries),\n\t\"PyramidSeries\": () => import(/* webpackExports: \"PyramidSeries\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.PyramidSeries),\n\t\"QuadrantLineSeries\": () => import(/* webpackExports: \"QuadrantLineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.QuadrantLineSeries),\n\t\"RadarChart\": () => import(/* webpackExports: \"RadarChart\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.RadarChart),\n\t\"RadarColumnSeries\": () => import(/* webpackExports: \"RadarColumnSeries\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.RadarColumnSeries),\n\t\"RadarCursor\": () => import(/* webpackExports: \"RadarCursor\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.RadarCursor),\n\t\"RadarLineSeries\": () => import(/* webpackExports: \"RadarLineSeries\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.RadarLineSeries),\n\t\"RadialGradient\": () => import(/* webpackExports: \"RadialGradient\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.RadialGradient),\n\t\"RadialLabel\": () => import(/* webpackExports: \"RadialLabel\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.RadialLabel),\n\t\"RadialText\": () => import(/* webpackExports: \"RadialText\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.RadialText),\n\t\"Rectangle\": () => import(/* webpackExports: \"Rectangle\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Rectangle),\n\t\"RectanglePattern\": () => import(/* webpackExports: \"RectanglePattern\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.RectanglePattern),\n\t\"RectangleSeries\": () => import(/* webpackExports: \"RectangleSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.RectangleSeries),\n\t\"RegressionSeries\": () => import(/* webpackExports: \"RegressionSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.RegressionSeries),\n\t\"RelativeStrengthIndex\": () => import(/* webpackExports: \"RelativeStrengthIndex\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.RelativeStrengthIndex),\n\t\"ResetControl\": () => import(/* webpackExports: \"ResetControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ResetControl),\n\t\"RoundedRectangle\": () => import(/* webpackExports: \"RoundedRectangle\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.RoundedRectangle),\n\t\"Sankey\": () => import(/* webpackExports: \"Sankey\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.Sankey),\n\t\"SankeyLink\": () => import(/* webpackExports: \"SankeyLink\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.SankeyLink),\n\t\"SankeyNodes\": () => import(/* webpackExports: \"SankeyNodes\", webpackMode: \"weak\" */ \"./../../../flow\").then((m) => m.SankeyNodes),\n\t\"Scrollbar\": () => import(/* webpackExports: \"Scrollbar\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Scrollbar),\n\t\"SerialChart\": () => import(/* webpackExports: \"SerialChart\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.SerialChart),\n\t\"Serializer\": () => import(/* webpackExports: \"Serializer\", webpackMode: \"weak\" */ \"./../../../plugins/json\").then((m) => m.Serializer),\n\t\"Series\": () => import(/* webpackExports: \"Series\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Series),\n\t\"SeriesTypeControl\": () => import(/* webpackExports: \"SeriesTypeControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.SeriesTypeControl),\n\t\"SettingsControl\": () => import(/* webpackExports: \"SettingsControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.SettingsControl),\n\t\"SettingsModal\": () => import(/* webpackExports: \"SettingsModal\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.SettingsModal),\n\t\"SimpleLineSeries\": () => import(/* webpackExports: \"SimpleLineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.SimpleLineSeries),\n\t\"Slice\": () => import(/* webpackExports: \"Slice\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Slice),\n\t\"SliceGrouper\": () => import(/* webpackExports: \"SliceGrouper\", webpackMode: \"weak\" */ \"./../../../plugins/sliceGrouper\").then((m) => m.SliceGrouper),\n\t\"SlicedChart\": () => import(/* webpackExports: \"SlicedChart\", webpackMode: \"weak\" */ \"./../../../percent\").then((m) => m.SlicedChart),\n\t\"Slider\": () => import(/* webpackExports: \"Slider\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Slider),\n\t\"SmoothedRadarLineSeries\": () => import(/* webpackExports: \"SmoothedRadarLineSeries\", webpackMode: \"weak\" */ \"./../../../radar\").then((m) => m.SmoothedRadarLineSeries),\n\t\"SmoothedXLineSeries\": () => import(/* webpackExports: \"SmoothedXLineSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.SmoothedXLineSeries),\n\t\"SmoothedXYLineSeries\": () => import(/* webpackExports: \"SmoothedXYLineSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.SmoothedXYLineSeries),\n\t\"SmoothedYLineSeries\": () => import(/* webpackExports: \"SmoothedYLineSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.SmoothedYLineSeries),\n\t\"Sprite\": () => import(/* webpackExports: \"Sprite\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Sprite),\n\t\"SpriteResizer\": () => import(/* webpackExports: \"SpriteResizer\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.SpriteResizer),\n\t\"StandardDeviation\": () => import(/* webpackExports: \"StandardDeviation\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StandardDeviation),\n\t\"Star\": () => import(/* webpackExports: \"Star\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Star),\n\t\"StepLineSeries\": () => import(/* webpackExports: \"StepLineSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.StepLineSeries),\n\t\"StochasticMomentumIndex\": () => import(/* webpackExports: \"StochasticMomentumIndex\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StochasticMomentumIndex),\n\t\"StochasticOscillator\": () => import(/* webpackExports: \"StochasticOscillator\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StochasticOscillator),\n\t\"StockChart\": () => import(/* webpackExports: \"StockChart\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StockChart),\n\t\"StockControl\": () => import(/* webpackExports: \"StockControl\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StockControl),\n\t\"StockLegend\": () => import(/* webpackExports: \"StockLegend\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StockLegend),\n\t\"StockPanel\": () => import(/* webpackExports: \"StockPanel\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StockPanel),\n\t\"StockToolbar\": () => import(/* webpackExports: \"StockToolbar\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.StockToolbar),\n\t\"Sunburst\": () => import(/* webpackExports: \"Sunburst\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Sunburst),\n\t\"Text\": () => import(/* webpackExports: \"Text\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Text),\n\t\"Tick\": () => import(/* webpackExports: \"Tick\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Tick),\n\t\"Tooltip\": () => import(/* webpackExports: \"Tooltip\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Tooltip),\n\t\"Tree\": () => import(/* webpackExports: \"Tree\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Tree),\n\t\"Treemap\": () => import(/* webpackExports: \"Treemap\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.Treemap),\n\t\"TrendLineSeries\": () => import(/* webpackExports: \"TrendLineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.TrendLineSeries),\n\t\"Triangle\": () => import(/* webpackExports: \"Triangle\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.Triangle),\n\t\"Trix\": () => import(/* webpackExports: \"Trix\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Trix),\n\t\"TypicalPrice\": () => import(/* webpackExports: \"TypicalPrice\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.TypicalPrice),\n\t\"VWAP\": () => import(/* webpackExports: \"VWAP\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.VWAP),\n\t\"ValueAxis\": () => import(/* webpackExports: \"ValueAxis\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.ValueAxis),\n\t\"Venn\": () => import(/* webpackExports: \"Venn\", webpackMode: \"weak\" */ \"./../../../venn\").then((m) => m.Venn),\n\t\"VerticalLayout\": () => import(/* webpackExports: \"VerticalLayout\", webpackMode: \"weak\" */ \"./../../../index\").then((m) => m.VerticalLayout),\n\t\"VerticalLineSeries\": () => import(/* webpackExports: \"VerticalLineSeries\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.VerticalLineSeries),\n\t\"Volume\": () => import(/* webpackExports: \"Volume\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.Volume),\n\t\"VolumeProfile\": () => import(/* webpackExports: \"VolumeProfile\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.VolumeProfile),\n\t\"VoronoiTreemap\": () => import(/* webpackExports: \"VoronoiTreemap\", webpackMode: \"weak\" */ \"./../../../hierarchy\").then((m) => m.VoronoiTreemap),\n\t\"WilliamsR\": () => import(/* webpackExports: \"WilliamsR\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.WilliamsR),\n\t\"WordCloud\": () => import(/* webpackExports: \"WordCloud\", webpackMode: \"weak\" */ \"./../../../wc\").then((m) => m.WordCloud),\n\t\"XYChart\": () => import(/* webpackExports: \"XYChart\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.XYChart),\n\t\"XYChartScrollbar\": () => import(/* webpackExports: \"XYChartScrollbar\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.XYChartScrollbar),\n\t\"XYCursor\": () => import(/* webpackExports: \"XYCursor\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.XYCursor),\n\t\"XYSeries\": () => import(/* webpackExports: \"XYSeries\", webpackMode: \"weak\" */ \"./../../../xy\").then((m) => m.XYSeries),\n\t\"ZigZag\": () => import(/* webpackExports: \"ZigZag\", webpackMode: \"weak\" */ \"./../../../stock\").then((m) => m.ZigZag),\n\t\"ZoomControl\": () => import(/* webpackExports: \"ZoomControl\", webpackMode: \"weak\" */ \"./../../../map\").then((m) => m.ZoomControl),\n};\n\nexport default classes;\n","import type { Root } from \"../../core/Root\";\n\nimport { Entity } from \"../../core/util/Entity\";\nimport { Sprite } from \"../../core/render/Sprite\";\nimport { Container } from \"../../core/render/Container\";\nimport { Color } from \"../../core/util/Color\";\nimport { Percent } from \"../../core/util/Percent\";\nimport { Template } from \"../../core/util/Template\";\n\nimport * as $type from \"../../core/util/Type\";\nimport * as $array from \"../../core/util/Array\";\nimport * as $object from \"../../core/util/Object\";\n\nimport type { IClasses } from \"./Classes\";\nimport classes from \"./Classes\";\n\n\ninterface IRef {\n\t[key: string]: any;\n}\n\n\nfunction isObject(value: any): value is { [key: string]: any } {\n\treturn $type.isObject(value);\n}\n\n\nfunction lookupRef(refs: Array, name: string): any {\n\tlet i = refs.length;\n\n\twhile (i--) {\n\t\tconst sub = refs[i];\n\n\t\tif (name in sub) {\n\t\t\treturn sub[name];\n\t\t}\n\t}\n\n\tthrow new Error(\"Could not find ref \" + name);\n}\n\n\ninterface IAdapter {\n\tkey: keyof E[\"_settings\"],\n\tcallback: (value: E[\"_settings\"][this[\"key\"]], target: E, key: this[\"key\"]) => E[\"_settings\"][this[\"key\"]],\n}\n\ntype IParsedProperties = Array<(entity: object) => void>;\n\ntype IRefs = { [key: string]: any } | Array<{ [key: string]: any }>;\n\ninterface IChild {\n\tindex: number | undefined,\n\tvalue: Sprite,\n}\n\ninterface IParsedEntity {\n\tisValue: false,\n\ttype: string | undefined,\n\tconstruct: typeof Entity | undefined,\n\tsettings: object | undefined,\n\tadapters: Array> | undefined,\n\tchildren: Array | undefined,\n\tproperties: IParsedProperties | undefined,\n\tindex: number | undefined,\n\tvalue: object,\n}\n\ntype IParsed\n\t= IParsedEntity\n\t| { isValue: true, value: any };\n\n\nfunction parseRef(value: string, refs: Array): IParsed {\n\tif (value[0] === \"#\" || value[0] === \"@\") {\n\t\tif (value[1] === value[0]) {\n\t\t\t// \"##foo\" or \"@@foo\" gets escaped into the literal strings \"#foo\" or \"@foo\"\n\t\t\treturn {\n\t\t\t\tisValue: true,\n\t\t\t\tvalue: value.slice(1),\n\t\t\t};\n\n\t\t} else {\n\t\t\tconst path = value.split(/\\./g);\n\n\t\t\tlet object = lookupRef(refs, path[0]);\n\n\t\t\tfor (let i = 1; i < path.length; ++i) {\n\t\t\t\tconst subpath = path[i];\n\n\t\t\t\t// Supports `#foo.get(\"bar\")` and `#foo.get('bar')` syntax\n\t\t\t\tconst parsed = /get\\(([\"'])([^\\1]*)\\1\\)/.exec(subpath);\n\n\t\t\t\tif (parsed) {\n\t\t\t\t\tobject = object.get(parsed[2]);\n\n\t\t\t\t} else {\n\t\t\t\t\tobject = object[subpath];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisValue: true,\n\t\t\t\tvalue: object,\n\t\t\t};\n\t\t}\n\n\t} else {\n\t\treturn {\n\t\t\tisValue: true,\n\t\t\tvalue,\n\t\t};\n\t}\n}\n\n\nfunction mergeObject(entity: object, parsed: IParsedEntity): void {\n\tif (parsed.properties) {\n\t\t$array.each(parsed.properties, (fn) => {\n\t\t\tfn(entity);\n\t\t});\n\t}\n}\n\nfunction mergeEntity(entity: E, parsed: IParsedEntity): void {\n\tmergeObject(entity, parsed);\n\n\tif (parsed.adapters) {\n\t\t$array.each(parsed.adapters, (adapter) => {\n\t\t\tentity.adapters.add(adapter.key, adapter.callback);\n\t\t});\n\t}\n\n\tif (entity instanceof Container) {\n\t\tif (parsed.children) {\n\t\t\tparsed.children.forEach((child) => {\n\t\t\t\tif (child.index == null) {\n\t\t\t\t\tentity.children.push(child.value);\n\n\t\t\t\t} else {\n\t\t\t\t\tentity.children.insertIndex(child.index, child.value);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction mergeExisting(entity: E, parsed: IParsedEntity): void {\n\tif (parsed.settings) {\n\t\tentity.setAll(parsed.settings);\n\t}\n\n\tmergeEntity(entity, parsed);\n}\n\n\nfunction constructEntity(root: Root, parsed: IParsedEntity): E | object {\n\tif (!parsed.construct) {\n\t\treturn parsed.value;\n\t}\n\n\tconst entity = parsed.construct.new(root, parsed.settings || {}) as E;\n\n\tmergeEntity(entity, parsed);\n\n\treturn entity;\n}\n\n\nclass ParserState {\n\tprotected _caching: { [key: string]: Promise } = {};\n\tprotected _cache: { [key: string]: typeof Entity } = {};\n\tprotected _delayed: Array<() => void> = [];\n\n\n\tafterParse(): void {\n\t\tthis._delayed.forEach((f) => {\n\t\t\tf();\n\t\t});\n\t}\n\n\n\tgetClass(name: string): typeof Entity {\n\t\treturn this._cache[name];\n\t}\n\n\tasync storeClass(name: string): Promise {\n\t\tconst promise = classes[name as keyof IClasses];\n\t\tthis._cache[name] = await promise() as typeof Entity;\n\t}\n\n\tcacheClass(name: string): Promise {\n\t\tlet promise = this._caching[name];\n\n\t\tif (promise == null) {\n\t\t\tpromise = this._caching[name] = this.storeClass(name);\n\t\t}\n\n\t\treturn promise;\n\t}\n\n\n\tasync parseAsyncArray(array: Array): Promise {\n\t\tawait Promise.all($array.map(array, (x) => this.parseAsync(x)));\n\t}\n\n\tasync parseAsyncObject(object: object): Promise {\n\t\tawait Promise.all($array.map($object.keys(object), (key) => this.parseAsync(object[key])));\n\t}\n\n\tasync parseAsyncSettings(object: object): Promise {\n\t\tawait Promise.all($array.map($object.keys(object), (key) => this.parseAsyncSetting(key, object[key])));\n\t}\n\n\tasync parseAsyncSetting(key: string, value: unknown): Promise {\n\t\tif (key !== \"geoJSON\") {\n\t\t\tawait this.parseAsync(value);\n\t\t}\n\t}\n\n\tasync parseAsyncRefs(refs: Array | object): Promise {\n\t\tif ($type.isArray(refs)) {\n\t\t\tawait Promise.all($array.map(refs, (x) => this.parseAsyncRefs(x)));\n\n\t\t} else {\n\t\t\tawait this.parseAsyncObject(refs);\n\t\t}\n\t}\n\n\tasync parseAsync(value: unknown): Promise {\n\t\tif ($type.isArray(value)) {\n\t\t\tawait this.parseAsyncArray(value);\n\n\t\t} else if (isObject(value)) {\n\t\t\tif (value.type === \"Color\" || value.type === \"Percent\") {\n\t\t\t\t// Do nothing\n\n\t\t\t} else if (value.type === \"Template\") {\n\t\t\t\tawait Promise.all([\n\t\t\t\t\t(value.refs ? this.parseAsyncRefs(value.refs) : Promise.resolve(undefined)),\n\t\t\t\t\t(value.settings ? this.parseAsyncObject(value.settings) : Promise.resolve(undefined)),\n\t\t\t\t]);\n\n\t\t\t} else if (value.__parse === true) {\n\t\t\t\tawait this.parseAsyncObject(value);\n\n\t\t\t} else if (value.__parse !== false) {\n\t\t\t\tawait Promise.all([\n\t\t\t\t\t(value.type ? this.cacheClass(value.type) : Promise.resolve(undefined)),\n\t\t\t\t\t(value.refs ? this.parseAsyncRefs(value.refs) : Promise.resolve(undefined)),\n\t\t\t\t\t(value.settings ? this.parseAsyncSettings(value.settings) : Promise.resolve(undefined)),\n\t\t\t\t\t(value.properties ? this.parseAsyncObject(value.properties) : Promise.resolve(undefined)),\n\t\t\t\t\t(value.children ? this.parseAsyncArray(value.children) : Promise.resolve(undefined)),\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tparseObject(root: Root, object: object, refs: Array): object {\n\t\tconst output: { [key: string]: any } = {};\n\n\t\t$array.each($object.keys(object), (key) => {\n\t\t\toutput[key] = this.parse(root, object[key], refs);\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tparseArray(root: Root, value: Array, refs: Array): Array {\n\t\treturn $array.map(value, (value) => this.parse(root, value, refs));\n\t}\n\n\tparseChildren(root: Root, value: Array<{ [key: string]: any } | string>, refs: Array): Array {\n\t\treturn $array.map(value, (value) => this.parseChild(root, value, refs));\n\t}\n\n\tparseStops(root: Root, value: Array, refs: Array): Array {\n\t\treturn $array.map(value, (value) => this.parseObject(root, value, refs));\n\t}\n\n\tparseSetting(root: Root, key: string, value: unknown, refs: Array): unknown {\n\t\tif (key === \"layout\") {\n\t\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\treturn root.horizontalLayout;\n\t\t\tcase \"vertical\":\n\t\t\t\treturn root.verticalLayout;\n\t\t\tcase \"grid\":\n\t\t\t\treturn root.gridLayout;\n\t\t\t}\n\n\t\t}\n\n\t\tif (key === \"geoJSON\") {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (key === \"stops\") {\n\t\t\treturn this.parseStops(root, value as Array, refs);\n\t\t}\n\n\t\treturn this.parse(root, value, refs);\n\t}\n\n\tparseSettings(root: Root, object: object, refs: Array): E[\"_settings\"] {\n\t\tconst settings: { [key: string]: any } = {};\n\n\t\t$array.each($object.keys(object), (key) => {\n\t\t\tsettings[key] = this.parseSetting(root, key, object[key], refs);\n\t\t});\n\n\t\treturn settings;\n\t}\n\n\n\tparseProperties(root: Root, object: object, refs: Array): IParsedProperties {\n\t\treturn $array.map($object.keys(object), (key) => {\n\t\t\tconst rawValue = object[key];\n\n\t\t\treturn (entity: object) => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tconst parsed = this.parseValue(root, rawValue, refs);\n\n\t\t\t\t\tconst old = entity[key] as unknown;\n\n\t\t\t\t\tif (old) {\n\t\t\t\t\t\tif (parsed.isValue) {\n\t\t\t\t\t\t\t// Merge Array into List\n\t\t\t\t\t\t\tif ($type.isArray(parsed.value)) {\n\t\t\t\t\t\t\t\t$array.each(parsed.value, (value) => {\n\t\t\t\t\t\t\t\t\t(old as any).push(value);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t(entity as any)[key] = parsed.value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (parsed.construct) {\n\t\t\t\t\t\t\t(entity as any)[key] = constructEntity(root, parsed);\n\n\t\t\t\t\t\t// Merge into existing Entity or Template\n\t\t\t\t\t\t} else if (old instanceof Entity || old instanceof Template) {\n\t\t\t\t\t\t\tmergeExisting(old as Entity, parsed);\n\n\t\t\t\t\t\t// Merge into existing object\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeObject(old as object, parsed);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (parsed.isValue) {\n\t\t\t\t\t\t\t(entity as any)[key] = parsed.value;\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t(entity as any)[key] = constructEntity(root, parsed);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tif (key === \"data\") {\n\t\t\t\t\tthis._delayed.push(run);\n\n\t\t\t\t} else if (key === \"bullets\") {\n\t\t\t\t\tconst old = entity[key] as unknown;\n\n\t\t\t\t\t$type.assert(old != null);\n\t\t\t\t\t$type.assert($type.isArray(rawValue));\n\n\t\t\t\t\t$array.each(rawValue, (value) => {\n\t\t\t\t\t\t(old as any).push((_: unknown, series: unknown) => {\n\t\t\t\t\t\t\tconst newRefs = refs.concat([{ \"@series\": series }]);\n\t\t\t\t\t\t\treturn this.parse(root, value, newRefs);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t} else {\n\t\t\t\t\trun();\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\n\tparseRefsObject(root: Root, object: { [key: string]: any }, refs: Array): IRef {\n\t\tconst newRefs: IRef = {};\n\n\t\t$array.each($object.keys(object), (key) => {\n\t\t\tnewRefs[\"#\" + key] = this.parse(root, object[key], refs);\n\t\t});\n\n\t\treturn newRefs;\n\t}\n\n\tparseRefs(root: Root, object: IRefs, refs: Array): Array {\n\t\tif ($type.isArray(object)) {\n\t\t\tconst length = object.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\trefs = refs.concat([this.parseRefsObject(root, object[i] as any, refs)]);\n\t\t\t}\n\n\t\t} else {\n\t\t\trefs = refs.concat([this.parseRefsObject(root, object, refs)]);\n\t\t}\n\n\t\treturn refs;\n\t}\n\n\n\tparseChild(root: Root, value: { [key: string]: any } | string, refs: Array): IChild {\n\t\tif ($type.isString(value)) {\n\t\t\treturn {\n\t\t\t\tindex: undefined,\n\t\t\t\tvalue: parseRef(value, refs).value,\n\t\t\t};\n\n\t\t} else if (value.ref != null) {\n\t\t\tconst index = (value.index == null ? undefined : value.index);\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tvalue: parseRef(value.ref, refs).value,\n\t\t\t};\n\n\t\t} else {\n\t\t\tconst parsed = this.parseEntity(root, value, refs);\n\n\t\t\treturn {\n\t\t\t\tindex: parsed.index,\n\t\t\t\tvalue: constructEntity(root, parsed) as Sprite,\n\t\t\t};\n\t\t}\n\t}\n\n\tparseEntity(root: Root, value: { [key: string]: any }, refs: Array): IParsedEntity {\n\t\tif (value.refs) {\n\t\t\trefs = this.parseRefs(root, value.refs, refs);\n\t\t}\n\n\t\tconst construct = (value.type ? this.getClass(value.type) : undefined);\n\t\tconst settings = (value.settings ? this.parseSettings(root, value.settings, refs) : undefined);\n\t\tconst properties = (value.properties ? this.parseProperties(root, value.properties, refs) : undefined);\n\t\tconst children = (value.children ? this.parseChildren(root, value.children, refs) : undefined);\n\n\t\tconst index = (value.index == null ? undefined : value.index);\n\n\t\treturn {\n\t\t\tisValue: false,\n\t\t\ttype: value.type,\n\t\t\tconstruct,\n\t\t\tsettings,\n\t\t\tadapters: value.adapters,\n\t\t\tchildren,\n\t\t\tproperties,\n\t\t\tindex,\n\t\t\tvalue,\n\t\t};\n\t}\n\n\tparseValue(root: Root, value: any, refs: Array): IParsed {\n\t\tif (value instanceof Entity) {\n\t\t\treturn { isValue: true, value: value };\n\n\t\t} else if ($type.isArray(value)) {\n\t\t\treturn {\n\t\t\t\tisValue: true,\n\t\t\t\tvalue: this.parseArray(root, value, refs),\n\t\t\t};\n\n\t\t} else if (isObject(value)) {\n\t\t\tif (value.type === \"Color\") {\n\t\t\t\treturn {\n\t\t\t\t\tisValue: true,\n\t\t\t\t\tvalue: Color.fromAny(value.value),\n\t\t\t\t};\n\n\t\t\t} else if (value.type === \"Percent\") {\n\t\t\t\treturn {\n\t\t\t\t\tisValue: true,\n\t\t\t\t\tvalue: new Percent(value.value),\n\t\t\t\t};\n\n\t\t\t} else if (value.type === \"Template\") {\n\t\t\t\tif (value.refs) {\n\t\t\t\t\trefs = this.parseRefs(root, value.refs, refs);\n\t\t\t\t}\n\n\t\t\t\tconst settings = (value.settings ? this.parseSettings(root, value.settings, refs) : {});\n\n\t\t\t\treturn {\n\t\t\t\t\tisValue: true,\n\t\t\t\t\tvalue: Template.new(settings),\n\t\t\t\t};\n\n\t\t\t} else if (value.__parse === true) {\n\t\t\t\treturn {\n\t\t\t\t\tisValue: true,\n\t\t\t\t\tvalue: this.parseObject(root, value, refs),\n\t\t\t\t};\n\n\t\t\t} else if (value.__parse === false) {\n\t\t\t\treturn {\n\t\t\t\t\tisValue: true,\n\t\t\t\t\tvalue,\n\t\t\t\t};\n\n\t\t\t} else {\n\t\t\t\treturn this.parseEntity(root, value, refs);\n\t\t\t}\n\n\t\t} else if ($type.isString(value)) {\n\t\t\treturn parseRef(value, refs);\n\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tisValue: true,\n\t\t\t\tvalue,\n\t\t\t};\n\t\t}\n\t}\n\n\tparse(root: Root, value: unknown, refs: Array): E | object {\n\t\tconst parsed = this.parseValue(root, value, refs);\n\n\t\tif (parsed.isValue) {\n\t\t\treturn parsed.value;\n\n\t\t} else {\n\t\t\treturn constructEntity(root, parsed);\n\t\t}\n\t}\n}\n\nexport interface IParseSettings {\n\tparent?: Container;\n}\n\n/**\n * A parser for JSON based chart configs.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/serializing/} for more info\n * @since 5.3.0\n */\nexport class JsonParser {\n\tprotected _root: Root;\n\n\t/**\n\t * IMPORTANT! Do not instantiate this class via `new Class()` syntax.\n\t *\n\t * Use static method `Class.new()` instead.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @ignore\n\t */\n\tconstructor(root: Root, isReal: boolean) {\n\t\tif (!isReal) {\n\t\t\tthrow new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\n\t\t}\n\n\t\tthis._root = root;\n\t}\n\n\t/**\n\t * Use this method to create an instance of this class.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\n\t * @param root Root element\n\t * @return Instantiated object\n\t */\n\tstatic new>(this: C, root: Root): T {\n\t\treturn (new this(root, true)) as T;\n\t}\n\n\t/**\n\t * Parses and creates chart objects from simple objects.\n\t *\n\t * @param object Serialized data\n\t * @return A promise of a target object\n\t */\n\tasync parse(object: unknown, settings: IParseSettings = {}): Promise {\n\t\tconst state = new ParserState();\n\n\t\tawait state.parseAsync(object);\n\n\t\tconst output = state.parse(this._root, object, []) as E;\n\n\t\tif (settings.parent) {\n\t\t\tif (output instanceof Sprite) {\n\t\t\t\tsettings.parent.children.push(output);\n\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"When using the parent setting, the entity must be a Sprite\");\n\t\t\t}\n\n\t\t}\n\t\telse if (output instanceof Entity) {\n\t\t\toutput._applyThemes(true);\n\t\t}\n\n\t\tstate.afterParse();\n\n\t\treturn output;\n\t}\n\n\t/**\n\t * Parses and creates chart objects from JSON string.\n\t *\n\t * @param string JSON string\n\t * @return A promise of a target object\n\t */\n\tasync parseString(string: string, settings: IParseSettings = {}): Promise {\n\t\treturn await this.parse(JSON.parse(string), settings);\n\t}\n}\n\n/**\n * Registers a class so that it can be parsed and instantiated bey JSON parser.\n * \n * @param name Class name\n * @param func Class reference\n * @ignore\n */\nexport function registerCustomClass(name: string, ref: any): void {\n\tif (!(classes as any)[name]) {\n\t\t(classes as any)[name] = () => new Promise((resolve) => {\n\t\t\tresolve(ref);\n\t\t});\n\t}\n}","import { Entity, IEntityEvents, IEntitySettings, IEntityPrivate } from \"../../core/util/Entity\";\nimport { Component } from \"../../core/render/Component\";\nimport { Color } from \"../../core/util/Color\";\nimport { Percent } from \"../../core/util/Percent\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListData } from \"../../core/util/Data\";\n\nimport * as $type from \"../../core/util/Type\";\nimport * as $array from \"../../core/util/Array\";\nimport * as $object from \"../../core/util/Object\";\n\n\nexport interface ISerializerSettings extends IEntitySettings {\n\n\t/**\n\t * An array of settings to not include in the serialized data.\n\t */\n\texcludeSettings?: Array;\n\n\t/**\n\t * An array of settings to include in the serialized data.\n\t */\n\tincludeSettings?: Array;\n\n\t/**\n\t * Include full values of these settings.\n\t *\n\t * @since 6.4.3\n\t */\n\tfullSettings?: Array;\n\n\t/**\n\t * An array of properties to not include in the serialized data.\n\t *\n\t * @since 5.3.2\n\t */\n\texcludeProperties?: Array;\n\n\t/**\n\t * An array of properties to include in the serialized data.\n\t *\n\t * @ignore\n\t * @todo implement\n\t */\n\tincludeProperties?: Array;\n\n\t/**\n\t * Maximum depth of recursion when traversing target object.\n\t *\n\t * @default 2\n\t */\n\tmaxDepth?: number;\n\n}\n\nexport interface ISerializerPrivate extends IEntityPrivate {\n}\n\nexport interface ISerializerEvents extends IEntityEvents {\n}\n\n\n/**\n * Provides functionality to serialize charts or individual elements into simple\n * objects or JSON.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/serializing/} for more info\n * @since 5.3.0\n */\nexport class Serializer extends Entity {\n\n\tpublic static className: string = \"Serializer\";\n\tpublic static classNames: Array = Entity.classNames.concat([Serializer.className]);\n\n\tdeclare public _settings: ISerializerSettings;\n\tdeclare public _privateSettings: ISerializerPrivate;\n\tdeclare public _events: ISerializerEvents;\n\n\tprotected _refs: { [index: string]: any } = {};\n\n\t/**\n\t * Serializes target object into a simple object or JSON string.\n\t *\n\t * @param source Target object\n\t * @param depth Current depth\n\t * @param full Serialize object in full (ignoring maxDepth)\n\t * @return Serialized data\n\t */\n\tpublic serialize(source: unknown, depth: number = 0, full: boolean = false): unknown {\n\t\tif (depth > this.get(\"maxDepth\", 2)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (source === false || source === true) {\n\t\t\treturn source;\n\t\t}\n\n\t\tif ($type.isArray(source)) {\n\t\t\tconst res: any[] = [];\n\t\t\t$array.each(source, (arrval) => {\n\t\t\t\tres.push(this.serialize(arrval, depth, full));\n\t\t\t});\n\t\t\treturn res;\n\t\t}\n\t\telse if (source instanceof ListData) {\n\t\t\tconst res: any[] = [];\n\t\t\t$array.each(source.values, (arrval) => {\n\t\t\t\tres.push(this.serialize(arrval, depth, full));\n\t\t\t});\n\t\t\treturn res;\n\t\t}\n\t\tconst res: any = {};\n\n\t\tconst am5object = source instanceof Entity || source instanceof Template || source instanceof Color || source instanceof Percent ? true : false;\n\n\t\t// Process settings\n\t\tconst fullSettings: any = this.get(\"fullSettings\", []);\n\t\tif (source instanceof Entity) {\n\t\t\tres.type = source.className;\n\n\t\t\tlet settings: Array = $object.keys(source._settings);\n\t\t\tconst includeSettings: Array = this.get(\"includeSettings\", []);\n\t\t\tconst excludeSettings: Array = this.get(\"excludeSettings\", []);\n\t\t\tif (includeSettings.length) {\n\t\t\t\tsettings = includeSettings;\n\t\t\t}\n\t\t\telse if (excludeSettings.length) {\n\t\t\t\tsettings = settings.filter((value) => {\n\t\t\t\t\treturn excludeSettings.indexOf(value) === -1;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Include only user settings\n\t\t\tsettings = settings.filter((value) => {\n\t\t\t\treturn source.isUserSetting(value as any);\n\t\t\t});\n\n\t\t\tif (settings.length) {\n\t\t\t\tres.settings = {};\n\t\t\t\t$array.each(settings, (setting) => {\n\t\t\t\t\tconst settingValue = (source).get(setting);\n\t\t\t\t\tif (settingValue !== undefined) {\n\t\t\t\t\t\tres.settings[setting] = this.serialize(settingValue, depth + 1, full || fullSettings.indexOf(setting) !== -1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (source instanceof Template) {\n\t\t\tres.type = \"Template\";\n\t\t\tlet settings: Array = $object.keys(source._settings);\n\t\t\tif (settings.length) {\n\t\t\t\tres.settings = {};\n\t\t\t\t$array.each(settings, (setting) => {\n\t\t\t\t\tres.settings[setting] = this.serialize((source).get(setting), depth + 1, fullSettings.indexOf(setting) !== -1);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\t// Data\n\t\tif (source instanceof Component) {\n\t\t\tif (source.data.length) {\n\t\t\t\tres.properties = {\n\t\t\t\t\tdata: this.serialize(source.data.values, 1, true)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Process the rest\n\t\tif (source instanceof Color) {\n\t\t\treturn {\n\t\t\t\ttype: \"Color\",\n\t\t\t\tvalue: source.toCSSHex()\n\t\t\t};\n\t\t}\n\t\telse if (source instanceof Percent) {\n\t\t\treturn {\n\t\t\t\ttype: \"Percent\",\n\t\t\t\tvalue: source.percent\n\t\t\t};\n\t\t}\n\t\telse if ($type.isString(source) || $type.isNumber(source)) {\n\t\t\treturn source;\n\t\t}\n\t\telse if ($type.isObject(source)) {\n\t\t\t// TODO\n\t\t\tif (full && !am5object) {\n\t\t\t\tconst excludeProperties: Array = this.get(\"excludeProperties\", []);\n\t\t\t\t$object.each(source, (key, value) => {\n\t\t\t\t\tif (excludeProperties.indexOf(key) === -1 && value !== undefined) {\n\t\t\t\t\t\tres[key] = this.serialize(value, depth + 1, full);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (depth == 0 && $object.keys(this._refs).length) {\n\t\t\tres.refs = this._refs;\n\t\t}\n\n\t\treturn res;\n\t}\n}","import type { InterfaceColors, IInterfaceColorsSettings } from \"../core/util/InterfaceColors\";\n\nimport { Theme } from \"../core/Theme\";\nimport { p100, p50 } from \"../core/util/Percent\";\nimport { Color } from \"../core/util/Color\";\nimport { GridLayout } from \"../core/render/GridLayout\"\n\nimport * as $ease from \"../core/util/Ease\";\n\n\ninterface Settable {\n\t_settings: A;\n\tset(key: K, value: A[K]): void;\n}\n\n/**\n * @ignore\n */\nexport function setColor(rule: Settable, key: K, ic: InterfaceColors, name: keyof IInterfaceColorsSettings) {\n\t// TODO this shouldn't use get, figure out a better way\n\trule.set(key, ic.get(name) as any);\n\n\tic.on(name, (value) => {\n\t\trule.set(key, value as any);\n\t});\n}\n\n/**\n * @ignore\n */\nexport class DefaultTheme extends Theme {\n\tprotected setupDefaultRules() {\n\t\tsuper.setupDefaultRules();\n\n\t\tconst language = this._root.language;\n\n\t\tconst ic = this._root.interfaceColors;\n\n\t\tconst horizontalLayout = this._root.horizontalLayout;\n\t\tconst verticalLayout = this._root.verticalLayout;\n\n\t\tconst r = this.rule.bind(this);\n\n\n\t\t/**\n\t\t * ========================================================================\n\t\t * core\n\t\t * ========================================================================\n\t\t */\n\n\t\tr(\"InterfaceColors\").setAll({\n\t\t\tstroke: Color.fromHex(0xe5e5e5),\n\t\t\tfill: Color.fromHex(0xf3f3f3),\n\t\t\tprimaryButton: Color.fromHex(0x6794dc),\n\t\t\tprimaryButtonHover: Color.fromHex(0x6771dc),\n\t\t\tprimaryButtonDown: Color.fromHex(0x68dc76),\n\t\t\tprimaryButtonActive: Color.fromHex(0x68dc76),\n\t\t\tprimaryButtonText: Color.fromHex(0xffffff),\n\t\t\tprimaryButtonStroke: Color.fromHex(0xffffff),\n\t\t\tsecondaryButton: Color.fromHex(0xd9d9d9),\n\t\t\tsecondaryButtonHover: Color.fromHex(0xa3a3a3),\n\t\t\tsecondaryButtonDown: Color.fromHex(0x8d8d8d),\n\t\t\tsecondaryButtonActive: Color.fromHex(0xe6e6e6),\n\t\t\tsecondaryButtonText: Color.fromHex(0x000000),\n\t\t\tsecondaryButtonStroke: Color.fromHex(0xffffff),\n\t\t\tgrid: Color.fromHex(0x000000),\n\t\t\tbackground: Color.fromHex(0xffffff),\n\t\t\talternativeBackground: Color.fromHex(0x000000),\n\t\t\ttext: Color.fromHex(0x000000),\n\t\t\talternativeText: Color.fromHex(0xffffff),\n\t\t\tdisabled: Color.fromHex(0xadadad),\n\t\t\tpositive: Color.fromHex(0x50b300),\n\t\t\tnegative: Color.fromHex(0xb30000)\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"ColorSet\");\n\n\t\t\trule.setAll({\n\t\t\t\tpassOptions: {\n\t\t\t\t\thue: 0.05,\n\t\t\t\t\tsaturation: 0,\n\t\t\t\t\tlightness: 0\n\t\t\t\t},\n\t\t\t\tcolors: [\n\t\t\t\t\tColor.fromHex(0x67b7dc)\n\t\t\t\t],\n\t\t\t\tstep: 1,\n\t\t\t\t//baseColor: Color.fromRGB(103, 183, 220),\n\t\t\t\t//count: 20,\n\t\t\t\treuse: false,\n\t\t\t\tstartIndex: 0\n\t\t\t});\n\n\t\t\trule.setPrivate(\"currentStep\", 0);\n\t\t\trule.setPrivate(\"currentPass\", 0);\n\t\t}\n\n\t\tr(\"Entity\").setAll({\n\t\t\tstateAnimationDuration: 0,\n\t\t\tstateAnimationEasing: $ease.out($ease.cubic)\n\t\t});\n\n\t\tr(\"Component\").setAll({\n\t\t\tinterpolationDuration: 0,\n\t\t\tinterpolationEasing: $ease.out($ease.cubic)\n\t\t});\n\n\t\tr(\"Sprite\").setAll({\n\t\t\tvisible: true,\n\t\t\tscale: 1,\n\t\t\topacity: 1,\n\t\t\trotation: 0,\n\t\t\tposition: \"relative\",\n\t\t\ttooltipX: p50,\n\t\t\ttooltipY: p50,\n\t\t\ttooltipPosition: \"fixed\",\n\t\t\tisMeasured: true\n\t\t});\n\n\t\tr(\"Sprite\").states.create(\"default\", { \"visible\": true, opacity: 1 });\n\n\t\tr(\"Container\").setAll({\n\t\t\tinteractiveChildren: true,\n\t\t\tsetStateOnChildren: false\n\t\t});\n\n\t\tr(\"Graphics\").setAll({\n\t\t\tstrokeWidth: 1\n\t\t});\n\n\n\t\tr(\"Chart\").setAll({\n\t\t\twidth: p100,\n\t\t\theight: p100,\n\t\t\tinteractiveChildren: false\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: alignment\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Sprite\", [\"horizontal\", \"center\"]).setAll({\n\t\t\tcenterX: p50,\n\t\t\tx: p50\n\t\t});\n\n\t\tr(\"Sprite\", [\"vertical\", \"center\"]).setAll({\n\t\t\tcenterY: p50,\n\t\t\ty: p50\n\t\t});\n\n\t\tr(\"Container\", [\"horizontal\", \"layout\"]).setAll({\n\t\t\tlayout: horizontalLayout\n\t\t});\n\n\t\tr(\"Container\", [\"vertical\", \"layout\"]).setAll({\n\t\t\tlayout: verticalLayout\n\t\t});\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: patterns\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Pattern\").setAll({\n\t\t\trepetition: \"repeat\",\n\t\t\twidth: 50,\n\t\t\theight: 50,\n\t\t\trotation: 0,\n\t\t\tfillOpacity: 1\n\t\t});\n\n\t\tr(\"LinePattern\").setAll({\n\t\t\tgap: 6,\n\t\t\tcolorOpacity: 1,\n\t\t\twidth: 49,\n\t\t\theight: 49\n\t\t});\n\n\t\tr(\"RectanglePattern\").setAll({\n\t\t\tgap: 6,\n\t\t\tcheckered: false,\n\t\t\tcentered: true,\n\t\t\tmaxWidth: 5,\n\t\t\tmaxHeight: 5,\n\t\t\twidth: 48,\n\t\t\theight: 48,\n\t\t\tstrokeWidth: 0\n\t\t});\n\n\t\tr(\"CirclePattern\").setAll({\n\t\t\tgap: 5,\n\t\t\tcheckered: false,\n\t\t\tcentered: false,\n\t\t\tradius: 3,\n\t\t\tstrokeWidth: 0,\n\t\t\twidth: 45,\n\t\t\theight: 45\n\t\t});\n\n\t\tr(\"GrainPattern\").setAll({\n\t\t\twidth: 200,\n\t\t\theight: 200,\n\t\t\tcolors: [Color.fromHex(0x000000)],\n\t\t\tsize: 1,\n\t\t\thorizontalGap: 0,\n\t\t\tverticalGap: 0,\n\t\t\tdensity: 1,\n\t\t\tminOpacity: 0,\n\t\t\tmaxOpacity: 0.2\n\t\t});\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: gradients\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"LinearGradient\").setAll({\n\t\t\trotation: 90\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Legend\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Legend\").setAll({\n\t\t\tfillField: \"fill\",\n\t\t\tstrokeField: \"stroke\",\n\t\t\tnameField: \"name\",\n\t\t\tlayout: GridLayout.new(this._root, {}),\n\t\t\tlayer: 30,\n\t\t\tclickTarget: \"itemContainer\"\n\t\t});\n\n\t\t// Class: Container\n\t\tr(\"Container\", [\"legend\", \"item\", \"itemcontainer\"]).setAll({\n\t\t\tpaddingLeft: 5,\n\t\t\tpaddingRight: 5,\n\t\t\tpaddingBottom: 5,\n\t\t\tpaddingTop: 5,\n\t\t\tlayout: horizontalLayout,\n\t\t\tsetStateOnChildren: true,\n\t\t\tinteractiveChildren: false,\n\t\t\tariaChecked: true,\n\t\t\tfocusable: true,\n\t\t\tariaLabel: language.translate(\"Press ENTER to toggle\"),\n\t\t\trole: \"checkbox\"\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"Rectangle\", [\"legend\", \"item\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tfillOpacity: 0,\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"background\");\n\t\t}\n\n\t\tr(\"Container\", [\"legend\", \"marker\"]).setAll({\n\t\t\tsetStateOnChildren: true,\n\t\t\tcenterY: p50,\n\t\t\tpaddingLeft: 0,\n\t\t\tpaddingRight: 0,\n\t\t\tpaddingBottom: 0,\n\t\t\tpaddingTop: 0,\n\t\t\twidth: 18,\n\t\t\theight: 18\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).setAll({\n\t\t\twidth: p100,\n\t\t\theight: p100,\n\t\t\tcornerRadiusBL: 3,\n\t\t\tcornerRadiusTL: 3,\n\t\t\tcornerRadiusBR: 3,\n\t\t\tcornerRadiusTR: 3\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).states.create(\"disabled\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"disabled\");\n\t\t\tsetColor(rule, \"stroke\", ic, \"disabled\");\n\t\t}\n\n\t\tr(\"Label\", [\"legend\", \"label\"]).setAll({\n\t\t\tcenterY: p50,\n\t\t\tmarginLeft: 5,\n\t\t\tpaddingRight: 0,\n\t\t\tpaddingLeft: 0,\n\t\t\tpaddingTop: 0,\n\t\t\tpaddingBottom: 0,\n\t\t\tpopulateText: true\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"Label\", [\"legend\", \"label\"]).states.create(\"disabled\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"disabled\");\n\t\t}\n\n\t\tr(\"Label\", [\"legend\", \"value\", \"label\"]).setAll({\n\t\t\tcenterY: p50,\n\t\t\tmarginLeft: 5,\n\t\t\tpaddingRight: 0,\n\t\t\tpaddingLeft: 0,\n\t\t\tpaddingTop: 0,\n\t\t\tpaddingBottom: 0,\n\t\t\twidth: 50,\n\t\t\tcenterX: p100,\n\t\t\tpopulateText: true\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"Label\", [\"legend\", \"value\", \"label\"]).states.create(\"disabled\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"disabled\");\n\t\t}\n\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: HeatLegend\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"HeatLegend\").setAll({\n\t\t\tstepCount: 1\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"heatlegend\", \"marker\"]).setAll({\n\t\t\tcornerRadiusTR: 0,\n\t\t\tcornerRadiusBR: 0,\n\t\t\tcornerRadiusTL: 0,\n\t\t\tcornerRadiusBL: 0\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"vertical\", \"heatlegend\", \"marker\"]).setAll({\n\t\t\theight: p100,\n\t\t\twidth: 15\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"horizontal\", \"heatlegend\", \"marker\"]).setAll({\n\t\t\twidth: p100,\n\t\t\theight: 15\n\t\t});\n\n\t\tr(\"HeatLegend\", [\"vertical\"]).setAll({\n\t\t\theight: p100\n\t\t});\n\n\t\tr(\"HeatLegend\", [\"horizontal\"]).setAll({\n\t\t\twidth: p100\n\t\t});\n\n\t\tr(\"Label\", [\"heatlegend\", \"start\"]).setAll({\n\t\t\tpaddingLeft: 5,\n\t\t\tpaddingRight: 5,\n\t\t\tpaddingTop: 5,\n\t\t\tpaddingBottom: 5\n\t\t});\n\n\t\tr(\"Label\", [\"heatlegend\", \"end\"]).setAll({\n\t\t\tpaddingLeft: 5,\n\t\t\tpaddingRight: 5,\n\t\t\tpaddingTop: 5,\n\t\t\tpaddingBottom: 5\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Labels\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\t{\n\t\t\tconst rule = r(\"Label\");\n\n\t\t\trule.setAll({\n\t\t\t\tpaddingTop: 8,\n\t\t\t\tpaddingBottom: 8,\n\t\t\t\tpaddingLeft: 10,\n\t\t\t\tpaddingRight: 10,\n\t\t\t\tfontFamily: \"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"\",\n\t\t\t\tfontSize: \"1em\",\n\t\t\t\tpopulateText: false\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"text\");\n\t\t}\n\n\t\tr(\"RadialLabel\").setAll({\n\t\t\ttextType: \"regular\",\n\t\t\tcenterY: p50,\n\t\t\tcenterX: p50,\n\t\t\tinside: false,\n\t\t\tradius: 0,\n\t\t\tbaseRadius: p100,\n\t\t\torientation: \"auto\",\n\t\t\ttextAlign: \"center\"\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Elements and shapes\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"RoundedRectangle\").setAll({\n\t\t\tcornerRadiusTL: 8,\n\t\t\tcornerRadiusBL: 8,\n\t\t\tcornerRadiusTR: 8,\n\t\t\tcornerRadiusBR: 8\n\t\t});\n\n\t\tr(\"PointedRectangle\").setAll({\n\t\t\tpointerBaseWidth: 15,\n\t\t\tpointerLength: 10,\n\t\t\tcornerRadius: 8\n\t\t});\n\n\t\tr(\"Slice\").setAll({\n\t\t\tshiftRadius: 0,\n\t\t\tdRadius: 0,\n\t\t\tdInnerRadius: 0\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"Tick\");\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: .15,\n\t\t\t\tisMeasured: false,\n\t\t\t\tlength: 4.5,\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tcrisp: true\n\t\t\t});\n\n\t\t\tsetColor(rule, \"stroke\", ic, \"grid\");\n\t\t}\n\n\t\tr(\"Bullet\").setAll({\n\t\t\tlocationX: 0.5,\n\t\t\tlocationY: 0.5\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Tooltip\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Tooltip\").setAll({\n\t\t\tposition: \"absolute\",\n\t\t\tgetFillFromSprite: true,\n\t\t\tgetStrokeFromSprite: false,\n\t\t\tautoTextColor: true,\n\t\t\tpaddingTop: 9,\n\t\t\tpaddingBottom: 8,\n\t\t\tpaddingLeft: 10,\n\t\t\tpaddingRight: 10,\n\t\t\tmarginBottom: 5,\n\t\t\tpointerOrientation: \"vertical\",\n\t\t\tcenterX: p50,\n\t\t\tcenterY: p50,\n\t\t\tanimationEasing: $ease.out($ease.cubic),\n\t\t\texportable: false\n\t\t\t//layer: 100\n\t\t});\n\n\t\tr(\"Polygon\").setAll({\n\t\t\tanimationEasing: $ease.out($ease.cubic),\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"PointedRectangle\", [\"tooltip\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: 0.9,\n\t\t\t\tcornerRadius: 4,\n\t\t\t\tpointerLength: 4,\n\t\t\t\tpointerBaseWidth: 8,\n\t\t\t\tfillOpacity: 0.9,\n\t\t\t\tstroke: Color.fromHex(0xffffff)\n\t\t\t});\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Label\", [\"tooltip\"]);\n\n\t\t\trule.setAll({\n\t\t\t\trole: \"tooltip\",\n\t\t\t\tpopulateText: true,\n\t\t\t\tpaddingRight: 0,\n\t\t\t\tpaddingTop: 0,\n\t\t\t\tpaddingLeft: 0,\n\t\t\t\tpaddingBottom: 0\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"alternativeText\");\n\t\t}\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Button\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Button\").setAll({\n\t\t\tpaddingTop: 8,\n\t\t\tpaddingBottom: 8,\n\t\t\tpaddingLeft: 10,\n\t\t\tpaddingRight: 10,\n\t\t\tinteractive: true,\n\t\t\tlayout: horizontalLayout,\n\t\t\tinteractiveChildren: false,\n\t\t\tsetStateOnChildren: true,\n\t\t\tfocusable: true\n\t\t});\n\n\t\tr(\"Button\").states.create(\"hover\", {});\n\t\tr(\"Button\").states.create(\"down\", { stateAnimationDuration: 0 });\n\t\tr(\"Button\").states.create(\"active\", {});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"button\", \"background\"]);\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButton\");\n\t\t\tsetColor(rule, \"stroke\", ic, \"primaryButtonStroke\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"hover\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonHover\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"down\", { stateAnimationDuration: 0 });\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonDown\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"active\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonActive\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Graphics\", [\"button\", \"icon\"]);\n\t\t\tsetColor(rule, \"stroke\", ic, \"primaryButtonText\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Label\", [\"button\"]);\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonText\");\n\t\t}\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * charts/xy: ZoomOutButton\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Button\", [\"zoom\"]).setAll({\n\t\t\tpaddingTop: 18,\n\t\t\tpaddingBottom: 18,\n\t\t\tpaddingLeft: 12,\n\t\t\tpaddingRight: 12,\n\t\t\tcenterX: 46,\n\t\t\tcenterY: -10,\n\t\t\ty: 0,\n\t\t\tx: p100,\n\t\t\trole: \"button\",\n\t\t\tariaLabel: language.translate(\"Zoom Out\"),\n\t\t\tlayer: 30\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tcornerRadiusBL: 40,\n\t\t\t\tcornerRadiusBR: 40,\n\t\t\t\tcornerRadiusTL: 40,\n\t\t\t\tcornerRadiusTR: 40\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButton\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"hover\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonHover\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"down\", { stateAnimationDuration: 0 });\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonDown\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Graphics\", [\"icon\", \"button\", \"zoom\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tcrisp: true,\n\t\t\t\tstrokeOpacity: 0.7,\n\t\t\t\tdraw: (display: any) => {\n\t\t\t\t\tdisplay.moveTo(0, 0);\n\t\t\t\t\tdisplay.lineTo(12, 0);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetColor(rule, \"stroke\", ic, \"primaryButtonText\");\n\t\t}\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: ResizeButton\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Button\", [\"resize\"]).setAll({\n\t\t\tpaddingTop: 9,\n\t\t\tpaddingBottom: 9,\n\t\t\tpaddingLeft: 13,\n\t\t\tpaddingRight: 13,\n\t\t\tdraggable: true,\n\t\t\tcenterX: p50,\n\t\t\tcenterY: p50,\n\t\t\tposition: \"absolute\",\n\t\t\trole: \"slider\",\n\t\t\tariaValueMin: \"0\",\n\t\t\tariaValueMax: \"100\",\n\t\t\tariaLabel: language.translate(\"Use up and down arrows to move selection\")\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tcornerRadiusBL: 40,\n\t\t\t\tcornerRadiusBR: 40,\n\t\t\t\tcornerRadiusTL: 40,\n\t\t\t\tcornerRadiusTR: 40\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButton\");\n\t\t\tsetColor(rule, \"stroke\", ic, \"secondaryButtonStroke\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"hover\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButtonHover\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"down\", { stateAnimationDuration: 0 });\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButtonDown\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Graphics\", [\"resize\", \"button\", \"icon\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tinteractive: false,\n\t\t\t\tcrisp: true,\n\t\t\t\tstrokeOpacity: 0.5,\n\t\t\t\tdraw: (display: any) => {\n\t\t\t\t\tdisplay.moveTo(0, 0.5);\n\t\t\t\t\tdisplay.lineTo(0, 12.5);\n\t\t\t\t\tdisplay.moveTo(4, 0.5);\n\t\t\t\t\tdisplay.lineTo(4, 12.5);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetColor(rule, \"stroke\", ic, \"secondaryButtonText\");\n\t\t}\n\n\t\tr(\"Button\", [\"resize\", \"vertical\"]).setAll({\n\t\t\trotation: 90,\n\t\t\tcursorOverStyle: \"ns-resize\"\n\t\t});\n\n\t\tr(\"Button\", [\"resize\", \"horizontal\"]).setAll({\n\t\t\tcursorOverStyle: \"ew-resize\"\n\t\t});\n\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: PlayButton\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Button\", [\"play\"]).setAll({\n\t\t\tpaddingTop: 13,\n\t\t\tpaddingBottom: 13,\n\t\t\tpaddingLeft: 14,\n\t\t\tpaddingRight: 14,\n\t\t\tariaLabel: language.translate(\"Play\"),\n\t\t\ttoggleKey: \"active\"\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"play\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: 0.5,\n\t\t\t\tcornerRadiusBL: 100,\n\t\t\t\tcornerRadiusBR: 100,\n\t\t\t\tcornerRadiusTL: 100,\n\t\t\t\tcornerRadiusTR: 100\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButton\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Graphics\", [\"play\", \"icon\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstateAnimationDuration: 0,\n\t\t\t\tdx: 1,\n\t\t\t\tdraw: (display: any) => {\n\t\t\t\t\tdisplay.moveTo(0, -5);\n\t\t\t\t\tdisplay.lineTo(8, 0);\n\t\t\t\t\tdisplay.lineTo(0, 5);\n\t\t\t\t\tdisplay.lineTo(0, -5);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonText\");\n\t\t}\n\n\t\tr(\"Graphics\", [\"play\", \"icon\"]).states.create(\"default\", {\n\t\t\tstateAnimationDuration: 0\n\t\t})\n\n\t\tr(\"Graphics\", [\"play\", \"icon\"]).states.create(\"active\", {\n\t\t\tstateAnimationDuration: 0,\n\t\t\tdraw: (display: any) => {\n\t\t\t\tdisplay.moveTo(-4, -5);\n\t\t\t\tdisplay.lineTo(-1, -5);\n\t\t\t\tdisplay.lineTo(-1, 5);\n\t\t\t\tdisplay.lineTo(-4, 5);\n\t\t\t\tdisplay.lineTo(-4, -5);\n\n\t\t\t\tdisplay.moveTo(4, -5);\n\t\t\t\tdisplay.lineTo(1, -5);\n\t\t\t\tdisplay.lineTo(1, 5);\n\t\t\t\tdisplay.lineTo(4, 5);\n\t\t\t\tdisplay.lineTo(4, -5);\n\t\t\t}\n\t\t})\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: SwitchButton\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Button\", [\"switch\"]).setAll({\n\t\t\tpaddingTop: 4,\n\t\t\tpaddingBottom: 4,\n\t\t\tpaddingLeft: 4,\n\t\t\tpaddingRight: 4,\n\t\t\tariaLabel: language.translate(\"Press ENTER to toggle\"),\n\t\t\ttoggleKey: \"active\",\n\t\t\twidth: 40,\n\t\t\theight: 24,\n\t\t\tlayout: null\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"switch\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: 0.5,\n\t\t\t\tcornerRadiusBL: 100,\n\t\t\t\tcornerRadiusBR: 100,\n\t\t\t\tcornerRadiusTL: 100,\n\t\t\t\tcornerRadiusTR: 100\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButton\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"Circle\", [\"switch\", \"icon\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tradius: 8,\n\t\t\t\tcenterY: 0,\n\t\t\t\tcenterX: 0,\n\t\t\t\tdx: 0\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"primaryButtonText\");\n\t\t}\n\n\t\tr(\"Graphics\", [\"switch\", \"icon\"]).states.create(\"active\", {\n\t\t\tdx: 16\n\t\t});\n\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * core: Scrollbar\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\tr(\"Scrollbar\").setAll({\n\t\t\tstart: 0,\n\t\t\tend: 1,\n\t\t\tlayer: 30,\n\t\t\tanimationEasing: $ease.out($ease.cubic)\n\t\t});\n\n\t\tr(\"Scrollbar\", [\"vertical\"]).setAll({\n\t\t\tmarginRight: 13,\n\t\t\tmarginLeft: 13,\n\t\t\tminWidth: 12,\n\t\t\theight: p100\n\t\t});\n\n\t\tr(\"Scrollbar\", [\"horizontal\"]).setAll({\n\t\t\tmarginTop: 13,\n\t\t\tmarginBottom: 13,\n\t\t\tminHeight: 12,\n\t\t\twidth: p100\n\t\t});\n\n\t\tthis.rule(\"Button\", [\"scrollbar\"]).setAll({\n\t\t\texportable: false\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"scrollbar\", \"main\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tcornerRadiusTL: 8,\n\t\t\t\tcornerRadiusBL: 8,\n\t\t\t\tcornerRadiusTR: 8,\n\t\t\t\tcornerRadiusBR: 8,\n\t\t\t\tfillOpacity: 0.8,\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"fill\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]);\n\n\t\t\trule.setAll({\n\t\t\t\trole: \"slider\",\n\t\t\t\tariaLive: \"polite\",\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tdraggable: true\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButton\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"hover\", {});\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButtonHover\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"down\", { stateAnimationDuration: 0 });\n\t\t\tsetColor(rule, \"fill\", ic, \"secondaryButtonDown\");\n\t\t}\n\n\t\tr(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"vertical\"]).setAll({\n\t\t\tx: p50,\n\t\t\twidth: p100,\n\t\t\tcenterX: p50,\n\t\t\tariaLabel: language.translate(\"Use up and down arrows to move selection\")\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"horizontal\"]).setAll({\n\t\t\ty: p50,\n\t\t\tcenterY: p50,\n\t\t\theight: p100,\n\t\t\tariaLabel: language.translate(\"Use left and right arrows to move selection\")\n\t\t});\n\n\t\t// @todo: is this needed? used to be \"ContentScrollbar\"\n\t\t// r(\"Scrollbar\", [\"content?\"]).setAll({\n\t\t// \tmarginRight: 0,\n\t\t// \tmarginLeft: 5,\n\t\t// \tlayer: 5\n\t\t// });\n\n\t\t/**\n\t\t * ========================================================================\n\t\t * charts/xy\n\t\t * ========================================================================\n\t\t *\n\t\t * This needs to be in DefaultTheme because it's the only theme that is\n\t\t * automatically applied to Root, and tooltips different ancestors\n\t\t * than actual charts using them.\n\t\t */\n\n\t\t{\n\t\t\tconst rule = r(\"PointedRectangle\", [\"axis\", \"tooltip\", \"background\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tcornerRadius: 0\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"alternativeBackground\");\n\t\t}\n\n\t\tr(\"Label\", [\"axis\", \"tooltip\"]).setAll({\n\t\t\trole: undefined\n\t\t});\n\n\t\tr(\"Label\", [\"axis\", \"tooltip\", \"y\"]).setAll({\n\t\t\ttextAlign: \"right\"\n\t\t});\n\n\t\tr(\"Label\", [\"axis\", \"tooltip\", \"y\", \"opposite\"]).setAll({\n\t\t\ttextAlign: \"left\"\n\t\t});\n\n\t\tr(\"Label\", [\"axis\", \"tooltip\", \"x\"]).setAll({\n\t\t\ttextAlign: \"center\"\n\t\t});\n\n\t\tr(\"Tooltip\", [\"categoryaxis\"]).setAll({\n\t\t\tlabelText: \"{category}\"\n\t\t})\n\n\t\t/**\n\t\t * ------------------------------------------------------------------------\n\t\t * Shapes\n\t\t * ------------------------------------------------------------------------\n\t\t */\n\n\t\t// Class: Graphics\n\t\tr(\"Star\").setAll({\n\t\t\tspikes: 5,\n\t\t\tinnerRadius: 5,\n\t\t\tradius: 10\n\t\t})\n\n\t\t// STOCK\n\t\tr(\"Tooltip\", [\"stock\"]).setAll({\n\t\t\tpaddingTop: 6,\n\t\t\tpaddingBottom: 5,\n\t\t\tpaddingLeft: 7,\n\t\t\tpaddingRight: 7\n\t\t});\n\n\t\tr(\"PointedRectangle\", [\"tooltip\", \"stock\", \"axis\"]).setAll({\n\t\t\tpointerLength: 0,\n\t\t\tpointerBaseWidth: 0,\n\t\t\tcornerRadius: 3\n\t\t});\n\n\t\tr(\"Label\", [\"tooltip\", \"stock\"]).setAll({\n\t\t\tfontSize: \"0.8em\"\n\t\t});\n\n\t\t// resizer\n\n\t\tr(\"SpriteResizer\").setAll({\n\t\t\trotationStep: 10\n\t\t})\n\n\t\t{\n\t\t\tconst rule = r(\"Container\", [\"resizer\", \"grip\"]);\n\t\t\trule.states.create(\"hover\", {});\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: 0.7,\n\t\t\t\tstrokeWidth: 1,\n\t\t\t\tfillOpacity: 1,\n\t\t\t\twidth: 12,\n\t\t\t\theight: 12\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"background\");\n\t\t\tsetColor(rule, \"stroke\", ic, \"alternativeBackground\");\n\t\t}\n\n\t\t{\n\t\t\tconst rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"outline\"]);\n\n\t\t\trule.setAll({\n\t\t\t\tstrokeOpacity: 0,\n\t\t\t\tfillOpacity: 0,\n\t\t\t\twidth: 20,\n\t\t\t\theight: 20\n\t\t\t});\n\n\t\t\trule.states.create(\"hover\", {\n\t\t\t\tfillOpacity: 0.3\n\t\t\t});\n\n\t\t\tsetColor(rule, \"fill\", ic, \"alternativeBackground\");\n\t\t}\n\n\t\tr(\"RoundedRectangle\", [\"resizer\", \"grip\", \"left\"]).setAll({\n\t\t\tcornerRadiusBL: 0,\n\t\t\tcornerRadiusBR: 0,\n\t\t\tcornerRadiusTL: 0,\n\t\t\tcornerRadiusTR: 0\n\t\t});\n\n\t\tr(\"RoundedRectangle\", [\"resizer\", \"grip\", \"right\"]).setAll({\n\t\t\tcornerRadiusBL: 0,\n\t\t\tcornerRadiusBR: 0,\n\t\t\tcornerRadiusTL: 0,\n\t\t\tcornerRadiusTR: 0\n\t\t});\n\n\t\t{\n\t\t\tconst rule = r(\"Rectangle\", [\"resizer\", \"rectangle\"]);\n\t\t\trule.setAll({\n\t\t\t\tstrokeDasharray: [2, 2],\n\t\t\t\tstrokeOpacity: 0.5,\n\t\t\t\tstrokeWidth: 1\n\t\t\t});\n\n\t\t\tsetColor(rule, \"stroke\", ic, \"alternativeBackground\");\n\t\t}\n\t}\n}\n","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"./Graphics\";\r\nimport type { Percent } from \"../../core/util/Percent\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\n\r\nexport interface IStarSettings extends IGraphicsSettings {\r\n\r\n\t/**\r\n\t * Star's radius in pixels.\r\n\t */\r\n\tradius?: number;\r\n\r\n\t/**\r\n\t * Star's inner radius in pixels.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Number of spikes\r\n\t */\r\n\tspikes?: number;\r\n\r\n}\r\n\r\nexport interface IStarPrivate extends IGraphicsPrivate {\r\n}\r\n\r\n/**\r\n * Draws a Star.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Star extends Graphics {\r\n\r\n\tdeclare public _settings: IStarSettings;\r\n\tdeclare public _privateSettings: IStarPrivate;\r\n\r\n\tpublic static className: string = \"Star\";\r\n\tpublic static classNames: Array = Graphics.classNames.concat([Star.className]);\r\n\r\n\tpublic _beforeChanged() {\r\n\t\tsuper._beforeChanged();\r\n\r\n\t\tif (this.isDirty(\"radius\") || this.isDirty(\"innerRadius\") || this.isDirty(\"spikes\")) {\r\n\t\t\tthis._clear = true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic _changed() {\r\n\t\tsuper._changed();\r\n\r\n\t\tif (this._clear) {\r\n\t\t\tconst display = this._display;\r\n\t\t\tconst r = this.get(\"radius\", 0);\r\n\t\t\tconst ir = $utils.relativeToValue(this.get(\"innerRadius\", 0), r);\r\n\t\t\tconst spikes = this.get(\"spikes\", 0);\r\n\t\t\tconst step = Math.PI / spikes;\r\n\t\t\tlet angle = Math.PI / 2 * 3;\r\n\r\n\t\t\tdisplay.moveTo(0, - r)\r\n\r\n\t\t\tfor (let i = 0; i < spikes; i++) {\r\n\t\t\t\tdisplay.lineTo(Math.cos(angle) * r, Math.sin(angle) * r)\r\n\t\t\t\tangle += step\r\n\r\n\t\t\t\tdisplay.lineTo(Math.cos(angle) * ir, Math.sin(angle) * ir)\r\n\t\t\t\tangle += step\r\n\t\t\t}\r\n\t\t\tdisplay.lineTo(0, -r)\r\n\t\t\tdisplay.closePath();\r\n\t\t}\r\n\t}\r\n}\r\n","import type { IPoint } from \"../../core/util/IPoint\";\n\nimport { Container, IContainerSettings, IContainerPrivate } from \"./Container\";\nimport { Label } from \"../../core/render/Label\";\nimport { p100 } from \"../../core/util/Percent\";\nimport { RoundedRectangle } from \"../../core/render/RoundedRectangle\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { Color } from \"../../core/util/Color\";\nimport { Tooltip } from \"../../core/render/Tooltip\";\nimport { LinearGradient } from \"../../core/render/gradients/LinearGradient\";\n\nimport * as $utils from \"../../core/util/Utils\";\nimport * as $type from \"../../core/util/Type\";\n\nexport interface IHeatLegendSettings extends IContainerSettings {\n\n\t/**\n\t * Starting (lowest value) color.\n\t */\n\tstartColor: Color;\n\n\t/**\n\t * Ending (highest value) color.\n\t */\n\tendColor: Color;\n\n\t/**\n\t * Start (lowest) value.\n\t */\n\tstartValue?: number;\n\n\t/**\n\t * End (highest) value.\n\t */\n\tendValue?: number;\n\n\t/**\n\t * Text for start label.\n\t */\n\tstartText?: string;\n\n\t/**\n\t * Text for end label.\n\t */\n\tendText?: string;\n\n\t/**\n\t * Number of steps\n\t *\n\t * @default 1\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/legend/heat-legend/#Gradient_or_steps} for more info\n\t */\n\tstepCount?: number;\n\n\t/**\n\t * Orientation of the heat legend.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/legend/heat-legend/#Orientation} for more info\n\t */\n\torientation: \"horizontal\" | \"vertical\";\n\n}\n\nexport interface IHeatLegendPrivate extends IContainerPrivate {\n}\n\n/**\n * Heat legend.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/legend/heat-legend/} for more info\n */\nexport class HeatLegend extends Container {\n\n\t/**\n\t * A [[Container]] that all labels are placed in.\n\t *\n\t * @default Container.new()\n\t */\n\tpublic readonly labelContainer: Container = this.children.push(Container.new(this._root, {}));\n\n\t/**\n\t * A [[Container]] that all markers are placed in.\n\t *\n\t * @default Container.new()\n\t */\n\tpublic readonly markerContainer: Container = this.children.push(Container.new(this._root, {}));\n\n\t/**\n\t * A start [[Label]].\n\t *\n\t * @default Label.new()\n\t */\n\tpublic readonly startLabel: Label = this.labelContainer.children.push(Label.new(this._root, { themeTags: [\"start\"] }));\n\n\t/**\n\t * An end [[Label]].\n\t *\n\t * @default Label.new()\n\t */\n\tpublic readonly endLabel: Label = this.labelContainer.children.push(Label.new(this._root, { themeTags: [\"end\"] }));\n\n\tpublic static className: string = \"HeatLegend\";\n\tpublic static classNames: Array = Container.classNames.concat([HeatLegend.className]);\n\n\tdeclare public _settings: IHeatLegendSettings;\n\tdeclare public _privateSettings: IHeatLegendPrivate;\n\n\n\tprotected _afterNew() {\n\t\tthis._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"heatlegend\", this._settings.orientation]);\n\t\tsuper._afterNew();\n\t\tthis.set(\"tooltip\", Tooltip.new(this._root, {\n\t\t\tthemeTags: [\"heatlegend\"]\n\t\t}));\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeMarker(): RoundedRectangle {\n\t\tconst marker = this.markers.make();\n\t\tmarker.states.create(\"disabled\", {});\n\t\treturn marker;\n\t}\n\n\t/**\n\t * List of rectangle elements used for default legend markers.\n\t *\n\t * @default new ListTemplate\n\t */\n\tpublic readonly markers: ListTemplate = new ListTemplate(\n\t\tTemplate.new({}),\n\t\t() => RoundedRectangle._new(this._root, {\n\t\t\tthemeTags: $utils.mergeTags(this.markers.template.get(\"themeTags\", []), [this.get(\"orientation\"), \"heatlegend\", \"marker\"])\n\t\t}, [this.markers.template])\n\t);\n\n\n\t/**\n\t * Moves and shows tooltip at specific value.\n\t *\n\t * Can also specify optional text to show in tooltip, as well as the color.\n\t *\n\t * @param value Value\n\t * @param text Text\n\t * @param color Color\n\t */\n\tpublic showValue(value: number, text?: string, color?: Color) {\n\t\tconst tooltip = this.getTooltip();\n\t\tif (tooltip && $type.isNumber(value)) {\n\n\t\t\tconst startValue = this.get(\"startValue\", 0);\n\t\t\tconst endValue = this.get(\"endValue\", 1);\n\n\t\t\tconst c = (value - startValue) / (endValue - startValue);\n\t\t\tconst startColor = this.get(\"startColor\")!;\n\t\t\tconst endColor = this.get(\"endColor\")!;\n\n\t\t\tif (!text) {\n\t\t\t\ttext = this.getNumberFormatter().format(value);\n\t\t\t}\n\n\t\t\tif (!color) {\n\t\t\t\tcolor = Color.interpolate(c, startColor, endColor);\n\t\t\t}\n\n\t\t\ttooltip.label.set(\"text\", text);\n\t\t\tlet p:IPoint;\n\n\t\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\t\tp = this.markerContainer.toGlobal({ x: 0, y: this.innerHeight() * (1 - c) });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tp = this.markerContainer.toGlobal({ x: this.innerWidth() * c, y: 0 });\n\t\t\t}\n\n\t\t\tlet background = tooltip.get(\"background\");\n\t\t\tif (background) {\n\t\t\t\tbackground.set(\"fill\", Color.interpolate(c, startColor, endColor))\n\t\t\t}\n\t\t\ttooltip.set(\"pointTo\", p);\n\t\t\ttooltip.show();\n\t\t}\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tconst labelContainer = this.labelContainer;\n\t\tconst orientation = this.get(\"orientation\");\n\t\tconst startLabel = this.startLabel;\n\t\tconst endLabel = this.endLabel;\n\t\tconst tooltip = this.getTooltip();\n\n\t\tif (this.isDirty(\"orientation\")) {\n\t\t\tif (orientation == \"vertical\") {\n\t\t\t\tthis.markerContainer.setAll({ layout: this._root.verticalLayout, height: p100 });\n\t\t\t\tthis.set(\"layout\", this._root.horizontalLayout);\n\t\t\t\tstartLabel.setAll({ y: p100, x: undefined, centerY: p100, centerX: p100 });\n\t\t\t\tendLabel.setAll({ y: 0, x: undefined, centerY: 0, centerX: p100 });\n\t\t\t\tlabelContainer.setAll({ height: p100, width: undefined });\n\t\t\t\tif (tooltip) {\n\t\t\t\t\ttooltip.set(\"pointerOrientation\", \"horizontal\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.markerContainer.setAll({ layout: this._root.horizontalLayout, width: p100 });\n\t\t\t\tthis.set(\"layout\", this._root.verticalLayout);\n\t\t\t\tstartLabel.setAll({ x: 0, y: undefined, centerX: 0, centerY: 0 });\n\t\t\t\tendLabel.setAll({ x: p100, y: undefined, centerX: p100, centerY: 0 });\n\t\t\t\tlabelContainer.setAll({ width: p100, height: undefined });\n\t\t\t\tif (tooltip) {\n\t\t\t\t\ttooltip.set(\"pointerOrientation\", \"vertical\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"stepCount\")) {\n\t\t\tconst stepCount = this.get(\"stepCount\", 1);\n\t\t\tconst startColor = this.get(\"startColor\")!;\n\t\t\tconst endColor = this.get(\"endColor\")!;\n\t\t\tthis.markerContainer.children.clear();\n\t\t\tif (stepCount > 1) {\n\t\t\t\tfor (let i = 0; i < stepCount; i++) {\n\t\t\t\t\tconst marker = this.makeMarker();\n\n\t\t\t\t\tif (orientation == \"vertical\") {\n\t\t\t\t\t\tthis.markerContainer.children.moveValue(marker, 0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.markerContainer.children.push(marker);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (startColor && endColor) {\n\t\t\t\t\t\tmarker.set(\"fill\", Color.interpolate(i / stepCount, startColor, endColor));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (stepCount == 1) {\n\t\t\t\tconst marker = this.makeMarker();\n\t\t\t\tthis.markerContainer.children.push(marker);\n\t\t\t\tconst gradient = LinearGradient.new(this._root, { stops: [{ color: startColor }, { color: endColor }] });\n\n\t\t\t\tif (orientation == \"vertical\") {\n\t\t\t\t\tgradient.set(\"rotation\", 90);\n\t\t\t\t\tlet stops = gradient.get(\"stops\");\n\t\t\t\t\tif (stops) {\n\t\t\t\t\t\tstops.reverse();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tgradient.set(\"rotation\", 0);\n\t\t\t\t}\n\t\t\t\tif (startColor && endColor) {\n\t\t\t\t\tmarker.set(\"fillGradient\", gradient);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.isDirty(\"startText\") || this.isDirty(\"startValue\")) {\n\t\t\tstartLabel.set(\"text\", this.get(\"startText\", this.getNumberFormatter().format(this.get(\"startValue\", 0))));\n\t\t}\n\n\t\tif (this.isDirty(\"endText\") || this.isDirty(\"endValue\")) {\n\t\t\tendLabel.set(\"text\", this.get(\"endText\", this.getNumberFormatter().format(this.get(\"endValue\", 1))))\n\t\t}\n\t}\n}\n","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"./Graphics\";\r\n\r\nexport interface ITriangleSettings extends IGraphicsSettings {\r\n}\r\n\r\nexport interface ITrianglePrivate extends IGraphicsPrivate {\r\n}\r\n\r\n/**\r\n * Draws a triangle.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Triangle extends Graphics {\r\n\r\n\tdeclare public _settings: ITriangleSettings;\r\n\tdeclare public _privateSettings: ITrianglePrivate;\r\n\r\n\tpublic static className: string = \"Triangle\";\r\n\tpublic static classNames: Array = Graphics.classNames.concat([Triangle.className]);\r\n\r\n\tpublic _beforeChanged() {\r\n\t\tsuper._beforeChanged();\r\n\r\n\t\tif (this.isDirty(\"width\") || this.isDirty(\"height\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\")) {\r\n\t\t\tthis._clear = true;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic _changed() {\r\n\t\tsuper._changed();\r\n\r\n\t\tif (this._clear && !this.get(\"draw\")) {\r\n\t\t\tthis._draw();\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _draw() {\r\n\t\tconst w = this.width();\r\n\t\tconst h = this.height();\r\n\t\tconst display = this._display;\r\n\t\tdisplay.moveTo(-w / 2, h / 2);\r\n\t\tdisplay.lineTo(0, -h / 2);\r\n\t\tdisplay.lineTo(w / 2, h / 2);\r\n\t\tdisplay.lineTo(-w / 2, h / 2);\r\n\t\tdisplay.closePath();\r\n\r\n\t}\r\n\r\n\tpublic _updateSize() {\r\n\t\tthis.markDirty()\r\n\t\tthis._clear = true;\r\n\t}\r\n}\r\n","import { Scrollbar, IScrollbarPrivate, IScrollbarSettings, IScrollbarEvents } from \"./Scrollbar\";\r\n\r\nexport interface ISliderSettings extends IScrollbarSettings {\r\n}\r\n\r\nexport interface ISliderPrivate extends IScrollbarPrivate {\r\n}\r\n\r\nexport interface ISliderEvents extends IScrollbarEvents {\r\n}\r\n\r\n/**\r\n * A control that allows zooming chart's axes, or other uses requiring range\r\n * selection.\r\n */\r\nexport class Slider extends Scrollbar {\r\n\r\n\tdeclare public _settings: ISliderSettings;\r\n\tdeclare public _privateSettings: ISliderPrivate;\r\n\tdeclare public _events: ISliderEvents;\r\n\r\n\tpublic static className: string = \"Slider\";\r\n\tpublic static classNames: Array = Scrollbar.classNames.concat([Slider.className]);\r\n\r\n\r\n\tprotected _afterNew() {\r\n\t\tthis._addOrientationClass();\r\n\t\tsuper._afterNew();\r\n\r\n\t\tthis.endGrip.setPrivate(\"visible\", false);\r\n\t\tthis.thumb.setPrivate(\"visible\", false);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic updateGrips() {\r\n\t\tsuper.updateGrips();\r\n\t\tconst startGrip = this.startGrip;\r\n\t\tthis.endGrip.setAll({ x: startGrip.x(), y: startGrip.y() });\r\n\t\tthis.setRaw(\"end\", this.get(\"start\"));\r\n\t}\r\n}\r\n","import { Pattern, IPatternSettings, IPatternPrivate } from \"./Pattern\";\r\nimport { Color } from \"../../util/Color\";\r\n\r\nexport interface IGrainPatternSettings extends IPatternSettings {\r\n\r\n\t/**\r\n\t * Size of a grain in pixels.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tsize?: number;\r\n\r\n\t/**\r\n\t * Density of noise.\r\n\t *\r\n\t * Value range: `0` (no noise applied) to `1` (noise is applied to every\r\n\t * pixel).\r\n\t *\r\n\t * The bigger the value, the higher chance that pixel will have another pixel\r\n\t * painted over with random opacity from `minOpacity` to `maxOpacity`.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tdensity?: number;\r\n\r\n\t/**\r\n\t * Minimum opacity of a noise pixel.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tminOpacity?: number;\r\n\r\n\t/**\r\n\t * Maximum opacity of a noise pixel.\r\n\t *\r\n\t * @default 0.3\r\n\t */\r\n\tmaxOpacity?: number;\r\n\r\n\t/**\r\n\t * An array of colors to randomly use for pixels.\r\n\t *\r\n\t * @default [color(0x000000)]\r\n\t */\r\n\tcolors?: Array;\r\n\r\n\t/**\r\n\t * Horizontal gap between noise pixels measured in `size`.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\thorizontalGap?: number;\r\n\r\n\t/**\r\n\t * Vertical gap between noise pixels measured in `size`.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tverticalGap?: number;\r\n\r\n}\r\n\r\nexport interface IGrainPatternPrivate extends IPatternPrivate {\r\n}\r\n\r\n/**\r\n * Grain pattern.\r\n * \r\n * Allows to add grain (noise) effect to your [[Graphics]] objects.\r\n * \r\n * Note, grain pattern does not support `fill` and `color` setting.\r\n * Use `colors` setting to define colors of a grain pixels.\r\n * \r\n * Note, rotation setting is not supported by this pattern.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Grain_patterns} for more info\r\n * @since 5.5.0\r\n */\r\nexport class GrainPattern extends Pattern {\r\n\tdeclare public _settings: IGrainPatternSettings;\r\n\tdeclare public _privateSettings: IGrainPatternPrivate;\r\n\r\n\tpublic static className: string = \"GrainPattern\";\r\n\tpublic static classNames: Array = Pattern.classNames.concat([GrainPattern.className]);\r\n\r\n\tpublic canvas: HTMLCanvasElement = document.createElement(\"canvas\");\r\n\tpublic context: CanvasRenderingContext2D = this.canvas.getContext(\"2d\")!;\r\n\r\n\tprotected _clearGrain: boolean = false;\r\n\r\n\tpublic _beforeChanged() {\r\n\t\t//document.body.appendChild(this.canvas); // temp\r\n\t\tthis.canvas.width = this.get(\"width\", 200);\r\n\t\tthis.canvas.height = this.get(\"height\", 200);\r\n\r\n\t\tif (this.isDirty(\"size\") || this.isDirty(\"density\") || this.isDirty(\"minOpacity\") || this.isDirty(\"maxOpacity\") || this.isDirty(\"colors\") || this.isDirty(\"horizontalGap\") || this.isDirty(\"verticalGap\")) {\r\n\t\t\tthis._clearGrain = true;\r\n\t\t}\r\n\t\tsuper._beforeChanged();\r\n\t}\r\n\r\n\r\n\tpublic _changed() {\r\n\t\tsuper._changed();\r\n\r\n\t\tif (this._clearGrain) {\r\n\t\t\tconst width = this.get(\"width\", 200);\r\n\t\t\tconst height = this.get(\"height\", 200);\r\n\r\n\t\t\tconst patternData = this.context.getImageData(0, 0, width, height);\r\n\r\n\t\t\tconst size = Math.max(1, this.get(\"size\", 1));\r\n\t\t\tconst minOpacity = this.get(\"minOpacity\", 0);\r\n\t\t\tconst maxOpacity = this.get(\"maxOpacity\", 0.3);\r\n\r\n\t\t\tconst colors = this.get(\"colors\", [this.get(\"color\", Color.fromHex(0x000000))])\r\n\r\n\t\t\tconst cols = width / size;\r\n\t\t\tconst rows = height / size;\r\n\t\t\tconst density = this.get(\"density\", 1);\r\n\t\t\tconst horizontalGap = this.get(\"horizontalGap\", 0) + 1;\r\n\t\t\tconst verticalGap = this.get(\"verticalGap\", 0) + 1;\r\n\r\n\t\t\tfor (let r = 0; r < rows; r++) {\r\n\r\n\t\t\t\tif (verticalGap > 0) {\r\n\t\t\t\t\tif (r / verticalGap != Math.round(r / verticalGap)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (let c = 0; c < cols; c++) {\r\n\t\t\t\t\tconst color = colors[Math.floor(Math.random() * colors.length)];\r\n\t\t\t\t\tconst alpha = (minOpacity + Math.random() * (maxOpacity - minOpacity)) * 255;\r\n\t\t\t\t\tconst rnd = Math.random();\r\n\r\n\t\t\t\t\tif (horizontalGap > 0) {\r\n\t\t\t\t\t\tif (c / horizontalGap != Math.round(c / horizontalGap)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (rnd < density) {\r\n\t\t\t\t\t\tthis._setRectData(c, r, size, width, patternData.data, color.r, color.g, color.b, alpha);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.context.putImageData(patternData, 0, 0);\r\n\t\t\tthis._pattern = this.context.createPattern(this.canvas, \"repeat\");\r\n\t\t}\r\n\r\n\t\tthis._clearGrain = false;\r\n\t}\r\n\r\n\tprotected _checkDirtyFill() {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprotected _setRectData(col: number, row: number, size: number, width: number, data: Uint8ClampedArray, rc: number, gc: number, bc: number, ac: number) {\r\n\t\tfor (var c = col * size; c < col * size + size; c++) {\r\n\t\t\tfor (var r = row * size; r < row * size + size; r++) {\r\n\t\t\t\tvar i = (r * width + c) * 4;\r\n\r\n\t\t\t\tdata[i] = rc;\r\n\t\t\t\tdata[i + 1] = gc;\r\n\t\t\t\tdata[i + 2] = bc;\r\n\t\t\t\tdata[i + 3] = ac;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import type { IGradient } from \"../backend/Renderer\";\nimport type { Sprite } from \"../Sprite\";\nimport type { Percent } from \"../../util/Percent\";\n\nimport { Gradient, IGradientSettings, IGradientPrivate } from \"./Gradient\";\nimport { Color } from \"../../util/Color\";\n\nimport * as $array from \"../../util/Array\";\nimport * as $type from \"../../util/Type\";\nimport * as $utils from \"../../util/Utils\";\n\n\nexport interface IRadialGradientSettings extends IGradientSettings {\n\n\t/**\n\t * Gradient radius in pixels or percent (relative to the `target`).\n\t */\n\tradius?: number | Percent;\n\n\t/**\n\t * X position.\n\t */\n\tx?: number | Percent;\n\n\t/**\n\t * Y position.\n\t */\n\ty?: number | Percent;\n\n}\n\nexport interface IRadialGradientPrivate extends IGradientPrivate {\n}\n\n/**\n * Radial gradient.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\n */\nexport class RadialGradient extends Gradient {\n\n\tdeclare public _settings: IRadialGradientSettings;\n\tdeclare public _privateSettings: IRadialGradientPrivate;\n\n\tpublic static className: string = \"RadialGradient\";\n\tpublic static classNames: Array = Gradient.classNames.concat([RadialGradient.className]);\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getFill(target: Sprite): IGradient {\n\t\tconst bounds = this.getBounds(target);\n\n\t\tlet x = 0;\n\t\tlet y = 0;\n\n\t\tlet l = bounds.left || 0;\n\t\tlet r = bounds.right || 0;\n\t\tlet t = bounds.top || 0;\n\t\tlet b = bounds.bottom || 0;\n\n\t\tconst width = r - l;\n\t\tconst height = b - t;\n\n\t\tlet radius = target.get(\"radius\" as any);\n\t\tif ($type.isNumber(radius)) {\n\t\t\tx = 0;\n\t\t\ty = 0;\n\t\t}\n\t\telse {\n\t\t\tradius = Math.min(width, height) / 2;\n\t\t\tx = width / 2;\n\t\t\ty = height / 2;\n\t\t}\n\n\t\tlet ux = this.get(\"x\");\n\t\tlet uy = this.get(\"y\");\n\t\tif (ux != null) {\n\t\t\tx = $utils.relativeToValue(ux, width);\n\t\t}\n\n\t\tif (uy != null) {\n\t\t\ty = $utils.relativeToValue(uy, height);\n\t\t}\n\n\t\tconst gradient = this._root._renderer.createRadialGradient(x, y, 0, x, y, radius);\n\t\tconst stops = this.get(\"stops\")!;\n\t\tif (stops) {\n\t\t\tlet i = 0;\n\t\t\t$array.each(stops, (stop) => {\n\n\t\t\t\tlet offset = stop.offset;\n\n\t\t\t\tif (!$type.isNumber(offset)) {\n\t\t\t\t\toffset = i / (stops.length - 1);\n\t\t\t\t}\n\n\t\t\t\tlet opacity = stop.opacity;\n\n\t\t\t\tif (!$type.isNumber(opacity)) {\n\t\t\t\t\topacity = 1;\n\t\t\t\t}\n\n\t\t\t\tlet color = stop.color;\n\n\t\t\t\tif (color) {\n\n\t\t\t\t\tconst lighten = stop.lighten;\n\t\t\t\t\tif (lighten) {\n\t\t\t\t\t\tcolor = Color.lighten(color, lighten)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst brighten = stop.brighten;\n\t\t\t\t\tif (brighten) {\n\t\t\t\t\t\tcolor = Color.brighten(color, brighten)\n\t\t\t\t\t}\n\n\t\t\t\t\tgradient.addColorStop(offset, 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + opacity + ')');\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t})\n\t\t}\n\n\t\treturn gradient\n\t}\n}\n","import { Pattern, IPatternSettings, IPatternPrivate } from \"./Pattern\";\n\nimport * as $math from \"../../util/Math\";\n\nexport interface ICirclePatternSettings extends IPatternSettings {\n\n\t/**\n\t * Gap between circles, in pixels.\n\t *\n\t * @default 3\n\t */\n\tgap?: number;\n\n\t/**\n\t * Radius of the circles, in pixels.\n\t *\n\t * @default 3\n\t */\n\tradius?: number;\n\n\t/**\n\t * If set to `true`, will place every second circle, creating checkered\n\t * pattern.\n\t *\n\t * @default false\n\t */\n\tcheckered?: boolean;\n\n\t/**\n\t * Center circles.\n\t *\n\t * @default true\n\t */\n\tcentered?: boolean;\n\n}\n\nexport interface ICirclePatternPrivate extends IPatternPrivate {\n}\n\n/**\n * Circle pattern.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class CirclePattern extends Pattern {\n\n\tdeclare public _settings: ICirclePatternSettings;\n\tdeclare public _privateSettings: ICirclePatternPrivate;\n\n\tpublic static className: string = \"CirclePattern\";\n\tpublic static classNames: Array = Pattern.classNames.concat([CirclePattern.className]);\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"gap\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tprotected _draw() {\n\t\tsuper._draw();\n\n\t\tconst checkered = this.get(\"checkered\", false);\n\t\tconst centered = this.get(\"centered\", true);\n\t\tconst gap = this.get(\"gap\", 0);\n\t\tconst rotation = this.get(\"rotation\", 0);\n\t\tlet w = this.get(\"width\", 100);\n\t\tlet h = this.get(\"height\", 100);\n\t\tlet radius = this.get(\"radius\", 3);\n\n\t\tlet cellW = radius * 2 + gap;\n\t\tlet cellH = radius * 2 + gap;\n\n\t\tlet cols = Math.round(w / cellW);\n\t\tlet rows = Math.round(h / cellH);\n\n\t\tcellW = w / cols;\n\t\tcellH = h / rows;\n\n\t\tif (rotation != 0) {\n\t\t\t// @todo this is probably not right\n\t\t\tthis._display.x = cellW * $math.cos(rotation);\n\t\t\tthis._display.y = cellH * $math.sin(rotation);\n\t\t}\n\n\t\tconst color = this.get(\"color\");\n\t\tconst colorOpacity = this.get(\"colorOpacity\");\n\t\tif (color || colorOpacity) {\n\t\t\tthis._display.beginFill(color, colorOpacity);\n\t\t}\n\n\t\tfor (let r = rotation == 0 ? 0 : -rows * 2; r < rows * 2; r++) {\n\t\t\tfor (let c = rotation == 0 ? 0 : -cols * 2; c < cols * 2; c++) {\n\t\t\t\tif (!checkered || ((r & 1) != 1 && (c & 1) != 1) || ((r & 1) == 1 && (c & 1) == 1)) {\n\t\t\t\t\tlet x = c * cellW;\n\t\t\t\t\tlet y = r * cellH;\n\t\t\t\t\tif (centered) {\n\t\t\t\t\t\tx += cellW + gap / 2;\n\t\t\t\t\t\ty += cellH + gap / 2;\n\t\t\t\t\t}\n\t\t\t\t\tthis._display.drawCircle(x - radius, y - radius, radius);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (checkered) {\n\t\t\tw = w / 2 - gap * 2;\n\t\t\th = h / 2 - gap * 2;\n\t\t}\n\t\telse {\n\t\t\tw -= gap;\n\t\t\th -= gap;\n\t\t}\n\n\t\tif (color || colorOpacity) {\n\t\t\tthis._display.endFill();\n\t\t}\n\n\t}\n}\n","import { Pattern, IPatternSettings, IPatternPrivate } from \"./Pattern\";\nimport * as $type from \"../../util//Type\";\n\nexport interface ILinePatternSettings extends IPatternSettings {\n\n\t/**\n\t * Gap between lines, in pixels.\n\t *\n\t * @default 6\n\t */\n\tgap?: number;\n\n}\n\nexport interface ILinePatternPrivate extends IPatternPrivate {\n}\n\n/**\n * Line pattern.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class LinePattern extends Pattern {\n\n\tdeclare public _settings: ILinePatternSettings;\n\tdeclare public _privateSettings: ILinePatternPrivate;\n\n\tpublic static className: string = \"LinePattern\";\n\tpublic static classNames: Array = Pattern.classNames.concat([LinePattern.className]);\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"gap\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tprotected _draw() {\n\t\tsuper._draw();\n\n\t\tconst w = this.get(\"width\", 100);\n\t\tconst h = this.get(\"height\", 100);\n\t\tconst gap = this.get(\"gap\", 0);\n\t\tconst strokeWidth = this.get(\"strokeWidth\", 1);\n\n\t\tif (!gap) {\n\t\t\tthis._display.moveTo(0, 0);\n\t\t\tthis._display.lineTo(w, 0);\n\t\t}\n\t\telse {\n\t\t\tlet step = gap + strokeWidth;\n\t\t\tlet count = h / step;\n\n\t\t\tfor (let i = -count; i < count * 2; i++) {\n\t\t\t\tconst y = Math.round(i * step - step / 2) + 0.5;\n\t\t\t\tthis._display.moveTo(-w, y);\n\t\t\t\tthis._display.lineTo(w * 2, y);\n\t\t\t}\n\t\t}\n\n\t\tthis._display.lineStyle(strokeWidth, this.get(\"color\"), this.get(\"colorOpacity\"));\n\n\t\tlet strokeDasharray = this.get(\"strokeDasharray\");\n\t\tif ($type.isNumber(strokeDasharray)) {\n\t\t\tif (strokeDasharray < 0.5) {\n\t\t\t\tstrokeDasharray = [0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstrokeDasharray = [strokeDasharray]\n\t\t\t}\n\t\t}\n\t\tthis._display.setLineDash(strokeDasharray as number[]);\n\n\t\tconst strokeDashoffset = this.get(\"strokeDashoffset\");\n\t\tif (strokeDashoffset) {\n\t\t\tthis._display.setLineDashOffset(strokeDashoffset);\n\t\t}\n\n\t\tthis._display.endStroke();\n\t}\n}\n","import { Pattern, IPatternSettings, IPatternPrivate } from \"./Pattern\";\n\nimport * as $math from \"../../util/Math\";\n\nexport interface IRectanglePatternSettings extends IPatternSettings {\n\n\t/**\n\t * Gap between rectangles, in pixels.\n\t *\n\t * @default 6\n\t */\n\tgap?: number;\n\n\t/**\n\t * Maximum width of the rectangle, in pixels.\n\t *\n\t * @default 5\n\t */\n\tmaxWidth?: number;\n\n\t/**\n\t * Maximum height of the rectangle, in pixels.\n\t *\n\t * @default 5\n\t */\n\tmaxHeight?: number;\n\n\t/**\n\t * If set to `true`, will place every second rectangle, creating checkered\n\t * pattern.\n\t *\n\t * @default false\n\t */\n\tcheckered?: boolean;\n\n\t/**\n\t * Center rectangles.\n\t *\n\t * @default true\n\t */\n\tcentered?: boolean;\n\n}\n\nexport interface IRectanglePatternPrivate extends IPatternPrivate {\n}\n\n/**\n * Rectangle pattern.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class RectanglePattern extends Pattern {\n\tdeclare public _settings: IRectanglePatternSettings;\n\tdeclare public _privateSettings: IRectanglePatternPrivate;\n\n\tpublic static className: string = \"RectanglePattern\";\n\tpublic static classNames: Array = Pattern.classNames.concat([RectanglePattern.className]);\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"gap\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tprotected _draw() {\n\t\tsuper._draw();\n\n\t\tconst checkered = this.get(\"checkered\", false);\n\t\tconst centered = this.get(\"centered\", true);\n\t\tconst gap = this.get(\"gap\", 0);\n\t\tconst rotation = this.get(\"rotation\", 0);\n\t\tlet w = this.get(\"width\", 100);\n\t\tlet h = this.get(\"height\", 100);\n\t\tlet rectW = this.get(\"maxWidth\", 5);\n\t\tlet rectH = this.get(\"maxHeight\", 5);\n\n\t\tconst display = this._display;\n\n\t\tlet cellW = rectW + gap;\n\t\tlet cellH = rectH + gap;\n\n\t\tlet cols = Math.round(w / cellW);\n\t\tlet rows = Math.round(h / cellH);\n\n\t\tcellW = w / cols;\n\t\tcellH = h / rows;\n\n\t\tif (rotation != 0) {\n\t\t\t// @todo this is probably not right\n\t\t\tdisplay.x = cellW / 2 * $math.cos(rotation);\n\t\t\tdisplay.y = -cellH / 2 * $math.sin(rotation);\n\t\t}\n\n\t\tfor (let r = rotation == 0 ? 0 : -rows * 2; r < rows * 2; r++) {\n\t\t\tfor (let c = rotation == 0 ? 0 : -cols * 2; c < cols * 2; c++) {\n\t\t\t\tif (!checkered || ((r & 1) != 1 && (c & 1) != 1) || ((r & 1) == 1 && (c & 1) == 1)) {\n\t\t\t\t\tlet x = c * cellW;\n\t\t\t\t\tlet y = r * cellH;\n\t\t\t\t\tif (centered) {\n\t\t\t\t\t\tx += (cellW - rectW) / 2;\n\t\t\t\t\t\ty += (cellH - rectH) / 2;\n\t\t\t\t\t}\n\t\t\t\t\tdisplay.drawRect(x, y, rectW, rectH);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (checkered) {\n\t\t\tw = w / 2 - gap * 2;\n\t\t\th = h / 2 - gap * 2;\n\t\t}\n\t\telse {\n\t\t\tw -= gap;\n\t\t\th -= gap;\n\t\t}\n\n\t\tconst color = this.get(\"color\");\n\t\tconst colorOpacity = this.get(\"colorOpacity\");\n\t\tif (color || colorOpacity) {\n\t\t\t// this._display.lineStyle(strokeWidth, stroke, colorOpacity);\n\t\t\t// this._display.endStroke();\n\t\t\tdisplay.beginFill(color, colorOpacity);\n\t\t\tdisplay.endFill();\n\t\t}\n\n\t}\n}\n","import { Pattern, IPatternSettings, IPatternPrivate } from \"./Pattern\";\n\n//import * as $math from \"../../util/Math\";\n\nexport interface IPathPatternSettings extends IPatternSettings {\n\n\t// /**\n\t// * Gap between Paths, in pixels.\n\t// *\n\t// * @default 6\n\t// */\n\t// gap?: number;\n\n\t// /**\n\t// * Maximum width of the Path, in pixels.\n\t// *\n\t// * @default 5\n\t// */\n\t// maxWidth?: number;\n\n\t// /**\n\t// * Maximum height of the Path, in pixels.\n\t// *\n\t// * @default 5\n\t// */\n\t// maxHeight?: number;\n\n\t// /**\n\t// * If set to `true`, will place every second Path, creating checkered\n\t// * pattern.\n\t// *\n\t// * @default false\n\t// */\n\t// checkered?: boolean;\n\n\t// /**\n\t// * Center image.\n\t// *\n\t// * @default true\n\t// */\n\t// centered?: boolean;\n\n\t/**\n\t * Use an SVG path as pattern.\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths} for more information\n\t */\n\tsvgPath?: string;\n\n}\n\nexport interface IPathPatternPrivate extends IPatternPrivate {\n}\n\n/**\n * A pattern that uses an SVG path.\n *\n * @since 5.2.33\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n */\nexport class PathPattern extends Pattern {\n\tdeclare public _settings: IPathPatternSettings;\n\tdeclare public _privateSettings: IPathPatternPrivate;\n\n\tpublic static className: string = \"PathPattern\";\n\tpublic static classNames: Array = Pattern.classNames.concat([PathPattern.className]);\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"svgPath\")) {\n\t\t\tthis._clear = true;\n\t\t}\n\t}\n\n\tprotected _draw() {\n\t\tsuper._draw();\n\n\t\t// const checkered = this.get(\"checkered\", false);\n\t\t// const centered = this.get(\"centered\", true);\n\t\t// const gap = this.get(\"gap\", 0);\n\t\t// const rotation = this.get(\"rotation\", 0);\n\t\t// let w = this.get(\"width\", 100);\n\t\t// let h = this.get(\"height\", 100);\n\t\t// let rectW = this.get(\"maxWidth\", 5);\n\t\t// let rectH = this.get(\"maxHeight\", 5);\n\n\n\t\t// let cellW = rectW + gap;\n\t\t// let cellH = rectH + gap;\n\n\t\t// let cols = Math.round(w / cellW);\n\t\t// let rows = Math.round(h / cellH);\n\n\t\t// cellW = w / cols;\n\t\t// cellH = h / rows;\n\n\t\t// if (rotation != 0) {\n\t\t// \t// @todo this is probably not right\n\t\t// \tthis._display.x = cellW / 2 * $math.cos(rotation);\n\t\t// \tthis._display.y = -cellH / 2 * $math.sin(rotation);\n\t\t// }\n\n\t\t// for (let r = rotation == 0 ? 0 : -rows * 2; r < rows * 2; r++) {\n\t\t// \tfor (let c = rotation == 0 ? 0 : -cols * 2; c < cols * 2; c++) {\n\t\t// \t\tif (!checkered || ((r & 1) != 1 && (c & 1) != 1) || ((r & 1) == 1 && (c & 1) == 1)) {\n\t\t// \t\t\tlet x = c * cellW;\n\t\t// \t\t\tlet y = r * cellH;\n\t\t// \t\t\tif (centered) {\n\t\t// \t\t\t\tx += (cellW - rectW) / 2;\n\t\t// \t\t\t\ty += (cellH - rectH) / 2;\n\t\t// \t\t\t}\n\t\t// \t\t\tthis._display.drawRect(x, y, rectW, rectH);\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\t// if (checkered) {\n\t\t// \tw = w / 2 - gap * 2;\n\t\t// \th = h / 2 - gap * 2;\n\t\t// }\n\t\t// else {\n\t\t// \tw -= gap;\n\t\t// \th -= gap;\n\t\t// }\n\n\t\tconst svgPath = this.get(\"svgPath\");\n\t\tif (svgPath != null) {\n\t\t\tthis._display.svgPath(svgPath!);\n\t\t}\n\n\t\tconst color = this.get(\"color\");\n\t\tconst colorOpacity = this.get(\"colorOpacity\");\n\t\tif (color || colorOpacity) {\n\t\t\t// this._display.lineStyle(strokeWidth, stroke, colorOpacity);\n\t\t\t// this._display.endStroke();\n\t\t\tthis._display.beginFill(color, colorOpacity);\n\t\t\tthis._display.endFill();\n\t\t}\n\n\t}\n}\n","import * as $type from \"./Type\"\nimport * as $object from \"./Object\"\n\nexport interface IJSONParserOptions {\n\n\t/**\n\t * Reverse the order of parsed data.\n\t */\n\treverse?: boolean;\n\n}\n\n/**\n * Tool to parse JSON string into structured data.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Parsing} for more info\n * @important\n */\nexport class JSONParser {\n\n\t/**\n\t * Parses JSON string.\n\t * \n\t * @param input JSON\n\t * @param options Options\n\t * @return Data\n\t */\n\tpublic static parse(input: string, options?: IJSONParserOptions): any {\n\t\toptions = this._applyDefaults(options);\n\t\ttry {\n\t\t\tif ($type.isString(input)) {\n\t\t\t\tlet data = JSON.parse(input);\n\t\t\t\tif (options.reverse && $type.isArray(data)) {\n\t\t\t\t\tdata.reverse();\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\t}\n\t\t\telse if ($type.isArray(input) || $type.isObject(input)) {\n\t\t\t\treturn input;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow(\"Unable to parse JSON data\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprotected static _applyDefaults(options?: IJSONParserOptions): IJSONParserOptions {\n\t\tconst normalized: IJSONParserOptions = {};\n\t\tconst defaults = {\n\t\t\treverse: false\n\t\t};\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\t\t$object.each(defaults, (key, val) => {\n\t\t\tnormalized[key] = options![key] || val;\n\t\t});\n\t\treturn normalized;\n\t}\n}\n\n\nexport interface ICSVParserOptions {\n\n\t/**\n\t * Delimiter used for columns.\n\t * \n\t * @default \",\"\n\t */\n\tdelimiter?: string;\n\n\t/**\n\t * Reverse the order of parsed data.\n\t */\n\treverse?: boolean;\n\n\t/**\n\t * Skip first X rows.\n\t *\n\t * @default 0\n\t */\n\tskipRows?: number;\n\n\t/**\n\t * Skip empty rows.\n\t *\n\t * @default true\n\t */\n\tskipEmpty?: boolean;\n\n\t/**\n\t * Use the first row to name the columns.\n\t * \n\t * @default false\n\t */\n\tuseColumnNames?: boolean;\n\n}\n\n/**\n * Tool to parse JSON string into structured data.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Parsing} for more info\n * @important\n */\nexport class CSVParser {\n\n\t/**\n\t * Parses CSV string.\n\t * \n\t * @param input CSV\n\t * @param options Options\n\t * @return Data\n\t */\n\tpublic static parse(input: string, options?: ICSVParserOptions): any {\n\t\toptions = this._applyDefaults(options);\n\n\t\t// Get CSV data as array\n\t\tlet data = this.CSVToArray(input, options.delimiter!);\n\n\t\t// Init resuling array\n\t\tlet res: any[] = [],\n\t\t\tcols: string[] = [],\n\t\t\tcol: string,\n\t\t\ti: number;\n\n\t\t// Skip rows\n\t\tfor (i = 0; i < options.skipRows!; i++) {\n\t\t\tdata.shift();\n\t\t}\n\n\t\t// First row holds column names?\n\t\tif (options.useColumnNames) {\n\t\t\tcols = data.shift();\n\n\t\t\t// Normalize column names\n\t\t\tfor (let x = 0; x < cols.length; x++) {\n\t\t\t\t// trim\n\t\t\t\tcol = cols[x] != null ? cols[x].replace(/^\\s+|\\s+$/gm, \"\") : \"\";\n\n\t\t\t\t// Check for empty\n\t\t\t\tif (\"\" === col) {\n\t\t\t\t\tcol = \"col\" + x;\n\t\t\t\t}\n\n\t\t\t\tcols[x] = col;\n\t\t\t}\n\t\t}\n\n\t\t// Iterate through the result set\n\t\tlet row;\n\t\twhile (true) {\n\t\t\trow = options.reverse ? data.pop() : data.shift();\n\n\t\t\tif (!row) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (options.skipEmpty && row.length === 1 && row[0] === \"\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet dataPoint: any = {};\n\t\t\tfor (i = 0; i < row.length; i++) {\n\t\t\t\tcol = undefined === cols[i] ? \"col\" + i : cols[i];\n\t\t\t\tdataPoint[col] = row[i];\n\t\t\t}\n\t\t\tres.push(dataPoint);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic static CSVToArray(data: string, delimiter: string): any[] {\n\n\t\t// Check to see if the delimiter is defined. If not,\n\t\t// then default to comma.\n\t\tdelimiter = (delimiter || ',');\n\n\t\t// Create a regular expression to parse the CSV values.\n\t\tlet objPattern = new RegExp(\n\t\t\t(\n\t\t\t\t// Delimiters.\n\t\t\t\t\"(\\\\\" + delimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\n\n\t\t\t\t// Quoted fields.\n\t\t\t\t\"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\n\n\t\t\t\t// Standard fields.\n\t\t\t\t\"([^\\\"\\\\\" + delimiter + \"\\\\r\\\\n]*))\"\n\t\t\t),\n\t\t\t\"gi\"\n\t\t);\n\n\n\t\t// Create an array to hold our data. Give the array\n\t\t// a default empty first row.\n\t\tlet arrData: any[] = [\n\t\t\t[]\n\t\t];\n\n\t\t// Create an array to hold our individual pattern\n\t\t// matching groups.\n\t\tlet arrMatches = null;\n\n\t\t// Keep looping over the regular expression matches\n\t\t// until we can no longer find a match.\n\t\twhile (true) {\n\t\t\tarrMatches = objPattern.exec(data);\n\n\t\t\tif (!arrMatches) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Get the delimiter that was found.\n\t\t\tlet strMatchedDelimiter = arrMatches[1];\n\n\t\t\t// Check to see if the given delimiter has a length\n\t\t\t// (is not the start of string) and if it matches\n\t\t\t// field delimiter. If id does not, then we know\n\t\t\t// that this delimiter is a row delimiter.\n\t\t\tif (\n\t\t\t\tstrMatchedDelimiter.length &&\n\t\t\t\t(strMatchedDelimiter !== delimiter)\n\t\t\t) {\n\n\t\t\t\t// Since we have reached a new row of data,\n\t\t\t\t// add an empty row to our data array.\n\t\t\t\tarrData.push([]);\n\n\t\t\t}\n\n\t\t\t// Now that we have our delimiter out of the way,\n\t\t\t// let's check to see which kind of value we\n\t\t\t// captured (quoted or unquoted).\n\t\t\tlet strMatchedValue;\n\t\t\tif (arrMatches[2]) {\n\n\t\t\t\t// We found a quoted value. When we capture\n\t\t\t\t// this value, unescape any double quotes.\n\t\t\t\tstrMatchedValue = arrMatches[2].replace(\n\t\t\t\t\tnew RegExp(\"\\\"\\\"\", \"g\"),\n\t\t\t\t\t\"\\\"\"\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// We found a non-quoted value.\n\t\t\t\tstrMatchedValue = arrMatches[3];\n\n\t\t\t}\n\n\t\t\t// Now that we have our value string, let's add\n\t\t\t// it to the data array.\n\t\t\tarrData[arrData.length - 1].push(strMatchedValue);\n\t\t}\n\n\t\t// Return the parsed data.\n\t\treturn (arrData);\n\t}\n\n\tprotected static _applyDefaults(options?: ICSVParserOptions): ICSVParserOptions {\n\t\tconst normalized: ICSVParserOptions = {};\n\t\tconst defaults = {\n\t\t\tdelimiter: \",\",\n\t\t\treverse: false,\n\t\t\tskipRows: 0,\n\t\t\tskipEmpty: true,\n\t\t\tuseColumnNames: false\n\t\t};\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\t\t$object.each(defaults, (key, val) => {\n\t\t\tnormalized[key] = options![key] || val;\n\t\t});\n\t\treturn normalized;\n\n\t}\n\n}","import { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"./Entity\"\nimport { Color } from \"./Color\"\nimport * as $type from \"./Type\"\nimport * as $object from \"./Object\"\nimport * as $array from \"./Array\"\n\n\nexport interface IDataProcessorSettings extends IEntitySettings {\n\n\t/**\n\t * Date format used for parsing string-based dates.\n\t */\n\tdateFormat?: string;\n\n\t/**\n\t * A list of fields in data that need to be converted to tiemstamps.\n\t */\n\tdateFields?: string[];\n\n\t/**\n\t * A list of fields in data that need to be converted to numbers.\n\t */\n\tnumericFields?: string[];\n\n\t/**\n\t * A list of fields in data that need to be converted to [[Color]] objects.\n\t */\n\tcolorFields?: string[];\n\n\t/**\n\t * Replace empty values with this.\n\t */\n\temptyAs?: any;\n\n}\n\nexport interface IDataProcessorPrivate extends IEntityPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tdeepFields?: string[];\n}\n\nexport interface IDataProcessorEvents extends IEntityEvents {\n}\n\n/**\n * A tool that can process the data before it is being used in charts.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Pre_processing_data} for more info\n * @important\n */\nexport class DataProcessor extends Entity {\n\tdeclare public _settings: IDataProcessorSettings;\n\tdeclare public _privateSettings: IDataProcessorPrivate;\n\n\tprotected _checkDates: boolean = false;\n\tprotected _checkNumbers: boolean = false;\n\tprotected _checkColors: boolean = false;\n\tprotected _checkEmpty: boolean = false;\n\tprotected _checkDeep: boolean = false;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis._checkFeatures();\n\t\tthis.on(\"dateFields\", () => this._checkFeatures());\n\t\tthis.on(\"dateFormat\", () => this._checkFeatures());\n\t\tthis.on(\"numericFields\", () => this._checkFeatures());\n\t\tthis.on(\"colorFields\", () => this._checkFeatures());\n\t\tthis.on(\"emptyAs\", () => this._checkFeatures());\n\t}\n\n\tprotected _checkFeatures(): void {\n\t\tif (this.isDirty(\"dateFields\") || this.isDirty(\"dateFormat\")) {\n\t\t\tthis._checkDates = this.get(\"dateFields\") && (this.get(\"dateFields\")!.length > 0);\n\t\t}\n\t\tif (this.isDirty(\"numericFields\")) {\n\t\t\tthis._checkNumbers = this.get(\"numericFields\") && (this.get(\"numericFields\")!.length > 0);\n\t\t}\n\t\tif (this.isDirty(\"colorFields\")) {\n\t\t\tthis._checkColors = this.get(\"colorFields\") && (this.get(\"colorFields\")!.length > 0);\n\t\t}\n\t\tif (this.isDirty(\"emptyAs\")) {\n\t\t\tthis._checkEmpty = this.get(\"emptyAs\") != null;\n\t\t}\n\t\tthis._checkDeepFeatures();\n\t}\n\n\tprotected _checkDeepFeatures(): void {\n\t\tconst deepFields: string[] = [];\n\t\t$array.each([\"dateFields\", \"numericFields\", \"colorFields\"], (where: any) => {\n\t\t\t$array.each(this.get(where, []), (field) => {\n\t\t\t\tconst steps = (field).split(\".\");\n\t\t\t\tsteps.pop();\n\t\t\t\twhile (steps.length > 0) {\n\t\t\t\t\tdeepFields.push(steps.join(\".\"));\n\t\t\t\t\tsteps.pop();\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\tthis._checkDeep = deepFields.length > 0;\n\t\tthis.setPrivate(\"deepFields\", deepFields);\n\t}\n\n\t/**\n\t * Processess entire array of data.\n\t *\n\t * NOTE: calling this will modify original array!\n\t */\n\tpublic processMany(data: { [index: string]: any }[]): void {\n\t\tif ($type.isArray(data) && (this._checkDates || this._checkNumbers || this._checkColors || this._checkEmpty)) {\n\t\t\t$array.each(data, (row) => {\n\t\t\t\tthis.processRow(row);\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Processes a row (object) of data.\n\t * \n\t * NOTE: calling this will modify values of the original object!\n\t */\n\tpublic processRow(row: { [index: string]: any }, prefix: string = \"\"): void {\n\t\t$object.each(row, (key: any, _value) => {\n\t\t\tconst lookupKey: string = prefix + key;\n\t\t\tif (this._checkEmpty) {\n\t\t\t\trow[key] = this._maybeToEmpty(row[key]);\n\t\t\t}\n\t\t\tif (this._checkNumbers) {\n\t\t\t\trow[key] = this._maybeToNumber(lookupKey, row[key]);\n\t\t\t}\n\t\t\tif (this._checkDates) {\n\t\t\t\trow[key] = this._maybeToDate(lookupKey, row[key]);\n\t\t\t}\n\t\t\tif (this._checkColors) {\n\t\t\t\trow[key] = this._maybeToColor(lookupKey, row[key]);\n\t\t\t}\n\t\t\tif (this._checkDeep && (this).getPrivate(\"deepFields\", []).indexOf(lookupKey) !== -1 && $type.isObject(row[key])) {\n\t\t\t\tthis.processRow(row[key], lookupKey + \".\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected _maybeToNumber(field: string, value: any): any {\n\t\tif (this.get(\"numericFields\")!.indexOf(field) !== -1) {\n\t\t\treturn $type.toNumber(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected _maybeToDate(field: string, value: any): any {\n\t\tif (this.get(\"dateFields\")!.indexOf(field) !== -1) {\n\t\t\treturn this._root.dateFormatter.parse(value, this.get(\"dateFormat\", \"\")).getTime();\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected _maybeToEmpty(value: any): any {\n\t\tif ((value == null || value == \"\") && this.get(\"emptyAs\") != null) {\n\t\t\treturn this.get(\"emptyAs\");\n\t\t}\n\t\treturn value;\n\t}\n\n\tprotected _maybeToColor(field: string, value: any): any {\n\t\tif (this.get(\"colorFields\")!.indexOf(field) !== -1) {\n\t\t\treturn Color.fromAny(value);\n\t\t}\n\t\treturn value;\n\t}\n\n}\n","/**\n * A collection of network-related functions\n */\n\n/**\n * ============================================================================\n * IMPORTS\n * ============================================================================\n * @hidden\n */\nimport type { Optional } from \"./Type\";\n\n/**\n * Defines an interface for objects that hold a net request result.\n */\nexport interface INetLoadResult {\n\n\t/**\n\t * A reference to original [[XMLHttpRequest]].\n\t */\n\txhr: XMLHttpRequest;\n\n\t/**\n\t * Request response body.\n\t */\n\tresponse?: string;\n\n\t/**\n\t * Request response as Blob. (if set `responseType = \"blob\"`)\n\t */\n\tblob?: Blob;\n\n\t/**\n\t * Response `Content-Type`.\n\t */\n\ttype: string | null;\n\n\t/**\n\t * Was there an error?\n\t */\n\terror: boolean;\n\n\t/**\n\t * A target object that made the net load request.\n\t */\n\ttarget?: A;\n\n}\n\nexport interface INetRequestOptions {\n\n\t/**\n\t * Custom request headers to be added to HTTP(S) request.\n\t */\n\trequestHeaders?: { key: string, value: string }[];\n\n\t/**\n\t * Specify expected response type.\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType} for more info\n\t */\n\tresponseType?: XMLHttpRequestResponseType;\n\n\t/**\n\t * Specify whether to send CORS credentials (defaults to `false`).\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials} for more info\n\t */\n\twithCredentials?: boolean;\n}\n\n/**\n * Loads an external file via its URL.\n *\n * Please note that this is an asynchronous function.\n *\n * It will not return the result, but rather a `Promise`.\n *\n * You can use the `await` notion, or `then()`.\n *\n * ```TypeScript\n * // Using await\n * let response = await Net.load( \"http://www.my.com/data.json\" );\n * console.log( response.response );\n *\n * // Using then()\n * Net.load( \"http://www.my.com/data.json\" ).then( ( response ) => {\n * console.log( response.response );\n * } );\n * ```\n * ```JavaScript\n * // Using then()\n * Net.load( \"http://www.my.com/data.json\" ).then( function( response ) {\n * console.log( response.response );\n * } );\n * ```\n *\n * @async\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/net-load-utility/} for more info\n * @param url URL for the file to load\n * @param target A target element that is requesting the net load\n * @param options Request options\n * @return Result (Promise)\n */\nexport function load(url: string, target?: A, options?: INetRequestOptions): Promise> {\n\treturn new Promise>((success, error) => {\n\n\t\t// Is return type Blob?\n\t\tlet isBlob = options != null && options.responseType == \"blob\";\n\n\t\t// Create request and set up handlers\n\t\tlet xhr = new XMLHttpRequest();\n\t\txhr.onload = () => {\n\t\t\tif (xhr.status === 200) {\n\n\t\t\t\tlet response: Optional;\n\t\t\t\tlet blob: Optional;\n\n\t\t\t\tif (isBlob) {\n\t\t\t\t\tblob = xhr.response;\n\t\t\t\t\treadBlob(blob!).then((response: any) => {\n\t\t\t\t\t\tlet output: INetLoadResult = {\n\t\t\t\t\t\t\txhr: xhr,\n\t\t\t\t\t\t\terror: false,\n\t\t\t\t\t\t\tresponse: response,\n\t\t\t\t\t\t\tblob: blob,\n\t\t\t\t\t\t\ttype: xhr.getResponseHeader(\"Content-Type\"),\n\t\t\t\t\t\t\ttarget: target\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsuccess(output);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresponse = xhr.responseText || xhr.response\n\t\t\t\t}\n\n\t\t\t\tlet output: INetLoadResult = {\n\t\t\t\t\txhr: xhr,\n\t\t\t\t\terror: false,\n\t\t\t\t\tresponse: response,\n\t\t\t\t\tblob: blob,\n\t\t\t\t\ttype: xhr.getResponseHeader(\"Content-Type\"),\n\t\t\t\t\ttarget: target\n\t\t\t\t};\n\t\t\t\tsuccess(output);\n\t\t\t}\n\t\t\telse {\n\t\t\t\terror({\n\t\t\t\t\txhr: xhr,\n\t\t\t\t\terror: true,\n\t\t\t\t\ttype: xhr.getResponseHeader(\"Content-Type\"),\n\t\t\t\t\ttarget: target\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\txhr.onerror = () => {\n\t\t\terror({\n\t\t\t\txhr: xhr,\n\t\t\t\terror: true,\n\t\t\t\ttype: xhr.getResponseHeader(\"Content-Type\"),\n\t\t\t\ttarget: target\n\t\t\t});\n\t\t};\n\n\t\t// Open request\n\t\txhr.open(\"GET\", url, true);\n\n\t\tif (options && options.withCredentials) {\n\t\t\txhr.withCredentials = true;\n\t\t}\n\n\t\t// Process options\n\t\tif (options != null) {\n\n\t\t\tif (options.requestHeaders != null) {\n\t\t\t\tfor (let i = 0; i < options.requestHeaders.length; i++) {\n\t\t\t\t\tlet header = options.requestHeaders[i];\n\t\t\t\t\txhr.setRequestHeader(header.key, header.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.responseType != null) {\n\t\t\t\txhr.responseType = options.responseType;\n\t\t\t}\n\t\t}\n\n\t\t// Send request\n\t\txhr.send();\n\n\t});\n\n}\n\n/**\n * Returns textual representation of a Blob object.\n *\n * @param blob Target blob\n * @return Text promise\n */\nexport function readBlob(blob: Blob): Promise {\n\treturn new Promise((success, error) => {\n\t\tconst reader = new FileReader()\n\n\t\treader.onload = _event => {\n\t\t\tsuccess(reader.result);\n\t\t}\n\n\t\treader.onerror = (e) => {\n\t\t\terror(e);\n\t\t}\n\n\t\treader.readAsText(blob);\n\t});\n}\n","/**\n * amCharts 5 locale\n * \n * Locale: en\n * Language: International English\n * Author: Martynas Majeris\n *\n * Follow instructions in [on this page](https://www.amcharts.com/docs/v5/tutorials/creating-translations/) to make corrections or add new translations.\n *\n * ---\n * Edit but leave the header section above this line. You can remove any\n * subsequent comment sections.\n * ---\n *\n * Use this file as a template to create translations. Leave the key part in\n * English intact. Fill the value with a translation.\n *\n * Empty string means no translation, so default \"International English\"\n * will be used.\n *\n * If you need the translation to literally be an empty string, use `null`\n * instead.\n *\n * IMPORTANT:\n * When translating make good effort to keep the translation length\n * at least the same chartcount as the English, especially for short prompts.\n *\n * Having significantly longer prompts may distort the actual charts.\n *\n * NOTE:\n * Some prompts - like months or weekdays - come in two versions: full and\n * shortened.\n *\n * If there's no official shortened version of these in your language, and it\n * would not be possible to invent such short versions that don't seem weird\n * to native speakers of that language, fill those with the same as full\n * version.\n *\n * PLACEHOLDERS:\n * Some prompts have placeholders like \"%1\". Those will be replaced by actual\n * values during translation and should be retained in the translated prompts.\n *\n * Placeholder positions may be changed to better suit structure of the\n * sentence.\n *\n * For example \"From %1 to %2\", when actually used will replace \"%1\" with an\n * actual value representing range start, and \"%2\" will be replaced by end\n * value.\n *\n * E.g. in a Scrollbar for Value axis \"From %1 to %2\" will become\n * \"From 100 to 200\". You may translate \"From\" and \"to\", as well as re-arrange\n * the order of the prompt itself, but make sure the \"%1\" and \"%2\" remain, in\n * places where they will make sense.\n *\n * Save the file as language_LOCALE, i.e. `en_GB.ts`, `fr_FR.ts`, etc.\n */\nexport default {\n\t\"firstDayOfWeek\": 1,\n\t\n\t// Number formatting options.\n\t// \n\t// Please check with the local standards which separator is accepted to be\n\t// used for separating decimals, and which for thousands.\n\t\"_decimalSeparator\": \".\",\n\t\"_thousandSeparator\": \",\",\n\n\t// Position of the percent sign in numbers\n\t\"_percentPrefix\": null,\n\t\"_percentSuffix\": \"%\",\n\n\t// Suffixes for numbers\n\t// When formatting numbers, big or small numers might be reformatted to\n\t// shorter version, by applying a suffix.\n\t// \n\t// For example, 1000000 might become \"1m\".\n\t// Or 1024 might become \"1KB\" if we're formatting byte numbers.\n\t// \n\t// This section defines such suffixes for all such cases.\n\t\"_big_number_suffix_3\": \"k\",\n\t\"_big_number_suffix_6\": \"M\",\n\t\"_big_number_suffix_9\": \"G\",\n\t\"_big_number_suffix_12\": \"T\",\n\t\"_big_number_suffix_15\": \"P\",\n\t\"_big_number_suffix_18\": \"E\",\n\t\"_big_number_suffix_21\": \"Z\",\n\t\"_big_number_suffix_24\": \"Y\",\n\n\t\"_small_number_suffix_3\": \"m\",\n\t\"_small_number_suffix_6\": \"μ\",\n\t\"_small_number_suffix_9\": \"n\",\n\t\"_small_number_suffix_12\": \"p\",\n\t\"_small_number_suffix_15\": \"f\",\n\t\"_small_number_suffix_18\": \"a\",\n\t\"_small_number_suffix_21\": \"z\",\n\t\"_small_number_suffix_24\": \"y\",\n\n\t\"_byte_suffix_B\": \"B\",\n\t\"_byte_suffix_KB\": \"KB\",\n\t\"_byte_suffix_MB\": \"MB\",\n\t\"_byte_suffix_GB\": \"GB\",\n\t\"_byte_suffix_TB\": \"TB\",\n\t\"_byte_suffix_PB\": \"PB\",\n\n\t// Default date formats for various periods.\n\t// \n\t// This should reflect official or de facto formatting universally accepted\n\t// in the country translation is being made for\n\t// Available format codes here:\n\t// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#Format_codes\n\t// \n\t// This will be used when formatting date/time for particular granularity,\n\t// e.g. \"_date_hour\" will be shown whenever we need to show time as hours.\n\t// \n\t// \"date\" is used as in default date format when showing standalone dates.\n\t\"_date\": \"yyyy-MM-dd\",\n\t\"_date_millisecond\": \"mm:ss SSS\",\n\t\"_date_millisecond_full\": \"HH:mm:ss SSS\",\n\t\"_date_second\": \"HH:mm:ss\",\n\t\"_date_second_full\": \"HH:mm:ss\",\n\t\"_date_minute\": \"HH:mm\",\n\t\"_date_minute_full\": \"HH:mm - MMM dd, yyyy\",\n\t\"_date_hour\": \"HH:mm\",\n\t\"_date_hour_full\": \"HH:mm - MMM dd, yyyy\",\n\t\"_date_day\": \"MMM dd\",\n\t\"_date_day_full\": \"MMM dd, yyyy\",\n\t\"_date_week\": \"ww\",\n\t\"_date_week_full\": \"MMM dd, yyyy\",\n\t\"_date_month\": \"MMM\",\n\t\"_date_month_full\": \"MMM, yyyy\",\n\t\"_date_year\": \"yyyy\",\n\n\t// Default duration formats for various base units.\n\t// \n\t// This will be used by DurationFormatter to format numeric values into\n\t// duration.\n\t// \n\t// Notice how each duration unit comes in several versions. This is to ensure\n\t// that each base unit is shown correctly.\n\t// \n\t// For example, if we have baseUnit set to \"second\", meaning our duration is\n\t// in seconds.\n\t// \n\t// If we pass in `50` to formatter, it will know that we have just 50 seconds\n\t// (less than a minute) so it will use format in `\"_duration_second\"` (\"ss\"),\n\t// and the formatted result will be in like `\"50\"`.\n\t// \n\t// If we pass in `70`, which is more than a minute, the formatter will switch\n\t// to `\"_duration_second_minute\"` (\"mm:ss\"), resulting in \"01:10\" formatted\n\t// text.\n\t// \n\t// Available codes here:\n\t// https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/#Available_Codes\n\t\"_duration_millisecond\": \"SSS\",\n\t\"_duration_millisecond_second\": \"ss.SSS\",\n\t\"_duration_millisecond_minute\": \"mm:ss SSS\",\n\t\"_duration_millisecond_hour\": \"hh:mm:ss SSS\",\n\t\"_duration_millisecond_day\": \"d'd' mm:ss SSS\",\n\t\"_duration_millisecond_week\": \"d'd' mm:ss SSS\",\n\t\"_duration_millisecond_month\": \"M'm' dd'd' mm:ss SSS\",\n\t\"_duration_millisecond_year\": \"y'y' MM'm' dd'd' mm:ss SSS\",\n\n\t\"_duration_second\": \"ss\",\n\t\"_duration_second_minute\": \"mm:ss\",\n\t\"_duration_second_hour\": \"hh:mm:ss\",\n\t\"_duration_second_day\": \"d'd' hh:mm:ss\",\n\t\"_duration_second_week\": \"d'd' hh:mm:ss\",\n\t\"_duration_second_month\": \"M'm' dd'd' hh:mm:ss\",\n\t\"_duration_second_year\": \"y'y' MM'm' dd'd' hh:mm:ss\",\n\n\t\"_duration_minute\": \"mm\",\n\t\"_duration_minute_hour\": \"hh:mm\",\n\t\"_duration_minute_day\": \"d'd' hh:mm\",\n\t\"_duration_minute_week\": \"d'd' hh:mm\",\n\t\"_duration_minute_month\": \"M'm' dd'd' hh:mm\",\n\t\"_duration_minute_year\": \"y'y' MM'm' dd'd' hh:mm\",\n\n\t\"_duration_hour\": \"hh'h'\",\n\t\"_duration_hour_day\": \"d'd' hh'h'\",\n\t\"_duration_hour_week\": \"d'd' hh'h'\",\n\t\"_duration_hour_month\": \"M'm' dd'd' hh'h'\",\n\t\"_duration_hour_year\": \"y'y' MM'm' dd'd' hh'h'\",\n\n\t\"_duration_day\": \"d'd'\",\n\t\"_duration_day_week\": \"d'd'\",\n\t\"_duration_day_month\": \"M'm' dd'd'\",\n\t\"_duration_day_year\": \"y'y' MM'm' dd'd'\",\n\n\t\"_duration_week\": \"w'w'\",\n\t\"_duration_week_month\": \"w'w'\",\n\t\"_duration_week_year\": \"w'w'\",\n\n\t\"_duration_month\": \"M'm'\",\n\t\"_duration_month_year\": \"y'y' MM'm'\",\n\n\t\"_duration_year\": \"y'y'\",\n\n\t// Era translations\n\t\"_era_ad\": \"AD\",\n\t\"_era_bc\": \"BC\",\n\n\t// Day part, used in 12-hour formats, e.g. 5 P.M.\n\t// Please note that these come in 3 variants:\n\t// * one letter (e.g. \"A\")\n\t// * two letters (e.g. \"AM\")\n\t// * two letters with dots (e.g. \"A.M.\")\n\t// \n\t// All three need to to be translated even if they are all the same. Some\n\t// users might use one, some the other.\n\t\"A\": \"\",\n\t\"P\": \"\",\n\t\"AM\": \"\",\n\t\"PM\": \"\",\n\t\"A.M.\": \"\",\n\t\"P.M.\": \"\",\n\n\t// Date-related stuff.\n\t// \n\t// When translating months, if there's a difference, use the form which is\n\t// best for a full date, e.g. as you would use it in \"2018 January 1\".\n\t// \n\t// Note that May is listed twice. This is because in English May is the same\n\t// in both long and short forms, while in other languages it may not be the\n\t// case. Translate \"May\" to full word, while \"May(short)\" to shortened\n\t// version.\n\t// \n\t// Should month names and weekdays be capitalized or not?\n\t// \n\t// Rule of thumb is this: if the names should always be capitalized,\n\t// regardless of name position within date (\"January\", \"21st January 2018\",\n\t// etc.) use capitalized names. Otherwise enter all lowercase.\n\t// \n\t// The date formatter will automatically capitalize names if they are the\n\t// first (or only) word in resulting date.\n\t\"January\": \"\",\n\t\"February\": \"\",\n\t\"March\": \"\",\n\t\"April\": \"\",\n\t\"May\": \"\",\n\t\"June\": \"\",\n\t\"July\": \"\",\n\t\"August\": \"\",\n\t\"September\": \"\",\n\t\"October\": \"\",\n\t\"November\": \"\",\n\t\"December\": \"\",\n\t\"Jan\": \"\",\n\t\"Feb\": \"\",\n\t\"Mar\": \"\",\n\t\"Apr\": \"\",\n\t\"May(short)\": \"May\",\n\t\"Jun\": \"\",\n\t\"Jul\": \"\",\n\t\"Aug\": \"\",\n\t\"Sep\": \"\",\n\t\"Oct\": \"\",\n\t\"Nov\": \"\",\n\t\"Dec\": \"\",\n\n\t// Weekdays.\n\t\"Sunday\": \"\",\n\t\"Monday\": \"\",\n\t\"Tuesday\": \"\",\n\t\"Wednesday\": \"\",\n\t\"Thursday\": \"\",\n\t\"Friday\": \"\",\n\t\"Saturday\": \"\",\n\t\"Sun\": \"\",\n\t\"Mon\": \"\",\n\t\"Tue\": \"\",\n\t\"Wed\": \"\",\n\t\"Thu\": \"\",\n\t\"Fri\": \"\",\n\t\"Sat\": \"\",\n\n\t// Date ordinal function.\n\t// \n\t// This is used when adding number ordinal when formatting days in dates.\n\t// \n\t// E.g. \"January 1st\", \"February 2nd\".\n\t// \n\t// The function accepts day number, and returns a string to be added to the\n\t// day, like in default English translation, if we pass in 2, we will receive\n\t// \"nd\" back.\n\t\"_dateOrd\": function(day: number): string {\n\t\tlet res = \"th\";\n\t\tif ((day < 11) || (day > 13)) {\n\t\t\tswitch (day % 10) {\n\t\t\t\tcase 1:\n\t\t\t\t\tres = \"st\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tres = \"nd\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tres = \"rd\"\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\t// Various chart controls.\n\t// Shown as a tooltip on zoom out button.\n\t\"Zoom Out\": \"\",\n\n\t// Timeline buttons\n\t\"Play\": \"\",\n\t\"Stop\": \"\",\n\n\t// Chart's Legend screen reader title.\n\t\"Legend\": \"\",\n\n\t// Legend's item screen reader indicator.\n\t\"Press ENTER to toggle\": \"\",\n\n\t// Shown when the chart is busy loading something.\n\t\"Loading\": \"\",\n\n\t// Shown as the first button in the breadcrumb navigation, e.g.:\n\t// Home > First level > ...\n\t\"Home\": \"\",\n\n\t// Chart types.\n\t// Those are used as default screen reader titles for the main chart element\n\t// unless developer has set some more descriptive title.\n\t\"Chart\": \"\",\n\t\"Serial chart\": \"\",\n\t\"X/Y chart\": \"\",\n\t\"Pie chart\": \"\",\n\t\"Gauge chart\": \"\",\n\t\"Radar chart\": \"\",\n\t\"Sankey diagram\": \"\",\n\t\"Flow diagram\": \"\",\n\t\"Chord diagram\": \"\",\n\t\"TreeMap chart\": \"\",\n\t\"Force directed tree\": \"\",\n\t\"Sliced chart\": \"\",\n\n\t// Series types.\n\t// Used to name series by type for screen readers if they do not have their\n\t// name set.\n\t\"Series\": \"\",\n\t\"Candlestick Series\": \"\",\n\t\"OHLC Series\": \"\",\n\t\"Column Series\": \"\",\n\t\"Line Series\": \"\",\n\t\"Pie Slice Series\": \"\",\n\t\"Funnel Series\": \"\",\n\t\"Pyramid Series\": \"\",\n\t\"X/Y Series\": \"\",\n\n\t// Map-related stuff.\n\t\"Map\": \"\",\n\t\"Press ENTER to zoom in\": \"\",\n\t\"Press ENTER to zoom out\": \"\",\n\t\"Use arrow keys to zoom in and out\": \"\",\n\t\"Use plus and minus keys on your keyboard to zoom in and out\": \"\",\n\n\t// Export-related stuff.\n\t// These prompts are used in Export menu labels.\n\t// \n\t// \"Export\" is the top-level menu item.\n\t// \n\t// \"Image\", \"Data\", \"Print\" as second-level indicating type of export\n\t// operation.\n\t// \n\t// Leave actual format untranslated, unless you absolutely know that they\n\t// would convey more meaning in some other way.\n\t\"Export\": \"\",\n\t\"Image\": \"\",\n\t\"Data\": \"\",\n\t\"Print\": \"\",\n\t\"Press ENTER or use arrow keys to navigate\": \"\",\n\t\"Press ENTER to open\": \"\",\n\t\"Press ENTER to print.\": \"\",\n\t\"Press ENTER to export as %1.\": \"\",\n\t\"(Press ESC to close this message)\": \"\",\n\t\"Image Export Complete\": \"\",\n\t\"Export operation took longer than expected. Something might have gone wrong.\": \"\",\n\t\"Saved from\": \"\",\n\t\"PNG\": \"\",\n\t\"JPG\": \"\",\n\t\"GIF\": \"\",\n\t\"SVG\": \"\",\n\t\"PDF\": \"\",\n\t\"JSON\": \"\",\n\t\"CSV\": \"\",\n\t\"XLSX\": \"\",\n\t\"HTML\": \"\",\n\n\t// Scrollbar-related stuff.\n\t// \n\t// Scrollbar is a control which can zoom and pan the axes on the chart.\n\t// \n\t// Each scrollbar has two grips: left or right (for horizontal scrollbar) or\n\t// upper and lower (for vertical one).\n\t// \n\t// Prompts change in relation to whether Scrollbar is vertical or horizontal.\n\t// \n\t// The final section is used to indicate the current range of selection.\n\t\"Use TAB to select grip buttons or left and right arrows to change selection\": \"\",\n\t\"Use left and right arrows to move selection\": \"\",\n\t\"Use left and right arrows to move left selection\": \"\",\n\t\"Use left and right arrows to move right selection\": \"\",\n\t\"Use TAB select grip buttons or up and down arrows to change selection\": \"\",\n\t\"Use up and down arrows to move selection\": \"\",\n\t\"Use up and down arrows to move lower selection\": \"\",\n\t\"Use up and down arrows to move upper selection\": \"\",\n\t\"From %1 to %2\": \"\",\n\t\"From %1\": \"\",\n\t\"To %1\": \"\",\n\n\t// Data loader-related.\n\t\"No parser available for file: %1\": \"\",\n\t\"Error parsing file: %1\": \"\",\n\t\"Unable to load file: %1\": \"\",\n\t\"Invalid date\": \"\",\n\n\t// Common actions\n\t\"Close\": \"\",\n\t\"Minimize\": \"\"\n\n};","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","const Promise = window.Promise;\nconst promiseThen = Promise && Promise.prototype.then;\nconst promiseCatch = Promise && Promise.prototype.catch;\nconst promiseFinally = Promise && Promise.prototype.finally;\nconst promiseReject = Promise && Promise.reject;\nconst promiseResolve = Promise && Promise.resolve;\nconst promiseAllSettled = Promise && Promise.allSettled;\nconst promiseAll = Promise && Promise.all;\nconst promiseRace = Promise && Promise.race;\nconst fetch = window.fetch;\nconst startsWith = String.prototype.startsWith;\nconst endsWith = String.prototype.endsWith;\n\nexport default function () {\n\tif (Promise) {\n\t\twindow.Promise = Promise;\n\n\t\tif (promiseThen) { Promise.prototype.then = promiseThen; }\n\t\tif (promiseCatch) { Promise.prototype.catch = promiseCatch; }\n\t\tif (promiseFinally) { Promise.prototype.finally = promiseFinally; }\n\t\tif (promiseReject) { Promise.reject = promiseReject; }\n\t\tif (promiseResolve) { Promise.resolve = promiseResolve; }\n\t\tif (promiseAllSettled) { Promise.allSettled = promiseAllSettled; }\n\t\tif (promiseAll) { Promise.all = promiseAll; }\n\t\tif (promiseRace) { Promise.race = promiseRace; }\n\t}\n\n\tif (fetch) {\n\t\twindow.fetch = fetch;\n\t}\n\n\tif (startsWith) {\n\t\tString.prototype.startsWith = startsWith;\n\t}\n\n\tif (endsWith) {\n\t\tString.prototype.endsWith = endsWith;\n\t}\n};","import fixPolyfills from \"./polyfill.js\";\nimport \"./core-js.js\";\nimport \"regenerator-runtime/runtime.js\";\nimport * as m from \"./../../dist/es2015/index.js\";\n\nexport const am5 = m;\n\n// TODO move all of this code into a different module and then import it\nfunction getCurrentScript() {\n\tif (document.currentScript) {\n\t\treturn document.currentScript;\n\n\t// Internet Explorer only\n\t} else {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\treturn scripts[scripts.length - 1];\n\t}\n}\n\nfunction dirpath(x) {\n\treturn /(.*\\/)[^\\/]*$/.exec(x)[1];\n}\n\n__webpack_public_path__ = dirpath(getCurrentScript().src);\n\nfixPolyfills();\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\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); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\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; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"deps/\" + {\"643\":\"pdfmake\",\"4297\":\"xlsx\",\"4384\":\"markerjs2\"}[chunkId] + \".js\";\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4826: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_am5\"] = self[\"webpackChunk_am5\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// module factories are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(8494);\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","registry","addLicense","license","licenses","push","disposeAllRootElements","root","rootElements","pop","dispose","Native","constructor","this","_observer","ResizeObserver","entries","entry","_targets","x","target","callback","addTarget","observe","box","removeTarget","unobserve","Raf","_timer","lastTime","loop","currentTime","Date","now","delay","newSize","getBoundingClientRect","width","size","height","length","requestAnimationFrame","left","right","top","bottom","y","cancelAnimationFrame","observer","ResizeSensor","element","_sensor","_element","_listener","isDisposed","_disposed","sensor","Language","Entity","_setDefaults","setPrivate","en","super","translate","prompt","locale","rest","_root","getPrivate","translation","value","len","i","split","join","translateAny","setTranslationAny","setTranslationsAny","translations","key","val","translateEmpty","translateFunc","translateAll","list","isDefault","Matrix","a","b","c","d","tx","ty","setTransform","pivotX","pivotY","rotation","scale","Math","cos","sin","apply","origin","applyInverse","id","append","matrix","a1","b1","c1","d1","prepend","tx1","copyFrom","TAU","PI","mapToEllipse","_ref","rx","ry","cosphi","sinphi","centerx","centery","approxUnitArc","ang1","ang2","tan","x1","y1","x2","y2","vectorAngle","ux","uy","vx","vy","dot","acos","_ref2","px","py","cx","cy","_ref2$xAxisRotation","xAxisRotation","undefined","_ref2$largeArcFlag","largeArcFlag","_ref2$sweepFlag","sweepFlag","curves","pxp","pyp","abs","lambda","pow","sqrt","_getArcCenter","rxsq","rysq","pxpsq","pypsq","radicant","centerxp","centeryp","vx1","vy1","vx2","vy2","getArcCenter","_getArcCenter2","arr","Array","isArray","Symbol","iterator","Object","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","TypeError","_slicedToArray","ratio","segments","max","ceil","map","curve","_mapToEllipse","_mapToEllipse2","_mapToEllipse3","checkArgs","name","actual","expected","Error","checkMinArgs","checkEvenArgs","splitArcFlags","args","index","flag","exec","splice","assertBinary","eachTargets","hitTarget","f","interactive","_parent","onPointerEvent","event","touches","changedTouches","isTainted","image","canvas","document","createElement","context","getContext","willReadFrequently","drawImage","getImageData","console","warn","src","clearCanvas","view","style","crisp","floor","CanvasPivot","_x","_y","CanvasDisplayObject","Disposer","renderer","_renderer","subStatus","status","inactive","layer","_layer","_dispose","_removeObject","getLayer","dirty","getCanvas","self","defaultLayer","setLayer","order","margin","visible","_ghostLayer","setMargin","layers","registerChildLayer","resizeLayer","resizeGhost","markDirtyLayer","clear","invalidateBounds","_localBounds","_addBounds","_bounds","_getColorId","_colorId","paintId","_isInteractive","_forceInteractive","_isInteractiveMask","contains","child","toGlobal","point","_matrix","toLocal","getLocalMatrix","_uMatrix","pivot","angle","getLocalBounds","bn","getAdjustedBounds","bounds","_setMatrix","p0","p1","p2","p3","min","on","_addEvent","_localMatrix","_transform","resolution","m","_transformMargin","_transformLayer","render","exportable","_omitTainted","ghostLayer","ghostContext","mask","save","_runPath","clip","globalAlpha","compoundAlpha","alpha","filter","_render","restore","tainted","hovering","_hovering","has","dragging","_dragging","some","shouldCancelTouch","tapToActivate","_touchActive","cancelTouch","CanvasContainer","interactiveChildren","addChild","_children","addChildAt","removeChild","_childLayers","deep","setPoint","Op","colorize","_context","_forceColor","path","addBounds","BeginPath","beginPath","BeginFill","color","forceColor","fillStyle","EndFill","clearShadow","fill","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","EndStroke","stroke","LineStyle","lineJoin","strokeStyle","lineWidth","LineDash","dash","setLineDash","LineDashOffset","dashOffset","lineDashOffset","DrawRect","rect","l","t","r","DrawCircle","radius","moveTo","arc","DrawEllipse","radiusX","radiusY","ellipse","Arc","startAngle","endAngle","anticlockwise","arcBounds","ArcTo","arcTo","LineTo","lineTo","MoveTo","ClosePath","closePath","BezierCurveTo","cpX","cpY","cpX2","cpY2","toX","toY","bezierCurveTo","QuadraticCurveTo","quadraticCurveTo","Shadow","blur","offsetX","offsetY","opacity","GraphicsImage","CanvasGraphics","NORMAL","_operations","_pushOp","op","beginFill","_fillAlpha","Color","toCSS","isMeasured","endFill","_hasShadows","endStroke","lineStyle","_strokeAlpha","setLineDashOffset","drawRect","drawCircle","drawEllipse","shadow","svgPath","cpx","cpy","qcpx","qcpy","SEGMENTS_REGEXP","ARGS_REGEXP","match","relative","bs","layerDirty","globalCompositeOperation","blendMode","renderDetached","CanvasText","text","_textInfo","_shared","textAlign","direction","textBaseline","_prerender","ignoreGhost","ignoreFontWeight","fontStyle","_getFontStyle","font","fillOpacity","shadowOpacity","style2","fontVariant","fontWeight","fontSize","fontFamily","_measure","textVisible","line","_index","textChunks","chunk","fillText","textDecoration","thickness","offset","TextFormatter","getTextStyle","_ignoreFontWeight","test","navigator","vendor","rtl","oversizedBehavior","maxWidth","truncate","wrap","refText","lines","toString","replace","currentStyle","styleRestored","minX","maxX","chunks","type","ignoreFormatting","lineInfo","ascent","metrics","_measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","currentFormat","currentFill","currentChunkWidth","currentVerticalAlign","currentDecoration","skipFurtherText","firstTextChunk","leftoverChunks","format","verticalAlign","chunkWidth","actualBoundingBoxLeft","actualBoundingBoxRight","breakWords","ellipsis","ellipsisMetrics","ellipsisWidth","excessWidth","_truncateText","tmpText","slice","unshift","substr","leftBoundMod","rightBoundMod","boundsMod","chunkHeight","lineHeight","Percent","currentChunkOffset","baselineRatio","_fitRatio","minScale","_originalScale","maxW","maxH","maxHeight","w","h","fallbackBreakWords","tmp","measureText","fakeMetrics","div","innerText","visibility","position","body","appendChild","bbox","fontBoundingBoxAscent","fontBoundingBoxDescent","CanvasTextStyle","CanvasRadialText","textType","_renderCircular","deltaAngle","orientation","inward","inside","align","kerning","clockwise","shouldReverse","_textReversed","maxAngle","midAngle","reverse","textHeight","lineStartAngle","rotate","angleShift","char","charWidth","_measureCircular","totalWidth","chars","round","CanvasImage","_imageMask","naturalWidth","naturalHeight","_getMask","imageSmoothingEnabled","fillRect","CanvasRendererEvent","originalPoint","Touch","identifier","CanvasRenderer","GhostLayer","_patternCanvas","Set","window","devicePixelRatio","setAttribute","_layerDom","_disposers","_events","_key","events","disposer","exportableView","listener","ev","item","preventDefault","_touchActiveTimeout","_delayTouchDeactivate","passive","_ev","setTimeout","prevent","forEach","obj","wheelable","resetImageArray","imageArray","clearTimeout","tapToActivateTimeout","debugGhostView","parentNode","createLinearGradient","createRadialGradient","radius1","radius2","createPattern","graphics","background","repetition","_patternContext","clearRect","makeContainer","makeGraphics","makeText","makeTextStyle","makeRadialText","makePicture","resize","_calculatedWidth","_calculatedHeight","realWidth","realHeight","calculatedWidth","calculatedHeight","_realWidth","_realHeight","createDetachedLayer","CanvasLayer","getLayerByOrder","existingLayer","className","sort","insertBefore","_dirtyLayers","_lastPointerMoveEvent","native","_dispatchGlobalMousemove","rgb","distributeId","fromHex","_colorMap","_adjustBoundingBox","DOMRect","getEvent","originalEvent","adjustPoint","clientX","clientY","widthScale","heightScale","_getHitTarget","pixel","data","colorId","fromRGB","getObjectAtPoint","getImageArray","_withEvents","dispatching","cleanup","callbacks","disposed","_dispatchEventAll","interactionsEnabled","call","_dispatchEvent","dispatched","object","_dispatchMousedown","originalTarget","button","dragged","info","_mousedown","delete","cursorOverStyle","_replacedCursorStyle","add","removeHovering","_dispatchGlobalMouseup","_dispatchDragMove","_dispatchDragEnd","clickevent","_dispatchDoubleClick","_dispatchWheel","_makeSharedEvent","_listeners","increment","_onPointerEvent","timer","_","_initEvent","mouseup","pointercancel","mousedown","mousemove","options","canvasWidth","canvasHeight","minWidth","minHeight","maxScale","maintainPixelRatio","canvases","forceRender","needRerender","exportableContext","extraX","extraY","clientWidth","clientHeight","domWidth","domHeight","_resolution","_width","_height","rAF","fps","Root","settings","isReal","EventDispatcher","new","NumberFormatter","DateFormatter","DurationFormatter","VerticalLayout","HorizontalLayout","GridLayout","dom","_settings","accessible","_a11yD","useSafeResolution","HTMLElement","getElementById","interfaceColors","InterfaceColors","inner","tooltipContainerBounds","_tooltipContainerSettings","_inner","_updateComputedStyles","_init","moveDOM","childNodes","_initResizeSensor","_handleLogo","_logo","offsetWidth","offsetHeight","hide","show","_showBranding","logo","tooltipContainer","children","Container","setStateOnChildren","paddingTop","paddingRight","paddingBottom","paddingLeft","centerY","tooltipText","tooltipX","Rectangle","tooltipY","tooltip","Tooltip","pointerOrientation","label","setAll","get","strokeOpacity","set","open","states","create","Graphics","strokeWidth","_getRealSize","_getCalculatedSize","calculateSize","focusable","tabindex","ariaLabel","role","rootContainer","_rootContainer","_defaultThemes","DefaultTheme","container","htmlElementContainer","_htmlElementContainer","pointerEvents","overflow","readerAlertElement","_readerAlertElement","focusElementContainer","_focusElementContainer","tooltipElementContainer","_tooltipElementContainer","keyCode","_isShift","shiftKey","focusedSprite","_focusedSprite","downEvent","MouseEvent","dispatch","simulated","dragOffsetX","dragOffsetY","isDragging","_keyboardDragPoint","isEnabled","dragPoint","moveEvent","upEvent","group","items","_tabindexes","indexOf","lastIndex","_startTicker","setThemes","_addTooltip","_hasLicense","_resizeSensorDisposer","autoResize","_display","_focusElementDirty","_updateCurrentFocus","_runTickers","_tickers","_runAnimations","running","_animations","animation","state","_runAnimation","Animation","Stopped","Playing","_runDirties","allParents","_isDirtyParents","_dirtyParents","parent","uid","_prepareChildren","_updateChildren","objects","_dirty","entity","_beforeChanged","_changed","_clearDirty","_isDirty","depths","_dirtyBounds","depth","_positionHTMLElements","_updateBounds","dirtyPositions","_dirtyPositions","sprite","_updatePosition","_afterChanged","_renderFrame","_updateTick","timestamp","_checkComputedStyles","animationDone","_runTicker","animationTime","_ticker","_paused","_runTickerNow","timeout","endTime","performance","updateTick","_addDirtyEntity","_addDirtyParent","_addDirtyBounds","_addDirtyPosition","_addAnimation","_markDirty","_markDirtyRedraw","once","eachFrame","markDirtyGlobal","walkChildren","markDirty","markDirtyBounds","_isDisposed","horizontalLayout","verticalLayout","readerAlert","innerHTML","themes","_applyThemes","tooltipContainerSettings","layerMargin","_tooltip","_registerTabindexOrder","_invalidateTabindexes","_unregisterTabindexOrder","aindex","bindex","groups","_moveFocusElement","_makeFocusElement","_decorateFocusElement","_positionFocusElement","focusElement","removeAttribute","ariaLive","ariaChecked","ariaOrientation","ariaValueNow","ariaValueMin","ariaValueMax","ariaValueText","ariaControls","isHidden","getAttribute","tabIndex","disposers","_handleFocus","_handleBlur","_removeFocusElement","_hideFocusElement","display","globalBounds","padding","focusPadding","focused","isVisibleDeep","_focusNext","el","focusableElements","from","querySelectorAll","focus","updateTooltip","_getText","tooltipElement","_makeTooltipElement","remove","removePrivate","_removeTooltipElement","parentElement","_invalidateAccessibility","documentPointToRoot","scaleWidth","scaleHeight","rootPointToDocument","addDisposer","styles","getComputedStyle","fontHash","changed","_fontHash","_invalidateLabelBounds","each","Text","_licenseApplied","_makeHTMLElement","htmlElement","boxSizing","_positionHTMLElement","_htmlEnabledContainers","visualSettings","setting","compositeOpacity","_adjustedLocalBounds","_setHTMLContent","html","_removeHTMLContent","Theme","setupDefaultRules","_lookupRules","themeClass","_rules","ruleRaw","themeTags","rules","found","tags","template","rule","Bullet","_afterNew","_afterNewApplyThemes","isDirty","series","_positionBullet","classNames","concat","Button","previous","_prevSettings","icon","_disposeProperty","Chart","Circle","setPrivateRaw","_clear","DataItem","component","dataContext","_checkDirty","markDirtyValues","_startAnimation","_animationTime","disposeDataItem","duration","setRaw","showDataItem","hideDataItem","Component","_dataItems","incrementRef","_data","decrementRef","_onDataClear","_updateFields","onAll","change","dataItems","_mainDataItems","_markDirtyGroup","_dataChanged","dataItem","newValue","_makeDataItem","processDataItem","properties","bullets","animate","to","easing","oldIndex","newIndex","_afterDataChange","valueFields","_valueFields","_valueFieldsF","fieldKey","workingKey","fields","_fields","_fieldsF","_dataItem","output","field","makeDataItem","pushDataItem","_duration","_valuesDirty","inited","_dataGrouped","markDirtySize","_sizeDirty","Children","List","_container","oldValues","_onRemoved","_onInserted","oldValue","_setParent","childrenDisplay","_childrenDisplay","values","Sprite","allChildren","_prevWidth","_prevHeight","layout","markDirtyPosition","contentMask","_contentMask","_updateSize","_percentageSizeChildren","_percentagePositionChildren","updateBackground","verticalScrollbar","_contentHeight","bg","force","eachChildren","_applyState","_applyStateAnimated","applyAnimate","innerWidth","innerHeight","_getBounds","pWidth","pHeight","horizontal","vertical","Number","MAX_VALUE","childBounds","adjustedLocalBounds","childX","childY","cl","cr","ct","cb","_contentWidth","updateContainer","_handleStates","startGrip","endGrip","_vsbd0","wheelEvent","shiftY","deltaY","start","end","_vsbd1","removeValue","_processTemplateField","_setDataItem","updated","Ellipse","gradient","gradientTarget","_markDirtyKey","strokeDasharray","strokeDashoffset","draw","fillGradient","fillPattern","strokeGradient","strokePattern","stops","stop","colorInherited","opacityInherited","getFill","pattern","showTooltip","_setRawDefault","availableWidth","minCellWidth","maxCellWidth","childWidth","columnCount","columnWidths","getColumnWidths","prevY","column","maxColumnHeight","prevX","isVisible","marginTop","marginBottom","marginLeft","marginRight","totalPercent","Infinity","privateWidth","Label","_text","_makeText","_textKeys","property","propValue","onPrivate","_setMaxDimentions","markDirtyText","getText","eachReverse","Layout","Legend","_new","itemContainers","themeTagsSelf","markers","labels","valueLabels","markerRectangles","makeItemContainer","itemContainer","make","makeMarker","marker","makeLabel","makeValueLabel","valueLabel","makeMarkerRectangle","markerRectangle","nameField","fillField","strokeField","clickTarget","useDefaultMarker","createLegendMarker","updateLegendMarker","_t","markDirtyAccessibility","clickContainer","_addClickEvents","targetA","targetB","indexA","indexB","updateLegendValue","hoverDataItem","unhoverDataItem","labelText","segmentedLine","s","firstGroup","firstPoint","g","points","p","Line","isPrivateDirty","MonotoneXTension","tension","_tension","areaStart","_line","areaEnd","NaN","lineStart","_x0","_x1","_y0","_y1","_t0","_point","lineEnd","slope2","t1","slope3","curveMonotoneXTension","sign","that","h0","h1","s0","s1","t0","x0","y0","dx","MonotoneYTension","curveMonotoneYTension","monotoneYTension","Picture","_load","eventType","Image","crossOrigin","decode","then","catch","_error","PointedRectangle","bwh","xtl","ytl","xbl","d2","stemX","stemY","Polygon","coordinates","coord","prevPoints","copy","prevCopy","pl","newCopy","morphAnimation","animatePrivate","_markDirtyPrivateKey","minY","maxY","_draw","previousPoints","morphProgress","first","prevFirst","prevPoint","RadialLabel","baseRadius","radiusPrivate","innerRadiusPrivate","labelAngle","_flipped","dy","localBounds","centerX","RadialText","textStyle","RoundedRectangle","wSign","hSign","minSide","crtl","crtr","crbr","crbl","maxcr","Scrollbar","_makeThumb","_makeButton","_addOrientationClass","_handleAnimation","_thumbBusy","thumb","newMiddle","newCoordinate","_startDown","_gripDown","_endDown","_thumbDown","_updateThumb","_updateGripsByThumb","adapters","_value","updateGrips","grip","valueFunction","fromValue","toValue","thumbSize","SerialChart","seriesContainer","_removeSeries","colors","reset","moveValue","_processSeries","setIndex","insertIndex","chart","_placeBulletsContainer","_removeBulletsContainer","Series","_handleBullets","bulletsContainer","startIndex","endIndex","bullet","getDataItemById","_makeBullets","_shouldMakeBullet","bulletFunction","_makeBullet","_makeBulletReal","addBullet","_aggregatesCalculated","_selectionAggregatesCalculated","baseValueSeries","_dataProcessed","_calculateAggregates","_psi","_pei","legendDataItem","sum","absSum","count","low","high","close","average","changePercent","changePrevious","changePreviousPercent","changeSelection","changeSelectionPercent","openKey","_getBase","minValue","dataField","maxValue","_entities","customFunction","percent","propertyValue","logarithmic","log","LOG10E","interpolate","defaultState","lookup","neutral","_hideBullets","_positionBullets","_bullet","_getItemReaderLabel","promises","Promise","all","_sequencedShowHide","realDuration","txt","_onHide","getTooltip","Slice","_getTooltipPoint","innerRadius","ix","iy","generator","_generator","cornerRadius","outerRadius","middleAngle","shiftRadius","SpriteEventDispatcher","_sprite","_makePointerEvent","_onRenderer","_rendererDisposers","e","_on","shouldClone","rendererEvent","RENDERER_EVENTS","stopParentDispatch","_dispatchParents","dispatchParents","old","_hasDown","_hasMoved","_addPercentagePositionChildren","_removeTemplateField","_templateField","_removeObjectTemplate","_createEvents","_setObjectTemplate","_applyTemplates","oldDataItem","newDataItem","_addPercentageSizeChildren","updatePivotPoint","tooltipMoveDp","_tooltipMoveDp","tooltipPointerDp","_tooltipPointerDp","isHover","_statesHandled","draggable","_dragDp","dragStart","dragMove","dragStop","tooltipHTML","showTooltipOn","_tooltipDp","hideTooltip","toggleKey","_toggleDp","_isDragging","saturate","brightness","contrast","sepia","hue","invert","_focusDp","_hoverDp","_handleOver","_handleOut","_isDown","_handleUp","_handleDown","_dragEvent","_dragPoint","_downPoint","pointerId","_downPoints","downPoint","dragEvent","hypot","isFocus","oldBounds","newBounds","_fixMinBounds","privateHeight","_removeParent","hover","unhover","tooltipPosition","tooltipTarget","promise","xx","yy","_onShow","appear","success","_isShowing","_isHidden","_isHiding","animations","isShowing","isHiding","_findStaticTemplate","_walkParents","_walkParent","updateChildren","prevParent","getNumberFormatter","numberFormatter","getDateFormatter","dateFormatter","getDurationFormatter","durationFormatter","_getDownPoint","_getDownPointId","toFront","toBack","SpriteResizer","_createGrip","addTag","gripL","_resize","gripR","_resizeStart","gripT","_rotate","gripB","_is","_ix","_iw","spriteTemplate","_updatePositions","delta","rotationStep","themeTag","_positionDP","rectangle","cxr","cyr","wordWrapWidth","_textStyles","styleName","Tick","templates","_label","_updateBackground","_updateTextColor","_htmlContentHovered","_tooltips","updateBackgroundColor","_keepHoverDp","outEvent","_fillDp","_strokeDp","_labelDp","alternative","cw","ch","parentW","parentH","_w","_h","pointTo","pointerLength","bgStrokeSizeY","bgStrokeSizeX","pointerX","pointerY","boundsW","boundsH","_fx","_fy","animationDuration","animationEasing","availableHeight","childHeight","BlendMode","Gradient","_target","addColorStop","_offset","_color","getBounds","LinearGradient","longer","lighten","brighten","Pattern","_pattern","_checkDirtyFill","backgroundDisplay","_backgroundDisplay","PicturePattern","_image","patternWidth","patternHeight","fit","AnimationState","waitForAnimations","waitForStop","range","diff","defaultInterpolate","percentInterpolate","colorInterpolate","getInterpolate","array","any","fn","eachContinue","shiftLeft","last","insert","pushAll","input","removeFirst","move","toIndex","removeIndex","pushOne","ind","toArray","findIndex","matches","findIndexReverse","find","findReverse","findMap","shuffle","temporaryValue","randomIndex","currentIndex","random","getSortedIndex","ordering","getFirstSortedIndex","keepIf","keep","string2hex","string","repeat","parseInt","fromAny","hex","_hex","toCSSHex","toHSL","fromHSL","fromString","fromCSS","rgba2hex","lightAlternative","darkAlternative","mode","ColorSet","generateColors","pass","passOptions","reuse","hsl","saturation","lightness","getIndex","currentStep","ListData","_onPush","processor","processRow","_onInsertIndex","_onSetIndex","JsonData","_setDefault","source","formatted","date","locales","Intl","DateTimeFormat","parseFormat","timezone","utc","convertLocal","getTime","applyFormat","toUpperCase","fullYear","month","weekday","day","hours","minutes","seconds","milliseconds","res","getUTCFullYear","getUTCMonth","getUTCDay","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getFullYear","getMonth","getDay","getDate","getHours","getMinutes","getSeconds","getMilliseconds","parts","year","_getMonth","_getShortMonth","language","_getShortWeekday","_getWeekday","firstDayOfWeek","getTimezoneOffset","tz","tzh","tzm","toISOString","toUTCString","dateFormat","_months","_shortMonths","_weekdays","_shortWeekdays","parse","reg","parsedIndexes","resValues","indexAdjust","year3","year2","year1","getStringList","monthLong","monthShort","week","yearDay","weekdayLong","weekdayShort","am","hour12Base1","hourBase0","hour12Base0","hourBase1","minute","second","millisecond","millisecondDigits","zone","iso","regex","RegExp","resolveMonth","resolveShortMonth","hour","isAm","ts","resolveTimezoneOffset","UTC","dir","DisposerClass","ArrayDisposer","MultiDisposer","MutableValueDisposer","_disposer","CounterDisposer","_counter","dmillisecond","dsecond","dminute","dhour","dday","dweek","dmonth","aminute","ahour","aday","aweek","amonth","ayear","base","baseUnit","getFormat","details","positive","negative","zero","_part","parsed","partFormat","dirs","absolute","_unitAliases","tstamp","toTimeStamp","part","unit","_toTimeUnit","digits","ints","_getUnitValue","code","maxUnit","getValueUnit","currentUnit","ms","_getUnitValues","timeUnit","linear","quad","cubic","exp","sine","circle","yoyo","ease","out","inOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounce","bounceOut","tau","amplitude","period","asin","elastic","v","State","_entity","_userSettings","fallback","_eachSetting","seen","stateAnimationDuration","stateAnimationEasing","States","_states","newState","Adapters","_callbacks","enable","_disabled","disable","fold","loops","startingTime","_animation","_from","_to","_easing","_loops","_interpolate","_oldTime","playing","_playing","stopped","_stopped","pause","play","percentage","_time","resolve","_reject","_checkEnded","_run","_reset","counter","Settings","_userProperties","resetUserSettings","paused","_animatingSettings","_stopAnimation","_set","_animatingPrivateSettings","_stopAnimationPrivate","_setPrivate","Paused","_settingEvents","_privateSettingEvents","getRaw","_sendKeyEvent","_sendPrivateKeyEvent","_setRaw","removeAll","_privateSettings","_setPrivateRaw","_prevPrivateSettings","_internalTemplates","_registerId","_template","shouldApply","_dirtyPrivate","isType","_pushPropertyDisposer","_disposerProperties","_name","isUserSetting","_setSoft","_removeTemplateProperty","_userPrivateProperties","_removeTemplatePrivateProperty","_setTemplateProperty","_findTemplateByKey","_setTemplatePrivateProperty","_findTemplateByPrivateKey","_applyStateByKey","other","_eachTemplate","_apply","_applyTemplate","_templateDisposers","privateSettings","_runSetup","setup","_templates","_disposeTemplates","_findTemplate","_removeTemplates","isConnected","defaults","tag","theme","allRules","every","result","prevId","entitiesById","removeDispose","hasTag","removeTag","_killed","_iterating","_enabled","hasListeners","hasListenersByType","killed","enableType","disableType","amount","_removeListener","_removeExistingListener","_eachListener","removeType","_shouldDispatch","_type","off","checkBounds","initial","_values","hasIndex","_onRemoveIndex","_onMoveIndex","_onClear","swap","value_a","value_b","shift","newArray","ListAutoDispose","autoDispose","ListTemplate","HALFPI","RADIANS","DEGREES","precision","isNumber","rounded","getCubicControlPointA","tensionX","tensionY","getCubicControlPointB","fitToRange","normalizeAngle","getArcBounds","bpoints","getArcPoint","fromAngle","toAngle","pt","mergeBounds","bound","fitAngleToRange","temp","inBounds","getAngle","point1","point2","diffX","diffY","atan2","getPointOnQuadraticCurve","pointA","pointB","controlPoint","getPointOnLine","closest","referenceValue","reduce","prev","curr","boundsOverlap","bounds1","bounds2","horizontalOverlap","verticalOverlap","spiralPoints","step","radiusStep","stepSize","degrees","circlesOverlap","circle1","circle2","Modal","_prefix","ic","active","StyleRule","modalCSS","curtain","cancel","wrapper","content","isOpen","bns","sns","suffix","toLowerCase","NumberFormat","mod","decimals","thousandSeparator","decimalSeparator","mods","modSpacing","thousands","interval","prefix","applyPrefix","ol","parseFloat","toPrecision","toExponential","ip","intsr","separator","decs","prefixes","newvalue","applied","k","number","escape","unescape","keys","keysOrdered","assign","hasKey","eachOrdered","ord","hasOwnProperty","softCopyProperties","compare","compareArray","leftLength","rightLength","compareNumber","normalize","p100","p50","populateString","getTagValue","tagName","prop","dateFields","numericFields","durationFields","method","params","matches2","reg2","getTagValueFromObject","getCustomDataValue","customData","current","formatApplied","numberValue","dateValue","durationValue","encodeURIComponent","formatParts","formatterType","TemplateState","_stateChanged","TemplateStates","TemplateAdapters","Template","entities","cleanUp","quotedBlocks","noFormatting","chunks2","i2","chunk2","isImage","q","sleep","timeUnitDurations","getNextUnit","getDuration","getIntervalDuration","getDateIntervalDuration","firstDateOfWeek","firstTime","checkChange","timeOne","timeTwo","dateOne","dateTwo","timeZoneOffset1","timeZoneOffset2","setUTCMinutes","nextUnit","timeZoneOffset","offsetUTC","setUTCDate","setUTCSeconds","setUTCMilliseconds","setUTCHours","setUTCFullYear","setUTCMonth","wday","newTimeZoneOffset","roun","time","firstDate","difference","unitCount","setTime","weekDay","isNaN","tzoffset","parsedDate","parseDate","offsetDif","newDiff","chooseInterval","gridCount","intervals","intervalDuration","getUnitValue","formatToParts","toUTCDate","Timezone","_utc","hour12","timeZone","fractionalSecondDigits","_dtf","userOffset","newUserOffset","getType","assert","condition","message","toNumber","converted","isString","toDate","isDate","num","numberToString","exponent","zeros","isObject","PLACEHOLDER","PLACEHOLDER2","ready","readyState","removeEventListener","addEventListener","removeElement","onZoom","supports","cap","getPointerId","activeElement","getRendererEvent","isTouchEvent","PointerEvent","pointerType","setStyle","getStyle","getEventTarget","composedPath","cursor","host","isLocalEvent","setInteractive","getShadowRoot","rootStylesheet","appendStylesheet","selector","cssRules","insertRule","nonce","head","sheet","getStylesheet","_rule","selectorText","deleteRule","_setVendorPrefixName","setProperty","StyleSheet","textContent","createStylesheet","addClass","classList","classes","currentClassName","removeClass","iOS","getSafeResolution","relativeToValue","full","decimalPlaces","padString","trimLeft","trimRight","trim","truncateTextWithEllipsis","maxLength","lastNonAlphanumericIndex","charAt","substring","hints","cleanFormat","stripTags","plainText","escapeForRgex","addSpacing","str","getYearDay","getWeek","firstDay","getWeekYear","getMonthWeek","firstWeek","currentWeek","getDayFromWeek","get12Hours","getTimeZone","long","savings","toLocaleString","timeZoneName","wotz","wtz","utcDate","capitalizeFirst","hslToRgb","hue2rgb","rgbToHsl","getLightnessStep","getBrightnessStep","isLight","alternativeColor","light","dark","mergeTags","tags1","tags2","sameBounds","AccelerationBands","AccumulationDistribution","AccumulativeSwingIndex","Annotator","ArcDiagram","ArcDiagramLink","ArcDiagramNodes","Aroon","AverageSeries","AwesomeOscillator","Axis","AxisBullet","AxisLabel","AxisLabelRadial","AxisRenderer","AxisRendererCircular","AxisRendererRadial","AxisRendererX","AxisRendererY","AxisTick","BaseColumnSeries","BollingerBands","BreadcrumbBar","BullBearPower","CalloutSeries","Candlestick","CandlestickSeries","CategoryAxis","CategoryDateAxis","ChaikinMoneyFlow","ChaikinOscillator","ChartIndicator","Chord","ChordDirected","ChordLink","ChordLinkDirected","ChordNodes","ChordNonRibbon","CirclePattern","ClockHand","ClusteredPointSeries","ColorControl","ColumnSeries","CommodityChannelIndex","ComparisonControl","DataSaveControl","DateAxis","DateRangeSelector","DisparityIndex","DoodleSeries","DrawingControl","DrawingSeries","DrawingToolControl","Dropdown","DropdownColors","DropdownControl","DropdownList","DropdownListControl","DurationAxis","EllipseSeries","Exporting","ExportingMenu","FibonacciSeries","FibonacciTimezoneSeries","Flow","FlowLink","FlowNode","FlowNodes","ForceDirected","FunnelSeries","FunnelSlice","GaplessDateAxis","GrainPattern","GraticuleSeries","Grid","HeatLegend","Hierarchy","HierarchyLink","HierarchyNode","HorizontalLineSeries","HorizontalRaySeries","IconControl","IconSeries","Indicator","IndicatorControl","IntervalControl","LabelSeries","LinePattern","LineSeries","LinkedHierarchy","LinkedHierarchyNode","MACD","MACross","MapChart","MapLine","MapLineSeries","MapPointSeries","MapPolygon","MapPolygonSeries","MapSeries","Measure","MedianPrice","Momentum","MovingAverage","MovingAverageDeviation","MovingAverageEnvelope","OHLC","OHLCSeries","OnBalanceVolume","OverboughtOversold","PVT","Pack","PanelControls","ParallelChannelSeries","Partition","PathPattern","PercentChart","PercentSeries","PeriodSelector","PictorialStackedSeries","PieChart","PieSeries","PolylineSeries","PyramidSeries","QuadrantLineSeries","RadarChart","RadarColumnSeries","RadarCursor","RadarLineSeries","RadialGradient","RectanglePattern","RectangleSeries","RegressionSeries","RelativeStrengthIndex","ResetControl","Sankey","SankeyLink","SankeyNodes","Serializer","SeriesTypeControl","SettingsControl","SettingsModal","SimpleLineSeries","SliceGrouper","SlicedChart","Slider","SmoothedRadarLineSeries","SmoothedXLineSeries","SmoothedXYLineSeries","SmoothedYLineSeries","StandardDeviation","Star","StepLineSeries","StochasticMomentumIndex","StochasticOscillator","StockChart","StockControl","StockLegend","StockPanel","StockToolbar","Sunburst","Tree","Treemap","TrendLineSeries","Triangle","Trix","TypicalPrice","VWAP","ValueAxis","Venn","VerticalLineSeries","Volume","VolumeProfile","VoronoiTreemap","WilliamsR","WordCloud","XYChart","XYChartScrollbar","XYCursor","XYSeries","ZigZag","ZoomControl","parseRef","refs","isValue","sub","lookupRef","subpath","mergeObject","mergeEntity","adapter","constructEntity","construct","ParserState","afterParse","_delayed","getClass","_cache","storeClass","cacheClass","_caching","parseAsyncArray","parseAsync","parseAsyncObject","parseAsyncSettings","parseAsyncSetting","parseAsyncRefs","__parse","parseObject","parseArray","parseChildren","parseChild","parseStops","parseSetting","gridLayout","parseSettings","parseProperties","rawValue","run","parseValue","mergeExisting","newRefs","parseRefsObject","parseRefs","ref","parseEntity","JsonParser","parseString","JSON","registerCustomClass","serialize","arrval","am5object","fullSettings","includeSettings","excludeSettings","settingValue","excludeProperties","_refs","setColor","bind","primaryButton","primaryButtonHover","primaryButtonDown","primaryButtonActive","primaryButtonText","primaryButtonStroke","secondaryButton","secondaryButtonHover","secondaryButtonDown","secondaryButtonActive","secondaryButtonText","secondaryButtonStroke","grid","alternativeBackground","alternativeText","disabled","interpolationDuration","interpolationEasing","gap","colorOpacity","checkered","centered","horizontalGap","verticalGap","density","minOpacity","maxOpacity","cornerRadiusBL","cornerRadiusTL","cornerRadiusBR","cornerRadiusTR","populateText","stepCount","pointerBaseWidth","dRadius","dInnerRadius","locationX","locationY","getFillFromSprite","getStrokeFromSprite","autoTextColor","spikes","ir","labelContainer","showValue","startValue","startColor","endColor","markerContainer","startLabel","endLabel","_clearGrain","patternData","cols","rows","rnd","_setRectData","putImageData","col","row","rc","gc","bc","ac","cellW","cellH","rectW","rectH","JSONParser","_applyDefaults","normalized","CSVParser","CSVToArray","delimiter","skipRows","useColumnNames","skipEmpty","dataPoint","objPattern","arrData","arrMatches","strMatchedValue","strMatchedDelimiter","DataProcessor","_checkFeatures","_checkDates","_checkNumbers","_checkColors","_checkEmpty","_checkDeepFeatures","deepFields","where","steps","_checkDeep","processMany","lookupKey","_maybeToEmpty","_maybeToNumber","_maybeToDate","_maybeToColor","load","url","error","isBlob","responseType","xhr","XMLHttpRequest","onload","response","blob","readBlob","getResponseHeader","responseText","onerror","withCredentials","requestHeaders","header","setRequestHeader","send","reader","FileReader","_event","readAsText","runtime","exports","prototype","hasOwn","defineProperty","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","makeInvokeMethod","tryCatch","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","reject","record","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","promiseThen","promiseCatch","promiseFinally","finally","promiseReject","promiseResolve","promiseAllSettled","allSettled","promiseAll","promiseRace","race","fetch","startsWith","String","endsWith","am5","currentScript","scripts","getElementsByTagName","getCurrentScript","noop","n","arguments","Dispatch","typename","types","T","optional","required","constantZero","extendBasis","B","j","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","enclosesWeak","encloseBasis","encloseBasis1","r1","r2","x21","y21","r21","x3","y3","r3","a2","a3","c2","c3","d3","ab","xa","xb","ya","yb","A","C","place","intersects","score","node","Node","packSiblingsRandom","circles","aa","ca","sj","sk","pack","packEncloseRandom","defaultRadius","constant","eachBefore","radiusLeaf","eachAfter","packChildrenRandom","translateChild","pi","epsilon","tauEpsilon","strings","Path","_append","appendRound","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","ccw","da","halfPi","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","padAngle","cornerTangents","lo","ox","oy","x11","y11","x10","y10","x00","y00","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","padRadius","buffer","r0","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","oc","x32","y32","intersect","ax","ay","bx","by","kc","lc","centroid","defined","area","defined0","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","Linear","withPath","shape","RangeError","taskHead","taskTail","frame","pokeDelay","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_next","restart","wake","timerFlush","t2","nap","poke","clearInterval","setInterval","none","querySelector","empty","childMatcher","childFirst","firstElementChild","update","EnterNode","datum","ownerDocument","namespaceURI","__data__","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","Map","keyValues","arraylike","ascending","xhtml","svg","xlink","xml","xmlns","namespaces","space","local","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","styleFunction","styleValue","getPropertyValue","propertyRemove","propertyConstant","propertyFunction","classArray","ClassList","_node","_names","classedAdd","names","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","creatorInherit","uri","documentElement","createElementNS","creatorFixed","namespace","constantNull","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","__on","o","onAdd","contextListener","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","Selection","parents","_groups","_parents","selection","select","subgroups","subnode","subgroup","selectAll","arrayAll","selectorAll","selectChild","childFind","selectChildren","childrenFilter","matcher","enterGroup","updateGroup","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","merge","groups0","groups1","m0","m1","merges","group0","group1","compareDocumentPosition","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","classed","creator","before","typenames","parseTypenames","elapsed","emptyOn","emptyTween","CREATED","STARTED","timing","schedules","__transition","tween","tick","init","schedule","svgNode","identity","translateX","translateY","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","transform","baseVal","consolidate","tweenRemove","tween0","tween1","tweenFunction","tweenValue","transition","_id","factory","extend","definition","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgb_formatHex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","hsl2rgb","m2","basis","v0","v1","v2","v3","t3","channels","displayable","formatHex8","formatHsl","clamp","nogamma","rgbGamma","exponential","gamma","rgbSpline","spline","reA","reB","bm","bi","one","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","Transition","newId","selection_prototype","inherit","id0","id1","on0","on1","sit","onFunction","styleTween","styleNull","listener0","styleMaybeRemove","styleInterpolate","textTween","textInterpolate","removeFunction","easeConstant","easeVarying","interrupt","defaultTiming","__awaiter","thisArg","_arguments","P","fulfilled","rejected","SuppressedError","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","notFulfilled","getter","__esModule","ns","def","getOwnPropertyNames","chunkId","u","script","needAttach","charset","nc","onScriptComplete","doneFns","nmd","paths","installedChunks","installedChunkData","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}