>)/i, /^(?:.*\\[\\[fork\\]\\])/i, /^(?:.*\\[\\[join\\]\\])/i, /^(?:[\"])/i, /^(?:\\s*as\\s+)/i, /^(?:[^\\n\\{]*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n\\s\\{]+)/i, /^(?:\\n)/i, /^(?:\\{)/i, /^(?:\\})/i, /^(?:[\\n])/i, /^(?:note\\s+)/i, /^(?:left of\\b)/i, /^(?:right of\\b)/i, /^(?:\")/i, /^(?:\\s*as\\s*)/i, /^(?:[\"])/i, /^(?:[^\"]*)/i, /^(?:[^\\n]*)/i, /^(?:\\s*[^:\\n\\s\\-]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:[\\s\\S]*?end note\\b)/i, /^(?:stateDiagram\\s+)/i, /^(?:stateDiagram-v2\\s+)/i, /^(?:hide empty description\\b)/i, /^(?:\\[\\*\\])/i, /^(?:[^:\\n\\s\\-\\{]+)/i, /^(?:\\s*:[^:\\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: {\n \"LINE\": {\n \"rules\": [9, 10],\n \"inclusive\": false\n },\n \"close_directive\": {\n \"rules\": [9, 10],\n \"inclusive\": false\n },\n \"arg_directive\": {\n \"rules\": [3, 4, 9, 10],\n \"inclusive\": false\n },\n \"type_directive\": {\n \"rules\": [2, 3, 9, 10],\n \"inclusive\": false\n },\n \"open_directive\": {\n \"rules\": [1, 9, 10],\n \"inclusive\": false\n },\n \"struct\": {\n \"rules\": [9, 10, 15, 28, 29, 30, 44, 45, 46, 47, 48],\n \"inclusive\": false\n },\n \"FLOATING_NOTE_ID\": {\n \"rules\": [37],\n \"inclusive\": false\n },\n \"FLOATING_NOTE\": {\n \"rules\": [34, 35, 36],\n \"inclusive\": false\n },\n \"NOTE_TEXT\": {\n \"rules\": [39, 40],\n \"inclusive\": false\n },\n \"NOTE_ID\": {\n \"rules\": [38],\n \"inclusive\": false\n },\n \"NOTE\": {\n \"rules\": [31, 32, 33],\n \"inclusive\": false\n },\n \"SCALE\": {\n \"rules\": [13, 14],\n \"inclusive\": false\n },\n \"ALIAS\": {\n \"rules\": [],\n \"inclusive\": false\n },\n \"STATE_ID\": {\n \"rules\": [22],\n \"inclusive\": false\n },\n \"STATE_STRING\": {\n \"rules\": [23, 24],\n \"inclusive\": false\n },\n \"FORK_STATE\": {\n \"rules\": [],\n \"inclusive\": false\n },\n \"STATE\": {\n \"rules\": [9, 10, 16, 17, 18, 19, 20, 21, 25, 26, 27],\n \"inclusive\": false\n },\n \"ID\": {\n \"rules\": [9, 10],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 5, 6, 7, 8, 10, 11, 12, 15, 27, 30, 41, 42, 43, 44, 45, 46, 47, 49, 50],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n\n parser.lexer = lexer;\n\n function Parser() {\n this.yy = {};\n }\n\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n if (true) {\n exports.parser = parser;\n exports.Parser = parser.Parser;\n\n exports.parse = function () {\n return parser.parse.apply(parser, arguments);\n };\n\n exports.main = function commonjsMain(args) {\n if (!args[1]) {\n console.log('Usage: ' + args[0] + ' FILE');\n process.exit(1);\n }\n\n var source = __webpack_require__(\n /*! fs */\n \"./node_modules/node-libs-browser/mock/empty.js\").readFileSync(__webpack_require__(\n /*! path */\n \"./node_modules/path-browserify/index.js\").normalize(args[1]), \"utf8\");\n\n return exports.parser.parse(source);\n };\n\n if (true && __webpack_require__.c[__webpack_require__.s] === module) {\n exports.main(process.argv.slice(1));\n }\n }\n /* WEBPACK VAR INJECTION */\n\n }).call(this, __webpack_require__(\n /*! ./../../../../node_modules/process/browser.js */\n \"./node_modules/process/browser.js\"), __webpack_require__(\n /*! ./../../../../node_modules/webpack/buildin/module.js */\n \"./node_modules/webpack/buildin/module.js\")(module));\n /***/\n },\n\n /***/\n \"./src/diagrams/state/shapes.js\":\n /*!**************************************!*\\\n !*** ./src/diagrams/state/shapes.js ***!\n \\**************************************/\n\n /*! exports provided: drawStartState, drawDivider, drawSimpleState, drawDescrState, addTitleAndBox, drawText, drawNote, drawState, drawEdge */\n\n /***/\n function srcDiagramsStateShapesJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawStartState\", function () {\n return drawStartState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawDivider\", function () {\n return drawDivider;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawSimpleState\", function () {\n return drawSimpleState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawDescrState\", function () {\n return drawDescrState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addTitleAndBox\", function () {\n return addTitleAndBox;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawText\", function () {\n return drawText;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawNote\", function () {\n return drawNote;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawState\", function () {\n return drawState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawEdge\", function () {\n return drawEdge;\n });\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _id_cache_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./id-cache.js */\n \"./src/diagrams/state/id-cache.js\");\n /* harmony import */\n\n\n var _stateDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./stateDb */\n \"./src/diagrams/state/stateDb.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ../../utils */\n \"./src/utils.js\");\n /* harmony import */\n\n\n var _common_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ../common/common */\n \"./src/diagrams/common/common.js\");\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n /*! ../../config */\n \"./src/config.js\");\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n /*! ../../logger */\n \"./src/logger.js\"); // let conf;\n\n /**\n * Draws a start state as a black circle\n */\n\n\n var drawStartState = function drawStartState(g) {\n return g.append('circle') // .style('stroke', 'black')\n // .style('fill', 'black')\n .attr('class', 'start-state').attr('r', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit).attr('cx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit).attr('cy', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit);\n };\n /**\n * Draws a start state as a black circle\n */\n\n\n var drawDivider = function drawDivider(g) {\n return g.append('line').style('stroke', 'grey').style('stroke-dasharray', '3').attr('x1', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight).attr('class', 'divider').attr('x2', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight * 2).attr('y1', 0).attr('y2', 0);\n };\n /**\n * Draws a an end state as a black circle\n */\n\n\n var drawSimpleState = function drawSimpleState(g, stateDef) {\n var state = g.append('text').attr('x', 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('font-size', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.fontSize).attr('class', 'state-title').text(stateDef.id);\n var classBox = state.node().getBBox();\n g.insert('rect', ':first-child').attr('x', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('width', classBox.width + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('height', classBox.height + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('rx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.radius);\n return state;\n };\n /**\n * Draws a state with descriptions\n * @param {*} g\n * @param {*} stateDef\n */\n\n\n var drawDescrState = function drawDescrState(g, stateDef) {\n var addTspan = function addTspan(textEl, txt, isFirst) {\n var tSpan = textEl.append('tspan').attr('x', 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).text(txt);\n\n if (!isFirst) {\n tSpan.attr('dy', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight);\n }\n };\n\n var title = g.append('text').attr('x', 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight + 1.3 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('font-size', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.fontSize).attr('class', 'state-title').text(stateDef.descriptions[0]);\n var titleBox = title.node().getBBox();\n var titleHeight = titleBox.height;\n var description = g.append('text') // text label for the x axis\n .attr('x', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', titleHeight + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding * 0.4 + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.dividerMargin + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight).attr('class', 'state-description');\n var isFirst = true;\n var isSecond = true;\n stateDef.descriptions.forEach(function (descr) {\n if (!isFirst) {\n addTspan(description, descr, isSecond);\n isSecond = false;\n }\n\n isFirst = false;\n });\n var descrLine = g.append('line') // text label for the x axis\n .attr('x1', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y1', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + titleHeight + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.dividerMargin / 2).attr('y2', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + titleHeight + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.dividerMargin / 2).attr('class', 'descr-divider');\n var descrBox = description.node().getBBox();\n var width = Math.max(descrBox.width, titleBox.width);\n descrLine.attr('x2', width + 3 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding); // const classBox = title.node().getBBox();\n\n g.insert('rect', ':first-child').attr('x', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('width', width + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('height', descrBox.height + titleHeight + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('rx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.radius);\n return g;\n };\n /**\n * Adds the creates a box around the existing content and adds a\n * panel for the id on top of the content.\n */\n\n /**\n * Function that creates an title row and a frame around a substate for a composit state diagram.\n * The function returns a new d3 svg object with updated width and height properties;\n * @param {*} g The d3 svg object for the substate to framed\n * @param {*} stateDef The info about the\n */\n\n\n var addTitleAndBox = function addTitleAndBox(g, stateDef, altBkg) {\n var pad = Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding;\n var dblPad = 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding;\n var orgBox = g.node().getBBox();\n var orgWidth = orgBox.width;\n var orgX = orgBox.x;\n var title = g.append('text').attr('x', 0).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.titleShift).attr('font-size', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.fontSize).attr('class', 'state-title').text(stateDef.id);\n var titleBox = title.node().getBBox();\n var titleWidth = titleBox.width + dblPad;\n var width = Math.max(titleWidth, orgWidth); // + dblPad;\n\n if (width === orgWidth) {\n width = width + dblPad;\n }\n\n var startX; // const lineY = 1 - getConfig().state.textHeight;\n // const descrLine = g\n // .append('line') // text label for the x axis\n // .attr('x1', 0)\n // .attr('y1', lineY)\n // .attr('y2', lineY)\n // .attr('class', 'descr-divider');\n\n var graphBox = g.node().getBBox(); // descrLine.attr('x2', graphBox.width + getConfig().state.padding);\n\n if (stateDef.doc) {// cnsole.warn(\n // stateDef.id,\n // 'orgX: ',\n // orgX,\n // 'width: ',\n // width,\n // 'titleWidth: ',\n // titleWidth,\n // 'orgWidth: ',\n // orgWidth,\n // 'width',\n // width\n // );\n }\n\n startX = orgX - pad;\n\n if (titleWidth > orgWidth) {\n startX = (orgWidth - width) / 2 + pad;\n }\n\n if (Math.abs(orgX - graphBox.x) < pad) {\n if (titleWidth > orgWidth) {\n startX = orgX - (titleWidth - orgWidth) / 2;\n }\n }\n\n var lineY = 1 - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight; // White color\n\n g.insert('rect', ':first-child').attr('x', startX).attr('y', lineY).attr('class', altBkg ? 'alt-composit' : 'composit').attr('width', width).attr('height', graphBox.height + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.titleShift + 1).attr('rx', '0');\n title.attr('x', startX + pad);\n if (titleWidth <= orgWidth) title.attr('x', orgX + (width - dblPad) / 2 - titleWidth / 2 + pad); // Title background\n\n g.insert('rect', ':first-child').attr('x', startX).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.titleShift - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('width', width) // Just needs to be higher then the descr line, will be clipped by the white color box\n .attr('height', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight * 3).attr('rx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.radius); // Full background\n\n g.insert('rect', ':first-child').attr('x', startX).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.titleShift - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('width', width).attr('height', graphBox.height + 3 + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.textHeight).attr('rx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.radius);\n return g;\n };\n\n var drawEndState = function drawEndState(g) {\n g.append('circle') // .style('stroke', 'black')\n // .style('fill', 'white')\n .attr('class', 'end-state-outer').attr('r', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.miniPadding).attr('cx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.miniPadding).attr('cy', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.miniPadding);\n return g.append('circle') // .style('stroke', 'black')\n // .style('fill', 'black')\n .attr('class', 'end-state-inner').attr('r', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit).attr('cx', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit + 2).attr('cy', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.sizeUnit + 2);\n };\n\n var drawForkJoinState = function drawForkJoinState(g, stateDef) {\n var width = Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.forkWidth;\n var height = Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.forkHeight;\n\n if (stateDef.parentId) {\n var tmp = width;\n width = height;\n height = tmp;\n }\n\n return g.append('rect').style('stroke', 'black').style('fill', 'black').attr('width', width).attr('height', height).attr('x', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding);\n };\n\n var drawText = function drawText(elem, textData) {\n // Remove and ignore br:s\n var nText = textData.text.replace(_common_common__WEBPACK_IMPORTED_MODULE_4__[\"default\"].lineBreakRegex, ' ');\n var textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.style('text-anchor', textData.anchor);\n textElem.attr('fill', textData.fill);\n\n if (typeof textData[\"class\"] !== 'undefined') {\n textElem.attr('class', textData[\"class\"]);\n }\n\n var span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.attr('fill', textData.fill);\n span.text(nText);\n return textElem;\n };\n\n var _drawLongText = function _drawLongText(_text, x, y, g) {\n var textHeight = 0;\n var textElem = g.append('text');\n textElem.style('text-anchor', 'start');\n textElem.attr('class', 'noteText');\n\n var text = _text.replace(/\\r\\n/g, '
');\n\n text = text.replace(/\\n/g, '
');\n var lines = text.split(_common_common__WEBPACK_IMPORTED_MODULE_4__[\"default\"].lineBreakRegex);\n var tHeight = 1.25 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.noteMargin;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _line = _step.value;\n\n var txt = _line.trim();\n\n if (txt.length > 0) {\n var span = textElem.append('tspan');\n span.text(txt);\n\n if (tHeight === 0) {\n var textBounds = span.node().getBBox();\n tHeight += textBounds.height;\n }\n\n textHeight += tHeight;\n span.attr('x', x + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.noteMargin);\n span.attr('y', y + textHeight + 1.25 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.noteMargin);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator[\"return\"] != null) {\n _iterator[\"return\"]();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return {\n textWidth: textElem.node().getBBox().width,\n textHeight: textHeight\n };\n };\n /**\n * Draws a note to the diagram\n * @param text - The text of the given note.\n * @param g - The element the note is attached to.\n */\n\n\n var drawNote = function drawNote(text, g) {\n g.attr('class', 'state-note');\n var note = g.append('rect').attr('x', 0).attr('y', Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding);\n var rectElem = g.append('g');\n\n var _drawLongText2 = _drawLongText(text, 0, 0, rectElem),\n textWidth = _drawLongText2.textWidth,\n textHeight = _drawLongText2.textHeight;\n\n note.attr('height', textHeight + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.noteMargin);\n note.attr('width', textWidth + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.noteMargin * 2);\n return note;\n };\n /**\n * Starting point for drawing a state. The function finds out the specifics\n * about the state and renders with approprtiate function.\n * @param {*} elem\n * @param {*} stateDef\n */\n\n\n var drawState = function drawState(elem, stateDef) {\n var id = stateDef.id;\n var stateInfo = {\n id: id,\n label: stateDef.id,\n width: 0,\n height: 0\n };\n var g = elem.append('g').attr('id', id).attr('class', 'stateGroup');\n if (stateDef.type === 'start') drawStartState(g);\n if (stateDef.type === 'end') drawEndState(g);\n if (stateDef.type === 'fork' || stateDef.type === 'join') drawForkJoinState(g, stateDef);\n if (stateDef.type === 'note') drawNote(stateDef.note.text, g);\n if (stateDef.type === 'divider') drawDivider(g);\n if (stateDef.type === 'default' && stateDef.descriptions.length === 0) drawSimpleState(g, stateDef);\n if (stateDef.type === 'default' && stateDef.descriptions.length > 0) drawDescrState(g, stateDef);\n var stateBox = g.node().getBBox();\n stateInfo.width = stateBox.width + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding;\n stateInfo.height = stateBox.height + 2 * Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding;\n\n _id_cache_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].set(id, stateInfo); // stateCnt++;\n\n\n return stateInfo;\n };\n\n var edgeCount = 0;\n\n var drawEdge = function drawEdge(elem, path, relation) {\n var getRelationType = function getRelationType(type) {\n switch (type) {\n case _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].relationType.AGGREGATION:\n return 'aggregation';\n\n case _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].relationType.EXTENSION:\n return 'extension';\n\n case _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].relationType.COMPOSITION:\n return 'composition';\n\n case _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].relationType.DEPENDENCY:\n return 'dependency';\n }\n };\n\n path.points = path.points.filter(function (p) {\n return !Number.isNaN(p.y);\n }); // The data for our line\n\n var lineData = path.points; // This is the accessor function we talked about above\n\n var lineFunction = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"line\"])().x(function (d) {\n return d.x;\n }).y(function (d) {\n return d.y;\n }).curve(d3__WEBPACK_IMPORTED_MODULE_0__[\"curveBasis\"]);\n var svgPath = elem.append('path').attr('d', lineFunction(lineData)).attr('id', 'edge' + edgeCount).attr('class', 'transition');\n var url = '';\n\n if (Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search;\n url = url.replace(/\\(/g, '\\\\(');\n url = url.replace(/\\)/g, '\\\\)');\n }\n\n svgPath.attr('marker-end', 'url(' + url + '#' + getRelationType(_stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].relationType.DEPENDENCY) + 'End' + ')');\n\n if (typeof relation.title !== 'undefined') {\n var label = elem.append('g').attr('class', 'stateLabel');\n\n var _utils$calcLabelPosit = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].calcLabelPosition(path.points),\n x = _utils$calcLabelPosit.x,\n y = _utils$calcLabelPosit.y;\n\n var rows = _common_common__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getRows(relation.title);\n\n var titleHeight = 0;\n var titleRows = [];\n var maxWidth = 0;\n var minX = 0;\n\n for (var i = 0; i <= rows.length; i++) {\n var title = label.append('text').attr('text-anchor', 'middle').text(rows[i]).attr('x', x).attr('y', y + titleHeight);\n var boundstmp = title.node().getBBox();\n maxWidth = Math.max(maxWidth, boundstmp.width);\n minX = Math.min(minX, boundstmp.x);\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info(boundstmp.x, x, y + titleHeight);\n\n if (titleHeight === 0) {\n var titleBox = title.node().getBBox();\n titleHeight = titleBox.height;\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info('Title height', titleHeight, y);\n }\n\n titleRows.push(title);\n }\n\n var boxHeight = titleHeight * rows.length;\n\n if (rows.length > 1) {\n var heightAdj = (rows.length - 1) * titleHeight * 0.5;\n titleRows.forEach(function (title, i) {\n return title.attr('y', y + i * titleHeight - heightAdj);\n });\n boxHeight = titleHeight * rows.length;\n }\n\n var bounds = label.node().getBBox();\n label.insert('rect', ':first-child').attr('class', 'box').attr('x', x - maxWidth / 2 - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding / 2).attr('y', y - boxHeight / 2 - Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding / 2 - 3.5).attr('width', maxWidth + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding).attr('height', boxHeight + Object(_config__WEBPACK_IMPORTED_MODULE_5__[\"getConfig\"])().state.padding);\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info(bounds); //label.attr('transform', '0 -' + (bounds.y / 2));\n // Debug points\n // path.points.forEach(point => {\n // g.append('circle')\n // .style('stroke', 'red')\n // .style('fill', 'red')\n // .attr('r', 1)\n // .attr('cx', point.x)\n // .attr('cy', point.y);\n // });\n // g.append('circle')\n // .style('stroke', 'blue')\n // .style('fill', 'blue')\n // .attr('r', 1)\n // .attr('cx', x)\n // .attr('cy', y);\n\n }\n\n edgeCount++;\n };\n /***/\n\n },\n\n /***/\n \"./src/diagrams/state/stateDb.js\":\n /*!***************************************!*\\\n !*** ./src/diagrams/state/stateDb.js ***!\n \\***************************************/\n\n /*! exports provided: parseDirective, addState, clear, getState, getStates, logDocuments, getRelations, addRelation, cleanupLabel, lineType, relationType, default */\n\n /***/\n function srcDiagramsStateStateDbJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"parseDirective\", function () {\n return parseDirective;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addState\", function () {\n return addState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"clear\", function () {\n return clear;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getState\", function () {\n return getState;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getStates\", function () {\n return getStates;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"logDocuments\", function () {\n return logDocuments;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getRelations\", function () {\n return getRelations;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addRelation\", function () {\n return addRelation;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"cleanupLabel\", function () {\n return cleanupLabel;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"lineType\", function () {\n return lineType;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"relationType\", function () {\n return relationType;\n });\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! ../../logger */\n \"./src/logger.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ../../utils */\n \"./src/utils.js\");\n /* harmony import */\n\n\n var _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ../../mermaidAPI */\n \"./src/mermaidAPI.js\");\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ../../config */\n \"./src/config.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n var clone = function clone(o) {\n return JSON.parse(JSON.stringify(o));\n };\n\n var rootDoc = [];\n\n var parseDirective = function parseDirective(statement, context, type) {\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].parseDirective(this, statement, context, type);\n };\n\n var setRootDoc = function setRootDoc(o) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].info('Setting root doc', o); // rootDoc = { id: 'root', doc: o };\n\n\n rootDoc = o;\n };\n\n var getRootDoc = function getRootDoc() {\n return rootDoc;\n };\n\n var docTranslator = function docTranslator(parent, node, first) {\n if (node.stmt === 'relation') {\n docTranslator(parent, node.state1, true);\n docTranslator(parent, node.state2, false);\n } else {\n if (node.stmt === 'state') {\n if (node.id === '[*]') {\n node.id = first ? parent.id + '_start' : parent.id + '_end';\n node.start = first;\n }\n }\n\n if (node.doc) {\n var doc = []; // Check for concurrency\n\n var i = 0;\n var currentDoc = [];\n\n for (i = 0; i < node.doc.length; i++) {\n if (node.doc[i].type === 'divider') {\n // debugger;\n var newNode = clone(node.doc[i]);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(node.doc[i]);\n }\n } // If any divider was encountered\n\n\n if (doc.length > 0 && currentDoc.length > 0) {\n var _newNode = {\n stmt: 'state',\n id: Object(_utils__WEBPACK_IMPORTED_MODULE_1__[\"generateId\"])(),\n type: 'divider',\n doc: clone(currentDoc)\n };\n doc.push(clone(_newNode));\n node.doc = doc;\n }\n\n node.doc.forEach(function (docNode) {\n return docTranslator(node, docNode, true);\n });\n }\n }\n };\n\n var getRootDocV2 = function getRootDocV2() {\n docTranslator({\n id: 'root'\n }, {\n id: 'root',\n doc: rootDoc\n }, true);\n return {\n id: 'root',\n doc: rootDoc\n };\n };\n\n var extract = function extract(_doc) {\n // const res = { states: [], relations: [] };\n var doc;\n\n if (_doc.doc) {\n doc = _doc.doc;\n } else {\n doc = _doc;\n } // let doc = root.doc;\n // if (!doc) {\n // doc = root;\n // }\n\n\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].info(doc);\n\n clear();\n\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].info('Extract', doc);\n\n doc.forEach(function (item) {\n if (item.stmt === 'state') {\n addState(item.id, item.type, item.doc, item.description, item.note);\n }\n\n if (item.stmt === 'relation') {\n addRelation(item.state1.id, item.state2.id, item.description);\n }\n });\n };\n\n var newDoc = function newDoc() {\n return {\n relations: [],\n states: {},\n documents: {}\n };\n };\n\n var documents = {\n root: newDoc()\n };\n var currentDocument = documents.root;\n var startCnt = 0;\n var endCnt = 0; // eslint-disable-line\n // let stateCnt = 0;\n\n /**\n * Function called by parser when a node definition has been found.\n * @param id\n * @param text\n * @param type\n * @param style\n */\n\n var addState = function addState(id, type, doc, descr, note) {\n if (typeof currentDocument.states[id] === 'undefined') {\n currentDocument.states[id] = {\n id: id,\n descriptions: [],\n type: type,\n doc: doc,\n note: note\n };\n } else {\n if (!currentDocument.states[id].doc) {\n currentDocument.states[id].doc = doc;\n }\n\n if (!currentDocument.states[id].type) {\n currentDocument.states[id].type = type;\n }\n }\n\n if (descr) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].info('Adding state ', id, descr);\n\n if (typeof descr === 'string') addDescription(id, descr.trim());\n\n if (_typeof(descr) === 'object') {\n descr.forEach(function (des) {\n return addDescription(id, des.trim());\n });\n }\n }\n\n if (note) currentDocument.states[id].note = note;\n };\n\n var clear = function clear() {\n documents = {\n root: newDoc()\n };\n currentDocument = documents.root;\n currentDocument = documents.root;\n startCnt = 0;\n endCnt = 0; // eslint-disable-line\n\n classes = [];\n };\n\n var getState = function getState(id) {\n return currentDocument.states[id];\n };\n\n var getStates = function getStates() {\n return currentDocument.states;\n };\n\n var logDocuments = function logDocuments() {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"logger\"].info('Documents = ', documents);\n };\n\n var getRelations = function getRelations() {\n return currentDocument.relations;\n };\n\n var addRelation = function addRelation(_id1, _id2, title) {\n var id1 = _id1;\n var id2 = _id2;\n var type1 = 'default';\n var type2 = 'default';\n\n if (_id1 === '[*]') {\n startCnt++;\n id1 = 'start' + startCnt;\n type1 = 'start';\n }\n\n if (_id2 === '[*]') {\n endCnt++;\n id2 = 'end' + startCnt;\n type2 = 'end';\n }\n\n addState(id1, type1);\n addState(id2, type2);\n currentDocument.relations.push({\n id1: id1,\n id2: id2,\n title: title\n });\n };\n\n var addDescription = function addDescription(id, _descr) {\n var theState = currentDocument.states[id];\n var descr = _descr;\n\n if (descr[0] === ':') {\n descr = descr.substr(1).trim();\n }\n\n theState.descriptions.push(descr);\n };\n\n var cleanupLabel = function cleanupLabel(label) {\n if (label.substring(0, 1) === ':') {\n return label.substr(2).trim();\n } else {\n return label.trim();\n }\n };\n\n var lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n };\n var dividerCnt = 0;\n\n var getDividerId = function getDividerId() {\n dividerCnt++;\n return 'divider-id-' + dividerCnt;\n };\n\n var classes = [];\n\n var getClasses = function getClasses() {\n return classes;\n };\n\n var getDirection = function getDirection() {\n return 'TB';\n };\n\n var relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n };\n\n var trimColon = function trimColon(str) {\n return str && str[0] === ':' ? str.substr(1).trim() : str.trim();\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n parseDirective: parseDirective,\n getConfig: function getConfig() {\n return _config__WEBPACK_IMPORTED_MODULE_3__[\"getConfig\"]().state;\n },\n addState: addState,\n clear: clear,\n getState: getState,\n getStates: getStates,\n getRelations: getRelations,\n getClasses: getClasses,\n getDirection: getDirection,\n addRelation: addRelation,\n getDividerId: getDividerId,\n // addDescription,\n cleanupLabel: cleanupLabel,\n lineType: lineType,\n relationType: relationType,\n logDocuments: logDocuments,\n getRootDoc: getRootDoc,\n setRootDoc: setRootDoc,\n getRootDocV2: getRootDocV2,\n extract: extract,\n trimColon: trimColon\n };\n /***/\n },\n\n /***/\n \"./src/diagrams/state/stateRenderer-v2.js\":\n /*!************************************************!*\\\n !*** ./src/diagrams/state/stateRenderer-v2.js ***!\n \\************************************************/\n\n /*! exports provided: setConf, getClasses, draw, default */\n\n /***/\n function srcDiagramsStateStateRendererV2Js(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setConf\", function () {\n return setConf;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getClasses\", function () {\n return getClasses;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"draw\", function () {\n return draw;\n });\n /* harmony import */\n\n\n var graphlib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! graphlib */\n \"graphlib\");\n /* harmony import */\n\n\n var graphlib__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(graphlib__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_1__);\n /* harmony import */\n\n\n var _stateDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./stateDb */\n \"./src/diagrams/state/stateDb.js\");\n /* harmony import */\n\n\n var _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./parser/stateDiagram */\n \"./src/diagrams/state/parser/stateDiagram.jison\");\n /* harmony import */\n\n\n var _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_3__);\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ../../config */\n \"./src/config.js\");\n /* harmony import */\n\n\n var _dagre_wrapper_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n /*! ../../dagre-wrapper/index.js */\n \"./src/dagre-wrapper/index.js\");\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n /*! ../../logger */\n \"./src/logger.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n /*! ../../utils */\n \"./src/utils.js\");\n\n var conf = {};\n\n var setConf = function setConf(cnf) {\n var keys = Object.keys(cnf);\n\n for (var i = 0; i < keys.length; i++) {\n conf[keys[i]] = cnf[keys[i]];\n }\n };\n\n var nodeDb = {};\n /**\n * Returns the all the styles from classDef statements in the graph definition.\n * @returns {object} classDef styles\n */\n\n var getClasses = function getClasses(text) {\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].trace('Extracting classes');\n\n _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].clear();\n\n var parser = _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_3___default.a.parser;\n parser.yy = _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; // Parse the graph definition\n\n parser.parse(text);\n return _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getClasses();\n };\n\n var setupNode = function setupNode(g, parent, node, altFlag) {\n // Add the node\n if (node.id !== 'root') {\n var shape = 'rect';\n\n if (node.start === true) {\n shape = 'start';\n }\n\n if (node.start === false) {\n shape = 'end';\n }\n\n if (node.type !== 'default') {\n shape = node.type;\n }\n\n if (!nodeDb[node.id]) {\n nodeDb[node.id] = {\n id: node.id,\n shape: shape,\n description: node.id,\n classes: 'statediagram-state'\n };\n } // Build of the array of description strings accordinging\n\n\n if (node.description) {\n if (Array.isArray(nodeDb[node.id].description)) {\n // There already is an array of strings,add to it\n nodeDb[node.id].shape = 'rectWithTitle';\n nodeDb[node.id].description.push(node.description);\n } else {\n if (nodeDb[node.id].description.length > 0) {\n // if there is a description already transformit to an array\n nodeDb[node.id].shape = 'rectWithTitle';\n\n if (nodeDb[node.id].description === node.id) {\n // If the previous description was the is, remove it\n nodeDb[node.id].description = [node.description];\n } else {\n nodeDb[node.id].description = [nodeDb[node.id].description, node.description];\n }\n } else {\n nodeDb[node.id].shape = 'rect';\n nodeDb[node.id].description = node.description;\n }\n }\n } // Save data for description and group so that for instance a statement without description overwrites\n // one with description\n // group\n\n\n if (!nodeDb[node.id].type && node.doc) {\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info('Setting cluser for ', node.id);\n\n nodeDb[node.id].type = 'group';\n nodeDb[node.id].shape = node.type === 'divider' ? 'divider' : 'roundedWithTitle';\n nodeDb[node.id].classes = nodeDb[node.id].classes + ' ' + (altFlag ? 'statediagram-cluster statediagram-cluster-alt' : 'statediagram-cluster');\n }\n\n var nodeData = {\n labelStyle: '',\n shape: nodeDb[node.id].shape,\n labelText: nodeDb[node.id].description,\n classes: nodeDb[node.id].classes,\n //classStr,\n style: '',\n //styles.style,\n id: node.id,\n domId: 'state-' + node.id + '-' + cnt,\n type: nodeDb[node.id].type,\n padding: 15 //getConfig().flowchart.padding\n\n };\n\n if (node.note) {\n // Todo: set random id\n var noteData = {\n labelStyle: '',\n shape: 'note',\n labelText: node.note.text,\n classes: 'statediagram-note',\n //classStr,\n style: '',\n //styles.style,\n id: node.id + '----note',\n domId: 'state-' + node.id + '----note-' + cnt,\n type: nodeDb[node.id].type,\n padding: 15 //getConfig().flowchart.padding\n\n };\n var groupData = {\n labelStyle: '',\n shape: 'noteGroup',\n labelText: node.note.text,\n classes: nodeDb[node.id].classes,\n //classStr,\n style: '',\n //styles.style,\n id: node.id + '----parent',\n domId: 'state-' + node.id + '----parent-' + cnt,\n type: 'group',\n padding: 0 //getConfig().flowchart.padding\n\n };\n cnt++;\n g.setNode(node.id + '----parent', groupData);\n g.setNode(noteData.id, noteData);\n g.setNode(node.id, nodeData);\n g.setParent(node.id, node.id + '----parent');\n g.setParent(noteData.id, node.id + '----parent');\n var from = node.id;\n var to = noteData.id;\n\n if (node.note.position === 'left of') {\n from = noteData.id;\n to = node.id;\n }\n\n g.setEdge(from, to, {\n arrowhead: 'none',\n arrowType: '',\n style: 'fill:none',\n labelStyle: '',\n classes: 'transition note-edge',\n arrowheadStyle: 'fill: #333',\n labelpos: 'c',\n labelType: 'text',\n thickness: 'normal'\n });\n } else {\n g.setNode(node.id, nodeData);\n }\n }\n\n if (parent) {\n if (parent.id !== 'root') {\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info('Setting node ', node.id, ' to be child of its parent ', parent.id);\n\n g.setParent(node.id, parent.id);\n }\n }\n\n if (node.doc) {\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info('Adding nodes children ');\n\n setupDoc(g, node, node.doc, !altFlag);\n }\n };\n\n var cnt = 0;\n\n var setupDoc = function setupDoc(g, parent, doc, altFlag) {\n cnt = 0;\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].trace('items', doc);\n\n doc.forEach(function (item) {\n if (item.stmt === 'state' || item.stmt === 'default') {\n setupNode(g, parent, item, altFlag);\n } else if (item.stmt === 'relation') {\n setupNode(g, parent, item.state1, altFlag);\n setupNode(g, parent, item.state2, altFlag);\n var edgeData = {\n id: 'edge' + cnt,\n arrowhead: 'normal',\n arrowTypeEnd: 'arrow_barb',\n style: 'fill:none',\n labelStyle: '',\n label: item.description,\n arrowheadStyle: 'fill: #333',\n labelpos: 'c',\n labelType: 'text',\n thickness: 'normal',\n classes: 'transition'\n };\n var startId = item.state1.id;\n var endId = item.state2.id;\n g.setEdge(startId, endId, edgeData, cnt);\n cnt++;\n }\n });\n };\n /**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\n\n\n var draw = function draw(text, id) {\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info('Drawing state diagram (v2)', id);\n\n _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].clear();\n\n nodeDb = {};\n var parser = _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_3___default.a.parser;\n parser.yy = _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; // Parse the graph definition\n\n parser.parse(text); // Fetch the default direction, use TD if none was found\n\n var dir = _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDirection();\n\n if (typeof dir === 'undefined') {\n dir = 'LR';\n }\n\n var conf = Object(_config__WEBPACK_IMPORTED_MODULE_4__[\"getConfig\"])().state;\n var nodeSpacing = conf.nodeSpacing || 50;\n var rankSpacing = conf.rankSpacing || 50; // Create the input mermaid.graph\n\n var g = new graphlib__WEBPACK_IMPORTED_MODULE_0___default.a.Graph({\n multigraph: true,\n compound: true\n }).setGraph({\n rankdir: 'TB',\n nodesep: nodeSpacing,\n ranksep: rankSpacing,\n marginx: 8,\n marginy: 8\n }).setDefaultEdgeLabel(function () {\n return {};\n });\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info(_stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getRootDocV2());\n\n _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extract(_stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getRootDocV2());\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].info(_stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getRootDocV2());\n\n setupNode(g, undefined, _stateDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getRootDocV2(), true); // Set up an SVG group so that we can translate the final graph.\n\n var svg = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])(\"[id=\\\"\".concat(id, \"\\\"]\")); // Run the renderer. This is what draws the final graph.\n\n var element = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('#' + id + ' g');\n Object(_dagre_wrapper_index_js__WEBPACK_IMPORTED_MODULE_5__[\"render\"])(element, g, ['barb'], 'statediagram', id);\n var padding = 8;\n var bounds = svg.node().getBBox();\n var width = bounds.width + padding * 2;\n var height = bounds.height + padding * 2; // Zoom in a bit\n\n svg.attr('class', 'statediagram');\n var svgBounds = svg.node().getBBox();\n Object(_utils__WEBPACK_IMPORTED_MODULE_7__[\"configureSvgSize\"])(svg, height, width * 1.75, conf.useMaxWidth); // Ensure the viewBox includes the whole svgBounds area with extra space for padding\n\n var vBox = \"\".concat(svgBounds.x - padding, \" \").concat(svgBounds.y - padding, \" \").concat(width, \" \").concat(height);\n\n _logger__WEBPACK_IMPORTED_MODULE_6__[\"logger\"].debug(\"viewBox \".concat(vBox));\n\n svg.attr('viewBox', vBox); // Add label rects for non html labels\n\n if (!conf.htmlLabels) {\n var labels = document.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n\n for (var k = 0; k < labels.length; k++) {\n var label = labels[k]; // Get dimensions of label\n\n var dim = label.getBBox();\n var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n rect.setAttribute('rx', 0);\n rect.setAttribute('ry', 0);\n rect.setAttribute('width', dim.width);\n rect.setAttribute('height', dim.height);\n label.insertBefore(rect, label.firstChild);\n }\n }\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n setConf: setConf,\n getClasses: getClasses,\n draw: draw\n };\n /***/\n },\n\n /***/\n \"./src/diagrams/state/stateRenderer.js\":\n /*!*********************************************!*\\\n !*** ./src/diagrams/state/stateRenderer.js ***!\n \\*********************************************/\n\n /*! exports provided: setConf, draw, default */\n\n /***/\n function srcDiagramsStateStateRendererJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setConf\", function () {\n return setConf;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"draw\", function () {\n return draw;\n });\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var dagre__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! dagre */\n \"dagre\");\n /* harmony import */\n\n\n var dagre__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dagre__WEBPACK_IMPORTED_MODULE_1__);\n /* harmony import */\n\n\n var graphlib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! graphlib */\n \"graphlib\");\n /* harmony import */\n\n\n var graphlib__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(graphlib__WEBPACK_IMPORTED_MODULE_2__);\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ../../logger */\n \"./src/logger.js\");\n /* harmony import */\n\n\n var _stateDb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ./stateDb */\n \"./src/diagrams/state/stateDb.js\");\n /* harmony import */\n\n\n var _common_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n /*! ../common/common */\n \"./src/diagrams/common/common.js\");\n /* harmony import */\n\n\n var _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n /*! ./parser/stateDiagram */\n \"./src/diagrams/state/parser/stateDiagram.jison\");\n /* harmony import */\n\n\n var _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6__);\n /* harmony import */\n\n\n var _shapes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n /*! ./shapes */\n \"./src/diagrams/state/shapes.js\");\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\n /*! ../../config */\n \"./src/config.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\n /*! ../../utils */\n \"./src/utils.js\"); // import idCache from './id-cache';\n\n\n _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6__[\"parser\"].yy = _stateDb__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; // TODO Move conf object to main conf in mermaidAPI\n\n var conf;\n var transformationLog = {};\n\n var setConf = function setConf() {}; // Todo optimize\n\n /**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\n\n\n var insertMarkers = function insertMarkers(elem) {\n elem.append('defs').append('marker').attr('id', 'dependencyEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n };\n /**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\n\n\n var draw = function draw(text, id) {\n conf = Object(_config__WEBPACK_IMPORTED_MODULE_8__[\"getConfig\"])().state;\n\n _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6__[\"parser\"].yy.clear();\n\n _parser_stateDiagram__WEBPACK_IMPORTED_MODULE_6__[\"parser\"].parse(text);\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Rendering diagram ' + text); // Fetch the default direction, use TD if none was found\n\n\n var diagram = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"select\"])(\"[id='\".concat(id, \"']\"));\n insertMarkers(diagram); // Layout graph, Create a new directed graph\n\n var graph = new graphlib__WEBPACK_IMPORTED_MODULE_2___default.a.Graph({\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n rankdir: 'RL' // ranksep: '20'\n\n }); // Default to assigning a new object as a label for each new edge.\n\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n\n var rootDoc = _stateDb__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getRootDoc();\n\n renderDoc(rootDoc, diagram, undefined, false);\n var padding = conf.padding;\n var bounds = diagram.node().getBBox();\n var width = bounds.width + padding * 2;\n var height = bounds.height + padding * 2; // zoom in a bit\n\n var svgWidth = width * 1.75;\n Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\"configureSvgSize\"])(diagram, height, svgWidth, conf.useMaxWidth);\n diagram.attr('viewBox', \"\".concat(bounds.x - conf.padding, \" \").concat(bounds.y - conf.padding, \" \") + width + ' ' + height);\n };\n\n var getLabelWidth = function getLabelWidth(text) {\n return text ? text.length * conf.fontSizeFactor : 1;\n };\n\n var renderDoc = function renderDoc(doc, diagram, parentId, altBkg) {\n // // Layout graph, Create a new directed graph\n var graph = new graphlib__WEBPACK_IMPORTED_MODULE_2___default.a.Graph({\n compound: true,\n multigraph: true\n });\n var i;\n var edgeFreeDoc = true;\n\n for (i = 0; i < doc.length; i++) {\n if (doc[i].stmt === 'relation') {\n edgeFreeDoc = false;\n break;\n }\n } // Set an object for the graph label\n\n\n if (parentId) graph.setGraph({\n rankdir: 'LR',\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n ranker: 'tight-tree',\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n isMultiGraph: true // ranksep: 5,\n // nodesep: 1\n\n });else {\n graph.setGraph({\n rankdir: 'TB',\n multigraph: true,\n compound: true,\n // isCompound: true,\n // acyclicer: 'greedy',\n // ranker: 'longest-path'\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n ranker: 'tight-tree',\n // ranker: 'network-simplex'\n isMultiGraph: true\n });\n } // Default to assigning a new object as a label for each new edge.\n\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n\n _stateDb__WEBPACK_IMPORTED_MODULE_4__[\"default\"].extract(doc);\n\n var states = _stateDb__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getStates();\n\n var relations = _stateDb__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getRelations();\n\n var keys = Object.keys(states);\n var first = true;\n\n for (var _i = 0; _i < keys.length; _i++) {\n var stateDef = states[keys[_i]];\n\n if (parentId) {\n stateDef.parentId = parentId;\n }\n\n var node = void 0;\n\n if (stateDef.doc) {\n var sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup');\n node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg);\n\n if (first) {\n // first = false;\n sub = Object(_shapes__WEBPACK_IMPORTED_MODULE_7__[\"addTitleAndBox\"])(sub, stateDef, altBkg);\n var boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height + conf.padding / 2;\n transformationLog[stateDef.id] = {\n y: conf.compositTitleSize\n };\n } else {\n // sub = addIdAndBox(sub, stateDef);\n var _boxBounds = sub.node().getBBox();\n\n node.width = _boxBounds.width;\n node.height = _boxBounds.height; // transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n }\n } else {\n node = Object(_shapes__WEBPACK_IMPORTED_MODULE_7__[\"drawState\"])(diagram, stateDef, graph);\n }\n\n if (stateDef.note) {\n // Draw note note\n var noteDef = {\n descriptions: [],\n id: stateDef.id + '-note',\n note: stateDef.note,\n type: 'note'\n };\n var note = Object(_shapes__WEBPACK_IMPORTED_MODULE_7__[\"drawState\"])(diagram, noteDef, graph); // graph.setNode(node.id, node);\n\n if (stateDef.note.position === 'left of') {\n graph.setNode(node.id + '-note', note);\n graph.setNode(node.id, node);\n } else {\n graph.setNode(node.id, node);\n graph.setNode(node.id + '-note', note);\n } // graph.setNode(node.id);\n\n\n graph.setParent(node.id, node.id + '-group');\n graph.setParent(node.id + '-note', node.id + '-group');\n } else {\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n graph.setNode(node.id, node);\n }\n }\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Count=', graph.nodeCount(), graph);\n\n var cnt = 0;\n relations.forEach(function (relation) {\n cnt++;\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Setting edge', relation);\n\n graph.setEdge(relation.id1, relation.id2, {\n relation: relation,\n width: getLabelWidth(relation.title),\n height: conf.labelHeight * _common_common__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getRows(relation.title).length,\n labelpos: 'c'\n }, 'id' + cnt);\n });\n dagre__WEBPACK_IMPORTED_MODULE_1___default.a.layout(graph);\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Graph after layout', graph.nodes());\n\n var svgElem = diagram.node();\n graph.nodes().forEach(function (v) {\n if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].warn('Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n\n Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"select\"])('#' + svgElem.id + ' #' + v).attr('transform', 'translate(' + (graph.node(v).x - graph.node(v).width / 2) + ',' + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + ' )');\n Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"select\"])('#' + svgElem.id + ' #' + v).attr('data-x-shift', graph.node(v).x - graph.node(v).width / 2);\n var dividers = document.querySelectorAll('#' + svgElem.id + ' #' + v + ' .divider');\n dividers.forEach(function (divider) {\n var parent = divider.parentElement;\n var pWidth = 0;\n var pShift = 0;\n\n if (parent) {\n if (parent.parentElement) pWidth = parent.parentElement.getBBox().width;\n pShift = parseInt(parent.getAttribute('data-x-shift'), 10);\n\n if (Number.isNaN(pShift)) {\n pShift = 0;\n }\n }\n\n divider.setAttribute('x1', 0 - pShift + 8);\n divider.setAttribute('x2', pWidth - pShift - 8);\n });\n } else {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('No Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n }\n });\n var stateBox = svgElem.getBBox();\n graph.edges().forEach(function (e) {\n if (typeof e !== 'undefined' && typeof graph.edge(e) !== 'undefined') {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e)));\n\n Object(_shapes__WEBPACK_IMPORTED_MODULE_7__[\"drawEdge\"])(diagram, graph.edge(e), graph.edge(e).relation);\n }\n });\n stateBox = svgElem.getBBox();\n var stateInfo = {\n id: parentId ? parentId : 'root',\n label: parentId ? parentId : 'root',\n width: 0,\n height: 0\n };\n stateInfo.width = stateBox.width + 2 * conf.padding;\n stateInfo.height = stateBox.height + 2 * conf.padding;\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Doc rendered', stateInfo, graph);\n\n return stateInfo;\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n setConf: setConf,\n draw: draw\n };\n /***/\n },\n\n /***/\n \"./src/diagrams/state/styles.js\":\n /*!**************************************!*\\\n !*** ./src/diagrams/state/styles.js ***!\n \\**************************************/\n\n /*! exports provided: default */\n\n /***/\n function srcDiagramsStateStylesJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n\n var getStyles = function getStyles(options) {\n return \"g.stateGroup text {\\n fill: \".concat(options.nodeBorder, \";\\n stroke: none;\\n font-size: 10px;\\n}\\ng.stateGroup text {\\n fill: \").concat(options.textColor, \";\\n stroke: none;\\n font-size: 10px;\\n\\n}\\ng.stateGroup .state-title {\\n font-weight: bolder;\\n fill: \").concat(options.labelColor, \";\\n}\\n\\ng.stateGroup rect {\\n fill: \").concat(options.mainBkg, \";\\n stroke: \").concat(options.nodeBorder, \";\\n}\\n\\ng.stateGroup line {\\n stroke: \").concat(options.lineColor, \";\\n stroke-width: 1;\\n}\\n\\n.transition {\\n stroke: \").concat(options.lineColor, \";\\n stroke-width: 1;\\n fill: none;\\n}\\n\\n.stateGroup .composit {\\n fill: \").concat(options.background, \";\\n border-bottom: 1px\\n}\\n\\n.stateGroup .alt-composit {\\n fill: #e0e0e0;\\n border-bottom: 1px\\n}\\n\\n.state-note {\\n stroke: \").concat(options.noteBorderColor, \";\\n fill: \").concat(options.noteBkgColor, \";\\n\\n text {\\n fill: black;\\n stroke: none;\\n font-size: 10px;\\n }\\n}\\n\\n.stateLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: \").concat(options.mainBkg, \";\\n opacity: 0.5;\\n}\\n\\n.edgeLabel .label rect {\\n fill: \").concat(options.tertiaryColor, \";\\n opacity: 0.5;\\n}\\n.edgeLabel .label text {\\n fill: \").concat(options.tertiaryTextColor, \";\\n}\\n.label div .edgeLabel {\\n color: \").concat(options.tertiaryTextColor, \";\\n}\\n\\n.stateLabel text {\\n fill: \").concat(options.labelColor, \";\\n font-size: 10px;\\n font-weight: bold;\\n}\\n\\n.node circle.state-start {\\n fill: \").concat(options.lineColor, \";\\n stroke: black;\\n}\\n.node circle.state-end {\\n fill: \").concat(options.primaryBorderColor, \";\\n stroke: \").concat(options.background, \";\\n stroke-width: 1.5\\n}\\n.end-state-inner {\\n fill: \").concat(options.background, \";\\n // stroke: \").concat(options.background, \";\\n stroke-width: 1.5\\n}\\n\\n.node rect {\\n fill: \").concat(options.mainBkg, \";\\n stroke: \").concat(options.nodeBorder, \";\\n stroke-width: 1px;\\n}\\n#statediagram-barbEnd {\\n fill: \").concat(options.lineColor, \";\\n}\\n\\n.statediagram-cluster rect {\\n fill: \").concat(options.mainBkg, \";\\n stroke: \").concat(options.nodeBorder, \";\\n stroke-width: 1px;\\n}\\n\\n.cluster-label, .nodeLabel {\\n color: \").concat(options.textColor, \";\\n}\\n\\n.statediagram-cluster rect.outer {\\n rx: 5px;\\n ry: 5px;\\n}\\n.statediagram-state .divider {\\n stroke: \").concat(options.nodeBorder, \";\\n}\\n\\n.statediagram-state .title-state {\\n rx: 5px;\\n ry: 5px;\\n}\\n.statediagram-cluster.statediagram-cluster .inner {\\n fill: \").concat(options.background, \";\\n}\\n.statediagram-cluster.statediagram-cluster-alt .inner {\\n fill: #e0e0e0;\\n}\\n\\n.statediagram-cluster .inner {\\n rx:0;\\n ry:0;\\n}\\n\\n.statediagram-state rect.basic {\\n rx: 5px;\\n ry: 5px;\\n}\\n.statediagram-state rect.divider {\\n stroke-dasharray: 10,10;\\n fill: \").concat(options.altBackground ? options.altBackground : '#efefef', \";\\n}\\n\\n.note-edge {\\n stroke-dasharray: 5;\\n}\\n\\n.statediagram-note rect {\\n fill: \").concat(options.noteBkgColor, \";\\n stroke: \").concat(options.noteBorderColor, \";\\n stroke-width: 1px;\\n rx: 0;\\n ry: 0;\\n}\\n.statediagram-note rect {\\n fill: \").concat(options.noteBkgColor, \";\\n stroke: \").concat(options.noteBorderColor, \";\\n stroke-width: 1px;\\n rx: 0;\\n ry: 0;\\n}\\n\\n.statediagram-note text {\\n fill: \").concat(options.noteTextColor, \";\\n}\\n\\n.statediagram-note .nodeLabel {\\n color: \").concat(options.noteTextColor, \";\\n}\\n\\n#dependencyStart, #dependencyEnd {\\n fill: \").concat(options.lineColor, \";\\n stroke: \").concat(options.lineColor, \";\\n stroke-width: 1;\\n}\\n\");\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = getStyles;\n /***/\n },\n\n /***/\n \"./src/diagrams/user-journey/journeyDb.js\":\n /*!************************************************!*\\\n !*** ./src/diagrams/user-journey/journeyDb.js ***!\n \\************************************************/\n\n /*! exports provided: parseDirective, clear, setTitle, getTitle, addSection, getSections, getTasks, addTask, addTaskOrg, default */\n\n /***/\n function srcDiagramsUserJourneyJourneyDbJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"parseDirective\", function () {\n return parseDirective;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"clear\", function () {\n return clear;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setTitle\", function () {\n return setTitle;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getTitle\", function () {\n return getTitle;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addSection\", function () {\n return addSection;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getSections\", function () {\n return getSections;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getTasks\", function () {\n return getTasks;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addTask\", function () {\n return addTask;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"addTaskOrg\", function () {\n return addTaskOrg;\n });\n /* harmony import */\n\n\n var _mermaidAPI__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! ../../mermaidAPI */\n \"./src/mermaidAPI.js\");\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ../../config */\n \"./src/config.js\");\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n\n function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n }\n\n var title = '';\n var currentSection = '';\n var sections = [];\n var tasks = [];\n var rawTasks = [];\n\n var parseDirective = function parseDirective(statement, context, type) {\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_0__[\"default\"].parseDirective(this, statement, context, type);\n };\n\n var clear = function clear() {\n sections.length = 0;\n tasks.length = 0;\n currentSection = '';\n title = '';\n rawTasks.length = 0;\n };\n\n var setTitle = function setTitle(txt) {\n title = txt;\n };\n\n var getTitle = function getTitle() {\n return title;\n };\n\n var addSection = function addSection(txt) {\n currentSection = txt;\n sections.push(txt);\n };\n\n var getSections = function getSections() {\n return sections;\n };\n\n var getTasks = function getTasks() {\n var allItemsProcessed = compileTasks();\n var maxDepth = 100;\n var iterationCount = 0;\n\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n\n tasks.push.apply(tasks, rawTasks);\n return tasks;\n };\n\n var updateActors = function updateActors() {\n var tempActors = [];\n tasks.forEach(function (task) {\n if (task.people) {\n tempActors.push.apply(tempActors, _toConsumableArray(task.people));\n }\n });\n var unique = new Set(tempActors);\n return _toConsumableArray(unique).sort();\n };\n\n var addTask = function addTask(descr, taskData) {\n var pieces = taskData.substr(1).split(':');\n var score = 0;\n var peeps = [];\n\n if (pieces.length === 1) {\n score = Number(pieces[0]);\n peeps = [];\n } else {\n score = Number(pieces[0]);\n peeps = pieces[1].split(',');\n }\n\n var peopleList = peeps.map(function (s) {\n return s.trim();\n });\n var rawTask = {\n section: currentSection,\n type: currentSection,\n people: peopleList,\n task: descr,\n score: score\n };\n rawTasks.push(rawTask);\n };\n\n var addTaskOrg = function addTaskOrg(descr) {\n var newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n };\n tasks.push(newTask);\n };\n\n var compileTasks = function compileTasks() {\n var compileTask = function compileTask(pos) {\n return rawTasks[pos].processed;\n };\n\n var allProcessed = true;\n\n for (var i = 0; i < rawTasks.length; i++) {\n compileTask(i);\n allProcessed = allProcessed && rawTasks[i].processed;\n }\n\n return allProcessed;\n };\n\n var getActors = function getActors() {\n return updateActors();\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n parseDirective: parseDirective,\n getConfig: function getConfig() {\n return _config__WEBPACK_IMPORTED_MODULE_1__[\"getConfig\"]().journey;\n },\n clear: clear,\n setTitle: setTitle,\n getTitle: getTitle,\n addSection: addSection,\n getSections: getSections,\n getTasks: getTasks,\n addTask: addTask,\n addTaskOrg: addTaskOrg,\n getActors: getActors\n };\n /***/\n },\n\n /***/\n \"./src/diagrams/user-journey/journeyRenderer.js\":\n /*!******************************************************!*\\\n !*** ./src/diagrams/user-journey/journeyRenderer.js ***!\n \\******************************************************/\n\n /*! exports provided: setConf, draw, bounds, drawTasks, default */\n\n /***/\n function srcDiagramsUserJourneyJourneyRendererJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setConf\", function () {\n return setConf;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"draw\", function () {\n return draw;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"bounds\", function () {\n return bounds;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawTasks\", function () {\n return drawTasks;\n });\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _parser_journey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./parser/journey */\n \"./src/diagrams/user-journey/parser/journey.jison\");\n /* harmony import */\n\n\n var _parser_journey__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_parser_journey__WEBPACK_IMPORTED_MODULE_1__);\n /* harmony import */\n\n\n var _journeyDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./journeyDb */\n \"./src/diagrams/user-journey/journeyDb.js\");\n /* harmony import */\n\n\n var _svgDraw__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./svgDraw */\n \"./src/diagrams/user-journey/svgDraw.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ../../utils */\n \"./src/utils.js\");\n\n _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].yy = _journeyDb__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n var conf = {\n leftMargin: 150,\n diagramMarginX: 50,\n diagramMarginY: 20,\n // Margin between tasks\n taskMargin: 50,\n // Width of task boxes\n width: 150,\n // Height of task boxes\n height: 50,\n taskFontSize: 14,\n taskFontFamily: '\"Open-Sans\", \"sans-serif\"',\n // Margin around loop boxes\n boxMargin: 10,\n boxTextMargin: 5,\n noteMargin: 10,\n // Space between messages\n messageMargin: 35,\n // Multiline message alignment\n messageAlign: 'center',\n // Depending on css styling this might need adjustment\n // Projects the edge of the diagram downwards\n bottomMarginAdj: 1,\n // width of activation box\n activationWidth: 10,\n // text placement as: tspan | fo | old only text as before\n textPlacement: 'fo',\n actorColours: ['#8FBC8F', '#7CFC00', '#00FFFF', '#20B2AA', '#B0E0E6', '#FFFFE0'],\n sectionFills: ['#191970', '#8B008B', '#4B0082', '#2F4F4F', '#800000', '#8B4513', '#00008B'],\n sectionColours: ['#fff']\n };\n\n var setConf = function setConf(cnf) {\n var keys = Object.keys(cnf);\n keys.forEach(function (key) {\n conf[key] = cnf[key];\n });\n };\n\n var actors = {};\n\n function drawActorLegend(diagram) {\n // Draw the actors\n var yPos = 60;\n Object.keys(actors).forEach(function (person) {\n var colour = actors[person];\n var circleData = {\n cx: 20,\n cy: yPos,\n r: 7,\n fill: colour,\n stroke: '#000'\n };\n\n _svgDraw__WEBPACK_IMPORTED_MODULE_3__[\"default\"].drawCircle(diagram, circleData);\n\n var labelData = {\n x: 40,\n y: yPos + 7,\n fill: '#666',\n text: person,\n textMargin: conf.boxTextMargin | 5\n };\n\n _svgDraw__WEBPACK_IMPORTED_MODULE_3__[\"default\"].drawText(diagram, labelData);\n\n yPos += 20;\n });\n }\n\n var LEFT_MARGIN = conf.leftMargin;\n\n var draw = function draw(text, id) {\n _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].yy.clear();\n\n _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].parse(text + '\\n');\n\n bounds.init();\n var diagram = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"select\"])('#' + id);\n diagram.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n _svgDraw__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initGraphics(diagram);\n\n var tasks = _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].yy.getTasks();\n\n var title = _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].yy.getTitle();\n\n var actorNames = _parser_journey__WEBPACK_IMPORTED_MODULE_1__[\"parser\"].yy.getActors();\n\n for (var member in actors) {\n delete actors[member];\n }\n\n var actorPos = 0;\n actorNames.forEach(function (actorName) {\n actors[actorName] = conf.actorColours[actorPos % conf.actorColours.length];\n actorPos++;\n });\n drawActorLegend(diagram);\n bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50);\n drawTasks(diagram, tasks, 0);\n var box = bounds.getBounds();\n\n if (title) {\n diagram.append('text').text(title).attr('x', LEFT_MARGIN).attr('font-size', '4ex').attr('font-weight', 'bold').attr('y', 25);\n }\n\n var height = box.stopy - box.starty + 2 * conf.diagramMarginY;\n var width = LEFT_MARGIN + box.stopx + 2 * conf.diagramMarginX;\n Object(_utils__WEBPACK_IMPORTED_MODULE_4__[\"configureSvgSize\"])(diagram, height, width, conf.useMaxWidth); // Draw activity line\n\n diagram.append('line').attr('x1', LEFT_MARGIN).attr('y1', conf.height * 4) // One section head + one task + margins\n .attr('x2', width - LEFT_MARGIN - 4) // Subtract stroke width so arrow point is retained\n .attr('y2', conf.height * 4).attr('stroke-width', 4).attr('stroke', 'black').attr('marker-end', 'url(#arrowhead)');\n var extraVertForTitle = title ? 70 : 0;\n diagram.attr('viewBox', \"\".concat(box.startx, \" -25 \").concat(width, \" \").concat(height + extraVertForTitle));\n diagram.attr('preserveAspectRatio', 'xMinYMin meet');\n };\n\n var bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n },\n verticalPos: 0,\n sequenceItems: [],\n init: function init() {\n this.sequenceItems = [];\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n };\n this.verticalPos = 0;\n },\n updateVal: function updateVal(obj, key, val, fun) {\n if (typeof obj[key] === 'undefined') {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function updateBounds(startx, starty, stopx, stopy) {\n var _self = this;\n\n var cnt = 0;\n\n function updateFn(type) {\n return function updateItemBounds(item) {\n cnt++; // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n\n var n = _self.sequenceItems.length - cnt + 1;\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n }\n };\n }\n\n this.sequenceItems.forEach(updateFn());\n },\n insert: function insert(startx, starty, stopx, stopy) {\n var _startx = Math.min(startx, stopx);\n\n var _stopx = Math.max(startx, stopx);\n\n var _starty = Math.min(starty, stopy);\n\n var _stopy = Math.max(starty, stopy);\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min);\n this.updateVal(bounds.data, 'starty', _starty, Math.min);\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n bumpVerticalPos: function bumpVerticalPos(bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = this.verticalPos;\n },\n getVerticalPos: function getVerticalPos() {\n return this.verticalPos;\n },\n getBounds: function getBounds() {\n return this.data;\n }\n };\n var fills = conf.sectionFills;\n var textColours = conf.sectionColours;\n\n var drawTasks = function drawTasks(diagram, tasks, verticalPos) {\n var lastSection = '';\n var sectionVHeight = conf.height * 2 + conf.diagramMarginY;\n var taskPos = verticalPos + sectionVHeight;\n var sectionNumber = 0;\n var fill = '#CCC';\n var colour = 'black';\n var num = 0; // Draw the tasks\n\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n\n if (lastSection !== task.section) {\n fill = fills[sectionNumber % fills.length];\n num = sectionNumber % fills.length;\n colour = textColours[sectionNumber % textColours.length];\n var section = {\n x: i * conf.taskMargin + i * conf.width + LEFT_MARGIN,\n y: 50,\n text: task.section,\n fill: fill,\n num: num,\n colour: colour\n };\n\n _svgDraw__WEBPACK_IMPORTED_MODULE_3__[\"default\"].drawSection(diagram, section, conf);\n\n lastSection = task.section;\n sectionNumber++;\n } // Collect the actors involved in the task\n\n\n var taskActors = task.people.reduce(function (acc, actorName) {\n if (actors[actorName]) {\n acc[actorName] = actors[actorName];\n }\n\n return acc;\n }, {}); // Add some rendering data to the object\n\n task.x = i * conf.taskMargin + i * conf.width + LEFT_MARGIN;\n task.y = taskPos;\n task.width = conf.diagramMarginX;\n task.height = conf.diagramMarginY;\n task.colour = colour;\n task.fill = fill;\n task.num = num;\n task.actors = taskActors; // Draw the box with the attached line\n\n _svgDraw__WEBPACK_IMPORTED_MODULE_3__[\"default\"].drawTask(diagram, task, conf);\n\n bounds.insert(task.x, task.y, task.x + task.width + conf.taskMargin, 300 + 5 * 30); // stopy is the length of the descenders.\n }\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n setConf: setConf,\n draw: draw\n };\n /***/\n },\n\n /***/\n \"./src/diagrams/user-journey/parser/journey.jison\":\n /*!********************************************************!*\\\n !*** ./src/diagrams/user-journey/parser/journey.jison ***!\n \\********************************************************/\n\n /*! no static exports found */\n\n /***/\n function srcDiagramsUserJourneyParserJourneyJison(module, exports, __webpack_require__) {\n /* WEBPACK VAR INJECTION */\n (function (process, module) {\n /* parser generated by jison 0.4.18 */\n\n /*\n Returns a Parser object of the following structure:\n \n Parser: {\n yy: {}\n }\n \n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n \n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n \n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n \n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n \n \n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n \n \n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n */\n var parser = function () {\n var o = function o(k, v, _o10, l) {\n for (_o10 = _o10 || {}, l = k.length; l--; _o10[k[l]] = v) {\n ;\n }\n\n return _o10;\n },\n $V0 = [1, 2],\n $V1 = [1, 5],\n $V2 = [6, 9, 11, 17, 18, 19, 21],\n $V3 = [1, 15],\n $V4 = [1, 16],\n $V5 = [1, 17],\n $V6 = [1, 21],\n $V7 = [4, 6, 9, 11, 17, 18, 19, 21];\n\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n \"error\": 2,\n \"start\": 3,\n \"journey\": 4,\n \"document\": 5,\n \"EOF\": 6,\n \"directive\": 7,\n \"line\": 8,\n \"SPACE\": 9,\n \"statement\": 10,\n \"NEWLINE\": 11,\n \"openDirective\": 12,\n \"typeDirective\": 13,\n \"closeDirective\": 14,\n \":\": 15,\n \"argDirective\": 16,\n \"title\": 17,\n \"section\": 18,\n \"taskName\": 19,\n \"taskData\": 20,\n \"open_directive\": 21,\n \"type_directive\": 22,\n \"arg_directive\": 23,\n \"close_directive\": 24,\n \"$accept\": 0,\n \"$end\": 1\n },\n terminals_: {\n 2: \"error\",\n 4: \"journey\",\n 6: \"EOF\",\n 9: \"SPACE\",\n 11: \"NEWLINE\",\n 15: \":\",\n 17: \"title\",\n 18: \"section\",\n 19: \"taskName\",\n 20: \"taskData\",\n 21: \"open_directive\",\n 22: \"type_directive\",\n 23: \"arg_directive\",\n 24: \"close_directive\"\n },\n productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 1], [10, 2], [10, 1], [12, 1], [13, 1], [16, 1], [14, 1]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate\n /* action[1] */\n , $$\n /* vstack */\n , _$\n /* lstack */\n ) {\n /* this == yyval */\n var $0 = $$.length - 1;\n\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n\n case 3:\n this.$ = [];\n break;\n\n case 4:\n $$[$0 - 1].push($$[$0]);\n this.$ = $$[$0 - 1];\n break;\n\n case 5:\n case 6:\n this.$ = $$[$0];\n break;\n\n case 7:\n case 8:\n this.$ = [];\n break;\n\n case 11:\n yy.setTitle($$[$0].substr(6));\n this.$ = $$[$0].substr(6);\n break;\n\n case 12:\n yy.addSection($$[$0].substr(8));\n this.$ = $$[$0].substr(8);\n break;\n\n case 13:\n yy.addTask($$[$0 - 1], $$[$0]);\n this.$ = 'task';\n break;\n\n case 15:\n yy.parseDirective('%%{', 'open_directive');\n break;\n\n case 16:\n yy.parseDirective($$[$0], 'type_directive');\n break;\n\n case 17:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"');\n yy.parseDirective($$[$0], 'arg_directive');\n break;\n\n case 18:\n yy.parseDirective('}%%', 'close_directive', 'journey');\n break;\n }\n },\n table: [{\n 3: 1,\n 4: $V0,\n 7: 3,\n 12: 4,\n 21: $V1\n }, {\n 1: [3]\n }, o($V2, [2, 3], {\n 5: 6\n }), {\n 3: 7,\n 4: $V0,\n 7: 3,\n 12: 4,\n 21: $V1\n }, {\n 13: 8,\n 22: [1, 9]\n }, {\n 22: [2, 15]\n }, {\n 6: [1, 10],\n 7: 18,\n 8: 11,\n 9: [1, 12],\n 10: 13,\n 11: [1, 14],\n 12: 4,\n 17: $V3,\n 18: $V4,\n 19: $V5,\n 21: $V1\n }, {\n 1: [2, 2]\n }, {\n 14: 19,\n 15: [1, 20],\n 24: $V6\n }, o([15, 24], [2, 16]), o($V2, [2, 8], {\n 1: [2, 1]\n }), o($V2, [2, 4]), {\n 7: 18,\n 10: 22,\n 12: 4,\n 17: $V3,\n 18: $V4,\n 19: $V5,\n 21: $V1\n }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 12]), {\n 20: [1, 23]\n }, o($V2, [2, 14]), {\n 11: [1, 24]\n }, {\n 16: 25,\n 23: [1, 26]\n }, {\n 11: [2, 18]\n }, o($V2, [2, 5]), o($V2, [2, 13]), o($V7, [2, 9]), {\n 14: 27,\n 24: $V6\n }, {\n 24: [2, 17]\n }, {\n 11: [1, 28]\n }, o($V7, [2, 10])],\n defaultActions: {\n 5: [2, 15],\n 7: [2, 2],\n 21: [2, 18],\n 26: [2, 17]\n },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n tstack = [],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = {\n yy: {}\n };\n\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n\n token = self.symbols_[token] || token;\n }\n\n return token;\n }\n\n var symbol,\n preErrorSymbol,\n state,\n action,\n a,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n\n while (true) {\n state = stack[stack.length - 1];\n\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n\n action = table[state] && table[state][symbol];\n }\n\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n\n break;\n\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n\n r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\n if (typeof r !== 'undefined') {\n return r;\n }\n\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n\n case 3:\n return true;\n }\n }\n\n return true;\n }\n };\n /* generated by jison-lex 0.3.4 */\n\n var lexer = function () {\n var lexer = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function setInput(input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function input() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function unput(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len;\n\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function more() {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function reject() {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n\n return this;\n },\n // retain first n characters of the match\n less: function less(n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function pastInput() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function upcomingInput() {\n var next = this.match;\n\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function showPosition() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function test_match(match, indexed_rule) {\n var token, lines, backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\n if (lines) {\n this.yylineno += lines.length;\n }\n\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\n if (this.done && this._input) {\n this.done = false;\n }\n\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n\n return false;\n },\n // return next match in input\n next: function next() {\n if (this.done) {\n return this.EOF;\n }\n\n if (!this._input) {\n this.done = true;\n }\n\n var token, match, tempMatch, index;\n\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n\n var rules = this._currentRules();\n\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n\n if (match) {\n token = this.test_match(match, rules[index]);\n\n if (token !== false) {\n return token;\n } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\n\n return false;\n }\n\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {\n \"case-insensitive\": true\n },\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n var YYSTATE = YY_START;\n\n switch ($avoiding_name_collisions) {\n case 0:\n this.begin('open_directive');\n return 21;\n break;\n\n case 1:\n this.begin('type_directive');\n return 22;\n break;\n\n case 2:\n this.popState();\n this.begin('arg_directive');\n return 15;\n break;\n\n case 3:\n this.popState();\n this.popState();\n return 24;\n break;\n\n case 4:\n return 23;\n break;\n\n case 5:\n /* skip comments */\n break;\n\n case 6:\n /* skip comments */\n break;\n\n case 7:\n return 11;\n break;\n\n case 8:\n /* skip whitespace */\n break;\n\n case 9:\n /* skip comments */\n break;\n\n case 10:\n return 4;\n break;\n\n case 11:\n return 17;\n break;\n\n case 12:\n return 18;\n break;\n\n case 13:\n return 19;\n break;\n\n case 14:\n return 20;\n break;\n\n case 15:\n return 15;\n break;\n\n case 16:\n return 6;\n break;\n\n case 17:\n return 'INVALID';\n break;\n }\n },\n rules: [/^(?:%%\\{)/i, /^(?:((?:(?!\\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\\}%%)/i, /^(?:((?:(?!\\}%%).|\\n)*))/i, /^(?:%(?!\\{)[^\\n]*)/i, /^(?:[^\\}]%%[^\\n]*)/i, /^(?:[\\n]+)/i, /^(?:\\s+)/i, /^(?:#[^\\n]*)/i, /^(?:journey\\b)/i, /^(?:title\\s[^#\\n;]+)/i, /^(?:section\\s[^#:\\n;]+)/i, /^(?:[^#:\\n;]+)/i, /^(?::[^#\\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],\n conditions: {\n \"open_directive\": {\n \"rules\": [1],\n \"inclusive\": false\n },\n \"type_directive\": {\n \"rules\": [2, 3],\n \"inclusive\": false\n },\n \"arg_directive\": {\n \"rules\": [3, 4],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n\n parser.lexer = lexer;\n\n function Parser() {\n this.yy = {};\n }\n\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n if (true) {\n exports.parser = parser;\n exports.Parser = parser.Parser;\n\n exports.parse = function () {\n return parser.parse.apply(parser, arguments);\n };\n\n exports.main = function commonjsMain(args) {\n if (!args[1]) {\n console.log('Usage: ' + args[0] + ' FILE');\n process.exit(1);\n }\n\n var source = __webpack_require__(\n /*! fs */\n \"./node_modules/node-libs-browser/mock/empty.js\").readFileSync(__webpack_require__(\n /*! path */\n \"./node_modules/path-browserify/index.js\").normalize(args[1]), \"utf8\");\n\n return exports.parser.parse(source);\n };\n\n if (true && __webpack_require__.c[__webpack_require__.s] === module) {\n exports.main(process.argv.slice(1));\n }\n }\n /* WEBPACK VAR INJECTION */\n\n }).call(this, __webpack_require__(\n /*! ./../../../../node_modules/process/browser.js */\n \"./node_modules/process/browser.js\"), __webpack_require__(\n /*! ./../../../../node_modules/webpack/buildin/module.js */\n \"./node_modules/webpack/buildin/module.js\")(module));\n /***/\n },\n\n /***/\n \"./src/diagrams/user-journey/styles.js\":\n /*!*********************************************!*\\\n !*** ./src/diagrams/user-journey/styles.js ***!\n \\*********************************************/\n\n /*! exports provided: default */\n\n /***/\n function srcDiagramsUserJourneyStylesJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n\n var getStyles = function getStyles(options) {\n return \".label {\\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\\n font-family: var(--mermaid-font-family);\\n color: \".concat(options.textColor, \";\\n }\\n .mouth {\\n stroke: #666;\\n }\\n\\n line {\\n stroke: \").concat(options.textColor, \"\\n }\\n\\n .legend {\\n fill: \").concat(options.textColor, \";\\n }\\n\\n .label text {\\n fill: #333;\\n }\\n .label {\\n color: \").concat(options.textColor, \"\\n }\\n\\n .face {\\n fill: #FFF8DC;\\n stroke: #999;\\n }\\n\\n .node rect,\\n .node circle,\\n .node ellipse,\\n .node polygon,\\n .node path {\\n fill: \").concat(options.mainBkg, \";\\n stroke: \").concat(options.nodeBorder, \";\\n stroke-width: 1px;\\n }\\n\\n .node .label {\\n text-align: center;\\n }\\n .node.clickable {\\n cursor: pointer;\\n }\\n\\n .arrowheadPath {\\n fill: \").concat(options.arrowheadColor, \";\\n }\\n\\n .edgePath .path {\\n stroke: \").concat(options.lineColor, \";\\n stroke-width: 1.5px;\\n }\\n\\n .flowchart-link {\\n stroke: \").concat(options.lineColor, \";\\n fill: none;\\n }\\n\\n .edgeLabel {\\n background-color: \").concat(options.edgeLabelBackground, \";\\n rect {\\n opacity: 0.5;\\n }\\n text-align: center;\\n }\\n\\n .cluster rect {\\n }\\n\\n .cluster text {\\n fill: \").concat(options.titleColor, \";\\n }\\n\\n div.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\\n font-family: var(--mermaid-font-family);\\n font-size: 12px;\\n background: \").concat(options.tertiaryColor, \";\\n border: 1px solid \").concat(options.border2, \";\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100;\\n }\\n\\n .task-type-0, .section-type-0 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType0) : '', \";\\n }\\n .task-type-1, .section-type-1 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType1) : '', \";\\n }\\n .task-type-2, .section-type-2 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType2) : '', \";\\n }\\n .task-type-3, .section-type-3 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType3) : '', \";\\n }\\n .task-type-4, .section-type-4 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType4) : '', \";\\n }\\n .task-type-5, .section-type-5 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType5) : '', \";\\n }\\n .task-type-6, .section-type-6 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType6) : '', \";\\n }\\n .task-type-7, .section-type-7 {\\n \").concat(options.fillType0 ? \"fill: \".concat(options.fillType7) : '', \";\\n }\\n\");\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = getStyles;\n /***/\n },\n\n /***/\n \"./src/diagrams/user-journey/svgDraw.js\":\n /*!**********************************************!*\\\n !*** ./src/diagrams/user-journey/svgDraw.js ***!\n \\**********************************************/\n\n /*! exports provided: drawRect, drawFace, drawCircle, drawText, drawLabel, drawSection, drawTask, drawBackgroundRect, getTextObj, getNoteRect, default */\n\n /***/\n function srcDiagramsUserJourneySvgDrawJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawRect\", function () {\n return drawRect;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawFace\", function () {\n return drawFace;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawCircle\", function () {\n return drawCircle;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawText\", function () {\n return drawText;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawLabel\", function () {\n return drawLabel;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawSection\", function () {\n return drawSection;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawTask\", function () {\n return drawTask;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawBackgroundRect\", function () {\n return drawBackgroundRect;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getTextObj\", function () {\n return getTextObj;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getNoteRect\", function () {\n return getNoteRect;\n });\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__);\n\n var drawRect = function drawRect(elem, rectData) {\n var rectElem = elem.append('rect');\n rectElem.attr('x', rectData.x);\n rectElem.attr('y', rectData.y);\n rectElem.attr('fill', rectData.fill);\n rectElem.attr('stroke', rectData.stroke);\n rectElem.attr('width', rectData.width);\n rectElem.attr('height', rectData.height);\n rectElem.attr('rx', rectData.rx);\n rectElem.attr('ry', rectData.ry);\n\n if (typeof rectData[\"class\"] !== 'undefined') {\n rectElem.attr('class', rectData[\"class\"]);\n }\n\n return rectElem;\n };\n\n var drawFace = function drawFace(element, faceData) {\n var radius = 15;\n var circleElement = element.append('circle').attr('cx', faceData.cx).attr('cy', faceData.cy).attr('class', 'face').attr('r', radius).attr('stroke-width', 2).attr('overflow', 'visible');\n var face = element.append('g'); //left eye\n\n face.append('circle').attr('cx', faceData.cx - radius / 3).attr('cy', faceData.cy - radius / 3).attr('r', 1.5).attr('stroke-width', 2).attr('fill', '#666').attr('stroke', '#666'); //right eye\n\n face.append('circle').attr('cx', faceData.cx + radius / 3).attr('cy', faceData.cy - radius / 3).attr('r', 1.5).attr('stroke-width', 2).attr('fill', '#666').attr('stroke', '#666');\n\n function smile(face) {\n var arc = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"arc\"])().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); //mouth\n\n face.append('path').attr('class', 'mouth').attr('d', arc).attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')');\n }\n\n function sad(face) {\n var arc = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"arc\"])().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2); //mouth\n\n face.append('path').attr('class', 'mouth').attr('d', arc).attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')');\n }\n\n function ambivalent(face) {\n face.append('line').attr('class', 'mouth').attr('stroke', 2).attr('x1', faceData.cx - 5).attr('y1', faceData.cy + 7).attr('x2', faceData.cx + 5).attr('y2', faceData.cy + 7).attr('class', 'mouth').attr('stroke-width', '1px').attr('stroke', '#666');\n }\n\n if (faceData.score > 3) {\n smile(face);\n } else if (faceData.score < 3) {\n sad(face);\n } else {\n ambivalent(face);\n }\n\n return circleElement;\n };\n\n var drawCircle = function drawCircle(element, circleData) {\n var circleElement = element.append('circle');\n circleElement.attr('cx', circleData.cx);\n circleElement.attr('cy', circleData.cy);\n circleElement.attr('fill', circleData.fill);\n circleElement.attr('stroke', circleData.stroke);\n circleElement.attr('r', circleData.r);\n\n if (typeof circleElement[\"class\"] !== 'undefined') {\n circleElement.attr('class', circleElement[\"class\"]);\n }\n\n if (typeof circleData.title !== 'undefined') {\n circleElement.append('title').text(circleData.title);\n }\n\n return circleElement;\n };\n\n var drawText = function drawText(elem, textData) {\n // Remove and ignore br:s\n var nText = textData.text.replace(/
/gi, ' ');\n var textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.attr('class', 'legend');\n textElem.style('text-anchor', textData.anchor);\n\n if (typeof textData[\"class\"] !== 'undefined') {\n textElem.attr('class', textData[\"class\"]);\n }\n\n var span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.text(nText);\n return textElem;\n };\n\n var drawLabel = function drawLabel(elem, txtObject) {\n function genPoints(x, y, width, height, cut) {\n return x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height);\n }\n\n var polygon = elem.append('polygon');\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n polygon.attr('class', 'labelBox');\n txtObject.y = txtObject.y + txtObject.labelMargin;\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n drawText(elem, txtObject);\n };\n\n var drawSection = function drawSection(elem, section, conf) {\n var g = elem.append('g');\n var rect = getNoteRect();\n rect.x = section.x;\n rect.y = section.y;\n rect.fill = section.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect[\"class\"] = 'journey-section section-type-' + section.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n\n _drawTextCandidateFunc(conf)(section.text, g, rect.x, rect.y, rect.width, rect.height, {\n \"class\": 'journey-section section-type-' + section.num\n }, conf, section.colour);\n };\n\n var taskCount = -1;\n /**\n * Draws an actor in the diagram with the attaced line\n * @param elem The HTML element\n * @param task The task to render\n * @param conf The global configuration\n */\n\n var drawTask = function drawTask(elem, task, conf) {\n var center = task.x + conf.width / 2;\n var g = elem.append('g');\n taskCount++;\n var maxHeight = 300 + 5 * 30;\n g.append('line').attr('id', 'task' + taskCount).attr('x1', center).attr('y1', task.y).attr('x2', center).attr('y2', maxHeight).attr('class', 'task-line').attr('stroke-width', '1px').attr('stroke-dasharray', '4 2').attr('stroke', '#666');\n drawFace(g, {\n cx: center,\n cy: 300 + (5 - task.score) * 30,\n score: task.score\n });\n var rect = getNoteRect();\n rect.x = task.x;\n rect.y = task.y;\n rect.fill = task.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect[\"class\"] = 'task task-type-' + task.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n var xPos = task.x + 14;\n task.people.forEach(function (person) {\n var colour = task.actors[person];\n var circle = {\n cx: xPos,\n cy: task.y,\n r: 7,\n fill: colour,\n stroke: '#000',\n title: person\n };\n drawCircle(g, circle);\n xPos += 10;\n });\n\n _drawTextCandidateFunc(conf)(task.task, g, rect.x, rect.y, rect.width, rect.height, {\n \"class\": 'task'\n }, conf, task.colour);\n };\n /**\n * Draws a background rectangle\n * @param elem The html element\n * @param bounds The bounds of the drawing\n */\n\n\n var drawBackgroundRect = function drawBackgroundRect(elem, bounds) {\n var rectElem = drawRect(elem, {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n \"class\": 'rect'\n });\n rectElem.lower();\n };\n\n var getTextObj = function getTextObj() {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n 'text-anchor': 'start',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0\n };\n };\n\n var getNoteRect = function getNoteRect() {\n return {\n x: 0,\n y: 0,\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0\n };\n };\n\n var _drawTextCandidateFunc = function () {\n function byText(content, g, x, y, width, height, textAttrs, colour) {\n var text = g.append('text').attr('x', x + width / 2).attr('y', y + height / 2 + 5).style('font-color', colour).style('text-anchor', 'middle').text(content);\n\n _setTextAttrs(text, textAttrs);\n }\n\n function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n var taskFontSize = conf.taskFontSize,\n taskFontFamily = conf.taskFontFamily;\n var lines = content.split(/
/gi);\n\n for (var i = 0; i < lines.length; i++) {\n var dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2;\n var text = g.append('text').attr('x', x + width / 2).attr('y', y).attr('fill', colour).style('text-anchor', 'middle').style('font-size', taskFontSize).style('font-family', taskFontFamily);\n text.append('tspan').attr('x', x + width / 2).attr('dy', dy).text(lines[i]);\n text.attr('y', y + height / 2.0).attr('dominant-baseline', 'central').attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n var body = g.append('switch');\n var f = body.append('foreignObject').attr('x', x).attr('y', y).attr('width', width).attr('height', height).attr('position', 'fixed');\n var text = f.append('div').style('display', 'table').style('height', '100%').style('width', '100%');\n text.append('div').attr('class', 'label').style('display', 'table-cell').style('text-align', 'center').style('vertical-align', 'middle') // .style('color', colour)\n .text(content);\n byTspan(content, body, x, y, width, height, textAttrs, conf);\n\n _setTextAttrs(text, textAttrs);\n }\n\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (var key in fromTextAttrsDict) {\n if (key in fromTextAttrsDict) {\n // eslint-disable-line\n // noinspection JSUnfilteredForInLoop\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n }();\n\n var initGraphics = function initGraphics(graphics) {\n graphics.append('defs').append('marker').attr('id', 'arrowhead').attr('refX', 5).attr('refY', 2).attr('markerWidth', 6).attr('markerHeight', 4).attr('orient', 'auto').append('path').attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n drawRect: drawRect,\n drawCircle: drawCircle,\n drawSection: drawSection,\n drawText: drawText,\n drawLabel: drawLabel,\n drawTask: drawTask,\n drawBackgroundRect: drawBackgroundRect,\n getTextObj: getTextObj,\n getNoteRect: getNoteRect,\n initGraphics: initGraphics\n };\n /***/\n },\n\n /***/\n \"./src/errorRenderer.js\":\n /*!******************************!*\\\n !*** ./src/errorRenderer.js ***!\n \\******************************/\n\n /*! exports provided: setConf, draw, default */\n\n /***/\n function srcErrorRendererJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setConf\", function () {\n return setConf;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"draw\", function () {\n return draw;\n });\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./logger */\n \"./src/logger.js\");\n /**\n * Created by knut on 14-12-11.\n */\n\n\n var conf = {};\n\n var setConf = function setConf(cnf) {\n var keys = Object.keys(cnf);\n keys.forEach(function (key) {\n conf[key] = cnf[key];\n });\n };\n /**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\n\n\n var draw = function draw(id, ver) {\n try {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Renering svg for syntax error\\n');\n\n var svg = Object(d3__WEBPACK_IMPORTED_MODULE_0__[\"select\"])('#' + id);\n var g = svg.append('g');\n g.append('path').attr('class', 'error-icon').attr('d', 'm411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z');\n g.append('path').attr('class', 'error-icon').attr('d', 'm459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z');\n g.append('path').attr('class', 'error-icon').attr('d', 'm340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z');\n g.append('path').attr('class', 'error-icon').attr('d', 'm400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z');\n g.append('path').attr('class', 'error-icon').attr('d', 'm496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z');\n g.append('path').attr('class', 'error-icon').attr('d', 'm436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z');\n g.append('text') // text label for the x axis\n .attr('class', 'error-text').attr('x', 1240).attr('y', 250).attr('font-size', '150px').style('text-anchor', 'middle').text('Syntax error in graph');\n g.append('text') // text label for the x axis\n .attr('class', 'error-text').attr('x', 1050).attr('y', 400).attr('font-size', '100px').style('text-anchor', 'middle').text('mermaid version ' + ver);\n svg.attr('height', 100);\n svg.attr('width', 400);\n svg.attr('viewBox', '768 0 512 512');\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error('Error while rendering info diagram');\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].error(e.message);\n }\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n setConf: setConf,\n draw: draw\n };\n /***/\n },\n\n /***/\n \"./src/logger.js\":\n /*!***********************!*\\\n !*** ./src/logger.js ***!\n \\***********************/\n\n /*! exports provided: LEVELS, logger, setLogLevel */\n\n /***/\n function srcLoggerJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"LEVELS\", function () {\n return LEVELS;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"logger\", function () {\n return logger;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"setLogLevel\", function () {\n return setLogLevel;\n });\n /* harmony import */\n\n\n var moment_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! moment-mini */\n \"moment-mini\");\n /* harmony import */\n\n\n var moment_mini__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_mini__WEBPACK_IMPORTED_MODULE_0__); //\n\n\n var LEVELS = {\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n };\n var logger = {\n debug: function debug() {},\n info: function info() {},\n warn: function warn() {},\n error: function error() {},\n fatal: function fatal() {}\n };\n\n var setLogLevel = function setLogLevel() {\n var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'fatal';\n\n if (isNaN(level)) {\n level = level.toLowerCase();\n\n if (LEVELS[level] !== undefined) {\n level = LEVELS[level];\n }\n }\n\n logger.trace = function () {};\n\n logger.debug = function () {};\n\n logger.info = function () {};\n\n logger.warn = function () {};\n\n logger.error = function () {};\n\n logger.fatal = function () {};\n\n if (level <= LEVELS.fatal) {\n logger.fatal = console.error ? console.error.bind(console, format('FATAL'), 'color: orange') : console.log.bind(console, '\\x1b[35m', format('FATAL'));\n }\n\n if (level <= LEVELS.error) {\n logger.error = console.error ? console.error.bind(console, format('ERROR'), 'color: orange') : console.log.bind(console, '\\x1b[31m', format('ERROR'));\n }\n\n if (level <= LEVELS.warn) {\n logger.warn = console.warn ? console.warn.bind(console, format('WARN'), 'color: orange') : console.log.bind(console, \"\\x1B[33m\", format('WARN'));\n }\n\n if (level <= LEVELS.info) {\n logger.info = console.info ? // ? console.info.bind(console, '\\x1b[34m', format('INFO'), 'color: blue')\n console.info.bind(console, format('INFO'), 'color: lightblue') : console.log.bind(console, '\\x1b[34m', format('INFO'));\n }\n\n if (level <= LEVELS.debug) {\n logger.debug = console.debug ? console.debug.bind(console, format('DEBUG'), 'color: lightgreen') : console.log.bind(console, '\\x1b[32m', format('DEBUG'));\n }\n };\n\n var format = function format(level) {\n var time = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()().format('ss.SSS');\n return \"%c\".concat(time, \" : \").concat(level, \" : \");\n };\n /***/\n\n },\n\n /***/\n \"./src/mermaid.js\":\n /*!************************!*\\\n !*** ./src/mermaid.js ***!\n \\************************/\n\n /*! exports provided: default */\n\n /***/\n function srcMermaidJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony import */\n\n\n var entity_decode_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! entity-decode/browser */\n \"entity-decode/browser\");\n /* harmony import */\n\n\n var entity_decode_browser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(entity_decode_browser__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./logger */\n \"./src/logger.js\");\n /* harmony import */\n\n\n var _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./mermaidAPI */\n \"./src/mermaidAPI.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./utils */\n \"./src/utils.js\");\n /**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render\n * the diagrams to svg code.\n */\n // import { decode } from 'he';\n\n /**\n * ## init\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found elements with the\n * attribute already set. This way the init function can be triggered several times.\n *\n * Optionally, `init` can accept in the second argument one of the following:\n * - a DOM Node\n * - an array of DOM nodes (as would come from a jQuery selector)\n * - a W3C selector, a la `.mermaid`\n *\n * ```mermaid\n * graph LR;\n * a(Find elements)-->b{Processed}\n * b-->|Yes|c(Leave element)\n * b-->|No |d(Transform)\n * ```\n * Renders the mermaid diagrams\n * @param nodes a css selector or an array of nodes\n */\n\n\n var init = function init() {\n var _this = this;\n\n var conf = _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getConfig(); // console.log('Starting rendering diagrams (init) - mermaid.init', conf);\n\n\n var nodes;\n\n if (arguments.length >= 2) {\n /*! sequence config was passed as #1 */\n if (typeof arguments[0] !== 'undefined') {\n mermaid.sequenceConfig = arguments[0];\n }\n\n nodes = arguments[1];\n } else {\n nodes = arguments[0];\n } // if last argument is a function this is the callback function\n\n\n var callback;\n\n if (typeof arguments[arguments.length - 1] === 'function') {\n callback = arguments[arguments.length - 1];\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Callback function found');\n } else {\n if (typeof conf.mermaid !== 'undefined') {\n if (typeof conf.mermaid.callback === 'function') {\n callback = conf.mermaid.callback;\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Callback function found');\n } else {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('No Callback function found');\n }\n }\n }\n\n nodes = nodes === undefined ? document.querySelectorAll('.mermaid') : typeof nodes === 'string' ? document.querySelectorAll(nodes) : nodes instanceof window.Node ? [nodes] : nodes; // Last case - sequence config was passed pick next\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Start On Load before: ' + mermaid.startOnLoad);\n\n if (typeof mermaid.startOnLoad !== 'undefined') {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Start On Load inner: ' + mermaid.startOnLoad);\n\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].updateSiteConfig({\n startOnLoad: mermaid.startOnLoad\n });\n }\n\n if (typeof mermaid.ganttConfig !== 'undefined') {\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].updateSiteConfig({\n gantt: mermaid.ganttConfig\n });\n }\n\n var nextId = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initIdGeneratior(conf.deterministicIds, conf.deterministicIDSeed).next;\n\n var txt;\n\n var _loop = function _loop(i) {\n var element = nodes[i];\n /*! Check if previously processed */\n\n if (!element.getAttribute('data-processed')) {\n element.setAttribute('data-processed', true);\n } else {\n return \"continue\";\n }\n\n var id = \"mermaid-\".concat(nextId()); // Fetch the graph definition including tags\n\n txt = element.innerHTML; // transforms the html to pure text\n\n txt = entity_decode_browser__WEBPACK_IMPORTED_MODULE_0___default()(txt).trim().replace(/
/gi, '
');\n\n var init = _utils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].detectInit(txt);\n\n if (init) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('Detected early reinit: ', init);\n }\n\n try {\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].render(id, txt, function (svgCode, bindFunctions) {\n element.innerHTML = svgCode;\n\n if (typeof callback !== 'undefined') {\n callback(id);\n }\n\n if (bindFunctions) bindFunctions(element);\n }, element);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].warn('Syntax Error rendering');\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].warn(e);\n\n if (_this.parseError) {\n _this.parseError(e);\n }\n }\n };\n\n for (var i = 0; i < nodes.length; i++) {\n var _ret = _loop(i);\n\n if (_ret === \"continue\") continue;\n }\n };\n\n var initialize = function initialize(config) {\n // mermaidAPI.reset();\n if (typeof config.mermaid !== 'undefined') {\n if (typeof config.mermaid.startOnLoad !== 'undefined') {\n mermaid.startOnLoad = config.mermaid.startOnLoad;\n }\n\n if (typeof config.mermaid.htmlLabels !== 'undefined') {\n mermaid.htmlLabels = config.mermaid.htmlLabels;\n }\n }\n\n _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].initialize(config); // mermaidAPI.reset();\n\n };\n /**\n * ##contentLoaded\n * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and\n * calls init for rendering the mermaid diagrams on the page.\n */\n\n\n var contentLoaded = function contentLoaded() {\n var config;\n\n if (mermaid.startOnLoad) {\n // No config found, do check API config\n config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getConfig();\n\n if (config.startOnLoad) {\n mermaid.init();\n }\n } else {\n if (typeof mermaid.startOnLoad === 'undefined') {\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"logger\"].debug('In start, no config');\n\n config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getConfig();\n\n if (config.startOnLoad) {\n mermaid.init();\n }\n }\n }\n };\n\n if (typeof document !== 'undefined') {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener('load', function () {\n contentLoaded();\n }, false);\n }\n\n var mermaid = {\n startOnLoad: true,\n htmlLabels: true,\n mermaidAPI: _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n parse: _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].parse,\n render: _mermaidAPI__WEBPACK_IMPORTED_MODULE_2__[\"default\"].render,\n init: init,\n initialize: initialize,\n contentLoaded: contentLoaded\n };\n /* harmony default export */\n\n __webpack_exports__[\"default\"] = mermaid;\n /***/\n },\n\n /***/\n \"./src/mermaidAPI.js\":\n /*!***************************!*\\\n !*** ./src/mermaidAPI.js ***!\n \\***************************/\n\n /*! exports provided: encodeEntities, decodeEntities, default */\n\n /***/\n function srcMermaidAPIJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"encodeEntities\", function () {\n return encodeEntities;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"decodeEntities\", function () {\n return decodeEntities;\n });\n /* harmony import */\n\n\n var stylis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! stylis */\n \"stylis\");\n /* harmony import */\n\n\n var stylis__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(stylis__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_1__);\n /* harmony import */\n\n\n var _package_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ../package.json */\n \"./package.json\");\n\n var _package_json__WEBPACK_IMPORTED_MODULE_2___namespace = /*#__PURE__*/__webpack_require__.t(\n /*! ../package.json */\n \"./package.json\", 1);\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./logger */\n \"./src/logger.js\");\n /* harmony import */\n\n\n var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ./utils */\n \"./src/utils.js\");\n /* harmony import */\n\n\n var _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n /*! ./diagrams/flowchart/flowRenderer */\n \"./src/diagrams/flowchart/flowRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_flowchart_flowRenderer_v2__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n /*! ./diagrams/flowchart/flowRenderer-v2 */\n \"./src/diagrams/flowchart/flowRenderer-v2.js\");\n /* harmony import */\n\n\n var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n /*! ./diagrams/flowchart/parser/flow */\n \"./src/diagrams/flowchart/parser/flow.jison\");\n /* harmony import */\n\n\n var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_7__);\n /* harmony import */\n\n\n var _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\n /*! ./diagrams/flowchart/flowDb */\n \"./src/diagrams/flowchart/flowDb.js\");\n /* harmony import */\n\n\n var _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\n /*! ./diagrams/sequence/sequenceRenderer */\n \"./src/diagrams/sequence/sequenceRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(\n /*! ./diagrams/sequence/parser/sequenceDiagram */\n \"./src/diagrams/sequence/parser/sequenceDiagram.jison\");\n /* harmony import */\n\n\n var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_10__);\n /* harmony import */\n\n\n var _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(\n /*! ./diagrams/sequence/sequenceDb */\n \"./src/diagrams/sequence/sequenceDb.js\");\n /* harmony import */\n\n\n var _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(\n /*! ./diagrams/gantt/ganttRenderer */\n \"./src/diagrams/gantt/ganttRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(\n /*! ./diagrams/gantt/parser/gantt */\n \"./src/diagrams/gantt/parser/gantt.jison\");\n /* harmony import */\n\n\n var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_13__);\n /* harmony import */\n\n\n var _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(\n /*! ./diagrams/gantt/ganttDb */\n \"./src/diagrams/gantt/ganttDb.js\");\n /* harmony import */\n\n\n var _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(\n /*! ./diagrams/class/classRenderer */\n \"./src/diagrams/class/classRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_class_classRenderer_v2__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(\n /*! ./diagrams/class/classRenderer-v2 */\n \"./src/diagrams/class/classRenderer-v2.js\");\n /* harmony import */\n\n\n var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(\n /*! ./diagrams/class/parser/classDiagram */\n \"./src/diagrams/class/parser/classDiagram.jison\");\n /* harmony import */\n\n\n var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_17__);\n /* harmony import */\n\n\n var _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(\n /*! ./diagrams/class/classDb */\n \"./src/diagrams/class/classDb.js\");\n /* harmony import */\n\n\n var _diagrams_state_stateRenderer__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(\n /*! ./diagrams/state/stateRenderer */\n \"./src/diagrams/state/stateRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_state_stateRenderer_v2__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(\n /*! ./diagrams/state/stateRenderer-v2 */\n \"./src/diagrams/state/stateRenderer-v2.js\");\n /* harmony import */\n\n\n var _diagrams_state_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(\n /*! ./diagrams/state/parser/stateDiagram */\n \"./src/diagrams/state/parser/stateDiagram.jison\");\n /* harmony import */\n\n\n var _diagrams_state_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_diagrams_state_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_21__);\n /* harmony import */\n\n\n var _diagrams_state_stateDb__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(\n /*! ./diagrams/state/stateDb */\n \"./src/diagrams/state/stateDb.js\");\n /* harmony import */\n\n\n var _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(\n /*! ./diagrams/git/gitGraphRenderer */\n \"./src/diagrams/git/gitGraphRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(\n /*! ./diagrams/git/parser/gitGraph */\n \"./src/diagrams/git/parser/gitGraph.jison\");\n /* harmony import */\n\n\n var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(_diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_24__);\n /* harmony import */\n\n\n var _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(\n /*! ./diagrams/git/gitGraphAst */\n \"./src/diagrams/git/gitGraphAst.js\");\n /* harmony import */\n\n\n var _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(\n /*! ./diagrams/info/infoRenderer */\n \"./src/diagrams/info/infoRenderer.js\");\n /* harmony import */\n\n\n var _errorRenderer__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(\n /*! ./errorRenderer */\n \"./src/errorRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(\n /*! ./diagrams/info/parser/info */\n \"./src/diagrams/info/parser/info.jison\");\n /* harmony import */\n\n\n var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(_diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_28__);\n /* harmony import */\n\n\n var _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(\n /*! ./diagrams/info/infoDb */\n \"./src/diagrams/info/infoDb.js\");\n /* harmony import */\n\n\n var _diagrams_pie_pieRenderer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(\n /*! ./diagrams/pie/pieRenderer */\n \"./src/diagrams/pie/pieRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_pie_parser_pie__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(\n /*! ./diagrams/pie/parser/pie */\n \"./src/diagrams/pie/parser/pie.jison\");\n /* harmony import */\n\n\n var _diagrams_pie_parser_pie__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(_diagrams_pie_parser_pie__WEBPACK_IMPORTED_MODULE_31__);\n /* harmony import */\n\n\n var _diagrams_pie_pieDb__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(\n /*! ./diagrams/pie/pieDb */\n \"./src/diagrams/pie/pieDb.js\");\n /* harmony import */\n\n\n var _diagrams_er_erDb__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(\n /*! ./diagrams/er/erDb */\n \"./src/diagrams/er/erDb.js\");\n /* harmony import */\n\n\n var _diagrams_er_parser_erDiagram__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(\n /*! ./diagrams/er/parser/erDiagram */\n \"./src/diagrams/er/parser/erDiagram.jison\");\n /* harmony import */\n\n\n var _diagrams_er_parser_erDiagram__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(_diagrams_er_parser_erDiagram__WEBPACK_IMPORTED_MODULE_34__);\n /* harmony import */\n\n\n var _diagrams_er_erRenderer__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(\n /*! ./diagrams/er/erRenderer */\n \"./src/diagrams/er/erRenderer.js\");\n /* harmony import */\n\n\n var _diagrams_user_journey_parser_journey__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(\n /*! ./diagrams/user-journey/parser/journey */\n \"./src/diagrams/user-journey/parser/journey.jison\");\n /* harmony import */\n\n\n var _diagrams_user_journey_parser_journey__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(_diagrams_user_journey_parser_journey__WEBPACK_IMPORTED_MODULE_36__);\n /* harmony import */\n\n\n var _diagrams_user_journey_journeyDb__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(\n /*! ./diagrams/user-journey/journeyDb */\n \"./src/diagrams/user-journey/journeyDb.js\");\n /* harmony import */\n\n\n var _diagrams_user_journey_journeyRenderer__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(\n /*! ./diagrams/user-journey/journeyRenderer */\n \"./src/diagrams/user-journey/journeyRenderer.js\");\n /* harmony import */\n\n\n var _config__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(\n /*! ./config */\n \"./src/config.js\");\n /* harmony import */\n\n\n var _styles__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(\n /*! ./styles */\n \"./src/styles.js\");\n /* harmony import */\n\n\n var _themes__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(\n /*! ./themes */\n \"./src/themes/index.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n /**\n *Edit this Page[![N|Solid](img/GitHub-Mark-32px.png)](https://github.com/mermaid-js/mermaid/blob/develop/src/mermaidAPI.js)\n *\n *This is the API to be used when optionally handling the integration with the web page, instead of using the default integration provided by mermaid.js.\n *\n *\n * The core of this api is the [**render**](Setup.md?id=render) function which, given a graph\n * definition as text, renders the graph/diagram and returns an svg element for the graph.\n *\n * It is is then up to the user of the API to make use of the svg, either insert it somewhere in the page or do something completely different.\n *\n * In addition to the render function, a number of behavioral configuration options are available.\n *\n * @name mermaidAPI\n */\n // import * as configApi from './config';\n // // , {\n // // setConfig,\n // // configApi.getConfig,\n // // configApi.updateSiteConfig,\n // // configApi.setSiteConfig,\n // // configApi.getSiteConfig,\n // // configApi.defaultConfig\n // // }\n\n\n function parse(text) {\n var graphInit = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].detectInit(text);\n\n if (graphInit) {\n reinitialize(graphInit);\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('reinit ', graphInit);\n }\n\n var graphType = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].detectType(text);\n\n var parser;\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Type ' + graphType);\n\n switch (graphType) {\n case 'git':\n parser = _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_24___default.a;\n parser.parser.yy = _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_25__[\"default\"];\n break;\n\n case 'flowchart':\n _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__[\"default\"].clear();\n\n parser = _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_7___default.a;\n parser.parser.yy = _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\n break;\n\n case 'flowchart-v2':\n _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__[\"default\"].clear();\n\n parser = _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_7___default.a;\n parser.parser.yy = _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\n break;\n\n case 'sequence':\n parser = _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_10___default.a;\n parser.parser.yy = _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n break;\n\n case 'gantt':\n parser = _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_13___default.a;\n parser.parser.yy = _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_14__[\"default\"];\n break;\n\n case 'class':\n parser = _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_17___default.a;\n parser.parser.yy = _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_18__[\"default\"];\n break;\n\n case 'classDiagram':\n parser = _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_17___default.a;\n parser.parser.yy = _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_18__[\"default\"];\n break;\n\n case 'state':\n parser = _diagrams_state_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_21___default.a;\n parser.parser.yy = _diagrams_state_stateDb__WEBPACK_IMPORTED_MODULE_22__[\"default\"];\n break;\n\n case 'stateDiagram':\n parser = _diagrams_state_parser_stateDiagram__WEBPACK_IMPORTED_MODULE_21___default.a;\n parser.parser.yy = _diagrams_state_stateDb__WEBPACK_IMPORTED_MODULE_22__[\"default\"];\n break;\n\n case 'info':\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('info info info');\n\n parser = _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_28___default.a;\n parser.parser.yy = _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_29__[\"default\"];\n break;\n\n case 'pie':\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('pie');\n\n parser = _diagrams_pie_parser_pie__WEBPACK_IMPORTED_MODULE_31___default.a;\n parser.parser.yy = _diagrams_pie_pieDb__WEBPACK_IMPORTED_MODULE_32__[\"default\"];\n break;\n\n case 'er':\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('er');\n\n parser = _diagrams_er_parser_erDiagram__WEBPACK_IMPORTED_MODULE_34___default.a;\n parser.parser.yy = _diagrams_er_erDb__WEBPACK_IMPORTED_MODULE_33__[\"default\"];\n break;\n\n case 'journey':\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Journey');\n\n parser = _diagrams_user_journey_parser_journey__WEBPACK_IMPORTED_MODULE_36___default.a;\n parser.parser.yy = _diagrams_user_journey_journeyDb__WEBPACK_IMPORTED_MODULE_37__[\"default\"];\n break;\n }\n\n parser.parser.yy.graphType = graphType;\n\n parser.parser.yy.parseError = function (str, hash) {\n var error = {\n str: str,\n hash: hash\n };\n throw error;\n };\n\n parser.parse(text);\n return parser;\n }\n\n var encodeEntities = function encodeEntities(text) {\n var txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, function (s) {\n var innerTxt = s.substring(0, s.length - 1);\n return innerTxt;\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s) {\n var innerTxt = s.substring(0, s.length - 1);\n return innerTxt;\n });\n txt = txt.replace(/#\\w+;/g, function (s) {\n var innerTxt = s.substring(1, s.length - 1);\n var isInt = /^\\+?\\d+$/.test(innerTxt);\n\n if (isInt) {\n return 'fl°°' + innerTxt + '¶ß';\n } else {\n return 'fl°' + innerTxt + '¶ß';\n }\n });\n return txt;\n };\n\n var decodeEntities = function decodeEntities(text) {\n var txt = text;\n txt = txt.replace(/fl°°/g, function () {\n return '';\n });\n txt = txt.replace(/fl°/g, function () {\n return '&';\n });\n txt = txt.replace(/¶ß/g, function () {\n return ';';\n });\n return txt;\n };\n /**\n * Function that renders an svg with a graph from a chart definition. Usage example below.\n *\n * ```js\n * mermaidAPI.initialize({\n * startOnLoad:true\n * });\n * $(function(){\n * const graphDefinition = 'graph TB\\na-->b';\n * const cb = function(svgGraph){\n * console.log(svgGraph);\n * };\n * mermaidAPI.render('id1',graphDefinition,cb);\n * });\n *```\n * @param id the id of the element to be rendered\n * @param _txt the graph definition\n * @param cb callback which is called after rendering is finished with the svg code as inparam.\n * @param container selector to element in which a div with the graph temporarily will be inserted. In one is\n * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is\n * completed.\n */\n\n\n var render = function render(id, _txt, cb, container) {\n _config__WEBPACK_IMPORTED_MODULE_39__[\"reset\"]();\n\n var txt = _txt;\n\n var graphInit = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].detectInit(txt);\n\n if (graphInit) {\n _config__WEBPACK_IMPORTED_MODULE_39__[\"addDirective\"](graphInit);\n } // else {\n // configApi.reset();\n // const siteConfig = configApi.getSiteConfig();\n // configApi.addDirective(siteConfig);\n // }\n // console.warn('Render fetching config');\n\n\n var cnf = _config__WEBPACK_IMPORTED_MODULE_39__[\"getConfig\"](); // console.warn('Render with config after adding new directives', cnf.sequence);\n // console.warn(\n // 'Render with config after adding new directives',\n // cnf.fontFamily,\n // cnf.themeVariables.fontFamily\n // );\n // Check the maximum allowed text size\n\n\n if (_txt.length > cnf.maxTextSize) {\n txt = 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa';\n }\n\n if (typeof container !== 'undefined') {\n container.innerHTML = '';\n Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])(container).append('div').attr('id', 'd' + id).attr('style', 'font-family: ' + cnf.fontFamily).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g');\n } else {\n var existingSvg = document.getElementById(id);\n\n if (existingSvg) {\n existingSvg.remove();\n }\n\n var _element = document.querySelector('#' + 'd' + id);\n\n if (_element) {\n _element.remove();\n }\n\n Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('body').append('div').attr('id', 'd' + id).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g');\n }\n\n window.txt = txt;\n txt = encodeEntities(txt);\n var element = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('#d' + id).node();\n\n var graphType = _utils__WEBPACK_IMPORTED_MODULE_4__[\"default\"].detectType(txt); // insert inline style into svg\n\n\n var svg = element.firstChild;\n var firstChild = svg.firstChild;\n var userStyles = ''; // user provided theme CSS\n\n if (cnf.themeCSS !== undefined) {\n userStyles += \"\\n\".concat(cnf.themeCSS);\n } // user provided theme CSS\n\n\n if (cnf.fontFamily !== undefined) {\n userStyles += \"\\n:root { --mermaid-font-family: \".concat(cnf.fontFamily, \"}\");\n } // user provided theme CSS\n\n\n if (cnf.altFontFamily !== undefined) {\n userStyles += \"\\n:root { --mermaid-alt-font-family: \".concat(cnf.altFontFamily, \"}\");\n } // classDef\n\n\n if (graphType === 'flowchart' || graphType === 'flowchart-v2' || graphType === 'graph') {\n var classes = _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__[\"default\"].getClasses(txt);\n\n for (var className in classes) {\n userStyles += \"\\n.\".concat(className, \" > * { \").concat(classes[className].styles.join(' !important; '), \" !important; }\");\n\n if (classes[className].textStyles) {\n userStyles += \"\\n.\".concat(className, \" tspan { \").concat(classes[className].textStyles.join(' !important; '), \" !important; }\");\n }\n }\n } // logger.warn(cnf.themeVariables);\n\n\n var stylis = new stylis__WEBPACK_IMPORTED_MODULE_0___default.a();\n var rules = stylis(\"#\".concat(id), Object(_styles__WEBPACK_IMPORTED_MODULE_40__[\"default\"])(graphType, userStyles, cnf.themeVariables));\n var style1 = document.createElement('style');\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild); // Verify that the generated svgs are ok before removing this\n // const style2 = document.createElement('style');\n // const cs = window.getComputedStyle(svg);\n // style2.innerHTML = `#d${id} * {\n // color: ${cs.color};\n // // font: ${cs.font};\n // // font-family: Arial;\n // // font-size: 24px;\n // }`;\n // svg.insertBefore(style2, firstChild);\n\n try {\n switch (graphType) {\n case 'git':\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_23__[\"default\"].setConf(cnf.git);\n\n _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_23__[\"default\"].draw(txt, id, false);\n\n break;\n\n case 'flowchart':\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__[\"default\"].setConf(cnf.flowchart);\n\n _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__[\"default\"].draw(txt, id, false);\n\n break;\n\n case 'flowchart-v2':\n cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_flowchart_flowRenderer_v2__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setConf(cnf.flowchart);\n\n _diagrams_flowchart_flowRenderer_v2__WEBPACK_IMPORTED_MODULE_6__[\"default\"].draw(txt, id, false);\n\n break;\n\n case 'sequence':\n cnf.sequence.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n if (cnf.sequenceDiagram) {\n // backwards compatibility\n _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setConf(Object.assign(cnf.sequence, cnf.sequenceDiagram));\n\n console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.');\n } else {\n _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setConf(cnf.sequence);\n }\n\n _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].draw(txt, id);\n\n break;\n\n case 'gantt':\n cnf.gantt.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_12__[\"default\"].setConf(cnf.gantt);\n\n _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_12__[\"default\"].draw(txt, id);\n\n break;\n\n case 'class':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setConf(cnf[\"class\"]);\n\n _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_15__[\"default\"].draw(txt, id);\n\n break;\n\n case 'classDiagram':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_class_classRenderer_v2__WEBPACK_IMPORTED_MODULE_16__[\"default\"].setConf(cnf[\"class\"]);\n\n _diagrams_class_classRenderer_v2__WEBPACK_IMPORTED_MODULE_16__[\"default\"].draw(txt, id);\n\n break;\n\n case 'state':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_state_stateRenderer__WEBPACK_IMPORTED_MODULE_19__[\"default\"].setConf(cnf.state);\n\n _diagrams_state_stateRenderer__WEBPACK_IMPORTED_MODULE_19__[\"default\"].draw(txt, id);\n\n break;\n\n case 'stateDiagram':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_state_stateRenderer_v2__WEBPACK_IMPORTED_MODULE_20__[\"default\"].setConf(cnf.state);\n\n _diagrams_state_stateRenderer_v2__WEBPACK_IMPORTED_MODULE_20__[\"default\"].draw(txt, id);\n\n break;\n\n case 'info':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_26__[\"default\"].setConf(cnf[\"class\"]);\n\n _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_26__[\"default\"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version);\n\n break;\n\n case 'pie':\n cnf[\"class\"].arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n\n _diagrams_pie_pieRenderer__WEBPACK_IMPORTED_MODULE_30__[\"default\"].setConf(cnf.pie);\n\n _diagrams_pie_pieRenderer__WEBPACK_IMPORTED_MODULE_30__[\"default\"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version);\n\n break;\n\n case 'er':\n _diagrams_er_erRenderer__WEBPACK_IMPORTED_MODULE_35__[\"default\"].setConf(cnf.er);\n\n _diagrams_er_erRenderer__WEBPACK_IMPORTED_MODULE_35__[\"default\"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version);\n\n break;\n\n case 'journey':\n _diagrams_user_journey_journeyRenderer__WEBPACK_IMPORTED_MODULE_38__[\"default\"].setConf(cnf.journey);\n\n _diagrams_user_journey_journeyRenderer__WEBPACK_IMPORTED_MODULE_38__[\"default\"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version);\n\n break;\n }\n } catch (e) {\n // errorRenderer.setConf(cnf.class);\n _errorRenderer__WEBPACK_IMPORTED_MODULE_27__[\"default\"].draw(id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version);\n\n throw e;\n }\n\n Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])(\"[id=\\\"\".concat(id, \"\\\"]\")).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml'); // if (cnf.arrowMarkerAbsolute) {\n // url =\n // window.location.protocol +\n // '//' +\n // window.location.host +\n // window.location.pathname +\n // window.location.search;\n // url = url.replace(/\\(/g, '\\\\(');\n // url = url.replace(/\\)/g, '\\\\)');\n // }\n // Fix for when the base tag is used\n\n var svgCode = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('#d' + id).node().innerHTML;\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute);\n\n if (!cnf.arrowMarkerAbsolute || cnf.arrowMarkerAbsolute === 'false') {\n svgCode = svgCode.replace(/marker-end=\"url\\(.*?#/g, 'marker-end=\"url(#', 'g');\n }\n\n svgCode = decodeEntities(svgCode);\n\n if (typeof cb !== 'undefined') {\n switch (graphType) {\n case 'flowchart':\n case 'flowchart-v2':\n cb(svgCode, _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_8__[\"default\"].bindFunctions);\n break;\n\n case 'gantt':\n cb(svgCode, _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_14__[\"default\"].bindFunctions);\n break;\n\n case 'class':\n case 'classDiagram':\n cb(svgCode, _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_18__[\"default\"].bindFunctions);\n break;\n\n default:\n cb(svgCode);\n }\n } else {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('CB = undefined!');\n }\n\n var node = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('#d' + id).node();\n\n if (node !== null && typeof node.remove === 'function') {\n Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('#d' + id).node().remove();\n }\n\n return svgCode;\n };\n\n var currentDirective = {};\n\n var parseDirective = function parseDirective(p, statement, context, type) {\n try {\n if (statement !== undefined) {\n statement = statement.trim();\n\n switch (context) {\n case 'open_directive':\n currentDirective = {};\n break;\n\n case 'type_directive':\n currentDirective.type = statement.toLowerCase();\n break;\n\n case 'arg_directive':\n currentDirective.args = JSON.parse(statement);\n break;\n\n case 'close_directive':\n handleDirective(p, currentDirective, type);\n currentDirective = null;\n break;\n }\n }\n } catch (error) {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].error(\"Error while rendering sequenceDiagram directive: \".concat(statement, \" jison context: \").concat(context));\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].error(error.message);\n }\n };\n\n var handleDirective = function handleDirective(p, directive, type) {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug(\"Directive type=\".concat(directive.type, \" with args:\"), directive.args);\n\n switch (directive.type) {\n case 'init':\n case 'initialize':\n {\n ['config'].forEach(function (prop) {\n if (typeof directive.args[prop] !== 'undefined') {\n if (type === 'flowchart-v2') {\n type = 'flowchart';\n }\n\n directive.args[type] = directive.args[prop];\n delete directive.args[prop];\n }\n });\n reinitialize(directive.args);\n\n _config__WEBPACK_IMPORTED_MODULE_39__[\"addDirective\"](directive.args);\n\n break;\n }\n\n case 'wrap':\n case 'nowrap':\n if (p && p['setWrap']) {\n p.setWrap(directive.type === 'wrap');\n }\n\n break;\n\n default:\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].warn(\"Unhandled directive: source: '%%{\".concat(directive.type, \": \").concat(JSON.stringify(directive.args ? directive.args : {}), \"}%%\"), directive);\n\n break;\n }\n };\n\n function updateRendererConfigs(conf) {\n _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_23__[\"default\"].setConf(conf.git);\n\n _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__[\"default\"].setConf(conf.flowchart);\n\n _diagrams_flowchart_flowRenderer_v2__WEBPACK_IMPORTED_MODULE_6__[\"default\"].setConf(conf.flowchart);\n\n if (typeof conf['sequenceDiagram'] !== 'undefined') {\n _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setConf(Object(_utils__WEBPACK_IMPORTED_MODULE_4__[\"assignWithDepth\"])(conf.sequence, conf['sequenceDiagram']));\n }\n\n _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_9__[\"default\"].setConf(conf.sequence);\n\n _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_12__[\"default\"].setConf(conf.gantt);\n\n _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_15__[\"default\"].setConf(conf[\"class\"]);\n\n _diagrams_state_stateRenderer__WEBPACK_IMPORTED_MODULE_19__[\"default\"].setConf(conf.state);\n\n _diagrams_state_stateRenderer_v2__WEBPACK_IMPORTED_MODULE_20__[\"default\"].setConf(conf.state);\n\n _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_26__[\"default\"].setConf(conf[\"class\"]);\n\n _diagrams_pie_pieRenderer__WEBPACK_IMPORTED_MODULE_30__[\"default\"].setConf(conf[\"class\"]);\n\n _diagrams_er_erRenderer__WEBPACK_IMPORTED_MODULE_35__[\"default\"].setConf(conf.er);\n\n _diagrams_user_journey_journeyRenderer__WEBPACK_IMPORTED_MODULE_38__[\"default\"].setConf(conf.journey);\n\n _errorRenderer__WEBPACK_IMPORTED_MODULE_27__[\"default\"].setConf(conf[\"class\"]);\n }\n\n function reinitialize() {// `mermaidAPI.reinitialize: v${pkg.version}`,\n // JSON.stringify(options),\n // options.themeVariables.primaryColor;\n // // if (options.theme && theme[options.theme]) {\n // // options.themeVariables = theme[options.theme].getThemeVariables(options.themeVariables);\n // // }\n // // Set default options\n // const config =\n // typeof options === 'object' ? configApi.setConfig(options) : configApi.getSiteConfig();\n // updateRendererConfigs(config);\n // setLogLevel(config.logLevel);\n // logger.debug('mermaidAPI.reinitialize: ', config);\n }\n\n function initialize(options) {\n // console.warn(`mermaidAPI.initialize: v${pkg.version} `, options);\n // Handle legacy location of font-family configuration\n if (options && options.fontFamily) {\n if (!options.themeVariables) {\n options.themeVariables = {\n fontFamily: options.fontFamily\n };\n } else {\n if (!options.themeVariables.fontFamily) {\n options.themeVariables = {\n fontFamily: options.fontFamily\n };\n }\n }\n } // Set default options\n\n\n _config__WEBPACK_IMPORTED_MODULE_39__[\"setSiteConfigDelta\"](options);\n\n if (options && options.theme && _themes__WEBPACK_IMPORTED_MODULE_41__[\"default\"][options.theme]) {\n // Todo merge with user options\n options.themeVariables = _themes__WEBPACK_IMPORTED_MODULE_41__[\"default\"][options.theme].getThemeVariables(options.themeVariables);\n } else {\n if (options) options.themeVariables = _themes__WEBPACK_IMPORTED_MODULE_41__[\"default\"][\"default\"].getThemeVariables(options.themeVariables);\n }\n\n var config = _typeof(options) === 'object' ? _config__WEBPACK_IMPORTED_MODULE_39__[\"setSiteConfig\"](options) : _config__WEBPACK_IMPORTED_MODULE_39__[\"getSiteConfig\"]();\n updateRendererConfigs(config);\n Object(_logger__WEBPACK_IMPORTED_MODULE_3__[\"setLogLevel\"])(config.logLevel); // logger.debug('mermaidAPI.initialize: ', config);\n }\n\n var mermaidAPI = Object.freeze({\n render: render,\n parse: parse,\n parseDirective: parseDirective,\n initialize: initialize,\n reinitialize: reinitialize,\n getConfig: _config__WEBPACK_IMPORTED_MODULE_39__[\"getConfig\"],\n setConfig: _config__WEBPACK_IMPORTED_MODULE_39__[\"setConfig\"],\n getSiteConfig: _config__WEBPACK_IMPORTED_MODULE_39__[\"getSiteConfig\"],\n updateSiteConfig: _config__WEBPACK_IMPORTED_MODULE_39__[\"updateSiteConfig\"],\n reset: function reset() {\n // console.warn('reset');\n _config__WEBPACK_IMPORTED_MODULE_39__[\"reset\"](); // const siteConfig = configApi.getSiteConfig();\n // updateRendererConfigs(siteConfig);\n\n },\n globalReset: function globalReset() {\n _config__WEBPACK_IMPORTED_MODULE_39__[\"reset\"](_config__WEBPACK_IMPORTED_MODULE_39__[\"defaultConfig\"]);\n\n updateRendererConfigs(_config__WEBPACK_IMPORTED_MODULE_39__[\"getConfig\"]());\n },\n defaultConfig: _config__WEBPACK_IMPORTED_MODULE_39__[\"defaultConfig\"]\n });\n Object(_logger__WEBPACK_IMPORTED_MODULE_3__[\"setLogLevel\"])(_config__WEBPACK_IMPORTED_MODULE_39__[\"getConfig\"]().logLevel);\n\n _config__WEBPACK_IMPORTED_MODULE_39__[\"reset\"](_config__WEBPACK_IMPORTED_MODULE_39__[\"getConfig\"]());\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = mermaidAPI;\n /**\n * ## mermaidAPI configuration defaults\n *\n * ```html\n * \n * ```\n */\n\n /***/\n },\n\n /***/\n \"./src/styles.js\":\n /*!***********************!*\\\n !*** ./src/styles.js ***!\n \\***********************/\n\n /*! exports provided: calcThemeVariables, default */\n\n /***/\n function srcStylesJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"calcThemeVariables\", function () {\n return calcThemeVariables;\n });\n /* harmony import */\n\n\n var _diagrams_class_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! ./diagrams/class/styles */\n \"./src/diagrams/class/styles.js\");\n /* harmony import */\n\n\n var _diagrams_er_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./diagrams/er/styles */\n \"./src/diagrams/er/styles.js\");\n /* harmony import */\n\n\n var _diagrams_flowchart_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./diagrams/flowchart/styles */\n \"./src/diagrams/flowchart/styles.js\");\n /* harmony import */\n\n\n var _diagrams_gantt_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./diagrams/gantt/styles */\n \"./src/diagrams/gantt/styles.js\");\n /* harmony import */\n\n\n var _diagrams_git_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ./diagrams/git/styles */\n \"./src/diagrams/git/styles.js\");\n /* harmony import */\n\n\n var _diagrams_info_styles__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\n /*! ./diagrams/info/styles */\n \"./src/diagrams/info/styles.js\");\n /* harmony import */\n\n\n var _diagrams_pie_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\n /*! ./diagrams/pie/styles */\n \"./src/diagrams/pie/styles.js\");\n /* harmony import */\n\n\n var _diagrams_sequence_styles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\n /*! ./diagrams/sequence/styles */\n \"./src/diagrams/sequence/styles.js\");\n /* harmony import */\n\n\n var _diagrams_state_styles__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\n /*! ./diagrams/state/styles */\n \"./src/diagrams/state/styles.js\");\n /* harmony import */\n\n\n var _diagrams_user_journey_styles__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\n /*! ./diagrams/user-journey/styles */\n \"./src/diagrams/user-journey/styles.js\");\n\n var themes = {\n flowchart: _diagrams_flowchart_styles__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'flowchart-v2': _diagrams_flowchart_styles__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n sequence: _diagrams_sequence_styles__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n gantt: _diagrams_gantt_styles__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n classDiagram: _diagrams_class_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n 'classDiagram-v2': _diagrams_class_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n \"class\": _diagrams_class_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n stateDiagram: _diagrams_state_styles__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n state: _diagrams_state_styles__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n git: _diagrams_git_styles__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n info: _diagrams_info_styles__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n pie: _diagrams_pie_styles__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n er: _diagrams_er_styles__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n journey: _diagrams_user_journey_styles__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n };\n\n var calcThemeVariables = function calcThemeVariables(theme, userOverRides) {\n return theme.calcColors(userOverRides);\n };\n\n var getStyles = function getStyles(type, userStyles, options) {\n //console.warn('options in styles: ', options);\n return \" {\\n font-family: \".concat(options.fontFamily, \";\\n font-size: \").concat(options.fontSize, \";\\n fill: \").concat(options.textColor, \"\\n }\\n\\n /* Classes common for multiple diagrams */\\n\\n .error-icon {\\n fill: \").concat(options.errorBkgColor, \";\\n }\\n .error-text {\\n fill: \").concat(options.errorTextColor, \";\\n stroke: \").concat(options.errorTextColor, \";\\n }\\n\\n .edge-thickness-normal {\\n stroke-width: 2px;\\n }\\n .edge-thickness-thick {\\n stroke-width: 3.5px\\n }\\n .edge-pattern-solid {\\n stroke-dasharray: 0;\\n }\\n\\n .edge-pattern-dashed{\\n stroke-dasharray: 3;\\n }\\n .edge-pattern-dotted {\\n stroke-dasharray: 2;\\n }\\n\\n .marker {\\n fill: \").concat(options.lineColor, \";\\n }\\n .marker.cross {\\n stroke: \").concat(options.lineColor, \";\\n }\\n\\n svg {\\n font-family: \").concat(options.fontFamily, \";\\n font-size: \").concat(options.fontSize, \";\\n }\\n\\n \").concat(themes[type](options), \"\\n\\n \").concat(userStyles, \"\\n\\n \").concat(type, \" { fill: apa;}\\n\");\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = getStyles;\n /***/\n },\n\n /***/\n \"./src/themes/index.js\":\n /*!*****************************!*\\\n !*** ./src/themes/index.js ***!\n \\*****************************/\n\n /*! exports provided: default */\n\n /***/\n function srcThemesIndexJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony import */\n\n\n var _theme_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! ./theme-base */\n \"./src/themes/theme-base.js\");\n /* harmony import */\n\n\n var _theme_dark__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-dark */\n \"./src/themes/theme-dark.js\");\n /* harmony import */\n\n\n var _theme_default__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./theme-default */\n \"./src/themes/theme-default.js\");\n /* harmony import */\n\n\n var _theme_forest__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./theme-forest */\n \"./src/themes/theme-forest.js\");\n /* harmony import */\n\n\n var _theme_neutral__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\n /*! ./theme-neutral */\n \"./src/themes/theme-neutral.js\");\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n base: {\n getThemeVariables: _theme_base__WEBPACK_IMPORTED_MODULE_0__[\"getThemeVariables\"]\n },\n dark: {\n getThemeVariables: _theme_dark__WEBPACK_IMPORTED_MODULE_1__[\"getThemeVariables\"]\n },\n \"default\": {\n getThemeVariables: _theme_default__WEBPACK_IMPORTED_MODULE_2__[\"getThemeVariables\"]\n },\n forest: {\n getThemeVariables: _theme_forest__WEBPACK_IMPORTED_MODULE_3__[\"getThemeVariables\"]\n },\n neutral: {\n getThemeVariables: _theme_neutral__WEBPACK_IMPORTED_MODULE_4__[\"getThemeVariables\"]\n }\n };\n /***/\n },\n\n /***/\n \"./src/themes/theme-base.js\":\n /*!**********************************!*\\\n !*** ./src/themes/theme-base.js ***!\n \\**********************************/\n\n /*! exports provided: getThemeVariables */\n\n /***/\n function srcThemesThemeBaseJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getThemeVariables\", function () {\n return getThemeVariables;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _theme_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-helpers */\n \"./src/themes/theme-helpers.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n var Theme = /*#__PURE__*/function () {\n function Theme() {\n _classCallCheck(this, Theme);\n /** # Base variables */\n\n /** * background - used to know what the background color is of the diagram. This is used for deducing colors for istance line color. Defaulr value is #f4f4f4. */\n\n\n this.background = '#f4f4f4';\n this.darkMode = false; // this.background = '#0c0c0c';\n // this.darkMode = true;\n\n this.primaryColor = '#fff4dd'; // this.background = '#0c0c0c';\n // this.primaryColor = '#1f1f00';\n\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = '#333'; // dark\n // this.primaryColor = '#034694';\n // this.primaryColor = '#f2ee7e';\n // this.primaryColor = '#9f33be';\n // this.primaryColor = '#f0fff0';\n // this.primaryColor = '#fa255e';\n // this.primaryColor = '#ECECFF';\n // this.secondaryColor = '#c39ea0';\n // this.tertiaryColor = '#f8e5e5';\n // this.secondaryColor = '#dfdfde';\n // this.tertiaryColor = '#CCCCFF';\n\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px'; // this.updateColors();\n }\n\n _createClass(Theme, [{\n key: \"updateColors\",\n value: function updateColors() {\n // The || is to make sure that if the variable has been defiend by a user override that value is to be used\n\n /* Main */\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#ddd' : '#333'); // invert(this.primaryColor);\n\n this.secondaryColor = this.secondaryColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -120\n });\n this.tertiaryColor = this.tertiaryColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 180,\n l: 5\n });\n this.primaryBorderColor = this.primaryBorderColor || Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = this.secondaryBorderColor || Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = this.tertiaryBorderColor || Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.noteBkgColor, this.darkMode);\n this.secondaryTextColor = this.secondaryTextColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.tertiaryColor);\n this.lineColor = this.lineColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n /* Flowchart variables */\n\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n /* Sequence Diagram variables */\n // this.actorBorder = lighten(this.border1, 0.5);\n\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || 'grey';\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.lineColor);\n /* Gantt chart variables */\n\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || 'white';\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.primaryColor, 23);\n this.gridColor = this.gridColor || 'lightgrey';\n this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey';\n this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey';\n this.critBorderColor = this.critBorderColor || '#ff8888';\n this.critBkgColor = this.critBkgColor || 'red';\n this.todayLineColor = this.todayLineColor || 'red';\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || '#003163';\n /* state colors */\n\n this.labelColor = this.labelColor || this.primaryTextColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n /* class */\n\n this.classText = this.classText || this.textColor;\n /* user-journey */\n\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 64\n });\n this.fillType3 = this.fillType3 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 64\n });\n this.fillType4 = this.fillType4 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -64\n });\n this.fillType5 = this.fillType5 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: -64\n });\n this.fillType6 = this.fillType6 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 128\n });\n this.fillType7 = this.fillType7 || Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 128\n });\n }\n }, {\n key: \"calculate\",\n value: function calculate(overrides) {\n var _this = this;\n\n if (_typeof(overrides) !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n var keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n }); // Calculate colors form base colors\n\n this.updateColors(); // Copy values from overrides again in case of an override of derived value\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n });\n }\n }]);\n\n return Theme;\n }();\n\n var getThemeVariables = function getThemeVariables(userOverrides) {\n var theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n };\n /***/\n\n },\n\n /***/\n \"./src/themes/theme-dark.js\":\n /*!**********************************!*\\\n !*** ./src/themes/theme-dark.js ***!\n \\**********************************/\n\n /*! exports provided: getThemeVariables */\n\n /***/\n function srcThemesThemeDarkJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getThemeVariables\", function () {\n return getThemeVariables;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _theme_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-helpers */\n \"./src/themes/theme-helpers.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n var Theme = /*#__PURE__*/function () {\n function Theme() {\n _classCallCheck(this, Theme);\n\n this.background = '#333';\n this.primaryColor = '#1f2020';\n this.secondaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.primaryColor, 16);\n this.tertiaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -160\n });\n this.primaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.primaryColor);\n this.secondaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.secondaryColor);\n this.tertiaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.tertiaryColor);\n this.lineColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.textColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.mainBkg = '#1f2020';\n this.secondBkg = 'calculated';\n this.mainContrastColor = 'lightgrey';\n this.darkTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])('#323D47'), 10);\n this.lineColor = 'calculated';\n this.border1 = '#81B1DB';\n this.border2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"rgba\"])(255, 255, 255, 0.25);\n this.arrowheadColor = 'calculated';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.labelBackground = '#181818';\n this.textColor = '#ccc';\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = '#F9FFFE';\n this.edgeLabelBackground = 'calculated';\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'calculated';\n this.actorLineColor = 'calculated';\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = 'calculated';\n this.activationBkgColor = 'calculated';\n this.sequenceNumberColor = 'black';\n /* Gantt chart variables */\n\n this.sectionBkgColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])('#EAE8D9', 30);\n this.altSectionBkgColor = 'calculated';\n this.sectionBkgColor2 = '#EAE8D9';\n this.taskBorderColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"rgba\"])(255, 255, 255, 70);\n this.taskBkgColor = 'calculated';\n this.taskTextColor = 'calculated';\n this.taskTextLightColor = 'calculated';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"rgba\"])(255, 255, 255, 50);\n this.activeTaskBkgColor = '#81B1DB';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#E83737';\n this.critBkgColor = '#E83737';\n this.taskTextDarkColor = 'calculated';\n this.todayLineColor = '#DB5757';\n /* state colors */\n\n this.labelColor = 'calculated';\n this.errorBkgColor = '#a44141';\n this.errorTextColor = '#ddd';\n }\n\n _createClass(Theme, [{\n key: \"updateColors\",\n value: function updateColors() {\n this.secondBkg = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n /* Flowchart variables */\n\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.labelBackground, 25);\n /* Sequence Diagram variables */\n\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.mainContrastColor;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.mainBkg;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n /* Gantt chart variables */\n\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n /* state colors */\n\n this.labelColor = this.textColor;\n this.altBackground = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.background, 20);\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 64\n });\n this.fillType3 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 64\n });\n this.fillType4 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -64\n });\n this.fillType5 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: -64\n });\n this.fillType6 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 128\n });\n this.fillType7 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 128\n });\n /* class */\n\n this.classText = this.primaryTextColor;\n }\n }, {\n key: \"calculate\",\n value: function calculate(overrides) {\n var _this = this;\n\n if (_typeof(overrides) !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n var keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n }); // Calculate colors form base colors\n\n this.updateColors(); // Copy values from overrides again in case of an override of derived value\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n });\n }\n }]);\n\n return Theme;\n }();\n\n var getThemeVariables = function getThemeVariables(userOverrides) {\n var theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n };\n /***/\n\n },\n\n /***/\n \"./src/themes/theme-default.js\":\n /*!*************************************!*\\\n !*** ./src/themes/theme-default.js ***!\n \\*************************************/\n\n /*! exports provided: getThemeVariables */\n\n /***/\n function srcThemesThemeDefaultJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getThemeVariables\", function () {\n return getThemeVariables;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _theme_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-helpers */\n \"./src/themes/theme-helpers.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n var Theme = /*#__PURE__*/function () {\n function Theme() {\n _classCallCheck(this, Theme);\n /* Base variables */\n\n\n this.background = '#f4f4f4';\n this.primaryColor = '#ECECFF';\n this.secondaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 120\n });\n this.secondaryColor = '#ffffde';\n this.tertiaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -160\n });\n this.primaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.tertiaryColor, this.darkMode); // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n this.primaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.primaryColor);\n this.secondaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.secondaryColor);\n this.tertiaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.tertiaryColor);\n this.lineColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.textColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.background = 'white';\n this.mainBkg = '#ECECFF';\n this.secondBkg = '#ffffde';\n this.lineColor = '#333333';\n this.border1 = '#9370DB';\n this.border2 = '#aaaa33';\n this.arrowheadColor = '#333333';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.labelBackground = '#e8e8e8';\n this.textColor = '#333';\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = 'calculated';\n this.edgeLabelBackground = 'calculated';\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'black';\n this.actorLineColor = 'grey';\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n /* Gantt chart variables */\n\n this.sectionBkgColor = 'calculated';\n this.altSectionBkgColor = 'calculated';\n this.sectionBkgColor2 = 'calculated';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = 'calculated';\n this.taskTextLightColor = 'calculated';\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = 'calculated';\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = 'calculated';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'calculated';\n this.critBorderColor = 'calculated';\n this.critBkgColor = 'calculated';\n this.todayLineColor = 'calculated';\n this.sectionBkgColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"rgba\"])(102, 102, 255, 0.49);\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = '#fff400';\n this.taskBorderColor = '#534fbc';\n this.taskBkgColor = '#8a90dd';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'black';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = '#534fbc';\n this.activeTaskBkgColor = '#bfc7ff';\n this.gridColor = 'lightgrey';\n this.doneTaskBkgColor = 'lightgrey';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#ff8888';\n this.critBkgColor = 'red';\n this.todayLineColor = 'red';\n /* state colors */\n\n this.labelColor = 'black';\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n this.updateColors();\n }\n\n _createClass(Theme, [{\n key: \"updateColors\",\n value: function updateColors() {\n /* Flowchart variables */\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1; // border 1\n\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n /* Sequence Diagram variables */\n // this.actorBorder = lighten(this.border1, 0.5);\n\n this.actorBorder = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n /* Gantt chart variables */\n\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n /* state colors */\n\n /* class */\n\n this.classText = this.primaryTextColor;\n /* journey */\n\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 64\n });\n this.fillType3 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 64\n });\n this.fillType4 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -64\n });\n this.fillType5 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: -64\n });\n this.fillType6 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 128\n });\n this.fillType7 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 128\n });\n }\n }, {\n key: \"calculate\",\n value: function calculate(overrides) {\n var _this = this;\n\n if (_typeof(overrides) !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n var keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n }); // Calculate colors form base colors\n\n this.updateColors(); // Copy values from overrides again in case of an override of derived value\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n });\n }\n }]);\n\n return Theme;\n }();\n\n var getThemeVariables = function getThemeVariables(userOverrides) {\n var theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n };\n /***/\n\n },\n\n /***/\n \"./src/themes/theme-forest.js\":\n /*!************************************!*\\\n !*** ./src/themes/theme-forest.js ***!\n \\************************************/\n\n /*! exports provided: getThemeVariables */\n\n /***/\n function srcThemesThemeForestJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getThemeVariables\", function () {\n return getThemeVariables;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _theme_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-helpers */\n \"./src/themes/theme-helpers.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n var Theme = /*#__PURE__*/function () {\n function Theme() {\n _classCallCheck(this, Theme);\n /* Base vales */\n\n\n this.background = '#f4f4f4';\n this.primaryColor = '#cde498';\n this.secondaryColor = '#cdffb2';\n this.background = 'white';\n this.mainBkg = '#cde498';\n this.secondBkg = '#cdffb2';\n this.lineColor = 'green';\n this.border1 = '#13540c';\n this.border2 = '#6eaa49';\n this.arrowheadColor = 'green';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.tertiaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])('#cde498', 10);\n this.primaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.primaryColor);\n this.secondaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.secondaryColor);\n this.tertiaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.primaryColor);\n this.lineColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.textColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = '#333';\n this.edgeLabelBackground = '#e8e8e8';\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'black';\n this.actorLineColor = 'grey';\n this.signalColor = '#333';\n this.signalTextColor = '#333';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = '#326932';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n /* Gantt chart variables */\n\n this.sectionBkgColor = '#6eaa49';\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = '#6eaa49';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = '#487e3a';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'black';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'lightgrey';\n this.doneTaskBkgColor = 'lightgrey';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#ff8888';\n this.critBkgColor = 'red';\n this.todayLineColor = 'red';\n /* state colors */\n\n this.labelColor = 'black';\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n }\n\n _createClass(Theme, [{\n key: \"updateColors\",\n value: function updateColors() {\n /* Flowchart variables */\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n /* Sequence Diagram variables */\n\n this.actorBorder = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n /* Gantt chart variables */\n\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n /* state colors */\n\n /* class */\n\n this.classText = this.primaryTextColor;\n /* journey */\n\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 64\n });\n this.fillType3 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 64\n });\n this.fillType4 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -64\n });\n this.fillType5 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: -64\n });\n this.fillType6 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 128\n });\n this.fillType7 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 128\n });\n }\n }, {\n key: \"calculate\",\n value: function calculate(overrides) {\n var _this = this;\n\n if (_typeof(overrides) !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n var keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n }); // Calculate colors form base colors\n\n this.updateColors(); // Copy values from overrides again in case of an override of derived value\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n });\n }\n }]);\n\n return Theme;\n }();\n\n var getThemeVariables = function getThemeVariables(userOverrides) {\n var theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n };\n /***/\n\n },\n\n /***/\n \"./src/themes/theme-helpers.js\":\n /*!*************************************!*\\\n !*** ./src/themes/theme-helpers.js ***!\n \\*************************************/\n\n /*! exports provided: mkBorder */\n\n /***/\n function srcThemesThemeHelpersJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"mkBorder\", function () {\n return mkBorder;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n\n var mkBorder = function mkBorder(col, darkMode) {\n return darkMode ? Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(col, {\n s: -40,\n l: 10\n }) : Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(col, {\n s: -40,\n l: -10\n });\n };\n /***/\n\n },\n\n /***/\n \"./src/themes/theme-neutral.js\":\n /*!*************************************!*\\\n !*** ./src/themes/theme-neutral.js ***!\n \\*************************************/\n\n /*! exports provided: getThemeVariables */\n\n /***/\n function srcThemesThemeNeutralJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getThemeVariables\", function () {\n return getThemeVariables;\n });\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! khroma */\n \"khroma\");\n /* harmony import */\n\n\n var khroma__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(khroma__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var _theme_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! ./theme-helpers */\n \"./src/themes/theme-helpers.js\");\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n } // const Color = require ( 'khroma/dist/color' ).default\n // Color.format.hex.stringify(Color.parse('hsl(210, 66.6666666667%, 95%)')); // => \"#EAF2FB\"\n\n\n var Theme = /*#__PURE__*/function () {\n function Theme() {\n _classCallCheck(this, Theme);\n\n this.primaryColor = '#eee';\n this.contrast = '#26a';\n this.secondaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.contrast, 55);\n this.background = '#ffffff'; // this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n\n this.tertiaryColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -160\n });\n this.primaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = Object(_theme_helpers__WEBPACK_IMPORTED_MODULE_1__[\"mkBorder\"])(this.tertiaryColor, this.darkMode); // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n this.primaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.primaryColor);\n this.secondaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.secondaryColor);\n this.tertiaryTextColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.tertiaryColor);\n this.lineColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.textColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(this.background);\n this.altBackground = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.contrast, 55);\n this.mainBkg = '#eee';\n this.secondBkg = 'calculated';\n this.lineColor = '#666';\n this.border1 = '#999';\n this.border2 = 'calculated';\n this.note = '#ffa';\n this.text = '#333';\n this.critical = '#d42';\n this.done = '#bbb';\n this.arrowheadColor = '#333333';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = 'calculated';\n this.edgeLabelBackground = 'white';\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'calculated';\n this.actorLineColor = 'calculated';\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = 'calculated';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n /* Gantt chart variables */\n\n this.sectionBkgColor = 'calculated';\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = 'calculated';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = 'calculated';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'calculated';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'calculated';\n this.critBkgColor = 'calculated';\n this.critBorderColor = 'calculated';\n this.todayLineColor = 'calculated';\n /* state colors */\n\n this.labelColor = 'black';\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n }\n\n _createClass(Theme, [{\n key: \"updateColors\",\n value: function updateColors() {\n this.secondBkg = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.contrast, 55);\n this.border2 = this.contrast;\n /* Flowchart variables */\n\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n /* Sequence Diagram variables */\n\n this.actorBorder = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.lineColor;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.note, 60);\n this.noteBkgColor = this.note;\n this.noteTextColor = this.actorTextColor;\n /* Gantt chart variables */\n\n this.sectionBkgColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.contrast, 30);\n this.sectionBkgColor2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.contrast, 30);\n this.taskBorderColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.contrast, 10);\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"lighten\"])(this.border1, 30);\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"darken\"])(this.critBkgColor, 10);\n this.todayLineColor = this.critBkgColor;\n /* state colors */\n\n /* class */\n\n this.classText = this.primaryTextColor;\n /* journey */\n\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 64\n });\n this.fillType3 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 64\n });\n this.fillType4 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: -64\n });\n this.fillType5 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: -64\n });\n this.fillType6 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.primaryColor, {\n h: 128\n });\n this.fillType7 = Object(khroma__WEBPACK_IMPORTED_MODULE_0__[\"adjust\"])(this.secondaryColor, {\n h: 128\n });\n }\n }, {\n key: \"calculate\",\n value: function calculate(overrides) {\n var _this = this;\n\n if (_typeof(overrides) !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n var keys = Object.keys(overrides); // Copy values from overrides, this is mainly for base colors\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n }); // Calculate colors form base colors\n\n this.updateColors(); // Copy values from overrides again in case of an override of derived value\n\n keys.forEach(function (k) {\n _this[k] = overrides[k];\n });\n }\n }]);\n\n return Theme;\n }();\n\n var getThemeVariables = function getThemeVariables(userOverrides) {\n var theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n };\n /***/\n\n },\n\n /***/\n \"./src/utils.js\":\n /*!**********************!*\\\n !*** ./src/utils.js ***!\n \\**********************/\n\n /*! exports provided: detectInit, detectDirective, detectType, isSubstringInArray, interpolateToCurve, formatUrl, runFunc, getStylesFromArray, generateId, random, assignWithDepth, getTextObj, drawSimpleText, wrapLabel, calculateTextHeight, calculateTextWidth, calculateTextDimensions, calculateSvgSizeAttrs, configureSvgSize, initIdGeneratior, default */\n\n /***/\n function srcUtilsJs(module, __webpack_exports__, __webpack_require__) {\n \"use strict\";\n\n __webpack_require__.r(__webpack_exports__);\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"detectInit\", function () {\n return detectInit;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"detectDirective\", function () {\n return detectDirective;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"detectType\", function () {\n return detectType;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"isSubstringInArray\", function () {\n return isSubstringInArray;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"interpolateToCurve\", function () {\n return interpolateToCurve;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"formatUrl\", function () {\n return formatUrl;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"runFunc\", function () {\n return runFunc;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getStylesFromArray\", function () {\n return getStylesFromArray;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"generateId\", function () {\n return generateId;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"random\", function () {\n return random;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"assignWithDepth\", function () {\n return assignWithDepth;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"getTextObj\", function () {\n return getTextObj;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"drawSimpleText\", function () {\n return drawSimpleText;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"wrapLabel\", function () {\n return wrapLabel;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"calculateTextHeight\", function () {\n return calculateTextHeight;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"calculateTextWidth\", function () {\n return calculateTextWidth;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"calculateTextDimensions\", function () {\n return calculateTextDimensions;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"calculateSvgSizeAttrs\", function () {\n return calculateSvgSizeAttrs;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"configureSvgSize\", function () {\n return configureSvgSize;\n });\n /* harmony export (binding) */\n\n\n __webpack_require__.d(__webpack_exports__, \"initIdGeneratior\", function () {\n return initIdGeneratior;\n });\n /* harmony import */\n\n\n var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\n /*! @braintree/sanitize-url */\n \"@braintree/sanitize-url\");\n /* harmony import */\n\n\n var _braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__);\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\n /*! d3 */\n \"d3\");\n /* harmony import */\n\n\n var d3__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_1__);\n /* harmony import */\n\n\n var _diagrams_common_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\n /*! ./diagrams/common/common */\n \"./src/diagrams/common/common.js\");\n /* harmony import */\n\n\n var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\n /*! ./logger */\n \"./src/logger.js\");\n\n var _this = undefined;\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n\n function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n } // import cryptoRandomString from 'crypto-random-string';\n // Effectively an enum of the supported curve types, accessible by name\n\n\n var d3CurveTypes = {\n curveBasis: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveBasis\"],\n curveBasisClosed: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveBasisClosed\"],\n curveBasisOpen: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveBasisOpen\"],\n curveLinear: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveLinear\"],\n curveLinearClosed: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveLinearClosed\"],\n curveMonotoneX: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveMonotoneX\"],\n curveMonotoneY: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveMonotoneY\"],\n curveNatural: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveNatural\"],\n curveStep: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveStep\"],\n curveStepAfter: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveStepAfter\"],\n curveStepBefore: d3__WEBPACK_IMPORTED_MODULE_1__[\"curveStepBefore\"]\n };\n var directive = /[%]{2}[{]\\s*(?:(?:(\\w+)\\s*:|(\\w+))\\s*(?:(?:(\\w+))|((?:(?![}][%]{2}).|\\r?\\n)*))?\\s*)(?:[}][%]{2})?/gi;\n var directiveWithoutOpen = /\\s*(?:(?:(\\w+)(?=:):|(\\w+))\\s*(?:(?:(\\w+))|((?:(?![}][%]{2}).|\\r?\\n)*))?\\s*)(?:[}][%]{2})?/gi;\n var anyComment = /\\s*%%.*\\n/gm;\n /**\n * @function detectInit\n * Detects the init config object from the text\n * ```mermaid\n * %%{init: {\"theme\": \"debug\", \"logLevel\": 1 }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n * or\n * ```mermaid\n * %%{initialize: {\"theme\": \"dark\", logLevel: \"debug\" }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @returns {object} the json object representing the init passed to mermaid.initialize()\n */\n\n var detectInit = function detectInit(text) {\n var inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n var results = {};\n\n if (Array.isArray(inits)) {\n var args = inits.map(function (init) {\n return init.args;\n });\n results = assignWithDepth(results, _toConsumableArray(args));\n } else {\n results = inits.args;\n }\n\n if (results) {\n var type = detectType(text);\n ['config'].forEach(function (prop) {\n if (typeof results[prop] !== 'undefined') {\n if (type === 'flowchart-v2') {\n type = 'flowchart';\n }\n\n results[type] = results[prop];\n delete results[prop];\n }\n });\n }\n\n return results;\n };\n /**\n * @function detectDirective\n * Detects the directive from the text. Text can be single line or multiline. If type is null or omitted\n * the first directive encountered in text will be returned\n * ```mermaid\n * graph LR\n * %%{somedirective}%%\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @param {string|RegExp} type The directive to return (default: null)\n * @returns {object | Array} An object or Array representing the directive(s): { type: string, args: object|null } matched by the input type\n * if a single directive was found, that directive object will be returned.\n */\n\n\n var detectDirective = function detectDirective(text) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n try {\n var commentWithoutDirectives = new RegExp(\"[%]{2}(?![{]\".concat(directiveWithoutOpen.source, \")(?=[}][%]{2}).*\\n\"), 'ig');\n text = text.trim().replace(commentWithoutDirectives, '').replace(/'/gm, '\"');\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug(\"Detecting diagram directive\".concat(type !== null ? ' type:' + type : '', \" based on the text:\").concat(text));\n\n var match,\n result = [];\n\n while ((match = directive.exec(text)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (match.index === directive.lastIndex) {\n directive.lastIndex++;\n }\n\n if (match && !type || type && match[1] && match[1].match(type) || type && match[2] && match[2].match(type)) {\n var _type = match[1] ? match[1] : match[2];\n\n var args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({\n type: _type,\n args: args\n });\n }\n }\n\n if (result.length === 0) {\n result.push({\n type: text,\n args: null\n });\n }\n\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].error(\"ERROR: \".concat(error.message, \" - Unable to parse directive\").concat(type !== null ? ' type:' + type : '', \" based on the text:\").concat(text));\n\n return {\n type: null,\n args: null\n };\n }\n };\n /**\n * @function detectType\n * Detects the type of the graph text. Takes into consideration the possible existence of an %%init\n * directive\n * ```mermaid\n * %%{initialize: {\"startOnLoad\": true, logLevel: \"fatal\" }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @returns {string} A graph definition key\n */\n\n\n var detectType = function detectType(text) {\n text = text.replace(directive, '').replace(anyComment, '\\n');\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].debug('Detecting diagram type based on the text ' + text);\n\n if (text.match(/^\\s*sequenceDiagram/)) {\n return 'sequence';\n }\n\n if (text.match(/^\\s*gantt/)) {\n return 'gantt';\n }\n\n if (text.match(/^\\s*classDiagram-v2/)) {\n return 'classDiagram';\n }\n\n if (text.match(/^\\s*classDiagram/)) {\n return 'class';\n }\n\n if (text.match(/^\\s*stateDiagram-v2/)) {\n return 'stateDiagram';\n }\n\n if (text.match(/^\\s*stateDiagram/)) {\n return 'state';\n }\n\n if (text.match(/^\\s*gitGraph/)) {\n return 'git';\n }\n\n if (text.match(/^\\s*flowchart/)) {\n return 'flowchart-v2';\n }\n\n if (text.match(/^\\s*info/)) {\n return 'info';\n }\n\n if (text.match(/^\\s*pie/)) {\n return 'pie';\n }\n\n if (text.match(/^\\s*erDiagram/)) {\n return 'er';\n }\n\n if (text.match(/^\\s*journey/)) {\n return 'journey';\n }\n\n return 'flowchart';\n };\n\n var memoize = function memoize(fn, resolver) {\n var cache = {};\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var n = resolver ? resolver.apply(_this, args) : args[0];\n\n if (n in cache) {\n return cache[n];\n } else {\n var result = fn.apply(void 0, args);\n cache[n] = result;\n return result;\n }\n };\n };\n /**\n * @function isSubstringInArray\n * Detects whether a substring in present in a given array\n * @param {string} str The substring to detect\n * @param {array} arr The array to search\n * @returns {number} the array index containing the substring or -1 if not present\n **/\n\n\n var isSubstringInArray = function isSubstringInArray(str, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i].match(str)) return i;\n }\n\n return -1;\n };\n\n var interpolateToCurve = function interpolateToCurve(interpolate, defaultCurve) {\n if (!interpolate) {\n return defaultCurve;\n }\n\n var curveName = \"curve\".concat(interpolate.charAt(0).toUpperCase() + interpolate.slice(1));\n return d3CurveTypes[curveName] || defaultCurve;\n };\n\n var formatUrl = function formatUrl(linkStr, config) {\n var url = linkStr.trim();\n\n if (url) {\n if (config.securityLevel !== 'loose') {\n return Object(_braintree_sanitize_url__WEBPACK_IMPORTED_MODULE_0__[\"sanitizeUrl\"])(url);\n }\n\n return url;\n }\n };\n\n var runFunc = function runFunc(functionName) {\n var _obj;\n\n var arrPaths = functionName.split('.');\n var len = arrPaths.length - 1;\n var fnName = arrPaths[len];\n var obj = window;\n\n for (var i = 0; i < len; i++) {\n obj = obj[arrPaths[i]];\n if (!obj) return;\n }\n\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n\n (_obj = obj)[fnName].apply(_obj, params);\n };\n\n var distance = function distance(p1, p2) {\n return p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0;\n };\n\n var traverseEdge = function traverseEdge(points) {\n var prevPoint;\n var totalDistance = 0;\n points.forEach(function (point) {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n }); // Traverse half of total distance along points\n\n var remainingDistance = totalDistance / 2;\n var center = undefined;\n prevPoint = undefined;\n points.forEach(function (point) {\n if (prevPoint && !center) {\n var vectorDistance = distance(point, prevPoint);\n\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n // Calculate the coordinates\n var distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) center = prevPoint;\n if (distanceRatio >= 1) center = {\n x: point.x,\n y: point.y\n };\n\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n\n prevPoint = point;\n });\n return center;\n };\n\n var calcLabelPosition = function calcLabelPosition(points) {\n return traverseEdge(points);\n };\n\n var calcCardinalityPosition = function calcCardinalityPosition(isRelationTypePresent, points, initialPosition) {\n var prevPoint;\n var totalDistance = 0; // eslint-disable-line\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].info('our points', points);\n\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n\n points.forEach(function (point) {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n }); // Traverse only 25 total distance along points to find cardinality point\n\n var distanceToCardinalityPoint = 25;\n var remainingDistance = distanceToCardinalityPoint;\n var center;\n prevPoint = undefined;\n points.forEach(function (point) {\n if (prevPoint && !center) {\n var vectorDistance = distance(point, prevPoint);\n\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n // Calculate the coordinates\n var distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) center = prevPoint;\n if (distanceRatio >= 1) center = {\n x: point.x,\n y: point.y\n };\n\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n\n prevPoint = point;\n }); // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n\n var d = isRelationTypePresent ? 10 : 5; //Calculate Angle for x and y axis\n\n var angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n var cardinalityPosition = {\n x: 0,\n y: 0\n }; //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance\n\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n };\n /**\n * position ['start_left', 'start_right', 'end_left', 'end_right']\n */\n\n\n var calcTerminalLabelPosition = function calcTerminalLabelPosition(terminalMarkerSize, position, _points) {\n // Todo looking to faster cloning method\n var points = JSON.parse(JSON.stringify(_points));\n var prevPoint;\n var totalDistance = 0; // eslint-disable-line\n\n _logger__WEBPACK_IMPORTED_MODULE_3__[\"logger\"].info('our points', points);\n\n if (position !== 'start_left' && position !== 'start_right') {\n points = points.reverse();\n }\n\n points.forEach(function (point) {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n }); // Traverse only 25 total distance along points to find cardinality point\n\n var distanceToCardinalityPoint = 25;\n var remainingDistance = distanceToCardinalityPoint;\n var center;\n prevPoint = undefined;\n points.forEach(function (point) {\n if (prevPoint && !center) {\n var vectorDistance = distance(point, prevPoint);\n\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n // Calculate the coordinates\n var distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) center = prevPoint;\n if (distanceRatio >= 1) center = {\n x: point.x,\n y: point.y\n };\n\n if (distanceRatio > 0 && distanceRatio < 1) {\n center = {\n x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y\n };\n }\n }\n }\n\n prevPoint = point;\n }); // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n\n var d = 10; //Calculate Angle for x and y axis\n\n var angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n var cardinalityPosition = {\n x: 0,\n y: 0\n }; //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance\n\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n\n if (position === 'start_left') {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n }\n\n if (position === 'end_right') {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n }\n\n if (position === 'end_left') {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n }\n\n return cardinalityPosition;\n };\n\n var getStylesFromArray = function getStylesFromArray(arr) {\n var style = '';\n var labelStyle = '';\n\n for (var i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'undefined') {\n // add text properties to label style definition\n if (arr[i].startsWith('color:') || arr[i].startsWith('text-align:')) {\n labelStyle = labelStyle + arr[i] + ';';\n } else {\n style = style + arr[i] + ';';\n }\n }\n }\n\n return {\n style: style,\n labelStyle: labelStyle\n };\n };\n\n var cnt = 0;\n\n var generateId = function generateId() {\n cnt++;\n return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt;\n };\n\n function makeid(length) {\n var result = '';\n var characters = '0123456789abcdef';\n var charactersLength = characters.length;\n\n for (var i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n }\n\n var random = function random(options) {\n return makeid(options.length);\n };\n /**\n * @function assignWithDepth\n * Extends the functionality of {@link ObjectConstructor.assign} with the ability to merge arbitrary-depth objects\n * For each key in src with path `k` (recursively) performs an Object.assign(dst[`k`], src[`k`]) with\n * a slight change from the typical handling of undefined for dst[`k`]: instead of raising an error,\n * dst[`k`] is auto-initialized to {} and effectively merged with src[`k`]\n * \n * Additionally, dissimilar types will not clobber unless the config.clobber parameter === true. Example:\n * ```\n * let config_0 = { foo: { bar: 'bar' }, bar: 'foo' };\n * let config_1 = { foo: 'foo', bar: 'bar' };\n * let result = assignWithDepth(config_0, config_1);\n * console.log(result);\n * //-> result: { foo: { bar: 'bar' }, bar: 'bar' }\n * ```\n *
\n * Traditional Object.assign would have clobbered foo in config_0 with foo in config_1.\n *
\n * If src is a destructured array of objects and dst is not an array, assignWithDepth will apply each element of src to dst\n * in order.\n * @param dst:any - the destination of the merge\n * @param src:any - the source object(s) to merge into destination\n * @param config:{ depth: number, clobber: boolean } - depth: depth to traverse within src and dst for merging -\n * clobber: should dissimilar types clobber (default: { depth: 2, clobber: false })\n * @returns {*}\n */\n\n\n var assignWithDepth = function assignWithDepth(dst, src, config) {\n var _Object$assign = Object.assign({\n depth: 2,\n clobber: false\n }, config),\n depth = _Object$assign.depth,\n clobber = _Object$assign.clobber;\n\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach(function (s) {\n return assignWithDepth(dst, s, config);\n });\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach(function (s) {\n if (dst.indexOf(s) === -1) {\n dst.push(s);\n }\n });\n return dst;\n }\n\n if (typeof dst === 'undefined' || depth <= 0) {\n if (dst !== undefined && dst !== null && _typeof(dst) === 'object' && _typeof(src) === 'object') {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n\n if (typeof src !== 'undefined' && _typeof(dst) === 'object' && _typeof(src) === 'object') {\n Object.keys(src).forEach(function (key) {\n if (_typeof(src[key]) === 'object' && (dst[key] === undefined || _typeof(dst[key]) === 'object')) {\n if (dst[key] === undefined) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n\n dst[key] = assignWithDepth(dst[key], src[key], {\n depth: depth - 1,\n clobber: clobber\n });\n } else if (clobber || _typeof(dst[key]) !== 'object' && _typeof(src[key]) !== 'object') {\n dst[key] = src[key];\n }\n });\n }\n\n return dst;\n };\n\n var getTextObj = function getTextObj() {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n anchor: 'start',\n style: '#666',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: undefined\n };\n };\n\n var drawSimpleText = function drawSimpleText(elem, textData) {\n // Remove and ignore br:s\n var nText = textData.text.replace(_diagrams_common_common__WEBPACK_IMPORTED_MODULE_2__[\"default\"].lineBreakRegex, ' ');\n var textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.style('text-anchor', textData.anchor);\n textElem.style('font-family', textData.fontFamily);\n textElem.style('font-size', textData.fontSize);\n textElem.style('font-weight', textData.fontWeight);\n textElem.attr('fill', textData.fill);\n\n if (typeof textData[\"class\"] !== 'undefined') {\n textElem.attr('class', textData[\"class\"]);\n }\n\n var span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.attr('fill', textData.fill);\n span.text(nText);\n return textElem;\n };\n\n var wrapLabel = memoize(function (label, maxWidth, config) {\n if (!label) {\n return label;\n }\n\n config = Object.assign({\n fontSize: 12,\n fontWeight: 400,\n fontFamily: 'Arial',\n joinWith: '
'\n }, config);\n\n if (_diagrams_common_common__WEBPACK_IMPORTED_MODULE_2__[\"default\"].lineBreakRegex.test(label)) {\n return label;\n }\n\n var words = label.split(' ');\n var completedLines = [];\n var nextLine = '';\n words.forEach(function (word, index) {\n var wordLength = calculateTextWidth(\"\".concat(word, \" \"), config);\n var nextLineLength = calculateTextWidth(nextLine, config);\n\n if (wordLength > maxWidth) {\n var _breakString = breakString(word, maxWidth, '-', config),\n hyphenatedStrings = _breakString.hyphenatedStrings,\n remainingWord = _breakString.remainingWord;\n\n completedLines.push.apply(completedLines, [nextLine].concat(_toConsumableArray(hyphenatedStrings)));\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(' ');\n }\n\n var currentWord = index + 1;\n var isLastWord = currentWord === words.length;\n\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter(function (line) {\n return line !== '';\n }).join(config.joinWith);\n }, function (label, maxWidth, config) {\n return \"\".concat(label, \"-\").concat(maxWidth, \"-\").concat(config.fontSize, \"-\").concat(config.fontWeight, \"-\").concat(config.fontFamily, \"-\").concat(config.joinWith);\n });\n var breakString = memoize(function (word, maxWidth) {\n var hyphenCharacter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '-';\n var config = arguments.length > 3 ? arguments[3] : undefined;\n config = Object.assign({\n fontSize: 12,\n fontWeight: 400,\n fontFamily: 'Arial',\n margin: 0\n }, config);\n var characters = word.split('');\n var lines = [];\n var currentLine = '';\n characters.forEach(function (character, index) {\n var nextLine = \"\".concat(currentLine).concat(character);\n var lineWidth = calculateTextWidth(nextLine, config);\n\n if (lineWidth >= maxWidth) {\n var currentCharacter = index + 1;\n var isLastLine = characters.length === currentCharacter;\n var hyphenatedNextLine = \"\".concat(nextLine).concat(hyphenCharacter);\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = '';\n } else {\n currentLine = nextLine;\n }\n });\n return {\n hyphenatedStrings: lines,\n remainingWord: currentLine\n };\n }, function (word, maxWidth) {\n var hyphenCharacter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '-';\n var config = arguments.length > 3 ? arguments[3] : undefined;\n return \"\".concat(word, \"-\").concat(maxWidth, \"-\").concat(hyphenCharacter, \"-\").concat(config.fontSize, \"-\").concat(config.fontWeight, \"-\").concat(config.fontFamily);\n });\n /**\n * This calculates the text's height, taking into account the wrap breaks and\n * both the statically configured height, width, and the length of the text (in pixels).\n *\n * If the wrapped text text has greater height, we extend the height, so it's\n * value won't overflow.\n *\n * @return - The height for the given text\n * @param text the text to measure\n * @param config - the config for fontSize, fontFamily, and fontWeight all impacting the resulting size\n */\n\n var calculateTextHeight = function calculateTextHeight(text, config) {\n config = Object.assign({\n fontSize: 12,\n fontWeight: 400,\n fontFamily: 'Arial',\n margin: 15\n }, config);\n return calculateTextDimensions(text, config).height;\n };\n /**\n * This calculates the width of the given text, font size and family.\n *\n * @return - The width for the given text\n * @param text - The text to calculate the width of\n * @param config - the config for fontSize, fontFamily, and fontWeight all impacting the resulting size\n */\n\n\n var calculateTextWidth = function calculateTextWidth(text, config) {\n config = Object.assign({\n fontSize: 12,\n fontWeight: 400,\n fontFamily: 'Arial'\n }, config);\n return calculateTextDimensions(text, config).width;\n };\n /**\n * This calculates the dimensions of the given text, font size, font family, font weight, and margins.\n *\n * @return - The width for the given text\n * @param text - The text to calculate the width of\n * @param config - the config for fontSize, fontFamily, fontWeight, and margin all impacting the resulting size\n */\n\n\n var calculateTextDimensions = memoize(function (text, config) {\n config = Object.assign({\n fontSize: 12,\n fontWeight: 400,\n fontFamily: 'Arial'\n }, config);\n var _config = config,\n fontSize = _config.fontSize,\n fontFamily = _config.fontFamily,\n fontWeight = _config.fontWeight;\n\n if (!text) {\n return {\n width: 0,\n height: 0\n };\n } // We can't really know if the user supplied font family will render on the user agent;\n // thus, we'll take the max width between the user supplied font family, and a default\n // of sans-serif.\n\n\n var fontFamilies = ['sans-serif', fontFamily];\n var lines = text.split(_diagrams_common_common__WEBPACK_IMPORTED_MODULE_2__[\"default\"].lineBreakRegex);\n var dims = [];\n var body = Object(d3__WEBPACK_IMPORTED_MODULE_1__[\"select\"])('body'); // We don't want to leak DOM elements - if a removal operation isn't available\n // for any reason, do not continue.\n\n if (!body.remove) {\n return {\n width: 0,\n height: 0,\n lineHeight: 0\n };\n }\n\n var g = body.append('svg');\n\n for (var _i = 0, _fontFamilies = fontFamilies; _i < _fontFamilies.length; _i++) {\n var _fontFamily = _fontFamilies[_i];\n var cheight = 0;\n var dim = {\n width: 0,\n height: 0,\n lineHeight: 0\n };\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var line = _step.value;\n var textObj = getTextObj();\n textObj.text = line;\n var textElem = drawSimpleText(g, textObj).style('font-size', fontSize).style('font-weight', fontWeight).style('font-family', _fontFamily);\n var bBox = (textElem._groups || textElem)[0][0].getBBox();\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cheight = Math.round(bBox.height);\n dim.height += cheight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator[\"return\"] != null) {\n _iterator[\"return\"]();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n dims.push(dim);\n }\n\n g.remove();\n var index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;\n return dims[index];\n }, function (text, config) {\n return \"\".concat(text, \"-\").concat(config.fontSize, \"-\").concat(config.fontWeight, \"-\").concat(config.fontFamily);\n });\n\n var d3Attrs = function d3Attrs(d3Elem, attrs) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = attrs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var attr = _step2.value;\n d3Elem.attr(attr[0], attr[1]);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2[\"return\"] != null) {\n _iterator2[\"return\"]();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n };\n\n var calculateSvgSizeAttrs = function calculateSvgSizeAttrs(height, width, useMaxWidth) {\n var attrs = new Map();\n attrs.set('height', height);\n\n if (useMaxWidth) {\n attrs.set('width', '100%');\n attrs.set('style', \"max-width: \".concat(width, \"px;\"));\n } else {\n attrs.set('width', width);\n }\n\n return attrs;\n };\n\n var configureSvgSize = function configureSvgSize(svgElem, height, width, useMaxWidth) {\n var attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n };\n\n var initIdGeneratior = function initIdGeneratior(deterministic, seed) {\n if (!deterministic) return {\n next: function next() {\n return Date.now();\n }\n };\n\n var iterator = /*#__PURE__*/function () {\n function iterator() {\n _classCallCheck(this, iterator);\n\n return this.count = seed ? seed.length : 0;\n }\n\n _createClass(iterator, [{\n key: \"next\",\n value: function next() {\n return this.count++;\n }\n }]);\n\n return iterator;\n }();\n\n return new iterator();\n };\n /* harmony default export */\n\n\n __webpack_exports__[\"default\"] = {\n assignWithDepth: assignWithDepth,\n wrapLabel: wrapLabel,\n calculateTextHeight: calculateTextHeight,\n calculateTextWidth: calculateTextWidth,\n calculateTextDimensions: calculateTextDimensions,\n calculateSvgSizeAttrs: calculateSvgSizeAttrs,\n configureSvgSize: configureSvgSize,\n detectInit: detectInit,\n detectDirective: detectDirective,\n detectType: detectType,\n isSubstringInArray: isSubstringInArray,\n interpolateToCurve: interpolateToCurve,\n calcLabelPosition: calcLabelPosition,\n calcCardinalityPosition: calcCardinalityPosition,\n calcTerminalLabelPosition: calcTerminalLabelPosition,\n formatUrl: formatUrl,\n getStylesFromArray: getStylesFromArray,\n generateId: generateId,\n random: random,\n memoize: memoize,\n runFunc: runFunc,\n initIdGeneratior: initIdGeneratior\n };\n /***/\n },\n\n /***/\n \"@braintree/sanitize-url\":\n /*!******************************************!*\\\n !*** external \"@braintree/sanitize-url\" ***!\n \\******************************************/\n\n /*! no static exports found */\n\n /***/\n function braintreeSanitizeUrl(module, exports) {\n module.exports = require(\"@braintree/sanitize-url\");\n /***/\n },\n\n /***/\n \"d3\":\n /*!*********************!*\\\n !*** external \"d3\" ***!\n \\*********************/\n\n /*! no static exports found */\n\n /***/\n function d3(module, exports) {\n module.exports = require(\"d3\");\n /***/\n },\n\n /***/\n \"dagre\":\n /*!************************!*\\\n !*** external \"dagre\" ***!\n \\************************/\n\n /*! no static exports found */\n\n /***/\n function dagre(module, exports) {\n module.exports = require(\"dagre\");\n /***/\n },\n\n /***/\n \"dagre-d3\":\n /*!***************************!*\\\n !*** external \"dagre-d3\" ***!\n \\***************************/\n\n /*! no static exports found */\n\n /***/\n function dagreD3(module, exports) {\n module.exports = require(\"dagre-d3\");\n /***/\n },\n\n /***/\n \"dagre-d3/lib/label/add-html-label.js\":\n /*!*******************************************************!*\\\n !*** external \"dagre-d3/lib/label/add-html-label.js\" ***!\n \\*******************************************************/\n\n /*! no static exports found */\n\n /***/\n function dagreD3LibLabelAddHtmlLabelJs(module, exports) {\n module.exports = require(\"dagre-d3/lib/label/add-html-label.js\");\n /***/\n },\n\n /***/\n \"entity-decode/browser\":\n /*!****************************************!*\\\n !*** external \"entity-decode/browser\" ***!\n \\****************************************/\n\n /*! no static exports found */\n\n /***/\n function entityDecodeBrowser(module, exports) {\n module.exports = require(\"entity-decode/browser\");\n /***/\n },\n\n /***/\n \"graphlib\":\n /*!***************************!*\\\n !*** external \"graphlib\" ***!\n \\***************************/\n\n /*! no static exports found */\n\n /***/\n function graphlib(module, exports) {\n module.exports = require(\"graphlib\");\n /***/\n },\n\n /***/\n \"khroma\":\n /*!*************************!*\\\n !*** external \"khroma\" ***!\n \\*************************/\n\n /*! no static exports found */\n\n /***/\n function khroma(module, exports) {\n module.exports = require(\"khroma\");\n /***/\n },\n\n /***/\n \"moment-mini\":\n /*!******************************!*\\\n !*** external \"moment-mini\" ***!\n \\******************************/\n\n /*! no static exports found */\n\n /***/\n function momentMini(module, exports) {\n module.exports = require(\"moment-mini\");\n /***/\n },\n\n /***/\n \"stylis\":\n /*!*************************!*\\\n !*** external \"stylis\" ***!\n \\*************************/\n\n /*! no static exports found */\n\n /***/\n function stylis(module, exports) {\n module.exports = require(\"stylis\");\n /***/\n }\n /******/\n\n })[\"default\"]\n );\n});","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\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 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 generator._invoke = 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 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 = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\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 this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n 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 method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (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\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' 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 Gp[iteratorSymbol] = function() {\n return this;\n };\n\n 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(object) {\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, 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 Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","/* PrismJS 1.22.0\nhttps://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+c+csharp+css-extras+git+go+groovy+java+json+json5+jsonp+kotlin+markup-templating+objectivec+php+python+ruby+swift+typescript+xml-doc&plugins=line-highlight+line-numbers+keep-markup+command-line+toolbar+copy-to-clipboard */\nvar _self = \"undefined\" != typeof window ? window : \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope ? self : {},\n Prism = function (u) {\n var c = /\\blang(?:uage)?-([\\w-]+)\\b/i,\n n = 0,\n M = {\n manual: u.Prism && u.Prism.manual,\n disableWorkerMessageHandler: u.Prism && u.Prism.disableWorkerMessageHandler,\n util: {\n encode: function e(n) {\n return n instanceof W ? new W(n.type, e(n.content), n.alias) : Array.isArray(n) ? n.map(e) : n.replace(/&/g, \"&\").replace(/= l.reach); k += y.value.length, y = y.next) {\n var b = y.value;\n if (t.length > n.length) return;\n\n if (!(b instanceof W)) {\n var x = 1;\n\n if (h && y != t.tail.prev) {\n m.lastIndex = k;\n var w = m.exec(n);\n if (!w) break;\n var A = w.index + (f && w[1] ? w[1].length : 0),\n P = w.index + w[0].length,\n S = k;\n\n for (S += y.value.length; S <= A;) {\n y = y.next, S += y.value.length;\n }\n\n if (S -= y.value.length, k = S, y.value instanceof W) continue;\n\n for (var E = y; E !== t.tail && (S < P || \"string\" == typeof E.value); E = E.next) {\n x++, S += E.value.length;\n }\n\n x--, b = n.slice(k, S), w.index -= k;\n } else {\n m.lastIndex = 0;\n var w = m.exec(b);\n }\n\n if (w) {\n f && (d = w[1] ? w[1].length : 0);\n var A = w.index + d,\n O = w[0].slice(d),\n P = A + O.length,\n L = b.slice(0, A),\n N = b.slice(P),\n j = k + b.length;\n l && j > l.reach && (l.reach = j);\n var C = y.prev;\n L && (C = I(t, C, L), k += L.length), z(t, C, x);\n\n var _ = new W(o, g ? M.tokenize(O, g) : O, v, O);\n\n y = I(t, C, _), N && I(t, y, N), 1 < x && e(n, t, r, y.prev, k, {\n cause: o + \",\" + u,\n reach: j\n });\n }\n }\n }\n }\n }\n }\n }(e, a, n, a.head, 0), function (e) {\n var n = [],\n t = e.head.next;\n\n for (; t !== e.tail;) {\n n.push(t.value), t = t.next;\n }\n\n return n;\n }(a);\n },\n hooks: {\n all: {},\n add: function add(e, n) {\n var t = M.hooks.all;\n t[e] = t[e] || [], t[e].push(n);\n },\n run: function run(e, n) {\n var t = M.hooks.all[e];\n if (t && t.length) for (var r, a = 0; r = t[a++];) {\n r(n);\n }\n }\n },\n Token: W\n };\n\n function W(e, n, t, r) {\n this.type = e, this.content = n, this.alias = t, this.length = 0 | (r || \"\").length;\n }\n\n function i() {\n var e = {\n value: null,\n prev: null,\n next: null\n },\n n = {\n value: null,\n prev: e,\n next: null\n };\n e.next = n, this.head = e, this.tail = n, this.length = 0;\n }\n\n function I(e, n, t) {\n var r = n.next,\n a = {\n value: t,\n prev: n,\n next: r\n };\n return n.next = a, r.prev = a, e.length++, a;\n }\n\n function z(e, n, t) {\n for (var r = n.next, a = 0; a < t && r !== e.tail; a++) {\n r = r.next;\n }\n\n (n.next = r).prev = n, e.length -= a;\n }\n\n if (u.Prism = M, W.stringify = function n(e, t) {\n if (\"string\" == typeof e) return e;\n\n if (Array.isArray(e)) {\n var r = \"\";\n return e.forEach(function (e) {\n r += n(e, t);\n }), r;\n }\n\n var a = {\n type: e.type,\n content: n(e.content, t),\n tag: \"span\",\n classes: [\"token\", e.type],\n attributes: {},\n language: t\n },\n i = e.alias;\n i && (Array.isArray(i) ? Array.prototype.push.apply(a.classes, i) : a.classes.push(i)), M.hooks.run(\"wrap\", a);\n var l = \"\";\n\n for (var o in a.attributes) {\n l += \" \" + o + '=\"' + (a.attributes[o] || \"\").replace(/\"/g, \""\") + '\"';\n }\n\n return \"<\" + a.tag + ' class=\"' + a.classes.join(\" \") + '\"' + l + \">\" + a.content + \"\" + a.tag + \">\";\n }, !u.document) return u.addEventListener && (M.disableWorkerMessageHandler || u.addEventListener(\"message\", function (e) {\n var n = JSON.parse(e.data),\n t = n.language,\n r = n.code,\n a = n.immediateClose;\n u.postMessage(M.highlight(r, M.languages[t], t)), a && u.close();\n }, !1)), M;\n var e = M.util.currentScript();\n\n function t() {\n M.manual || M.highlightAll();\n }\n\n if (e && (M.filename = e.src, e.hasAttribute(\"data-manual\") && (M.manual = !0)), !M.manual) {\n var r = document.readyState;\n \"loading\" === r || \"interactive\" === r && e && e.defer ? document.addEventListener(\"DOMContentLoaded\", t) : window.requestAnimationFrame ? window.requestAnimationFrame(t) : window.setTimeout(t, 16);\n }\n\n return M;\n}(_self);\n\n\"undefined\" != typeof module && module.exports && (module.exports = Prism), \"undefined\" != typeof global && (global.Prism = Prism);\nPrism.languages.markup = {\n comment: //,\n prolog: /<\\?[\\s\\S]+?\\?>/,\n doctype: {\n pattern: /\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|)*\\]\\s*)?>/i,\n greedy: !0,\n inside: {\n \"internal-subset\": {\n pattern: /(\\[)[\\s\\S]+(?=\\]>$)/,\n lookbehind: !0,\n greedy: !0,\n inside: null\n },\n string: {\n pattern: /\"[^\"]*\"|'[^']*'/,\n greedy: !0\n },\n punctuation: /^$|[[\\]]/,\n \"doctype-tag\": /^DOCTYPE/,\n name: /[^\\s<>'\"]+/\n }\n },\n cdata: //i,\n tag: {\n pattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n greedy: !0,\n inside: {\n tag: {\n pattern: /^<\\/?[^\\s>\\/]+/,\n inside: {\n punctuation: /^<\\/?/,\n namespace: /^[^\\s>\\/:]+:/\n }\n },\n \"attr-value\": {\n pattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n inside: {\n punctuation: [{\n pattern: /^=/,\n alias: \"attr-equals\"\n }, /\"|'/]\n }\n },\n punctuation: /\\/?>/,\n \"attr-name\": {\n pattern: /[^\\s>\\/]+/,\n inside: {\n namespace: /^[^\\s>\\/:]+:/\n }\n }\n }\n },\n entity: [{\n pattern: /&[\\da-z]{1,8};/i,\n alias: \"named-entity\"\n }, /?[\\da-f]{1,8};/i]\n}, Prism.languages.markup.tag.inside[\"attr-value\"].inside.entity = Prism.languages.markup.entity, Prism.languages.markup.doctype.inside[\"internal-subset\"].inside = Prism.languages.markup, Prism.hooks.add(\"wrap\", function (a) {\n \"entity\" === a.type && (a.attributes.title = a.content.replace(/&/, \"&\"));\n}), Object.defineProperty(Prism.languages.markup.tag, \"addInlined\", {\n value: function value(a, e) {\n var s = {};\n s[\"language-\" + e] = {\n pattern: /(^$)/i,\n lookbehind: !0,\n inside: Prism.languages[e]\n }, s.cdata = /^$/i;\n var n = {\n \"included-cdata\": {\n pattern: //i,\n inside: s\n }\n };\n n[\"language-\" + e] = {\n pattern: /[\\s\\S]+/,\n inside: Prism.languages[e]\n };\n var t = {};\n t[a] = {\n pattern: RegExp(\"(<__[^]*?>)(?:))*\\\\]\\\\]>|(?!)\".replace(/__/g, function () {\n return a;\n }), \"i\"),\n lookbehind: !0,\n greedy: !0,\n inside: n\n }, Prism.languages.insertBefore(\"markup\", \"cdata\", t);\n }\n}), Prism.languages.html = Prism.languages.markup, Prism.languages.mathml = Prism.languages.markup, Prism.languages.svg = Prism.languages.markup, Prism.languages.xml = Prism.languages.extend(\"markup\", {}), Prism.languages.ssml = Prism.languages.xml, Prism.languages.atom = Prism.languages.xml, Prism.languages.rss = Prism.languages.xml;\n!function (e) {\n var t = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n e.languages.css = {\n comment: /\\/\\*[\\s\\S]*?\\*\\//,\n atrule: {\n pattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n inside: {\n rule: /^@[\\w-]+/,\n \"selector-function-argument\": {\n pattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n lookbehind: !0,\n alias: \"selector\"\n },\n keyword: {\n pattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n lookbehind: !0\n }\n }\n },\n url: {\n pattern: RegExp(\"\\\\burl\\\\((?:\" + t.source + \"|(?:[^\\\\\\\\\\r\\n()\\\"']|\\\\\\\\[^])*)\\\\)\", \"i\"),\n greedy: !0,\n inside: {\n \"function\": /^url/i,\n punctuation: /^\\(|\\)$/,\n string: {\n pattern: RegExp(\"^\" + t.source + \"$\"),\n alias: \"url\"\n }\n }\n },\n selector: RegExp(\"[^{}\\\\s](?:[^{};\\\"']|\" + t.source + \")*?(?=\\\\s*\\\\{)\"),\n string: {\n pattern: t,\n greedy: !0\n },\n property: /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n important: /!important\\b/i,\n \"function\": /[-a-z0-9]+(?=\\()/i,\n punctuation: /[(){};:,]/\n }, e.languages.css.atrule.inside.rest = e.languages.css;\n var s = e.languages.markup;\n s && (s.tag.addInlined(\"style\", \"css\"), e.languages.insertBefore(\"inside\", \"attr-value\", {\n \"style-attr\": {\n pattern: /(^|[\"'\\s])style\\s*=\\s*(?:\"[^\"]*\"|'[^']*')/i,\n lookbehind: !0,\n inside: {\n \"attr-value\": {\n pattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n inside: {\n style: {\n pattern: /([\"'])[\\s\\S]+(?=[\"']$)/,\n lookbehind: !0,\n alias: \"language-css\",\n inside: e.languages.css\n },\n punctuation: [{\n pattern: /^=/,\n alias: \"attr-equals\"\n }, /\"|'/]\n }\n },\n \"attr-name\": /^style/i\n }\n }\n }, s.tag));\n}(Prism);\nPrism.languages.clike = {\n comment: [{\n pattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n lookbehind: !0\n }, {\n pattern: /(^|[^\\\\:])\\/\\/.*/,\n lookbehind: !0,\n greedy: !0\n }],\n string: {\n pattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n greedy: !0\n },\n \"class-name\": {\n pattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n lookbehind: !0,\n inside: {\n punctuation: /[.\\\\]/\n }\n },\n keyword: /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n \"boolean\": /\\b(?:true|false)\\b/,\n \"function\": /\\w+(?=\\()/,\n number: /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n operator: /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n punctuation: /[{}[\\];(),.:]/\n};\nPrism.languages.javascript = Prism.languages.extend(\"clike\", {\n \"class-name\": [Prism.languages.clike[\"class-name\"], {\n pattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n lookbehind: !0\n }],\n keyword: [{\n pattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n lookbehind: !0\n }, {\n pattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\\s*[\\[$\\w\\xA0-\\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n lookbehind: !0\n }],\n number: /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n \"function\": /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n operator: /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n}), Prism.languages.javascript[\"class-name\"][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/, Prism.languages.insertBefore(\"javascript\", \"keyword\", {\n regex: {\n pattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n lookbehind: !0,\n greedy: !0,\n inside: {\n \"regex-source\": {\n pattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n lookbehind: !0,\n alias: \"language-regex\",\n inside: Prism.languages.regex\n },\n \"regex-flags\": /[a-z]+$/,\n \"regex-delimiter\": /^\\/|\\/$/\n }\n },\n \"function-variable\": {\n pattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n alias: \"function\"\n },\n parameter: [{\n pattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n lookbehind: !0,\n inside: Prism.languages.javascript\n }, {\n pattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n inside: Prism.languages.javascript\n }, {\n pattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n lookbehind: !0,\n inside: Prism.languages.javascript\n }, {\n pattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n lookbehind: !0,\n inside: Prism.languages.javascript\n }],\n constant: /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n}), Prism.languages.insertBefore(\"javascript\", \"string\", {\n \"template-string\": {\n pattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n greedy: !0,\n inside: {\n \"template-punctuation\": {\n pattern: /^`|`$/,\n alias: \"string\"\n },\n interpolation: {\n pattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n lookbehind: !0,\n inside: {\n \"interpolation-punctuation\": {\n pattern: /^\\${|}$/,\n alias: \"punctuation\"\n },\n rest: Prism.languages.javascript\n }\n },\n string: /[\\s\\S]+/\n }\n }\n}), Prism.languages.markup && Prism.languages.markup.tag.addInlined(\"script\", \"javascript\"), Prism.languages.js = Prism.languages.javascript;\n!function (e) {\n var t = \"\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b\",\n n = {\n pattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n lookbehind: !0,\n alias: \"punctuation\",\n inside: null\n },\n a = {\n bash: n,\n environment: {\n pattern: RegExp(\"\\\\$\" + t),\n alias: \"constant\"\n },\n variable: [{\n pattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n greedy: !0,\n inside: {\n variable: [{\n pattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n lookbehind: !0\n }, /^\\$\\(\\(/],\n number: /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n operator: /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n punctuation: /\\(\\(?|\\)\\)?|,|;/\n }\n }, {\n pattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n greedy: !0,\n inside: {\n variable: /^\\$\\(|^`|\\)$|`$/\n }\n }, {\n pattern: /\\$\\{[^}]+\\}/,\n greedy: !0,\n inside: {\n operator: /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n punctuation: /[\\[\\]]/,\n environment: {\n pattern: RegExp(\"(\\\\{)\" + t),\n lookbehind: !0,\n alias: \"constant\"\n }\n }\n }, /\\$(?:\\w+|[#?*!@$])/],\n entity: /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/\n };\n e.languages.bash = {\n shebang: {\n pattern: /^#!\\s*\\/.*/,\n alias: \"important\"\n },\n comment: {\n pattern: /(^|[^\"{\\\\$])#.*/,\n lookbehind: !0\n },\n \"function-name\": [{\n pattern: /(\\bfunction\\s+)\\w+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n lookbehind: !0,\n alias: \"function\"\n }, {\n pattern: /\\b\\w+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n alias: \"function\"\n }],\n \"for-or-select\": {\n pattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n alias: \"variable\",\n lookbehind: !0\n },\n \"assign-left\": {\n pattern: /(^|[\\s;|&]|[<>]\\()\\w+(?=\\+?=)/,\n inside: {\n environment: {\n pattern: RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\" + t),\n lookbehind: !0,\n alias: \"constant\"\n }\n },\n alias: \"variable\",\n lookbehind: !0\n },\n string: [{\n pattern: /((?:^|[^<])<<-?\\s*)(\\w+?)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n lookbehind: !0,\n greedy: !0,\n inside: a\n }, {\n pattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n lookbehind: !0,\n greedy: !0,\n inside: {\n bash: n\n }\n }, {\n pattern: /(^|[^\\\\](?:\\\\\\\\)*)([\"'])(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|(?!\\2)[^\\\\`$])*\\2/,\n lookbehind: !0,\n greedy: !0,\n inside: a\n }],\n environment: {\n pattern: RegExp(\"\\\\$?\" + t),\n alias: \"constant\"\n },\n variable: a.variable,\n \"function\": {\n pattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n lookbehind: !0\n },\n keyword: {\n pattern: /(^|[\\s;|&]|[<>]\\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\\s;|&])/,\n lookbehind: !0\n },\n builtin: {\n pattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\\s;|&])/,\n lookbehind: !0,\n alias: \"class-name\"\n },\n \"boolean\": {\n pattern: /(^|[\\s;|&]|[<>]\\()(?:true|false)(?=$|[)\\s;|&])/,\n lookbehind: !0\n },\n \"file-descriptor\": {\n pattern: /\\B&\\d\\b/,\n alias: \"important\"\n },\n operator: {\n pattern: /\\d?<>|>\\||\\+=|==?|!=?|=~|<<[<-]?|[&\\d]?>>|\\d?[<>]&?|&[>&]?|\\|[&|]?|<=?|>=?/,\n inside: {\n \"file-descriptor\": {\n pattern: /^\\d/,\n alias: \"important\"\n }\n }\n },\n punctuation: /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n number: {\n pattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n lookbehind: !0\n }\n }, n.inside = e.languages.bash;\n\n for (var s = [\"comment\", \"function-name\", \"for-or-select\", \"assign-left\", \"string\", \"environment\", \"function\", \"keyword\", \"builtin\", \"boolean\", \"file-descriptor\", \"operator\", \"punctuation\", \"number\"], i = a.variable[1].inside, o = 0; o < s.length; o++) {\n i[s[o]] = e.languages.bash[s[o]];\n }\n\n e.languages.shell = e.languages.bash;\n}(Prism);\nPrism.languages.c = Prism.languages.extend(\"clike\", {\n comment: {\n pattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n greedy: !0\n },\n \"class-name\": {\n pattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+/,\n lookbehind: !0\n },\n keyword: /\\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\\b/,\n \"function\": /[a-z_]\\w*(?=\\s*\\()/i,\n operator: />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/,\n number: /(?:\\b0x(?:[\\da-f]+\\.?[\\da-f]*|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]*/i\n}), Prism.languages.insertBefore(\"c\", \"string\", {\n macro: {\n pattern: /(^\\s*)#\\s*[a-z]+(?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n lookbehind: !0,\n greedy: !0,\n alias: \"property\",\n inside: {\n string: [{\n pattern: /^(#\\s*include\\s*)<[^>]+>/,\n lookbehind: !0\n }, Prism.languages.c.string],\n comment: Prism.languages.c.comment,\n directive: {\n pattern: /^(#\\s*)[a-z]+/,\n lookbehind: !0,\n alias: \"keyword\"\n },\n \"directive-hash\": /^#/,\n punctuation: /##|\\\\(?=[\\r\\n])/,\n expression: {\n pattern: /\\S[\\s\\S]*/,\n inside: Prism.languages.c\n }\n }\n },\n constant: /\\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\\b/\n}), delete Prism.languages.c[\"boolean\"];\n!function (s) {\n function a(e, s) {\n return e.replace(/<<(\\d+)>>/g, function (e, n) {\n return \"(?:\" + s[+n] + \")\";\n });\n }\n\n function t(e, n, s) {\n return RegExp(a(e, n), s || \"\");\n }\n\n function e(e, n) {\n for (var s = 0; s < n; s++) {\n e = e.replace(/<>/g, function () {\n return \"(?:\" + e + \")\";\n });\n }\n\n return e.replace(/<>/g, \"[^\\\\s\\\\S]\");\n }\n\n var n = \"bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void\",\n i = \"class enum interface struct\",\n r = \"add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where\",\n o = \"abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield\";\n\n function l(e) {\n return \"\\\\b(?:\" + e.trim().replace(/ /g, \"|\") + \")\\\\b\";\n }\n\n var d = l(i),\n p = RegExp(l(n + \" \" + i + \" \" + r + \" \" + o)),\n c = l(i + \" \" + r + \" \" + o),\n u = l(n + \" \" + i + \" \" + o),\n g = e(\"<(?:[^<>;=+\\\\-*/%&|^]|<>)*>\", 2),\n b = e(\"\\\\((?:[^()]|<>)*\\\\)\", 2),\n h = \"@?\\\\b[A-Za-z_]\\\\w*\\\\b\",\n f = a(\"<<0>>(?:\\\\s*<<1>>)?\", [h, g]),\n m = a(\"(?!<<0>>)<<1>>(?:\\\\s*\\\\.\\\\s*<<1>>)*\", [c, f]),\n k = \"\\\\[\\\\s*(?:,\\\\s*)*\\\\]\",\n y = a(\"<<0>>(?:\\\\s*(?:\\\\?\\\\s*)?<<1>>)*(?:\\\\s*\\\\?)?\", [m, k]),\n w = a(\"(?:<<0>>|<<1>>)(?:\\\\s*(?:\\\\?\\\\s*)?<<2>>)*(?:\\\\s*\\\\?)?\", [a(\"\\\\(<<0>>+(?:,<<0>>+)+\\\\)\", [a(\"[^,()<>[\\\\];=+\\\\-*/%&|^]|<<0>>|<<1>>|<<2>>\", [g, b, k])]), m, k]),\n v = {\n keyword: p,\n punctuation: /[<>()?,.:[\\]]/\n },\n x = \"'(?:[^\\r\\n'\\\\\\\\]|\\\\\\\\.|\\\\\\\\[Uux][\\\\da-fA-F]{1,8})'\",\n $ = '\"(?:\\\\\\\\.|[^\\\\\\\\\"\\r\\n])*\"';\n s.languages.csharp = s.languages.extend(\"clike\", {\n string: [{\n pattern: t(\"(^|[^$\\\\\\\\])<<0>>\", ['@\"(?:\"\"|\\\\\\\\[^]|[^\\\\\\\\\"])*\"(?!\")']),\n lookbehind: !0,\n greedy: !0\n }, {\n pattern: t(\"(^|[^@$\\\\\\\\])<<0>>\", [$]),\n lookbehind: !0,\n greedy: !0\n }, {\n pattern: RegExp(x),\n greedy: !0,\n alias: \"character\"\n }],\n \"class-name\": [{\n pattern: t(\"(\\\\busing\\\\s+static\\\\s+)<<0>>(?=\\\\s*;)\", [m]),\n lookbehind: !0,\n inside: v\n }, {\n pattern: t(\"(\\\\busing\\\\s+<<0>>\\\\s*=\\\\s*)<<1>>(?=\\\\s*;)\", [h, w]),\n lookbehind: !0,\n inside: v\n }, {\n pattern: t(\"(\\\\busing\\\\s+)<<0>>(?=\\\\s*=)\", [h]),\n lookbehind: !0\n }, {\n pattern: t(\"(\\\\b<<0>>\\\\s+)<<1>>\", [d, f]),\n lookbehind: !0,\n inside: v\n }, {\n pattern: t(\"(\\\\bcatch\\\\s*\\\\(\\\\s*)<<0>>\", [m]),\n lookbehind: !0,\n inside: v\n }, {\n pattern: t(\"(\\\\bwhere\\\\s+)<<0>>\", [h]),\n lookbehind: !0\n }, {\n pattern: t(\"(\\\\b(?:is(?:\\\\s+not)?|as)\\\\s+)<<0>>\", [y]),\n lookbehind: !0,\n inside: v\n }, {\n pattern: t(\"\\\\b<<0>>(?=\\\\s+(?!<<1>>)<<2>>(?:\\\\s*[=,;:{)\\\\]]|\\\\s+(?:in|when)\\\\b))\", [w, u, h]),\n inside: v\n }],\n keyword: p,\n number: /(?:\\b0(?:x[\\da-f_]*[\\da-f]|b[01_]*[01])|(?:\\B\\.\\d+(?:_+\\d+)*|\\b\\d+(?:_+\\d+)*(?:\\.\\d+(?:_+\\d+)*)?)(?:e[-+]?\\d+(?:_+\\d+)*)?)(?:ul|lu|[dflmu])?\\b/i,\n operator: />>=?|<<=?|[-=]>|([-+&|])\\1|~|\\?\\?=?|[-+*/%&|^!=<>]=?/,\n punctuation: /\\?\\.?|::|[{}[\\];(),.:]/\n }), s.languages.insertBefore(\"csharp\", \"number\", {\n range: {\n pattern: /\\.\\./,\n alias: \"operator\"\n }\n }), s.languages.insertBefore(\"csharp\", \"punctuation\", {\n \"named-parameter\": {\n pattern: t(\"([(,]\\\\s*)<<0>>(?=\\\\s*:)\", [h]),\n lookbehind: !0,\n alias: \"punctuation\"\n }\n }), s.languages.insertBefore(\"csharp\", \"class-name\", {\n namespace: {\n pattern: t(\"(\\\\b(?:namespace|using)\\\\s+)<<0>>(?:\\\\s*\\\\.\\\\s*<<0>>)*(?=\\\\s*[;{])\", [h]),\n lookbehind: !0,\n inside: {\n punctuation: /\\./\n }\n },\n \"type-expression\": {\n pattern: t(\"(\\\\b(?:default|typeof|sizeof)\\\\s*\\\\(\\\\s*)(?:[^()\\\\s]|\\\\s(?!\\\\s*\\\\))|<<0>>)*(?=\\\\s*\\\\))\", [b]),\n lookbehind: !0,\n alias: \"class-name\",\n inside: v\n },\n \"return-type\": {\n pattern: t(\"<<0>>(?=\\\\s+(?:<<1>>\\\\s*(?:=>|[({]|\\\\.\\\\s*this\\\\s*\\\\[)|this\\\\s*\\\\[))\", [w, m]),\n inside: v,\n alias: \"class-name\"\n },\n \"constructor-invocation\": {\n pattern: t(\"(\\\\bnew\\\\s+)<<0>>(?=\\\\s*[[({])\", [w]),\n lookbehind: !0,\n inside: v,\n alias: \"class-name\"\n },\n \"generic-method\": {\n pattern: t(\"<<0>>\\\\s*<<1>>(?=\\\\s*\\\\()\", [h, g]),\n inside: {\n \"function\": t(\"^<<0>>\", [h]),\n generic: {\n pattern: RegExp(g),\n alias: \"class-name\",\n inside: v\n }\n }\n },\n \"type-list\": {\n pattern: t(\"\\\\b((?:<<0>>\\\\s+<<1>>|where\\\\s+<<2>>)\\\\s*:\\\\s*)(?:<<3>>|<<4>>)(?:\\\\s*,\\\\s*(?:<<3>>|<<4>>))*(?=\\\\s*(?:where|[{;]|=>|$))\", [d, f, h, w, p.source]),\n lookbehind: !0,\n inside: {\n keyword: p,\n \"class-name\": {\n pattern: RegExp(w),\n greedy: !0,\n inside: v\n },\n punctuation: /,/\n }\n },\n preprocessor: {\n pattern: /(^\\s*)#.*/m,\n lookbehind: !0,\n alias: \"property\",\n inside: {\n directive: {\n pattern: /(\\s*#)\\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\\b/,\n lookbehind: !0,\n alias: \"keyword\"\n }\n }\n }\n });\n\n var _ = $ + \"|\" + x,\n B = a(\"/(?![*/])|//[^\\r\\n]*[\\r\\n]|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/|<<0>>\", [_]),\n E = e(a(\"[^\\\"'/()]|<<0>>|\\\\(<>*\\\\)\", [B]), 2),\n R = \"\\\\b(?:assembly|event|field|method|module|param|property|return|type)\\\\b\",\n P = a(\"<<0>>(?:\\\\s*\\\\(<<1>>*\\\\))?\", [m, E]);\n\n s.languages.insertBefore(\"csharp\", \"class-name\", {\n attribute: {\n pattern: t(\"((?:^|[^\\\\s\\\\w>)?])\\\\s*\\\\[\\\\s*)(?:<<0>>\\\\s*:\\\\s*)?<<1>>(?:\\\\s*,\\\\s*<<1>>)*(?=\\\\s*\\\\])\", [R, P]),\n lookbehind: !0,\n greedy: !0,\n inside: {\n target: {\n pattern: t(\"^<<0>>(?=\\\\s*:)\", [R]),\n alias: \"keyword\"\n },\n \"attribute-arguments\": {\n pattern: t(\"\\\\(<<0>>*\\\\)\", [E]),\n inside: s.languages.csharp\n },\n \"class-name\": {\n pattern: RegExp(m),\n inside: {\n punctuation: /\\./\n }\n },\n punctuation: /[:,]/\n }\n }\n });\n var z = \":[^}\\r\\n]+\",\n S = e(a(\"[^\\\"'/()]|<<0>>|\\\\(<>*\\\\)\", [B]), 2),\n j = a(\"\\\\{(?!\\\\{)(?:(?![}:])<<0>>)*<<1>>?\\\\}\", [S, z]),\n A = e(a(\"[^\\\"'/()]|/(?!\\\\*)|/\\\\*(?:[^*]|\\\\*(?!/))*\\\\*/|<<0>>|\\\\(<>*\\\\)\", [_]), 2),\n F = a(\"\\\\{(?!\\\\{)(?:(?![}:])<<0>>)*<<1>>?\\\\}\", [A, z]);\n\n function U(e, n) {\n return {\n interpolation: {\n pattern: t(\"((?:^|[^{])(?:\\\\{\\\\{)*)<<0>>\", [e]),\n lookbehind: !0,\n inside: {\n \"format-string\": {\n pattern: t(\"(^\\\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\\\}$)\", [n, z]),\n lookbehind: !0,\n inside: {\n punctuation: /^:/\n }\n },\n punctuation: /^\\{|\\}$/,\n expression: {\n pattern: /[\\s\\S]+/,\n alias: \"language-csharp\",\n inside: s.languages.csharp\n }\n }\n },\n string: /[\\s\\S]+/\n };\n }\n\n s.languages.insertBefore(\"csharp\", \"string\", {\n \"interpolation-string\": [{\n pattern: t('(^|[^\\\\\\\\])(?:\\\\$@|@\\\\$)\"(?:\"\"|\\\\\\\\[^]|\\\\{\\\\{|<<0>>|[^\\\\\\\\{\"])*\"', [j]),\n lookbehind: !0,\n greedy: !0,\n inside: U(j, S)\n }, {\n pattern: t('(^|[^@\\\\\\\\])\\\\$\"(?:\\\\\\\\.|\\\\{\\\\{|<<0>>|[^\\\\\\\\\"{])*\"', [F]),\n lookbehind: !0,\n greedy: !0,\n inside: U(F, A)\n }]\n });\n}(Prism), Prism.languages.dotnet = Prism.languages.cs = Prism.languages.csharp;\n!function (e) {\n var a,\n n = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n e.languages.css.selector = {\n pattern: e.languages.css.selector,\n inside: a = {\n \"pseudo-element\": /:(?:after|before|first-letter|first-line|selection)|::[-\\w]+/,\n \"pseudo-class\": /:[-\\w]+/,\n \"class\": /\\.[-\\w]+/,\n id: /#[-\\w]+/,\n attribute: {\n pattern: RegExp(\"\\\\[(?:[^[\\\\]\\\"']|\" + n.source + \")*\\\\]\"),\n greedy: !0,\n inside: {\n punctuation: /^\\[|\\]$/,\n \"case-sensitivity\": {\n pattern: /(\\s)[si]$/i,\n lookbehind: !0,\n alias: \"keyword\"\n },\n namespace: {\n pattern: /^(\\s*)[-*\\w\\xA0-\\uFFFF]*\\|(?!=)/,\n lookbehind: !0,\n inside: {\n punctuation: /\\|$/\n }\n },\n \"attr-name\": {\n pattern: /^(\\s*)[-\\w\\xA0-\\uFFFF]+/,\n lookbehind: !0\n },\n \"attr-value\": [n, {\n pattern: /(=\\s*)[-\\w\\xA0-\\uFFFF]+(?=\\s*$)/,\n lookbehind: !0\n }],\n operator: /[|~*^$]?=/\n }\n },\n \"n-th\": [{\n pattern: /(\\(\\s*)[+-]?\\d*[\\dn](?:\\s*[+-]\\s*\\d+)?(?=\\s*\\))/,\n lookbehind: !0,\n inside: {\n number: /[\\dn]+/,\n operator: /[+-]/\n }\n }, {\n pattern: /(\\(\\s*)(?:even|odd)(?=\\s*\\))/i,\n lookbehind: !0\n }],\n combinator: />|\\+|~|\\|\\|/,\n punctuation: /[(),]/\n }\n }, e.languages.css.atrule.inside[\"selector-function-argument\"].inside = a, e.languages.insertBefore(\"css\", \"property\", {\n variable: {\n pattern: /(^|[^-\\w\\xA0-\\uFFFF])--[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*/i,\n lookbehind: !0\n }\n });\n var r = {\n pattern: /(\\b\\d+)(?:%|[a-z]+\\b)/,\n lookbehind: !0\n },\n i = {\n pattern: /(^|[^\\w.-])-?\\d*\\.?\\d+/,\n lookbehind: !0\n };\n e.languages.insertBefore(\"css\", \"function\", {\n operator: {\n pattern: /(\\s)[+\\-*\\/](?=\\s)/,\n lookbehind: !0\n },\n hexcode: {\n pattern: /\\B#(?:[\\da-f]{1,2}){3,4}\\b/i,\n alias: \"color\"\n },\n color: [/\\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|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|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\\b/i, {\n pattern: /\\b(?:rgb|hsl)\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\)\\B|\\b(?:rgb|hsl)a\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*,\\s*(?:0|0?\\.\\d+|1)\\s*\\)\\B/i,\n inside: {\n unit: r,\n number: i,\n \"function\": /[\\w-]+(?=\\()/,\n punctuation: /[(),]/\n }\n }],\n entity: /\\\\[\\da-f]{1,8}/i,\n unit: r,\n number: i\n });\n}(Prism);\nPrism.languages.git = {\n comment: /^#.*/m,\n deleted: /^[-–].*/m,\n inserted: /^\\+.*/m,\n string: /(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/m,\n command: {\n pattern: /^.*\\$ git .*$/m,\n inside: {\n parameter: /\\s--?\\w+/m\n }\n },\n coord: /^@@.*@@$/m,\n commit_sha1: /^commit \\w{40}$/m\n};\nPrism.languages.go = Prism.languages.extend(\"clike\", {\n keyword: /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n builtin: /\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b/,\n \"boolean\": /\\b(?:_|iota|nil|true|false)\\b/,\n operator: /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n number: /(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?/i,\n string: {\n pattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n greedy: !0\n }\n}), delete Prism.languages.go[\"class-name\"];\nPrism.languages.groovy = Prism.languages.extend(\"clike\", {\n string: [{\n pattern: /(\"\"\"|''')(?:[^\\\\]|\\\\[\\s\\S])*?\\1|\\$\\/(?:[^/$]|\\$(?:[/$]|(?![/$]))|\\/(?!\\$))*\\/\\$/,\n greedy: !0\n }, {\n pattern: /([\"'/])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n greedy: !0\n }],\n keyword: /\\b(?:as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\\b/,\n number: /\\b(?:0b[01_]+|0x[\\da-f_]+(?:\\.[\\da-f_p\\-]+)?|[\\d_]+(?:\\.[\\d_]+)?(?:e[+-]?[\\d]+)?)[glidf]?\\b/i,\n operator: {\n pattern: /(^|[^.])(?:~|==?~?|\\?[.:]?|\\*(?:[.=]|\\*=?)?|\\.[@&]|\\.\\.<|\\.\\.(?!\\.)|-[-=>]?|\\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\\|[|=]?|\\/=?|\\^=?|%=?)/,\n lookbehind: !0\n },\n punctuation: /\\.+|[{}[\\];(),:$]/\n}), Prism.languages.insertBefore(\"groovy\", \"string\", {\n shebang: {\n pattern: /#!.+/,\n alias: \"comment\"\n }\n}), Prism.languages.insertBefore(\"groovy\", \"punctuation\", {\n \"spock-block\": /\\b(?:setup|given|when|then|and|cleanup|expect|where):/\n}), Prism.languages.insertBefore(\"groovy\", \"function\", {\n annotation: {\n pattern: /(^|[^.])@\\w+/,\n lookbehind: !0,\n alias: \"punctuation\"\n }\n}), Prism.hooks.add(\"wrap\", function (e) {\n if (\"groovy\" === e.language && \"string\" === e.type) {\n var t = e.content[0];\n\n if (\"'\" != t) {\n var n = /([^\\\\])(?:\\$(?:\\{.*?\\}|[\\w.]+))/;\n \"$\" === t && (n = /([^\\$])(?:\\$(?:\\{.*?\\}|[\\w.]+))/), e.content = e.content.replace(/</g, \"<\").replace(/&/g, \"&\"), e.content = Prism.highlight(e.content, {\n expression: {\n pattern: n,\n lookbehind: !0,\n inside: Prism.languages.groovy\n }\n }), e.classes.push(\"/\" === t ? \"regex\" : \"gstring\");\n }\n }\n});\n!function (e) {\n var t = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/,\n a = /\\b[A-Z](?:\\w*[a-z]\\w*)?\\b/;\n e.languages.java = e.languages.extend(\"clike\", {\n \"class-name\": [a, /\\b[A-Z]\\w*(?=\\s+\\w+\\s*[;,=())])/],\n keyword: t,\n \"function\": [e.languages.clike[\"function\"], {\n pattern: /(\\:\\:)[a-z_]\\w*/,\n lookbehind: !0\n }],\n number: /\\b0b[01][01_]*L?\\b|\\b0x[\\da-f_]*\\.?[\\da-f_p+-]+\\b|(?:\\b\\d[\\d_]*\\.?[\\d_]*|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n operator: {\n pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n lookbehind: !0\n }\n }), e.languages.insertBefore(\"java\", \"string\", {\n \"triple-quoted-string\": {\n pattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n greedy: !0,\n alias: \"string\"\n }\n }), e.languages.insertBefore(\"java\", \"class-name\", {\n annotation: {\n alias: \"punctuation\",\n pattern: /(^|[^.])@\\w+/,\n lookbehind: !0\n },\n namespace: {\n pattern: RegExp(\"(\\\\b(?:exports|import(?:\\\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\\\s+)(?!)[a-z]\\\\w*(?:\\\\.[a-z]\\\\w*)*\\\\.?\".replace(//g, function () {\n return t.source;\n })),\n lookbehind: !0,\n inside: {\n punctuation: /\\./\n }\n },\n generics: {\n pattern: /<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<[\\w\\s,.&?]*>)*>)*>)*>/,\n inside: {\n \"class-name\": a,\n keyword: t,\n punctuation: /[<>(),.:]/,\n operator: /[?&|]/\n }\n }\n });\n}(Prism);\nPrism.languages.json = {\n property: {\n pattern: /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n greedy: !0\n },\n string: {\n pattern: /\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n greedy: !0\n },\n comment: {\n pattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n greedy: !0\n },\n number: /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n punctuation: /[{}[\\],]/,\n operator: /:/,\n \"boolean\": /\\b(?:true|false)\\b/,\n \"null\": {\n pattern: /\\bnull\\b/,\n alias: \"keyword\"\n }\n}, Prism.languages.webmanifest = Prism.languages.json;\n!function (n) {\n var e = /(\"|')(?:\\\\(?:\\r\\n?|\\n|.)|(?!\\1)[^\\\\\\r\\n])*\\1/;\n n.languages.json5 = n.languages.extend(\"json\", {\n property: [{\n pattern: RegExp(e.source + \"(?=\\\\s*:)\"),\n greedy: !0\n }, {\n pattern: /[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*:)/,\n alias: \"unquoted\"\n }],\n string: {\n pattern: e,\n greedy: !0\n },\n number: /[+-]?\\b(?:NaN|Infinity|0x[a-fA-F\\d]+)\\b|[+-]?(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n });\n}(Prism);\nPrism.languages.jsonp = Prism.languages.extend(\"json\", {\n punctuation: /[{}[\\]();,.]/\n}), Prism.languages.insertBefore(\"jsonp\", \"punctuation\", {\n \"function\": /[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*\\()/\n});\n!function (n) {\n n.languages.kotlin = n.languages.extend(\"clike\", {\n keyword: {\n pattern: /(^|[^.])\\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\\b/,\n lookbehind: !0\n },\n \"function\": [/\\w+(?=\\s*\\()/, {\n pattern: /(\\.)\\w+(?=\\s*\\{)/,\n lookbehind: !0\n }],\n number: /\\b(?:0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\\d+(?:_\\d+)*(?:\\.\\d+(?:_\\d+)*)?(?:[eE][+-]?\\d+(?:_\\d+)*)?[fFL]?)\\b/,\n operator: /\\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\\/*%<>]=?|[?:]:?|\\.\\.|&&|\\|\\||\\b(?:and|inv|or|shl|shr|ushr|xor)\\b/\n }), delete n.languages.kotlin[\"class-name\"], n.languages.insertBefore(\"kotlin\", \"string\", {\n \"raw-string\": {\n pattern: /(\"\"\"|''')[\\s\\S]*?\\1/,\n alias: \"string\"\n }\n }), n.languages.insertBefore(\"kotlin\", \"keyword\", {\n annotation: {\n pattern: /\\B@(?:\\w+:)?(?:[A-Z]\\w*|\\[[^\\]]+\\])/,\n alias: \"builtin\"\n }\n }), n.languages.insertBefore(\"kotlin\", \"function\", {\n label: {\n pattern: /\\w+@|@\\w+/,\n alias: \"symbol\"\n }\n });\n var e = [{\n pattern: /\\$\\{[^}]+\\}/,\n inside: {\n delimiter: {\n pattern: /^\\$\\{|\\}$/,\n alias: \"variable\"\n },\n rest: n.languages.kotlin\n }\n }, {\n pattern: /\\$\\w+/,\n alias: \"variable\"\n }];\n n.languages.kotlin.string.inside = n.languages.kotlin[\"raw-string\"].inside = {\n interpolation: e\n }, n.languages.kt = n.languages.kotlin, n.languages.kts = n.languages.kotlin;\n}(Prism);\n!function (h) {\n function v(e, n) {\n return \"___\" + e.toUpperCase() + n + \"___\";\n }\n\n Object.defineProperties(h.languages[\"markup-templating\"] = {}, {\n buildPlaceholders: {\n value: function value(a, r, e, o) {\n if (a.language === r) {\n var c = a.tokenStack = [];\n a.code = a.code.replace(e, function (e) {\n if (\"function\" == typeof o && !o(e)) return e;\n\n for (var n, t = c.length; -1 !== a.code.indexOf(n = v(r, t));) {\n ++t;\n }\n\n return c[t] = e, n;\n }), a.grammar = h.languages.markup;\n }\n }\n },\n tokenizePlaceholders: {\n value: function value(p, k) {\n if (p.language === k && p.tokenStack) {\n p.grammar = h.languages[k];\n var m = 0,\n d = Object.keys(p.tokenStack);\n !function e(n) {\n for (var t = 0; t < n.length && !(m >= d.length); t++) {\n var a = n[t];\n\n if (\"string\" == typeof a || a.content && \"string\" == typeof a.content) {\n var r = d[m],\n o = p.tokenStack[r],\n c = \"string\" == typeof a ? a : a.content,\n i = v(k, r),\n u = c.indexOf(i);\n\n if (-1 < u) {\n ++m;\n var g = c.substring(0, u),\n l = new h.Token(k, h.tokenize(o, p.grammar), \"language-\" + k, o),\n s = c.substring(u + i.length),\n f = [];\n g && f.push.apply(f, e([g])), f.push(l), s && f.push.apply(f, e([s])), \"string\" == typeof a ? n.splice.apply(n, [t, 1].concat(f)) : a.content = f;\n }\n } else a.content && e(a.content);\n }\n\n return n;\n }(p.tokens);\n }\n }\n }\n });\n}(Prism);\nPrism.languages.objectivec = Prism.languages.extend(\"c\", {\n keyword: /\\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n string: /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|@\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n operator: /-[->]?|\\+\\+?|!=?|<=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n}), delete Prism.languages.objectivec[\"class-name\"], Prism.languages.objc = Prism.languages.objectivec;\n!function (a) {\n var e = /\\/\\*[\\s\\S]*?\\*\\/|\\/\\/.*|#(?!\\[).*/,\n t = [{\n pattern: /\\b(?:false|true)\\b/i,\n alias: \"boolean\"\n }, /\\b[A-Z_][A-Z0-9_]*\\b(?!\\s*\\()/, /\\b(?:null)\\b/i],\n i = /\\b0b[01]+\\b|\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:_\\d+)*\\.?(?:\\d+(?:_\\d+)*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n n = /=>|\\?\\?=?|\\.{3}|\\??->|[!=]=?=?|::|\\*\\*=?|--|\\+\\+|&&|\\|\\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,\n s = /[{}\\[\\](),:;]/;\n a.languages.php = {\n delimiter: {\n pattern: /\\?>$|^<\\?(?:php(?=\\s)|=)?/i,\n alias: \"important\"\n },\n comment: e,\n variable: /\\$+(?:\\w+\\b|(?={))/i,\n \"package\": {\n pattern: /(namespace\\s+|use\\s+(?:function\\s+)?)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n },\n keyword: [{\n pattern: /(\\(\\s*)\\b(?:bool|boolean|int|integer|float|string|object|array)\\b(?=\\s*\\))/i,\n alias: \"type-casting\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /([(,?]\\s*)\\b(?:bool|int|float|string|object|array(?!\\s*\\()|mixed|self|static|callable|iterable|(?:null|false)(?=\\s*\\|))\\b(?=\\s*\\$)/i,\n alias: \"type-hint\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /([(,?]\\s*[a-z0-9_|]\\|\\s*)(?:null|false)\\b(?=\\s*\\$)/i,\n alias: \"type-hint\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /(\\)\\s*:\\s*\\??\\s*)\\b(?:bool|int|float|string|object|void|array(?!\\s*\\()|mixed|self|static|callable|iterable|(?:null|false)(?=\\s*\\|))\\b/i,\n alias: \"return-type\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /(\\)\\s*:\\s*\\??\\s*[a-z0-9_|]\\|\\s*)(?:null|false)\\b/i,\n alias: \"return-type\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /\\b(?:bool|int|float|string|object|void|array(?!\\s*\\()|mixed|iterable|(?:null|false)(?=\\s*\\|))\\b/i,\n alias: \"type-declaration\",\n greedy: !0\n }, {\n pattern: /(\\|\\s*)(?:null|false)\\b/i,\n alias: \"type-declaration\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /\\b(?:parent|self|static)(?=\\s*::)/i,\n alias: \"static-context\",\n greedy: !0\n }, /\\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|match|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\\b/i],\n \"argument-name\": /\\b[a-z_]\\w*(?=\\s*:(?!:))/i,\n \"class-name\": [{\n pattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new(?!\\s+self|\\s+static))\\s+|\\bcatch\\s*\\()\\b[a-z_]\\w*(?!\\\\)\\b/i,\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /(\\|\\s*)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /\\b[a-z_]\\w*(?!\\\\)\\b(?=\\s*\\|)/i,\n greedy: !0\n }, {\n pattern: /(\\|\\s*)(?:\\\\?\\b[a-z_]\\w*)+\\b/i,\n alias: \"class-name-fully-qualified\",\n greedy: !0,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /(?:\\\\?\\b[a-z_]\\w*)+\\b(?=\\s*\\|)/i,\n alias: \"class-name-fully-qualified\",\n greedy: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /(\\b(?:extends|implements|instanceof|new(?!\\s+self\\b|\\s+static\\b))\\s+|\\bcatch\\s*\\()(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n alias: \"class-name-fully-qualified\",\n greedy: !0,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /\\b[a-z_]\\w*(?=\\s*\\$)/i,\n alias: \"type-declaration\",\n greedy: !0\n }, {\n pattern: /(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,\n alias: [\"class-name-fully-qualified\", \"type-declaration\"],\n greedy: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /\\b[a-z_]\\w*(?=\\s*::)/i,\n alias: \"static-context\",\n greedy: !0\n }, {\n pattern: /(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*::)/i,\n alias: [\"class-name-fully-qualified\", \"static-context\"],\n greedy: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /([(,?]\\s*)[a-z_]\\w*(?=\\s*\\$)/i,\n alias: \"type-hint\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /([(,?]\\s*)(?:\\\\?\\b[a-z_]\\w*)+(?=\\s*\\$)/i,\n alias: [\"class-name-fully-qualified\", \"type-hint\"],\n greedy: !0,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n }, {\n pattern: /(\\)\\s*:\\s*\\??\\s*)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n alias: \"return-type\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /(\\)\\s*:\\s*\\??\\s*)(?:\\\\?\\b[a-z_]\\w*)+\\b(?!\\\\)/i,\n alias: [\"class-name-fully-qualified\", \"return-type\"],\n greedy: !0,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n }],\n constant: t,\n \"function\": /\\w+\\s*(?=\\()/,\n property: {\n pattern: /(->)[\\w]+/,\n lookbehind: !0\n },\n number: i,\n operator: n,\n punctuation: s\n };\n var l = {\n pattern: /{\\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\\\{])\\$+(?:\\w+(?:\\[[^\\r\\n\\[\\]]+\\]|->\\w+)*)/,\n lookbehind: !0,\n inside: a.languages.php\n },\n r = [{\n pattern: /<<<'([^']+)'[\\r\\n](?:.*[\\r\\n])*?\\1;/,\n alias: \"nowdoc-string\",\n greedy: !0,\n inside: {\n delimiter: {\n pattern: /^<<<'[^']+'|[a-z_]\\w*;$/i,\n alias: \"symbol\",\n inside: {\n punctuation: /^<<<'?|[';]$/\n }\n }\n }\n }, {\n pattern: /<<<(?:\"([^\"]+)\"[\\r\\n](?:.*[\\r\\n])*?\\1;|([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?\\2;)/i,\n alias: \"heredoc-string\",\n greedy: !0,\n inside: {\n delimiter: {\n pattern: /^<<<(?:\"[^\"]+\"|[a-z_]\\w*)|[a-z_]\\w*;$/i,\n alias: \"symbol\",\n inside: {\n punctuation: /^<<<\"?|[\";]$/\n }\n },\n interpolation: l\n }\n }, {\n pattern: /`(?:\\\\[\\s\\S]|[^\\\\`])*`/,\n alias: \"backtick-quoted-string\",\n greedy: !0\n }, {\n pattern: /'(?:\\\\[\\s\\S]|[^\\\\'])*'/,\n alias: \"single-quoted-string\",\n greedy: !0\n }, {\n pattern: /\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,\n alias: \"double-quoted-string\",\n greedy: !0,\n inside: {\n interpolation: l\n }\n }];\n a.languages.insertBefore(\"php\", \"variable\", {\n string: r\n }), a.languages.insertBefore(\"php\", \"variable\", {\n attribute: {\n pattern: /#\\[(?:[^\"'\\/#]|\\/(?![*/])|\\/\\/.*$|#(?!\\[).*$|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|'(?:\\\\[\\s\\S]|[^\\\\'])*')+\\](?=\\s*[a-z$#])/im,\n greedy: !0,\n inside: {\n \"attribute-content\": {\n pattern: /^(#\\[)[\\s\\S]+(?=]$)/,\n lookbehind: !0,\n inside: {\n comment: e,\n string: r,\n \"attribute-class-name\": [{\n pattern: /([^:]|^)\\b[a-z_]\\w*(?!\\\\)\\b/i,\n alias: \"class-name\",\n greedy: !0,\n lookbehind: !0\n }, {\n pattern: /([^:]|^)(?:\\\\?\\b[a-z_]\\w*)+/i,\n alias: [\"class-name\", \"class-name-fully-qualified\"],\n greedy: !0,\n lookbehind: !0,\n inside: {\n punctuation: /\\\\/\n }\n }],\n constant: t,\n number: i,\n operator: n,\n punctuation: s\n }\n },\n delimiter: {\n pattern: /^#\\[|]$/,\n alias: \"punctuation\"\n }\n }\n }\n }), a.hooks.add(\"before-tokenize\", function (e) {\n if (/<\\?/.test(e.code)) {\n a.languages[\"markup-templating\"].buildPlaceholders(e, \"php\", /<\\?(?:[^\"'/#]|\\/(?![*/])|(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|(?:\\/\\/|#(?!\\[))(?:[^?\\n\\r]|\\?(?!>))*(?=$|\\?>|[\\r\\n])|#\\[|\\/\\*[\\s\\S]*?(?:\\*\\/|$))*?(?:\\?>|$)/gi);\n }\n }), a.hooks.add(\"after-tokenize\", function (e) {\n a.languages[\"markup-templating\"].tokenizePlaceholders(e, \"php\");\n });\n}(Prism);\nPrism.languages.python = {\n comment: {\n pattern: /(^|[^\\\\])#.*/,\n lookbehind: !0\n },\n \"string-interpolation\": {\n pattern: /(?:f|rf|fr)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n greedy: !0,\n inside: {\n interpolation: {\n pattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,\n lookbehind: !0,\n inside: {\n \"format-spec\": {\n pattern: /(:)[^:(){}]+(?=}$)/,\n lookbehind: !0\n },\n \"conversion-option\": {\n pattern: /![sra](?=[:}]$)/,\n alias: \"punctuation\"\n },\n rest: null\n }\n },\n string: /[\\s\\S]+/\n }\n },\n \"triple-quoted-string\": {\n pattern: /(?:[rub]|rb|br)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n greedy: !0,\n alias: \"string\"\n },\n string: {\n pattern: /(?:[rub]|rb|br)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n greedy: !0\n },\n \"function\": {\n pattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n lookbehind: !0\n },\n \"class-name\": {\n pattern: /(\\bclass\\s+)\\w+/i,\n lookbehind: !0\n },\n decorator: {\n pattern: /(^\\s*)@\\w+(?:\\.\\w+)*/im,\n lookbehind: !0,\n alias: [\"annotation\", \"punctuation\"],\n inside: {\n punctuation: /\\./\n }\n },\n keyword: /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n builtin: /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n \"boolean\": /\\b(?:True|False|None)\\b/,\n number: /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n operator: /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n punctuation: /[{}[\\];(),.:]/\n}, Prism.languages.python[\"string-interpolation\"].inside.interpolation.inside.rest = Prism.languages.python, Prism.languages.py = Prism.languages.python;\n!function (e) {\n e.languages.ruby = e.languages.extend(\"clike\", {\n comment: [/#.*/, {\n pattern: /^=begin\\s[\\s\\S]*?^=end/m,\n greedy: !0\n }],\n \"class-name\": {\n pattern: /(\\b(?:class)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n lookbehind: !0,\n inside: {\n punctuation: /[.\\\\]/\n }\n },\n keyword: /\\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\\b/\n });\n var n = {\n pattern: /#\\{[^}]+\\}/,\n inside: {\n delimiter: {\n pattern: /^#\\{|\\}$/,\n alias: \"tag\"\n },\n rest: e.languages.ruby\n }\n };\n delete e.languages.ruby[\"function\"], e.languages.insertBefore(\"ruby\", \"keyword\", {\n regex: [{\n pattern: RegExp(\"%r(?:\" + [\"([^a-zA-Z0-9\\\\s{(\\\\[<])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\[^])*\\\\1[gim]{0,3}\", \"\\\\((?:[^()\\\\\\\\]|\\\\\\\\[^])*\\\\)[gim]{0,3}\", \"\\\\{(?:[^#{}\\\\\\\\]|#(?:\\\\{[^}]+\\\\})?|\\\\\\\\[^])*\\\\}[gim]{0,3}\", \"\\\\[(?:[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\[^])*\\\\][gim]{0,3}\", \"<(?:[^<>\\\\\\\\]|\\\\\\\\[^])*>[gim]{0,3}\"].join(\"|\") + \")\"),\n greedy: !0,\n inside: {\n interpolation: n\n }\n }, {\n pattern: /(^|[^/])\\/(?!\\/)(?:\\[[^\\r\\n\\]]+\\]|\\\\.|[^[/\\\\\\r\\n])+\\/[gim]{0,3}(?=\\s*(?:$|[\\r\\n,.;})]))/,\n lookbehind: !0,\n greedy: !0\n }],\n variable: /[@$]+[a-zA-Z_]\\w*(?:[?!]|\\b)/,\n symbol: {\n pattern: /(^|[^:]):[a-zA-Z_]\\w*(?:[?!]|\\b)/,\n lookbehind: !0\n },\n \"method-definition\": {\n pattern: /(\\bdef\\s+)[\\w.]+/,\n lookbehind: !0,\n inside: {\n \"function\": /\\w+$/,\n rest: e.languages.ruby\n }\n }\n }), e.languages.insertBefore(\"ruby\", \"number\", {\n builtin: /\\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\\b/,\n constant: /\\b[A-Z]\\w*(?:[?!]|\\b)/\n }), e.languages.ruby.string = [{\n pattern: RegExp(\"%[qQiIwWxs]?(?:\" + [\"([^a-zA-Z0-9\\\\s{(\\\\[<])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\[^])*\\\\1\", \"\\\\((?:[^()\\\\\\\\]|\\\\\\\\[^])*\\\\)\", \"\\\\{(?:[^#{}\\\\\\\\]|#(?:\\\\{[^}]+\\\\})?|\\\\\\\\[^])*\\\\}\", \"\\\\[(?:[^\\\\[\\\\]\\\\\\\\]|\\\\\\\\[^])*\\\\]\", \"<(?:[^<>\\\\\\\\]|\\\\\\\\[^])*>\"].join(\"|\") + \")\"),\n greedy: !0,\n inside: {\n interpolation: n\n }\n }, {\n pattern: /(\"|')(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\#\\r\\n])*\\1/,\n greedy: !0,\n inside: {\n interpolation: n\n }\n }], e.languages.rb = e.languages.ruby;\n}(Prism);\nPrism.languages.swift = Prism.languages.extend(\"clike\", {\n string: {\n pattern: /(\"|')(?:\\\\(?:\\((?:[^()]|\\([^)]+\\))+\\)|\\r\\n|[^(])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n greedy: !0,\n inside: {\n interpolation: {\n pattern: /\\\\\\((?:[^()]|\\([^)]+\\))+\\)/,\n inside: {\n delimiter: {\n pattern: /^\\\\\\(|\\)$/,\n alias: \"variable\"\n }\n }\n }\n }\n },\n keyword: /\\b(?:as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\\b/,\n number: /\\b(?:[\\d_]+(?:\\.[\\de_]+)?|0x[a-f0-9_]+(?:\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n constant: /\\b(?:nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n atrule: /@\\b(?:IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\\b/,\n builtin: /\\b(?:[A-Z]\\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\\b/\n}), Prism.languages.swift.string.inside.interpolation.inside.rest = Prism.languages.swift;\n!function (e) {\n e.languages.typescript = e.languages.extend(\"javascript\", {\n \"class-name\": {\n pattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n lookbehind: !0,\n greedy: !0,\n inside: null\n },\n keyword: /\\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\\b/,\n builtin: /\\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\\b/\n }), delete e.languages.typescript.parameter;\n var n = e.languages.extend(\"typescript\", {});\n delete n[\"class-name\"], e.languages.typescript[\"class-name\"].inside = n, e.languages.insertBefore(\"typescript\", \"function\", {\n \"generic-function\": {\n pattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n greedy: !0,\n inside: {\n \"function\": /^#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*/,\n generic: {\n pattern: /<[\\s\\S]+/,\n alias: \"class-name\",\n inside: n\n }\n }\n }\n }), e.languages.ts = e.languages.typescript;\n}(Prism);\n!function (n) {\n function a(a, e) {\n n.languages[a] && n.languages.insertBefore(a, \"comment\", {\n \"doc-comment\": e\n });\n }\n\n var e = n.languages.markup.tag,\n t = {\n pattern: /\\/\\/\\/.*/,\n greedy: !0,\n alias: \"comment\",\n inside: {\n tag: e\n }\n },\n g = {\n pattern: /'''.*/,\n greedy: !0,\n alias: \"comment\",\n inside: {\n tag: e\n }\n };\n a(\"csharp\", t), a(\"fsharp\", t), a(\"vbnet\", g);\n}(Prism);\n!function () {\n if (\"undefined\" != typeof self && self.Prism && self.document && document.querySelector) {\n var t,\n s = function s() {\n if (void 0 === t) {\n var e = document.createElement(\"div\");\n e.style.fontSize = \"13px\", e.style.lineHeight = \"1.5\", e.style.padding = \"0\", e.style.border = \"0\", e.innerHTML = \"
\", document.body.appendChild(e), t = 38 === e.offsetHeight, document.body.removeChild(e);\n }\n\n return t;\n },\n l = !0,\n a = 0;\n\n Prism.hooks.add(\"before-sanity-check\", function (e) {\n var t = e.element.parentNode,\n n = t && t.getAttribute(\"data-line\");\n\n if (t && n && /pre/i.test(t.nodeName)) {\n var i = 0;\n g(\".line-highlight\", t).forEach(function (e) {\n i += e.textContent.length, e.parentNode.removeChild(e);\n }), i && /^( \\n)+$/.test(e.code.slice(-i)) && (e.code = e.code.slice(0, -i));\n }\n }), Prism.hooks.add(\"complete\", function e(t) {\n var n = t.element.parentNode,\n i = n && n.getAttribute(\"data-line\");\n\n if (n && i && /pre/i.test(n.nodeName)) {\n clearTimeout(a);\n var r = Prism.plugins.lineNumbers,\n o = t.plugins && t.plugins.lineNumbers;\n if (b(n, \"line-numbers\") && r && !o) Prism.hooks.add(\"line-numbers\", e);else u(n, i)(), a = setTimeout(c, 1);\n }\n }), window.addEventListener(\"hashchange\", c), window.addEventListener(\"resize\", function () {\n g(\"pre[data-line]\").map(function (e) {\n return u(e);\n }).forEach(v);\n });\n }\n\n function g(e, t) {\n return Array.prototype.slice.call((t || document).querySelectorAll(e));\n }\n\n function b(e, t) {\n return t = \" \" + t + \" \", -1 < (\" \" + e.className + \" \").replace(/[\\n\\t]/g, \" \").indexOf(t);\n }\n\n function v(e) {\n e();\n }\n\n function u(u, e, c) {\n var t = (e = \"string\" == typeof e ? e : u.getAttribute(\"data-line\")).replace(/\\s+/g, \"\").split(\",\").filter(Boolean),\n d = +u.getAttribute(\"data-line-offset\") || 0,\n f = (s() ? parseInt : parseFloat)(getComputedStyle(u).lineHeight),\n m = b(u, \"line-numbers\"),\n p = m ? u : u.querySelector(\"code\") || u,\n h = [];\n t.forEach(function (e) {\n var t = e.split(\"-\"),\n n = +t[0],\n i = +t[1] || n,\n r = u.querySelector('.line-highlight[data-range=\"' + e + '\"]') || document.createElement(\"div\");\n\n if (h.push(function () {\n r.setAttribute(\"aria-hidden\", \"true\"), r.setAttribute(\"data-range\", e), r.className = (c || \"\") + \" line-highlight\";\n }), m && Prism.plugins.lineNumbers) {\n var o = Prism.plugins.lineNumbers.getLine(u, n),\n a = Prism.plugins.lineNumbers.getLine(u, i);\n\n if (o) {\n var s = o.offsetTop + \"px\";\n h.push(function () {\n r.style.top = s;\n });\n }\n\n if (a) {\n var l = a.offsetTop - o.offsetTop + a.offsetHeight + \"px\";\n h.push(function () {\n r.style.height = l;\n });\n }\n } else h.push(function () {\n r.setAttribute(\"data-start\", n), n < i && r.setAttribute(\"data-end\", i), r.style.top = (n - d - 1) * f + \"px\", r.textContent = new Array(i - n + 2).join(\" \\n\");\n });\n\n h.push(function () {\n p.appendChild(r);\n });\n });\n var i = u.id;\n\n if (m && i) {\n for (var n = \"linkable-line-numbers\", r = !1, o = u; o;) {\n if (b(o, n)) {\n r = !0;\n break;\n }\n\n o = o.parentElement;\n }\n\n if (r) {\n b(u, n) || h.push(function () {\n u.className = (u.className + \" \" + n).trim();\n });\n var a = parseInt(u.getAttribute(\"data-start\") || \"1\");\n g(\".line-numbers-rows > span\", u).forEach(function (e, t) {\n var n = t + a;\n\n e.onclick = function () {\n var e = i + \".\" + n;\n l = !1, location.hash = e, setTimeout(function () {\n l = !0;\n }, 1);\n };\n });\n }\n }\n\n return function () {\n h.forEach(v);\n };\n }\n\n function c() {\n var e = location.hash.slice(1);\n g(\".temporary.line-highlight\").forEach(function (e) {\n e.parentNode.removeChild(e);\n });\n var t = (e.match(/\\.([\\d,-]+)$/) || [, \"\"])[1];\n\n if (t && !document.getElementById(e)) {\n var n = e.slice(0, e.lastIndexOf(\".\")),\n i = document.getElementById(n);\n if (i) i.hasAttribute(\"data-line\") || i.setAttribute(\"data-line\", \"\"), u(i, t, \"temporary \")(), l && document.querySelector(\".temporary.line-highlight\").scrollIntoView();\n }\n }\n}();\n!function () {\n if (\"undefined\" != typeof self && self.Prism && self.document) {\n var o = \"line-numbers\",\n a = /\\n(?!$)/g,\n e = Prism.plugins.lineNumbers = {\n getLine: function getLine(e, n) {\n if (\"PRE\" === e.tagName && e.classList.contains(o)) {\n var t = e.querySelector(\".line-numbers-rows\");\n\n if (t) {\n var i = parseInt(e.getAttribute(\"data-start\"), 10) || 1,\n r = i + (t.children.length - 1);\n n < i && (n = i), r < n && (n = r);\n var s = n - i;\n return t.children[s];\n }\n }\n },\n resize: function resize(e) {\n u([e]);\n },\n assumeViewportIndependence: !0\n },\n t = function t(e) {\n return e ? window.getComputedStyle ? getComputedStyle(e) : e.currentStyle || null : null;\n },\n n = void 0;\n\n window.addEventListener(\"resize\", function () {\n e.assumeViewportIndependence && n === window.innerWidth || (n = window.innerWidth, u(Array.prototype.slice.call(document.querySelectorAll(\"pre.\" + o))));\n }), Prism.hooks.add(\"complete\", function (e) {\n if (e.code) {\n var n = e.element,\n t = n.parentNode;\n\n if (t && /pre/i.test(t.nodeName) && !n.querySelector(\".line-numbers-rows\") && Prism.util.isActive(n, o)) {\n n.classList.remove(o), t.classList.add(o);\n var i,\n r = e.code.match(a),\n s = r ? r.length + 1 : 1,\n l = new Array(s + 1).join(\"\");\n (i = document.createElement(\"span\")).setAttribute(\"aria-hidden\", \"true\"), i.className = \"line-numbers-rows\", i.innerHTML = l, t.hasAttribute(\"data-start\") && (t.style.counterReset = \"linenumber \" + (parseInt(t.getAttribute(\"data-start\"), 10) - 1)), e.element.appendChild(i), u([t]), Prism.hooks.run(\"line-numbers\", e);\n }\n }\n }), Prism.hooks.add(\"line-numbers\", function (e) {\n e.plugins = e.plugins || {}, e.plugins.lineNumbers = !0;\n });\n }\n\n function u(e) {\n if (0 != (e = e.filter(function (e) {\n var n = t(e)[\"white-space\"];\n return \"pre-wrap\" === n || \"pre-line\" === n;\n })).length) {\n var n = e.map(function (e) {\n var n = e.querySelector(\"code\"),\n t = e.querySelector(\".line-numbers-rows\");\n\n if (n && t) {\n var i = e.querySelector(\".line-numbers-sizer\"),\n r = n.textContent.split(a);\n i || ((i = document.createElement(\"span\")).className = \"line-numbers-sizer\", n.appendChild(i)), i.innerHTML = \"0\", i.style.display = \"block\";\n var s = i.getBoundingClientRect().height;\n return i.innerHTML = \"\", {\n element: e,\n lines: r,\n lineHeights: [],\n oneLinerHeight: s,\n sizer: i\n };\n }\n }).filter(Boolean);\n n.forEach(function (e) {\n var i = e.sizer,\n n = e.lines,\n r = e.lineHeights,\n s = e.oneLinerHeight;\n r[n.length - 1] = void 0, n.forEach(function (e, n) {\n if (e && 1 < e.length) {\n var t = i.appendChild(document.createElement(\"span\"));\n t.style.display = \"block\", t.textContent = e;\n } else r[n] = s;\n });\n }), n.forEach(function (e) {\n for (var n = e.sizer, t = e.lineHeights, i = 0, r = 0; r < t.length; r++) {\n void 0 === t[r] && (t[r] = n.children[i++].getBoundingClientRect().height);\n }\n }), n.forEach(function (e) {\n var n = e.sizer,\n t = e.element.querySelector(\".line-numbers-rows\");\n n.style.display = \"none\", n.innerHTML = \"\", e.lineHeights.forEach(function (e, n) {\n t.children[n].style.height = e + \"px\";\n });\n });\n }\n }\n}();\n\"undefined\" != typeof self && self.Prism && self.document && document.createRange && (Prism.plugins.KeepMarkup = !0, Prism.hooks.add(\"before-highlight\", function (e) {\n if (e.element.children.length && Prism.util.isActive(e.element, \"keep-markup\", !0)) {\n var a = 0,\n s = [],\n l = function l(e, n) {\n var o = {};\n n || (o.clone = e.cloneNode(!1), o.posOpen = a, s.push(o));\n\n for (var t = 0, d = e.childNodes.length; t < d; t++) {\n var r = e.childNodes[t];\n 1 === r.nodeType ? l(r) : 3 === r.nodeType && (a += r.data.length);\n }\n\n n || (o.posClose = a);\n };\n\n l(e.element, !0), s && s.length && (e.keepMarkup = s);\n }\n}), Prism.hooks.add(\"after-highlight\", function (n) {\n if (n.keepMarkup && n.keepMarkup.length) {\n var a = function a(e, n) {\n for (var o = 0, t = e.childNodes.length; o < t; o++) {\n var d = e.childNodes[o];\n\n if (1 === d.nodeType) {\n if (!a(d, n)) return !1;\n } else 3 === d.nodeType && (!n.nodeStart && n.pos + d.data.length > n.node.posOpen && (n.nodeStart = d, n.nodeStartPos = n.node.posOpen - n.pos), n.nodeStart && n.pos + d.data.length >= n.node.posClose && (n.nodeEnd = d, n.nodeEndPos = n.node.posClose - n.pos), n.pos += d.data.length);\n\n if (n.nodeStart && n.nodeEnd) {\n var r = document.createRange();\n return r.setStart(n.nodeStart, n.nodeStartPos), r.setEnd(n.nodeEnd, n.nodeEndPos), n.node.clone.appendChild(r.extractContents()), r.insertNode(n.node.clone), r.detach(), !1;\n }\n }\n\n return !0;\n };\n\n n.keepMarkup.forEach(function (e) {\n a(n.element, {\n node: e,\n pos: 0\n });\n }), n.highlightedCode = n.element.innerHTML;\n }\n}));\n!function () {\n if (\"undefined\" != typeof self && self.Prism && self.document) {\n var f = /(?:^|\\s)command-line(?:\\s|$)/,\n p = \"command-line-prompt\",\n m = \"\".startsWith ? function (e, t) {\n return e.startsWith(t);\n } : function (e, t) {\n return 0 === e.indexOf(t);\n };\n Prism.hooks.add(\"before-highlight\", function (e) {\n var t = h(e);\n\n if (!t.complete && e.code) {\n var n = e.element.parentElement;\n\n if (n && /pre/i.test(n.nodeName) && (f.test(n.className) || f.test(e.element.className))) {\n var a = e.element.querySelector(\".\" + p);\n a && a.remove();\n var s = e.code.split(\"\\n\");\n t.numberOfLines = s.length;\n var o = t.outputLines = [],\n r = n.getAttribute(\"data-output\"),\n i = n.getAttribute(\"data-filter-output\");\n if (null !== r) r.split(\",\").forEach(function (e) {\n var t = e.split(\"-\"),\n n = parseInt(t[0], 10),\n a = 2 === t.length ? parseInt(t[1], 10) : n;\n\n if (!isNaN(n) && !isNaN(a)) {\n n < 1 && (n = 1), a > s.length && (a = s.length), a--;\n\n for (var r = --n; r <= a; r++) {\n o[r] = s[r], s[r] = \"\";\n }\n }\n });else if (i) for (var l = 0; l < s.length; l++) {\n m(s[l], i) && (o[l] = s[l].slice(i.length), s[l] = \"\");\n }\n e.code = s.join(\"\\n\");\n } else t.complete = !0;\n } else t.complete = !0;\n }), Prism.hooks.add(\"before-insert\", function (e) {\n var t = h(e);\n\n if (!t.complete) {\n for (var n = e.highlightedCode.split(\"\\n\"), a = t.outputLines || [], r = 0, s = a.length; r < s; r++) {\n a.hasOwnProperty(r) && (n[r] = a[r]);\n }\n\n e.highlightedCode = n.join(\"\\n\");\n }\n }), Prism.hooks.add(\"complete\", function (e) {\n var t = h(e);\n\n if (!t.complete) {\n var n,\n a = e.element.parentElement;\n f.test(e.element.className) && (e.element.className = e.element.className.replace(f, \" \")), f.test(a.className) || (a.className += \" command-line\");\n var r = t.numberOfLines || 0,\n s = u(\"data-prompt\", \"\");\n if (\"\" !== s) n = d('', r);else n = d('', r);\n var o = document.createElement(\"span\");\n o.className = p, o.innerHTML = n;\n\n for (var i = t.outputLines || [], l = 0, m = i.length; l < m; l++) {\n if (i.hasOwnProperty(l)) {\n var c = o.children[l];\n c.removeAttribute(\"data-user\"), c.removeAttribute(\"data-host\"), c.removeAttribute(\"data-prompt\");\n }\n }\n\n e.element.insertBefore(o, e.element.firstChild), t.complete = !0;\n }\n\n function u(e, t) {\n return (a.getAttribute(e) || t).replace(/\"/g, \""\");\n }\n });\n }\n\n function d(e, t) {\n for (var n = \"\", a = 0; a < t; a++) {\n n += e;\n }\n\n return n;\n }\n\n function h(e) {\n var t = e.vars = e.vars || {};\n return t[\"command-line\"] = t[\"command-line\"] || {};\n }\n}();\n!function () {\n if (\"undefined\" != typeof self && self.Prism && self.document) {\n var i = [],\n l = {},\n c = function c() {};\n\n Prism.plugins.toolbar = {};\n\n var e = Prism.plugins.toolbar.registerButton = function (e, n) {\n var t;\n t = \"function\" == typeof n ? n : function (e) {\n var t;\n return \"function\" == typeof n.onClick ? ((t = document.createElement(\"button\")).type = \"button\", t.addEventListener(\"click\", function () {\n n.onClick.call(this, e);\n })) : \"string\" == typeof n.url ? (t = document.createElement(\"a\")).href = n.url : t = document.createElement(\"span\"), n.className && t.classList.add(n.className), t.textContent = n.text, t;\n }, e in l ? console.warn('There is a button with the key \"' + e + '\" registered already.') : i.push(l[e] = t);\n },\n t = Prism.plugins.toolbar.hook = function (a) {\n var e = a.element.parentNode;\n\n if (e && /pre/i.test(e.nodeName) && !e.parentNode.classList.contains(\"code-toolbar\")) {\n var t = document.createElement(\"div\");\n t.classList.add(\"code-toolbar\"), e.parentNode.insertBefore(t, e), t.appendChild(e);\n var r = document.createElement(\"div\");\n r.classList.add(\"toolbar\");\n\n var n = i,\n o = function (e) {\n for (; e;) {\n var t = e.getAttribute(\"data-toolbar-order\");\n if (null != t) return (t = t.trim()).length ? t.split(/\\s*,\\s*/g) : [];\n e = e.parentElement;\n }\n }(a.element);\n\n o && (n = o.map(function (e) {\n return l[e] || c;\n })), n.forEach(function (e) {\n var t = e(a);\n\n if (t) {\n var n = document.createElement(\"div\");\n n.classList.add(\"toolbar-item\"), n.appendChild(t), r.appendChild(n);\n }\n }), t.appendChild(r);\n }\n };\n\n e(\"label\", function (e) {\n var t = e.element.parentNode;\n\n if (t && /pre/i.test(t.nodeName) && t.hasAttribute(\"data-label\")) {\n var n,\n a,\n r = t.getAttribute(\"data-label\");\n\n try {\n a = document.querySelector(\"template#\" + r);\n } catch (e) {}\n\n return a ? n = a.content : (t.hasAttribute(\"data-url\") ? (n = document.createElement(\"a\")).href = t.getAttribute(\"data-url\") : n = document.createElement(\"span\"), n.textContent = r), n;\n }\n }), Prism.hooks.add(\"complete\", t);\n }\n}();\n!function () {\n if (\"undefined\" != typeof self && self.Prism && self.document) if (Prism.plugins.toolbar) {\n var i = window.ClipboardJS || void 0;\n i || \"function\" != typeof require || (i = require(\"clipboard\"));\n var u = [];\n\n if (!i) {\n var t = document.createElement(\"script\"),\n e = document.querySelector(\"head\");\n t.onload = function () {\n if (i = window.ClipboardJS) for (; u.length;) {\n u.pop()();\n }\n }, t.src = \"https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js\", e.appendChild(t);\n }\n\n Prism.plugins.toolbar.registerButton(\"copy-to-clipboard\", function (t) {\n var e = document.createElement(\"button\");\n e.textContent = \"Copy\", e.setAttribute(\"type\", \"button\");\n var o = t.element;\n return i ? n() : u.push(n), e;\n\n function n() {\n var t = new i(e, {\n text: function text() {\n return o.textContent;\n }\n });\n t.on(\"success\", function () {\n e.textContent = \"Copied!\", r();\n }), t.on(\"error\", function () {\n e.textContent = \"Press Ctrl+C to copy\", r();\n });\n }\n\n function r() {\n setTimeout(function () {\n e.textContent = \"Copy\";\n }, 5e3);\n }\n });\n } else console.warn(\"Copy to Clipboard plugin loaded before Toolbar plugin.\");\n}();","module.exports = __webpack_public_path__ + \"media/logos/favicon-ac1a15a7.ico\";","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v3.2.1\n * MIT License\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.Chartkick = factory());\n})(this, function () {\n 'use strict';\n\n function isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n }\n\n function isFunction(variable) {\n return variable instanceof Function;\n }\n\n function isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n } // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n\n\n function extend(target, source) {\n var key;\n\n for (key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") {\n continue;\n }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n }\n\n function merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n }\n\n var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i; // https://github.com/Do/iso8601.js\n\n var ISO8601_PATTERN = /(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)?(:)?(\\d\\d)?([.,]\\d+)?($|Z|([+-])(\\d\\d)(:)?(\\d\\d)?)/i;\n var DECIMAL_SEPARATOR = String(1.5).charAt(1);\n\n function parseISO8601(input) {\n var day, hour, matches, milliseconds, minutes, month, offset, result, seconds, type, year;\n type = Object.prototype.toString.call(input);\n\n if (type === \"[object Date]\") {\n return input;\n }\n\n if (type !== \"[object String]\") {\n return;\n }\n\n matches = input.match(ISO8601_PATTERN);\n\n if (matches) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n hour = parseInt(matches[7], 10);\n minutes = matches[9] ? parseInt(matches[9], 10) : 0;\n seconds = matches[11] ? parseInt(matches[11], 10) : 0;\n milliseconds = matches[12] ? parseFloat(DECIMAL_SEPARATOR + matches[12].slice(1)) * 1000 : 0;\n result = Date.UTC(year, month, day, hour, minutes, seconds, milliseconds);\n\n if (matches[13] && matches[14]) {\n offset = matches[15] * 60;\n\n if (matches[17]) {\n offset += parseInt(matches[17], 10);\n }\n\n offset *= matches[14] === \"-\" ? -1 : 1;\n result -= offset * 60 * 1000;\n }\n\n return new Date(result);\n }\n } // end iso8601.js\n\n\n function negativeValues(series) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = series[i].data;\n\n for (j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function toStr(n) {\n return \"\" + n;\n }\n\n function toFloat(n) {\n return parseFloat(n);\n }\n\n function toDate(n) {\n var matches, year, month, day;\n\n if (_typeof(n) !== \"object\") {\n if (typeof n === \"number\") {\n n = new Date(n * 1000); // ms\n } else {\n n = toStr(n);\n\n if (matches = n.match(DATE_PATTERN)) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n return new Date(year, month, day);\n } else {\n // str\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n n = parseISO8601(str) || new Date(n);\n }\n }\n }\n\n return n;\n }\n\n function toArr(n) {\n if (!isArray(n)) {\n var arr = [],\n i;\n\n for (i in n) {\n if (n.hasOwnProperty(i)) {\n arr.push([i, n[i]]);\n }\n }\n\n n = arr;\n }\n\n return n;\n }\n\n function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.hideLegend || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.hideLegend);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n } // min\n\n\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n } // max\n\n\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n } // merge library last\n\n\n options = merge(options, opts.library || {});\n return options;\n };\n }\n\n function sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n }\n\n function sortByNumberSeries(a, b) {\n return a[0] - b[0];\n }\n\n function sortByNumber(a, b) {\n return a - b;\n }\n\n function isMinute(d) {\n return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n }\n\n function isHour(d) {\n return isMinute(d) && d.getMinutes() === 0;\n }\n\n function isDay(d) {\n return isHour(d) && d.getHours() === 0;\n }\n\n function isWeek(d, dayOfWeek) {\n return isDay(d) && d.getDay() === dayOfWeek;\n }\n\n function isMonth(d) {\n return isDay(d) && d.getDate() === 1;\n }\n\n function isYear(d) {\n return isMonth(d) && d.getMonth() === 0;\n }\n\n function isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n }\n\n function isNumber(obj) {\n return typeof obj === \"number\";\n }\n\n var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\n function formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var suffixIdx;\n var baseValue = axis ? options.byteScale : value;\n\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n } // TODO handle manual precision case\n\n\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n\n precision = value >= 1000 ? 4 : 3;\n }\n\n suffix = \" \" + byteSuffixes[suffixIdx];\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n }\n\n function seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n\n return null;\n }\n\n function allZeros(data) {\n var i, j, d;\n\n for (i = 0; i < data.length; i++) {\n d = data[i].data;\n\n for (j = 0; j < d.length; j++) {\n if (d[j][1] != 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n var baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n tooltips: {\n displayColors: false,\n callbacks: {}\n },\n legend: {},\n title: {\n fontSize: 20,\n fontColor: \"#333\"\n }\n };\n var defaultOptions = {\n scales: {\n yAxes: [{\n ticks: {\n maxTicksLimit: 4\n },\n scaleLabel: {\n fontSize: 16,\n // fontStyle: \"bold\",\n fontColor: \"#333\"\n }\n }],\n xAxes: [{\n gridLines: {\n drawOnChartArea: false\n },\n scaleLabel: {\n fontSize: 16,\n // fontStyle: \"bold\",\n fontColor: \"#333\"\n },\n time: {},\n ticks: {}\n }]\n }\n }; // http://there4.io/2012/05/02/google-chart-color-list/\n\n var defaultColors = [\"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\", \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\", \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"];\n\n var hideLegend = function hideLegend(options, legend, _hideLegend) {\n if (legend !== undefined) {\n options.legend.display = !!legend;\n\n if (legend && legend !== true) {\n options.legend.position = legend;\n }\n } else if (_hideLegend) {\n options.legend.display = false;\n }\n };\n\n var setTitle = function setTitle(options, title) {\n options.title.display = true;\n options.title.text = title;\n };\n\n var setMin = function setMin(options, min) {\n if (min !== null) {\n options.scales.yAxes[0].ticks.min = toFloat(min);\n }\n };\n\n var setMax = function setMax(options, max) {\n options.scales.yAxes[0].ticks.max = toFloat(max);\n };\n\n var setBarMin = function setBarMin(options, min) {\n if (min !== null) {\n options.scales.xAxes[0].ticks.min = toFloat(min);\n }\n };\n\n var setBarMax = function setBarMax(options, max) {\n options.scales.xAxes[0].ticks.max = toFloat(max);\n };\n\n var setStacked = function setStacked(options, stacked) {\n options.scales.xAxes[0].stacked = !!stacked;\n options.scales.yAxes[0].stacked = !!stacked;\n };\n\n var setXtitle = function setXtitle(options, title) {\n options.scales.xAxes[0].scaleLabel.display = true;\n options.scales.xAxes[0].scaleLabel.labelString = title;\n };\n\n var setYtitle = function setYtitle(options, title) {\n options.scales.yAxes[0].scaleLabel.display = true;\n options.scales.yAxes[0].scaleLabel.labelString = title;\n }; // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n\n\n var addOpacity = function addOpacity(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n }; // check if not null or undefined\n // https://stackoverflow.com/a/27757708/1177228\n\n\n var notnull = function notnull(x) {\n return x != null;\n };\n\n var setLabelSize = function setLabelSize(chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n\n if (!options.scales.xAxes[0].ticks.callback) {\n options.scales.xAxes[0].ticks.callback = function (value) {\n value = toStr(value);\n\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n };\n\n var setFormatOptions = function setFormatOptions(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chart.options.bytes) {\n var series = chart.data;\n\n if (chartType === \"pie\") {\n series = [{\n data: series\n }];\n } // calculate max\n\n\n var max = 0;\n\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n for (var j = 0; j < s.data.length; j++) {\n if (s.data[j][1] > max) {\n max = s.data[j][1];\n }\n }\n } // calculate scale\n\n\n var scale = 1;\n\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n } // set step size\n\n\n formatOptions.byteScale = scale;\n }\n\n if (chartType !== \"pie\") {\n var myAxes = options.scales.yAxes;\n\n if (chartType === \"bar\") {\n myAxes = options.scales.xAxes;\n }\n\n if (formatOptions.byteScale) {\n if (!myAxes[0].ticks.stepSize) {\n myAxes[0].ticks.stepSize = formatOptions.byteScale / 2;\n }\n\n if (!myAxes[0].ticks.maxTicksLimit) {\n myAxes[0].ticks.maxTicksLimit = 4;\n }\n }\n\n if (!myAxes[0].ticks.callback) {\n myAxes[0].ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n }\n\n if (!options.tooltips.callbacks.label) {\n if (chartType === \"scatter\") {\n options.tooltips.callbacks.label = function (item, data) {\n var label = data.datasets[item.datasetIndex].label || '';\n\n if (label) {\n label += ': ';\n }\n\n return label + '(' + item.xLabel + ', ' + item.yLabel + ')';\n };\n } else if (chartType === \"bubble\") {\n options.tooltips.callbacks.label = function (item, data) {\n var label = data.datasets[item.datasetIndex].label || '';\n\n if (label) {\n label += ': ';\n }\n\n var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n return label + '(' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.v + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.tooltips.callbacks.label = function (tooltipItem, data) {\n var dataLabel = data.labels[tooltipItem.index];\n var value = ': ';\n\n if (isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return formatValue(dataLabel, data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index], formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"xLabel\" : \"yLabel\";\n\n options.tooltips.callbacks.label = function (tooltipItem, data) {\n var label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n if (label) {\n label += ': ';\n }\n\n return formatValue(label, tooltipItem[valueLabel], formatOptions);\n };\n }\n }\n };\n\n var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\n var createDataTable = function createDataTable(chart, options, chartType, library) {\n var datasets = [];\n var labels = [];\n var colors = chart.options.colors || defaultColors;\n var day = true;\n var week = true;\n var dayOfWeek;\n var month = true;\n var year = true;\n var hour = true;\n var minute = true;\n var series = chart.data;\n var max = 0;\n\n if (chartType === \"bubble\") {\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var s$1 = series[i$1];\n\n for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n if (s$1.data[j$1][2] > max) {\n max = s$1.data[j$1][2];\n }\n }\n }\n }\n\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n rows2 = [];\n\n if (chartType === \"bar\" || chartType === \"column\" || chart.xtype !== \"number\" && chart.xtype !== \"bubble\") {\n var sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n }\n\n rows[key][i] = toFloat(d[1]);\n\n if (sortedLabels.indexOf(key) === -1) {\n sortedLabels.push(key);\n }\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n sortedLabels.sort(sortByNumber);\n }\n\n for (j = 0; j < series.length; j++) {\n rows2.push([]);\n }\n\n var value;\n var k;\n\n for (k = 0; k < sortedLabels.length; k++) {\n i = sortedLabels[k];\n\n if (chart.xtype === \"datetime\") {\n value = new Date(toFloat(i)); // TODO make this efficient\n\n day = day && isDay(value);\n\n if (!dayOfWeek) {\n dayOfWeek = value.getDay();\n }\n\n week = week && isWeek(value, dayOfWeek);\n month = month && isMonth(value);\n year = year && isYear(value);\n hour = hour && isHour(value);\n minute = minute && isMinute(value);\n } else {\n value = i;\n }\n\n labels.push(value);\n\n for (j = 0; j < series.length; j++) {\n // Chart.js doesn't like undefined\n rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n }\n }\n } else {\n for (var i$2 = 0; i$2 < series.length; i$2++) {\n var s$2 = series[i$2];\n var d$1 = [];\n\n for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n var point = {\n x: toFloat(s$2.data[j$2][0]),\n y: toFloat(s$2.data[j$2][1])\n };\n\n if (chartType === \"bubble\") {\n point.r = toFloat(s$2.data[j$2][2]) * 20 / max; // custom attribute, for tooltip\n\n point.v = s$2.data[j$2][2];\n }\n\n d$1.push(point);\n }\n\n rows2.push(d$1);\n }\n }\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n var color = s.color || colors[i];\n var backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n var dataset = {\n label: s.name || \"\",\n data: rows2[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n pointBackgroundColor: color,\n borderWidth: 2,\n pointHoverBackgroundColor: color\n };\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n\n if (curve === false) {\n dataset.lineTension = 0;\n }\n\n var points = seriesOption(chart, s, \"points\");\n\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHitRadius = 5;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n // hacky check for Chart.js >= 2.9.0\n // https://github.com/chartjs/Chart.js/compare/v2.8.0...v2.9.0\n var gte29 = (\"math\" in library.helpers);\n var ticksKey = gte29 ? \"ticks\" : \"time\";\n\n if (notnull(xmin)) {\n options.scales.xAxes[0][ticksKey].min = toDate(xmin).getTime();\n }\n\n if (notnull(xmax)) {\n options.scales.xAxes[0][ticksKey].max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.xAxes[0].ticks.min = xmin;\n }\n\n if (notnull(xmax)) {\n options.scales.xAxes[0].ticks.max = xmax;\n }\n } // for empty datetime chart\n\n\n if (chart.xtype === \"datetime\" && labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n\n day = false;\n week = false;\n month = false;\n year = false;\n hour = false;\n minute = false;\n }\n\n if (chart.xtype === \"datetime\" && labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (i = 1; i < labels.length; i++) {\n var value$1 = labels[i].getTime();\n\n if (value$1 < minTime) {\n minTime = value$1;\n }\n\n if (value$1 > maxTime) {\n maxTime = value$1;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.xAxes[0].time.unit) {\n var step;\n\n if (year || timeDiff > 365 * 10) {\n options.scales.xAxes[0].time.unit = \"year\";\n step = 365;\n } else if (month || timeDiff > 30 * 10) {\n options.scales.xAxes[0].time.unit = \"month\";\n step = 30;\n } else if (day || timeDiff > 10) {\n options.scales.xAxes[0].time.unit = \"day\";\n step = 1;\n } else if (hour || timeDiff > 0.5) {\n options.scales.xAxes[0].time.displayFormats = {\n hour: \"MMM D, h a\"\n };\n options.scales.xAxes[0].time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (minute) {\n options.scales.xAxes[0].time.displayFormats = {\n minute: \"h:mm a\"\n };\n options.scales.xAxes[0].time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));\n\n if (week && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n\n options.scales.xAxes[0].time.unitStepSize = unitStepSize;\n }\n }\n\n if (!options.scales.xAxes[0].time.tooltipFormat) {\n if (day) {\n options.scales.xAxes[0].time.tooltipFormat = \"ll\";\n } else if (hour) {\n options.scales.xAxes[0].time.tooltipFormat = \"MMM D, h a\";\n } else if (minute) {\n options.scales.xAxes[0].time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n\n var data = {\n labels: labels,\n datasets: datasets\n };\n return data;\n };\n\n var defaultExport = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n };\n\n defaultExport.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n var chartOptions = {}; // fix for https://github.com/chartjs/Chart.js/issues/2441\n\n if (!chart.options.max && allZeros(chart.data)) {\n chartOptions.max = 1;\n }\n\n var options = jsOptions(chart, merge(chartOptions, chart.options));\n setFormatOptions(chart, options, chartType);\n var data = createDataTable(chart, options, chartType || \"line\", this.library);\n\n if (chart.xtype === \"number\") {\n options.scales.xAxes[0].type = \"linear\";\n options.scales.xAxes[0].position = \"bottom\";\n } else {\n options.scales.xAxes[0].type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n };\n\n defaultExport.prototype.renderPieChart = function renderPieChart(chart) {\n var options = merge({}, baseOptions);\n\n if (chart.options.donut) {\n options.cutoutPercentage = 50;\n }\n\n if (\"legend\" in chart.options) {\n hideLegend(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n var labels = [];\n var values = [];\n\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n this.drawChart(chart, \"pie\", data, options);\n };\n\n defaultExport.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n var options;\n\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions);\n delete barOptions.scales.yAxes[0].ticks.maxTicksLimit;\n options = jsOptionsFunc(barOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);\n } else {\n options = jsOptions(chart, chart.options);\n }\n\n setFormatOptions(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\", this.library);\n\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n\n this.drawChart(chart, chartType === \"bar\" ? \"horizontalBar\" : \"bar\", data, options);\n };\n\n defaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"area\");\n };\n\n defaultExport.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {\n chartType = chartType || \"scatter\";\n var options = jsOptions(chart, chart.options);\n setFormatOptions(chart, options, chartType);\n\n if (!(\"showLines\" in options)) {\n options.showLines = false;\n }\n\n var data = createDataTable(chart, options, chartType, this.library);\n options.scales.xAxes[0].type = \"linear\";\n options.scales.xAxes[0].position = \"bottom\";\n this.drawChart(chart, chartType, data, options);\n };\n\n defaultExport.prototype.renderBubbleChart = function renderBubbleChart(chart) {\n this.renderScatterChart(chart, \"bubble\");\n };\n\n defaultExport.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n };\n\n var defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n }\n };\n\n var hideLegend$1 = function hideLegend$1(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n };\n\n var setTitle$1 = function setTitle$1(options, title) {\n options.title.text = title;\n };\n\n var setMin$1 = function setMin$1(options, min) {\n options.yAxis.min = min;\n };\n\n var setMax$1 = function setMax$1(options, max) {\n options.yAxis.max = max;\n };\n\n var setStacked$1 = function setStacked$1(options, stacked) {\n var stackedValue = stacked ? stacked === true ? \"normal\" : stacked : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n };\n\n var setXtitle$1 = function setXtitle$1(options, title) {\n options.xAxis.title.text = title;\n };\n\n var setYtitle$1 = function setYtitle$1(options, title) {\n options.yAxis.title.text = title;\n };\n\n var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\n var setFormatOptions$1 = function setFormatOptions$1(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chartType !== \"pie\" && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter) {\n options.tooltip.pointFormatter = function () {\n return '\\u25CF \" + formatValue(this.series.name + ': ', this.y, formatOptions) + '
';\n };\n }\n };\n\n var defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n };\n\n defaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions),\n data,\n i,\n j;\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : chart.xtype === \"number\" ? \"linear\" : \"datetime\";\n\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n\n setFormatOptions$1(chart, options, chartType);\n var series = chart.data;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n data = series[i].data;\n\n if (chart.xtype === \"datetime\") {\n for (j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n }\n\n series[i].marker = {\n symbol: \"circle\"\n };\n\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n };\n\n defaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.plotOptions = {\n pie: {\n innerSize: \"50%\"\n }\n };\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options),\n i,\n j,\n s,\n d,\n rows = [],\n categories = [];\n options.chart.type = chartType;\n setFormatOptions$1(chart, options, chartType);\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n var newSeries = [],\n d2;\n\n for (i = 0; i < series.length; i++) {\n d = [];\n\n for (j = 0; j < categories.length; j++) {\n d.push(rows[categories[j]][i] || 0);\n }\n\n d2 = {\n name: series[i].name || \"Value\",\n data: d\n };\n\n if (series[i].stack) {\n d2.stack = series[i].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n };\n\n defaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"areaspline\");\n };\n\n defaultExport$1.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {\n this.destroy(chart);\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n };\n\n var loaded = {};\n var callbacks = []; // Set chart options\n\n var defaultOptions$2 = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n };\n\n var hideLegend$2 = function hideLegend$2(options, legend, hideLegend) {\n if (legend !== undefined) {\n var position;\n\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n\n options.legend.position = position;\n } else if (hideLegend) {\n options.legend.position = \"none\";\n }\n };\n\n var setTitle$2 = function setTitle$2(options, title) {\n options.title = title;\n options.titleTextStyle = {\n color: \"#333\",\n fontSize: \"20px\"\n };\n };\n\n var setMin$2 = function setMin$2(options, min) {\n options.vAxis.viewWindow.min = min;\n };\n\n var setMax$2 = function setMax$2(options, max) {\n options.vAxis.viewWindow.max = max;\n };\n\n var setBarMin$1 = function setBarMin$1(options, min) {\n options.hAxis.viewWindow.min = min;\n };\n\n var setBarMax$1 = function setBarMax$1(options, max) {\n options.hAxis.viewWindow.max = max;\n };\n\n var setStacked$2 = function setStacked$2(options, stacked) {\n options.isStacked = stacked ? stacked : false;\n };\n\n var setXtitle$2 = function setXtitle$2(options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n };\n\n var setYtitle$2 = function setYtitle$2(options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n };\n\n var jsOptions$2 = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\n var resize = function resize(callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n\n callback();\n };\n\n var defaultExport$2 = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n };\n\n defaultExport$2.prototype.renderLineChart = function renderLineChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions$2(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"LineChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$2(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$2(chartOptions, chart.options.title);\n }\n\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n this$1.drawChart(chart, \"PieChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var options = jsOptions$2(chart, chart.options);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions$2, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"BarChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n var options = jsOptions$2(chart, chart.options, chartOptions);\n var data = this$1.createDataTable(chart.data, chart.xtype);\n this$1.drawChart(chart, \"AreaChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderGeoChart = function renderGeoChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n this$1.drawChart(chart, \"GeoChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions$2(chart, chart.options, chartOptions);\n var series = chart.data,\n rows2 = [],\n i,\n j,\n data,\n d;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n d = series[i].data;\n\n for (j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n data = new this$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n this$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n };\n\n defaultExport$2.prototype.renderTimeline = function renderTimeline(chart) {\n var this$1 = this;\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n var options = merge(merge(defaultOptions$2, chartOptions), chart.options.library || {});\n var data = new this$1.library.visualization.DataTable();\n data.addColumn({\n type: \"string\",\n id: \"Name\"\n });\n data.addColumn({\n type: \"date\",\n id: \"Start\"\n });\n data.addColumn({\n type: \"date\",\n id: \"End\"\n });\n data.addRows(chart.data);\n chart.element.style.lineHeight = \"normal\";\n this$1.drawChart(chart, \"Timeline\", data, options);\n });\n };\n\n defaultExport$2.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n };\n\n defaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n };\n\n defaultExport$2.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {\n var this$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({\n pack: pack,\n callback: callback\n });\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true; // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n\n var loadOptions = {\n packages: [pack],\n callback: function callback() {\n this$1.runCallbacks();\n }\n };\n\n var config = chart.__config();\n\n if (config.language) {\n loadOptions.language = config.language;\n }\n\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n };\n\n defaultExport$2.prototype.runCallbacks = function runCallbacks() {\n var cb, call;\n\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n call = this.library.visualization && (cb.pack === \"corechart\" && this.library.visualization.LineChart || cb.pack === \"timeline\" && this.library.visualization.Timeline || cb.pack === \"geochart\" && this.library.visualization.GeoChart);\n\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n }; // cant use object as key\n\n\n defaultExport$2.prototype.createDataTable = function createDataTable(series, columnType) {\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n\n rows[key][i] = toFloat(d[1]);\n }\n }\n\n var rows2 = [];\n var day = true;\n var value;\n\n for (j = 0; j < sortedLabels.length; j++) {\n i = sortedLabels[j];\n\n if (columnType === \"datetime\") {\n value = new Date(toFloat(i));\n day = day && isDay(value);\n } else if (columnType === \"number\") {\n value = toFloat(i);\n } else {\n value = i;\n }\n\n rows2.push([value].concat(rows[i]));\n }\n\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (i = 0; i < rows2.length; i++) {\n rows2[i][0] = toStr(rows2[i][0]);\n }\n\n columnType = \"string\";\n } // create datatable\n\n\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n return data;\n };\n\n var pendingRequests = [],\n runningRequests = 0,\n maxRequests = 4;\n\n function pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n }\n\n function runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n }\n\n function requestComplete() {\n runningRequests--;\n runNext();\n }\n\n function getJSON(url, success, error) {\n ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n var message = typeof errorThrown === \"string\" ? errorThrown : errorThrown.message;\n error(message);\n });\n }\n\n function ajaxCall(url, success, error) {\n var $ = window.jQuery || window.Zepto || window.$;\n\n if ($ && $.ajax) {\n $.ajax({\n dataType: \"json\",\n url: url,\n success: success,\n error: error,\n complete: requestComplete\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n xhr.onload = function () {\n requestComplete();\n\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n } else {\n error(xhr, \"error\", xhr.statusText);\n }\n };\n\n xhr.send();\n }\n }\n\n var config = {};\n var adapters = []; // helpers\n\n function setText(element, text) {\n if (document.body.innerText) {\n element.innerText = text;\n } else {\n element.textContent = text;\n }\n } // TODO remove prefix for all messages\n\n\n function chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n\n setText(element, message);\n element.style.color = \"#ff0000\";\n }\n\n function errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n }\n\n function fetchDataSource(chart, dataSource) {\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n }\n\n function addDownloadButton(chart) {\n var element = chart.element;\n var link = document.createElement(\"a\");\n var download = chart.options.download;\n\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {\n filename: download\n };\n }\n\n link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n\n var image = document.createElement(\"img\");\n image.alt = \"Download\";\n image.style.border = \"none\"; // icon from font-awesome\n // http://fa2png.io/\n\n image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n link.appendChild(image);\n element.style.position = \"relative\";\n chart.__downloadAttached = true; // mouseenter\n\n chart.__enterEvent = addEvent(element, \"mouseover\", function (e) {\n var related = e.relatedTarget; // check download option again to ensure it wasn't changed\n\n if ((!related || related !== this && !childOf(this, related)) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n }); // mouseleave\n\n chart.__leaveEvent = addEvent(element, \"mouseout\", function (e) {\n var related = e.relatedTarget;\n\n if (!related || related !== this && !childOf(this, related)) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n } // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n\n\n function addEvent(elem, event, fn) {\n if (elem.addEventListener) {\n elem.addEventListener(event, fn, false);\n return fn;\n } else {\n var fn2 = function fn2() {\n // set the this pointer same as addEventListener when fn is called\n return fn.call(elem, window.event);\n };\n\n elem.attachEvent(\"on\" + event, fn2);\n return fn2;\n }\n }\n\n function removeEvent(elem, event, fn) {\n if (elem.removeEventListener) {\n elem.removeEventListener(event, fn, false);\n } else {\n elem.detachEvent(\"on\" + event, fn);\n }\n } // https://gist.github.com/shawnbot/4166283\n\n\n function childOf(p, c) {\n if (p === c) {\n return false;\n }\n\n while (c && c !== p) {\n c = c.parentNode;\n }\n\n return c === p;\n }\n\n function getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport$2;\n } else if (isFunction(library)) {\n return defaultExport;\n }\n }\n\n throw new Error(\"Unknown adapter\");\n }\n\n function addAdapter(library) {\n var adapterType = getAdapterType(library);\n var adapter = new adapterType(library);\n\n if (adapters.indexOf(adapter) === -1) {\n adapters.push(adapter);\n }\n }\n\n function loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n }\n\n function dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n function renderChart(chartType, chart) {\n if (chart.options.messages && chart.options.messages.empty && dataEmpty(chart.data, chartType)) {\n setText(chart.element, chart.options.messages.empty);\n } else {\n callAdapter(chartType, chart);\n\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n } // TODO remove chartType if cross-browser way\n // to get the name of the chart class\n\n\n function callAdapter(chartType, chart) {\n var i, adapter, fnName, adapterName;\n fnName = \"render\" + chartType;\n adapterName = chart.options.adapter;\n loadAdapters();\n\n for (i = 0; i < adapters.length; i++) {\n adapter = adapters[i];\n\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n } // process data\n\n\n var toFormattedKey = function toFormattedKey(key, keyType) {\n if (keyType === \"number\") {\n key = toFloat(key);\n } else if (keyType === \"datetime\") {\n key = toDate(key);\n } else {\n key = toStr(key);\n }\n\n return key;\n };\n\n var formatSeriesData = function formatSeriesData(data, keyType) {\n var r = [],\n key,\n j;\n\n for (j = 0; j < data.length; j++) {\n if (keyType === \"bubble\") {\n r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n } else {\n key = toFormattedKey(data[j][0], keyType);\n r.push([key, toFloat(data[j][1])]);\n }\n }\n\n if (keyType === \"datetime\") {\n r.sort(sortByTime);\n } else if (keyType === \"number\") {\n r.sort(sortByNumberSeries);\n }\n\n return r;\n };\n\n function detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n }\n\n function detectXTypeWithFunction(series, func) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = toArr(series[i].data);\n\n for (j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n\n return true;\n } // creates a shallow copy of each element of the array\n // elements are expected to be objects\n\n\n function copySeries(series) {\n var newSeries = [],\n i,\n j;\n\n for (i = 0; i < series.length; i++) {\n var copy = {};\n\n for (j in series[i]) {\n if (series[i].hasOwnProperty(j)) {\n copy[j] = series[i][j];\n }\n }\n\n newSeries.push(copy);\n }\n\n return newSeries;\n }\n\n function processSeries(chart, keyType, noDatetime) {\n var i;\n var opts = chart.options;\n var series = chart.rawData; // see if one series or multiple\n\n if (!isArray(series) || _typeof(series[0]) !== \"object\" || isArray(series[0])) {\n series = [{\n name: opts.label,\n data: series\n }];\n chart.hideLegend = true;\n } else {\n chart.hideLegend = false;\n } // convert to array\n // must come before dataEmpty check\n\n\n series = copySeries(series);\n\n for (i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType ? keyType : opts.discrete ? \"string\" : detectXType(series, noDatetime, opts); // right format\n\n for (i = 0; i < series.length; i++) {\n series[i].data = formatSeriesData(series[i].data, chart.xtype);\n }\n\n return series;\n }\n\n function processSimple(chart) {\n var perfectData = toArr(chart.rawData),\n i;\n\n for (i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n\n return perfectData;\n } // define classes\n\n\n var Chart = function Chart(element, dataSource, options) {\n var elementId;\n\n if (typeof element === \"string\") {\n elementId = element;\n element = document.getElementById(element);\n\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n\n this.element = element;\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n Chartkick.charts[element.id] = this;\n fetchDataSource(this, dataSource);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n };\n\n Chart.prototype.getElement = function getElement() {\n return this.element;\n };\n\n Chart.prototype.getDataSource = function getDataSource() {\n return this.dataSource;\n };\n\n Chart.prototype.getData = function getData() {\n return this.data;\n };\n\n Chart.prototype.getOptions = function getOptions() {\n return this.options;\n };\n\n Chart.prototype.getChartObject = function getChartObject() {\n return this.chart;\n };\n\n Chart.prototype.getAdapter = function getAdapter() {\n return this.adapter;\n };\n\n Chart.prototype.updateData = function updateData(dataSource, options) {\n this.dataSource = dataSource;\n\n if (options) {\n this.__updateOptions(options);\n }\n\n fetchDataSource(this, dataSource);\n };\n\n Chart.prototype.setOptions = function setOptions(options) {\n this.__updateOptions(options);\n\n this.redraw();\n };\n\n Chart.prototype.redraw = function redraw() {\n fetchDataSource(this, this.rawData);\n };\n\n Chart.prototype.refreshData = function refreshData() {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + new Date().getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n };\n\n Chart.prototype.startRefresh = function startRefresh() {\n var this$1 = this;\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval(function () {\n this$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n };\n\n Chart.prototype.stopRefresh = function stopRefresh() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n\n Chart.prototype.toImage = function toImage(download) {\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.chart.canvas;\n var ctx = this.chart.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n // TODO throw error in next major version\n // throw new Error(\"Feature only available for Chart.js\");\n return null;\n }\n };\n\n Chart.prototype.destroy = function destroy() {\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n removeEvent(this.element, \"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n }\n };\n\n Chart.prototype.__updateOptions = function __updateOptions(options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n };\n\n Chart.prototype.__render = function __render() {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n };\n\n Chart.prototype.__config = function __config() {\n return config;\n };\n\n var LineChart = /*@__PURE__*/function (Chart) {\n function LineChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create(Chart && Chart.prototype);\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName() {\n return \"LineChart\";\n };\n\n return LineChart;\n }(Chart);\n\n var PieChart = /*@__PURE__*/function (Chart) {\n function PieChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create(Chart && Chart.prototype);\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName() {\n return \"PieChart\";\n };\n\n return PieChart;\n }(Chart);\n\n var ColumnChart = /*@__PURE__*/function (Chart) {\n function ColumnChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create(Chart && Chart.prototype);\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName() {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n }(Chart);\n\n var BarChart = /*@__PURE__*/function (Chart) {\n function BarChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create(Chart && Chart.prototype);\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName() {\n return \"BarChart\";\n };\n\n return BarChart;\n }(Chart);\n\n var AreaChart = /*@__PURE__*/function (Chart) {\n function AreaChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create(Chart && Chart.prototype);\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName() {\n return \"AreaChart\";\n };\n\n return AreaChart;\n }(Chart);\n\n var GeoChart = /*@__PURE__*/function (Chart) {\n function GeoChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create(Chart && Chart.prototype);\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName() {\n return \"GeoChart\";\n };\n\n return GeoChart;\n }(Chart);\n\n var ScatterChart = /*@__PURE__*/function (Chart) {\n function ScatterChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create(Chart && Chart.prototype);\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData() {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName() {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n }(Chart);\n\n var BubbleChart = /*@__PURE__*/function (Chart) {\n function BubbleChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create(Chart && Chart.prototype);\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData() {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName() {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n }(Chart);\n\n var Timeline = /*@__PURE__*/function (Chart) {\n function Timeline() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create(Chart && Chart.prototype);\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData() {\n var i,\n data = this.rawData;\n\n for (i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName() {\n return \"Timeline\";\n };\n\n return Timeline;\n }(Chart);\n\n var Chartkick = {\n LineChart: LineChart,\n PieChart: PieChart,\n ColumnChart: ColumnChart,\n BarChart: BarChart,\n AreaChart: AreaChart,\n GeoChart: GeoChart,\n ScatterChart: ScatterChart,\n BubbleChart: BubbleChart,\n Timeline: Timeline,\n charts: {},\n configure: function configure(options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function setDefaultOptions(opts) {\n Chartkick.options = opts;\n },\n eachChart: function eachChart(callback) {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n config: config,\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function use(adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n }; // not ideal, but allows for simpler integration\n\n if (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick;\n } // backwards compatibility for esm require\n\n\n Chartkick[\"default\"] = Chartkick;\n return Chartkick;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory(function () {\n try {\n return require('moment');\n } catch (e) {}\n }()) : typeof define === 'function' && define.amd ? define(['require'], function (require) {\n return factory(function () {\n try {\n return require('moment');\n } catch (e) {}\n }());\n }) : (global = global || self, global.Chart = factory(global.moment));\n})(this, function (moment) {\n 'use strict';\n\n moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n function getCjsExportFromNamespace(n) {\n return n && n['default'] || n;\n }\n\n var colorName = {\n \"aliceblue\": [240, 248, 255],\n \"antiquewhite\": [250, 235, 215],\n \"aqua\": [0, 255, 255],\n \"aquamarine\": [127, 255, 212],\n \"azure\": [240, 255, 255],\n \"beige\": [245, 245, 220],\n \"bisque\": [255, 228, 196],\n \"black\": [0, 0, 0],\n \"blanchedalmond\": [255, 235, 205],\n \"blue\": [0, 0, 255],\n \"blueviolet\": [138, 43, 226],\n \"brown\": [165, 42, 42],\n \"burlywood\": [222, 184, 135],\n \"cadetblue\": [95, 158, 160],\n \"chartreuse\": [127, 255, 0],\n \"chocolate\": [210, 105, 30],\n \"coral\": [255, 127, 80],\n \"cornflowerblue\": [100, 149, 237],\n \"cornsilk\": [255, 248, 220],\n \"crimson\": [220, 20, 60],\n \"cyan\": [0, 255, 255],\n \"darkblue\": [0, 0, 139],\n \"darkcyan\": [0, 139, 139],\n \"darkgoldenrod\": [184, 134, 11],\n \"darkgray\": [169, 169, 169],\n \"darkgreen\": [0, 100, 0],\n \"darkgrey\": [169, 169, 169],\n \"darkkhaki\": [189, 183, 107],\n \"darkmagenta\": [139, 0, 139],\n \"darkolivegreen\": [85, 107, 47],\n \"darkorange\": [255, 140, 0],\n \"darkorchid\": [153, 50, 204],\n \"darkred\": [139, 0, 0],\n \"darksalmon\": [233, 150, 122],\n \"darkseagreen\": [143, 188, 143],\n \"darkslateblue\": [72, 61, 139],\n \"darkslategray\": [47, 79, 79],\n \"darkslategrey\": [47, 79, 79],\n \"darkturquoise\": [0, 206, 209],\n \"darkviolet\": [148, 0, 211],\n \"deeppink\": [255, 20, 147],\n \"deepskyblue\": [0, 191, 255],\n \"dimgray\": [105, 105, 105],\n \"dimgrey\": [105, 105, 105],\n \"dodgerblue\": [30, 144, 255],\n \"firebrick\": [178, 34, 34],\n \"floralwhite\": [255, 250, 240],\n \"forestgreen\": [34, 139, 34],\n \"fuchsia\": [255, 0, 255],\n \"gainsboro\": [220, 220, 220],\n \"ghostwhite\": [248, 248, 255],\n \"gold\": [255, 215, 0],\n \"goldenrod\": [218, 165, 32],\n \"gray\": [128, 128, 128],\n \"green\": [0, 128, 0],\n \"greenyellow\": [173, 255, 47],\n \"grey\": [128, 128, 128],\n \"honeydew\": [240, 255, 240],\n \"hotpink\": [255, 105, 180],\n \"indianred\": [205, 92, 92],\n \"indigo\": [75, 0, 130],\n \"ivory\": [255, 255, 240],\n \"khaki\": [240, 230, 140],\n \"lavender\": [230, 230, 250],\n \"lavenderblush\": [255, 240, 245],\n \"lawngreen\": [124, 252, 0],\n \"lemonchiffon\": [255, 250, 205],\n \"lightblue\": [173, 216, 230],\n \"lightcoral\": [240, 128, 128],\n \"lightcyan\": [224, 255, 255],\n \"lightgoldenrodyellow\": [250, 250, 210],\n \"lightgray\": [211, 211, 211],\n \"lightgreen\": [144, 238, 144],\n \"lightgrey\": [211, 211, 211],\n \"lightpink\": [255, 182, 193],\n \"lightsalmon\": [255, 160, 122],\n \"lightseagreen\": [32, 178, 170],\n \"lightskyblue\": [135, 206, 250],\n \"lightslategray\": [119, 136, 153],\n \"lightslategrey\": [119, 136, 153],\n \"lightsteelblue\": [176, 196, 222],\n \"lightyellow\": [255, 255, 224],\n \"lime\": [0, 255, 0],\n \"limegreen\": [50, 205, 50],\n \"linen\": [250, 240, 230],\n \"magenta\": [255, 0, 255],\n \"maroon\": [128, 0, 0],\n \"mediumaquamarine\": [102, 205, 170],\n \"mediumblue\": [0, 0, 205],\n \"mediumorchid\": [186, 85, 211],\n \"mediumpurple\": [147, 112, 219],\n \"mediumseagreen\": [60, 179, 113],\n \"mediumslateblue\": [123, 104, 238],\n \"mediumspringgreen\": [0, 250, 154],\n \"mediumturquoise\": [72, 209, 204],\n \"mediumvioletred\": [199, 21, 133],\n \"midnightblue\": [25, 25, 112],\n \"mintcream\": [245, 255, 250],\n \"mistyrose\": [255, 228, 225],\n \"moccasin\": [255, 228, 181],\n \"navajowhite\": [255, 222, 173],\n \"navy\": [0, 0, 128],\n \"oldlace\": [253, 245, 230],\n \"olive\": [128, 128, 0],\n \"olivedrab\": [107, 142, 35],\n \"orange\": [255, 165, 0],\n \"orangered\": [255, 69, 0],\n \"orchid\": [218, 112, 214],\n \"palegoldenrod\": [238, 232, 170],\n \"palegreen\": [152, 251, 152],\n \"paleturquoise\": [175, 238, 238],\n \"palevioletred\": [219, 112, 147],\n \"papayawhip\": [255, 239, 213],\n \"peachpuff\": [255, 218, 185],\n \"peru\": [205, 133, 63],\n \"pink\": [255, 192, 203],\n \"plum\": [221, 160, 221],\n \"powderblue\": [176, 224, 230],\n \"purple\": [128, 0, 128],\n \"rebeccapurple\": [102, 51, 153],\n \"red\": [255, 0, 0],\n \"rosybrown\": [188, 143, 143],\n \"royalblue\": [65, 105, 225],\n \"saddlebrown\": [139, 69, 19],\n \"salmon\": [250, 128, 114],\n \"sandybrown\": [244, 164, 96],\n \"seagreen\": [46, 139, 87],\n \"seashell\": [255, 245, 238],\n \"sienna\": [160, 82, 45],\n \"silver\": [192, 192, 192],\n \"skyblue\": [135, 206, 235],\n \"slateblue\": [106, 90, 205],\n \"slategray\": [112, 128, 144],\n \"slategrey\": [112, 128, 144],\n \"snow\": [255, 250, 250],\n \"springgreen\": [0, 255, 127],\n \"steelblue\": [70, 130, 180],\n \"tan\": [210, 180, 140],\n \"teal\": [0, 128, 128],\n \"thistle\": [216, 191, 216],\n \"tomato\": [255, 99, 71],\n \"turquoise\": [64, 224, 208],\n \"violet\": [238, 130, 238],\n \"wheat\": [245, 222, 179],\n \"white\": [255, 255, 255],\n \"whitesmoke\": [245, 245, 245],\n \"yellow\": [255, 255, 0],\n \"yellowgreen\": [154, 205, 50]\n };\n var conversions = createCommonjsModule(function (module) {\n /* MIT license */\n // NOTE: conversions should only return primitive values (i.e. arrays, or\n // values that give correct `typeof` results).\n // do not use box values types (i.e. Number(), String(), etc.)\n var reverseKeywords = {};\n\n for (var key in colorName) {\n if (colorName.hasOwnProperty(key)) {\n reverseKeywords[colorName[key]] = key;\n }\n }\n\n var convert = module.exports = {\n rgb: {\n channels: 3,\n labels: 'rgb'\n },\n hsl: {\n channels: 3,\n labels: 'hsl'\n },\n hsv: {\n channels: 3,\n labels: 'hsv'\n },\n hwb: {\n channels: 3,\n labels: 'hwb'\n },\n cmyk: {\n channels: 4,\n labels: 'cmyk'\n },\n xyz: {\n channels: 3,\n labels: 'xyz'\n },\n lab: {\n channels: 3,\n labels: 'lab'\n },\n lch: {\n channels: 3,\n labels: 'lch'\n },\n hex: {\n channels: 1,\n labels: ['hex']\n },\n keyword: {\n channels: 1,\n labels: ['keyword']\n },\n ansi16: {\n channels: 1,\n labels: ['ansi16']\n },\n ansi256: {\n channels: 1,\n labels: ['ansi256']\n },\n hcg: {\n channels: 3,\n labels: ['h', 'c', 'g']\n },\n apple: {\n channels: 3,\n labels: ['r16', 'g16', 'b16']\n },\n gray: {\n channels: 1,\n labels: ['gray']\n }\n }; // hide .channels and .labels properties\n\n for (var model in convert) {\n if (convert.hasOwnProperty(model)) {\n if (!('channels' in convert[model])) {\n throw new Error('missing channels property: ' + model);\n }\n\n if (!('labels' in convert[model])) {\n throw new Error('missing channel labels property: ' + model);\n }\n\n if (convert[model].labels.length !== convert[model].channels) {\n throw new Error('channel and label counts mismatch: ' + model);\n }\n\n var channels = convert[model].channels;\n var labels = convert[model].labels;\n delete convert[model].channels;\n delete convert[model].labels;\n Object.defineProperty(convert[model], 'channels', {\n value: channels\n });\n Object.defineProperty(convert[model], 'labels', {\n value: labels\n });\n }\n }\n\n convert.rgb.hsl = function (rgb) {\n var r = rgb[0] / 255;\n var g = rgb[1] / 255;\n var b = rgb[2] / 255;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h;\n var s;\n var l;\n\n if (max === min) {\n h = 0;\n } else if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else if (b === max) {\n h = 4 + (r - g) / delta;\n }\n\n h = Math.min(h * 60, 360);\n\n if (h < 0) {\n h += 360;\n }\n\n l = (min + max) / 2;\n\n if (max === min) {\n s = 0;\n } else if (l <= 0.5) {\n s = delta / (max + min);\n } else {\n s = delta / (2 - max - min);\n }\n\n return [h, s * 100, l * 100];\n };\n\n convert.rgb.hsv = function (rgb) {\n var rdif;\n var gdif;\n var bdif;\n var h;\n var s;\n var r = rgb[0] / 255;\n var g = rgb[1] / 255;\n var b = rgb[2] / 255;\n var v = Math.max(r, g, b);\n var diff = v - Math.min(r, g, b);\n\n var diffc = function diffc(c) {\n return (v - c) / 6 / diff + 1 / 2;\n };\n\n if (diff === 0) {\n h = s = 0;\n } else {\n s = diff / v;\n rdif = diffc(r);\n gdif = diffc(g);\n bdif = diffc(b);\n\n if (r === v) {\n h = bdif - gdif;\n } else if (g === v) {\n h = 1 / 3 + rdif - bdif;\n } else if (b === v) {\n h = 2 / 3 + gdif - rdif;\n }\n\n if (h < 0) {\n h += 1;\n } else if (h > 1) {\n h -= 1;\n }\n }\n\n return [h * 360, s * 100, v * 100];\n };\n\n convert.rgb.hwb = function (rgb) {\n var r = rgb[0];\n var g = rgb[1];\n var b = rgb[2];\n var h = convert.rgb.hsl(rgb)[0];\n var w = 1 / 255 * Math.min(r, Math.min(g, b));\n b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n return [h, w * 100, b * 100];\n };\n\n convert.rgb.cmyk = function (rgb) {\n var r = rgb[0] / 255;\n var g = rgb[1] / 255;\n var b = rgb[2] / 255;\n var c;\n var m;\n var y;\n var k;\n k = Math.min(1 - r, 1 - g, 1 - b);\n c = (1 - r - k) / (1 - k) || 0;\n m = (1 - g - k) / (1 - k) || 0;\n y = (1 - b - k) / (1 - k) || 0;\n return [c * 100, m * 100, y * 100, k * 100];\n };\n /**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\n\n\n function comparativeDistance(x, y) {\n return Math.pow(x[0] - y[0], 2) + Math.pow(x[1] - y[1], 2) + Math.pow(x[2] - y[2], 2);\n }\n\n convert.rgb.keyword = function (rgb) {\n var reversed = reverseKeywords[rgb];\n\n if (reversed) {\n return reversed;\n }\n\n var currentClosestDistance = Infinity;\n var currentClosestKeyword;\n\n for (var keyword in colorName) {\n if (colorName.hasOwnProperty(keyword)) {\n var value = colorName[keyword]; // Compute comparative distance\n\n var distance = comparativeDistance(rgb, value); // Check if its less, if so set as closest\n\n if (distance < currentClosestDistance) {\n currentClosestDistance = distance;\n currentClosestKeyword = keyword;\n }\n }\n }\n\n return currentClosestKeyword;\n };\n\n convert.keyword.rgb = function (keyword) {\n return colorName[keyword];\n };\n\n convert.rgb.xyz = function (rgb) {\n var r = rgb[0] / 255;\n var g = rgb[1] / 255;\n var b = rgb[2] / 255; // assume sRGB\n\n r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n var x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n var y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n var z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n return [x * 100, y * 100, z * 100];\n };\n\n convert.rgb.lab = function (rgb) {\n var xyz = convert.rgb.xyz(rgb);\n var x = xyz[0];\n var y = xyz[1];\n var z = xyz[2];\n var l;\n var a;\n var b;\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n l = 116 * y - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n return [l, a, b];\n };\n\n convert.hsl.rgb = function (hsl) {\n var h = hsl[0] / 360;\n var s = hsl[1] / 100;\n var l = hsl[2] / 100;\n var t1;\n var t2;\n var t3;\n var rgb;\n var val;\n\n if (s === 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5) {\n t2 = l * (1 + s);\n } else {\n t2 = l + s - l * s;\n }\n\n t1 = 2 * l - t2;\n rgb = [0, 0, 0];\n\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * -(i - 1);\n\n if (t3 < 0) {\n t3++;\n }\n\n if (t3 > 1) {\n t3--;\n }\n\n if (6 * t3 < 1) {\n val = t1 + (t2 - t1) * 6 * t3;\n } else if (2 * t3 < 1) {\n val = t2;\n } else if (3 * t3 < 2) {\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n } else {\n val = t1;\n }\n\n rgb[i] = val * 255;\n }\n\n return rgb;\n };\n\n convert.hsl.hsv = function (hsl) {\n var h = hsl[0];\n var s = hsl[1] / 100;\n var l = hsl[2] / 100;\n var smin = s;\n var lmin = Math.max(l, 0.01);\n var sv;\n var v;\n l *= 2;\n s *= l <= 1 ? l : 2 - l;\n smin *= lmin <= 1 ? lmin : 2 - lmin;\n v = (l + s) / 2;\n sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s);\n return [h, sv * 100, v * 100];\n };\n\n convert.hsv.rgb = function (hsv) {\n var h = hsv[0] / 60;\n var s = hsv[1] / 100;\n var v = hsv[2] / 100;\n var hi = Math.floor(h) % 6;\n var f = h - Math.floor(h);\n var p = 255 * v * (1 - s);\n var q = 255 * v * (1 - s * f);\n var t = 255 * v * (1 - s * (1 - f));\n v *= 255;\n\n switch (hi) {\n case 0:\n return [v, t, p];\n\n case 1:\n return [q, v, p];\n\n case 2:\n return [p, v, t];\n\n case 3:\n return [p, q, v];\n\n case 4:\n return [t, p, v];\n\n case 5:\n return [v, p, q];\n }\n };\n\n convert.hsv.hsl = function (hsv) {\n var h = hsv[0];\n var s = hsv[1] / 100;\n var v = hsv[2] / 100;\n var vmin = Math.max(v, 0.01);\n var lmin;\n var sl;\n var l;\n l = (2 - s) * v;\n lmin = (2 - s) * vmin;\n sl = s * vmin;\n sl /= lmin <= 1 ? lmin : 2 - lmin;\n sl = sl || 0;\n l /= 2;\n return [h, sl * 100, l * 100];\n }; // http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n\n\n convert.hwb.rgb = function (hwb) {\n var h = hwb[0] / 360;\n var wh = hwb[1] / 100;\n var bl = hwb[2] / 100;\n var ratio = wh + bl;\n var i;\n var v;\n var f;\n var n; // wh + bl cant be > 1\n\n if (ratio > 1) {\n wh /= ratio;\n bl /= ratio;\n }\n\n i = Math.floor(6 * h);\n v = 1 - bl;\n f = 6 * h - i;\n\n if ((i & 0x01) !== 0) {\n f = 1 - f;\n }\n\n n = wh + f * (v - wh); // linear interpolation\n\n var r;\n var g;\n var b;\n\n switch (i) {\n default:\n case 6:\n case 0:\n r = v;\n g = n;\n b = wh;\n break;\n\n case 1:\n r = n;\n g = v;\n b = wh;\n break;\n\n case 2:\n r = wh;\n g = v;\n b = n;\n break;\n\n case 3:\n r = wh;\n g = n;\n b = v;\n break;\n\n case 4:\n r = n;\n g = wh;\n b = v;\n break;\n\n case 5:\n r = v;\n g = wh;\n b = n;\n break;\n }\n\n return [r * 255, g * 255, b * 255];\n };\n\n convert.cmyk.rgb = function (cmyk) {\n var c = cmyk[0] / 100;\n var m = cmyk[1] / 100;\n var y = cmyk[2] / 100;\n var k = cmyk[3] / 100;\n var r;\n var g;\n var b;\n r = 1 - Math.min(1, c * (1 - k) + k);\n g = 1 - Math.min(1, m * (1 - k) + k);\n b = 1 - Math.min(1, y * (1 - k) + k);\n return [r * 255, g * 255, b * 255];\n };\n\n convert.xyz.rgb = function (xyz) {\n var x = xyz[0] / 100;\n var y = xyz[1] / 100;\n var z = xyz[2] / 100;\n var r;\n var g;\n var b;\n r = x * 3.2406 + y * -1.5372 + z * -0.4986;\n g = x * -0.9689 + y * 1.8758 + z * 0.0415;\n b = x * 0.0557 + y * -0.2040 + z * 1.0570; // assume sRGB\n\n r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r * 12.92;\n g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g * 12.92;\n b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b * 12.92;\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n return [r * 255, g * 255, b * 255];\n };\n\n convert.xyz.lab = function (xyz) {\n var x = xyz[0];\n var y = xyz[1];\n var z = xyz[2];\n var l;\n var a;\n var b;\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n l = 116 * y - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n return [l, a, b];\n };\n\n convert.lab.xyz = function (lab) {\n var l = lab[0];\n var a = lab[1];\n var b = lab[2];\n var x;\n var y;\n var z;\n y = (l + 16) / 116;\n x = a / 500 + y;\n z = y - b / 200;\n var y2 = Math.pow(y, 3);\n var x2 = Math.pow(x, 3);\n var z2 = Math.pow(z, 3);\n y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n x *= 95.047;\n y *= 100;\n z *= 108.883;\n return [x, y, z];\n };\n\n convert.lab.lch = function (lab) {\n var l = lab[0];\n var a = lab[1];\n var b = lab[2];\n var hr;\n var h;\n var c;\n hr = Math.atan2(b, a);\n h = hr * 360 / 2 / Math.PI;\n\n if (h < 0) {\n h += 360;\n }\n\n c = Math.sqrt(a * a + b * b);\n return [l, c, h];\n };\n\n convert.lch.lab = function (lch) {\n var l = lch[0];\n var c = lch[1];\n var h = lch[2];\n var a;\n var b;\n var hr;\n hr = h / 360 * 2 * Math.PI;\n a = c * Math.cos(hr);\n b = c * Math.sin(hr);\n return [l, a, b];\n };\n\n convert.rgb.ansi16 = function (args) {\n var r = args[0];\n var g = args[1];\n var b = args[2];\n var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n value = Math.round(value / 50);\n\n if (value === 0) {\n return 30;\n }\n\n var ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255));\n\n if (value === 2) {\n ansi += 60;\n }\n\n return ansi;\n };\n\n convert.hsv.ansi16 = function (args) {\n // optimization here; we already know the value and don't need to get\n // it converted for us.\n return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n };\n\n convert.rgb.ansi256 = function (args) {\n var r = args[0];\n var g = args[1];\n var b = args[2]; // we use the extended greyscale palette here, with the exception of\n // black and white. normal palette only has 4 greyscale shades.\n\n if (r === g && g === b) {\n if (r < 8) {\n return 16;\n }\n\n if (r > 248) {\n return 231;\n }\n\n return Math.round((r - 8) / 247 * 24) + 232;\n }\n\n var ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);\n return ansi;\n };\n\n convert.ansi16.rgb = function (args) {\n var color = args % 10; // handle greyscale\n\n if (color === 0 || color === 7) {\n if (args > 50) {\n color += 3.5;\n }\n\n color = color / 10.5 * 255;\n return [color, color, color];\n }\n\n var mult = (~~(args > 50) + 1) * 0.5;\n var r = (color & 1) * mult * 255;\n var g = (color >> 1 & 1) * mult * 255;\n var b = (color >> 2 & 1) * mult * 255;\n return [r, g, b];\n };\n\n convert.ansi256.rgb = function (args) {\n // handle greyscale\n if (args >= 232) {\n var c = (args - 232) * 10 + 8;\n return [c, c, c];\n }\n\n args -= 16;\n var rem;\n var r = Math.floor(args / 36) / 5 * 255;\n var g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n var b = rem % 6 / 5 * 255;\n return [r, g, b];\n };\n\n convert.rgb.hex = function (args) {\n var integer = ((Math.round(args[0]) & 0xFF) << 16) + ((Math.round(args[1]) & 0xFF) << 8) + (Math.round(args[2]) & 0xFF);\n var string = integer.toString(16).toUpperCase();\n return '000000'.substring(string.length) + string;\n };\n\n convert.hex.rgb = function (args) {\n var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\n if (!match) {\n return [0, 0, 0];\n }\n\n var colorString = match[0];\n\n if (match[0].length === 3) {\n colorString = colorString.split('').map(function (_char) {\n return _char + _char;\n }).join('');\n }\n\n var integer = parseInt(colorString, 16);\n var r = integer >> 16 & 0xFF;\n var g = integer >> 8 & 0xFF;\n var b = integer & 0xFF;\n return [r, g, b];\n };\n\n convert.rgb.hcg = function (rgb) {\n var r = rgb[0] / 255;\n var g = rgb[1] / 255;\n var b = rgb[2] / 255;\n var max = Math.max(Math.max(r, g), b);\n var min = Math.min(Math.min(r, g), b);\n var chroma = max - min;\n var grayscale;\n var hue;\n\n if (chroma < 1) {\n grayscale = min / (1 - chroma);\n } else {\n grayscale = 0;\n }\n\n if (chroma <= 0) {\n hue = 0;\n } else if (max === r) {\n hue = (g - b) / chroma % 6;\n } else if (max === g) {\n hue = 2 + (b - r) / chroma;\n } else {\n hue = 4 + (r - g) / chroma + 4;\n }\n\n hue /= 6;\n hue %= 1;\n return [hue * 360, chroma * 100, grayscale * 100];\n };\n\n convert.hsl.hcg = function (hsl) {\n var s = hsl[1] / 100;\n var l = hsl[2] / 100;\n var c = 1;\n var f = 0;\n\n if (l < 0.5) {\n c = 2.0 * s * l;\n } else {\n c = 2.0 * s * (1.0 - l);\n }\n\n if (c < 1.0) {\n f = (l - 0.5 * c) / (1.0 - c);\n }\n\n return [hsl[0], c * 100, f * 100];\n };\n\n convert.hsv.hcg = function (hsv) {\n var s = hsv[1] / 100;\n var v = hsv[2] / 100;\n var c = s * v;\n var f = 0;\n\n if (c < 1.0) {\n f = (v - c) / (1 - c);\n }\n\n return [hsv[0], c * 100, f * 100];\n };\n\n convert.hcg.rgb = function (hcg) {\n var h = hcg[0] / 360;\n var c = hcg[1] / 100;\n var g = hcg[2] / 100;\n\n if (c === 0.0) {\n return [g * 255, g * 255, g * 255];\n }\n\n var pure = [0, 0, 0];\n var hi = h % 1 * 6;\n var v = hi % 1;\n var w = 1 - v;\n var mg = 0;\n\n switch (Math.floor(hi)) {\n case 0:\n pure[0] = 1;\n pure[1] = v;\n pure[2] = 0;\n break;\n\n case 1:\n pure[0] = w;\n pure[1] = 1;\n pure[2] = 0;\n break;\n\n case 2:\n pure[0] = 0;\n pure[1] = 1;\n pure[2] = v;\n break;\n\n case 3:\n pure[0] = 0;\n pure[1] = w;\n pure[2] = 1;\n break;\n\n case 4:\n pure[0] = v;\n pure[1] = 0;\n pure[2] = 1;\n break;\n\n default:\n pure[0] = 1;\n pure[1] = 0;\n pure[2] = w;\n }\n\n mg = (1.0 - c) * g;\n return [(c * pure[0] + mg) * 255, (c * pure[1] + mg) * 255, (c * pure[2] + mg) * 255];\n };\n\n convert.hcg.hsv = function (hcg) {\n var c = hcg[1] / 100;\n var g = hcg[2] / 100;\n var v = c + g * (1.0 - c);\n var f = 0;\n\n if (v > 0.0) {\n f = c / v;\n }\n\n return [hcg[0], f * 100, v * 100];\n };\n\n convert.hcg.hsl = function (hcg) {\n var c = hcg[1] / 100;\n var g = hcg[2] / 100;\n var l = g * (1.0 - c) + 0.5 * c;\n var s = 0;\n\n if (l > 0.0 && l < 0.5) {\n s = c / (2 * l);\n } else if (l >= 0.5 && l < 1.0) {\n s = c / (2 * (1 - l));\n }\n\n return [hcg[0], s * 100, l * 100];\n };\n\n convert.hcg.hwb = function (hcg) {\n var c = hcg[1] / 100;\n var g = hcg[2] / 100;\n var v = c + g * (1.0 - c);\n return [hcg[0], (v - c) * 100, (1 - v) * 100];\n };\n\n convert.hwb.hcg = function (hwb) {\n var w = hwb[1] / 100;\n var b = hwb[2] / 100;\n var v = 1 - b;\n var c = v - w;\n var g = 0;\n\n if (c < 1) {\n g = (v - c) / (1 - c);\n }\n\n return [hwb[0], c * 100, g * 100];\n };\n\n convert.apple.rgb = function (apple) {\n return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255];\n };\n\n convert.rgb.apple = function (rgb) {\n return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535];\n };\n\n convert.gray.rgb = function (args) {\n return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n };\n\n convert.gray.hsl = convert.gray.hsv = function (args) {\n return [0, 0, args[0]];\n };\n\n convert.gray.hwb = function (gray) {\n return [0, 100, gray[0]];\n };\n\n convert.gray.cmyk = function (gray) {\n return [0, 0, 0, gray[0]];\n };\n\n convert.gray.lab = function (gray) {\n return [gray[0], 0, 0];\n };\n\n convert.gray.hex = function (gray) {\n var val = Math.round(gray[0] / 100 * 255) & 0xFF;\n var integer = (val << 16) + (val << 8) + val;\n var string = integer.toString(16).toUpperCase();\n return '000000'.substring(string.length) + string;\n };\n\n convert.rgb.gray = function (rgb) {\n var val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n return [val / 255 * 100];\n };\n });\n var conversions_1 = conversions.rgb;\n var conversions_2 = conversions.hsl;\n var conversions_3 = conversions.hsv;\n var conversions_4 = conversions.hwb;\n var conversions_5 = conversions.cmyk;\n var conversions_6 = conversions.xyz;\n var conversions_7 = conversions.lab;\n var conversions_8 = conversions.lch;\n var conversions_9 = conversions.hex;\n var conversions_10 = conversions.keyword;\n var conversions_11 = conversions.ansi16;\n var conversions_12 = conversions.ansi256;\n var conversions_13 = conversions.hcg;\n var conversions_14 = conversions.apple;\n var conversions_15 = conversions.gray;\n /*\n \tthis function routes a model to all other models.\n \n \tall functions that are routed have a property `.conversion` attached\n \tto the returned synthetic function. This property is an array\n \tof strings, each with the steps in between the 'from' and 'to'\n \tcolor models (inclusive).\n \n \tconversions that are not possible simply are not included.\n */\n\n function buildGraph() {\n var graph = {}; // https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\n var models = Object.keys(conversions);\n\n for (var len = models.length, i = 0; i < len; i++) {\n graph[models[i]] = {\n // http://jsperf.com/1-vs-infinity\n // micro-opt, but this is simple.\n distance: -1,\n parent: null\n };\n }\n\n return graph;\n } // https://en.wikipedia.org/wiki/Breadth-first_search\n\n\n function deriveBFS(fromModel) {\n var graph = buildGraph();\n var queue = [fromModel]; // unshift -> queue -> pop\n\n graph[fromModel].distance = 0;\n\n while (queue.length) {\n var current = queue.pop();\n var adjacents = Object.keys(conversions[current]);\n\n for (var len = adjacents.length, i = 0; i < len; i++) {\n var adjacent = adjacents[i];\n var node = graph[adjacent];\n\n if (node.distance === -1) {\n node.distance = graph[current].distance + 1;\n node.parent = current;\n queue.unshift(adjacent);\n }\n }\n }\n\n return graph;\n }\n\n function link(from, to) {\n return function (args) {\n return to(from(args));\n };\n }\n\n function wrapConversion(toModel, graph) {\n var path = [graph[toModel].parent, toModel];\n var fn = conversions[graph[toModel].parent][toModel];\n var cur = graph[toModel].parent;\n\n while (graph[cur].parent) {\n path.unshift(graph[cur].parent);\n fn = link(conversions[graph[cur].parent][cur], fn);\n cur = graph[cur].parent;\n }\n\n fn.conversion = path;\n return fn;\n }\n\n var route = function route(fromModel) {\n var graph = deriveBFS(fromModel);\n var conversion = {};\n var models = Object.keys(graph);\n\n for (var len = models.length, i = 0; i < len; i++) {\n var toModel = models[i];\n var node = graph[toModel];\n\n if (node.parent === null) {\n // no possible conversion, or this node is the source model.\n continue;\n }\n\n conversion[toModel] = wrapConversion(toModel, graph);\n }\n\n return conversion;\n };\n\n var convert = {};\n var models = Object.keys(conversions);\n\n function wrapRaw(fn) {\n var wrappedFn = function wrappedFn(args) {\n if (args === undefined || args === null) {\n return args;\n }\n\n if (arguments.length > 1) {\n args = Array.prototype.slice.call(arguments);\n }\n\n return fn(args);\n }; // preserve .conversion property if there is one\n\n\n if ('conversion' in fn) {\n wrappedFn.conversion = fn.conversion;\n }\n\n return wrappedFn;\n }\n\n function wrapRounded(fn) {\n var wrappedFn = function wrappedFn(args) {\n if (args === undefined || args === null) {\n return args;\n }\n\n if (arguments.length > 1) {\n args = Array.prototype.slice.call(arguments);\n }\n\n var result = fn(args); // we're assuming the result is an array here.\n // see notice in conversions.js; don't use box types\n // in conversion functions.\n\n if (_typeof(result) === 'object') {\n for (var len = result.length, i = 0; i < len; i++) {\n result[i] = Math.round(result[i]);\n }\n }\n\n return result;\n }; // preserve .conversion property if there is one\n\n\n if ('conversion' in fn) {\n wrappedFn.conversion = fn.conversion;\n }\n\n return wrappedFn;\n }\n\n models.forEach(function (fromModel) {\n convert[fromModel] = {};\n Object.defineProperty(convert[fromModel], 'channels', {\n value: conversions[fromModel].channels\n });\n Object.defineProperty(convert[fromModel], 'labels', {\n value: conversions[fromModel].labels\n });\n var routes = route(fromModel);\n var routeModels = Object.keys(routes);\n routeModels.forEach(function (toModel) {\n var fn = routes[toModel];\n convert[fromModel][toModel] = wrapRounded(fn);\n convert[fromModel][toModel].raw = wrapRaw(fn);\n });\n });\n var colorConvert = convert;\n var colorName$1 = {\n \"aliceblue\": [240, 248, 255],\n \"antiquewhite\": [250, 235, 215],\n \"aqua\": [0, 255, 255],\n \"aquamarine\": [127, 255, 212],\n \"azure\": [240, 255, 255],\n \"beige\": [245, 245, 220],\n \"bisque\": [255, 228, 196],\n \"black\": [0, 0, 0],\n \"blanchedalmond\": [255, 235, 205],\n \"blue\": [0, 0, 255],\n \"blueviolet\": [138, 43, 226],\n \"brown\": [165, 42, 42],\n \"burlywood\": [222, 184, 135],\n \"cadetblue\": [95, 158, 160],\n \"chartreuse\": [127, 255, 0],\n \"chocolate\": [210, 105, 30],\n \"coral\": [255, 127, 80],\n \"cornflowerblue\": [100, 149, 237],\n \"cornsilk\": [255, 248, 220],\n \"crimson\": [220, 20, 60],\n \"cyan\": [0, 255, 255],\n \"darkblue\": [0, 0, 139],\n \"darkcyan\": [0, 139, 139],\n \"darkgoldenrod\": [184, 134, 11],\n \"darkgray\": [169, 169, 169],\n \"darkgreen\": [0, 100, 0],\n \"darkgrey\": [169, 169, 169],\n \"darkkhaki\": [189, 183, 107],\n \"darkmagenta\": [139, 0, 139],\n \"darkolivegreen\": [85, 107, 47],\n \"darkorange\": [255, 140, 0],\n \"darkorchid\": [153, 50, 204],\n \"darkred\": [139, 0, 0],\n \"darksalmon\": [233, 150, 122],\n \"darkseagreen\": [143, 188, 143],\n \"darkslateblue\": [72, 61, 139],\n \"darkslategray\": [47, 79, 79],\n \"darkslategrey\": [47, 79, 79],\n \"darkturquoise\": [0, 206, 209],\n \"darkviolet\": [148, 0, 211],\n \"deeppink\": [255, 20, 147],\n \"deepskyblue\": [0, 191, 255],\n \"dimgray\": [105, 105, 105],\n \"dimgrey\": [105, 105, 105],\n \"dodgerblue\": [30, 144, 255],\n \"firebrick\": [178, 34, 34],\n \"floralwhite\": [255, 250, 240],\n \"forestgreen\": [34, 139, 34],\n \"fuchsia\": [255, 0, 255],\n \"gainsboro\": [220, 220, 220],\n \"ghostwhite\": [248, 248, 255],\n \"gold\": [255, 215, 0],\n \"goldenrod\": [218, 165, 32],\n \"gray\": [128, 128, 128],\n \"green\": [0, 128, 0],\n \"greenyellow\": [173, 255, 47],\n \"grey\": [128, 128, 128],\n \"honeydew\": [240, 255, 240],\n \"hotpink\": [255, 105, 180],\n \"indianred\": [205, 92, 92],\n \"indigo\": [75, 0, 130],\n \"ivory\": [255, 255, 240],\n \"khaki\": [240, 230, 140],\n \"lavender\": [230, 230, 250],\n \"lavenderblush\": [255, 240, 245],\n \"lawngreen\": [124, 252, 0],\n \"lemonchiffon\": [255, 250, 205],\n \"lightblue\": [173, 216, 230],\n \"lightcoral\": [240, 128, 128],\n \"lightcyan\": [224, 255, 255],\n \"lightgoldenrodyellow\": [250, 250, 210],\n \"lightgray\": [211, 211, 211],\n \"lightgreen\": [144, 238, 144],\n \"lightgrey\": [211, 211, 211],\n \"lightpink\": [255, 182, 193],\n \"lightsalmon\": [255, 160, 122],\n \"lightseagreen\": [32, 178, 170],\n \"lightskyblue\": [135, 206, 250],\n \"lightslategray\": [119, 136, 153],\n \"lightslategrey\": [119, 136, 153],\n \"lightsteelblue\": [176, 196, 222],\n \"lightyellow\": [255, 255, 224],\n \"lime\": [0, 255, 0],\n \"limegreen\": [50, 205, 50],\n \"linen\": [250, 240, 230],\n \"magenta\": [255, 0, 255],\n \"maroon\": [128, 0, 0],\n \"mediumaquamarine\": [102, 205, 170],\n \"mediumblue\": [0, 0, 205],\n \"mediumorchid\": [186, 85, 211],\n \"mediumpurple\": [147, 112, 219],\n \"mediumseagreen\": [60, 179, 113],\n \"mediumslateblue\": [123, 104, 238],\n \"mediumspringgreen\": [0, 250, 154],\n \"mediumturquoise\": [72, 209, 204],\n \"mediumvioletred\": [199, 21, 133],\n \"midnightblue\": [25, 25, 112],\n \"mintcream\": [245, 255, 250],\n \"mistyrose\": [255, 228, 225],\n \"moccasin\": [255, 228, 181],\n \"navajowhite\": [255, 222, 173],\n \"navy\": [0, 0, 128],\n \"oldlace\": [253, 245, 230],\n \"olive\": [128, 128, 0],\n \"olivedrab\": [107, 142, 35],\n \"orange\": [255, 165, 0],\n \"orangered\": [255, 69, 0],\n \"orchid\": [218, 112, 214],\n \"palegoldenrod\": [238, 232, 170],\n \"palegreen\": [152, 251, 152],\n \"paleturquoise\": [175, 238, 238],\n \"palevioletred\": [219, 112, 147],\n \"papayawhip\": [255, 239, 213],\n \"peachpuff\": [255, 218, 185],\n \"peru\": [205, 133, 63],\n \"pink\": [255, 192, 203],\n \"plum\": [221, 160, 221],\n \"powderblue\": [176, 224, 230],\n \"purple\": [128, 0, 128],\n \"rebeccapurple\": [102, 51, 153],\n \"red\": [255, 0, 0],\n \"rosybrown\": [188, 143, 143],\n \"royalblue\": [65, 105, 225],\n \"saddlebrown\": [139, 69, 19],\n \"salmon\": [250, 128, 114],\n \"sandybrown\": [244, 164, 96],\n \"seagreen\": [46, 139, 87],\n \"seashell\": [255, 245, 238],\n \"sienna\": [160, 82, 45],\n \"silver\": [192, 192, 192],\n \"skyblue\": [135, 206, 235],\n \"slateblue\": [106, 90, 205],\n \"slategray\": [112, 128, 144],\n \"slategrey\": [112, 128, 144],\n \"snow\": [255, 250, 250],\n \"springgreen\": [0, 255, 127],\n \"steelblue\": [70, 130, 180],\n \"tan\": [210, 180, 140],\n \"teal\": [0, 128, 128],\n \"thistle\": [216, 191, 216],\n \"tomato\": [255, 99, 71],\n \"turquoise\": [64, 224, 208],\n \"violet\": [238, 130, 238],\n \"wheat\": [245, 222, 179],\n \"white\": [255, 255, 255],\n \"whitesmoke\": [245, 245, 245],\n \"yellow\": [255, 255, 0],\n \"yellowgreen\": [154, 205, 50]\n };\n /* MIT license */\n\n var colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n };\n\n function getRgba(string) {\n if (!string) {\n return;\n }\n\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n\n if (hexAlpha) {\n a = Math.round(parseInt(hexAlpha + hexAlpha, 16) / 255 * 100) / 100;\n }\n } else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n\n if (hexAlpha) {\n a = Math.round(parseInt(hexAlpha, 16) / 255 * 100) / 100;\n }\n } else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n\n a = parseFloat(match[4]);\n } else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n\n a = parseFloat(match[4]);\n } else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n\n rgb = colorName$1[match[1]];\n\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n\n if (!a && a != 0) {\n a = 1;\n } else {\n a = scale(a, 0, 1);\n }\n\n rgb[3] = a;\n return rgb;\n }\n\n function getHsla(string) {\n if (!string) {\n return;\n }\n\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n }\n\n function getHwb(string) {\n if (!string) {\n return;\n }\n\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n }\n\n function getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n }\n\n function getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n }\n\n function getAlpha(string) {\n var vals = getRgba(string);\n\n if (vals) {\n return vals[3];\n } else if (vals = getHsla(string)) {\n return vals[3];\n } else if (vals = getHwb(string)) {\n return vals[3];\n }\n } // generators\n\n\n function hexString(rgba, a) {\n var a = a !== undefined && rgba.length === 3 ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (a >= 0 && a < 1 ? hexDouble(Math.round(a * 255)) : \"\");\n }\n\n function rgbString(rgba, alpha) {\n if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n return rgbaString(rgba, alpha);\n }\n\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n }\n\n function rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = rgba[3] !== undefined ? rgba[3] : 1;\n }\n\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \", \" + alpha + \")\";\n }\n\n function percentString(rgba, alpha) {\n if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n return percentaString(rgba, alpha);\n }\n\n var r = Math.round(rgba[0] / 255 * 100),\n g = Math.round(rgba[1] / 255 * 100),\n b = Math.round(rgba[2] / 255 * 100);\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n }\n\n function percentaString(rgba, alpha) {\n var r = Math.round(rgba[0] / 255 * 100),\n g = Math.round(rgba[1] / 255 * 100),\n b = Math.round(rgba[2] / 255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n }\n\n function hslString(hsla, alpha) {\n if (alpha < 1 || hsla[3] && hsla[3] < 1) {\n return hslaString(hsla, alpha);\n }\n\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n }\n\n function hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = hsla[3] !== undefined ? hsla[3] : 1;\n }\n\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + alpha + \")\";\n } // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n // (hwb have alpha optional & 1 is default value)\n\n\n function hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = hwb[3] !== undefined ? hwb[3] : 1;\n }\n\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\" + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n }\n\n function keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n } // helpers\n\n\n function scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n }\n\n function hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return str.length < 2 ? \"0\" + str : str;\n } //create a list of reverse color names\n\n\n var reverseNames = {};\n\n for (var name in colorName$1) {\n reverseNames[colorName$1[name]] = name;\n }\n /* MIT license */\n\n\n var Color = function Color(obj) {\n if (obj instanceof Color) {\n return obj;\n }\n\n if (!(this instanceof Color)) {\n return new Color(obj);\n }\n\n this.valid = false;\n this.values = {\n rgb: [0, 0, 0],\n hsl: [0, 0, 0],\n hsv: [0, 0, 0],\n hwb: [0, 0, 0],\n cmyk: [0, 0, 0, 0],\n alpha: 1\n }; // parse Color() argument\n\n var vals;\n\n if (typeof obj === 'string') {\n vals = colorString.getRgba(obj);\n\n if (vals) {\n this.setValues('rgb', vals);\n } else if (vals = colorString.getHsla(obj)) {\n this.setValues('hsl', vals);\n } else if (vals = colorString.getHwb(obj)) {\n this.setValues('hwb', vals);\n }\n } else if (_typeof(obj) === 'object') {\n vals = obj;\n\n if (vals.r !== undefined || vals.red !== undefined) {\n this.setValues('rgb', vals);\n } else if (vals.l !== undefined || vals.lightness !== undefined) {\n this.setValues('hsl', vals);\n } else if (vals.v !== undefined || vals.value !== undefined) {\n this.setValues('hsv', vals);\n } else if (vals.w !== undefined || vals.whiteness !== undefined) {\n this.setValues('hwb', vals);\n } else if (vals.c !== undefined || vals.cyan !== undefined) {\n this.setValues('cmyk', vals);\n }\n }\n };\n\n Color.prototype = {\n isValid: function isValid() {\n return this.valid;\n },\n rgb: function rgb() {\n return this.setSpace('rgb', arguments);\n },\n hsl: function hsl() {\n return this.setSpace('hsl', arguments);\n },\n hsv: function hsv() {\n return this.setSpace('hsv', arguments);\n },\n hwb: function hwb() {\n return this.setSpace('hwb', arguments);\n },\n cmyk: function cmyk() {\n return this.setSpace('cmyk', arguments);\n },\n rgbArray: function rgbArray() {\n return this.values.rgb;\n },\n hslArray: function hslArray() {\n return this.values.hsl;\n },\n hsvArray: function hsvArray() {\n return this.values.hsv;\n },\n hwbArray: function hwbArray() {\n var values = this.values;\n\n if (values.alpha !== 1) {\n return values.hwb.concat([values.alpha]);\n }\n\n return values.hwb;\n },\n cmykArray: function cmykArray() {\n return this.values.cmyk;\n },\n rgbaArray: function rgbaArray() {\n var values = this.values;\n return values.rgb.concat([values.alpha]);\n },\n hslaArray: function hslaArray() {\n var values = this.values;\n return values.hsl.concat([values.alpha]);\n },\n alpha: function alpha(val) {\n if (val === undefined) {\n return this.values.alpha;\n }\n\n this.setValues('alpha', val);\n return this;\n },\n red: function red(val) {\n return this.setChannel('rgb', 0, val);\n },\n green: function green(val) {\n return this.setChannel('rgb', 1, val);\n },\n blue: function blue(val) {\n return this.setChannel('rgb', 2, val);\n },\n hue: function hue(val) {\n if (val) {\n val %= 360;\n val = val < 0 ? 360 + val : val;\n }\n\n return this.setChannel('hsl', 0, val);\n },\n saturation: function saturation(val) {\n return this.setChannel('hsl', 1, val);\n },\n lightness: function lightness(val) {\n return this.setChannel('hsl', 2, val);\n },\n saturationv: function saturationv(val) {\n return this.setChannel('hsv', 1, val);\n },\n whiteness: function whiteness(val) {\n return this.setChannel('hwb', 1, val);\n },\n blackness: function blackness(val) {\n return this.setChannel('hwb', 2, val);\n },\n value: function value(val) {\n return this.setChannel('hsv', 2, val);\n },\n cyan: function cyan(val) {\n return this.setChannel('cmyk', 0, val);\n },\n magenta: function magenta(val) {\n return this.setChannel('cmyk', 1, val);\n },\n yellow: function yellow(val) {\n return this.setChannel('cmyk', 2, val);\n },\n black: function black(val) {\n return this.setChannel('cmyk', 3, val);\n },\n hexString: function hexString() {\n return colorString.hexString(this.values.rgb);\n },\n rgbString: function rgbString() {\n return colorString.rgbString(this.values.rgb, this.values.alpha);\n },\n rgbaString: function rgbaString() {\n return colorString.rgbaString(this.values.rgb, this.values.alpha);\n },\n percentString: function percentString() {\n return colorString.percentString(this.values.rgb, this.values.alpha);\n },\n hslString: function hslString() {\n return colorString.hslString(this.values.hsl, this.values.alpha);\n },\n hslaString: function hslaString() {\n return colorString.hslaString(this.values.hsl, this.values.alpha);\n },\n hwbString: function hwbString() {\n return colorString.hwbString(this.values.hwb, this.values.alpha);\n },\n keyword: function keyword() {\n return colorString.keyword(this.values.rgb, this.values.alpha);\n },\n rgbNumber: function rgbNumber() {\n var rgb = this.values.rgb;\n return rgb[0] << 16 | rgb[1] << 8 | rgb[2];\n },\n luminosity: function luminosity() {\n // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n var rgb = this.values.rgb;\n var lum = [];\n\n for (var i = 0; i < rgb.length; i++) {\n var chan = rgb[i] / 255;\n lum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);\n }\n\n return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n },\n contrast: function contrast(color2) {\n // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n var lum1 = this.luminosity();\n var lum2 = color2.luminosity();\n\n if (lum1 > lum2) {\n return (lum1 + 0.05) / (lum2 + 0.05);\n }\n\n return (lum2 + 0.05) / (lum1 + 0.05);\n },\n level: function level(color2) {\n var contrastRatio = this.contrast(color2);\n\n if (contrastRatio >= 7.1) {\n return 'AAA';\n }\n\n return contrastRatio >= 4.5 ? 'AA' : '';\n },\n dark: function dark() {\n // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n var rgb = this.values.rgb;\n var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n return yiq < 128;\n },\n light: function light() {\n return !this.dark();\n },\n negate: function negate() {\n var rgb = [];\n\n for (var i = 0; i < 3; i++) {\n rgb[i] = 255 - this.values.rgb[i];\n }\n\n this.setValues('rgb', rgb);\n return this;\n },\n lighten: function lighten(ratio) {\n var hsl = this.values.hsl;\n hsl[2] += hsl[2] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n darken: function darken(ratio) {\n var hsl = this.values.hsl;\n hsl[2] -= hsl[2] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n saturate: function saturate(ratio) {\n var hsl = this.values.hsl;\n hsl[1] += hsl[1] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n desaturate: function desaturate(ratio) {\n var hsl = this.values.hsl;\n hsl[1] -= hsl[1] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n whiten: function whiten(ratio) {\n var hwb = this.values.hwb;\n hwb[1] += hwb[1] * ratio;\n this.setValues('hwb', hwb);\n return this;\n },\n blacken: function blacken(ratio) {\n var hwb = this.values.hwb;\n hwb[2] += hwb[2] * ratio;\n this.setValues('hwb', hwb);\n return this;\n },\n greyscale: function greyscale() {\n var rgb = this.values.rgb; // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\n var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n this.setValues('rgb', [val, val, val]);\n return this;\n },\n clearer: function clearer(ratio) {\n var alpha = this.values.alpha;\n this.setValues('alpha', alpha - alpha * ratio);\n return this;\n },\n opaquer: function opaquer(ratio) {\n var alpha = this.values.alpha;\n this.setValues('alpha', alpha + alpha * ratio);\n return this;\n },\n rotate: function rotate(degrees) {\n var hsl = this.values.hsl;\n var hue = (hsl[0] + degrees) % 360;\n hsl[0] = hue < 0 ? 360 + hue : hue;\n this.setValues('hsl', hsl);\n return this;\n },\n\n /**\n * Ported from sass implementation in C\n * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n */\n mix: function mix(mixinColor, weight) {\n var color1 = this;\n var color2 = mixinColor;\n var p = weight === undefined ? 0.5 : weight;\n var w = 2 * p - 1;\n var a = color1.alpha() - color2.alpha();\n var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n return this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n },\n toJSON: function toJSON() {\n return this.rgb();\n },\n clone: function clone() {\n // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n // making the final build way to big to embed in Chart.js. So let's do it manually,\n // assuming that values to clone are 1 dimension arrays containing only numbers,\n // except 'alpha' which is a number.\n var result = new Color();\n var source = this.values;\n var target = result.values;\n var value, type;\n\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n value = source[prop];\n type = {}.toString.call(value);\n\n if (type === '[object Array]') {\n target[prop] = value.slice(0);\n } else if (type === '[object Number]') {\n target[prop] = value;\n } else {\n console.error('unexpected color value:', value);\n }\n }\n }\n\n return result;\n }\n };\n Color.prototype.spaces = {\n rgb: ['red', 'green', 'blue'],\n hsl: ['hue', 'saturation', 'lightness'],\n hsv: ['hue', 'saturation', 'value'],\n hwb: ['hue', 'whiteness', 'blackness'],\n cmyk: ['cyan', 'magenta', 'yellow', 'black']\n };\n Color.prototype.maxes = {\n rgb: [255, 255, 255],\n hsl: [360, 100, 100],\n hsv: [360, 100, 100],\n hwb: [360, 100, 100],\n cmyk: [100, 100, 100, 100]\n };\n\n Color.prototype.getValues = function (space) {\n var values = this.values;\n var vals = {};\n\n for (var i = 0; i < space.length; i++) {\n vals[space.charAt(i)] = values[space][i];\n }\n\n if (values.alpha !== 1) {\n vals.a = values.alpha;\n } // {r: 255, g: 255, b: 255, a: 0.4}\n\n\n return vals;\n };\n\n Color.prototype.setValues = function (space, vals) {\n var values = this.values;\n var spaces = this.spaces;\n var maxes = this.maxes;\n var alpha = 1;\n var i;\n this.valid = true;\n\n if (space === 'alpha') {\n alpha = vals;\n } else if (vals.length) {\n // [10, 10, 10]\n values[space] = vals.slice(0, space.length);\n alpha = vals[space.length];\n } else if (vals[space.charAt(0)] !== undefined) {\n // {r: 10, g: 10, b: 10}\n for (i = 0; i < space.length; i++) {\n values[space][i] = vals[space.charAt(i)];\n }\n\n alpha = vals.a;\n } else if (vals[spaces[space][0]] !== undefined) {\n // {red: 10, green: 10, blue: 10}\n var chans = spaces[space];\n\n for (i = 0; i < space.length; i++) {\n values[space][i] = vals[chans[i]];\n }\n\n alpha = vals.alpha;\n }\n\n values.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));\n\n if (space === 'alpha') {\n return false;\n }\n\n var capped; // cap values of the space prior converting all values\n\n for (i = 0; i < space.length; i++) {\n capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n values[space][i] = Math.round(capped);\n } // convert to all the other color spaces\n\n\n for (var sname in spaces) {\n if (sname !== space) {\n values[sname] = colorConvert[space][sname](values[space]);\n }\n }\n\n return true;\n };\n\n Color.prototype.setSpace = function (space, args) {\n var vals = args[0];\n\n if (vals === undefined) {\n // color.rgb()\n return this.getValues(space);\n } // color.rgb(10, 10, 10)\n\n\n if (typeof vals === 'number') {\n vals = Array.prototype.slice.call(args);\n }\n\n this.setValues(space, vals);\n return this;\n };\n\n Color.prototype.setChannel = function (space, index, val) {\n var svalues = this.values[space];\n\n if (val === undefined) {\n // color.red()\n return svalues[index];\n } else if (val === svalues[index]) {\n // color.red(color.red())\n return this;\n } // color.red(100)\n\n\n svalues[index] = val;\n this.setValues(space, svalues);\n return this;\n };\n\n if (typeof window !== 'undefined') {\n window.Color = Color;\n }\n\n var chartjsColor = Color;\n\n function isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n }\n /**\r\n * @namespace Chart.helpers\r\n */\n\n\n var helpers = {\n /**\r\n * An empty function that can be used, for example, for optional callback.\r\n */\n noop: function noop() {},\n\n /**\r\n * Returns a unique id, sequentially generated from a global variable.\r\n * @returns {number}\r\n * @function\r\n */\n uid: function () {\n var id = 0;\n return function () {\n return id++;\n };\n }(),\n\n /**\r\n * Returns true if `value` is neither null nor undefined, else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {boolean}\r\n * @since 2.7.0\r\n */\n isNullOrUndef: function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n },\n\n /**\r\n * Returns true if `value` is an array (including typed arrays), else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {boolean}\r\n * @function\r\n */\n isArray: function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n\n var type = Object.prototype.toString.call(value);\n\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n\n return false;\n },\n\n /**\r\n * Returns true if `value` is an object (excluding null), else returns false.\r\n * @param {*} value - The value to test.\r\n * @returns {boolean}\r\n * @since 2.7.0\r\n */\n isObject: function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n },\n\n /**\r\n * Returns true if `value` is a finite number, else returns false\r\n * @param {*} value - The value to test.\r\n * @returns {boolean}\r\n */\n isFinite: function (_isFinite) {\n function isFinite(_x) {\n return _isFinite.apply(this, arguments);\n }\n\n isFinite.toString = function () {\n return _isFinite.toString();\n };\n\n return isFinite;\n }(function (value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(value);\n }),\n\n /**\r\n * Returns `value` if defined, else returns `defaultValue`.\r\n * @param {*} value - The value to return if defined.\r\n * @param {*} defaultValue - The value to return if `value` is undefined.\r\n * @returns {*}\r\n */\n valueOrDefault: function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n },\n\n /**\r\n * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n * @param {Array} value - The array to lookup for value at `index`.\r\n * @param {number} index - The index in `value` to lookup for value.\r\n * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n * @returns {*}\r\n */\n valueAtIndexOrDefault: function valueAtIndexOrDefault(value, index, defaultValue) {\n return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n },\n\n /**\r\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n * @param {function} fn - The function to call.\r\n * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n * @returns {*}\r\n */\n callback: function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n },\n\n /**\r\n * Note(SB) for performance sake, this method should only be used when loopable type\r\n * is unknown or in none intensive code (not called often and small loopable). Else\r\n * it's preferable to use a regular for() loop and save extra function calls.\r\n * @param {object|Array} loopable - The object or array to be iterated.\r\n * @param {function} fn - The function to call for each item.\r\n * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n */\n each: function each(loopable, fn, thisArg, reverse) {\n var i, len, keys;\n\n if (helpers.isArray(loopable)) {\n len = loopable.length;\n\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (helpers.isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n },\n\n /**\r\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n * @see https://stackoverflow.com/a/14853974\r\n * @param {Array} a0 - The array to compare\r\n * @param {Array} a1 - The array to compare\r\n * @returns {boolean}\r\n */\n arrayEquals: function arrayEquals(a0, a1) {\n var i, ilen, v0, v1;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0 instanceof Array && v1 instanceof Array) {\n if (!helpers.arrayEquals(v0, v1)) {\n return false;\n }\n } else if (v0 !== v1) {\n // NOTE: two different object instances will never be equal: {x:20} != {x:20}\n return false;\n }\n }\n\n return true;\n },\n\n /**\r\n * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n * @param {*} source - The value to clone.\r\n * @returns {*}\r\n */\n clone: function clone(source) {\n if (helpers.isArray(source)) {\n return source.map(helpers.clone);\n }\n\n if (helpers.isObject(source)) {\n var target = Object.create(source);\n var keys = Object.keys(source);\n var klen = keys.length;\n var k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = helpers.clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n },\n\n /**\r\n * The default merger when Chart.helpers.merge is called without merger option.\r\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n * @private\r\n */\n _merger: function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n // We want to ensure we do not copy prototypes over\n // as this can pollute global namespaces\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (helpers.isObject(tval) && helpers.isObject(sval)) {\n helpers.merge(tval, sval, options);\n } else {\n target[key] = helpers.clone(sval);\n }\n },\n\n /**\r\n * Merges source[key] in target[key] only if target[key] is undefined.\r\n * @private\r\n */\n _mergerIf: function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n // We want to ensure we do not copy prototypes over\n // as this can pollute global namespaces\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (helpers.isObject(tval) && helpers.isObject(sval)) {\n helpers.mergeIf(tval, sval);\n } else if (!target.hasOwnProperty(key)) {\n target[key] = helpers.clone(sval);\n }\n },\n\n /**\r\n * Recursively deep copies `source` properties into `target` with the given `options`.\r\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n * @param {object} target - The target object in which all sources are merged into.\r\n * @param {object|object[]} source - Object(s) to merge into `target`.\r\n * @param {object} [options] - Merging options:\r\n * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n * @returns {object} The `target` object.\r\n */\n merge: function merge(target, source, options) {\n var sources = helpers.isArray(source) ? source : [source];\n var ilen = sources.length;\n var merge, i, keys, klen, k;\n\n if (!helpers.isObject(target)) {\n return target;\n }\n\n options = options || {};\n merge = options.merger || helpers._merger;\n\n for (i = 0; i < ilen; ++i) {\n source = sources[i];\n\n if (!helpers.isObject(source)) {\n continue;\n }\n\n keys = Object.keys(source);\n\n for (k = 0, klen = keys.length; k < klen; ++k) {\n merge(keys[k], target, source, options);\n }\n }\n\n return target;\n },\n\n /**\r\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n * @param {object} target - The target object in which all sources are merged into.\r\n * @param {object|object[]} source - Object(s) to merge into `target`.\r\n * @returns {object} The `target` object.\r\n */\n mergeIf: function mergeIf(target, source) {\n return helpers.merge(target, source, {\n merger: helpers._mergerIf\n });\n },\n\n /**\r\n * Applies the contents of two or more objects together into the first object.\r\n * @param {object} target - The target object in which all objects are merged into.\r\n * @param {object} arg1 - Object containing additional properties to merge in target.\r\n * @param {object} argN - Additional objects containing properties to merge in target.\r\n * @returns {object} The `target` object.\r\n */\n extend: Object.assign || function (target) {\n return helpers.merge(target, [].slice.call(arguments, 1), {\n merger: function merger(key, dst, src) {\n dst[key] = src[key];\n }\n });\n },\n\n /**\r\n * Basic javascript inheritance based on the model created in Backbone.js\r\n */\n inherits: function inherits(extensions) {\n var me = this;\n var ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {\n return me.apply(this, arguments);\n };\n\n var Surrogate = function Surrogate() {\n this.constructor = ChartElement;\n };\n\n Surrogate.prototype = me.prototype;\n ChartElement.prototype = new Surrogate();\n ChartElement.extend = helpers.inherits;\n\n if (extensions) {\n helpers.extend(ChartElement.prototype, extensions);\n }\n\n ChartElement.__super__ = me.prototype;\n return ChartElement;\n },\n _deprecated: function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n }\n };\n var helpers_core = helpers; // DEPRECATIONS\n\n /**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers.callCallback = helpers.callback;\n /**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers.indexOf = function (array, item, fromIndex) {\n return Array.prototype.indexOf.call(array, item, fromIndex);\n };\n /**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n\n helpers.getValueOrDefault = helpers.valueOrDefault;\n /**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n /**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\n\n var effects = {\n linear: function linear(t) {\n return t;\n },\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return -t * (t - 2);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t;\n }\n\n return -0.5 * (--t * (t - 2) - 1);\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return (t = t - 1) * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t;\n }\n\n return 0.5 * ((t -= 2) * t * t + 2);\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return -((t = t - 1) * t * t * t - 1);\n },\n easeInOutQuart: function easeInOutQuart(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t * t;\n }\n\n return -0.5 * ((t -= 2) * t * t * t - 2);\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return (t = t - 1) * t * t * t * t + 1;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t * t * t;\n }\n\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n },\n easeInSine: function easeInSine(t) {\n return -Math.cos(t * (Math.PI / 2)) + 1;\n },\n easeOutSine: function easeOutSine(t) {\n return Math.sin(t * (Math.PI / 2));\n },\n easeInOutSine: function easeInOutSine(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n },\n easeInExpo: function easeInExpo(t) {\n return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n },\n easeOutExpo: function easeOutExpo(t) {\n return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n },\n easeInOutExpo: function easeInOutExpo(t) {\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if ((t /= 0.5) < 1) {\n return 0.5 * Math.pow(2, 10 * (t - 1));\n }\n\n return 0.5 * (-Math.pow(2, -10 * --t) + 2);\n },\n easeInCirc: function easeInCirc(t) {\n if (t >= 1) {\n return t;\n }\n\n return -(Math.sqrt(1 - t * t) - 1);\n },\n easeOutCirc: function easeOutCirc(t) {\n return Math.sqrt(1 - (t = t - 1) * t);\n },\n easeInOutCirc: function easeInOutCirc(t) {\n if ((t /= 0.5) < 1) {\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n },\n easeInElastic: function easeInElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if (!p) {\n p = 0.3;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n },\n easeOutElastic: function easeOutElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if (!p) {\n p = 0.3;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n },\n easeInOutElastic: function easeInOutElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if ((t /= 0.5) === 2) {\n return 1;\n }\n\n if (!p) {\n p = 0.45;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n easeInBack: function easeInBack(t) {\n var s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack: function easeOutBack(t) {\n var s = 1.70158;\n return (t = t - 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack: function easeInOutBack(t) {\n var s = 1.70158;\n\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: function easeInBounce(t) {\n return 1 - effects.easeOutBounce(1 - t);\n },\n easeOutBounce: function easeOutBounce(t) {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n }\n\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n easeInOutBounce: function easeInOutBounce(t) {\n if (t < 0.5) {\n return effects.easeInBounce(t * 2) * 0.5;\n }\n\n return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n }\n };\n var helpers_easing = {\n effects: effects\n }; // DEPRECATIONS\n\n /**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers_core.easingEffects = effects;\n var PI = Math.PI;\n var RAD_PER_DEG = PI / 180;\n var DOUBLE_PI = PI * 2;\n var HALF_PI = PI / 2;\n var QUARTER_PI = PI / 4;\n var TWO_THIRDS_PI = PI * 2 / 3;\n /**\r\n * @namespace Chart.helpers.canvas\r\n */\n\n var exports$1 = {\n /**\r\n * Clears the entire canvas associated to the given `chart`.\r\n * @param {Chart} chart - The chart for which to clear the canvas.\r\n */\n clear: function clear(chart) {\n chart.ctx.clearRect(0, 0, chart.width, chart.height);\n },\n\n /**\r\n * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n * given size (width, height) and the same `radius` for all corners.\r\n * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n * @param {number} width - The rectangle's width.\r\n * @param {number} height - The rectangle's height.\r\n * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n */\n roundedRect: function roundedRect(ctx, x, y, width, height, radius) {\n if (radius) {\n var r = Math.min(radius, height / 2, width / 2);\n var left = x + r;\n var top = y + r;\n var right = x + width - r;\n var bottom = y + height - r;\n ctx.moveTo(x, top);\n\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -PI, 0);\n ctx.arc(left, bottom, r, 0, PI);\n } else {\n ctx.arc(left, top, r, -PI, PI);\n }\n\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, width, height);\n }\n },\n drawPoint: function drawPoint(ctx, style, radius, x, y, rotation) {\n var type, xOffset, yOffset, size, cornerRadius;\n var rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && _typeof(style) === 'object') {\n type = style.toString();\n\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, DOUBLE_PI);\n ctx.closePath();\n break;\n\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n\n rad += QUARTER_PI;\n\n /* falls through */\n\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n\n case 'crossRot':\n rad += QUARTER_PI;\n\n /* falls through */\n\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n ctx.stroke();\n },\n\n /**\r\n * Returns true if the point is inside the rectangle\r\n * @param {object} point - The point to test\r\n * @param {object} area - The rectangle\r\n * @returns {boolean}\r\n * @private\r\n */\n _isPointInArea: function _isPointInArea(point, area) {\n var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n return point.x > area.left - epsilon && point.x < area.right + epsilon && point.y > area.top - epsilon && point.y < area.bottom + epsilon;\n },\n clipArea: function clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n },\n unclipArea: function unclipArea(ctx) {\n ctx.restore();\n },\n lineTo: function lineTo(ctx, previous, target, flip) {\n var stepped = target.steppedLine;\n\n if (stepped) {\n if (stepped === 'middle') {\n var midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, flip ? target.y : previous.y);\n ctx.lineTo(midpoint, flip ? previous.y : target.y);\n } else if (stepped === 'after' && !flip || stepped !== 'after' && flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n\n ctx.lineTo(target.x, target.y);\n return;\n }\n\n if (!target.tension) {\n ctx.lineTo(target.x, target.y);\n return;\n }\n\n ctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);\n }\n };\n var helpers_canvas = exports$1; // DEPRECATIONS\n\n /**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers_core.clear = exports$1.clear;\n /**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers_core.drawRoundedRectangle = function (ctx) {\n ctx.beginPath();\n exports$1.roundedRect.apply(exports$1, arguments);\n };\n\n var defaults = {\n /**\r\n * @private\r\n */\n _set: function _set(scope, values) {\n return helpers_core.merge(this[scope] || (this[scope] = {}), values);\n }\n }; // TODO(v3): remove 'global' from namespace. all default are global and\n // there's inconsistency around which options are under 'global'\n\n defaults._set('global', {\n defaultColor: 'rgba(0,0,0,0.1)',\n defaultFontColor: '#666',\n defaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n defaultFontSize: 12,\n defaultFontStyle: 'normal',\n defaultLineHeight: 1.2,\n showLines: true\n });\n\n var core_defaults = defaults;\n var valueOrDefault = helpers_core.valueOrDefault;\n /**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\n\n function toFontString(font) {\n if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n }\n /**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\n\n\n var helpers_options = {\n /**\r\n * Converts the given line height `value` in pixels for a specific font `size`.\r\n * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n * @since 2.7.0\r\n */\n toLineHeight: function toLineHeight(value, size) {\n var matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n\n case '%':\n value /= 100;\n break;\n }\n\n return size * value;\n },\n\n /**\r\n * Converts the given value into a padding object with pre-computed width/height.\r\n * @param {number|object} value - If a number, set the value to all TRBL component,\r\n * else, if and object, use defined properties and sets undefined ones to 0.\r\n * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n * @since 2.7.0\r\n */\n toPadding: function toPadding(value) {\n var t, r, b, l;\n\n if (helpers_core.isObject(value)) {\n t = +value.top || 0;\n r = +value.right || 0;\n b = +value.bottom || 0;\n l = +value.left || 0;\n } else {\n t = r = b = l = +value || 0;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n height: t + b,\n width: l + r\n };\n },\n\n /**\r\n * Parses font options and returns the font object.\r\n * @param {object} options - A object that contains font options to be parsed.\r\n * @return {object} The font object.\r\n * @todo Support font.* options and renamed to toFont().\r\n * @private\r\n */\n _parseFont: function _parseFont(options) {\n var globalDefaults = core_defaults.global;\n var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n var font = {\n family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n size: size,\n style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n weight: null,\n string: ''\n };\n font.string = toFontString(font);\n return font;\n },\n\n /**\r\n * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n * @param {Array} inputs - An array of values, falling back to the last value.\r\n * @param {object} [context] - If defined and the current value is a function, the value\r\n * is called with `context` as first argument and the result becomes the new input.\r\n * @param {number} [index] - If defined and the current value is an array, the value\r\n * at `index` become the new input.\r\n * @param {object} [info] - object to return information about resolution in\r\n * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n * @since 2.7.0\r\n */\n resolve: function resolve(inputs, context, index, info) {\n var cacheable = true;\n var i, ilen, value;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n\n if (value === undefined) {\n continue;\n }\n\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n\n if (index !== undefined && helpers_core.isArray(value)) {\n value = value[index];\n cacheable = false;\n }\n\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n\n return value;\n }\n }\n }\n };\n /**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\n\n var exports$2 = {\n /**\r\n * Returns an array of factors sorted from 1 to sqrt(value)\r\n * @private\r\n */\n _factorize: function _factorize(value) {\n var result = [];\n var sqrt = Math.sqrt(value);\n var i;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n\n if (sqrt === (sqrt | 0)) {\n // if value is a square number\n result.push(sqrt);\n }\n\n result.sort(function (a, b) {\n return a - b;\n }).pop();\n return result;\n },\n log10: Math.log10 || function (x) {\n var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n // Check for whole powers of 10,\n // which due to floating point rounding error should be corrected.\n\n var powerOf10 = Math.round(exponent);\n var isPowerOf10 = x === Math.pow(10, powerOf10);\n return isPowerOf10 ? powerOf10 : exponent;\n }\n };\n var helpers_math = exports$2; // DEPRECATIONS\n\n /**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n\n helpers_core.log10 = exports$2.log10;\n\n var getRtlAdapter = function getRtlAdapter(rectX, width) {\n return {\n x: function x(_x2) {\n return rectX + rectX + width - _x2;\n },\n setWidth: function setWidth(w) {\n width = w;\n },\n textAlign: function textAlign(align) {\n if (align === 'center') {\n return align;\n }\n\n return align === 'right' ? 'left' : 'right';\n },\n xPlus: function xPlus(x, value) {\n return x - value;\n },\n leftForLtr: function leftForLtr(x, itemWidth) {\n return x - itemWidth;\n }\n };\n };\n\n var getLtrAdapter = function getLtrAdapter() {\n return {\n x: function x(_x3) {\n return _x3;\n },\n setWidth: function setWidth(w) {// eslint-disable-line no-unused-vars\n },\n textAlign: function textAlign(align) {\n return align;\n },\n xPlus: function xPlus(x, value) {\n return x + value;\n },\n leftForLtr: function leftForLtr(x, _itemWidth) {\n // eslint-disable-line no-unused-vars\n return x;\n }\n };\n };\n\n var getAdapter = function getAdapter(rtl, rectX, width) {\n return rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\n };\n\n var overrideTextDirection = function overrideTextDirection(ctx, direction) {\n var style, original;\n\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n };\n\n var restoreTextDirection = function restoreTextDirection(ctx) {\n var original = ctx.prevTextDirection;\n\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n };\n\n var helpers_rtl = {\n getRtlAdapter: getAdapter,\n overrideTextDirection: overrideTextDirection,\n restoreTextDirection: restoreTextDirection\n };\n var helpers$1 = helpers_core;\n var easing = helpers_easing;\n var canvas = helpers_canvas;\n var options = helpers_options;\n var math = helpers_math;\n var rtl = helpers_rtl;\n helpers$1.easing = easing;\n helpers$1.canvas = canvas;\n helpers$1.options = options;\n helpers$1.math = math;\n helpers$1.rtl = rtl;\n\n function interpolate(start, view, model, ease) {\n var keys = Object.keys(model);\n var i, ilen, key, actual, origin, target, type, c0, c1;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n target = model[key]; // if a value is added to the model after pivot() has been called, the view\n // doesn't contain it, so let's initialize the view to the target value.\n\n if (!view.hasOwnProperty(key)) {\n view[key] = target;\n }\n\n actual = view[key];\n\n if (actual === target || key[0] === '_') {\n continue;\n }\n\n if (!start.hasOwnProperty(key)) {\n start[key] = actual;\n }\n\n origin = start[key];\n type = _typeof(target);\n\n if (type === _typeof(origin)) {\n if (type === 'string') {\n c0 = chartjsColor(origin);\n\n if (c0.valid) {\n c1 = chartjsColor(target);\n\n if (c1.valid) {\n view[key] = c1.mix(c0, ease).rgbString();\n continue;\n }\n }\n } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n view[key] = origin + (target - origin) * ease;\n continue;\n }\n }\n\n view[key] = target;\n }\n }\n\n var Element = function Element(configuration) {\n helpers$1.extend(this, configuration);\n this.initialize.apply(this, arguments);\n };\n\n helpers$1.extend(Element.prototype, {\n _type: undefined,\n initialize: function initialize() {\n this.hidden = false;\n },\n pivot: function pivot() {\n var me = this;\n\n if (!me._view) {\n me._view = helpers$1.extend({}, me._model);\n }\n\n me._start = {};\n return me;\n },\n transition: function transition(ease) {\n var me = this;\n var model = me._model;\n var start = me._start;\n var view = me._view; // No animation -> No Transition\n\n if (!model || ease === 1) {\n me._view = helpers$1.extend({}, model);\n me._start = null;\n return me;\n }\n\n if (!view) {\n view = me._view = {};\n }\n\n if (!start) {\n start = me._start = {};\n }\n\n interpolate(start, view, model, ease);\n return me;\n },\n tooltipPosition: function tooltipPosition() {\n return {\n x: this._model.x,\n y: this._model.y\n };\n },\n hasValue: function hasValue() {\n return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n }\n });\n Element.extend = helpers$1.inherits;\n var core_element = Element;\n var exports$3 = core_element.extend({\n chart: null,\n // the animation associated chart instance\n currentStep: 0,\n // the current animation step\n numSteps: 60,\n // default number of steps\n easing: '',\n // the easing to use for this animation\n render: null,\n // render function used by the animation service\n onAnimationProgress: null,\n // user specified callback to fire on each step of the animation\n onAnimationComplete: null // user specified callback to fire when the animation finishes\n\n });\n var core_animation = exports$3; // DEPRECATIONS\n\n /**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\n\n Object.defineProperty(exports$3.prototype, 'animationObject', {\n get: function get() {\n return this;\n }\n });\n /**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\n\n Object.defineProperty(exports$3.prototype, 'chartInstance', {\n get: function get() {\n return this.chart;\n },\n set: function set(value) {\n this.chart = value;\n }\n });\n\n core_defaults._set('global', {\n animation: {\n duration: 1000,\n easing: 'easeOutQuart',\n onProgress: helpers$1.noop,\n onComplete: helpers$1.noop\n }\n });\n\n var core_animations = {\n animations: [],\n request: null,\n\n /**\r\n * @param {Chart} chart - The chart to animate.\r\n * @param {Chart.Animation} animation - The animation that we will animate.\r\n * @param {number} duration - The animation duration in ms.\r\n * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n */\n addAnimation: function addAnimation(chart, animation, duration, lazy) {\n var animations = this.animations;\n var i, ilen;\n animation.chart = chart;\n animation.startTime = Date.now();\n animation.duration = duration;\n\n if (!lazy) {\n chart.animating = true;\n }\n\n for (i = 0, ilen = animations.length; i < ilen; ++i) {\n if (animations[i].chart === chart) {\n animations[i] = animation;\n return;\n }\n }\n\n animations.push(animation); // If there are no animations queued, manually kickstart a digest, for lack of a better word\n\n if (animations.length === 1) {\n this.requestAnimationFrame();\n }\n },\n cancelAnimation: function cancelAnimation(chart) {\n var index = helpers$1.findIndex(this.animations, function (animation) {\n return animation.chart === chart;\n });\n\n if (index !== -1) {\n this.animations.splice(index, 1);\n chart.animating = false;\n }\n },\n requestAnimationFrame: function requestAnimationFrame() {\n var me = this;\n\n if (me.request === null) {\n // Skip animation frame requests until the active one is executed.\n // This can happen when processing mouse events, e.g. 'mousemove'\n // and 'mouseout' events will trigger multiple renders.\n me.request = helpers$1.requestAnimFrame.call(window, function () {\n me.request = null;\n me.startDigest();\n });\n }\n },\n\n /**\r\n * @private\r\n */\n startDigest: function startDigest() {\n var me = this;\n me.advance(); // Do we have more stuff to animate?\n\n if (me.animations.length > 0) {\n me.requestAnimationFrame();\n }\n },\n\n /**\r\n * @private\r\n */\n advance: function advance() {\n var animations = this.animations;\n var animation, chart, numSteps, nextStep;\n var i = 0; // 1 animation per chart, so we are looping charts here\n\n while (i < animations.length) {\n animation = animations[i];\n chart = animation.chart;\n numSteps = animation.numSteps; // Make sure that currentStep starts at 1\n // https://github.com/chartjs/Chart.js/issues/6104\n\n nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n animation.currentStep = Math.min(nextStep, numSteps);\n helpers$1.callback(animation.render, [chart, animation], chart);\n helpers$1.callback(animation.onAnimationProgress, [animation], chart);\n\n if (animation.currentStep >= numSteps) {\n helpers$1.callback(animation.onAnimationComplete, [animation], chart);\n chart.animating = false;\n animations.splice(i, 1);\n } else {\n ++i;\n }\n }\n }\n };\n var resolve = helpers$1.options.resolve;\n var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n /**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\n\n function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(function (key) {\n var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n var base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value: function value() {\n var args = Array.prototype.slice.call(arguments);\n var res = base.apply(this, args);\n helpers$1.each(array._chartjs.listeners, function (object) {\n if (typeof object[method] === 'function') {\n object[method].apply(object, args);\n }\n });\n return res;\n }\n });\n });\n }\n /**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\n\n\n function unlistenArrayEvents(array, listener) {\n var stub = array._chartjs;\n\n if (!stub) {\n return;\n }\n\n var listeners = stub.listeners;\n var index = listeners.indexOf(listener);\n\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach(function (key) {\n delete array[key];\n });\n delete array._chartjs;\n } // Base class for all dataset controllers (line, bar, etc)\n\n\n var DatasetController = function DatasetController(chart, datasetIndex) {\n this.initialize(chart, datasetIndex);\n };\n\n helpers$1.extend(DatasetController.prototype, {\n /**\r\n * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n * @type {Chart.core.element}\r\n */\n datasetElementType: null,\n\n /**\r\n * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n * @type {Chart.core.element}\r\n */\n dataElementType: null,\n\n /**\r\n * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n * A derived controller may override this to resolve controller-specific options.\r\n * The keys defined here are for backward compatibility for legend styles.\r\n * @private\r\n */\n _datasetElementOptions: ['backgroundColor', 'borderCapStyle', 'borderColor', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'borderWidth'],\n\n /**\r\n * Data element option keys to be resolved in _resolveDataElementOptions.\r\n * A derived controller may override this to resolve controller-specific options.\r\n * The keys defined here are for backward compatibility for legend styles.\r\n * @private\r\n */\n _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'pointStyle'],\n initialize: function initialize(chart, datasetIndex) {\n var me = this;\n me.chart = chart;\n me.index = datasetIndex;\n me.linkScales();\n me.addElements();\n me._type = me.getMeta().type;\n },\n updateIndex: function updateIndex(datasetIndex) {\n this.index = datasetIndex;\n },\n linkScales: function linkScales() {\n var me = this;\n var meta = me.getMeta();\n var chart = me.chart;\n var scales = chart.scales;\n var dataset = me.getDataset();\n var scalesOpts = chart.options.scales;\n\n if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\n meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\n }\n\n if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\n meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\n }\n },\n getDataset: function getDataset() {\n return this.chart.data.datasets[this.index];\n },\n getMeta: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n },\n getScaleForId: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n },\n\n /**\r\n * @private\r\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.getMeta().yAxisID;\n },\n\n /**\r\n * @private\r\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.getMeta().xAxisID;\n },\n\n /**\r\n * @private\r\n */\n _getValueScale: function _getValueScale() {\n return this.getScaleForId(this._getValueScaleId());\n },\n\n /**\r\n * @private\r\n */\n _getIndexScale: function _getIndexScale() {\n return this.getScaleForId(this._getIndexScaleId());\n },\n reset: function reset() {\n this._update(true);\n },\n\n /**\r\n * @private\r\n */\n destroy: function destroy() {\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n },\n createMetaDataset: function createMetaDataset() {\n var me = this;\n var type = me.datasetElementType;\n return type && new type({\n _chart: me.chart,\n _datasetIndex: me.index\n });\n },\n createMetaData: function createMetaData(index) {\n var me = this;\n var type = me.dataElementType;\n return type && new type({\n _chart: me.chart,\n _datasetIndex: me.index,\n _index: index\n });\n },\n addElements: function addElements() {\n var me = this;\n var meta = me.getMeta();\n var data = me.getDataset().data || [];\n var metaData = meta.data;\n var i, ilen;\n\n for (i = 0, ilen = data.length; i < ilen; ++i) {\n metaData[i] = metaData[i] || me.createMetaData(i);\n }\n\n meta.dataset = meta.dataset || me.createMetaDataset();\n },\n addElementAndReset: function addElementAndReset(index) {\n var element = this.createMetaData(index);\n this.getMeta().data.splice(index, 0, element);\n this.updateElement(element, index, true);\n },\n buildOrUpdateElements: function buildOrUpdateElements() {\n var me = this;\n var dataset = me.getDataset();\n var data = dataset.data || (dataset.data = []); // In order to correctly handle data addition/deletion animation (an thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal meta data accordingly.\n\n if (me._data !== data) {\n if (me._data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(me._data, me);\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, me);\n }\n\n me._data = data;\n } // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n\n\n me.resyncElements();\n },\n\n /**\r\n * Returns the merged user-supplied and default dataset-level options\r\n * @private\r\n */\n _configure: function _configure() {\n var me = this;\n me._config = helpers$1.merge(Object.create(null), [me.chart.options.datasets[me._type], me.getDataset()], {\n merger: function merger(key, target, source) {\n if (key !== '_meta' && key !== 'data') {\n helpers$1._merger(key, target, source);\n }\n }\n });\n },\n _update: function _update(reset) {\n var me = this;\n\n me._configure();\n\n me._cachedDataOpts = null;\n me.update(reset);\n },\n update: helpers$1.noop,\n transition: function transition(easingValue) {\n var meta = this.getMeta();\n var elements = meta.data || [];\n var ilen = elements.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n elements[i].transition(easingValue);\n }\n\n if (meta.dataset) {\n meta.dataset.transition(easingValue);\n }\n },\n draw: function draw() {\n var meta = this.getMeta();\n var elements = meta.data || [];\n var ilen = elements.length;\n var i = 0;\n\n if (meta.dataset) {\n meta.dataset.draw();\n }\n\n for (; i < ilen; ++i) {\n elements[i].draw();\n }\n },\n\n /**\r\n * Returns a set of predefined style properties that should be used to represent the dataset\r\n * or the data if the index is specified\r\n * @param {number} index - data index\r\n * @return {IStyleInterface} style object\r\n */\n getStyle: function getStyle(index) {\n var me = this;\n var meta = me.getMeta();\n var dataset = meta.dataset;\n var style;\n\n me._configure();\n\n if (dataset && index === undefined) {\n style = me._resolveDatasetElementOptions(dataset || {});\n } else {\n index = index || 0;\n style = me._resolveDataElementOptions(meta.data[index] || {}, index);\n }\n\n if (style.fill === false || style.fill === null) {\n style.backgroundColor = style.borderColor;\n }\n\n return style;\n },\n\n /**\r\n * @private\r\n */\n _resolveDatasetElementOptions: function _resolveDatasetElementOptions(element, hover) {\n var me = this;\n var chart = me.chart;\n var datasetOpts = me._config;\n var custom = element.custom || {};\n var options = chart.options.elements[me.datasetElementType.prototype._type] || {};\n var elementOptions = me._datasetElementOptions;\n var values = {};\n var i, ilen, key, readKey; // Scriptable options\n\n var context = {\n chart: chart,\n dataset: me.getDataset(),\n datasetIndex: me.index,\n hover: hover\n };\n\n for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\n key = elementOptions[i];\n readKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\n values[key] = resolve([custom[readKey], datasetOpts[readKey], options[readKey]], context);\n }\n\n return values;\n },\n\n /**\r\n * @private\r\n */\n _resolveDataElementOptions: function _resolveDataElementOptions(element, index) {\n var me = this;\n var custom = element && element.custom;\n var cached = me._cachedDataOpts;\n\n if (cached && !custom) {\n return cached;\n }\n\n var chart = me.chart;\n var datasetOpts = me._config;\n var options = chart.options.elements[me.dataElementType.prototype._type] || {};\n var elementOptions = me._dataElementOptions;\n var values = {}; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: me.getDataset(),\n datasetIndex: me.index\n }; // `resolve` sets cacheable to `false` if any option is indexed or scripted\n\n var info = {\n cacheable: !custom\n };\n var keys, i, ilen, key;\n custom = custom || {};\n\n if (helpers$1.isArray(elementOptions)) {\n for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\n key = elementOptions[i];\n values[key] = resolve([custom[key], datasetOpts[key], options[key]], context, index, info);\n }\n } else {\n keys = Object.keys(elementOptions);\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve([custom[key], datasetOpts[elementOptions[key]], datasetOpts[key], options[key]], context, index, info);\n }\n }\n\n if (info.cacheable) {\n me._cachedDataOpts = Object.freeze(values);\n }\n\n return values;\n },\n removeHoverStyle: function removeHoverStyle(element) {\n helpers$1.merge(element._model, element.$previousStyle || {});\n delete element.$previousStyle;\n },\n setHoverStyle: function setHoverStyle(element) {\n var dataset = this.chart.data.datasets[element._datasetIndex];\n var index = element._index;\n var custom = element.custom || {};\n var model = element._model;\n var getHoverColor = helpers$1.getHoverColor;\n element.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n },\n\n /**\r\n * @private\r\n */\n _removeDatasetHoverStyle: function _removeDatasetHoverStyle() {\n var element = this.getMeta().dataset;\n\n if (element) {\n this.removeHoverStyle(element);\n }\n },\n\n /**\r\n * @private\r\n */\n _setDatasetHoverStyle: function _setDatasetHoverStyle() {\n var element = this.getMeta().dataset;\n var prev = {};\n var i, ilen, key, keys, hoverOptions, model;\n\n if (!element) {\n return;\n }\n\n model = element._model;\n hoverOptions = this._resolveDatasetElementOptions(element, true);\n keys = Object.keys(hoverOptions);\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n prev[key] = model[key];\n model[key] = hoverOptions[key];\n }\n\n element.$previousStyle = prev;\n },\n\n /**\r\n * @private\r\n */\n resyncElements: function resyncElements() {\n var me = this;\n var meta = me.getMeta();\n var data = me.getDataset().data;\n var numMeta = meta.data.length;\n var numData = data.length;\n\n if (numData < numMeta) {\n meta.data.splice(numData, numMeta - numData);\n } else if (numData > numMeta) {\n me.insertElements(numMeta, numData - numMeta);\n }\n },\n\n /**\r\n * @private\r\n */\n insertElements: function insertElements(start, count) {\n for (var i = 0; i < count; ++i) {\n this.addElementAndReset(start + i);\n }\n },\n\n /**\r\n * @private\r\n */\n onDataPush: function onDataPush() {\n var count = arguments.length;\n this.insertElements(this.getDataset().data.length - count, count);\n },\n\n /**\r\n * @private\r\n */\n onDataPop: function onDataPop() {\n this.getMeta().data.pop();\n },\n\n /**\r\n * @private\r\n */\n onDataShift: function onDataShift() {\n this.getMeta().data.shift();\n },\n\n /**\r\n * @private\r\n */\n onDataSplice: function onDataSplice(start, count) {\n this.getMeta().data.splice(start, count);\n this.insertElements(start, arguments.length - 2);\n },\n\n /**\r\n * @private\r\n */\n onDataUnshift: function onDataUnshift() {\n this.insertElements(0, arguments.length);\n }\n });\n DatasetController.extend = helpers$1.inherits;\n var core_datasetController = DatasetController;\n var TAU = Math.PI * 2;\n\n core_defaults._set('global', {\n elements: {\n arc: {\n backgroundColor: core_defaults.global.defaultColor,\n borderColor: '#fff',\n borderWidth: 2,\n borderAlign: 'center'\n }\n }\n });\n\n function clipArc(ctx, arc) {\n var startAngle = arc.startAngle;\n var endAngle = arc.endAngle;\n var pixelMargin = arc.pixelMargin;\n var angleMargin = pixelMargin / arc.outerRadius;\n var x = arc.x;\n var y = arc.y; // Draw an inner border by cliping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n\n ctx.beginPath();\n ctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\n if (arc.innerRadius > pixelMargin) {\n angleMargin = pixelMargin / arc.innerRadius;\n ctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\n }\n\n ctx.closePath();\n ctx.clip();\n }\n\n function drawFullCircleBorders(ctx, vm, arc, inner) {\n var endAngle = arc.endAngle;\n var i;\n\n if (inner) {\n arc.endAngle = arc.startAngle + TAU;\n clipArc(ctx, arc);\n arc.endAngle = endAngle;\n\n if (arc.endAngle === arc.startAngle && arc.fullCircles) {\n arc.endAngle += TAU;\n arc.fullCircles--;\n }\n }\n\n ctx.beginPath();\n ctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\n\n for (i = 0; i < arc.fullCircles; ++i) {\n ctx.stroke();\n }\n\n ctx.beginPath();\n ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\n\n for (i = 0; i < arc.fullCircles; ++i) {\n ctx.stroke();\n }\n }\n\n function drawBorder(ctx, vm, arc) {\n var inner = vm.borderAlign === 'inner';\n\n if (inner) {\n ctx.lineWidth = vm.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = vm.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n\n if (arc.fullCircles) {\n drawFullCircleBorders(ctx, vm, arc, inner);\n }\n\n if (inner) {\n clipArc(ctx, arc);\n }\n\n ctx.beginPath();\n ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\n ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n ctx.closePath();\n ctx.stroke();\n }\n\n var element_arc = core_element.extend({\n _type: 'arc',\n inLabelRange: function inLabelRange(mouseX) {\n var vm = this._view;\n\n if (vm) {\n return Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);\n }\n\n return false;\n },\n inRange: function inRange(chartX, chartY) {\n var vm = this._view;\n\n if (vm) {\n var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {\n x: chartX,\n y: chartY\n });\n var angle = pointRelativePosition.angle;\n var distance = pointRelativePosition.distance; // Sanitise angle range\n\n var startAngle = vm.startAngle;\n var endAngle = vm.endAngle;\n\n while (endAngle < startAngle) {\n endAngle += TAU;\n }\n\n while (angle > endAngle) {\n angle -= TAU;\n }\n\n while (angle < startAngle) {\n angle += TAU;\n } // Check if within the range of the open/close angle\n\n\n var betweenAngles = angle >= startAngle && angle <= endAngle;\n var withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;\n return betweenAngles && withinRadius;\n }\n\n return false;\n },\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n var halfAngle = (vm.startAngle + vm.endAngle) / 2;\n var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n return {\n x: vm.x + Math.cos(halfAngle) * halfRadius,\n y: vm.y + Math.sin(halfAngle) * halfRadius\n };\n },\n getArea: function getArea() {\n var vm = this._view;\n return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n var centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;\n var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n return {\n x: vm.x + Math.cos(centreAngle) * rangeFromCentre,\n y: vm.y + Math.sin(centreAngle) * rangeFromCentre\n };\n },\n draw: function draw() {\n var ctx = this._chart.ctx;\n var vm = this._view;\n var pixelMargin = vm.borderAlign === 'inner' ? 0.33 : 0;\n var arc = {\n x: vm.x,\n y: vm.y,\n innerRadius: vm.innerRadius,\n outerRadius: Math.max(vm.outerRadius - pixelMargin, 0),\n pixelMargin: pixelMargin,\n startAngle: vm.startAngle,\n endAngle: vm.endAngle,\n fullCircles: Math.floor(vm.circumference / TAU)\n };\n var i;\n ctx.save();\n ctx.fillStyle = vm.backgroundColor;\n ctx.strokeStyle = vm.borderColor;\n\n if (arc.fullCircles) {\n arc.endAngle = arc.startAngle + TAU;\n ctx.beginPath();\n ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\n ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n ctx.closePath();\n\n for (i = 0; i < arc.fullCircles; ++i) {\n ctx.fill();\n }\n\n arc.endAngle = arc.startAngle + vm.circumference % TAU;\n }\n\n ctx.beginPath();\n ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\n ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\n ctx.closePath();\n ctx.fill();\n\n if (vm.borderWidth) {\n drawBorder(ctx, vm, arc);\n }\n\n ctx.restore();\n }\n });\n var valueOrDefault$1 = helpers$1.valueOrDefault;\n var defaultColor = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n line: {\n tension: 0.4,\n backgroundColor: defaultColor,\n borderWidth: 3,\n borderColor: defaultColor,\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0.0,\n borderJoinStyle: 'miter',\n capBezierPoints: true,\n fill: true // do we fill in the area between the line and its base axis\n\n }\n }\n });\n\n var element_line = core_element.extend({\n _type: 'line',\n draw: function draw() {\n var me = this;\n var vm = me._view;\n var ctx = me._chart.ctx;\n var spanGaps = vm.spanGaps;\n\n var points = me._children.slice(); // clone array\n\n\n var globalDefaults = core_defaults.global;\n var globalOptionLineElements = globalDefaults.elements.line;\n var lastDrawnIndex = -1;\n var closePath = me._loop;\n var index, previous, currentVM;\n\n if (!points.length) {\n return;\n }\n\n if (me._loop) {\n for (index = 0; index < points.length; ++index) {\n previous = helpers$1.previousItem(points, index); // If the line has an open path, shift the point array\n\n if (!points[index]._view.skip && previous._view.skip) {\n points = points.slice(index).concat(points.slice(0, index));\n closePath = spanGaps;\n break;\n }\n } // If the line has a close path, add the first point again\n\n\n if (closePath) {\n points.push(points[0]);\n }\n }\n\n ctx.save(); // Stroke Line Options\n\n ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; // IE 9 and 10 do not support line dash\n\n if (ctx.setLineDash) {\n ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n }\n\n ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; // Stroke Line\n\n ctx.beginPath(); // First point moves to it's starting position no matter what\n\n currentVM = points[0]._view;\n\n if (!currentVM.skip) {\n ctx.moveTo(currentVM.x, currentVM.y);\n lastDrawnIndex = 0;\n }\n\n for (index = 1; index < points.length; ++index) {\n currentVM = points[index]._view;\n previous = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\n\n if (!currentVM.skip) {\n if (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {\n // There was a gap and this is the first point after the gap\n ctx.moveTo(currentVM.x, currentVM.y);\n } else {\n // Line to next point\n helpers$1.canvas.lineTo(ctx, previous._view, currentVM);\n }\n\n lastDrawnIndex = index;\n }\n }\n\n if (closePath) {\n ctx.closePath();\n }\n\n ctx.stroke();\n ctx.restore();\n }\n });\n var valueOrDefault$2 = helpers$1.valueOrDefault;\n var defaultColor$1 = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n point: {\n radius: 3,\n pointStyle: 'circle',\n backgroundColor: defaultColor$1,\n borderColor: defaultColor$1,\n borderWidth: 1,\n // Hover\n hitRadius: 1,\n hoverRadius: 4,\n hoverBorderWidth: 1\n }\n }\n });\n\n function xRange(mouseX) {\n var vm = this._view;\n return vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;\n }\n\n function yRange(mouseY) {\n var vm = this._view;\n return vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;\n }\n\n var element_point = core_element.extend({\n _type: 'point',\n inRange: function inRange(mouseX, mouseY) {\n var vm = this._view;\n return vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;\n },\n inLabelRange: xRange,\n inXRange: xRange,\n inYRange: yRange,\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y\n };\n },\n getArea: function getArea() {\n return Math.PI * Math.pow(this._view.radius, 2);\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y,\n padding: vm.radius + vm.borderWidth\n };\n },\n draw: function draw(chartArea) {\n var vm = this._view;\n var ctx = this._chart.ctx;\n var pointStyle = vm.pointStyle;\n var rotation = vm.rotation;\n var radius = vm.radius;\n var x = vm.x;\n var y = vm.y;\n var globalDefaults = core_defaults.global;\n var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n if (vm.skip) {\n return;\n } // Clipping for Points.\n\n\n if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n ctx.strokeStyle = vm.borderColor || defaultColor;\n ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n ctx.fillStyle = vm.backgroundColor || defaultColor;\n helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n }\n }\n });\n var defaultColor$2 = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n rectangle: {\n backgroundColor: defaultColor$2,\n borderColor: defaultColor$2,\n borderSkipped: 'bottom',\n borderWidth: 0\n }\n }\n });\n\n function isVertical(vm) {\n return vm && vm.width !== undefined;\n }\n /**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\n\n\n function getBarBounds(vm) {\n var x1, x2, y1, y2, half;\n\n if (isVertical(vm)) {\n half = vm.width / 2;\n x1 = vm.x - half;\n x2 = vm.x + half;\n y1 = Math.min(vm.y, vm.base);\n y2 = Math.max(vm.y, vm.base);\n } else {\n half = vm.height / 2;\n x1 = Math.min(vm.x, vm.base);\n x2 = Math.max(vm.x, vm.base);\n y1 = vm.y - half;\n y2 = vm.y + half;\n }\n\n return {\n left: x1,\n top: y1,\n right: x2,\n bottom: y2\n };\n }\n\n function swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n }\n\n function parseBorderSkipped(vm) {\n var edge = vm.borderSkipped;\n var res = {};\n\n if (!edge) {\n return res;\n }\n\n if (vm.horizontal) {\n if (vm.base > vm.x) {\n edge = swap(edge, 'left', 'right');\n }\n } else if (vm.base < vm.y) {\n edge = swap(edge, 'bottom', 'top');\n }\n\n res[edge] = true;\n return res;\n }\n\n function parseBorderWidth(vm, maxW, maxH) {\n var value = vm.borderWidth;\n var skip = parseBorderSkipped(vm);\n var t, r, b, l;\n\n if (helpers$1.isObject(value)) {\n t = +value.top || 0;\n r = +value.right || 0;\n b = +value.bottom || 0;\n l = +value.left || 0;\n } else {\n t = r = b = l = +value || 0;\n }\n\n return {\n t: skip.top || t < 0 ? 0 : t > maxH ? maxH : t,\n r: skip.right || r < 0 ? 0 : r > maxW ? maxW : r,\n b: skip.bottom || b < 0 ? 0 : b > maxH ? maxH : b,\n l: skip.left || l < 0 ? 0 : l > maxW ? maxW : l\n };\n }\n\n function boundingRects(vm) {\n var bounds = getBarBounds(vm);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(vm, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b\n }\n };\n }\n\n function _inRange(vm, x, y) {\n var skipX = x === null;\n var skipY = y === null;\n var bounds = !vm || skipX && skipY ? false : getBarBounds(vm);\n return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n }\n\n var element_rectangle = core_element.extend({\n _type: 'rectangle',\n draw: function draw() {\n var ctx = this._chart.ctx;\n var vm = this._view;\n var rects = boundingRects(vm);\n var outer = rects.outer;\n var inner = rects.inner;\n ctx.fillStyle = vm.backgroundColor;\n ctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n\n if (outer.w === inner.w && outer.h === inner.h) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n ctx.rect(outer.x, outer.y, outer.w, outer.h);\n ctx.clip();\n ctx.fillStyle = vm.borderColor;\n ctx.rect(inner.x, inner.y, inner.w, inner.h);\n ctx.fill('evenodd');\n ctx.restore();\n },\n height: function height() {\n var vm = this._view;\n return vm.base - vm.y;\n },\n inRange: function inRange(mouseX, mouseY) {\n return _inRange(this._view, mouseX, mouseY);\n },\n inLabelRange: function inLabelRange(mouseX, mouseY) {\n var vm = this._view;\n return isVertical(vm) ? _inRange(vm, mouseX, null) : _inRange(vm, null, mouseY);\n },\n inXRange: function inXRange(mouseX) {\n return _inRange(this._view, mouseX, null);\n },\n inYRange: function inYRange(mouseY) {\n return _inRange(this._view, null, mouseY);\n },\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n var x, y;\n\n if (isVertical(vm)) {\n x = vm.x;\n y = (vm.y + vm.base) / 2;\n } else {\n x = (vm.x + vm.base) / 2;\n y = vm.y;\n }\n\n return {\n x: x,\n y: y\n };\n },\n getArea: function getArea() {\n var vm = this._view;\n return isVertical(vm) ? vm.width * Math.abs(vm.y - vm.base) : vm.height * Math.abs(vm.x - vm.base);\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y\n };\n }\n });\n var elements = {};\n var Arc = element_arc;\n var Line = element_line;\n var Point = element_point;\n var Rectangle = element_rectangle;\n elements.Arc = Arc;\n elements.Line = Line;\n elements.Point = Point;\n elements.Rectangle = Rectangle;\n var deprecated = helpers$1._deprecated;\n var valueOrDefault$3 = helpers$1.valueOrDefault;\n\n core_defaults._set('bar', {\n hover: {\n mode: 'label'\n },\n scales: {\n xAxes: [{\n type: 'category',\n offset: true,\n gridLines: {\n offsetGridLines: true\n }\n }],\n yAxes: [{\n type: 'linear'\n }]\n }\n });\n\n core_defaults._set('global', {\n datasets: {\n bar: {\n categoryPercentage: 0.8,\n barPercentage: 0.9\n }\n }\n });\n /**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\n\n\n function computeMinSampleSize(scale, pixels) {\n var min = scale._length;\n var prev, curr, i, ilen;\n\n for (i = 1, ilen = pixels.length; i < ilen; ++i) {\n min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n }\n\n for (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n min = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\n prev = curr;\n }\n\n return min;\n }\n /**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\n\n\n function computeFitCategoryTraits(index, ruler, options) {\n var thickness = options.barThickness;\n var count = ruler.stackCount;\n var curr = ruler.pixels[index];\n var min = helpers$1.isNullOrUndef(thickness) ? computeMinSampleSize(ruler.scale, ruler.pixels) : -1;\n var size, ratio;\n\n if (helpers$1.isNullOrUndef(thickness)) {\n size = min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * count;\n ratio = 1;\n }\n\n return {\n chunk: size / count,\n ratio: ratio,\n start: curr - size / 2\n };\n }\n /**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\n\n\n function computeFlexCategoryTraits(index, ruler, options) {\n var pixels = ruler.pixels;\n var curr = pixels[index];\n var prev = index > 0 ? pixels[index - 1] : null;\n var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n var percent = options.categoryPercentage;\n var start, size;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / ruler.stackCount,\n ratio: options.barPercentage,\n start: start\n };\n }\n\n var controller_bar = core_datasetController.extend({\n dataElementType: elements.Rectangle,\n\n /**\r\n * @private\r\n */\n _dataElementOptions: ['backgroundColor', 'borderColor', 'borderSkipped', 'borderWidth', 'barPercentage', 'barThickness', 'categoryPercentage', 'maxBarThickness', 'minBarLength'],\n initialize: function initialize() {\n var me = this;\n var meta, scaleOpts;\n core_datasetController.prototype.initialize.apply(me, arguments);\n meta = me.getMeta();\n meta.stack = me.getDataset().stack;\n meta.bar = true;\n scaleOpts = me._getIndexScale().options;\n deprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\n deprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\n deprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\n deprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\n deprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\n },\n update: function update(reset) {\n var me = this;\n var rects = me.getMeta().data;\n var i, ilen;\n me._ruler = me.getRuler();\n\n for (i = 0, ilen = rects.length; i < ilen; ++i) {\n me.updateElement(rects[i], i, reset);\n }\n },\n updateElement: function updateElement(rectangle, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var dataset = me.getDataset();\n\n var options = me._resolveDataElementOptions(rectangle, index);\n\n rectangle._xScale = me.getScaleForId(meta.xAxisID);\n rectangle._yScale = me.getScaleForId(meta.yAxisID);\n rectangle._datasetIndex = me.index;\n rectangle._index = index;\n rectangle._model = {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderSkipped: options.borderSkipped,\n borderWidth: options.borderWidth,\n datasetLabel: dataset.label,\n label: me.chart.data.labels[index]\n };\n\n if (helpers$1.isArray(dataset.data[index])) {\n rectangle._model.borderSkipped = null;\n }\n\n me._updateElementGeometry(rectangle, index, reset, options);\n\n rectangle.pivot();\n },\n\n /**\r\n * @private\r\n */\n _updateElementGeometry: function _updateElementGeometry(rectangle, index, reset, options) {\n var me = this;\n var model = rectangle._model;\n\n var vscale = me._getValueScale();\n\n var base = vscale.getBasePixel();\n var horizontal = vscale.isHorizontal();\n var ruler = me._ruler || me.getRuler();\n var vpixels = me.calculateBarValuePixels(me.index, index, options);\n var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\n model.horizontal = horizontal;\n model.base = reset ? base : vpixels.base;\n model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n model.height = horizontal ? ipixels.size : undefined;\n model.width = horizontal ? undefined : ipixels.size;\n },\n\n /**\r\n * Returns the stacks based on groups and bar visibility.\r\n * @param {number} [last] - The dataset index\r\n * @returns {string[]} The list of stack IDs\r\n * @private\r\n */\n _getStacks: function _getStacks(last) {\n var me = this;\n\n var scale = me._getIndexScale();\n\n var metasets = scale._getMatchingVisibleMetas(me._type);\n\n var stacked = scale.options.stacked;\n var ilen = metasets.length;\n var stacks = [];\n var i, meta;\n\n for (i = 0; i < ilen; ++i) {\n meta = metasets[i]; // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n\n if (meta.index === last) {\n break;\n }\n }\n\n return stacks;\n },\n\n /**\r\n * Returns the effective number of stacks based on groups and bar visibility.\r\n * @private\r\n */\n getStackCount: function getStackCount() {\n return this._getStacks().length;\n },\n\n /**\r\n * Returns the stack index for the given dataset based on groups and bar visibility.\r\n * @param {number} [datasetIndex] - The dataset index\r\n * @param {string} [name] - The stack name to find\r\n * @returns {number} The stack index\r\n * @private\r\n */\n getStackIndex: function getStackIndex(datasetIndex, name) {\n var stacks = this._getStacks(datasetIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present\n\n return index === -1 ? stacks.length - 1 : index;\n },\n\n /**\r\n * @private\r\n */\n getRuler: function getRuler() {\n var me = this;\n\n var scale = me._getIndexScale();\n\n var pixels = [];\n var i, ilen;\n\n for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n pixels.push(scale.getPixelForValue(null, i, me.index));\n }\n\n return {\n pixels: pixels,\n start: scale._startPixel,\n end: scale._endPixel,\n stackCount: me.getStackCount(),\n scale: scale\n };\n },\n\n /**\r\n * Note: pixel values are not clamped to the scale area.\r\n * @private\r\n */\n calculateBarValuePixels: function calculateBarValuePixels(datasetIndex, index, options) {\n var me = this;\n var chart = me.chart;\n\n var scale = me._getValueScale();\n\n var isHorizontal = scale.isHorizontal();\n var datasets = chart.data.datasets;\n\n var metasets = scale._getMatchingVisibleMetas(me._type);\n\n var value = scale._parseValue(datasets[datasetIndex].data[index]);\n\n var minBarLength = options.minBarLength;\n var stacked = scale.options.stacked;\n var stack = me.getMeta().stack;\n var start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\n var length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\n var ilen = metasets.length;\n var i, imeta, ivalue, base, head, size, stackLength;\n\n if (stacked || stacked === undefined && stack !== undefined) {\n for (i = 0; i < ilen; ++i) {\n imeta = metasets[i];\n\n if (imeta.index === datasetIndex) {\n break;\n }\n\n if (imeta.stack === stack) {\n stackLength = scale._parseValue(datasets[imeta.index].data[index]);\n ivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\n\n if (value.min < 0 && ivalue < 0 || value.max >= 0 && ivalue > 0) {\n start += ivalue;\n }\n }\n }\n }\n\n base = scale.getPixelForValue(start);\n head = scale.getPixelForValue(start + length);\n size = head - base;\n\n if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n size = minBarLength;\n\n if (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\n head = base - minBarLength;\n } else {\n head = base + minBarLength;\n }\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n },\n\n /**\r\n * @private\r\n */\n calculateBarIndexPixels: function calculateBarIndexPixels(datasetIndex, index, ruler, options) {\n var me = this;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);\n var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n var center = range.start + range.chunk * stackIndex + range.chunk / 2;\n var size = Math.min(valueOrDefault$3(options.maxBarThickness, Infinity), range.chunk * range.ratio);\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n },\n draw: function draw() {\n var me = this;\n var chart = me.chart;\n\n var scale = me._getValueScale();\n\n var rects = me.getMeta().data;\n var dataset = me.getDataset();\n var ilen = rects.length;\n var i = 0;\n helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n\n for (; i < ilen; ++i) {\n var val = scale._parseValue(dataset.data[i]);\n\n if (!isNaN(val.min) && !isNaN(val.max)) {\n rects[i].draw();\n }\n }\n\n helpers$1.canvas.unclipArea(chart.ctx);\n },\n\n /**\r\n * @private\r\n */\n _resolveDataElementOptions: function _resolveDataElementOptions() {\n var me = this;\n var values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\n\n var indexOpts = me._getIndexScale().options;\n\n var valueOpts = me._getValueScale().options;\n\n values.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\n values.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\n values.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\n values.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\n values.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\n return values;\n }\n });\n var valueOrDefault$4 = helpers$1.valueOrDefault;\n var resolve$1 = helpers$1.options.resolve;\n\n core_defaults._set('bubble', {\n hover: {\n mode: 'single'\n },\n scales: {\n xAxes: [{\n type: 'linear',\n // bubble should probably use a linear scale by default\n position: 'bottom',\n id: 'x-axis-0' // need an ID so datasets can reference the scale\n\n }],\n yAxes: [{\n type: 'linear',\n position: 'left',\n id: 'y-axis-0'\n }]\n },\n tooltips: {\n callbacks: {\n title: function title() {\n // Title doesn't make sense for scatter since we format the data as a point\n return '';\n },\n label: function label(item, data) {\n var datasetLabel = data.datasets[item.datasetIndex].label || '';\n var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n }\n }\n }\n });\n\n var controller_bubble = core_datasetController.extend({\n /**\r\n * @protected\r\n */\n dataElementType: elements.Point,\n\n /**\r\n * @private\r\n */\n _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'],\n\n /**\r\n * @protected\r\n */\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var points = meta.data; // Update Points\n\n helpers$1.each(points, function (point, index) {\n me.updateElement(point, index, reset);\n });\n },\n\n /**\r\n * @protected\r\n */\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var custom = point.custom || {};\n var xScale = me.getScaleForId(meta.xAxisID);\n var yScale = me.getScaleForId(meta.yAxisID);\n\n var options = me._resolveDataElementOptions(point, index);\n\n var data = me.getDataset().data[index];\n var dsIndex = me.index;\n var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(_typeof(data) === 'object' ? data : NaN, index, dsIndex);\n var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n point._xScale = xScale;\n point._yScale = yScale;\n point._options = options;\n point._datasetIndex = dsIndex;\n point._index = index;\n point._model = {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n hitRadius: options.hitRadius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n radius: reset ? 0 : options.radius,\n skip: custom.skip || isNaN(x) || isNaN(y),\n x: x,\n y: y\n };\n point.pivot();\n },\n\n /**\r\n * @protected\r\n */\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n model.radius = options.radius + options.hoverRadius;\n },\n\n /**\r\n * @private\r\n */\n _resolveDataElementOptions: function _resolveDataElementOptions(point, index) {\n var me = this;\n var chart = me.chart;\n var dataset = me.getDataset();\n var custom = point.custom || {};\n var data = dataset.data[index] || {};\n\n var values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments); // Scriptable options\n\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n }; // In case values were cached (and thus frozen), we need to clone the values\n\n if (me._cachedDataOpts === values) {\n values = helpers$1.extend({}, values);\n } // Custom radius resolution\n\n\n values.radius = resolve$1([custom.radius, data.r, me._config.radius, chart.options.elements.point.radius], context, index);\n return values;\n }\n });\n var valueOrDefault$5 = helpers$1.valueOrDefault;\n var PI$1 = Math.PI;\n var DOUBLE_PI$1 = PI$1 * 2;\n var HALF_PI$1 = PI$1 / 2;\n\n core_defaults._set('doughnut', {\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n hover: {\n mode: 'single'\n },\n legendCallback: function legendCallback(chart) {\n var list = document.createElement('ul');\n var data = chart.data;\n var datasets = data.datasets;\n var labels = data.labels;\n var i, ilen, listItem, listItemSpan;\n list.setAttribute('class', chart.id + '-legend');\n\n if (datasets.length) {\n for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\n listItem = list.appendChild(document.createElement('li'));\n listItemSpan = listItem.appendChild(document.createElement('span'));\n listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\n\n if (labels[i]) {\n listItem.appendChild(document.createTextNode(labels[i]));\n }\n }\n }\n\n return list.outerHTML;\n },\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem) {\n var index = legendItem.index;\n var chart = this.chart;\n var i, ilen, meta;\n\n for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n meta = chart.getDatasetMeta(i); // toggle visibility of index if exists\n\n if (meta.data[index]) {\n meta.data[index].hidden = !meta.data[index].hidden;\n }\n }\n\n chart.update();\n }\n },\n // The percentage of the chart that we cut out of the middle.\n cutoutPercentage: 50,\n // The rotation of the chart, where the first data arc begins.\n rotation: -HALF_PI$1,\n // The total circumference of the chart.\n circumference: DOUBLE_PI$1,\n // Need to override these to give a nice default\n tooltips: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem, data) {\n var dataLabel = data.labels[tooltipItem.index];\n var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n if (helpers$1.isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n });\n\n var controller_doughnut = core_datasetController.extend({\n dataElementType: elements.Arc,\n linkScales: helpers$1.noop,\n\n /**\r\n * @private\r\n */\n _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'],\n // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n getRingIndex: function getRingIndex(datasetIndex) {\n var ringIndex = 0;\n\n for (var j = 0; j < datasetIndex; ++j) {\n if (this.chart.isDatasetVisible(j)) {\n ++ringIndex;\n }\n }\n\n return ringIndex;\n },\n update: function update(reset) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var ratioX = 1;\n var ratioY = 1;\n var offsetX = 0;\n var offsetY = 0;\n var meta = me.getMeta();\n var arcs = meta.data;\n var cutout = opts.cutoutPercentage / 100 || 0;\n var circumference = opts.circumference;\n\n var chartWeight = me._getRingWeight(me.index);\n\n var maxWidth, maxHeight, i, ilen; // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n\n if (circumference < DOUBLE_PI$1) {\n var startAngle = opts.rotation % DOUBLE_PI$1;\n startAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\n var endAngle = startAngle + circumference;\n var startX = Math.cos(startAngle);\n var startY = Math.sin(startAngle);\n var endX = Math.cos(endAngle);\n var endY = Math.sin(endAngle);\n var contains0 = startAngle <= 0 && endAngle >= 0 || endAngle >= DOUBLE_PI$1;\n var contains90 = startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1 || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\n var contains180 = startAngle === -PI$1 || endAngle >= PI$1;\n var contains270 = startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1 || endAngle >= PI$1 + HALF_PI$1;\n var minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\n var minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\n var maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\n var maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\n }\n\n chart.borderWidth = me.getMaxBorderWidth();\n maxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\n maxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\n chart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n chart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\n chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n chart.offsetX = offsetX * chart.outerRadius;\n chart.offsetY = offsetY * chart.outerRadius;\n meta.total = me.calculateTotal();\n me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n me.updateElement(arcs[i], i, reset);\n }\n },\n updateElement: function updateElement(arc, index, reset) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var centerX = (chartArea.left + chartArea.right) / 2;\n var centerY = (chartArea.top + chartArea.bottom) / 2;\n var startAngle = opts.rotation; // non reset case handled later\n\n var endAngle = opts.rotation; // non reset case handled later\n\n var dataset = me.getDataset();\n var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\n var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n var options = arc._options || {};\n helpers$1.extend(arc, {\n // Utility\n _datasetIndex: me.index,\n _index: index,\n // Desired view properties\n _model: {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n borderAlign: options.borderAlign,\n x: centerX + chart.offsetX,\n y: centerY + chart.offsetY,\n startAngle: startAngle,\n endAngle: endAngle,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius,\n label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n }\n });\n var model = arc._model; // Set correct angles if not resetting\n\n if (!reset || !animationOpts.animateRotate) {\n if (index === 0) {\n model.startAngle = opts.rotation;\n } else {\n model.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n }\n\n model.endAngle = model.startAngle + model.circumference;\n }\n\n arc.pivot();\n },\n calculateTotal: function calculateTotal() {\n var dataset = this.getDataset();\n var meta = this.getMeta();\n var total = 0;\n var value;\n helpers$1.each(meta.data, function (element, index) {\n value = dataset.data[index];\n\n if (!isNaN(value) && !element.hidden) {\n total += Math.abs(value);\n }\n });\n /* if (total === 0) {\r\n \ttotal = NaN;\r\n }*/\n\n return total;\n },\n calculateCircumference: function calculateCircumference(value) {\n var total = this.getMeta().total;\n\n if (total > 0 && !isNaN(value)) {\n return DOUBLE_PI$1 * (Math.abs(value) / total);\n }\n\n return 0;\n },\n // gets the max border or hover width to properly scale pie charts\n getMaxBorderWidth: function getMaxBorderWidth(arcs) {\n var me = this;\n var max = 0;\n var chart = me.chart;\n var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n\n if (i !== me.index) {\n controller = meta.controller;\n }\n\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arc = arcs[i];\n\n if (controller) {\n controller._configure();\n\n options = controller._resolveDataElementOptions(arc, i);\n } else {\n options = arc._options;\n }\n\n if (options.borderAlign !== 'inner') {\n borderWidth = options.borderWidth;\n hoverWidth = options.hoverBorderWidth;\n max = borderWidth > max ? borderWidth : max;\n max = hoverWidth > max ? hoverWidth : max;\n }\n }\n\n return max;\n },\n\n /**\r\n * @protected\r\n */\n setHoverStyle: function setHoverStyle(arc) {\n var model = arc._model;\n var options = arc._options;\n var getHoverColor = helpers$1.getHoverColor;\n arc.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n },\n\n /**\r\n * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n * @private\r\n */\n _getRingWeightOffset: function _getRingWeightOffset(datasetIndex) {\n var ringWeightOffset = 0;\n\n for (var i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n },\n\n /**\r\n * @private\r\n */\n _getRingWeight: function _getRingWeight(dataSetIndex) {\n return Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n },\n\n /**\r\n * Returns the sum of all visibile data set weights. This value can be 0.\r\n * @private\r\n */\n _getVisibleDatasetWeightTotal: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length);\n }\n });\n\n core_defaults._set('horizontalBar', {\n hover: {\n mode: 'index',\n axis: 'y'\n },\n scales: {\n xAxes: [{\n type: 'linear',\n position: 'bottom'\n }],\n yAxes: [{\n type: 'category',\n position: 'left',\n offset: true,\n gridLines: {\n offsetGridLines: true\n }\n }]\n },\n elements: {\n rectangle: {\n borderSkipped: 'left'\n }\n },\n tooltips: {\n mode: 'index',\n axis: 'y'\n }\n });\n\n core_defaults._set('global', {\n datasets: {\n horizontalBar: {\n categoryPercentage: 0.8,\n barPercentage: 0.9\n }\n }\n });\n\n var controller_horizontalBar = controller_bar.extend({\n /**\r\n * @private\r\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.getMeta().xAxisID;\n },\n\n /**\r\n * @private\r\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.getMeta().yAxisID;\n }\n });\n var valueOrDefault$6 = helpers$1.valueOrDefault;\n var resolve$2 = helpers$1.options.resolve;\n var isPointInArea = helpers$1.canvas._isPointInArea;\n\n core_defaults._set('line', {\n showLines: true,\n spanGaps: false,\n hover: {\n mode: 'label'\n },\n scales: {\n xAxes: [{\n type: 'category',\n id: 'x-axis-0'\n }],\n yAxes: [{\n type: 'linear',\n id: 'y-axis-0'\n }]\n }\n });\n\n function scaleClip(scale, halfBorderWidth) {\n var tickOpts = scale && scale.options.ticks || {};\n var reverse = tickOpts.reverse;\n var min = tickOpts.min === undefined ? halfBorderWidth : 0;\n var max = tickOpts.max === undefined ? halfBorderWidth : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n }\n\n function defaultClip(xScale, yScale, borderWidth) {\n var halfBorderWidth = borderWidth / 2;\n var x = scaleClip(xScale, halfBorderWidth);\n var y = scaleClip(yScale, halfBorderWidth);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n }\n\n function toClip(value) {\n var t, r, b, l;\n\n if (helpers$1.isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l\n };\n }\n\n var controller_line = core_datasetController.extend({\n datasetElementType: elements.Line,\n dataElementType: elements.Point,\n\n /**\r\n * @private\r\n */\n _datasetElementOptions: ['backgroundColor', 'borderCapStyle', 'borderColor', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'borderWidth', 'cubicInterpolationMode', 'fill'],\n\n /**\r\n * @private\r\n */\n _dataElementOptions: {\n backgroundColor: 'pointBackgroundColor',\n borderColor: 'pointBorderColor',\n borderWidth: 'pointBorderWidth',\n hitRadius: 'pointHitRadius',\n hoverBackgroundColor: 'pointHoverBackgroundColor',\n hoverBorderColor: 'pointHoverBorderColor',\n hoverBorderWidth: 'pointHoverBorderWidth',\n hoverRadius: 'pointHoverRadius',\n pointStyle: 'pointStyle',\n radius: 'pointRadius',\n rotation: 'pointRotation'\n },\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var line = meta.dataset;\n var points = meta.data || [];\n var options = me.chart.options;\n var config = me._config;\n var showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\n var i, ilen;\n me._xScale = me.getScaleForId(meta.xAxisID);\n me._yScale = me.getScaleForId(meta.yAxisID); // Update Line\n\n if (showLine) {\n // Compatibility: If the properties are defined with only the old name, use those values\n if (config.tension !== undefined && config.lineTension === undefined) {\n config.lineTension = config.tension;\n } // Utility\n\n\n line._scale = me._yScale;\n line._datasetIndex = me.index; // Data\n\n line._children = points; // Model\n\n line._model = me._resolveDatasetElementOptions(line);\n line.pivot();\n } // Update Points\n\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n me.updateElement(points[i], i, reset);\n }\n\n if (showLine && line._model.tension !== 0) {\n me.updateBezierControlPoints();\n } // Now pivot the point for animation\n\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n points[i].pivot();\n }\n },\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var custom = point.custom || {};\n var dataset = me.getDataset();\n var datasetIndex = me.index;\n var value = dataset.data[index];\n var xScale = me._xScale;\n var yScale = me._yScale;\n var lineModel = meta.dataset._model;\n var x, y;\n\n var options = me._resolveDataElementOptions(point, index);\n\n x = xScale.getPixelForValue(_typeof(value) === 'object' ? value : NaN, index, datasetIndex);\n y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); // Utility\n\n point._xScale = xScale;\n point._yScale = yScale;\n point._options = options;\n point._datasetIndex = datasetIndex;\n point._index = index; // Desired view properties\n\n point._model = {\n x: x,\n y: y,\n skip: custom.skip || isNaN(x) || isNaN(y),\n // Appearance\n radius: options.radius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n steppedLine: lineModel ? lineModel.steppedLine : false,\n // Tooltip\n hitRadius: options.hitRadius\n };\n },\n\n /**\r\n * @private\r\n */\n _resolveDatasetElementOptions: function _resolveDatasetElementOptions(element) {\n var me = this;\n var config = me._config;\n var custom = element.custom || {};\n var options = me.chart.options;\n var lineOptions = options.elements.line;\n\n var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments); // The default behavior of lines is to break at null values, according\n // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n // This option gives lines the ability to span gaps\n\n\n values.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\n values.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\n values.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\n values.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\n return values;\n },\n calculatePointY: function calculatePointY(value, index, datasetIndex) {\n var me = this;\n var chart = me.chart;\n var yScale = me._yScale;\n var sumPos = 0;\n var sumNeg = 0;\n var i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\n\n if (yScale.options.stacked) {\n rightValue = +yScale.getRightValue(value);\n metasets = chart._getSortedVisibleDatasetMetas();\n ilen = metasets.length;\n\n for (i = 0; i < ilen; ++i) {\n dsMeta = metasets[i];\n\n if (dsMeta.index === datasetIndex) {\n break;\n }\n\n ds = chart.data.datasets[dsMeta.index];\n\n if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\n stackedRightValue = +yScale.getRightValue(ds.data[index]);\n\n if (stackedRightValue < 0) {\n sumNeg += stackedRightValue || 0;\n } else {\n sumPos += stackedRightValue || 0;\n }\n }\n }\n\n if (rightValue < 0) {\n return yScale.getPixelForValue(sumNeg + rightValue);\n }\n\n return yScale.getPixelForValue(sumPos + rightValue);\n }\n\n return yScale.getPixelForValue(value);\n },\n updateBezierControlPoints: function updateBezierControlPoints() {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n var lineModel = meta.dataset._model;\n var area = chart.chartArea;\n var points = meta.data || [];\n var i, ilen, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used\n\n if (lineModel.spanGaps) {\n points = points.filter(function (pt) {\n return !pt._model.skip;\n });\n }\n\n function capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n }\n\n if (lineModel.cubicInterpolationMode === 'monotone') {\n helpers$1.splineCurveMonotone(points);\n } else {\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i)._model, model, helpers$1.nextItem(points, i)._model, lineModel.tension);\n model.controlPointPreviousX = controlPoints.previous.x;\n model.controlPointPreviousY = controlPoints.previous.y;\n model.controlPointNextX = controlPoints.next.x;\n model.controlPointNextY = controlPoints.next.y;\n }\n }\n\n if (chart.options.elements.line.capBezierPoints) {\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n\n if (isPointInArea(model, area)) {\n if (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n }\n\n if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n }\n }\n }\n }\n },\n draw: function draw() {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n var points = meta.data || [];\n var area = chart.chartArea;\n var canvas = chart.canvas;\n var i = 0;\n var ilen = points.length;\n var clip;\n\n if (me._showLine) {\n clip = meta.dataset._model.clip;\n helpers$1.canvas.clipArea(chart.ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? canvas.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\n });\n meta.dataset.draw();\n helpers$1.canvas.unclipArea(chart.ctx);\n } // Draw the points\n\n\n for (; i < ilen; ++i) {\n points[i].draw(area);\n }\n },\n\n /**\r\n * @protected\r\n */\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n model.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n }\n });\n var resolve$3 = helpers$1.options.resolve;\n\n core_defaults._set('polarArea', {\n scale: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n gridLines: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n ticks: {\n beginAtZero: true\n }\n },\n // Boolean - Whether to animate the rotation of the chart\n animation: {\n animateRotate: true,\n animateScale: true\n },\n startAngle: -0.5 * Math.PI,\n legendCallback: function legendCallback(chart) {\n var list = document.createElement('ul');\n var data = chart.data;\n var datasets = data.datasets;\n var labels = data.labels;\n var i, ilen, listItem, listItemSpan;\n list.setAttribute('class', chart.id + '-legend');\n\n if (datasets.length) {\n for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\n listItem = list.appendChild(document.createElement('li'));\n listItemSpan = listItem.appendChild(document.createElement('span'));\n listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\n\n if (labels[i]) {\n listItem.appendChild(document.createTextNode(labels[i]));\n }\n }\n }\n\n return list.outerHTML;\n },\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem) {\n var index = legendItem.index;\n var chart = this.chart;\n var i, ilen, meta;\n\n for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n meta = chart.getDatasetMeta(i);\n meta.data[index].hidden = !meta.data[index].hidden;\n }\n\n chart.update();\n }\n },\n // Need to override these to give a nice default\n tooltips: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item, data) {\n return data.labels[item.index] + ': ' + item.yLabel;\n }\n }\n }\n });\n\n var controller_polarArea = core_datasetController.extend({\n dataElementType: elements.Arc,\n linkScales: helpers$1.noop,\n\n /**\r\n * @private\r\n */\n _dataElementOptions: ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'],\n\n /**\r\n * @private\r\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.chart.scale.id;\n },\n\n /**\r\n * @private\r\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.chart.scale.id;\n },\n update: function update(reset) {\n var me = this;\n var dataset = me.getDataset();\n var meta = me.getMeta();\n var start = me.chart.options.startAngle || 0;\n var starts = me._starts = [];\n var angles = me._angles = [];\n var arcs = meta.data;\n var i, ilen, angle;\n\n me._updateRadius();\n\n meta.count = me.countVisibleElements();\n\n for (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n starts[i] = start;\n angle = me._computeAngle(i);\n angles[i] = angle;\n start += angle;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\n me.updateElement(arcs[i], i, reset);\n }\n },\n\n /**\r\n * @private\r\n */\n _updateRadius: function _updateRadius() {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n chart.outerRadius = Math.max(minSize / 2, 0);\n chart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n me.outerRadius = chart.outerRadius - chart.radiusLength * me.index;\n me.innerRadius = me.outerRadius - chart.radiusLength;\n },\n updateElement: function updateElement(arc, index, reset) {\n var me = this;\n var chart = me.chart;\n var dataset = me.getDataset();\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = chart.scale;\n var labels = chart.data.labels;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter; // var negHalfPI = -0.5 * Math.PI;\n\n var datasetStartAngle = opts.startAngle;\n var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n var startAngle = me._starts[index];\n var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n var options = arc._options || {};\n helpers$1.extend(arc, {\n // Utility\n _datasetIndex: me.index,\n _index: index,\n _scale: scale,\n // Desired view properties\n _model: {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n borderAlign: options.borderAlign,\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: reset ? resetRadius : distance,\n startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n }\n });\n arc.pivot();\n },\n countVisibleElements: function countVisibleElements() {\n var dataset = this.getDataset();\n var meta = this.getMeta();\n var count = 0;\n helpers$1.each(meta.data, function (element, index) {\n if (!isNaN(dataset.data[index]) && !element.hidden) {\n count++;\n }\n });\n return count;\n },\n\n /**\r\n * @protected\r\n */\n setHoverStyle: function setHoverStyle(arc) {\n var model = arc._model;\n var options = arc._options;\n var getHoverColor = helpers$1.getHoverColor;\n var valueOrDefault = helpers$1.valueOrDefault;\n arc.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n },\n\n /**\r\n * @private\r\n */\n _computeAngle: function _computeAngle(index) {\n var me = this;\n var count = this.getMeta().count;\n var dataset = me.getDataset();\n var meta = me.getMeta();\n\n if (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n return 0;\n } // Scriptable options\n\n\n var context = {\n chart: me.chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n return resolve$3([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);\n }\n });\n\n core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\n\n core_defaults._set('pie', {\n cutoutPercentage: 0\n }); // Pie charts are Doughnut chart with different defaults\n\n\n var controller_pie = controller_doughnut;\n var valueOrDefault$7 = helpers$1.valueOrDefault;\n\n core_defaults._set('radar', {\n spanGaps: false,\n scale: {\n type: 'radialLinear'\n },\n elements: {\n line: {\n fill: 'start',\n tension: 0 // no bezier in radar\n\n }\n }\n });\n\n var controller_radar = core_datasetController.extend({\n datasetElementType: elements.Line,\n dataElementType: elements.Point,\n linkScales: helpers$1.noop,\n\n /**\r\n * @private\r\n */\n _datasetElementOptions: ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill'],\n\n /**\r\n * @private\r\n */\n _dataElementOptions: {\n backgroundColor: 'pointBackgroundColor',\n borderColor: 'pointBorderColor',\n borderWidth: 'pointBorderWidth',\n hitRadius: 'pointHitRadius',\n hoverBackgroundColor: 'pointHoverBackgroundColor',\n hoverBorderColor: 'pointHoverBorderColor',\n hoverBorderWidth: 'pointHoverBorderWidth',\n hoverRadius: 'pointHoverRadius',\n pointStyle: 'pointStyle',\n radius: 'pointRadius',\n rotation: 'pointRotation'\n },\n\n /**\r\n * @private\r\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.chart.scale.id;\n },\n\n /**\r\n * @private\r\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.chart.scale.id;\n },\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var line = meta.dataset;\n var points = meta.data || [];\n var scale = me.chart.scale;\n var config = me._config;\n var i, ilen; // Compatibility: If the properties are defined with only the old name, use those values\n\n if (config.tension !== undefined && config.lineTension === undefined) {\n config.lineTension = config.tension;\n } // Utility\n\n\n line._scale = scale;\n line._datasetIndex = me.index; // Data\n\n line._children = points;\n line._loop = true; // Model\n\n line._model = me._resolveDatasetElementOptions(line);\n line.pivot(); // Update Points\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n me.updateElement(points[i], i, reset);\n } // Update bezier control points\n\n\n me.updateBezierControlPoints(); // Now pivot the point for animation\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n points[i].pivot();\n }\n },\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var custom = point.custom || {};\n var dataset = me.getDataset();\n var scale = me.chart.scale;\n var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n var options = me._resolveDataElementOptions(point, index);\n\n var lineModel = me.getMeta().dataset._model;\n\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y; // Utility\n\n point._scale = scale;\n point._options = options;\n point._datasetIndex = me.index;\n point._index = index; // Desired view properties\n\n point._model = {\n x: x,\n // value not used in dataset scale, but we want a consistent API between scales\n y: y,\n skip: custom.skip || isNaN(x) || isNaN(y),\n // Appearance\n radius: options.radius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n tension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\n // Tooltip\n hitRadius: options.hitRadius\n };\n },\n\n /**\r\n * @private\r\n */\n _resolveDatasetElementOptions: function _resolveDatasetElementOptions() {\n var me = this;\n var config = me._config;\n var options = me.chart.options;\n\n var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\n\n values.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\n values.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\n return values;\n },\n updateBezierControlPoints: function updateBezierControlPoints() {\n var me = this;\n var meta = me.getMeta();\n var area = me.chart.chartArea;\n var points = meta.data || [];\n var i, ilen, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used\n\n if (meta.dataset._model.spanGaps) {\n points = points.filter(function (pt) {\n return !pt._model.skip;\n });\n }\n\n function capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n }\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i, true)._model, model, helpers$1.nextItem(points, i, true)._model, model.tension); // Prevent the bezier going outside of the bounds of the graph\n\n model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n }\n },\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\n model.radius = valueOrDefault$7(options.hoverRadius, options.radius);\n }\n });\n\n core_defaults._set('scatter', {\n hover: {\n mode: 'single'\n },\n scales: {\n xAxes: [{\n id: 'x-axis-1',\n // need an ID so datasets can reference the scale\n type: 'linear',\n // scatter should not use a category axis\n position: 'bottom'\n }],\n yAxes: [{\n id: 'y-axis-1',\n type: 'linear',\n position: 'left'\n }]\n },\n tooltips: {\n callbacks: {\n title: function title() {\n return ''; // doesn't make sense for scatter since data are formatted as a point\n },\n label: function label(item) {\n return '(' + item.xLabel + ', ' + item.yLabel + ')';\n }\n }\n }\n });\n\n core_defaults._set('global', {\n datasets: {\n scatter: {\n showLine: false\n }\n }\n }); // Scatter charts use line controllers\n\n\n var controller_scatter = controller_line; // NOTE export a map in which the key represents the controller type, not\n // the class, and so must be CamelCase in order to be correctly retrieved\n // by the controller in core.controller.js (`controllers[meta.type]`).\n\n var controllers = {\n bar: controller_bar,\n bubble: controller_bubble,\n doughnut: controller_doughnut,\n horizontalBar: controller_horizontalBar,\n line: controller_line,\n polarArea: controller_polarArea,\n pie: controller_pie,\n radar: controller_radar,\n scatter: controller_scatter\n };\n /**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\n\n function getRelativePosition(e, chart) {\n if (e[\"native\"]) {\n return {\n x: e.x,\n y: e.y\n };\n }\n\n return helpers$1.getRelativePosition(e, chart);\n }\n /**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\n\n\n function parseVisibleItems(chart, handler) {\n var metasets = chart._getSortedVisibleDatasetMetas();\n\n var metadata, i, j, ilen, jlen, element;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n metadata = metasets[i].data;\n\n for (j = 0, jlen = metadata.length; j < jlen; ++j) {\n element = metadata[j];\n\n if (!element._view.skip) {\n handler(element);\n }\n }\n }\n }\n /**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\n\n\n function getIntersectItems(chart, position) {\n var elements = [];\n parseVisibleItems(chart, function (element) {\n if (element.inRange(position.x, position.y)) {\n elements.push(element);\n }\n });\n return elements;\n }\n /**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\n\n\n function getNearestItems(chart, position, intersect, distanceMetric) {\n var minDistance = Number.POSITIVE_INFINITY;\n var nearestItems = [];\n parseVisibleItems(chart, function (element) {\n if (intersect && !element.inRange(position.x, position.y)) {\n return;\n }\n\n var center = element.getCenterPoint();\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n nearestItems = [element];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n nearestItems.push(element);\n }\n });\n return nearestItems;\n }\n /**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\n\n\n function getDistanceMetricForAxis(axis) {\n var useX = axis.indexOf('x') !== -1;\n var useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n }\n\n function indexMode(chart, e, options) {\n var position = getRelativePosition(e, chart); // Default axis for index mode is 'x' to match old behaviour\n\n options.axis = options.axis || 'x';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart._getSortedVisibleDatasetMetas().forEach(function (meta) {\n var element = meta.data[items[0]._index]; // don't count items that are skipped (null data)\n\n if (element && !element._view.skip) {\n elements.push(element);\n }\n });\n\n return elements;\n }\n /**\r\n * @interface IInteractionOptions\r\n */\n\n /**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\n\n /**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\n\n\n var core_interaction = {\n // Helper function for different modes\n modes: {\n single: function single(chart, e) {\n var position = getRelativePosition(e, chart);\n var elements = [];\n parseVisibleItems(chart, function (element) {\n if (element.inRange(position.x, position.y)) {\n elements.push(element);\n return elements;\n }\n });\n return elements.slice(0, 1);\n },\n\n /**\r\n * @function Chart.Interaction.modes.label\r\n * @deprecated since version 2.4.0\r\n * @todo remove at version 3\r\n * @private\r\n */\n label: indexMode,\n\n /**\r\n * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n * @function Chart.Interaction.modes.index\r\n * @since v2.4.0\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @param {IInteractionOptions} options - options to use during interaction\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n index: indexMode,\n\n /**\r\n * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n * @function Chart.Interaction.modes.dataset\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @param {IInteractionOptions} options - options to use during interaction\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n dataset: function dataset(chart, e, options) {\n var position = getRelativePosition(e, chart);\n options.axis = options.axis || 'xy';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n if (items.length > 0) {\n items = chart.getDatasetMeta(items[0]._datasetIndex).data;\n }\n\n return items;\n },\n\n /**\r\n * @function Chart.Interaction.modes.x-axis\r\n * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n * @todo remove at version 3\r\n * @private\r\n */\n 'x-axis': function xAxis(chart, e) {\n return indexMode(chart, e, {\n intersect: false\n });\n },\n\n /**\r\n * Point mode returns all elements that hit test based on the event position\r\n * of the event\r\n * @function Chart.Interaction.modes.intersect\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n point: function point(chart, e) {\n var position = getRelativePosition(e, chart);\n return getIntersectItems(chart, position);\n },\n\n /**\r\n * nearest mode returns the element closest to the point\r\n * @function Chart.Interaction.modes.intersect\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @param {IInteractionOptions} options - options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n nearest: function nearest(chart, e, options) {\n var position = getRelativePosition(e, chart);\n options.axis = options.axis || 'xy';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n return getNearestItems(chart, position, options.intersect, distanceMetric);\n },\n\n /**\r\n * x mode returns the elements that hit-test at the current x coordinate\r\n * @function Chart.Interaction.modes.x\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @param {IInteractionOptions} options - options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n x: function x(chart, e, options) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var intersectsItem = false;\n parseVisibleItems(chart, function (element) {\n if (element.inXRange(position.x)) {\n items.push(element);\n }\n\n if (element.inRange(position.x, position.y)) {\n intersectsItem = true;\n }\n }); // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n\n if (options.intersect && !intersectsItem) {\n items = [];\n }\n\n return items;\n },\n\n /**\r\n * y mode returns the elements that hit-test at the current y coordinate\r\n * @function Chart.Interaction.modes.y\r\n * @param {Chart} chart - the chart we are returning items from\r\n * @param {Event} e - the event we are find things at\r\n * @param {IInteractionOptions} options - options to use\r\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n */\n y: function y(chart, e, options) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var intersectsItem = false;\n parseVisibleItems(chart, function (element) {\n if (element.inYRange(position.y)) {\n items.push(element);\n }\n\n if (element.inRange(position.x, position.y)) {\n intersectsItem = true;\n }\n }); // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n\n if (options.intersect && !intersectsItem) {\n items = [];\n }\n\n return items;\n }\n }\n };\n var extend = helpers$1.extend;\n\n function filterByPosition(array, position) {\n return helpers$1.where(array, function (v) {\n return v.pos === position;\n });\n }\n\n function sortByWeight(array, reverse) {\n return array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n }\n\n function wrapBoxes(boxes) {\n var layoutBoxes = [];\n var i, ilen, box;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n layoutBoxes.push({\n index: i,\n box: box,\n pos: box.position,\n horizontal: box.isHorizontal(),\n weight: box.weight\n });\n }\n\n return layoutBoxes;\n }\n\n function setLayoutDims(layouts, params) {\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i]; // store width used instead of chartArea.w in fitBoxes\n\n layout.width = layout.horizontal ? layout.box.fullWidth && params.availableWidth : params.vBoxMaxWidth; // store height used instead of chartArea.h in fitBoxes\n\n layout.height = layout.horizontal && params.hBoxMaxHeight;\n }\n }\n\n function buildLayoutBoxes(boxes) {\n var layoutBoxes = wrapBoxes(boxes);\n var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n return {\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(bottom),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right),\n horizontal: top.concat(bottom)\n };\n }\n\n function getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n }\n\n function updateDims(chartArea, params, layout) {\n var box = layout.box;\n var maxPadding = chartArea.maxPadding;\n var newWidth, newHeight;\n\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[layout.pos] -= layout.size;\n }\n\n layout.size = layout.horizontal ? box.height : box.width;\n chartArea[layout.pos] += layout.size;\n\n if (box.getPadding) {\n var boxPadding = box.getPadding();\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n }\n\n newWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\n newHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\n\n if (newWidth !== chartArea.w || newHeight !== chartArea.h) {\n chartArea.w = newWidth;\n chartArea.h = newHeight; // return true if chart area changed in layout's direction\n\n var sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\n return sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\n }\n }\n\n function handleMaxPadding(chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n }\n\n function getMargins(horizontal, chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n var margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(function (pos) {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n }\n\n function fitBoxes(boxes, chartArea, params) {\n var refitBoxes = [];\n var i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n\n if (updateDims(chartArea, params, layout)) {\n changed = true;\n\n if (refitBoxes.length) {\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit = true;\n }\n }\n\n if (!box.fullWidth) {\n // fullWidth boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\n }\n\n function placeBoxes(boxes, chartArea, params) {\n var userPadding = params.padding;\n var x = chartArea.x;\n var y = chartArea.y;\n var i, ilen, layout, box;\n\n for (i = 0, ilen = boxes.length; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n if (layout.horizontal) {\n box.left = box.fullWidth ? userPadding.left : chartArea.left;\n box.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\n box.top = y;\n box.bottom = y + box.height;\n box.width = box.right - box.left;\n y = box.bottom;\n } else {\n box.left = x;\n box.right = x + box.width;\n box.top = chartArea.top;\n box.bottom = chartArea.top + chartArea.h;\n box.height = box.bottom - box.top;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n }\n\n core_defaults._set('global', {\n layout: {\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n }\n });\n /**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding - Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\n // The layout service is very self explanatory. It's responsible for the layout within a chart.\n // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n // It is this service's responsibility of carrying out that layout.\n\n\n var core_layouts = {\n defaults: {},\n\n /**\r\n * Register a box to a chart.\r\n * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n * @param {Chart} chart - the chart to use\r\n * @param {ILayoutItem} item - the item to add to be layed out\r\n */\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n } // initialize item with default values\n\n\n item.fullWidth = item.fullWidth || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw: function draw() {\n item.draw.apply(item, arguments);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\r\n * Remove a layoutItem from a chart\r\n * @param {Chart} chart - the chart to remove the box from\r\n * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n */\n removeBox: function removeBox(chart, layoutItem) {\n var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\r\n * Sets (or updates) options on the given `item`.\r\n * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n * @param {ILayoutItem} item - the item to configure with the given options\r\n * @param {object} options - the new item options.\r\n */\n configure: function configure(chart, item, options) {\n var props = ['fullWidth', 'position', 'weight'];\n var ilen = props.length;\n var i = 0;\n var prop;\n\n for (; i < ilen; ++i) {\n prop = props[i];\n\n if (options.hasOwnProperty(prop)) {\n item[prop] = options[prop];\n }\n }\n },\n\n /**\r\n * Fits boxes of the given chart into the given size by having each box measure itself\r\n * then running a fitting algorithm\r\n * @param {Chart} chart - the chart\r\n * @param {number} width - the width to fit into\r\n * @param {number} height - the height to fit into\r\n */\n update: function update(chart, width, height) {\n if (!chart) {\n return;\n }\n\n var layoutOptions = chart.options.layout || {};\n var padding = helpers$1.options.toPadding(layoutOptions.padding);\n var availableWidth = width - padding.width;\n var availableHeight = height - padding.height;\n var boxes = buildLayoutBoxes(chart.boxes);\n var verticalBoxes = boxes.vertical;\n var horizontalBoxes = boxes.horizontal; // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n var params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding: padding,\n availableWidth: availableWidth,\n vBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\n hBoxMaxHeight: availableHeight / 2\n });\n var chartArea = extend({\n maxPadding: extend({}, padding),\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); // First fit vertical boxes\n\n fitBoxes(verticalBoxes, chartArea, params); // Then fit horizontal boxes\n\n if (fitBoxes(horizontalBoxes, chartArea, params)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params);\n }\n\n handleMaxPadding(chartArea); // Finally place the boxes to correct coordinates\n\n placeBoxes(boxes.leftAndTop, chartArea, params); // Move to opposite side of chart\n\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h\n }; // Finally update boxes in chartArea (radial scale for example)\n\n helpers$1.each(boxes.chartArea, function (layout) {\n var box = layout.box;\n extend(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h);\n });\n }\n };\n /**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\n\n var platform_basic = {\n acquireContext: function acquireContext(item) {\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n\n return item && item.getContext('2d') || null;\n }\n };\n var platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n var platform_dom$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n 'default': platform_dom\n });\n var stylesheet = getCjsExportFromNamespace(platform_dom$1);\n var EXPANDO_KEY = '$chartjs';\n var CSS_PREFIX = 'chartjs-';\n var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\n var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n /**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\n\n var EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n };\n /**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\n\n function readUsedSize(element, property) {\n var value = helpers$1.getStyle(element, property);\n var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? Number(matches[1]) : undefined;\n }\n /**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\n\n\n function initCanvas(canvas, config) {\n var style = canvas.style; // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n\n var renderHeight = canvas.getAttribute('height');\n var renderWidth = canvas.getAttribute('width'); // Chart.js modifies some canvas values that we want to restore on destroy\n\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n }; // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n\n style.display = style.display || 'block';\n\n if (renderWidth === null || renderWidth === '') {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (renderHeight === null || renderHeight === '') {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (config.options.aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayWidth !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n }\n /**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\n\n\n var supportsEventListenerOptions = function () {\n var supports = false;\n\n try {\n var options = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line getter-return\n get: function get() {\n supports = true;\n }\n });\n window.addEventListener('e', null, options);\n } catch (e) {// continue regardless of error\n }\n\n return supports;\n }(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n // https://github.com/chartjs/Chart.js/issues/4287\n\n\n var eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n } : false;\n\n function addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n\n function removeListener(node, type, listener) {\n node.removeEventListener(type, listener, eventListenerOptions);\n }\n\n function createEvent(type, chart, x, y, nativeEvent) {\n return {\n type: type,\n chart: chart,\n \"native\": nativeEvent || null,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n }\n\n function fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n var pos = helpers$1.getRelativePosition(event, chart);\n return createEvent(type, chart, pos.x, pos.y, event);\n }\n\n function throttled(fn, thisArg) {\n var ticking = false;\n var args = [];\n return function () {\n args = Array.prototype.slice.call(arguments);\n thisArg = thisArg || this;\n\n if (!ticking) {\n ticking = true;\n helpers$1.requestAnimFrame.call(window, function () {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n }\n\n function createDiv(cls) {\n var el = document.createElement('div');\n el.className = cls || '';\n return el;\n } // Implementation based on https://github.com/marcj/css-element-queries\n\n\n function createResizer(handler) {\n var maxSize = 1000000; // NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n // https://github.com/chartjs/Chart.js/issues/5902\n\n var resizer = createDiv(CSS_SIZE_MONITOR);\n var expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n expand.appendChild(createDiv());\n shrink.appendChild(createDiv());\n resizer.appendChild(expand);\n resizer.appendChild(shrink);\n\n resizer._reset = function () {\n expand.scrollLeft = maxSize;\n expand.scrollTop = maxSize;\n shrink.scrollLeft = maxSize;\n shrink.scrollTop = maxSize;\n };\n\n var onScroll = function onScroll() {\n resizer._reset();\n\n handler();\n };\n\n addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n return resizer;\n } // https://davidwalsh.name/detect-node-insertion\n\n\n function watchForRender(node, handler) {\n var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n var proxy = expando.renderProxy = function (e) {\n if (e.animationName === CSS_RENDER_ANIMATION) {\n handler();\n }\n };\n\n helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n addListener(node, type, proxy);\n }); // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n // is removed then added back immediately (same animation frame?). Accessing the\n // `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n // https://github.com/chartjs/Chart.js/issues/4737\n\n expando.reflow = !!node.offsetParent;\n node.classList.add(CSS_RENDER_MONITOR);\n }\n\n function unwatchForRender(node) {\n var expando = node[EXPANDO_KEY] || {};\n var proxy = expando.renderProxy;\n\n if (proxy) {\n helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n removeListener(node, type, proxy);\n });\n delete expando.renderProxy;\n }\n\n node.classList.remove(CSS_RENDER_MONITOR);\n }\n\n function addResizeListener(node, listener, chart) {\n var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); // Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\n var resizer = expando.resizer = createResizer(throttled(function () {\n if (expando.resizer) {\n var container = chart.options.maintainAspectRatio && node.parentNode;\n var w = container ? container.clientWidth : 0;\n listener(createEvent('resize', chart));\n\n if (container && container.clientWidth < w && chart.canvas) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener(createEvent('resize', chart));\n }\n }\n })); // The resizer needs to be attached to the node parent, so we first need to be\n // sure that `node` is attached to the DOM before injecting the resizer element.\n\n watchForRender(node, function () {\n if (expando.resizer) {\n var container = node.parentNode;\n\n if (container && container !== resizer.parentNode) {\n container.insertBefore(resizer, container.firstChild);\n } // The container size might have changed, let's reset the resizer state.\n\n\n resizer._reset();\n }\n });\n }\n\n function removeResizeListener(node) {\n var expando = node[EXPANDO_KEY] || {};\n var resizer = expando.resizer;\n delete expando.resizer;\n unwatchForRender(node);\n\n if (resizer && resizer.parentNode) {\n resizer.parentNode.removeChild(resizer);\n }\n }\n /**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the