{"version":3,"file":"billboard.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap f2f654542067b05e1e22","webpack:///src/internals/util.js","webpack:///src/internals/ChartInternal.js","webpack:///external \"d3\"","webpack:///src/config/classes.js","webpack:///src/internals/Chart.js","webpack:///./node_modules/babel-helper-modules/lib/typeof.js","webpack:///./node_modules/babel-helper-modules/lib/classCallCheck.js","webpack:///src/axis/Axis.js","webpack:///src/axis/bb.axis.js","webpack:///src/core.js","webpack:///./src/scss/main.scss","webpack:///src/config/config.js","webpack:///src/config/Options.js","webpack:///src/internals/scale.js","webpack:///src/internals/domain.js","webpack:///src/data/data.js","webpack:///src/data/data.convert.js","webpack:///src/data/data.load.js","webpack:///src/internals/category.js","webpack:///src/interactions/interaction.js","webpack:///src/internals/size.js","webpack:///src/internals/shape.js","webpack:///src/internals/shape.line.js","webpack:///src/internals/shape.bar.js","webpack:///src/internals/text.js","webpack:///src/internals/type.js","webpack:///src/internals/grid.js","webpack:///src/internals/tooltip.js","webpack:///src/internals/legend.js","webpack:///src/internals/title.js","webpack:///src/internals/clip.js","webpack:///src/internals/arc.js","webpack:///src/internals/region.js","webpack:///src/interactions/drag.js","webpack:///src/internals/selection.js","webpack:///src/interactions/subchart.js","webpack:///src/interactions/zoom.js","webpack:///src/internals/color.js","webpack:///src/internals/format.js","webpack:///src/internals/cache.js","webpack:///src/internals/class.js","webpack:///src/api/api.focus.js","webpack:///src/api/api.show.js","webpack:///src/api/api.zoom.js","webpack:///src/api/api.load.js","webpack:///src/api/api.flow.js","webpack:///src/api/api.selection.js","webpack:///src/api/api.transform.js","webpack:///src/api/api.group.js","webpack:///src/api/api.grid.js","webpack:///src/api/api.region.js","webpack:///src/api/api.data.js","webpack:///src/api/api.category.js","webpack:///src/api/api.color.js","webpack:///src/api/api.x.js","webpack:///src/api/api.axis.js","webpack:///src/api/api.legend.js","webpack:///src/api/api.chart.js","webpack:///src/internals/browser.js","webpack:///src/api/api.tooltip.js","webpack:///src/internals/ua.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"d3\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"d3\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"d3\")) : factory(root[\"d3\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 9);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f2f654542067b05e1e22","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport {\r\n\tevent as d3Event,\r\n\tbrushSelection as d3BrushSelection\r\n} from \"d3\";\r\nimport CLASS from \"../config/classes\";\r\n\r\nconst isValue = v => v || v === 0;\r\nconst isFunction = o => typeof o === \"function\";\r\nconst isString = o => typeof o === \"string\";\r\nconst isUndefined = v => typeof v === \"undefined\";\r\nconst isDefined = v => typeof v !== \"undefined\";\r\nconst ceil10 = v => Math.ceil(v / 10) * 10;\r\nconst asHalfPixel = n => Math.ceil(n) + 0.5;\r\nconst diffDomain = d => d[1] - d[0];\r\nconst isEmpty = o => (\r\n\ttypeof o === \"undefined\" || o === null ||\r\n\t\t(isString(o) && o.length === 0) ||\r\n\t\t(typeof o === \"object\" && Object.keys(o).length === 0)\r\n);\r\nconst notEmpty = o => !isEmpty(o);\r\nconst getOption = (options, key, defaultValue) => (\r\n\tisDefined(options[key]) ? options[key] : defaultValue\r\n);\r\nconst hasValue = (dict, value) => {\r\n\tlet found = false;\r\n\r\n\tObject.keys(dict).forEach(key => (dict[key] === value) && (found = true));\r\n\r\n\treturn found;\r\n};\r\nconst sanitise = str => (\r\n\ttypeof str === \"string\" ?\r\n\t\tstr.replace(//g, \">\") : str\r\n);\r\n\r\n// substitution of SVGPathSeg API polyfill\r\nconst getRectSegList = path => {\r\n\t/*\r\n\t * seg1 ---------- seg2\r\n\t * | |\r\n\t * | |\r\n\t * | |\r\n\t * seg0 ---------- seg3\r\n\t * */\r\n\tconst bbox = path.getBBox();\r\n\tconst list = [];\r\n\r\n\t// seg0\r\n\tlist.push({\r\n\t\tx: bbox.x,\r\n\t\ty: bbox.y + bbox.height\r\n\t});\r\n\r\n\t// seg1\r\n\tlist.push({\r\n\t\tx: bbox.x,\r\n\t\ty: bbox.y\r\n\t});\r\n\r\n\t// seg2\r\n\tlist.push({\r\n\t\tx: bbox.x + bbox.width,\r\n\t\ty: bbox.y\r\n\t});\r\n\r\n\t// seg3\r\n\tlist.push({\r\n\t\tx: bbox.x + bbox.width,\r\n\t\ty: bbox.y + bbox.height\r\n\t});\r\n\r\n\treturn list;\r\n};\r\n\r\nconst getPathBox = path => {\r\n\tconst box = path.getBoundingClientRect();\r\n\tconst items = getRectSegList(path);\r\n\tconst minX = items[0].x;\r\n\tconst minY = Math.min(items[0].y, items[1].y);\r\n\r\n\treturn {\r\n\t\tx: minX,\r\n\t\ty: minY,\r\n\t\twidth: box.width,\r\n\t\theight: box.height,\r\n\t};\r\n};\r\n\r\n// return brush selection array\r\nconst getBrushSelection = function() {\r\n\tlet selection = null;\r\n\tconst event = d3Event;\r\n\r\n\t// check from event\r\n\tif (event && event.constructor.name === \"BrushEvent\") {\r\n\t\tselection = event.selection;\r\n\t\t// check from brush area selection\r\n\t} else if (this.context && (selection = this.context.select(`.${CLASS.brush}`).node())) {\r\n\t\tselection = d3BrushSelection(selection);\r\n\t}\r\n\r\n\treturn selection;\r\n};\r\n\r\nconst brushEmpty = function() {\r\n\tconst selection = this.getBrushSelection();\r\n\r\n\tif (selection) {\r\n\t\t// brush selected area\r\n\t\t// two-dimensional: [[x0, y0], [x1, y1]]\r\n\t\t// one-dimensional: [x0, x1] or [y0, y1]\r\n\t\treturn selection[0] === selection[1];\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\nfunction extend(target = {}, source) {\r\n\tlet p;\r\n\r\n\tfor (p in source) {\r\n\t\ttarget[p] = source[p];\r\n\t}\r\n\treturn target;\r\n}\r\n\r\nconst SUPPORT_ADDEVENTLISTENER = !!(\"addEventListener\" in document);\r\nconst SUPPORT_PASSIVE = (() => {\r\n\tlet supportsPassiveOption = false;\r\n\r\n\ttry {\r\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\r\n\t\t\tdocument.addEventListener(\"test\", null, Object.defineProperty({}, \"passive\", {\r\n\t\t\t\tget() {\r\n\t\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t\t},\r\n\t\t\t}));\r\n\t\t}\r\n\t} catch (e) {}\r\n\treturn supportsPassiveOption;\r\n})();\r\n\r\nfunction addEvent(element, type, handler, eventListenerOptions) {\r\n\tif (SUPPORT_ADDEVENTLISTENER) {\r\n\t\tlet options = eventListenerOptions || false;\r\n\r\n\t\tif (typeof eventListenerOptions === \"object\") {\r\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\r\n\t\t}\r\n\t\telement.addEventListener(type, handler, options);\r\n\t} else if (element.attachEvent) {\r\n\t\telement.attachEvent(`on${type}`, handler);\r\n\t} else {\r\n\t\telement[`on${type}`] = handler;\r\n\t}\r\n}\r\n\r\nfunction removeEvent(element, type, handler) {\r\n\tif (element.removeEventListener) {\r\n\t\telement.removeEventListener(type, handler, false);\r\n\t} else if (element.detachEvent) {\r\n\t\telement.detachEvent(`on${type}`, handler);\r\n\t} else {\r\n\t\telement[`on${type}`] = null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Check if is array\r\n * @param arr *\r\n * @returns {Boolean}\r\n * @private\r\n */\r\nconst isArray = arr => arr && arr.constructor === Array;\r\n\r\n/**\r\n * Check if is object\r\n * @param {Object} obj\r\n * @returns {Boolean}\r\n * @private\r\n */\r\nconst isObject = obj => obj && !obj.nodeType && typeof obj === \"object\" && !isArray(obj);\r\n\r\n/**\r\n * Merge object returning new object\r\n * @param {Object} target\r\n * @param {Object} objectN\r\n * @returns {Object} merged target object\r\n * @private\r\n * @example\r\n * var target = { a: 1 };\r\n * utils.extend(target, { b: 2, c: 3 });\r\n * target; // { a: 1, b: 2, c: 3 };\r\n */\r\nconst merge = (target, ...objectN) => {\r\n\tif (!objectN.length || (objectN.length === 1 && !objectN[0])) {\r\n\t\treturn target;\r\n\t}\r\n\r\n\tconst source = objectN.shift();\r\n\r\n\tif (isObject(target) && isObject(source)) {\r\n\t\tObject.keys(source).forEach(key => {\r\n\t\t\tconst value = source[key];\r\n\r\n\t\t\tif (isObject(value)) {\r\n\t\t\t\t!target[key] && (target[key] = {});\r\n\r\n\t\t\t\ttarget[key] = merge(target[key], value);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[key] = isArray(value) ?\r\n\t\t\t\t\tvalue.concat() : value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn extend(target, ...objectN);\r\n};\r\n\r\nexport {\r\n\tisValue,\r\n\tisDefined,\r\n\tisUndefined,\r\n\tnotEmpty,\r\n\tceil10,\r\n\tisFunction,\r\n\tasHalfPixel,\r\n\tgetOption,\r\n\tisString,\r\n\thasValue,\r\n\tsanitise,\r\n\tgetPathBox,\r\n\tdiffDomain,\r\n\tisEmpty,\r\n\tgetBrushSelection,\r\n\tbrushEmpty,\r\n\textend,\r\n\taddEvent,\r\n\tremoveEvent,\r\n\tgetRectSegList,\r\n\tmerge,\r\n\tisArray,\r\n\tisObject\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// src/internals/util.js","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport {\r\n\ttimeParse as d3TimeParse,\r\n\ttimeFormat as d3TimeFormat,\r\n\tutcParse as d3UtcParse,\r\n\tutcFormat as d3UtcFormat,\r\n\tselect as d3Select,\r\n\tselectAll as d3SelectAll,\r\n\textent as d3Extent,\r\n\ttransition as d3Transition\r\n} from \"d3\";\r\nimport Axis from \"../axis/Axis\";\r\nimport CLASS from \"../config/classes\";\r\nimport {addEvent, notEmpty, asHalfPixel, isValue, getOption} from \"./util\";\r\n\r\n/**\r\n * Internal chart class.\r\n * - Note: Instantiated internally, not exposed for public.\r\n * @class ChartInternal\r\n * @ignore\r\n * @private\r\n*/\r\nexport default class ChartInternal {\r\n\tconstructor(api) {\r\n\t\tconst $$ = this;\r\n\r\n\t\t$$.api = api;\r\n\t\t$$.config = $$.getOptions();\r\n\t\t$$.data = {};\r\n\t\t$$.cache = {};\r\n\t\t$$.axes = {};\r\n\t}\r\n\r\n\tbeforeInit() {\r\n\t\t// can do something\r\n\t}\r\n\r\n\tafterInit() {\r\n\t\t// can do something\r\n\t}\r\n\r\n\tinit() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\r\n\t\t$$.initParams();\r\n\r\n\t\tif (config.data_url) {\r\n\t\t\t$$.convertUrlToData(\r\n\t\t\t\tconfig.data_url,\r\n\t\t\t\tconfig.data_mimeType,\r\n\t\t\t\tconfig.data_headers,\r\n\t\t\t\tconfig.data_keys,\r\n\t\t\t\t$$.initWithData\r\n\t\t\t);\r\n\t\t} else if (config.data_json) {\r\n\t\t\t$$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));\r\n\t\t} else if (config.data_rows) {\r\n\t\t\t$$.initWithData($$.convertRowsToData(config.data_rows));\r\n\t\t} else if (config.data_columns) {\r\n\t\t\t$$.initWithData($$.convertColumnsToData(config.data_columns));\r\n\t\t} else {\r\n\t\t\tthrow Error(\"url or json or rows or columns is required.\");\r\n\t\t}\r\n\t}\r\n\r\n\tinitParams() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\r\n\t\t// MEMO: clipId needs to be unique because it conflicts when multiple charts exist\r\n\t\t$$.clipId = `bb-${+new Date()}-clip`;\r\n\t\t$$.clipIdForXAxis = `${$$.clipId}-xaxis`;\r\n\t\t$$.clipIdForYAxis = `${$$.clipId}-yaxis`;\r\n\t\t$$.clipIdForGrid = `${$$.clipId}-grid`;\r\n\t\t$$.clipIdForSubchart = `${$$.clipId}-subchart`;\r\n\t\t$$.clipPath = $$.getClipPath($$.clipId);\r\n\t\t$$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis);\r\n\t\t$$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);\r\n\t\t$$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid);\r\n\t\t$$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart);\r\n\t\t$$.dragStart = null;\r\n\t\t$$.dragging = false;\r\n\t\t$$.flowing = false;\r\n\t\t$$.cancelClick = false;\r\n\t\t$$.mouseover = false;\r\n\t\t$$.transiting = false;\r\n\r\n\t\t$$.color = $$.generateColor();\r\n\t\t$$.levelColor = $$.generateLevelColor();\r\n\r\n\t\t$$.dataTimeFormat = config.data_xLocaltime ? d3TimeParse : d3UtcParse;\r\n\t\t$$.axisTimeFormat = config.axis_x_localtime ? d3TimeFormat : d3UtcFormat;\r\n\r\n\t\t$$.defaultAxisTimeFormat = function(d) {\r\n\t\t\tconst specifier = (d.getMilliseconds() && \".%L\") ||\r\n\t\t\t\t(d.getSeconds() && \".:%S\") ||\r\n\t\t\t\t(d.getMinutes() && \"%I:%M\") ||\r\n\t\t\t\t(d.getHours() && \"%I %p\") ||\r\n\t\t\t\t((d.getDay() && d.getDate() !== 1) && \"%-m/%-d\") ||\r\n\t\t\t\t(d.getDate() !== 1 && \"%b %d\") ||\r\n\t\t\t\t(d.getMonth() && \"%-m/%-d\") ||\r\n\t\t\t\t\"%Y/%-m/%-d\";\r\n\r\n\t\t\treturn $$.axisTimeFormat(specifier)(d);\r\n\t\t};\r\n\r\n\t\t$$.hiddenTargetIds = [];\r\n\t\t$$.hiddenLegendIds = [];\r\n\t\t$$.focusedTargetIds = [];\r\n\t\t$$.defocusedTargetIds = [];\r\n\r\n\t\t$$.xOrient = config.axis_rotated ? \"left\" : \"bottom\";\r\n\r\n\t\t$$.yOrient = config.axis_rotated ?\r\n\t\t\t(config.axis_y_inner ? \"top\" : \"bottom\") : (config.axis_y_inner ? \"right\" : \"left\");\r\n\r\n\t\t$$.y2Orient = config.axis_rotated ?\r\n\t\t\t(config.axis_y2_inner ? \"bottom\" : \"top\") : (config.axis_y2_inner ? \"left\" : \"right\");\r\n\r\n\t\t$$.subXOrient = config.axis_rotated ? \"left\" : \"bottom\";\r\n\t\t$$.isLegendRight = config.legend_position === \"right\";\r\n\t\t$$.isLegendInset = config.legend_position === \"inset\";\r\n\r\n\t\t$$.isLegendTop = config.legend_inset_anchor === \"top-left\" ||\r\n\t\t\tconfig.legend_inset_anchor === \"top-right\";\r\n\r\n\t\t$$.isLegendLeft = config.legend_inset_anchor === \"top-left\" ||\r\n\t\t\tconfig.legend_inset_anchor === \"bottom-left\";\r\n\r\n\t\t$$.legendStep = 0;\r\n\t\t$$.legendItemWidth = 0;\r\n\t\t$$.legendItemHeight = 0;\r\n\r\n\t\t$$.currentMaxTickWidths = {\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\ty2: 0\r\n\t\t};\r\n\r\n\t\t$$.rotated_padding_left = 30;\r\n\t\t$$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;\r\n\t\t$$.rotated_padding_top = 5;\r\n\r\n\t\t$$.withoutFadeIn = {};\r\n\t\t$$.intervalForObserveInserted = undefined;\r\n\r\n\t\t$$.inputType = $$.convertInputType();\r\n\r\n\t\t$$.axes.subx = d3SelectAll([]); // needs when excluding subchart.js\r\n\t}\r\n\r\n\tinitWithData(data) {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\t\tlet binding = true;\r\n\r\n\t\t$$.axis = new Axis($$);\r\n\r\n\t\t$$.initPie && $$.initPie();\r\n\r\n\t\t$$.initBrush && $$.initBrush();\r\n\r\n\t\t$$.initZoom && $$.initZoom();\r\n\r\n\t\tif (!config.bindto) {\r\n\t\t\t$$.selectChart = d3SelectAll([]);\r\n\t\t} else if (typeof config.bindto.node === \"function\") {\r\n\t\t\t$$.selectChart = config.bindto;\r\n\t\t} else {\r\n\t\t\t$$.selectChart = d3Select(config.bindto);\r\n\t\t}\r\n\r\n\t\tif ($$.selectChart.empty()) {\r\n\t\t\t$$.selectChart = d3Select(document.createElement(\"div\")).style(\"opacity\", \"0\");\r\n\t\t\t$$.observeInserted($$.selectChart);\r\n\t\t\tbinding = false;\r\n\t\t}\r\n\r\n\t\t$$.selectChart.html(\"\").classed(\"bb\", true);\r\n\r\n\t\t// Init data as targets\r\n\t\t$$.data.xs = {};\r\n\t\t$$.data.targets = $$.convertDataToTargets(data);\r\n\r\n\t\tif (config.data_filter) {\r\n\t\t\t$$.data.targets = $$.data.targets.filter(config.data_filter);\r\n\t\t}\r\n\r\n\t\t// Set targets to hide if needed\r\n\t\tif (config.data_hide) {\r\n\t\t\t$$.addHiddenTargetIds(\r\n\t\t\t\tconfig.data_hide === true ?\r\n\t\t\t\t\t$$.mapToIds($$.data.targets) : config.data_hide\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (config.legend_hide) {\r\n\t\t\t$$.addHiddenLegendIds(\r\n\t\t\t\tconfig.legend_hide === true ?\r\n\t\t\t\t\t$$.mapToIds($$.data.targets) : config.legend_hide\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// when gauge, hide legend // TODO: fix\r\n\t\tif ($$.hasType(\"gauge\")) {\r\n\t\t\tconfig.legend_show = false;\r\n\t\t}\r\n\r\n\t\t// Init sizes and scales\r\n\t\t$$.updateSizes();\r\n\t\t$$.updateScales();\r\n\r\n\t\t// Set domains for each scale\r\n\t\t$$.x.domain(d3Extent($$.getXDomain($$.data.targets)));\r\n\t\t$$.y.domain($$.getYDomain($$.data.targets, \"y\"));\r\n\t\t$$.y2.domain($$.getYDomain($$.data.targets, \"y2\"));\r\n\t\t$$.subX.domain($$.x.domain());\r\n\t\t$$.subY.domain($$.y.domain());\r\n\t\t$$.subY2.domain($$.y2.domain());\r\n\r\n\t\t// Save original x domain for zoom update\r\n\t\t$$.orgXDomain = $$.x.domain();\r\n\r\n\t\t// -- Basic Elements --\r\n\r\n\t\tconst isTouch = $$.inputType === \"touch\";\r\n\r\n\t\t// Define svg\r\n\t\t$$.svg = $$.selectChart.append(\"svg\")\r\n\t\t\t.style(\"overflow\", \"hidden\")\r\n\t\t\t.on(isTouch ? \"touchstart\" : \"mouseenter\", () => config.onover.call($$))\r\n\t\t\t.on(isTouch ? \"touchend\" : \"mouseleave\", () => config.onout.call($$));\r\n\r\n\t\t$$.config.svg_classname &&\r\n\t\t\t$$.svg.attr(\"class\", $$.config.svg_classname);\r\n\r\n\t\t// Define defs\r\n\t\tconst defs = $$.svg.append(\"defs\");\r\n\r\n\t\t$$.clipChart = $$.appendClip(defs, $$.clipId);\r\n\t\t$$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);\r\n\t\t$$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);\r\n\t\t$$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);\r\n\t\t$$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);\r\n\r\n\t\t$$.updateSvgSize();\r\n\r\n\t\t// Set initialized scales to brush and zoom\r\n\t\t// if ($$.brush) { $$.brush.scale($$.subX); }\r\n\t\t// if (config.zoom_enabled) { $$.zoom.scale($$.x); }\r\n\r\n\t\t// Define regions\r\n\t\tconst main = $$.svg.append(\"g\").attr(\"transform\", $$.getTranslate(\"main\"));\r\n\r\n\t\t$$.main = main;\r\n\r\n\t\t// initialize subchart when subchart show option is set\r\n\t\tconfig.subchart_show &&\r\n\t\t\t$$.initSubchart &&\r\n\t\t\t\t$$.initSubchart();\r\n\r\n\t\t$$.initTooltip && $$.initTooltip();\r\n\t\t$$.initLegend && $$.initLegend();\r\n\t\t$$.initTitle && $$.initTitle();\r\n\r\n\t\t// -- Main Region --\r\n\r\n\t\t// text when empty\r\n\t\tmain.append(\"text\")\r\n\t\t\t.attr(\"class\", `${CLASS.text} ${CLASS.empty}`)\r\n\t\t\t.attr(\"text-anchor\", \"middle\") // horizontal centering of text at x position in all browsers.\r\n\t\t\t.attr(\"dominant-baseline\", \"middle\"); // vertical centering of text at y position in all browsers, except IE.\r\n\r\n\t\t// Regions\r\n\t\t$$.initRegion();\r\n\r\n\t\t// Grids\r\n\t\t$$.initGrid();\r\n\r\n\t\t// Define g for chart area\r\n\t\tmain.append(\"g\")\r\n\t\t\t.attr(\"clip-path\", $$.clipPath)\r\n\t\t\t.attr(\"class\", CLASS.chart);\r\n\r\n\t\t// Grid lines\r\n\t\tconfig.grid_lines_front && $$.initGridLines();\r\n\r\n\t\t// Cover whole with rects for events\r\n\t\t$$.initEventRect();\r\n\r\n\t\t// Define g for chart\r\n\t\t$$.initChartElements();\r\n\r\n\t\t// if zoom privileged, insert rect to forefront\r\n\t\t// TODO: is this needed?\r\n\t\tmain.insert(\"rect\", config.zoom_privileged ? null : `g.${CLASS.regions}`)\r\n\t\t\t.attr(\"class\", CLASS.zoomRect)\r\n\t\t\t.attr(\"width\", $$.width)\r\n\t\t\t.attr(\"height\", $$.height)\r\n\t\t\t.style(\"opacity\", \"0\")\r\n\t\t\t.on(\"dblclick.zoom\", null);\r\n\r\n\t\t// Set default extent if defined\r\n\t\tconfig.axis_x_extent &&\r\n\t\t\t$$.brush.scale($$.getDefaultExtent());\r\n\r\n\t\t// Add Axis\r\n\t\t$$.axis.init();\r\n\r\n\t\t// Set targets\r\n\t\t$$.updateTargets($$.data.targets);\r\n\r\n\t\t// Draw with targets\r\n\t\tif (binding) {\r\n\t\t\t$$.updateDimension();\r\n\t\t\t$$.config.oninit.call($$);\r\n\r\n\t\t\t$$.redraw({\r\n\t\t\t\twithTransition: false,\r\n\t\t\t\twithTransform: true,\r\n\t\t\t\twithUpdateXDomain: true,\r\n\t\t\t\twithUpdateOrgXDomain: true,\r\n\t\t\t\twithTransitionForAxis: false\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Bind resize event\r\n\t\t$$.bindResize();\r\n\r\n\t\t// export element of the chart\r\n\t\t$$.api.element = $$.selectChart.node();\r\n\t}\r\n\r\n\tinitChartElements() {\r\n\t\tthis.initBar && this.initBar();\r\n\t\tthis.initLine && this.initLine();\r\n\t\tthis.initArc && this.initArc();\r\n\t\tthis.initGauge && this.initGauge();\r\n\t\tthis.initText && this.initText();\r\n\t}\r\n\r\n\tsmoothLines(el, type) {\r\n\t\tif (type === \"grid\") {\r\n\t\t\tel.each(function() {\r\n\t\t\t\tconst g = d3Select(this);\r\n\t\t\t\tconst x1 = g.attr(\"x1\");\r\n\t\t\t\tconst x2 = g.attr(\"x2\");\r\n\t\t\t\tconst y1 = g.attr(\"y1\");\r\n\t\t\t\tconst y2 = g.attr(\"y2\");\r\n\r\n\t\t\t\tg.attr({\r\n\t\t\t\t\t\"x1\": Math.ceil(x1),\r\n\t\t\t\t\t\"x2\": Math.ceil(x2),\r\n\t\t\t\t\t\"y1\": Math.ceil(y1),\r\n\t\t\t\t\t\"y2\": Math.ceil(y2)\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tupdateSizes() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\t\tconst legendHeight = $$.legend ? $$.getLegendHeight() : 0;\r\n\t\tconst legendWidth = $$.legend ? $$.getLegendWidth() : 0;\r\n\t\tconst legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight;\r\n\t\tconst hasArc = $$.hasArcType();\r\n\t\tconst xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight(\"x\");\r\n\t\tconst subchartHeight = config.subchart_show && !hasArc ?\r\n\t\t\t(config.subchart_size_height + xAxisHeight) : 0;\r\n\r\n\t\t$$.currentWidth = $$.getCurrentWidth();\r\n\t\t$$.currentHeight = $$.getCurrentHeight();\r\n\r\n\t\t// for main\r\n\t\t$$.margin = config.axis_rotated ? {\r\n\t\t\ttop: $$.getHorizontalAxisHeight(\"y2\") + $$.getCurrentPaddingTop(),\r\n\t\t\tright: hasArc ? 0 : $$.getCurrentPaddingRight(),\r\n\t\t\tbottom: $$.getHorizontalAxisHeight(\"y\") + legendHeightForBottom + $$.getCurrentPaddingBottom(),\r\n\t\t\tleft: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())\r\n\t\t} : {\r\n\t\t\ttop: 4 + $$.getCurrentPaddingTop(), // for top tick text\r\n\t\t\tright: hasArc ? 0 : $$.getCurrentPaddingRight(),\r\n\t\t\tbottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),\r\n\t\t\tleft: hasArc ? 0 : $$.getCurrentPaddingLeft()\r\n\t\t};\r\n\r\n\t\t// for subchart\r\n\t\t$$.margin2 = config.axis_rotated ? {\r\n\t\t\ttop: $$.margin.top,\r\n\t\t\tright: NaN,\r\n\t\t\tbottom: 20 + legendHeightForBottom,\r\n\t\t\tleft: $$.rotated_padding_left\r\n\t\t} : {\r\n\t\t\ttop: $$.currentHeight - subchartHeight - legendHeightForBottom,\r\n\t\t\tright: NaN,\r\n\t\t\tbottom: xAxisHeight + legendHeightForBottom,\r\n\t\t\tleft: $$.margin.left\r\n\t\t};\r\n\r\n\t\t// for legend\r\n\t\t$$.margin3 = {\r\n\t\t\ttop: 0,\r\n\t\t\tright: NaN,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t};\r\n\r\n\t\tif ($$.updateSizeForLegend) {\r\n\t\t\t$$.updateSizeForLegend(legendHeight, legendWidth);\r\n\t\t}\r\n\r\n\t\t$$.width = $$.currentWidth - $$.margin.left - $$.margin.right;\r\n\t\t$$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;\r\n\r\n\t\tif ($$.width < 0) {\r\n\t\t\t$$.width = 0;\r\n\t\t}\r\n\r\n\t\tif ($$.height < 0) {\r\n\t\t\t$$.height = 0;\r\n\t\t}\r\n\r\n\t\t$$.width2 = config.axis_rotated ?\r\n\t\t\t$$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;\r\n\r\n\t\t$$.height2 = config.axis_rotated ?\r\n\t\t\t$$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;\r\n\r\n\t\tif ($$.width2 < 0) { $$.width2 = 0; }\r\n\t\tif ($$.height2 < 0) { $$.height2 = 0; }\r\n\r\n\t\t// for arc\r\n\t\t$$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);\r\n\t\t$$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);\r\n\r\n\t\tif ($$.hasType(\"gauge\") && !config.gauge_fullCircle) {\r\n\t\t\t$$.arcHeight += $$.height - $$.getGaugeLabelHeight();\r\n\t\t}\r\n\r\n\t\t$$.updateRadius && $$.updateRadius();\r\n\r\n\t\tif ($$.isLegendRight && hasArc) {\r\n\t\t\t$$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;\r\n\t\t}\r\n\t}\r\n\r\n\tupdateTargets(targets) {\r\n\t\tconst $$ = this;\r\n\r\n\t\t// -- Main --\r\n\r\n\t\t// -- Text -- //\r\n\t\t$$.updateTargetsForText(targets);\r\n\r\n\t\t// -- Bar -- //\r\n\t\t$$.updateTargetsForBar(targets);\r\n\r\n\t\t// -- Line -- //\r\n\t\t$$.updateTargetsForLine(targets);\r\n\r\n\t\t// -- Arc -- //\r\n\t\t$$.hasArcType() && $$.updateTargetsForArc &&\r\n\t\t\t$$.updateTargetsForArc(targets);\r\n\r\n\t\t// -- Sub --\r\n\t\t$$.updateTargetsForSubchart &&\r\n\t\t\t$$.updateTargetsForSubchart(targets);\r\n\r\n\t\t// Fade-in each chart\r\n\t\t$$.showTargets();\r\n\t}\r\n\r\n\tshowTargets() {\r\n\t\tconst $$ = this;\r\n\r\n\t\t$$.svg.selectAll(`.${CLASS.target}`)\r\n\t\t\t.filter(d => $$.isTargetToShow(d.id))\r\n\t\t\t.transition()\r\n\t\t\t.duration($$.config.transition_duration)\r\n\t\t\t.style(\"opacity\", \"1\");\r\n\t}\r\n\r\n\tredraw(options = {}, transitionsValue) {\r\n\t\tconst $$ = this;\r\n\t\tconst main = $$.main;\r\n\t\tconst config = $$.config;\r\n\r\n\t\tconst areaIndices = $$.getShapeIndices($$.isAreaType);\r\n\t\tconst barIndices = $$.getShapeIndices($$.isBarType);\r\n\t\tconst lineIndices = $$.getShapeIndices($$.isLineType);\r\n\r\n\t\tlet waitForDraw;\r\n\t\tlet flow;\r\n\r\n\t\tconst hideAxis = $$.hasArcType();\r\n\t\tconst targetsToShow = $$.filterTargetsToShow($$.data.targets);\r\n\t\tconst xv = $$.xv.bind($$);\r\n\r\n\t\tlet tickValues;\r\n\t\tlet intervalForCulling;\r\n\t\tlet xDomainForZoom;\r\n\r\n\t\tconst withY = getOption(options, \"withY\", true);\r\n\t\tconst withSubchart = getOption(options, \"withSubchart\", true);\r\n\t\tconst withTransition = getOption(options, \"withTransition\", true);\r\n\t\tconst withTransform = getOption(options, \"withTransform\", false);\r\n\t\tconst withUpdateXDomain = getOption(options, \"withUpdateXDomain\", false);\r\n\t\tconst withUpdateOrgXDomain = getOption(options, \"withUpdateOrgXDomain\", false);\r\n\t\tconst withTrimXDomain = getOption(options, \"withTrimXDomain\", true);\r\n\t\tconst withUpdateXAxis = getOption(options, \"withUpdateXAxis\", withUpdateXDomain);\r\n\t\tconst withLegend = getOption(options, \"withLegend\", false);\r\n\t\tconst withEventRect = getOption(options, \"withEventRect\", true);\r\n\t\tconst withDimension = getOption(options, \"withDimension\", true);\r\n\t\tconst withTransitionForExit = getOption(options, \"withTransitionForExit\", withTransition);\r\n\t\tconst withTransitionForAxis = getOption(options, \"withTransitionForAxis\", withTransition);\r\n\r\n\t\tconst duration = withTransition ? config.transition_duration : 0;\r\n\t\tconst durationForExit = withTransitionForExit ? duration : 0;\r\n\t\tconst durationForAxis = withTransitionForAxis ? duration : 0;\r\n\r\n\t\tconst transitions = transitionsValue || $$.axis.generateTransitions(durationForAxis);\r\n\r\n\t\t$$.inputType === \"touch\" && $$.hideTooltip();\r\n\r\n\t\t// update legend and transform each g\r\n\t\tif (withLegend && config.legend_show) {\r\n\t\t\t$$.updateLegend($$.mapToIds($$.data.targets), options, transitions);\r\n\t\t} else if (withDimension) {\r\n\t\t\t// need to update dimension (e.g. axis.y.tick.values) because y tick values should change\r\n\t\t\t// no need to update axis in it because they will be updated in redraw()\r\n\t\t\t$$.updateDimension(true);\r\n\t\t}\r\n\r\n\t\t// MEMO: needed for grids calculation\r\n\t\tif ($$.isCategorized() && targetsToShow.length === 0) {\r\n\t\t\t$$.x.domain([0, $$.axes.x.selectAll(\".tick\").size()]);\r\n\t\t}\r\n\r\n\t\tif (targetsToShow.length) {\r\n\t\t\t$$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);\r\n\t\t\tif (!config.axis_x_tick_values) {\r\n\t\t\t\ttickValues = $$.axis.updateXAxisTickValues(targetsToShow);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t$$.xAxis.tickValues([]);\r\n\t\t\t$$.subXAxis.tickValues([]);\r\n\t\t}\r\n\r\n\t\tif (config.zoom_rescale && !options.flow) {\r\n\t\t\txDomainForZoom = $$.x.orgDomain();\r\n\t\t}\r\n\r\n\t\t$$.y.domain($$.getYDomain(targetsToShow, \"y\", xDomainForZoom));\r\n\t\t$$.y2.domain($$.getYDomain(targetsToShow, \"y2\", xDomainForZoom));\r\n\r\n\t\tif (!config.axis_y_tick_values && config.axis_y_tick_count) {\r\n\t\t\t$$.yAxis.tickValues(\r\n\t\t\t\t$$.axis.generateTickValues(\r\n\t\t\t\t\t$$.y.domain(),\r\n\t\t\t\t\tconfig.axis_y_tick_count,\r\n\t\t\t\t\t$$.isTimeSeriesY()\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (!config.axis_y2_tick_values && config.axis_y2_tick_count) {\r\n\t\t\t$$.y2Axis.tickValues(\r\n\t\t\t\t$$.axis.generateTickValues(\r\n\t\t\t\t\t$$.y2.domain(),\r\n\t\t\t\t\tconfig.axis_y2_tick_count\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// axes\r\n\t\t$$.axis.redraw(transitions, hideAxis);\r\n\r\n\t\t// Update axis label\r\n\t\t$$.axis.updateLabels(withTransition);\r\n\r\n\t\t// show/hide if manual culling needed\r\n\t\tif ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {\r\n\t\t\tif (config.axis_x_tick_culling && tickValues) {\r\n\t\t\t\tfor (let i = 1; i < tickValues.length; i++) {\r\n\t\t\t\t\tif (tickValues.length / i < config.axis_x_tick_culling_max) {\r\n\t\t\t\t\t\tintervalForCulling = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$$.svg.selectAll(`.${CLASS.axisX} .tick text`).each(function(e) {\r\n\t\t\t\t\tconst index = tickValues.indexOf(e);\r\n\r\n\t\t\t\t\tindex >= 0 &&\r\n\t\t\t\t\t\td3Select(this)\r\n\t\t\t\t\t\t\t.style(\"display\", index % intervalForCulling ? \"none\" : \"block\");\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t$$.svg.selectAll(`.${CLASS.axisX} .tick text`)\r\n\t\t\t\t\t.style(\"display\", \"block\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// setup drawer - MEMO: these must be called after axis updated\r\n\t\tconst drawArea = $$.generateDrawArea ?\r\n\t\t\t$$.generateDrawArea(areaIndices, false) : undefined;\r\n\r\n\t\tconst drawBar = $$.generateDrawBar ?\r\n\t\t\t$$.generateDrawBar(barIndices) : undefined;\r\n\r\n\t\tconst drawLine = $$.generateDrawLine ?\r\n\t\t\t$$.generateDrawLine(lineIndices, false) : undefined;\r\n\r\n\t\tconst xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);\r\n\t\tconst yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false);\r\n\r\n\t\t// Update sub domain\r\n\t\tif (withY) {\r\n\t\t\t$$.subY.domain($$.getYDomain(targetsToShow, \"y\"));\r\n\t\t\t$$.subY2.domain($$.getYDomain(targetsToShow, \"y2\"));\r\n\t\t}\r\n\r\n\t\t// xgrid focus\r\n\t\t$$.updateXgridFocus();\r\n\r\n\t\t// Data empty label positioning and text.\r\n\t\tmain.select(`text.${CLASS.text}.${CLASS.empty}`)\r\n\t\t\t.attr(\"x\", $$.width / 2)\r\n\t\t\t.attr(\"y\", $$.height / 2)\r\n\t\t\t.text(config.data_empty_label_text)\r\n\t\t\t.transition()\r\n\t\t\t.style(\"opacity\", targetsToShow.length ? 0 : 1);\r\n\r\n\t\t// grid\r\n\t\t$$.updateGrid(duration);\r\n\r\n\t\t// rect for regions\r\n\t\t$$.updateRegion(duration);\r\n\r\n\t\t// bars\r\n\t\t$$.updateBar(durationForExit);\r\n\r\n\t\t// lines, areas and cricles\r\n\t\t$$.updateLine(durationForExit);\r\n\t\t$$.updateArea(durationForExit);\r\n\t\t$$.updateCircle();\r\n\r\n\t\t// text\r\n\t\t$$.hasDataLabel() &&\r\n\t\t\t$$.updateText(durationForExit);\r\n\r\n\t\t// title\r\n\t\t$$.redrawTitle && $$.redrawTitle();\r\n\r\n\t\t// arc\r\n\t\t$$.redrawArc &&\r\n\t\t\t$$.redrawArc(duration, durationForExit, withTransform);\r\n\r\n\t\t// subchart\r\n\t\tconfig.subchart_show &&\r\n\t\t\t$$.redrawSubchart &&\r\n\t\t\t\t$$.redrawSubchart(\r\n\t\t\t\t\twithSubchart,\r\n\t\t\t\t\ttransitions,\r\n\t\t\t\t\tduration,\r\n\t\t\t\t\tdurationForExit,\r\n\t\t\t\t\tareaIndices,\r\n\t\t\t\t\tbarIndices,\r\n\t\t\t\t\tlineIndices\r\n\t\t\t\t);\r\n\r\n\t\t// circles for select\r\n\t\tmain.selectAll(`.${CLASS.selectedCircles}`)\r\n\t\t\t.filter($$.isBarType.bind($$))\r\n\t\t\t.selectAll(\"circle\")\r\n\t\t\t.remove();\r\n\r\n\t\t// event rects will redrawn when flow called\r\n\t\tif (config.interaction_enabled && !options.flow && withEventRect) {\r\n\t\t\t$$.redrawEventRect();\r\n\t\t\t$$.updateZoom && $$.updateZoom();\r\n\t\t}\r\n\r\n\t\t// update circleY based on updated parameters\r\n\t\t$$.updateCircleY();\r\n\r\n\t\t// generate circle x/y functions depending on updated params\r\n\t\tconst cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);\r\n\t\tconst cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$);\r\n\r\n\t\tif (options.flow) {\r\n\t\t\tflow = $$.generateFlow({\r\n\t\t\t\ttargets: targetsToShow,\r\n\t\t\t\tflow: options.flow,\r\n\t\t\t\tduration: options.flow.duration,\r\n\t\t\t\tdrawBar: drawBar,\r\n\t\t\t\tdrawLine: drawLine,\r\n\t\t\t\tdrawArea: drawArea,\r\n\t\t\t\tcx: cx,\r\n\t\t\t\tcy: cy,\r\n\t\t\t\txv: xv,\r\n\t\t\t\txForText: xForText,\r\n\t\t\t\tyForText: yForText\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif ((duration || flow) && $$.isTabVisible()) { // Only use transition if tab visible. See #938.\r\n\t\t\t// transition should be derived from one transition\r\n\t\t\td3Transition().duration(duration)\r\n\t\t\t\t.each(() => {\r\n\t\t\t\t\t// Wait for end of transitions to call flow and onrendered callback\r\n\t\t\t\t\twaitForDraw = $$.generateWait();\r\n\r\n\t\t\t\t\t// redraw and gather transitions\r\n\t\t\t\t\t[\r\n\t\t\t\t\t\t$$.redrawBar(drawBar, true),\r\n\t\t\t\t\t\t$$.redrawLine(drawLine, true),\r\n\t\t\t\t\t\t$$.redrawArea(drawArea, true),\r\n\t\t\t\t\t\t$$.redrawCircle(cx, cy, true, flow),\r\n\t\t\t\t\t\t$$.redrawText(xForText, yForText, options.flow, true),\r\n\t\t\t\t\t\t$$.redrawRegion(true),\r\n\t\t\t\t\t\t$$.redrawGrid(true)\r\n\t\t\t\t\t].reduce((acc, t1) => {\r\n\t\t\t\t\t\tt1.forEach(t2 => {\r\n\t\t\t\t\t\t\tacc.push(t2);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn acc;\r\n\t\t\t\t\t}, []).forEach(t => {\r\n\t\t\t\t\t\twaitForDraw.add(t);\r\n\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t\t.call(waitForDraw, () => {\r\n\t\t\t\t\tflow && flow();\r\n\t\t\t\t\tconfig.onrendered && config.onrendered.call($$);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\t$$.redrawBar(drawBar);\r\n\t\t\t$$.redrawLine(drawLine);\r\n\t\t\t$$.redrawArea(drawArea);\r\n\t\t\t$$.redrawCircle(cx, cy);\r\n\t\t\t$$.redrawText(xForText, yForText, options.flow);\r\n\t\t\t$$.redrawRegion();\r\n\t\t\t$$.redrawGrid();\r\n\r\n\t\t\tconfig.onrendered &&\r\n\t\t\t\tconfig.onrendered.call($$);\r\n\t\t}\r\n\r\n\t\t// update fadein condition\r\n\t\t$$.mapToIds($$.data.targets).forEach(id => {\r\n\t\t\t$$.withoutFadeIn[id] = true;\r\n\t\t});\r\n\t}\r\n\r\n\tupdateAndRedraw(options = {}) {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\t\tlet transitions;\r\n\r\n\t\t// same with redraw\r\n\t\toptions.withTransition = getOption(options, \"withTransition\", true);\r\n\t\toptions.withTransform = getOption(options, \"withTransform\", false);\r\n\t\toptions.withLegend = getOption(options, \"withLegend\", false);\r\n\r\n\t\t// NOT same with redraw\r\n\t\toptions.withUpdateXDomain = true;\r\n\t\toptions.withUpdateOrgXDomain = true;\r\n\t\toptions.withTransitionForExit = false;\r\n\t\toptions.withTransitionForTransform = getOption(options, \"withTransitionForTransform\", options.withTransition);\r\n\r\n\t\t// MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)\r\n\t\t$$.updateSizes();\r\n\r\n\t\t// MEMO: called in updateLegend in redraw if withLegend\r\n\t\tif (!(options.withLegend && config.legend_show)) {\r\n\t\t\ttransitions = $$.axis.generateTransitions(\r\n\t\t\t\toptions.withTransitionForAxis ? config.transition_duration : 0\r\n\t\t\t);\r\n\r\n\t\t\t// Update scales\r\n\t\t\t$$.updateScales();\r\n\t\t\t$$.updateSvgSize();\r\n\r\n\t\t\t// Update g positions\r\n\t\t\t$$.transformAll(options.withTransitionForTransform, transitions);\r\n\t\t}\r\n\r\n\t\t// Draw with new sizes & scales\r\n\t\t$$.redraw(options, transitions);\r\n\t}\r\n\r\n\tredrawWithoutRescale() {\r\n\t\tthis.redraw({\r\n\t\t\twithY: false,\r\n\t\t\twithSubchart: false,\r\n\t\t\twithEventRect: false,\r\n\t\t\twithTransitionForAxis: false\r\n\t\t});\r\n\t}\r\n\r\n\tisTimeSeries() {\r\n\t\treturn this.config.axis_x_type === \"timeseries\";\r\n\t}\r\n\r\n\tisCategorized() {\r\n\t\treturn this.config.axis_x_type.indexOf(\"category\") >= 0;\r\n\t}\r\n\r\n\tisCustomX() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\r\n\t\treturn !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));\r\n\t}\r\n\r\n\tisTimeSeriesY() {\r\n\t\treturn this.config.axis_y_type === \"timeseries\";\r\n\t}\r\n\r\n\tgetTranslate(target) {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\r\n\t\tlet x;\r\n\t\tlet y;\r\n\r\n\t\tif (target === \"main\") {\r\n\t\t\tx = asHalfPixel($$.margin.left);\r\n\t\t\ty = asHalfPixel($$.margin.top);\r\n\t\t} else if (target === \"context\") {\r\n\t\t\tx = asHalfPixel($$.margin2.left);\r\n\t\t\ty = asHalfPixel($$.margin2.top);\r\n\t\t} else if (target === \"legend\") {\r\n\t\t\tx = $$.margin3.left;\r\n\t\t\ty = $$.margin3.top;\r\n\t\t} else if (target === \"x\") {\r\n\t\t\tx = 0;\r\n\t\t\ty = config.axis_rotated ? 0 : $$.height;\r\n\t\t} else if (target === \"y\") {\r\n\t\t\tx = 0;\r\n\t\t\ty = config.axis_rotated ? $$.height : 0;\r\n\t\t} else if (target === \"y2\") {\r\n\t\t\tx = config.axis_rotated ? 0 : $$.width;\r\n\t\t\ty = config.axis_rotated ? 1 : 0;\r\n\t\t} else if (target === \"subx\") {\r\n\t\t\tx = 0;\r\n\t\t\ty = config.axis_rotated ? 0 : $$.height2;\r\n\t\t} else if (target === \"arc\") {\r\n\t\t\tx = $$.arcWidth / 2;\r\n\t\t\ty = $$.arcHeight / 2;\r\n\t\t}\r\n\r\n\t\treturn `translate(${x}, ${y})`;\r\n\t}\r\n\r\n\tinitialOpacity(d) {\r\n\t\treturn d.value !== null &&\r\n\t\t\tthis.withoutFadeIn[d.id] ? \"1\" : \"0\";\r\n\t}\r\n\r\n\tinitialOpacityForCircle(d) {\r\n\t\treturn d.value !== null &&\r\n\t\t\tthis.withoutFadeIn[d.id] ? this.opacityForCircle(d) : \"0\";\r\n\t}\r\n\r\n\topacityForCircle(d) {\r\n\t\tconst opacity = this.config.point_show ? \"1\" : \"0\";\r\n\r\n\t\treturn isValue(d.value) ? (this.isScatterType(d) ? \"0.5\" : opacity) : \"0\";\r\n\t}\r\n\r\n\topacityForText() {\r\n\t\treturn this.hasDataLabel() ? \"1\" : \"0\";\r\n\t}\r\n\r\n\txx(d) {\r\n\t\tif (this.config.zoom_enabled && this.zoomScale) {\r\n\t\t\treturn d ? this.zoomScale(d.x) : null;\r\n\t\t} else {\r\n\t\t\treturn d ? this.x(d.x) : null;\r\n\t\t}\r\n\t}\r\n\r\n\txv(d) {\r\n\t\tconst $$ = this;\r\n\t\tlet value = d.value;\r\n\r\n\t\tif ($$.isTimeSeries()) {\r\n\t\t\tvalue = $$.parseDate(d.value);\r\n\t\t} else if ($$.isCategorized() && typeof d.value === \"string\") {\r\n\t\t\tvalue = $$.config.axis_x_categories.indexOf(d.value);\r\n\t\t}\r\n\r\n\t\treturn Math.ceil($$.x(value));\r\n\t}\r\n\r\n\tyv(d) {\r\n\t\tconst $$ = this;\r\n\t\tconst yScale = d.axis && d.axis === \"y2\" ? $$.y2 : $$.y;\r\n\r\n\t\treturn Math.ceil(yScale(d.value));\r\n\t}\r\n\r\n\tsubxx(d) {\r\n\t\treturn d ? this.subX(d.x) : null;\r\n\t}\r\n\r\n\ttransformMain(withTransition, transitions) {\r\n\t\tconst $$ = this;\r\n\t\tlet xAxis;\r\n\t\tlet yAxis;\r\n\t\tlet y2Axis;\r\n\r\n\t\tif (transitions && transitions.axisX) {\r\n\t\t\txAxis = transitions.axisX;\r\n\t\t} else {\r\n\t\t\txAxis = $$.main.select(`.${CLASS.axisX}`);\r\n\r\n\t\t\tif (withTransition) {\r\n\t\t\t\txAxis = xAxis.transition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (transitions && transitions.axisY) {\r\n\t\t\tyAxis = transitions.axisY;\r\n\t\t} else {\r\n\t\t\tyAxis = $$.main.select(`.${CLASS.axisY}`);\r\n\r\n\t\t\tif (withTransition) {\r\n\t\t\t\tyAxis = yAxis.transition();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (transitions && transitions.axisY2) {\r\n\t\t\ty2Axis = transitions.axisY2;\r\n\t\t} else {\r\n\t\t\ty2Axis = $$.main.select(`.${CLASS.axisY2}`);\r\n\r\n\t\t\tif (withTransition) {\r\n\t\t\t\ty2Axis = y2Axis.transition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t(withTransition ? $$.main.transition() : $$.main)\r\n\t\t\t.attr(\"transform\", $$.getTranslate(\"main\"));\r\n\r\n\t\txAxis.attr(\"transform\", $$.getTranslate(\"x\"));\r\n\t\tyAxis.attr(\"transform\", $$.getTranslate(\"y\"));\r\n\t\ty2Axis.attr(\"transform\", $$.getTranslate(\"y2\"));\r\n\r\n\t\t$$.main.select(`.${CLASS.chartArcs}`)\r\n\t\t\t.attr(\"transform\", $$.getTranslate(\"arc\"));\r\n\t}\r\n\r\n\ttransformAll(withTransition, transitions) {\r\n\t\tconst $$ = this;\r\n\r\n\t\t$$.transformMain(withTransition, transitions);\r\n\r\n\t\t$$.config.subchart_show &&\r\n\t\t\t$$.transformContext(withTransition, transitions);\r\n\r\n\t\t$$.legend &&\r\n\t\t\t$$.transformLegend(withTransition);\r\n\t}\r\n\r\n\tupdateSvgSize() {\r\n\t\tconst $$ = this;\r\n\t\tconst brush = $$.svg.select(`.${CLASS.brush} .overlay`);\r\n\t\tconst brushHeight = brush.size() ? brush.attr(\"height\") : 0;\r\n\r\n\t\t$$.svg\r\n\t\t\t.attr(\"width\", $$.currentWidth)\r\n\t\t\t.attr(\"height\", $$.currentHeight);\r\n\r\n\t\t$$.svg.selectAll([`#${$$.clipId}`, `#${$$.clipIdForGrid}`])\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"width\", $$.width)\r\n\t\t\t.attr(\"height\", $$.height);\r\n\r\n\t\t$$.svg.select(`#${$$.clipIdForXAxis}`)\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"x\", $$.getXAxisClipX.bind($$))\r\n\t\t\t.attr(\"y\", $$.getXAxisClipY.bind($$))\r\n\t\t\t.attr(\"width\", $$.getXAxisClipWidth.bind($$))\r\n\t\t\t.attr(\"height\", $$.getXAxisClipHeight.bind($$));\r\n\r\n\t\t$$.svg.select(`#${$$.clipIdForYAxis}`)\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"x\", $$.getYAxisClipX.bind($$))\r\n\t\t\t.attr(\"y\", $$.getYAxisClipY.bind($$))\r\n\t\t\t.attr(\"width\", $$.getYAxisClipWidth.bind($$))\r\n\t\t\t.attr(\"height\", $$.getYAxisClipHeight.bind($$));\r\n\r\n\t\t$$.svg.select(`#${$$.clipIdForSubchart}`)\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"width\", $$.width)\r\n\t\t\t.attr(\"height\", brushHeight);\r\n\r\n\t\t$$.svg.select(`.${CLASS.zoomRect}`)\r\n\t\t\t.attr(\"width\", $$.width)\r\n\t\t\t.attr(\"height\", $$.height);\r\n\r\n\t\t// MEMO: parent div\"s height will be bigger than svg when \r\n\t\t$$.selectChart.style(\"max-height\", `${$$.currentHeight}px`);\r\n\r\n\t\t$$.brush && $$.brush.scale($$.subX, brushHeight);\r\n\t}\r\n\r\n\tupdateDimension(withoutAxis) {\r\n\t\tconst $$ = this;\r\n\r\n\t\tif (!withoutAxis) {\r\n\t\t\tif ($$.config.axis_rotated) {\r\n\t\t\t\t$$.axes.x.call($$.xAxis);\r\n\t\t\t\t$$.axes.subx.call($$.subXAxis);\r\n\t\t\t} else {\r\n\t\t\t\t$$.axes.y.call($$.yAxis);\r\n\t\t\t\t$$.axes.y2.call($$.y2Axis);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$$.updateSizes();\r\n\r\n\t\t// pass 'withoutAxis' param to not animate at the init rendering\r\n\t\t$$.updateScales(withoutAxis);\r\n\r\n\t\t$$.updateSvgSize();\r\n\t\t$$.transformAll(false);\r\n\t}\r\n\r\n\tobserveInserted(selection) {\r\n\t\tconst $$ = this;\r\n\r\n\t\tif (typeof MutationObserver === \"undefined\") {\r\n\t\t\tconsole && console.error &&\r\n\t\t\t\tconsole.error(\"MutationObserver not defined.\");\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst observer = new MutationObserver(mutations => {\r\n\t\t\tmutations.forEach(mutation => {\r\n\t\t\t\tif (mutation.type === \"childList\" && mutation.previousSibling) {\r\n\t\t\t\t\tobserver.disconnect();\r\n\r\n\t\t\t\t\t// need to wait for completion of load because size calculation requires the actual sizes determined after that completion\r\n\t\t\t\t\t$$.intervalForObserveInserted = window.setInterval(() => {\r\n\t\t\t\t\t\t// parentNode will NOT be null when completed\r\n\t\t\t\t\t\tif (selection.node().parentNode) {\r\n\t\t\t\t\t\t\twindow.clearInterval($$.intervalForObserveInserted);\r\n\t\t\t\t\t\t\t$$.updateDimension();\r\n\r\n\t\t\t\t\t\t\t$$.brush && $$.brush.update();\r\n\t\t\t\t\t\t\t$$.config.oninit.call($$);\r\n\r\n\t\t\t\t\t\t\t$$.redraw({\r\n\t\t\t\t\t\t\t\twithTransform: true,\r\n\t\t\t\t\t\t\t\twithUpdateXDomain: true,\r\n\t\t\t\t\t\t\t\twithUpdateOrgXDomain: true,\r\n\t\t\t\t\t\t\t\twithTransition: false,\r\n\t\t\t\t\t\t\t\twithTransitionForTransform: false,\r\n\t\t\t\t\t\t\t\twithLegend: true\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tselection.transition().style(\"opacity\", \"1\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tobserver.observe(selection.node(), {\r\n\t\t\tattributes: true,\r\n\t\t\tchildList: true,\r\n\t\t\tcharacterData: true\r\n\t\t});\r\n\t}\r\n\r\n\tbindResize() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\r\n\t\t$$.resizeFunction = $$.generateResize();\r\n\r\n\t\t$$.resizeFunction.add(() => {\r\n\t\t\tconfig.onresize.call($$);\r\n\t\t});\r\n\r\n\t\tif (config.resize_auto) {\r\n\t\t\t$$.resizeFunction.add(() => {\r\n\t\t\t\tif ($$.resizeTimeout !== undefined) {\r\n\t\t\t\t\twindow.clearTimeout($$.resizeTimeout);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$$.resizeTimeout = window.setTimeout(() => {\r\n\t\t\t\t\tdelete $$.resizeTimeout;\r\n\t\t\t\t\t$$.api.flush();\r\n\t\t\t\t}, 100);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t$$.resizeFunction.add(() => {\r\n\t\t\tconfig.onresized.call($$);\r\n\t\t});\r\n\r\n\t\taddEvent(window, \"resize\", $$.resizeFunction);\r\n\r\n\t\t// if (window.attachEvent) {\r\n\t\t// \twindow.attachEvent(\"onresize\", $$.resizeFunction);\r\n\t\t// } else if (window.addEventListener) {\r\n\t\t// \twindow.addEventListener(\"resize\", $$.resizeFunction, false);\r\n\t\t// } else {\r\n\t\t// \t// fallback to this, if this is a very old browser\r\n\t\t// \tlet wrapper = window.onresize;\r\n\t\t// \tif (!wrapper) {\r\n\t\t// \t\t// create a wrapper that will call all charts\r\n\t\t// \t\twrapper = $$.generateResize();\r\n\t\t// \t} else if (!wrapper.add || !wrapper.remove) {\r\n\t\t// \t\t// there is already a handler registered, make sure we call it too\r\n\t\t// \t\twrapper = $$.generateResize();\r\n\t\t// \t\twrapper.add(window.onresize);\r\n\t\t// \t}\r\n\t\t// \t// add this graph to the wrapper, we will be removed if the user calls destroy\r\n\t\t// \twrapper.add($$.resizeFunction);\r\n\t\t// \twindow.onresize = wrapper;\r\n\t\t// }\r\n\t}\r\n\r\n\tgenerateResize() {\r\n\t\tconst resizeFunctions = [];\r\n\r\n\t\tfunction callResizeFunctions() {\r\n\t\t\tresizeFunctions.forEach(f => f());\r\n\t\t}\r\n\r\n\t\tcallResizeFunctions.add = function(f) {\r\n\t\t\tresizeFunctions.push(f);\r\n\t\t};\r\n\r\n\t\tcallResizeFunctions.remove = function(f) {\r\n\t\t\tfor (let i = 0; i < resizeFunctions.length; i++) {\r\n\t\t\t\tif (resizeFunctions[i] === f) {\r\n\t\t\t\t\tresizeFunctions.splice(i, 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn callResizeFunctions;\r\n\t}\r\n\r\n\tendall(transition, callback) {\r\n\t\tlet n = 0;\r\n\r\n\t\ttransition\r\n\t\t\t.each(() => ++n)\r\n\t\t\t.on(\"end\", function(...args) {\r\n\t\t\t\t!--n && callback.apply(this, ...args);\r\n\t\t\t});\r\n\t}\r\n\r\n\tgenerateWait() {\r\n\t\tlet transitionsToWait = [];\r\n\t\tconst f = function(transition, callback) {\r\n\t\t\tlet timer;\r\n\r\n\t\t\tfunction loop() {\r\n\t\t\t\tlet done = 0;\r\n\r\n\t\t\t\ttransitionsToWait.forEach(t => {\r\n\t\t\t\t\tif (t.empty()) {\r\n\t\t\t\t\t\tdone += 1;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tt.transition();\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tdone += 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (done === transitionsToWait.length) {\r\n\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t\tcallback && callback();\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttimer = setTimeout(loop, 20);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tloop();\r\n\t\t};\r\n\r\n\t\tf.add = function(transition) {\r\n\t\t\tif (Array.isArray(transition)) {\r\n\t\t\t\ttransitionsToWait = [...transitionsToWait, ...transition];\r\n\t\t\t} else {\r\n\t\t\t\ttransitionsToWait.push(transition);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn f;\r\n\t}\r\n\r\n\tparseDate(date) {\r\n\t\tconst $$ = this;\r\n\t\tlet parsedDate;\r\n\r\n\t\tif (date instanceof Date) {\r\n\t\t\tparsedDate = date;\r\n\t\t} else if (typeof date === \"string\") {\r\n\t\t\tparsedDate = $$.dataTimeFormat($$.config.data_xFormat)(date);\r\n\t\t} else if (typeof date === \"number\" && !isNaN(date)) {\r\n\t\t\tparsedDate = new Date(+date);\r\n\t\t}\r\n\t\tif (!parsedDate || isNaN(+parsedDate)) {\r\n\t\t\tconsole && console.error &&\r\n\t\t\t\tconsole.error(`Failed to parse x '${date}' to Date object`);\r\n\t\t}\r\n\r\n\t\treturn parsedDate;\r\n\t}\r\n\r\n\tisTabVisible() {\r\n\t\tlet hidden;\r\n\r\n\t\tif (typeof document.hidden !== \"undefined\") { // Opera 12.10 and Firefox 18 and later support\r\n\t\t\thidden = \"hidden\";\r\n\t\t} else if (typeof document.mozHidden !== \"undefined\") {\r\n\t\t\thidden = \"mozHidden\";\r\n\t\t} else if (typeof document.msHidden !== \"undefined\") {\r\n\t\t\thidden = \"msHidden\";\r\n\t\t} else if (typeof document.webkitHidden !== \"undefined\") {\r\n\t\t\thidden = \"webkitHidden\";\r\n\t\t}\r\n\r\n\t\treturn !document[hidden];\r\n\t}\r\n\r\n\tconvertInputType() {\r\n\t\tconst $$ = this;\r\n\t\tconst config = $$.config;\r\n\t\tconst hasMouse = config.interaction_inputType_mouse ? !!(\"onmouseover\" in window) : false;\r\n\t\tlet hasTouch;\r\n\r\n\t\tif (config.interaction_inputType_touch) {\r\n\t\t\t// Ref: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js\r\n\t\t\thasTouch = (\"ontouchstart\" in window) || (window.DocumentTouch && document instanceof window.DocumentTouch);\r\n\r\n\t\t\t// https://github.com/ariya/phantomjs/issues/10375\r\n\t\t\tif (/PhantomJS/.test(window.navigator.userAgent)) {\r\n\t\t\t\thasTouch = false;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thasTouch = false;\r\n\t\t}\r\n\r\n\t\treturn (hasTouch && \"touch\") || (hasMouse && \"mouse\") || null;\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// src/internals/ChartInternal.js","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"d3\"\n// module id = 2\n// module chunks = 0 1","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nconst CLASS = {\r\n\ttarget: \"bb-target\",\r\n\tchart: \"bb-chart\",\r\n\tchartLine: \"bb-chart-line\",\r\n\tchartLines: \"bb-chart-lines\",\r\n\tchartBar: \"bb-chart-bar\",\r\n\tchartBars: \"bb-chart-bars\",\r\n\tchartText: \"bb-chart-text\",\r\n\tchartTexts: \"bb-chart-texts\",\r\n\tchartArc: \"bb-chart-arc\",\r\n\tchartArcs: \"bb-chart-arcs\",\r\n\tchartArcsTitle: \"bb-chart-arcs-title\",\r\n\tchartArcsBackground: \"bb-chart-arcs-background\",\r\n\tchartArcsGaugeUnit: \"bb-chart-arcs-gauge-unit\",\r\n\tchartArcsGaugeMax: \"bb-chart-arcs-gauge-max\",\r\n\tchartArcsGaugeMin: \"bb-chart-arcs-gauge-min\",\r\n\tselectedCircle: \"bb-selected-circle\",\r\n\tselectedCircles: \"bb-selected-circles\",\r\n\teventRect: \"bb-event-rect\",\r\n\teventRects: \"bb-event-rects\",\r\n\teventRectsSingle: \"bb-event-rects-single\",\r\n\teventRectsMultiple: \"bb-event-rects-multiple\",\r\n\tzoomRect: \"bb-zoom-rect\",\r\n\tbrush: \"bb-brush\",\r\n\tfocused: \"bb-focused\",\r\n\tdefocused: \"bb-defocused\",\r\n\tregion: \"bb-region\",\r\n\tregions: \"bb-regions\",\r\n\ttitle: \"bb-title\",\r\n\ttooltipContainer: \"bb-tooltip-container\",\r\n\ttooltip: \"bb-tooltip\",\r\n\ttooltipName: \"bb-tooltip-name\",\r\n\tshape: \"bb-shape\",\r\n\tshapes: \"bb-shapes\",\r\n\tline: \"bb-line\",\r\n\tlines: \"bb-lines\",\r\n\tbar: \"bb-bar\",\r\n\tbars: \"bb-bars\",\r\n\tcircle: \"bb-circle\",\r\n\tcircles: \"bb-circles\",\r\n\tarc: \"bb-arc\",\r\n\tarcs: \"bb-arcs\",\r\n\tarea: \"bb-area\",\r\n\tareas: \"bb-areas\",\r\n\tempty: \"bb-empty\",\r\n\ttext: \"bb-text\",\r\n\ttexts: \"bb-texts\",\r\n\tgaugeValue: \"bb-gauge-value\",\r\n\tgrid: \"bb-grid\",\r\n\tgridLines: \"bb-grid-lines\",\r\n\txgrid: \"bb-xgrid\",\r\n\txgrids: \"bb-xgrids\",\r\n\txgridLine: \"bb-xgrid-line\",\r\n\txgridLines: \"bb-xgrid-lines\",\r\n\txgridFocus: \"bb-xgrid-focus\",\r\n\tygrid: \"bb-ygrid\",\r\n\tygrids: \"bb-ygrids\",\r\n\tygridLine: \"bb-ygrid-line\",\r\n\tygridLines: \"bb-ygrid-lines\",\r\n\taxis: \"bb-axis\",\r\n\taxisX: \"bb-axis-x\",\r\n\taxisXLabel: \"bb-axis-x-label\",\r\n\taxisY: \"bb-axis-y\",\r\n\taxisYLabel: \"bb-axis-y-label\",\r\n\taxisY2: \"bb-axis-y2\",\r\n\taxisY2Label: \"bb-axis-y2-label\",\r\n\tlegendBackground: \"bb-legend-background\",\r\n\tlegendItem: \"bb-legend-item\",\r\n\tlegendItemEvent: \"bb-legend-item-event\",\r\n\tlegendItemTile: \"bb-legend-item-tile\",\r\n\tlegendItemHidden: \"bb-legend-item-hidden\",\r\n\tlegendItemFocused: \"bb-legend-item-focused\",\r\n\tdragarea: \"bb-dragarea\",\r\n\tEXPANDED: \"_expanded_\",\r\n\tSELECTED: \"_selected_\",\r\n\tINCLUDED: \"_included_\"\r\n};\r\n\r\nexport default CLASS;\r\n\n\n\n// WEBPACK FOOTER //\n// src/config/classes.js","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n * @license MIT\r\n * @ignore\r\n */\r\nimport ChartInternal from \"./ChartInternal\";\r\n\r\n/**\r\n * Main chart class.\r\n * - Note: Instantiated via `bb.generate()`.\r\n * @class Chart\r\n * @example\r\n * var chart = bb.generate({\r\n * data: {\r\n * columns: [\r\n *\t [\"x\", \"2015-11-02\", \"2015-12-01\", \"2016-01-01\", \"2016-02-01\", \"2016-03-01\"],\r\n * \t [\"count1\", 11, 8, 7, 6, 5 ],\r\n *\t [\"count2\", 9, 3, 6, 2, 8 ]\r\n * ]}\r\n * }\r\n * @see {@link bb.generate} for the initialization.\r\n*/\r\nexport default class Chart {\r\n\tconstructor(config) {\r\n\t\tconst $$ = new ChartInternal(this);\r\n\r\n\t\tthis.internal = $$;\r\n\r\n\t\t$$.loadConfig(config);\r\n\t\t$$.beforeInit(config);\r\n\t\t$$.init();\r\n\t\t$$.afterInit(config);\r\n\r\n\t\t// bind \"this\" to nested API\r\n\t\t(function bindThis(fn, target, argThis) {\r\n\t\t\tObject.keys(fn).forEach(key => {\r\n\t\t\t\ttarget[key] = fn[key].bind(argThis);\r\n\r\n\t\t\t\tObject.keys(fn[key]).length &&\r\n\t\t\t\t\tbindThis(fn[key], target[key], argThis);\r\n\t\t\t});\r\n\t\t})(Chart.prototype, this, this);\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// src/internals/Chart.js","\"use strict\";\n\nexports.__esModule = true;\n\nfunction _typeof(obj) { return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; }\n\nexports.default = function (obj) {\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-helper-modules/lib/typeof.js\n// module id = 5\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-helper-modules/lib/classCallCheck.js\n// module id = 6\n// module chunks = 0 1","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport {select as d3Select} from \"d3\";\r\nimport {\r\n\tisFunction,\r\n\tisString,\r\n\tisValue,\r\n\tisEmpty\r\n} from \"../internals/util\";\r\nimport bbAxis from \"./bb.axis\";\r\nimport CLASS from \"../config/classes\";\r\n\r\nexport default class Axis {\r\n\tconstructor(owner) {\r\n\t\tthis.owner = owner;\r\n\t}\r\n\r\n\tinit() {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tconst main = $$.main;\r\n\r\n\t\t$$.axes.x = main.append(\"g\")\r\n\t\t\t.attr(\"class\", `${CLASS.axis} ${CLASS.axisX}`)\r\n\t\t\t.attr(\"clip-path\", $$.clipPathForXAxis)\r\n\t\t\t.attr(\"transform\", $$.getTranslate(\"x\"))\r\n\t\t\t.style(\"visibility\", config.axis_x_show ? \"visible\" : \"hidden\");\r\n\r\n\t\t$$.axes.x.append(\"text\")\r\n\t\t\t.attr(\"class\", CLASS.axisXLabel)\r\n\t\t\t.attr(\"transform\", config.axis_rotated ? \"rotate(-90)\" : \"\")\r\n\t\t\t.style(\"text-anchor\", this.textAnchorForXAxisLabel.bind(this));\r\n\r\n\t\t$$.axes.y = main.append(\"g\")\r\n\t\t\t.attr(\"class\", `${CLASS.axis} ${CLASS.axisY}`)\r\n\t\t\t.attr(\"clip-path\", config.axis_y_inner ? \"\" : $$.clipPathForYAxis)\r\n\t\t\t.attr(\"transform\", $$.getTranslate(\"y\"))\r\n\t\t\t.style(\"visibility\", config.axis_y_show ? \"visible\" : \"hidden\");\r\n\r\n\t\t$$.axes.y.append(\"text\")\r\n\t\t\t.attr(\"class\", CLASS.axisYLabel)\r\n\t\t\t.attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\")\r\n\t\t\t.style(\"text-anchor\", this.textAnchorForYAxisLabel.bind(this));\r\n\r\n\t\t$$.axes.y2 = main.append(\"g\")\r\n\t\t\t.attr(\"class\", `${CLASS.axis} ${CLASS.axisY2}`)\r\n\t\t\t// clip-path?\r\n\t\t\t.attr(\"transform\", $$.getTranslate(\"y2\"))\r\n\t\t\t.style(\"visibility\", config.axis_y2_show ? \"visible\" : \"hidden\");\r\n\r\n\t\t$$.axes.y2.append(\"text\")\r\n\t\t\t.attr(\"class\", CLASS.axisY2Label)\r\n\t\t\t.attr(\"transform\", config.axis_rotated ? \"\" : \"rotate(-90)\")\r\n\t\t\t.style(\"text-anchor\", this.textAnchorForY2AxisLabel.bind(this));\r\n\t}\r\n\r\n\tgetXAxis(scale, orient, tickFormat,\r\n\t\ttickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tconst axisParams = {\r\n\t\t\tisCategory: $$.isCategorized(),\r\n\t\t\twithOuterTick,\r\n\t\t\ttickMultiline: config.axis_x_tick_multiline,\r\n\t\t\ttickWidth: config.axis_x_tick_width,\r\n\t\t\ttickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate,\r\n\t\t\twithoutTransition,\r\n\t\t};\r\n\r\n\t\tconst axis = bbAxis(axisParams)\r\n\t\t\t.scale(scale)\r\n\t\t\t.orient(orient);\r\n\r\n\t\tlet newTickValues = tickValues;\r\n\r\n\t\tif ($$.isTimeSeries() && tickValues && typeof tickValues !== \"function\") {\r\n\t\t\tnewTickValues = tickValues.map(v => $$.parseDate(v));\r\n\t\t}\r\n\r\n\t\t// Set tick\r\n\t\taxis.tickFormat(tickFormat).tickValues(newTickValues);\r\n\r\n\t\tif ($$.isCategorized()) {\r\n\t\t\taxis.tickCentered(config.axis_x_tick_centered);\r\n\t\t\tif (isEmpty(config.axis_x_tick_culling)) {\r\n\t\t\t\tconfig.axis_x_tick_culling = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn axis;\r\n\t}\r\n\r\n\tupdateXAxisTickValues(targets, axis) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tlet tickValues;\r\n\r\n\t\tif (config.axis_x_tick_fit || config.axis_x_tick_count) {\r\n\t\t\ttickValues = this.generateTickValues(\r\n\t\t\t\t$$.mapTargetsToUniqueXs(targets),\r\n\t\t\t\tconfig.axis_x_tick_count,\r\n\t\t\t\t$$.isTimeSeries()\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\taxis.tickValues(tickValues);\r\n\t\t} else {\r\n\t\t\t$$.xAxis.tickValues(tickValues);\r\n\t\t\t$$.subXAxis.tickValues(tickValues);\r\n\t\t}\r\n\t\treturn tickValues;\r\n\t}\r\n\r\n\tgetYAxis(scale, orient, tickFormat, tickValues,\r\n\t\twithOuterTick, withoutTransition, withoutRotateTickText) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tconst axisParams = {\r\n\t\t\twithOuterTick,\r\n\t\t\twithoutTransition,\r\n\t\t\ttickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate,\r\n\t\t};\r\n\t\tconst axis = bbAxis(axisParams)\r\n\t\t\t.scale(scale)\r\n\t\t\t.orient(orient)\r\n\t\t\t.tickFormat(tickFormat);\r\n\r\n\t\tif ($$.isTimeSeriesY()) {\r\n\t\t\t// https://github.com/d3/d3/blob/master/CHANGES.md#time-intervals-d3-time\r\n\t\t\taxis.ticks(config.axis_y_tick_time_value);\r\n\t\t} else {\r\n\t\t\taxis.tickValues(tickValues);\r\n\t\t}\r\n\t\treturn axis;\r\n\t}\r\n\r\n\tgetId(id) {\r\n\t\tconst config = this.owner.config;\r\n\r\n\t\treturn id in config.data_axes ? config.data_axes[id] : \"y\";\r\n\t}\r\n\r\n\tgetXAxisTickFormat() {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tlet format;\r\n\r\n\t\tif ($$.isTimeSeries()) {\r\n\t\t\tformat = $$.defaultAxisTimeFormat;\r\n\t\t} else {\r\n\t\t\tformat = $$.isCategorized() ?\r\n\t\t\t\t$$.categoryName : function(v) {\r\n\t\t\t\t\treturn v < 0 ? v.toFixed(0) : v;\r\n\t\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (config.axis_x_tick_format) {\r\n\t\t\tif (isFunction(config.axis_x_tick_format)) {\r\n\t\t\t\tformat = config.axis_x_tick_format;\r\n\t\t\t} else if ($$.isTimeSeries()) {\r\n\t\t\t\tformat = date => (date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : \"\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn isFunction(format) ? v => format.call($$, v) : format;\r\n\t}\r\n\r\n\tgetTickValues(tickValues, axis) {\r\n\t\tlet values;\r\n\r\n\t\tif (tickValues) {\r\n\t\t\tvalues = tickValues;\r\n\t\t} else {\r\n\t\t\tvalues = axis ? axis.tickValues() : undefined;\r\n\t\t}\r\n\t\treturn values;\r\n\t}\r\n\r\n\tgetXAxisTickValues() {\r\n\t\treturn this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis);\r\n\t}\r\n\r\n\tgetYAxisTickValues() {\r\n\t\treturn this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis);\r\n\t}\r\n\r\n\tgetY2AxisTickValues() {\r\n\t\treturn this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis);\r\n\t}\r\n\r\n\tgetLabelOptionByAxisId(axisId) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tlet option;\r\n\r\n\t\tif (axisId === \"y\") {\r\n\t\t\toption = config.axis_y_label;\r\n\t\t} else if (axisId === \"y2\") {\r\n\t\t\toption = config.axis_y2_label;\r\n\t\t} else if (axisId === \"x\") {\r\n\t\t\toption = config.axis_x_label;\r\n\t\t}\r\n\t\treturn option;\r\n\t}\r\n\r\n\tgetLabelText(axisId) {\r\n\t\tconst option = this.getLabelOptionByAxisId(axisId);\r\n\t\tlet text;\r\n\r\n\t\tif (isString(option)) {\r\n\t\t\ttext = option;\r\n\t\t} else {\r\n\t\t\ttext = option ? option.text : null;\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\tsetLabelText(axisId, text) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tconst option = this.getLabelOptionByAxisId(axisId);\r\n\r\n\t\tif (isString(option)) {\r\n\t\t\tif (axisId === \"y\") {\r\n\t\t\t\tconfig.axis_y_label = text;\r\n\t\t\t} else if (axisId === \"y2\") {\r\n\t\t\t\tconfig.axis_y2_label = text;\r\n\t\t\t} else if (axisId === \"x\") {\r\n\t\t\t\tconfig.axis_x_label = text;\r\n\t\t\t}\r\n\t\t} else if (option) {\r\n\t\t\toption.text = text;\r\n\t\t}\r\n\t}\r\n\r\n\tgetLabelPosition(axisId, defaultPosition) {\r\n\t\tconst option = this.getLabelOptionByAxisId(axisId);\r\n\t\tconst position = (typeof option === \"object\" && option.position) ? option.position : defaultPosition;\r\n\r\n\t\treturn {\r\n\t\t\tisInner: !!~position.indexOf(\"inner\"),\r\n\t\t\tisOuter: !!~position.indexOf(\"outer\"),\r\n\t\t\tisLeft: !!~position.indexOf(\"left\"),\r\n\t\t\tisCenter: !!~position.indexOf(\"center\"),\r\n\t\t\tisRight: !!~position.indexOf(\"right\"),\r\n\t\t\tisTop: !!~position.indexOf(\"top\"),\r\n\t\t\tisMiddle: !!~position.indexOf(\"middle\"),\r\n\t\t\tisBottom: !!~position.indexOf(\"bottom\"),\r\n\t\t};\r\n\t}\r\n\r\n\tgetXAxisLabelPosition() {\r\n\t\treturn this.getLabelPosition(\"x\", this.owner.config.axis_rotated ? \"inner-top\" : \"inner-right\");\r\n\t}\r\n\r\n\tgetYAxisLabelPosition() {\r\n\t\treturn this.getLabelPosition(\"y\", this.owner.config.axis_rotated ? \"inner-right\" : \"inner-top\");\r\n\t}\r\n\r\n\tgetY2AxisLabelPosition() {\r\n\t\treturn this.getLabelPosition(\"y2\", this.owner.config.axis_rotated ? \"inner-right\" : \"inner-top\");\r\n\t}\r\n\r\n\tgetLabelPositionById(id) {\r\n\t\tlet label;\r\n\r\n\t\tif (id === \"y2\") {\r\n\t\t\tlabel = this.getY2AxisLabelPosition();\r\n\t\t} else {\r\n\t\t\tlabel = id === \"y\" ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();\r\n\t\t}\r\n\t\treturn label;\r\n\t}\r\n\r\n\ttextForXAxisLabel() {\r\n\t\treturn this.getLabelText(\"x\");\r\n\t}\r\n\r\n\ttextForYAxisLabel() {\r\n\t\treturn this.getLabelText(\"y\");\r\n\t}\r\n\r\n\ttextForY2AxisLabel() {\r\n\t\treturn this.getLabelText(\"y2\");\r\n\t}\r\n\r\n\txForAxisLabel(forHorizontal, position) {\r\n\t\tconst $$ = this.owner;\r\n\t\tlet x;\r\n\r\n\t\tif (forHorizontal) {\r\n\t\t\tif (position.isLeft) {\r\n\t\t\t\tx = 0;\r\n\t\t\t} else {\r\n\t\t\t\tx = position.isCenter ? $$.width / 2 : $$.width;\r\n\t\t\t}\r\n\t\t} else if (position.isBottom) {\r\n\t\t\tx = -$$.height;\r\n\t\t} else {\r\n\t\t\tx = position.isMiddle ? -$$.height / 2 : 0;\r\n\t\t}\r\n\t\treturn x;\r\n\t}\r\n\r\n\tdxForAxisLabel(forHorizontal, position) {\r\n\t\tlet dx;\r\n\r\n\t\tif (forHorizontal) {\r\n\t\t\tif (position.isLeft) {\r\n\t\t\t\tdx = \"0.5em\";\r\n\t\t\t} else {\r\n\t\t\t\tdx = position.isRight ? \"-0.5em\" : \"0\";\r\n\t\t\t}\r\n\t\t} else if (position.isTop) {\r\n\t\t\tdx = \"-0.5em\";\r\n\t\t} else {\r\n\t\t\tdx = position.isBottom ? \"0.5em\" : \"0\";\r\n\t\t}\r\n\t\treturn dx;\r\n\t}\r\n\r\n\ttextAnchorForAxisLabel(forHorizontal, position) {\r\n\t\tlet anchor;\r\n\r\n\t\tif (forHorizontal) {\r\n\t\t\tif (position.isLeft) {\r\n\t\t\t\tanchor = \"start\";\r\n\t\t\t} else {\r\n\t\t\t\tanchor = position.isCenter ? \"middle\" : \"end\";\r\n\t\t\t}\r\n\t\t} else if (position.isBottom) {\r\n\t\t\tanchor = \"start\";\r\n\t\t} else {\r\n\t\t\tanchor = position.isMiddle ? \"middle\" : \"end\";\r\n\t\t}\r\n\t\treturn anchor;\r\n\t}\r\n\r\n\txForXAxisLabel() {\r\n\t\treturn this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\r\n\t}\r\n\r\n\txForYAxisLabel() {\r\n\t\treturn this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\r\n\t}\r\n\r\n\txForY2AxisLabel() {\r\n\t\treturn this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\r\n\t}\r\n\r\n\tdxForXAxisLabel() {\r\n\t\treturn this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\r\n\t}\r\n\r\n\tdxForYAxisLabel() {\r\n\t\treturn this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\r\n\t}\r\n\r\n\tdxForY2AxisLabel() {\r\n\t\treturn this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\r\n\t}\r\n\r\n\tdyForXAxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tconst position = this.getXAxisLabelPosition();\r\n\r\n\t\tif (config.axis_rotated) {\r\n\t\t\treturn position.isInner ? \"1.2em\" : -25 - this.getMaxTickWidth(\"x\");\r\n\t\t} else if (position.isInner) {\r\n\t\t\treturn \"-0.5em\";\r\n\t\t} else if (config.axis_x_height) {\r\n\t\t\treturn config.axis_x_height - 10;\r\n\t\t} else {\r\n\t\t\treturn \"3em\";\r\n\t\t}\r\n\t}\r\n\r\n\tdyForYAxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst position = this.getYAxisLabelPosition();\r\n\r\n\t\tif ($$.config.axis_rotated) {\r\n\t\t\treturn position.isInner ? \"-0.5em\" : \"3em\";\r\n\t\t} else {\r\n\t\t\treturn position.isInner ? \"1.2em\" : -10 - ($$.config.axis_y_inner ? 0 : (this.getMaxTickWidth(\"y\") + 10));\r\n\t\t}\r\n\t}\r\n\r\n\tdyForY2AxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst position = this.getY2AxisLabelPosition();\r\n\r\n\t\tif ($$.config.axis_rotated) {\r\n\t\t\treturn position.isInner ? \"1.2em\" : \"-2.2em\";\r\n\t\t} else {\r\n\t\t\treturn position.isInner ? \"-0.5em\" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth(\"y2\") + 15));\r\n\t\t}\r\n\t}\r\n\r\n\ttextAnchorForXAxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\r\n\t\treturn this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition());\r\n\t}\r\n\r\n\ttextAnchorForYAxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\r\n\t\treturn this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition());\r\n\t}\r\n\r\n\ttextAnchorForY2AxisLabel() {\r\n\t\tconst $$ = this.owner;\r\n\r\n\t\treturn this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition());\r\n\t}\r\n\r\n\tgetMaxTickWidth(id, withoutRecompute) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst config = $$.config;\r\n\t\tlet maxWidth = 0;\r\n\t\tlet dummy;\r\n\t\tlet svg;\r\n\r\n\t\tif (withoutRecompute && $$.currentMaxTickWidths[id]) {\r\n\t\t\treturn $$.currentMaxTickWidths[id];\r\n\t\t}\r\n\r\n\t\tif ($$.svg) {\r\n\t\t\tconst targetsToShow = $$.filterTargetsToShow($$.data.targets);\r\n\t\t\tlet scale;\r\n\t\t\tlet axis;\r\n\r\n\t\t\tif (id === \"y\") {\r\n\t\t\t\tscale = $$.y.copy().domain($$.getYDomain(targetsToShow, \"y\"));\r\n\t\t\t\taxis = this.getYAxis(\r\n\t\t\t\t\tscale,\r\n\t\t\t\t\t$$.yOrient,\r\n\t\t\t\t\tconfig.axis_y_tick_format,\r\n\t\t\t\t\t$$.yAxisTickValues,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else if (id === \"y2\") {\r\n\t\t\t\tscale = $$.y2.copy().domain($$.getYDomain(targetsToShow, \"y2\"));\r\n\t\t\t\taxis = this.getYAxis(\r\n\t\t\t\t\tscale,\r\n\t\t\t\t\t$$.y2Orient,\r\n\t\t\t\t\tconfig.axis_y2_tick_format,\r\n\t\t\t\t\t$$.y2AxisTickValues,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tscale = $$.x.copy().domain($$.getXDomain(targetsToShow));\r\n\t\t\t\taxis = this.getXAxis(\r\n\t\t\t\t\tscale,\r\n\t\t\t\t\t$$.xOrient,\r\n\t\t\t\t\t$$.xAxisTickFormat,\r\n\t\t\t\t\t$$.xAxisTickValues,\r\n\t\t\t\t\tfalse,\r\n\t\t\t\t\ttrue,\r\n\t\t\t\t\ttrue\r\n\t\t\t\t);\r\n\t\t\t\tthis.updateXAxisTickValues(targetsToShow, axis);\r\n\t\t\t}\r\n\r\n\t\t\tdummy = d3Select(\"body\")\r\n\t\t\t\t.append(\"div\")\r\n\t\t\t\t.classed(\"bb\", true);\r\n\r\n\t\t\tsvg = dummy.append(\"svg\")\r\n\t\t\t\t.style(\"visibility\", \"hidden\")\r\n\t\t\t\t.style(\"position\", \"fixed\")\r\n\t\t\t\t.style(\"top\", \"0px\")\r\n\t\t\t\t.style(\"left\", \"0px\");\r\n\r\n\r\n\t\t\tsvg.append(\"g\").call(axis)\r\n\t\t\t\t.each(function() {\r\n\t\t\t\t\td3Select(this).selectAll(\"text\")\r\n\t\t\t\t\t\t.each(function() {\r\n\t\t\t\t\t\t\tconst box = this.getBoundingClientRect();\r\n\r\n\t\t\t\t\t\t\tif (maxWidth < box.width) { maxWidth = box.width; }\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\tdummy.remove();\r\n\t\t\t\t});\r\n\t\t}\r\n\t\t$$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;\r\n\t\treturn $$.currentMaxTickWidths[id];\r\n\t}\r\n\r\n\tupdateLabels(withTransition) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst axisXLabel = $$.main.select(`.${CLASS.axisX} .${CLASS.axisXLabel}`);\r\n\t\tconst axisYLabel = $$.main.select(`.${CLASS.axisY} .${CLASS.axisYLabel}`);\r\n\t\tconst axisY2Label = $$.main.select(`.${CLASS.axisY2} .${CLASS.axisY2Label}`);\r\n\r\n\t\t(withTransition ? axisXLabel.transition() : axisXLabel)\r\n\t\t\t.attr(\"x\", this.xForXAxisLabel.bind(this))\r\n\t\t\t.attr(\"dx\", this.dxForXAxisLabel.bind(this))\r\n\t\t\t.attr(\"dy\", this.dyForXAxisLabel.bind(this))\r\n\t\t\t.text(this.textForXAxisLabel.bind(this));\r\n\r\n\t\t(withTransition ? axisYLabel.transition() : axisYLabel)\r\n\t\t\t.attr(\"x\", this.xForYAxisLabel.bind(this))\r\n\t\t\t.attr(\"dx\", this.dxForYAxisLabel.bind(this))\r\n\t\t\t.attr(\"dy\", this.dyForYAxisLabel.bind(this))\r\n\t\t\t.text(this.textForYAxisLabel.bind(this));\r\n\r\n\t\t(withTransition ? axisY2Label.transition() : axisY2Label)\r\n\t\t\t.attr(\"x\", this.xForY2AxisLabel.bind(this))\r\n\t\t\t.attr(\"dx\", this.dxForY2AxisLabel.bind(this))\r\n\t\t\t.attr(\"dy\", this.dyForY2AxisLabel.bind(this))\r\n\t\t\t.text(this.textForY2AxisLabel.bind(this));\r\n\t}\r\n\r\n\tgetPadding(padding, key, defaultValue, domainLength) {\r\n\t\tconst p = typeof padding === \"number\" ? padding : padding[key];\r\n\r\n\t\tif (!isValue(p)) {\r\n\t\t\treturn defaultValue;\r\n\t\t}\r\n\t\tif (padding.unit === \"ratio\") {\r\n\t\t\treturn padding[key] * domainLength;\r\n\t\t}\r\n\t\t// assume padding is pixels if unit is not specified\r\n\t\treturn this.convertPixelsToAxisPadding(p, domainLength);\r\n\t}\r\n\r\n\tconvertPixelsToAxisPadding(pixels, domainLength) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst length = $$.config.axis_rotated ? $$.width : $$.height;\r\n\r\n\t\treturn domainLength * (pixels / length);\r\n\t}\r\n\r\n\tgenerateTickValues(values, tickCount, forTimeSeries) {\r\n\t\tlet tickValues = values;\r\n\t\tlet start;\r\n\t\tlet end;\r\n\t\tlet count;\r\n\t\tlet interval;\r\n\t\tlet i;\r\n\t\tlet tickValue;\r\n\r\n\t\tif (tickCount) {\r\n\t\t\tconst targetCount = isFunction(tickCount) ? tickCount() : tickCount;\r\n\r\n\t\t\t// compute ticks according to tickCount\r\n\t\t\tif (targetCount === 1) {\r\n\t\t\t\ttickValues = [values[0]];\r\n\t\t\t} else if (targetCount === 2) {\r\n\t\t\t\ttickValues = [values[0], values[values.length - 1]];\r\n\t\t\t} else if (targetCount > 2) {\r\n\t\t\t\tcount = targetCount - 2;\r\n\t\t\t\tstart = values[0];\r\n\t\t\t\tend = values[values.length - 1];\r\n\t\t\t\tinterval = (end - start) / (count + 1);\r\n\t\t\t\t// re-construct unique values\r\n\t\t\t\ttickValues = [start];\r\n\r\n\t\t\t\tfor (i = 0; i < count; i++) {\r\n\t\t\t\t\ttickValue = +start + interval * (i + 1);\r\n\t\t\t\t\ttickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);\r\n\t\t\t\t}\r\n\t\t\t\ttickValues.push(end);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!forTimeSeries) {\r\n\t\t\ttickValues = tickValues.sort((a, b) => a - b);\r\n\t\t}\r\n\r\n\t\treturn tickValues;\r\n\t}\r\n\r\n\tgenerateTransitions(duration) {\r\n\t\tconst $$ = this.owner;\r\n\t\tconst axes = $$.axes;\r\n\r\n\t\treturn {\r\n\t\t\taxisX: duration ? axes.x.transition().duration(duration) : axes.x,\r\n\t\t\taxisY: duration ? axes.y.transition().duration(duration) : axes.y,\r\n\t\t\taxisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,\r\n\t\t\taxisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx,\r\n\t\t};\r\n\t}\r\n\r\n\tredraw(transitions, isHidden) {\r\n\t\tconst $$ = this.owner;\r\n\r\n\t\t$$.axes.x.style(\"opacity\", isHidden ? \"0\" : \"1\");\r\n\t\t$$.axes.y.style(\"opacity\", isHidden ? \"0\" : \"1\");\r\n\t\t$$.axes.y2.style(\"opacity\", isHidden ? \"0\" : \"1\");\r\n\t\t$$.axes.subx.style(\"opacity\", isHidden ? \"0\" : \"1\");\r\n\r\n\t\ttransitions.axisX.call($$.xAxis);\r\n\t\ttransitions.axisY.call($$.yAxis);\r\n\t\ttransitions.axisY2.call($$.y2Axis);\r\n\t\ttransitions.axisSubX.call($$.subXAxis);\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// src/axis/Axis.js","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport {\r\n\tscaleLinear as d3ScaleLinear,\r\n\tselect as d3Select\r\n} from \"d3\";\r\nimport {isArray} from \"../internals/util\";\r\n\r\n// Features:\r\n// 1. category axis\r\n// 2. ceil values of translate/x/y to int for half pixel antialiasing\r\n// 3. multiline tick text\r\nlet tickTextCharSize;\r\n\r\nexport default function(params = {}) {\r\n\tlet scale = d3ScaleLinear();\r\n\tlet orient = \"bottom\";\r\n\tconst innerTickSize = 6;\r\n\tconst outerTickSize = params.withOuterTick ? 6 : 0;\r\n\tconst tickPadding = 3;\r\n\tlet tickValues = null;\r\n\tlet tickFormat;\r\n\tlet tickArguments;\r\n\tlet tickOffset = 0;\r\n\tlet tickCulling = true;\r\n\tlet tickCentered;\r\n\tlet transition;\r\n\r\n\tfunction axisX(selection, x) {\r\n\t\tselection.attr(\"transform\", d => `translate(${Math.ceil(x(d) + tickOffset)}, 0)`);\r\n\t}\r\n\r\n\tfunction axisY(selection, y) {\r\n\t\tselection.attr(\"transform\", d => `translate(0,${Math.ceil(y(d))})`);\r\n\t}\r\n\r\n\tfunction scaleExtent(domain) {\r\n\t\tconst start = domain[0];\r\n\t\tconst stop = domain[domain.length - 1];\r\n\r\n\t\treturn start < stop ? [start, stop] : [stop, start];\r\n\t}\r\n\r\n\tfunction generateTicks(scale) {\r\n\t\tconst ticks = [];\r\n\r\n\t\tif (scale.ticks) {\r\n\t\t\treturn scale.ticks(\r\n\t\t\t\t...(tickArguments ? Array.prototype.slice.call(tickArguments) : [])\r\n\t\t\t).map(v => (\r\n\t\t\t\t// round the tick value if is number\r\n\t\t\t\t/(string|number)/.test(typeof v) && !isNaN(v) ?\r\n\t\t\t\t\tMath.round(v * 10) / 10 : v\r\n\t\t\t));\r\n\t\t}\r\n\r\n\t\tconst domain = scale.domain();\r\n\r\n\t\tfor (let i = Math.ceil(domain[0]); i < domain[1]; i++) {\r\n\t\t\tticks.push(i);\r\n\t\t}\r\n\r\n\t\tif (ticks.length > 0 && ticks[0] > 0) {\r\n\t\t\tticks.unshift(ticks[0] - (ticks[1] - ticks[0]));\r\n\t\t}\r\n\r\n\t\treturn ticks;\r\n\t}\r\n\r\n\tfunction copyScale() {\r\n\t\tconst newScale = scale.copy();\r\n\r\n\t\tif (params.isCategory || !newScale.domain().length) {\r\n\t\t\tconst domain = scale.domain();\r\n\r\n\t\t\tnewScale.domain([domain[0], domain[1] - 1]);\r\n\t\t}\r\n\r\n\t\treturn newScale;\r\n\t}\r\n\r\n\tfunction textFormatted(v) {\r\n\t\tconst formatted = tickFormat ? tickFormat(v) : v;\r\n\r\n\t\treturn typeof formatted !== \"undefined\" ? formatted : \"\";\r\n\t}\r\n\r\n\tfunction getSizeFor1Char(tick) {\r\n\t\tif (tickTextCharSize) {\r\n\t\t\treturn tickTextCharSize;\r\n\t\t}\r\n\t\tconst size = {\r\n\t\t\th: 11.5,\r\n\t\t\tw: 5.5,\r\n\t\t};\r\n\r\n\t\ttick.select(\"text\")\r\n\t\t\t.text(textFormatted)\r\n\t\t\t.each(function(d) {\r\n\t\t\t\tconst box = this.getBoundingClientRect();\r\n\t\t\t\tconst text = textFormatted(d);\r\n\t\t\t\tconst h = box.height;\r\n\t\t\t\tconst w = text ? (box.width / text.length) : undefined;\r\n\r\n\t\t\t\tif (h && w) {\r\n\t\t\t\t\tsize.h = h;\r\n\t\t\t\t\tsize.w = w;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.text(\"\");\r\n\r\n\t\ttickTextCharSize = size;\r\n\r\n\t\treturn size;\r\n\t}\r\n\r\n\tfunction transitionise(selection) {\r\n\t\treturn params.withoutTransition ?\r\n\t\t\tselection : selection.transition(transition);\r\n\t}\r\n\r\n\tfunction axis(g) {\r\n\t\tg.each(function() {\r\n\t\t\tconst g = d3Select(this);\r\n\r\n\t\t\taxis.g = g;\r\n\r\n\t\t\tlet scale0 = this.__chart__ || scale;\r\n\t\t\tlet scale1 = copyScale();\r\n\r\n\t\t\tthis.__chart__ = scale1;\r\n\r\n\t\t\t// count of tick data in array\r\n\t\t\tconst ticks = tickValues || generateTicks(scale1);\r\n\r\n\t\t\t// update selection\r\n\t\t\tlet tick = g.selectAll(\".tick\")\r\n\t\t\t\t.data(ticks, scale1);\r\n\r\n\t\t\t// enter selection\r\n\t\t\tconst tickEnter = tick\r\n\t\t\t\t.enter()\r\n\t\t\t\t.insert(\"g\", \".domain\")\r\n\t\t\t\t.attr(\"class\", \"tick\")\r\n\t\t\t\t.style(\"opacity\", \"1\");\r\n\r\n\t\t\t// MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.\r\n\t\t\tconst tickExit = tick.exit().remove();\r\n\r\n\t\t\t// enter + update selection\r\n\t\t\ttick = tickEnter.merge(tick);\r\n\r\n\t\t\tconst tickUpdate = transitionise(tick).style(\"opacity\", \"1\");\r\n\t\t\tlet tickTransform;\r\n\t\t\tlet tickX;\r\n\t\t\tlet tickY;\r\n\r\n\t\t\tconst range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range());\r\n\r\n\t\t\t// update selection - data join\r\n\t\t\tconst path = g.selectAll(\".domain\").data([0]);\r\n\r\n\t\t\t// enter + update selection\r\n\t\t\tconst pathUpdate = path.enter()\r\n\t\t\t\t.append(\"path\")\r\n\t\t\t\t.attr(\"class\", \"domain\")\r\n\t\t\t\t.merge(transitionise(path));\r\n\r\n\t\t\ttickEnter.append(\"line\");\r\n\t\t\ttickEnter.append(\"text\");\r\n\r\n\t\t\tconst lineEnter = tickEnter.select(\"line\");\r\n\t\t\tconst lineUpdate = tickUpdate.select(\"line\");\r\n\t\t\tconst textEnter = tickEnter.select(\"text\");\r\n\t\t\tconst textUpdate = tickUpdate.select(\"text\");\r\n\r\n\t\t\tif (params.isCategory) {\r\n\t\t\t\ttickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);\r\n\t\t\t\ttickX = tickCentered ? 0 : tickOffset;\r\n\t\t\t\ttickY = tickCentered ? tickOffset : 0;\r\n\t\t\t} else {\r\n\t\t\t\ttickX = 0;\r\n\t\t\t\ttickOffset = tickX;\r\n\t\t\t}\r\n\r\n\t\t\tlet tspan;\r\n\t\t\tconst sizeFor1Char = getSizeFor1Char(g.select(\".tick\"));\r\n\t\t\tconst counts = [];\r\n\t\t\tconst tickLength = Math.max(innerTickSize, 0) + tickPadding;\r\n\t\t\tconst isVertical = orient === \"left\" || orient === \"right\";\r\n\r\n\t\t\t// this should be called only when category axis\r\n\t\t\tfunction splitTickText(d, maxWidthValue) {\r\n\t\t\t\tconst tickText = textFormatted(d);\r\n\t\t\t\tconst splitted = [];\r\n\t\t\t\tlet maxWidth = maxWidthValue;\r\n\t\t\t\tlet subtext;\r\n\t\t\t\tlet spaceIndex;\r\n\t\t\t\tlet textWidth;\r\n\r\n\t\t\t\tif (Object.prototype.toString.call(tickText) === \"[object Array]\") {\r\n\t\t\t\t\treturn tickText;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!maxWidth || maxWidth <= 0) {\r\n\t\t\t\t\tmaxWidth = isVertical ?\r\n\t\t\t\t\t\t95 : params.isCategory ?\r\n\t\t\t\t\t\t\t(Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction split(splitted, text) {\r\n\t\t\t\t\tspaceIndex = undefined;\r\n\t\t\t\t\tfor (let i = 1; i < text.length; i++) {\r\n\t\t\t\t\t\tif (text.charAt(i) === \" \") {\r\n\t\t\t\t\t\t\tspaceIndex = i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsubtext = text.substr(0, i + 1);\r\n\t\t\t\t\t\ttextWidth = sizeFor1Char.w * subtext.length;\r\n\r\n\t\t\t\t\t\t// if text width gets over tick width, split by space index or crrent index\r\n\t\t\t\t\t\tif (maxWidth < textWidth) {\r\n\t\t\t\t\t\t\treturn split(\r\n\t\t\t\t\t\t\t\tsplitted.concat(text.substr(0, spaceIndex || i)),\r\n\t\t\t\t\t\t\t\ttext.slice(spaceIndex ? spaceIndex + 1 : i)\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn splitted.concat(text);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn split(splitted, String(tickText));\r\n\t\t\t}\r\n\r\n\t\t\tfunction tspanDy(d, i) {\r\n\t\t\t\tlet dy = sizeFor1Char.h;\r\n\r\n\t\t\t\tif (i === 0) {\r\n\t\t\t\t\tdy = (orient === \"left\" || orient === \"right\") ?\r\n\t\t\t\t\t\t-((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3) :\r\n\t\t\t\t\t\t\".71em\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dy;\r\n\t\t\t}\r\n\r\n\t\t\tfunction tickSize(d) {\r\n\t\t\t\tconst tickPosition = scale(d) + (tickCentered ? 0 : tickOffset);\r\n\r\n\t\t\t\treturn range[0] < tickPosition && tickPosition < range[1] ?\r\n\t\t\t\t\tinnerTickSize : 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst text = tick.select(\"text\");\r\n\r\n\t\t\ttspan = text.selectAll(\"tspan\")\r\n\t\t\t\t.data((d, i) => {\r\n\t\t\t\t\tlet splitted;\r\n\r\n\t\t\t\t\tif (params.tickMultiline) {\r\n\t\t\t\t\t\tsplitted = splitTickText(d, params.tickWidth);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsplitted = isArray(textFormatted(d)) ? textFormatted(d).concat() : [textFormatted(d)];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcounts[i] = splitted.length;\r\n\r\n\t\t\t\t\treturn splitted.map(s => ({\r\n\t\t\t\t\t\tindex: i,\r\n\t\t\t\t\t\tsplitted: s,\r\n\t\t\t\t\t}));\r\n\t\t\t\t});\r\n\r\n\t\t\ttspan.exit().remove();\r\n\r\n\t\t\ttspan = tspan\r\n\t\t\t\t.enter()\r\n\t\t\t\t.append(\"tspan\")\r\n\t\t\t\t.merge(tspan)\r\n\t\t\t\t.text(d => d.splitted);\r\n\r\n\t\t\tconst rotate = params.tickTextRotate;\r\n\r\n\t\t\tfunction textAnchorForText(r) {\r\n\t\t\t\tif (!r) {\r\n\t\t\t\t\treturn \"middle\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn r > 0 ? \"start\" : \"end\";\r\n\t\t\t}\r\n\r\n\t\t\tfunction textTransform(r) {\r\n\t\t\t\treturn r ? `rotate(${r})` : \"\";\r\n\t\t\t}\r\n\r\n\t\t\tfunction dxForText(r) {\r\n\t\t\t\tif (!r) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 8 * Math.sin(Math.PI * (r / 180));\r\n\t\t\t}\r\n\r\n\t\t\tfunction yForText(r) {\r\n\t\t\t\tif (!r) {\r\n\t\t\t\t\treturn tickLength;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 11.5 - 2.5 * (r / 15) * (r > 0 ? 1 : -1);\r\n\t\t\t}\r\n\r\n\t\t\tswitch (orient) {\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\ttickTransform = axisX;\r\n\t\t\t\t\tlineEnter.attr(\"y2\", innerTickSize);\r\n\t\t\t\t\ttextEnter.attr(\"y\", tickLength);\r\n\r\n\t\t\t\t\tlineUpdate.attr(\"x1\", tickX)\r\n\t\t\t\t\t\t.attr(\"x2\", tickX)\r\n\t\t\t\t\t\t.attr(\"y2\", tickSize);\r\n\r\n\t\t\t\t\ttextUpdate.attr(\"x\", 0)\r\n\t\t\t\t\t\t.attr(\"y\", yForText(rotate))\r\n\t\t\t\t\t\t.style(\"text-anchor\", textAnchorForText(rotate))\r\n\t\t\t\t\t\t.attr(\"transform\", textTransform(rotate));\r\n\r\n\t\t\t\t\ttspan.attr(\"x\", 0)\r\n\t\t\t\t\t\t.attr(\"dy\", tspanDy)\r\n\t\t\t\t\t\t.attr(\"dx\", dxForText(rotate));\r\n\r\n\t\t\t\t\tpathUpdate.attr(\"d\", `M${range[0]},${outerTickSize}V0H${range[1]}V${outerTickSize}`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"top\":\r\n\t\t\t\t\t// @TODO: rotated tick text\r\n\t\t\t\t\ttickTransform = axisX;\r\n\t\t\t\t\tlineEnter.attr(\"y2\", -innerTickSize);\r\n\t\t\t\t\ttextEnter.attr(\"y\", -tickLength);\r\n\r\n\t\t\t\t\tlineUpdate\r\n\t\t\t\t\t\t.attr(\"x2\", 0)\r\n\t\t\t\t\t\t.attr(\"y2\", -innerTickSize);\r\n\r\n\t\t\t\t\ttextUpdate\r\n\t\t\t\t\t\t.attr(\"x\", 0)\r\n\t\t\t\t\t\t.attr(\"y\", -tickLength);\r\n\r\n\t\t\t\t\ttext.style(\"text-anchor\", \"middle\");\r\n\r\n\t\t\t\t\ttspan\r\n\t\t\t\t\t\t.attr(\"x\", 0)\r\n\t\t\t\t\t\t.attr(\"dy\", \"0em\");\r\n\r\n\t\t\t\t\tpathUpdate.attr(\"d\", `M${range[0]},${-outerTickSize}V0H${range[1]}V${-outerTickSize}`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"left\":\r\n\t\t\t\t\ttickTransform = axisY;\r\n\t\t\t\t\tlineEnter.attr(\"x2\", -innerTickSize);\r\n\t\t\t\t\ttextEnter.attr(\"x\", -tickLength);\r\n\r\n\t\t\t\t\tlineUpdate.attr(\"x2\", -innerTickSize)\r\n\t\t\t\t\t\t.attr(\"y1\", tickY)\r\n\t\t\t\t\t\t.attr(\"y2\", tickY);\r\n\r\n\t\t\t\t\ttextUpdate\r\n\t\t\t\t\t\t.attr(\"x\", -tickLength)\r\n\t\t\t\t\t\t.attr(\"y\", tickOffset);\r\n\r\n\t\t\t\t\ttext.style(\"text-anchor\", \"end\");\r\n\r\n\t\t\t\t\ttspan\r\n\t\t\t\t\t\t.attr(\"x\", -tickLength)\r\n\t\t\t\t\t\t.attr(\"dy\", tspanDy);\r\n\r\n\t\t\t\t\tpathUpdate.attr(\"d\", `M${-outerTickSize},${range[0]}H0V${range[1]}H${-outerTickSize}`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"right\":\r\n\t\t\t\t\ttickTransform = axisY;\r\n\t\t\t\t\tlineEnter.attr(\"x2\", innerTickSize);\r\n\t\t\t\t\ttextEnter.attr(\"x\", tickLength);\r\n\r\n\t\t\t\t\tlineUpdate\r\n\t\t\t\t\t\t.attr(\"x2\", innerTickSize)\r\n\t\t\t\t\t\t.attr(\"y2\", 0);\r\n\r\n\t\t\t\t\ttextUpdate\r\n\t\t\t\t\t\t.attr(\"x\", tickLength)\r\n\t\t\t\t\t\t.attr(\"y\", 0);\r\n\r\n\t\t\t\t\ttext.style(\"text-anchor\", \"start\");\r\n\r\n\t\t\t\t\ttspan\r\n\t\t\t\t\t\t.attr(\"x\", tickLength)\r\n\t\t\t\t\t\t.attr(\"dy\", tspanDy);\r\n\r\n\t\t\t\t\tpathUpdate.attr(\"d\", `M${outerTickSize},${range[0]}H0V${range[1]}H${outerTickSize}`);\r\n\t\t\t}\r\n\r\n\t\t\tif (scale1.bandwidth) {\r\n\t\t\t\tconst x = scale1;\r\n\t\t\t\tconst dx = x.bandwidth() / 2;\r\n\r\n\t\t\t\tscale0 = function(d) {\r\n\t\t\t\t\treturn x(d) + dx;\r\n\t\t\t\t};\r\n\t\t\t\tscale1 = scale0;\r\n\t\t\t} else if (scale0.bandwidth) {\r\n\t\t\t\tscale0 = scale1;\r\n\t\t\t} else {\r\n\t\t\t\ttickExit.call(tickTransform, scale1);\r\n\t\t\t}\r\n\r\n\t\t\ttickEnter.call(tickTransform, scale0);\r\n\t\t\ttickUpdate.call(tickTransform, scale1);\r\n\t\t});\r\n\t}\r\n\r\n\taxis.scale = function(x) {\r\n\t\tif (!arguments.length) {\r\n\t\t\treturn scale;\r\n\t\t}\r\n\r\n\t\tscale = x;\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.orient = function(x) {\r\n\t\tif (!arguments.length) {\r\n\t\t\treturn orient;\r\n\t\t}\r\n\r\n\t\torient = x in {\r\n\t\t\ttop: 1,\r\n\t\t\tright: 1,\r\n\t\t\tbottom: 1,\r\n\t\t\tleft: 1\r\n\t\t} ? String(x) : \"bottom\";\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.tickFormat = function(format) {\r\n\t\tif (!arguments.length) {\r\n\t\t\treturn tickFormat;\r\n\t\t}\r\n\r\n\t\ttickFormat = format;\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.tickCentered = function(isCentered) {\r\n\t\tif (!arguments.length) {\r\n\t\t\treturn tickCentered;\r\n\t\t}\r\n\r\n\t\ttickCentered = isCentered;\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.tickOffset = function() {\r\n\t\treturn tickOffset;\r\n\t};\r\n\r\n\taxis.tickInterval = function() {\r\n\t\tlet interval;\r\n\r\n\t\tif (params.isCategory) {\r\n\t\t\tinterval = tickOffset * 2;\r\n\t\t} else {\r\n\t\t\tconst length = axis.g.select(\"path.domain\")\r\n\t\t\t\t.node()\r\n\t\t\t\t.getTotalLength() - outerTickSize * 2;\r\n\r\n\t\t\tinterval = length / axis.g.selectAll(\"line\").size();\r\n\t\t}\r\n\r\n\t\treturn interval === Infinity ? 0 : interval;\r\n\t};\r\n\r\n\taxis.ticks = function(...args) {\r\n\t\tif (!args.length) {\r\n\t\t\treturn tickArguments;\r\n\t\t}\r\n\r\n\t\ttickArguments = Array.prototype.slice.call(args);\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.tickCulling = function(culling) {\r\n\t\tif (!arguments.length) {\r\n\t\t\treturn tickCulling;\r\n\t\t}\r\n\r\n\t\ttickCulling = culling;\r\n\r\n\t\treturn axis;\r\n\t};\r\n\r\n\taxis.tickValues = function(x) {\r\n\t\tif (typeof x === \"function\") {\r\n\t\t\ttickValues = function() {\r\n\t\t\t\treturn x(scale.domain());\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tif (!arguments.length) {\r\n\t\t\t\treturn tickValues;\r\n\t\t\t}\r\n\r\n\t\t\ttickValues = x;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\taxis.setTransition = function(t) {\r\n\t\ttransition = t;\r\n\t\treturn this;\r\n\t};\r\n\r\n\treturn axis;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// src/axis/bb.axis.js","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport * as d3 from \"d3\";\r\nimport Chart from \"./internals/Chart\";\r\nimport ChartInternal from \"./internals/ChartInternal\";\r\nimport Axis from \"./axis/Axis\";\r\nimport * as util from \"./internals/util\";\r\nimport \"./scss/main.scss\";\r\n\r\n/**\r\n * @namespace bb\r\n * @version 1.0.1\r\n */\r\nconst bb = {\r\n\t/**\r\n\t * Version information\r\n\t * @property {String} version version\r\n\t * @example\r\n\t * \tbb.version; // \"1.0.0\"\r\n\t * @memberof bb\r\n\t */\r\n\tversion: \"1.0.1\",\r\n\t/**\r\n\t * generate charts\r\n\t * @param {Options} options chart options\r\n\t * @memberof bb\r\n\t * @return {Chart}\r\n\t * @see {@link Options} for different generation options\r\n\t * @see {@link Chart} for different methods API\r\n\t * @example\r\n\t * \r\n\t *
\r\n\t * @example\r\n\t * // generate chart with options\r\n\t * var chart = bb.generate({\r\n\t * \"bindto\": \"#LineChart\"\r\n\t * \"data\": {\r\n\t * \"columns\": [\r\n\t * [\"data1\", 30, 200, 100, 400, 150, 250],\r\n\t * [\"data2\", 50, 20, 10, 40, 15, 25]\r\n\t * ]\r\n\t * }\r\n\t * });\r\n\t *\r\n\t * // call some API\r\n\t * // ex) get the data of 'data1'\r\n\t * chart.data(\"data1\");\r\n\t */\r\n\tgenerate(config) {\r\n\t\treturn new Chart(config);\r\n\t},\r\n\tchart: {\r\n\t\tfn: Chart.prototype,\r\n\t\tinternal: {\r\n\t\t\tfn: ChartInternal.prototype,\r\n\t\t\taxis: {\r\n\t\t\t\tfn: Axis.prototype\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfor (const p in util) {\r\n\t!/^__/.test(p) && (ChartInternal.prototype[p] = util[p]);\r\n}\r\n\r\nrequire(\"./config/config.js\");\r\nrequire(\"./internals/scale.js\");\r\nrequire(\"./internals/domain.js\");\r\nrequire(\"./data/data.js\");\r\nrequire(\"./data/data.convert.js\");\r\nrequire(\"./data/data.load.js\");\r\nrequire(\"./internals/category.js\");\r\nrequire(\"./interactions/interaction.js\");\r\nrequire(\"./internals/size.js\");\r\nrequire(\"./internals/shape.js\");\r\nrequire(\"./internals/shape.line.js\");\r\nrequire(\"./internals/shape.bar.js\");\r\nrequire(\"./internals/text.js\");\r\nrequire(\"./internals/type.js\");\r\nrequire(\"./internals/grid.js\");\r\nrequire(\"./internals/tooltip.js\");\r\nrequire(\"./internals/legend.js\");\r\nrequire(\"./internals/title.js\");\r\nrequire(\"./internals/clip.js\");\r\nrequire(\"./internals/arc.js\");\r\nrequire(\"./internals/region.js\");\r\nrequire(\"./interactions/drag.js\");\r\nrequire(\"./internals/selection.js\");\r\nrequire(\"./interactions/subchart.js\");\r\nrequire(\"./interactions/zoom.js\");\r\nrequire(\"./internals/color.js\");\r\nrequire(\"./internals/format.js\");\r\nrequire(\"./internals/cache.js\");\r\nrequire(\"./internals/class.js\");\r\nrequire(\"./api/api.focus.js\");\r\nrequire(\"./api/api.show.js\");\r\nrequire(\"./api/api.zoom.js\");\r\nrequire(\"./api/api.load.js\");\r\nrequire(\"./api/api.flow.js\");\r\nrequire(\"./api/api.selection.js\");\r\nrequire(\"./api/api.transform.js\");\r\nrequire(\"./api/api.group.js\");\r\nrequire(\"./api/api.grid.js\");\r\nrequire(\"./api/api.region.js\");\r\nrequire(\"./api/api.data.js\");\r\nrequire(\"./api/api.category.js\");\r\nrequire(\"./api/api.color.js\");\r\nrequire(\"./api/api.x.js\");\r\nrequire(\"./api/api.axis.js\");\r\nrequire(\"./api/api.legend.js\");\r\nrequire(\"./api/api.chart.js\");\r\nrequire(\"./api/api.tooltip.js\");\r\nrequire(\"./axis/bb.axis.js\");\r\nrequire(\"./internals/ua.js\");\r\n\r\nexport {bb, d3};\r\n\n\n\n// WEBPACK FOOTER //\n// src/core.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/scss/main.scss\n// module id = 10\n// module chunks = 0 1","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\nimport Options from \"./Options\";\r\nimport ChartInternal from \"../internals/ChartInternal\";\r\nimport {isDefined, merge, extend} from \"../internals/util\";\r\n\r\nextend(ChartInternal.prototype, {\r\n\tgetOptions() {\r\n\t\tconst config = new Options();\r\n\r\n\t\treturn merge(\r\n\t\t\tconfig.value,\r\n\t\t\tthis.additionalConfig\r\n\t\t);\r\n\t},\r\n\r\n\tadditionalConfig: {},\r\n\r\n\tloadConfig(config) {\r\n\t\tconst thisConfig = this.config;\r\n\t\tlet target;\r\n\t\tlet keys;\r\n\t\tlet read;\r\n\r\n\t\tfunction find() {\r\n\t\t\tconst key = keys.shift();\r\n\r\n\t\t\tif (key && target && typeof target === \"object\" && key in target) {\r\n\t\t\t\ttarget = target[key];\r\n\t\t\t\treturn find();\r\n\t\t\t} else if (!key) {\r\n\t\t\t\treturn target;\r\n\t\t\t} else {\r\n\t\t\t\treturn undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tObject.keys(thisConfig).forEach(key => {\r\n\t\t\ttarget = config;\r\n\t\t\tkeys = key.split(\"_\");\r\n\t\t\tread = find();\r\n\r\n\t\t\tif (isDefined(read)) {\r\n\t\t\t\tthisConfig[key] = read;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/config/config.js","/**\r\n * Copyright (c) 2017 NAVER Corp.\r\n * billboard.js project is licensed under the MIT license\r\n */\r\n/**\r\n * Class to set options on generating chart.\r\n * - It's instantiated internally, not exposed for public.\r\n * @class Options\r\n * @see {@link bb.generate} to use these options on generating the chart\r\n */\r\nexport default class Options {\r\n\tconstructor() {\r\n\t\tthis.value = {\r\n\t\t\t/**\r\n\t\t\t * bindto The CSS selector or the element which the chart will be set to. D3 selection object can be specified. If other chart is set already, it will be replaced with the new one (only one chart can be set in one element).${name} | ` +\r\n\t\t\t\t\t`${value} | ` +\r\n\t\t\t\t\t`