@spinnaker/kayenta 2.0.0 → 2.1.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"semioticGraph-2e43ef84.js","sources":["../../node_modules/element-resize-detector/src/collection-utils.js","../../node_modules/element-resize-detector/src/browser-detector.js","../../node_modules/batch-processor/src/utils.js","../../node_modules/batch-processor/src/batch-processor.js","../../node_modules/element-resize-detector/src/state-handler.js","../../node_modules/element-resize-detector/src/detection-strategy/scroll.js","../../node_modules/element-resize-detector/src/element-resize-detector.js","../../node_modules/react-container-dimensions/node_modules/invariant/invariant.js","../../node_modules/react-container-dimensions/lib/index.js","../../node_modules/element-resize-detector/src/id-generator.js","../../node_modules/element-resize-detector/src/id-handler.js","../../node_modules/element-resize-detector/src/reporter.js","../../node_modules/element-resize-detector/src/listener-handler.js","../../node_modules/element-resize-detector/src/element-utils.js","../../node_modules/element-resize-detector/src/detection-strategy/object.js","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/array.js","../../node_modules/d3-array/src/constant.js","../../node_modules/d3-array/src/identity.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/threshold/sturges.js","../../node_modules/d3-array/src/histogram.js","../../node_modules/d3-array/src/range.js","../../node_modules/labella/dist/labella.min.js","../../../src/kayenta/report/detail/graph/semiotic/chartHeader.tsx","../../../src/kayenta/report/detail/graph/semiotic/config.ts","../../../src/kayenta/report/detail/graph/semiotic/chartLegend.tsx","../../node_modules/react-tooltip/dist/decorators/staticMethods.js","../../../src/kayenta/report/detail/graph/semiotic/circleIcon.tsx","../../node_modules/react-tooltip/dist/constant.js","../../node_modules/react-tooltip/dist/decorators/windowListener.js","../../node_modules/react-tooltip/dist/decorators/customEvent.js","../../node_modules/react-tooltip/dist/decorators/isCapture.js","../../node_modules/react-tooltip/dist/decorators/getEffect.js","../../node_modules/react-tooltip/dist/decorators/trackRemoval.js","../../node_modules/react-tooltip/dist/utils/getPosition.js","../../node_modules/react-tooltip/dist/utils/getTipContent.js","../../node_modules/react-tooltip/dist/utils/aria.js","../../node_modules/react-tooltip/dist/index.js","../../node_modules/react-tooltip/dist/utils/nodeListToArray.js","../../node_modules/react-tooltip/dist/style.js","../../../src/kayenta/report/detail/graph/semiotic/tooltip.tsx","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-scale/node_modules/d3-array/src/ascending.js","../../node_modules/d3-scale/node_modules/d3-array/src/bisector.js","../../node_modules/d3-scale/node_modules/d3-array/src/bisect.js","../../node_modules/d3-scale/node_modules/d3-array/src/ticks.js","../../node_modules/d3-collection/src/map.js","../../node_modules/d3-collection/src/set.js","../../node_modules/d3-scale/src/array.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-color/src/math.js","../../node_modules/d3-color/src/cubehelix.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/cubehelix.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-time/src/interval.js","../../node_modules/d3-time/src/millisecond.js","../../node_modules/d3-time/src/duration.js","../../node_modules/d3-time/src/second.js","../../node_modules/d3-time/src/day.js","../../node_modules/d3-time/src/week.js","../../node_modules/d3-time/src/year.js","../../node_modules/d3-time/src/utcMinute.js","../../node_modules/d3-time/src/utcHour.js","../../node_modules/d3-time/src/utcDay.js","../../node_modules/d3-time/src/utcWeek.js","../../node_modules/d3-time/src/utcMonth.js","../../node_modules/d3-time/src/utcYear.js","../../node_modules/d3-time-format/src/locale.js","../../node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/d3-scale/src/time.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/utcTime.js","../../node_modules/d3-scale/src/colors.js","../../node_modules/d3-scale/src/viridis.js","../../node_modules/d3-scale/src/category10.js","../../node_modules/d3-scale/src/category20b.js","../../node_modules/d3-scale/src/category20c.js","../../node_modules/d3-scale/src/category20.js","../../node_modules/d3-scale/src/cubehelix.js","../../node_modules/d3-scale/src/rainbow.js","../../../src/kayenta/report/detail/graph/semiotic/utils.ts","../../../src/kayenta/report/detail/graph/semiotic/boxplot.tsx","../../../src/kayenta/report/detail/graph/semiotic/histogram.tsx","../../../src/kayenta/report/detail/graph/semiotic/noValidDataSign.tsx","../../node_modules/d3-shape/src/curve/step.js","../../../src/kayenta/report/detail/graph/semiotic/customAxisTickLabel.tsx","../../../src/kayenta/report/detail/graph/semiotic/secondaryTSXAxis.tsx","../../../src/kayenta/report/detail/graph/semiotic/differenceArea.tsx","../../../src/kayenta/report/detail/graph/semiotic/timeSeries.tsx","../../../src/kayenta/report/detail/graph/semiotic/semioticGraph.tsx"],"sourcesContent":["\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n for(var i = 0; i < collection.length; i++) {\n var result = callback(collection[i]);\n if(result) {\n return result;\n }\n }\n};\n","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n function isAnyIeVersion() {\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n }\n\n if(!isAnyIeVersion()) {\n return false;\n }\n\n if(!version) {\n return true;\n }\n\n //Shamelessly stolen from https://gist.github.com/padolsey/527683\n var ieVersion = (function(){\n var undef,\n v = 3,\n div = document.createElement(\"div\"),\n all = div.getElementsByTagName(\"i\");\n\n do {\n div.innerHTML = \"<!--[if gt IE \" + (++v) + \"]><i></i><![endif]-->\";\n }\n while (all[0]);\n\n return v > 4 ? v : undef;\n }());\n\n return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n return !!window.opera;\n};\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n options = options || {};\n var reporter = options.reporter;\n var asyncProcess = utils.getOption(options, \"async\", true);\n var autoProcess = utils.getOption(options, \"auto\", true);\n\n if(autoProcess && !asyncProcess) {\n reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n asyncProcess = true;\n }\n\n var batch = Batch();\n var asyncFrameHandler;\n var isProcessing = false;\n\n function addFunction(level, fn) {\n if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n // This needs to be done before, since we're checking the size of the batch to be 0.\n processBatchAsync();\n }\n\n batch.add(level, fn);\n }\n\n function processBatch() {\n // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n isProcessing = true;\n while (batch.size()) {\n var processingBatch = batch;\n batch = Batch();\n processingBatch.process();\n }\n isProcessing = false;\n }\n\n function forceProcessBatch(localAsyncProcess) {\n if (isProcessing) {\n return;\n }\n\n if(localAsyncProcess === undefined) {\n localAsyncProcess = asyncProcess;\n }\n\n if(asyncFrameHandler) {\n cancelFrame(asyncFrameHandler);\n asyncFrameHandler = null;\n }\n\n if(localAsyncProcess) {\n processBatchAsync();\n } else {\n processBatch();\n }\n }\n\n function processBatchAsync() {\n asyncFrameHandler = requestFrame(processBatch);\n }\n\n function clearBatch() {\n batch = {};\n batchSize = 0;\n topLevel = 0;\n bottomLevel = 0;\n }\n\n function cancelFrame(listener) {\n // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n var cancel = clearTimeout;\n return cancel(listener);\n }\n\n function requestFrame(callback) {\n // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n var raf = function(fn) { return setTimeout(fn, 0); };\n return raf(callback);\n }\n\n return {\n add: addFunction,\n force: forceProcessBatch\n };\n};\n\nfunction Batch() {\n var batch = {};\n var size = 0;\n var topLevel = 0;\n var bottomLevel = 0;\n\n function add(level, fn) {\n if(!fn) {\n fn = level;\n level = 0;\n }\n\n if(level > topLevel) {\n topLevel = level;\n } else if(level < bottomLevel) {\n bottomLevel = level;\n }\n\n if(!batch[level]) {\n batch[level] = [];\n }\n\n batch[level].push(fn);\n size++;\n }\n\n function process() {\n for(var level = bottomLevel; level <= topLevel; level++) {\n var fns = batch[level];\n\n for(var i = 0; i < fns.length; i++) {\n var fn = fns[i];\n fn();\n }\n }\n }\n\n function getSize() {\n return size;\n }\n\n return {\n add: add,\n process: process,\n size: getSize\n };\n}\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n element[prop] = {};\n return getState(element);\n}\n\nfunction getState(element) {\n return element[prop];\n}\n\nfunction cleanState(element) {\n delete element[prop];\n}\n\nmodule.exports = {\n initState: initState,\n getState: getState,\n cleanState: cleanState\n};\n","/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n var hasState = options.stateHandler.hasState;\n var idHandler = options.idHandler;\n\n if (!batchProcessor) {\n throw new Error(\"Missing required dependency: batchProcessor\");\n }\n\n if (!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n //TODO: Could this perhaps be done at installation time?\n var scrollbarSizes = getScrollbarSizes();\n\n // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n var styleId = \"erd_scroll_detection_scrollbar_style\";\n var detectionContainerClass = \"erd_scroll_detection_container\";\n injectScrollStyle(styleId, detectionContainerClass);\n\n function getScrollbarSizes() {\n var width = 500;\n var height = 500;\n\n var child = document.createElement(\"div\");\n child.style.cssText = \"position: absolute; width: \" + width*2 + \"px; height: \" + height*2 + \"px; visibility: hidden; margin: 0; padding: 0;\";\n\n var container = document.createElement(\"div\");\n container.style.cssText = \"position: absolute; width: \" + width + \"px; height: \" + height + \"px; overflow: scroll; visibility: none; top: \" + -width*3 + \"px; left: \" + -height*3 + \"px; visibility: hidden; margin: 0; padding: 0;\";\n\n container.appendChild(child);\n\n document.body.insertBefore(container, document.body.firstChild);\n\n var widthSize = width - container.clientWidth;\n var heightSize = height - container.clientHeight;\n\n document.body.removeChild(container);\n\n return {\n width: widthSize,\n height: heightSize\n };\n }\n\n function injectScrollStyle(styleId, containerClass) {\n function injectStyle(style, method) {\n method = method || function (element) {\n document.head.appendChild(element);\n };\n\n var styleElement = document.createElement(\"style\");\n styleElement.innerHTML = style;\n styleElement.id = styleId;\n method(styleElement);\n return styleElement;\n }\n\n if (!document.getElementById(styleId)) {\n var containerAnimationClass = containerClass + \"_animation\";\n var containerAnimationActiveClass = containerClass + \"_animation_active\";\n var style = \"/* Created by the element-resize-detector library. */\\n\";\n style += \".\" + containerClass + \" > div::-webkit-scrollbar { display: none; }\\n\\n\";\n style += \".\" + containerAnimationActiveClass + \" { -webkit-animation-duration: 0.1s; animation-duration: 0.1s; -webkit-animation-name: \" + containerAnimationClass + \"; animation-name: \" + containerAnimationClass + \"; }\\n\";\n style += \"@-webkit-keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n style += \"@keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n injectStyle(style);\n }\n }\n\n function addAnimationClass(element) {\n element.className += \" \" + detectionContainerClass + \"_animation_active\";\n }\n\n function addEvent(el, name, cb) {\n if (el.addEventListener) {\n el.addEventListener(name, cb);\n } else if(el.attachEvent) {\n el.attachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n }\n }\n\n function removeEvent(el, name, cb) {\n if (el.removeEventListener) {\n el.removeEventListener(name, cb);\n } else if(el.detachEvent) {\n el.detachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n }\n }\n\n function getExpandElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n }\n\n function getShrinkElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n var listeners = getState(element).listeners;\n\n if (!listeners.push) {\n throw new Error(\"Cannot add listener to an element that is not detectable.\");\n }\n\n getState(element).listeners.push(listener);\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n\n function debug() {\n if (options.debug) {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(idHandler.get(element), \"Scroll: \");\n if (reporter.log.apply) {\n reporter.log.apply(null, args);\n } else {\n for (var i = 0; i < args.length; i++) {\n reporter.log(args[i]);\n }\n }\n }\n }\n\n function isDetached(element) {\n function isInDocument(element) {\n return element === element.ownerDocument.body || element.ownerDocument.body.contains(element);\n }\n\n if (!isInDocument(element)) {\n return true;\n }\n\n // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n if (window.getComputedStyle(element) === null) {\n return true;\n }\n\n return false;\n }\n\n function isUnrendered(element) {\n // Check the absolute positioned container since the top level container is display: inline.\n var container = getState(element).container.childNodes[0];\n var style = window.getComputedStyle(container);\n return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n }\n\n function getStyle() {\n // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n var elementStyle = window.getComputedStyle(element);\n var style = {};\n style.position = elementStyle.position;\n style.width = element.offsetWidth;\n style.height = element.offsetHeight;\n style.top = elementStyle.top;\n style.right = elementStyle.right;\n style.bottom = elementStyle.bottom;\n style.left = elementStyle.left;\n style.widthCSS = elementStyle.width;\n style.heightCSS = elementStyle.height;\n return style;\n }\n\n function storeStartSize() {\n var style = getStyle();\n getState(element).startSize = {\n width: style.width,\n height: style.height\n };\n debug(\"Element start size\", getState(element).startSize);\n }\n\n function initListeners() {\n getState(element).listeners = [];\n }\n\n function storeStyle() {\n debug(\"storeStyle invoked.\");\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getStyle();\n getState(element).style = style;\n }\n\n function storeCurrentSize(element, width, height) {\n getState(element).lastWidth = width;\n getState(element).lastHeight = height;\n }\n\n function getExpandChildElement(element) {\n return getExpandElement(element).childNodes[0];\n }\n\n function getWidthOffset() {\n return 2 * scrollbarSizes.width + 1;\n }\n\n function getHeightOffset() {\n return 2 * scrollbarSizes.height + 1;\n }\n\n function getExpandWidth(width) {\n return width + 10 + getWidthOffset();\n }\n\n function getExpandHeight(height) {\n return height + 10 + getHeightOffset();\n }\n\n function getShrinkWidth(width) {\n return width * 2 + getWidthOffset();\n }\n\n function getShrinkHeight(height) {\n return height * 2 + getHeightOffset();\n }\n\n function positionScrollbars(element, width, height) {\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n var shrinkWidth = getShrinkWidth(width);\n var shrinkHeight = getShrinkHeight(height);\n expand.scrollLeft = expandWidth;\n expand.scrollTop = expandHeight;\n shrink.scrollLeft = shrinkWidth;\n shrink.scrollTop = shrinkHeight;\n }\n\n function injectContainerElement() {\n var container = getState(element).container;\n\n if (!container) {\n container = document.createElement(\"div\");\n container.className = detectionContainerClass;\n container.style.cssText = \"visibility: hidden; display: inline; width: 0px; height: 0px; z-index: -1; overflow: hidden; margin: 0; padding: 0;\";\n getState(element).container = container;\n addAnimationClass(container);\n element.appendChild(container);\n\n var onAnimationStart = function () {\n getState(element).onRendered && getState(element).onRendered();\n };\n\n addEvent(container, \"animationstart\", onAnimationStart);\n\n // Store the event handler here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onAnimationStart = onAnimationStart;\n }\n\n return container;\n }\n\n function injectScrollElements() {\n function alterPositionStyles() {\n var style = getState(element).style;\n\n if(style.position === \"static\") {\n element.style.position = \"relative\";\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function getLeftTopBottomRightCssText(left, top, bottom, right) {\n left = (!left ? \"0\" : (left + \"px\"));\n top = (!top ? \"0\" : (top + \"px\"));\n bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n right = (!right ? \"0\" : (right + \"px\"));\n\n return \"left: \" + left + \"; top: \" + top + \"; right: \" + right + \"; bottom: \" + bottom + \";\";\n }\n\n debug(\"Injecting elements\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n alterPositionStyles();\n\n var rootContainer = getState(element).container;\n\n if (!rootContainer) {\n rootContainer = injectContainerElement();\n }\n\n // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n // the targeted element.\n // When the bug is resolved, \"containerContainer\" may be removed.\n\n // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n var scrollbarWidth = scrollbarSizes.width;\n var scrollbarHeight = scrollbarSizes.height;\n var containerContainerStyle = \"position: absolute; flex: none; overflow: hidden; z-index: -1; visibility: hidden; width: 100%; height: 100%; left: 0px; top: 0px;\";\n var containerStyle = \"position: absolute; flex: none; overflow: hidden; z-index: -1; visibility: hidden; \" + getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth);\n var expandStyle = \"position: absolute; flex: none; overflow: scroll; z-index: -1; visibility: hidden; width: 100%; height: 100%;\";\n var shrinkStyle = \"position: absolute; flex: none; overflow: scroll; z-index: -1; visibility: hidden; width: 100%; height: 100%;\";\n var expandChildStyle = \"position: absolute; left: 0; top: 0;\";\n var shrinkChildStyle = \"position: absolute; width: 200%; height: 200%;\";\n\n var containerContainer = document.createElement(\"div\");\n var container = document.createElement(\"div\");\n var expand = document.createElement(\"div\");\n var expandChild = document.createElement(\"div\");\n var shrink = document.createElement(\"div\");\n var shrinkChild = document.createElement(\"div\");\n\n // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n containerContainer.dir = \"ltr\";\n\n containerContainer.style.cssText = containerContainerStyle;\n containerContainer.className = detectionContainerClass;\n container.className = detectionContainerClass;\n container.style.cssText = containerStyle;\n expand.style.cssText = expandStyle;\n expandChild.style.cssText = expandChildStyle;\n shrink.style.cssText = shrinkStyle;\n shrinkChild.style.cssText = shrinkChildStyle;\n\n expand.appendChild(expandChild);\n shrink.appendChild(shrinkChild);\n container.appendChild(expand);\n container.appendChild(shrink);\n containerContainer.appendChild(container);\n rootContainer.appendChild(containerContainer);\n\n function onExpandScroll() {\n getState(element).onExpand && getState(element).onExpand();\n }\n\n function onShrinkScroll() {\n getState(element).onShrink && getState(element).onShrink();\n }\n\n addEvent(expand, \"scroll\", onExpandScroll);\n addEvent(shrink, \"scroll\", onShrinkScroll);\n\n // Store the event handlers here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onExpandScroll = onExpandScroll;\n getState(element).onShrinkScroll = onShrinkScroll;\n }\n\n function registerListenersAndPositionElements() {\n function updateChildSizes(element, width, height) {\n var expandChild = getExpandChildElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n expandChild.style.width = expandWidth + \"px\";\n expandChild.style.height = expandHeight + \"px\";\n }\n\n function updateDetectorElements(done) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n debug(\"Storing current size\", width, height);\n\n // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n // Otherwise the if-check in handleScroll is useless.\n storeCurrentSize(element, width, height);\n\n // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n batchProcessor.add(0, function performUpdateChildSizes() {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n if (options.debug) {\n var w = element.offsetWidth;\n var h = element.offsetHeight;\n\n if (w !== width || h !== height) {\n reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n }\n }\n\n updateChildSizes(element, width, height);\n });\n\n batchProcessor.add(1, function updateScrollbars() {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n positionScrollbars(element, width, height);\n });\n\n if (done) {\n batchProcessor.add(2, function () {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n done();\n });\n }\n }\n\n function areElementsInjected() {\n return !!getState(element).container;\n }\n\n function notifyListenersIfNeeded() {\n function isFirstNotify() {\n return getState(element).lastNotifiedWidth === undefined;\n }\n\n debug(\"notifyListenersIfNeeded invoked\");\n\n var state = getState(element);\n\n // Don't notify the if the current size is the start size, and this is the first notification.\n if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n }\n\n // Don't notify if the size already has been notified.\n if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n return debug(\"Not notifying: Size already notified\");\n }\n\n\n debug(\"Current size not notified, notifying...\");\n state.lastNotifiedWidth = state.lastWidth;\n state.lastNotifiedHeight = state.lastHeight;\n forEach(getState(element).listeners, function (listener) {\n listener(element);\n });\n }\n\n function handleRender() {\n debug(\"startanimation triggered.\");\n\n if (isUnrendered(element)) {\n debug(\"Ignoring since element is still unrendered...\");\n return;\n }\n\n debug(\"Element rendered.\");\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n debug(\"Scrollbars out of sync. Updating detector elements...\");\n updateDetectorElements(notifyListenersIfNeeded);\n }\n }\n\n function handleScroll() {\n debug(\"Scroll detected.\");\n\n if (isUnrendered(element)) {\n // Element is still unrendered. Skip this scroll event.\n debug(\"Scroll event fired while unrendered. Ignoring...\");\n return;\n }\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (width !== getState(element).lastWidth || height !== getState(element).lastHeight) {\n debug(\"Element size changed.\");\n updateDetectorElements(notifyListenersIfNeeded);\n } else {\n debug(\"Element size has not changed (\" + width + \"x\" + height + \").\");\n }\n }\n\n debug(\"registerListenersAndPositionElements invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n getState(element).onRendered = handleRender;\n getState(element).onExpand = handleScroll;\n getState(element).onShrink = handleScroll;\n\n var style = getState(element).style;\n updateChildSizes(element, style.width, style.height);\n }\n\n function finalizeDomMutation() {\n debug(\"finalizeDomMutation invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getState(element).style;\n storeCurrentSize(element, style.width, style.height);\n positionScrollbars(element, style.width, style.height);\n }\n\n function ready() {\n callback(element);\n }\n\n function install() {\n debug(\"Installing...\");\n initListeners();\n storeStartSize();\n\n batchProcessor.add(0, storeStyle);\n batchProcessor.add(1, injectScrollElements);\n batchProcessor.add(2, registerListenersAndPositionElements);\n batchProcessor.add(3, finalizeDomMutation);\n batchProcessor.add(4, ready);\n }\n\n debug(\"Making detectable...\");\n\n if (isDetached(element)) {\n debug(\"Element is detached\");\n\n injectContainerElement();\n\n debug(\"Waiting until element is attached...\");\n\n getState(element).onRendered = function () {\n debug(\"Element is now attached\");\n install();\n };\n } else {\n install();\n }\n }\n\n function uninstall(element) {\n var state = getState(element);\n\n if (!state) {\n // Uninstall has been called on a non-erd element.\n return;\n }\n\n // Uninstall may have been called in the following scenarios:\n // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n // So to be on the safe side, let's check for each thing before removing.\n\n // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n state.container && element.removeChild(state.container);\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","\"use strict\";\n\nvar forEach = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker = require(\"./element-utils\");\nvar listenerHandlerMaker = require(\"./listener-handler\");\nvar idGeneratorMaker = require(\"./id-generator\");\nvar idHandlerMaker = require(\"./id-handler\");\nvar reporterMaker = require(\"./reporter\");\nvar browserDetector = require(\"./browser-detector\");\nvar batchProcessorMaker = require(\"batch-processor\");\nvar stateHandler = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n if (!Array.isArray(collection)) {\n var array = [];\n forEach(collection, function (obj) {\n array.push(obj);\n });\n return array;\n } else {\n return collection;\n }\n}\n\nfunction isElement(obj) {\n return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd Determines if listeners should be called when they are getting added.\n Default is true. If true, the listener is guaranteed to be called when it has been added.\n If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n If not provided, a default id handler will be used.\n * @property {reporter} reporter A custom reporter that handles reporting logs, warnings and errors.\n If not provided, a default id handler will be used.\n If set to false, then nothing will be reported.\n * @property {boolean} debug If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n options = options || {};\n\n //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var idHandler;\n\n if (options.idHandler) {\n // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n idHandler = {\n get: function (element) { return options.idHandler.get(element, true); },\n set: options.idHandler.set\n };\n } else {\n var idGenerator = idGeneratorMaker();\n var defaultIdHandler = idHandlerMaker({\n idGenerator: idGenerator,\n stateHandler: stateHandler\n });\n idHandler = defaultIdHandler;\n }\n\n //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var reporter = options.reporter;\n\n if(!reporter) {\n //If options.reporter is false, then the reporter should be quiet.\n var quiet = reporter === false;\n reporter = reporterMaker(quiet);\n }\n\n //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n //Options to be used as default for the listenTo function.\n var globalOptions = {};\n globalOptions.callOnAdd = !!getOption(options, \"callOnAdd\", true);\n globalOptions.debug = !!getOption(options, \"debug\", false);\n\n var eventListenerHandler = listenerHandlerMaker(idHandler);\n var elementUtils = elementUtilsMaker({\n stateHandler: stateHandler\n });\n\n //The detection strategy to be used.\n var detectionStrategy;\n var desiredStrategy = getOption(options, \"strategy\", \"object\");\n var strategyOptions = {\n reporter: reporter,\n batchProcessor: batchProcessor,\n stateHandler: stateHandler,\n idHandler: idHandler\n };\n\n if(desiredStrategy === \"scroll\") {\n if (browserDetector.isLegacyOpera()) {\n reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n desiredStrategy = \"object\";\n } else if (browserDetector.isIE(9)) {\n reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n desiredStrategy = \"object\";\n }\n }\n\n if(desiredStrategy === \"scroll\") {\n detectionStrategy = scrollStrategyMaker(strategyOptions);\n } else if(desiredStrategy === \"object\") {\n detectionStrategy = objectStrategyMaker(strategyOptions);\n } else {\n throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n }\n\n //Calls can be made to listenTo with elements that are still being installed.\n //Also, same elements can occur in the elements list in the listenTo function.\n //With this map, the ready callbacks can be synchronized between the calls\n //so that the ready callback can always be called when an element is ready - even if\n //it wasn't installed from the function itself.\n var onReadyCallbacks = {};\n\n /**\n * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n * @public\n * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n * @param {function} listener The callback to be executed for each resize event for each element.\n */\n function listenTo(options, elements, listener) {\n function onResizeCallback(element) {\n var listeners = eventListenerHandler.get(element);\n forEach(listeners, function callListenerProxy(listener) {\n listener(element);\n });\n }\n\n function addListener(callOnAdd, element, listener) {\n eventListenerHandler.add(element, listener);\n\n if(callOnAdd) {\n listener(element);\n }\n }\n\n //Options object may be omitted.\n if(!listener) {\n listener = elements;\n elements = options;\n options = {};\n }\n\n if(!elements) {\n throw new Error(\"At least one element required.\");\n }\n\n if(!listener) {\n throw new Error(\"Listener required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n var elementsReady = 0;\n\n var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n var debug = getOption(options, \"debug\", globalOptions.debug);\n\n forEach(elements, function attachListenerToElement(element) {\n if (!stateHandler.getState(element)) {\n stateHandler.initState(element);\n idHandler.set(element);\n }\n\n var id = idHandler.get(element);\n\n debug && reporter.log(\"Attaching listener to element\", id, element);\n\n if(!elementUtils.isDetectable(element)) {\n debug && reporter.log(id, \"Not detectable.\");\n if(elementUtils.isBusy(element)) {\n debug && reporter.log(id, \"System busy making it detectable\");\n\n //The element is being prepared to be detectable. Do not make it detectable.\n //Just add the listener, because the element will soon be detectable.\n addListener(callOnAdd, element, listener);\n onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n onReadyCallbacks[id].push(function onReady() {\n elementsReady++;\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n return;\n }\n\n debug && reporter.log(id, \"Making detectable...\");\n //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n elementUtils.markBusy(element, true);\n return detectionStrategy.makeDetectable({ debug: debug }, element, function onElementDetectable(element) {\n debug && reporter.log(id, \"onElementDetectable\");\n\n if (stateHandler.getState(element)) {\n elementUtils.markAsDetectable(element);\n elementUtils.markBusy(element, false);\n detectionStrategy.addListener(element, onResizeCallback);\n addListener(callOnAdd, element, listener);\n\n // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n // so that a resize event may be emitted.\n // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n // Also, check the state existance before since the element may have been uninstalled in the installation process.\n var state = stateHandler.getState(element);\n if (state && state.startSize) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (state.startSize.width !== width || state.startSize.height !== height) {\n onResizeCallback(element);\n }\n }\n\n if(onReadyCallbacks[id]) {\n forEach(onReadyCallbacks[id], function(callback) {\n callback();\n });\n }\n } else {\n // The element has been unisntalled before being detectable.\n debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n }\n\n delete onReadyCallbacks[id];\n\n elementsReady++;\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n }\n\n debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n //The element has been prepared to be detectable and is ready to be listened to.\n addListener(callOnAdd, element, listener);\n elementsReady++;\n });\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n }\n\n function uninstall(elements) {\n if(!elements) {\n return reporter.error(\"At least one element is required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n forEach(elements, function (element) {\n eventListenerHandler.removeAllListeners(element);\n detectionStrategy.uninstall(element);\n stateHandler.cleanState(element);\n });\n }\n\n return {\n listenTo: listenTo,\n removeListener: eventListenerHandler.removeListener,\n removeAllListeners: eventListenerHandler.removeAllListeners,\n uninstall: uninstall\n };\n};\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _elementResizeDetector = require('element-resize-detector');\n\nvar _elementResizeDetector2 = _interopRequireDefault(_elementResizeDetector);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ContainerDimensions = function (_Component) {\n _inherits(ContainerDimensions, _Component);\n\n _createClass(ContainerDimensions, null, [{\n key: 'getDomNodeDimensions',\n value: function getDomNodeDimensions(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n top = _node$getBoundingClie.top,\n right = _node$getBoundingClie.right,\n bottom = _node$getBoundingClie.bottom,\n left = _node$getBoundingClie.left,\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n\n return { top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n }\n }]);\n\n function ContainerDimensions() {\n _classCallCheck(this, ContainerDimensions);\n\n var _this = _possibleConstructorReturn(this, (ContainerDimensions.__proto__ || Object.getPrototypeOf(ContainerDimensions)).call(this));\n\n _this.state = {\n initiated: false\n };\n _this.onResize = _this.onResize.bind(_this);\n return _this;\n }\n\n _createClass(ContainerDimensions, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.parentNode = _reactDom2.default.findDOMNode(this).parentNode;\n this.elementResizeDetector = (0, _elementResizeDetector2.default)({\n strategy: 'scroll',\n callOnAdd: false\n });\n this.elementResizeDetector.listenTo(this.parentNode, this.onResize);\n this.componentIsMounted = true;\n this.onResize();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.componentIsMounted = false;\n this.elementResizeDetector.uninstall(this.parentNode);\n }\n }, {\n key: 'onResize',\n value: function onResize() {\n var clientRect = ContainerDimensions.getDomNodeDimensions(this.parentNode);\n if (this.componentIsMounted) {\n this.setState(_extends({\n initiated: true\n }, clientRect));\n }\n }\n }, {\n key: 'render',\n value: function render() {\n (0, _invariant2.default)(this.props.children, 'Expected children to be one of function or React.Element');\n\n if (!this.state.initiated) {\n return _react2.default.createElement('div', null);\n }\n if (typeof this.props.children === 'function') {\n var renderedChildren = this.props.children(this.state);\n return renderedChildren && _react.Children.only(renderedChildren);\n }\n return _react.Children.only(_react2.default.cloneElement(this.props.children, this.state));\n }\n }]);\n\n return ContainerDimensions;\n}(_react.Component);\n\nContainerDimensions.propTypes = {\n children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.func]).isRequired\n};\nexports.default = ContainerDimensions;","\"use strict\";\n\nmodule.exports = function() {\n var idCount = 1;\n\n /**\n * Generates a new unique id in the context.\n * @public\n * @returns {number} A unique id in the context.\n */\n function generate() {\n return idCount++;\n }\n\n return {\n generate: generate\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var idGenerator = options.idGenerator;\n var getState = options.stateHandler.getState;\n\n /**\n * Gets the resize detector id of the element.\n * @public\n * @param {element} element The target element to get the id of.\n * @returns {string|number|null} The id of the element. Null if it has no id.\n */\n function getId(element) {\n var state = getState(element);\n\n if (state && state.id !== undefined) {\n return state.id;\n }\n\n return null;\n }\n\n /**\n * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n * @public\n * @param {element} element The target element to set the id of.\n * @returns {string|number|null} The id of the element.\n */\n function setId(element) {\n var state = getState(element);\n\n if (!state) {\n throw new Error(\"setId required the element to have a resize detection state.\");\n }\n\n var id = idGenerator.generate();\n\n state.id = id;\n\n return id;\n }\n\n return {\n get: getId,\n set: setId\n };\n};\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n function noop() {\n //Does nothing.\n }\n\n var reporter = {\n log: noop,\n warn: noop,\n error: noop\n };\n\n if(!quiet && window.console) {\n var attachFunction = function(reporter, name) {\n //The proxy is needed to be able to call the method with the console context,\n //since we cannot use bind.\n reporter[name] = function reporterProxy() {\n var f = console[name];\n if (f.apply) { //IE9 does not support console.log.apply :)\n f.apply(console, arguments);\n } else {\n for (var i = 0; i < arguments.length; i++) {\n f(arguments[i]);\n }\n }\n };\n };\n\n attachFunction(reporter, \"log\");\n attachFunction(reporter, \"warn\");\n attachFunction(reporter, \"error\");\n }\n\n return reporter;\n};","\"use strict\";\n\nmodule.exports = function(idHandler) {\n var eventListeners = {};\n\n /**\n * Gets all listeners for the given element.\n * @public\n * @param {element} element The element to get all listeners for.\n * @returns All listeners for the given element.\n */\n function getListeners(element) {\n var id = idHandler.get(element);\n\n if (id === undefined) {\n return [];\n }\n\n return eventListeners[id] || [];\n }\n\n /**\n * Stores the given listener for the given element. Will not actually add the listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The callback that the element has added.\n */\n function addListener(element, listener) {\n var id = idHandler.get(element);\n\n if(!eventListeners[id]) {\n eventListeners[id] = [];\n }\n\n eventListeners[id].push(listener);\n }\n\n function removeListener(element, listener) {\n var listeners = getListeners(element);\n for (var i = 0, len = listeners.length; i < len; ++i) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n }\n\n function removeAllListeners(element) {\n var listeners = getListeners(element);\n if (!listeners) { return; }\n listeners.length = 0;\n }\n\n return {\n get: getListeners,\n add: addListener,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var getState = options.stateHandler.getState;\n\n /**\n * Tells if the element has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is detectable or not.\n */\n function isDetectable(element) {\n var state = getState(element);\n return state && !!state.isDetectable;\n }\n\n /**\n * Marks the element that it has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to mark.\n */\n function markAsDetectable(element) {\n getState(element).isDetectable = true;\n }\n\n /**\n * Tells if the element is busy or not.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is busy or not.\n */\n function isBusy(element) {\n return !!getState(element).busy;\n }\n\n /**\n * Marks the object is busy and should not be made detectable.\n * @public\n * @param {element} element The element to mark.\n * @param {boolean} busy If the element is busy or not.\n */\n function markBusy(element, busy) {\n getState(element).busy = !!busy;\n }\n\n return {\n isDetectable: isDetectable,\n markAsDetectable: markAsDetectable,\n isBusy: isBusy,\n markBusy: markBusy\n };\n};\n","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n\n if(!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n if(!getObject(element)) {\n throw new Error(\"Element is not detectable by this strategy.\");\n }\n\n function listenerProxy() {\n listener(element);\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support object, but supports the resize event directly on elements.\n getState(element).object = {\n proxy: listenerProxy\n };\n element.attachEvent(\"onresize\", listenerProxy);\n } else {\n var object = getObject(element);\n object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n }\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n var debug = options.debug;\n\n function injectObject(element, callback) {\n var OBJECT_STYLE = \"display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; padding: 0; margin: 0; opacity: 0; z-index: -1000; pointer-events: none;\";\n\n //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n var positionCheckPerformed = false;\n\n // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n var style = window.getComputedStyle(element);\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n getState(element).startSize = {\n width: width,\n height: height\n };\n\n function mutateDom() {\n function alterPositionStyles() {\n if(style.position === \"static\") {\n element.style.position = \"relative\";\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function onObjectLoad() {\n // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n if (!positionCheckPerformed) {\n alterPositionStyles();\n }\n\n /*jshint validthis: true */\n\n function getDocument(element, callback) {\n //Opera 12 seem to call the object.onload before the actual document has been created.\n //So if it is not present, poll it with an timeout until it is present.\n //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n if(!element.contentDocument) {\n setTimeout(function checkForObjectDocument() {\n getDocument(element, callback);\n }, 100);\n\n return;\n }\n\n callback(element.contentDocument);\n }\n\n //Mutating the object element here seems to fire another load event.\n //Mutating the inner document of the object element is fine though.\n var objectElement = this;\n\n //Create the style element to be added to the object.\n getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n //Notify that the element is ready to be listened to.\n callback(element);\n });\n }\n\n // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n if (style.position !== \"\") {\n alterPositionStyles(style);\n positionCheckPerformed = true;\n }\n\n //Add an object element as a child to the target element that will be listened to for resize events.\n var object = document.createElement(\"object\");\n object.style.cssText = OBJECT_STYLE;\n object.tabIndex = -1;\n object.type = \"text/html\";\n object.setAttribute(\"aria-hidden\", \"true\");\n object.onload = onObjectLoad;\n\n //Safari: This must occur before adding the object to the DOM.\n //IE: Does not like that this happens before, even if it is also added after.\n if(!browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n\n element.appendChild(object);\n getState(element).object = object;\n\n //IE: This must occur after adding the object to the DOM.\n if(browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n }\n\n if(batchProcessor) {\n batchProcessor.add(mutateDom);\n } else {\n mutateDom();\n }\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support objects properly. Luckily they do support the resize event.\n //So do not inject the object and notify that the element is already ready to be listened to.\n //The event handler for the resize event is attached in the utils.addListener instead.\n callback(element);\n } else {\n injectObject(element, callback);\n }\n }\n\n /**\n * Returns the child object of the target element.\n * @private\n * @param {element} element The target element.\n * @returns The object element of the target.\n */\n function getObject(element) {\n return getState(element).object;\n }\n\n function uninstall(element) {\n if(browserDetector.isIE(8)) {\n element.detachEvent(\"onresize\", getState(element).object.proxy);\n } else {\n element.removeChild(getObject(element));\n }\n delete getState(element).object;\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return x;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import {slice} from \"./array\";\nimport bisect from \"./bisect\";\nimport constant from \"./constant\";\nimport extent from \"./extent\";\nimport identity from \"./identity\";\nimport range from \"./range\";\nimport {tickStep} from \"./ticks\";\nimport sturges from \"./threshold/sturges\";\n\nexport default function() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.labella=e():t.labella=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p=\"\",e(0)}([function(t,e,r){\"use strict\";t.exports={Node:r(1),Force:r(2),Distributor:r(3),Renderer:r(10)}},function(t,e){\"use strict\";function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),i=function(){function t(e,n,i){r(this,t),this.idealPos=e,this.currentPos=e,this.width=n,this.data=i,this.layerIndex=0}return n(t,[{key:\"distanceFrom\",value:function(t){var e=this.width/2,r=t.width/2;return Math.max(this.currentPos-e,t.currentPos-r)-Math.min(this.currentPos+e,t.currentPos+r)}},{key:\"moveToIdealPosition\",value:function(){return this.currentPos=this.idealPos,this}},{key:\"displacement\",value:function(){return this.idealPos-this.currentPos}},{key:\"overlapWithNode\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.distanceFrom(t)-e<0}},{key:\"overlapWithPoint\",value:function(t){var e=this.width/2;return t>=this.currentPos-e&&t<=this.currentPos+e}},{key:\"positionBefore\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.currentLeft()-this.width/2-e}},{key:\"positionAfter\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.currentRight()+this.width/2+e}},{key:\"currentRight\",value:function(){return this.currentPos+this.width/2}},{key:\"currentLeft\",value:function(){return this.currentPos-this.width/2}},{key:\"idealRight\",value:function(){return this.idealPos+this.width/2}},{key:\"idealLeft\",value:function(){return this.idealPos-this.width/2}},{key:\"createStub\",value:function(e){var r=new t(this.idealPos,e,this.data);return r.currentPos=this.currentPos,r.child=this,this.parent=r,r}},{key:\"removeStub\",value:function(){return this.parent&&(this.parent.child=null,this.parent=null),this}},{key:\"isStub\",value:function(){return!!this.child}},{key:\"getPathToRoot\",value:function(){for(var t=[],e=this;e;)t.push(e),e=e.parent;return t}},{key:\"getPathFromRoot\",value:function(){return this.getPathToRoot().reverse()}},{key:\"getPathToRootLength\",value:function(){for(var t=0,e=this;e;){var r=e.parent?e.parent.currentPos:e.idealPos;t+=Math.abs(e.currentPos-r),e=e.parent}return t}},{key:\"getRoot\",value:function(){for(var t=this,e=this;e;)t=e,e=e.parent;return t}},{key:\"getLayerIndex\",value:function(){return this.layerIndex}},{key:\"clone\",value:function(){var e=new t(this.idealPos,this.width,this.data);return e.currentPos=this.currentPos,e.layerIndex=this.layerIndex,e}}]),t}();t.exports=i},function(t,e,r){\"use strict\";var n=r(3),i=r(4),o=r(8),s={nodeSpacing:3,minPos:0,maxPos:null,algorithm:\"overlap\",removeOverlap:!0,density:.85,stubWidth:1},u=function(t){var e={},r=i.extend({},s),u=new n,a=[],c=null;return e.nodes=function(t){return arguments.length?(a=t,c=[t.concat()],e):a},e.getLayers=function(){return c},e.options=function(t){if(!arguments.length)return r;r=i.extend(r,t);var o=i.pick(r,Object.keys(n.DEFAULT_OPTIONS));return i.isDefined(r.minPos)&&i.isDefined(r.maxPos)?o.layerWidth=r.maxPos-r.minPos:o.layerWidth=null,u.options(o),e},e.options(t),e.compute=function(){var t=i.pick(r,Object.keys(o.DEFAULT_OPTIONS));return a.forEach(function(t){t.removeStub()}),c=u.distribute(a),c.map(function(e,n){e.forEach(function(t){t.layerIndex=n}),r.removeOverlap&&o(e,t)}),e},e.start=function(){console.log(\"[warning] force.start() is deprecated. Please use force.compute() instead.\")},e};u.DEFAULT_OPTIONS=s,t.exports=u},function(t,e,r){\"use strict\";var n=r(4),i=r(6),o={algorithm:\"overlap\",layerWidth:1e3,density:.75,nodeSpacing:3,stubWidth:1},s=function(t){var e={};t=n.extend({},o,t),e.options=function(r){return arguments.length?(t=n.extend(t,r),e):t},e.computeRequiredWidth=function(e){return n.sum(e,function(e){return e.width+t.nodeSpacing})-t.nodeSpacing},e.maxWidthPerLayer=function(){return t.density*t.layerWidth},e.needToSplit=function(t){return e.estimateRequiredLayers(t)>1},e.estimateRequiredLayers=function(r){return t.layerWidth?Math.ceil(e.computeRequiredWidth(r)/e.maxWidthPerLayer()):1};var r={simple:function(r){for(var n=e.estimateRequiredLayers(r),i=[],o=0;o<n;o++)i.push([]);return r.forEach(function(e,r){var o=r%n;i[o].push(e);for(var s=e,u=o-1;u>=0;u--)s=s.createStub(t.stubWidth),i[u].push(s)}),i},roundRobin:function(t){var e=[];return e},overlap:function(r){for(var n=[],i=e.maxWidthPerLayer(),o=r.concat(),s=e.computeRequiredWidth(o);s>i;){e.countIdealOverlaps(o);var u=o.concat(),a=s;for(o=[];u.length>2&&a>i;){u.sort(function(t,e){return e.overlapCount-t.overlapCount});var c=u.shift();a-=c.width,a+=t.stubWidth,c.overlaps.forEach(function(t){t.overlapCount--}),o.push(c)}n.push(u),s=e.computeRequiredWidth(o)}o.length>0&&n.push(o);for(var h=n.length-1;h>=1;h--)for(var l=n[h],f=0;f<l.length;f++){var p=l[f];if(!p.isStub())for(var d=p,v=h-1;v>=0;v--)d=d.createStub(t.stubWidth),n[v].push(d)}return n}};return e.countIdealOverlaps=function(e){var r=new i(t.layerWidth/2);return e.forEach(function(t){r.add([t.idealLeft(),t.idealRight(),t])}),e.forEach(function(t){var e=r.search(t.idealLeft(),t.idealRight());t.overlaps=e.map(function(t){return t.data[2]}),t.overlapCount=e.length}),e},e.distribute=function(i){if(!i||0===i.length)return[];if(\"none\"==t.algorithm||!n.isDefined(t.algorithm))return[i];if(!e.needToSplit(i))return[i];var o=i.concat().sort(function(t,e){return t.idealPos-e.idealPos});if(\"function\"==typeof t.algorithm)return t.algorithm(o,t);if(r.hasOwnProperty(t.algorithm))return r[t.algorithm](o);throw\"Unknown algorithm: \"+t.algorithm},e};s.DEFAULT_OPTIONS=o,t.exports=s},function(t,e,r){\"use strict\";var n={isDefined:function(t){return null!==t&&void 0!==t},last:function(t){return t.length>0?t[t.length-1]:null},pick:function(t,e){return e.reduce(function(e,r){return e[r]=t[r],e},{})},sum:function(t,e){return t.map(e).reduce(function(t,e){return t+e},0)}};n.extend=r(5),t.exports=n},function(t,e){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=function(t){return\"function\"==typeof Array.isArray?Array.isArray(t):\"[object Array]\"===i.call(t)},s=function(t){if(!t||\"[object Object]\"!==i.call(t))return!1;var e=n.call(t,\"constructor\"),r=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,\"isPrototypeOf\");if(t.constructor&&!e&&!r)return!1;var o;for(o in t);return void 0===o||n.call(t,o)};t.exports=function u(){var t,e,n,i,a,c,h=arguments[0],l=1,f=arguments.length,p=!1;for(\"boolean\"==typeof h?(p=h,h=arguments[1]||{},l=2):(\"object\"!==(\"undefined\"==typeof h?\"undefined\":r(h))&&\"function\"!=typeof h||null==h)&&(h={});l<f;++l)if(t=arguments[l],null!=t)for(e in t)n=h[e],i=t[e],h!==i&&(p&&i&&(s(i)||(a=o(i)))?(a?(a=!1,c=n&&o(n)?n:[]):c=n&&s(n)?n:{},h[e]=u(p,c,i)):void 0!==i&&(h[e]=i));return h}},function(t,e,r){\"use strict\";function n(t,e){if(e||(e={}),this.startKey=e.startKey||0,this.endKey=e.endKey||1,this.intervalHash={},this.pointTree=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t[0]-e[0];return r>0?1:0==r?0:-1}}),this._autoIncrement=0,!t||\"number\"!=typeof t)throw new Error(\"you must specify center index as the 2nd argument.\");this.root=new u(t,this)}function i(t,e){return e.end<t.idx?(t.left||(t.left=new u(e.start+e.end>>1,this)),i.call(this,t.left,e)):t.idx<e.start?(t.right||(t.right=new u(e.start+e.end>>1,this)),i.call(this,t.right,e)):t.insert(e)}function o(t,e,r){if(t)return e<t.idx?(t.starts.every(function(t){var n=t.start<=e;return n&&r.push(t.result()),n}),o.call(this,t.left,e,r)):e>t.idx?(t.ends.every(function(t){var n=t.end>=e;return n&&r.push(t.result()),n}),o.call(this,t.right,e,r)):void t.starts.map(function(t){r.push(t.result())})}function s(t,e,r){if(e-t<=0)throw new Error(\"end must be greater than start. start: \"+t+\", end: \"+e);var n={},i=[];o.call(this,this.root,t+e>>1,i,!0),i.forEach(function(t){n[t.id]=!0});for(var s=this.pointTree.bsearch([t,null]),u=this.pointTree;s>=0&&u[s][0]==t;)s--;var a=this.pointTree.bsearch([e,null]);if(a>=0){for(var c=u.length-1;a<=c&&u[a][0]<=e;)a++;u.slice(s+1,a).forEach(function(t){var e=t[1];n[e]=!0},this),Object.keys(n).forEach(function(n){var i=this.intervalHash[n];r.push(i.result(t,e))},this)}}function u(t){this.idx=t,this.starts=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t.start-e.start;return r>0?1:0==r?0:-1}}),this.ends=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t.end-e.end;return r<0?1:0==r?0:-1}})}function a(t,e,r,n){if(this.id=e,this.start=t[r],this.end=t[n],this.data=t,\"number\"!=typeof this.start||\"number\"!=typeof this.end)throw new Error(\"start, end must be number. start: \"+this.start+\", end: \"+this.end);if(this.start>=this.end)throw new Error(\"start must be smaller than end. start: \"+this.start+\", end: \"+this.end)}var c=r(7);n.prototype.add=function(t,e){if(this.intervalHash[e])throw new Error(\"id \"+e+\" is already registered.\");if(void 0==e){for(;this.intervalHash[this._autoIncrement];)this._autoIncrement++;e=this._autoIncrement}var r=new a(t,e,this.startKey,this.endKey);this.pointTree.insert([r.start,e]),this.pointTree.insert([r.end,e]),this.intervalHash[e]=r,this._autoIncrement++,i.call(this,this.root,r)},n.prototype.search=function(t,e){var r=[];if(\"number\"!=typeof t)throw new Error(t+\": invalid input\");if(void 0==e)o.call(this,this.root,t,r);else{if(\"number\"!=typeof e)throw new Error(t+\",\"+e+\": invalid input\");s.call(this,t,e,r)}return r},n.prototype.remove=function(t){},u.prototype.insert=function(t){this.starts.insert(t),this.ends.insert(t)},a.prototype.result=function(t,e){var r={id:this.id,data:this.data};if(\"number\"==typeof t&&\"number\"==typeof e){var n=Math.max(this.start,t),i=Math.min(this.end,e),o=i-n;r.rate1=o/(e-t),r.rate2=o/(this.end-this.start)}return r},t.exports=n},function(t,e){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n=function i(){var t=null,e={},n=arguments;[\"0\",\"1\"].forEach(function(i){var o=n[i];Array.isArray(o)?t=o:o&&\"object\"==(\"undefined\"==typeof o?\"undefined\":r(o))&&(e=o)}),\"function\"==typeof e.filter&&(this._filter=e.filter),\"function\"==typeof e.compare?this._compare=e.compare:\"string\"==typeof e.compare&&i.compares[e.compare]&&(this._compare=i.compares[e.compare]),this._unique=!!e.unique,e.resume&&t?t.forEach(function(t,e){this.push(t)},this):t&&this.insert.apply(this,t)};n.create=function(t,e){return new n(t,e)},n.prototype=new Array,n.prototype.constructor=Array.prototype.constructor,n.prototype.insertOne=function(t){var e=this.bsearch(t);return(!this._unique||null==this.key(t,e))&&(!!this._filter(t,e)&&(this.splice(e+1,0,t),e+1))},n.prototype.insert=function(){return Array.prototype.map.call(arguments,function(t){return this.insertOne(t)},this)},n.prototype.remove=function(t){return this.splice(t,1),this},n.prototype.bsearch=function(t){if(!this.length)return-1;for(var e,r=0,n=this.length;n-r>1;){e=Math.floor((r+n)/2);var i=this[e],o=this._compare(t,i);if(0==o)return e;o>0?r=e:n=e}return 0==r&&this._compare(this[0],t)>0?-1:r},n.prototype.key=function(t,e){null==e&&(e=this.bsearch(t));var r=e;if(r==-1||this._compare(this[r],t)<0)return r+1<this.length&&0==this._compare(this[r+1],t)?r+1:null;for(;r>=1&&0==this._compare(this[r-1],t);)r--;return r},n.prototype.keys=function(t,e){var r=[];null==e&&(e=this.bsearch(t));for(var n=e;n>=0&&0==this._compare(this[n],t);)r.push(n),n--;var i=this.length;for(n=e+1;n<i&&0==this._compare(this[n],t);)r.push(n),n++;return r.length?r:null},n.prototype.unique=function(t){if(t)return this.filter(function(t,e){return 0==e||0!=this._compare(this[e-1],t)},this);var e=0;return this.map(function(t,r){return 0==r||0!=this._compare(this[r-1],t)?null:r-e++},this).forEach(function(t){null!=t&&this.remove(t)},this),this},n.prototype.toArray=function(){return this.slice()},n.prototype._filter=function(t,e){return!0},n.compares={number:function(t,e){var r=t-e;return r>0?1:0==r?0:-1},string:function(t,e){return t>e?1:t==e?0:-1}},n.prototype._compare=n.compares.string,t.exports=n},function(t,e,r){\"use strict\";function n(t){var e=new s.Variable(t.targetPos);return e.node=t,e}function i(t,e){if(t.length>0){e=o.extend(u,e),t.forEach(function(t,e){t.targetPos=t.parent?t.parent.currentPos:t.idealPos,t.index=e});for(var r=t.concat().sort(function(t,e){var r=t.targetPos-e.targetPos;if(0!==r)return r;var n=t.isStub()-e.isStub();return 0!==n?n:t.index-e.index}).map(n),i=[],a=1;a<r.length;a++){var c=r[a-1],h=r[a],l=void 0;l=c.node.isStub()&&h.node.isStub()?(c.node.width+h.node.width)/2+e.lineSpacing:(c.node.width+h.node.width)/2+e.nodeSpacing,i.push(new s.Constraint(c,h,l))}if(o.isDefined(e.minPos)){var f=new s.Variable(e.minPos,1e10),p=r[0];i.push(new s.Constraint(f,p,p.node.width/2)),r.unshift(f)}if(o.isDefined(e.maxPos)){var d=new s.Variable(e.maxPos,1e10),v=o.last(r);i.push(new s.Constraint(v,d,v.node.width/2)),r.push(d)}new s.Solver(r,i).solve(),r.filter(function(t){return t.node}).map(function(t){return t.node.currentPos=Math.round(t.position()),t})}return t}var o=r(4),s=r(9),u={lineSpacing:2,nodeSpacing:3,minPos:0,maxPos:null};i.DEFAULT_OPTIONS=u,t.exports=i},function(t,e){\"use strict\";var r={},n=function(){function t(t){this.scale=t,this.AB=0,this.AD=0,this.A2=0}return t.prototype.addVariable=function(t){var e=this.scale/t.scale,r=t.offset/t.scale,n=t.weight;this.AB+=n*e*r,this.AD+=n*e*t.desiredPosition,this.A2+=n*e*e},t.prototype.getPosn=function(){return(this.AD-this.AB)/this.A2},t}();r.PositionStats=n;var i=function(){function t(t,e,r,n){void 0===n&&(n=!1),this.left=t,this.right=e,this.gap=r,this.equality=n,this.active=!1,this.unsatisfiable=!1,this.left=t,this.right=e,this.gap=r,this.equality=n}return t.prototype.slack=function(){return this.unsatisfiable?Number.MAX_VALUE:this.right.scale*this.right.position()-this.gap-this.left.scale*this.left.position()},t}();r.Constraint=i;var o=function(){function t(t,e,r){void 0===e&&(e=1),void 0===r&&(r=1),this.desiredPosition=t,this.weight=e,this.scale=r,this.offset=0}return t.prototype.dfdv=function(){return 2*this.weight*(this.position()-this.desiredPosition)},t.prototype.position=function(){return(this.block.ps.scale*this.block.posn+this.offset)/this.scale},t.prototype.visitNeighbours=function(t,e){var r=function(r,n){return r.active&&t!==n&&e(r,n)};this.cOut.forEach(function(t){return r(t,t.right)}),this.cIn.forEach(function(t){return r(t,t.left)})},t}();r.Variable=o;var s=function(){function t(t){this.vars=[],t.offset=0,this.ps=new n(t.scale),this.addVariable(t)}return t.prototype.addVariable=function(t){t.block=this,this.vars.push(t),this.ps.addVariable(t),this.posn=this.ps.getPosn()},t.prototype.updateWeightedPosition=function(){this.ps.AB=this.ps.AD=this.ps.A2=0;for(var t=0,e=this.vars.length;t<e;++t)this.ps.addVariable(this.vars[t]);this.posn=this.ps.getPosn()},t.prototype.compute_lm=function(t,e,r){var n=this,i=t.dfdv();return t.visitNeighbours(e,function(e,o){var s=n.compute_lm(o,t,r);o===e.right?(i+=s*e.left.scale,e.lm=s):(i+=s*e.right.scale,e.lm=-s),r(e)}),i/t.scale},t.prototype.populateSplitBlock=function(t,e){var r=this;t.visitNeighbours(e,function(e,n){n.offset=t.offset+(n===e.right?e.gap:-e.gap),r.addVariable(n),r.populateSplitBlock(n,t)})},t.prototype.traverse=function(t,e,r,n){var i=this;void 0===r&&(r=this.vars[0]),void 0===n&&(n=null),r.visitNeighbours(n,function(n,o){e.push(t(n)),i.traverse(t,e,o,r)})},t.prototype.findMinLM=function(){var t=null;return this.compute_lm(this.vars[0],null,function(e){!e.equality&&(null===t||e.lm<t.lm)&&(t=e)}),t},t.prototype.findMinLMBetween=function(t,e){this.compute_lm(t,null,function(){});var r=null;return this.findPath(t,null,e,function(t,e){!t.equality&&t.right===e&&(null===r||t.lm<r.lm)&&(r=t)}),r},t.prototype.findPath=function(t,e,r,n){var i=this,o=!1;return t.visitNeighbours(e,function(e,s){o||s!==r&&!i.findPath(s,t,r,n)||(o=!0,n(e,s))}),o},t.prototype.isActiveDirectedPathBetween=function(t,e){if(t===e)return!0;for(var r=t.cOut.length;r--;){var n=t.cOut[r];if(n.active&&this.isActiveDirectedPathBetween(n.right,e))return!0}return!1},t.split=function(e){return e.active=!1,[t.createSplitBlock(e.left),t.createSplitBlock(e.right)]},t.createSplitBlock=function(e){var r=new t(e);return r.populateSplitBlock(e,null),r},t.prototype.splitBetween=function(e,r){var n=this.findMinLMBetween(e,r);if(null!==n){var i=t.split(n);return{constraint:n,lb:i[0],rb:i[1]}}return null},t.prototype.mergeAcross=function(t,e,r){e.active=!0;for(var n=0,i=t.vars.length;n<i;++n){var o=t.vars[n];o.offset+=r,this.addVariable(o)}this.posn=this.ps.getPosn()},t.prototype.cost=function(){for(var t=0,e=this.vars.length;e--;){var r=this.vars[e],n=r.position()-r.desiredPosition;t+=n*n*r.weight}return t},t}();r.Block=s;var u=function(){function t(t){this.vs=t;var e=t.length;for(this.list=new Array(e);e--;){var r=new s(t[e]);this.list[e]=r,r.blockInd=e}}return t.prototype.cost=function(){for(var t=0,e=this.list.length;e--;)t+=this.list[e].cost();return t},t.prototype.insert=function(t){t.blockInd=this.list.length,this.list.push(t)},t.prototype.remove=function(t){var e=this.list.length-1,r=this.list[e];this.list.length=e,t!==r&&(this.list[t.blockInd]=r,r.blockInd=t.blockInd)},t.prototype.merge=function(t){var e=t.left.block,r=t.right.block,n=t.right.offset-t.left.offset-t.gap;e.vars.length<r.vars.length?(r.mergeAcross(e,t,n),this.remove(e)):(e.mergeAcross(r,t,-n),this.remove(r))},t.prototype.forEach=function(t){this.list.forEach(t)},t.prototype.updateBlockPositions=function(){this.list.forEach(function(t){return t.updateWeightedPosition()})},t.prototype.split=function(t){var e=this;this.updateBlockPositions(),this.list.forEach(function(r){var n=r.findMinLM();null!==n&&n.lm<a.LAGRANGIAN_TOLERANCE&&(r=n.left.block,s.split(n).forEach(function(t){return e.insert(t)}),e.remove(r),t.push(n))})},t}();r.Blocks=u;var a=function(){function t(t,e){this.vs=t,this.cs=e,this.vs=t,t.forEach(function(t){t.cIn=[],t.cOut=[]}),this.cs=e,e.forEach(function(t){t.left.cOut.push(t),t.right.cIn.push(t)}),this.inactive=e.map(function(t){return t.active=!1,t}),this.bs=null}return t.prototype.cost=function(){return this.bs.cost()},t.prototype.setStartingPositions=function(t){this.inactive=this.cs.map(function(t){return t.active=!1,t}),this.bs=new u(this.vs),this.bs.forEach(function(e,r){return e.posn=t[r]})},t.prototype.setDesiredPositions=function(t){this.vs.forEach(function(e,r){return e.desiredPosition=t[r]})},t.prototype.mostViolated=function(){for(var e=Number.MAX_VALUE,r=null,n=this.inactive,i=n.length,o=i,s=0;s<i;++s){var u=n[s];if(!u.unsatisfiable){var a=u.slack();if((u.equality||a<e)&&(e=a,r=u,o=s,u.equality))break}}return o!==i&&(e<t.ZERO_UPPERBOUND&&!r.active||r.equality)&&(n[o]=n[i-1],n.length=i-1),r},t.prototype.satisfy=function(){null==this.bs&&(this.bs=new u(this.vs)),this.bs.split(this.inactive);for(var e=null;(e=this.mostViolated())&&(e.equality||e.slack()<t.ZERO_UPPERBOUND&&!e.active);){var r=e.left.block,n=e.right.block;if(r!==n)this.bs.merge(e);else{if(r.isActiveDirectedPathBetween(e.right,e.left)){e.unsatisfiable=!0;continue}var i=r.splitBetween(e.left,e.right);if(null===i){e.unsatisfiable=!0;continue}this.bs.insert(i.lb),this.bs.insert(i.rb),this.bs.remove(r),this.inactive.push(i.constraint),e.slack()>=0?this.inactive.push(e):this.bs.merge(e)}}},t.prototype.solve=function(){this.satisfy();for(var t=Number.MAX_VALUE,e=this.bs.cost();Math.abs(t-e)>1e-4;)this.satisfy(),t=e,e=this.bs.cost();return e},t.LAGRANGIAN_TOLERANCE=-1e-4,t.ZERO_UPPERBOUND=-1e-10,t}();r.Solver=a,t.exports=r},function(t,e,r){\"use strict\";function n(t){this.options=c.extend({layerGap:60,nodeHeight:10,direction:\"down\"},t)}function i(t){return\"L \"+t.join(\" \")}function o(t){return\"M \"+t.join(\" \")}function s(t,e,r){return\"C \"+t.join(\" \")+\" \"+e.join(\" \")+\" \"+r.join(\" \")}function u(t,e){var r=(t[1]+e[1])/2;return s([t[0],r],[e[0],r],e)}function a(t,e){var r=(t[0]+e[0])/2;return s([r,t[1]],[r,e[1]],e)}var c=r(4);n.lineTo=i,n.moveTo=o,n.curveTo=s,n.vCurveBetween=u,n.hCurveBetween=a,n.prototype.getWaypoints=function(t){var e=this.options,r=e.direction,n=t.getPathFromRoot(),i=e.nodeHeight+e.layerGap;return\"left\"===r?[[[0,n[0].idealPos]]].concat(n.map(function(t,r){var n=i*(r+1)*-1;return[[n+e.nodeHeight,t.currentPos],[n,t.currentPos]]})):\"right\"===r?[[[0,n[0].idealPos]]].concat(n.map(function(t,r){var n=i*(r+1);return[[n-e.nodeHeight,t.currentPos],[n,t.currentPos]]})):\"up\"===r?[[[n[0].idealPos,0]]].concat(n.map(function(t,r){var n=i*(r+1)*-1;return[[t.currentPos,n+e.nodeHeight],[t.currentPos,n]]})):[[[n[0].idealPos,0]]].concat(n.map(function(t,r){var n=i*(r+1);return[[t.currentPos,n-e.nodeHeight],[t.currentPos,n]]}))},n.prototype.layout=function(t){var e=this.options,r=e.layerGap+e.nodeHeight;switch(e.direction){case\"left\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=-n-e.nodeHeight,t.y=t.currentPos,t.dx=e.nodeHeight,t.dy=t.width});break;case\"right\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=n,t.y=t.currentPos,t.dx=e.nodeHeight,t.dy=t.width});break;case\"up\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=t.currentPos,t.y=-n-e.nodeHeight,t.dx=t.width,t.dy=e.nodeHeight});break;default:case\"down\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=t.currentPos,t.y=n,t.dx=t.width,t.dy=e.nodeHeight})}return t},n.prototype.generatePath=function(t){var e=this.options,r=e.direction,n=this.getWaypoints(t,r),s=[o(n[0][0])];return\"left\"===r||\"right\"===r?n.reduce(function(t,e,r){return s.push(a(t[t.length-1],e[0])),r<n.length-1&&s.push(i(e[1])),e}):n.reduce(function(t,e,r){return s.push(u(t[t.length-1],e[0])),r<n.length-1&&s.push(i(e[1])),e}),s.join(\" \")},t.exports=n}])});","import * as React from 'react';\n\nexport interface IChartHeaderProps {\n metric: string;\n}\n\nexport default ({ metric }: IChartHeaderProps) => {\n return (\n <div className=\"chart-header\">\n <h6 className=\"heading-6 color-text-primary\">\n <span className=\"uppercase prefix\">metric name:</span>\n <span>\n &nbsp;\n {metric}\n </span>\n </h6>\n </div>\n );\n};\n","interface IColorConfig {\n [propName: string]: string;\n}\n\ninterface ITimeSeriesConfig {\n [propName: string]: any;\n}\n\ninterface IDataGroup {\n [group: string]: string;\n}\n\ninterface IVizConfig {\n readonly colors: IColorConfig;\n readonly height: number;\n readonly timeSeries: ITimeSeriesConfig;\n readonly dataGroupMap: IDataGroup;\n}\n\nexport const vizConfig: IVizConfig = {\n colors: {\n baseline: '#52b3d9',\n canary: '#e26a6a',\n background: '#f8f8f8',\n },\n height: 400,\n timeSeries: {\n minimapDataPointsThreshold: 240,\n minimapHeight: 40,\n axisTickLineHeight: 4,\n axisTickLabelHeight: 32,\n axisLabelHeight: 16,\n },\n dataGroupMap: {\n baseline: 'control',\n canary: 'experiment',\n },\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { vizConfig } from './config';\n\nimport './chartLegend.less';\n\ninterface IChartLegendProps {\n isClickable?: boolean;\n onClickHandler?: (group: string) => void;\n showGroup?: { [group: string]: boolean };\n}\n\nexport default (props: IChartLegendProps) => {\n const { onClickHandler, showGroup = { baseline: true, canary: true }, isClickable = false } = props;\n\n const baselineIconStyle = {\n backgroundColor: vizConfig.colors.baseline,\n };\n\n const canaryIconStyle = {\n backgroundColor: vizConfig.colors.canary,\n };\n\n const handleClick = (group: string) => (onClickHandler ? () => onClickHandler(group) : undefined);\n\n const legendItemClass = classNames('legend-item', { clickable: isClickable });\n const legendItemClassCanary = classNames(legendItemClass, { deselected: !showGroup.canary });\n const legendItemClassBaseline = classNames(legendItemClass, { deselected: !showGroup.baseline });\n return (\n <div className=\"chart-legend\">\n <div className={legendItemClassBaseline} onClick={handleClick('baseline')}>\n <div className=\"legend-icon\" style={baselineIconStyle} />\n <div>Baseline</div>\n </div>\n <div className={legendItemClassCanary} onClick={handleClick('canary')}>\n <div className=\"legend-icon\" style={canaryIconStyle} />\n <div>Canary</div>\n </div>\n </div>\n );\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n /**\n * Hide all tooltip\n * @trigger ReactTooltip.hide()\n */\n target.hide = function (target) {\n dispatchGlobalEvent(_constant2.default.GLOBAL.HIDE, { target: target });\n };\n\n /**\n * Rebuild all tooltip\n * @trigger ReactTooltip.rebuild()\n */\n target.rebuild = function () {\n dispatchGlobalEvent(_constant2.default.GLOBAL.REBUILD);\n };\n\n /**\n * Show specific tooltip\n * @trigger ReactTooltip.show()\n */\n target.show = function (target) {\n dispatchGlobalEvent(_constant2.default.GLOBAL.SHOW, { target: target });\n };\n\n target.prototype.globalRebuild = function () {\n if (this.mount) {\n this.unbindListener();\n this.bindListener();\n }\n };\n\n target.prototype.globalShow = function (event) {\n if (this.mount) {\n // Create a fake event, specific show will limit the type to `solid`\n // only `float` type cares e.clientX e.clientY\n var e = { currentTarget: event.detail.target };\n this.showTooltip(e, true);\n }\n };\n\n target.prototype.globalHide = function (event) {\n if (this.mount) {\n var hasTarget = event && event.detail && event.detail.target && true || false;\n this.hideTooltip({ currentTarget: hasTarget && event.detail.target }, hasTarget);\n }\n };\n};\n\nvar _constant = require('../constant');\n\nvar _constant2 = _interopRequireDefault(_constant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dispatchGlobalEvent = function dispatchGlobalEvent(eventName, opts) {\n // Compatibale with IE\n // @see http://stackoverflow.com/questions/26596123/internet-explorer-9-10-11-event-constructor-doesnt-work\n var event = void 0;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventName, { detail: opts });\n } else {\n event = document.createEvent('Event');\n event.initEvent(eventName, false, true);\n event.detail = opts;\n }\n\n window.dispatchEvent(event);\n}; /**\n * Static methods for react-tooltip\n */","import * as React from 'react';\n\nimport { vizConfig } from './config';\n\nexport interface ICircleIconProps {\n group: string;\n}\n\n// simple component to show circle icons in tooltips\nexport default ({ group }: ICircleIconProps) => {\n const iconStyle = {\n color: vizConfig.colors[group],\n paddingRight: 4,\n };\n return <i className=\"fas fa-circle\" style={iconStyle} />;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n\n GLOBAL: {\n HIDE: '__react_tooltip_hide_event',\n REBUILD: '__react_tooltip_rebuild_event',\n SHOW: '__react_tooltip_show_event'\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.bindWindowEvents = function (resizeHide) {\n // ReactTooltip.hide\n window.removeEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide);\n window.addEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide, false);\n\n // ReactTooltip.rebuild\n window.removeEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild);\n window.addEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild, false);\n\n // ReactTooltip.show\n window.removeEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow);\n window.addEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow, false);\n\n // Resize\n if (resizeHide) {\n window.removeEventListener('resize', this.onWindowResize);\n window.addEventListener('resize', this.onWindowResize, false);\n }\n };\n\n target.prototype.unbindWindowEvents = function () {\n window.removeEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide);\n window.removeEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild);\n window.removeEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow);\n window.removeEventListener('resize', this.onWindowResize);\n };\n\n /**\n * invoked by resize event of window\n */\n target.prototype.onWindowResize = function () {\n if (!this.mount) return;\n this.hideTooltip();\n };\n};\n\nvar _constant = require('../constant');\n\nvar _constant2 = _interopRequireDefault(_constant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.isCustomEvent = function (ele) {\n var event = this.state.event;\n\n return event || !!ele.getAttribute('data-event');\n };\n\n /* Bind listener for custom event */\n target.prototype.customBindListener = function (ele) {\n var _this = this;\n\n var _state = this.state,\n event = _state.event,\n eventOff = _state.eventOff;\n\n var dataEvent = ele.getAttribute('data-event') || event;\n var dataEventOff = ele.getAttribute('data-event-off') || eventOff;\n\n dataEvent.split(' ').forEach(function (event) {\n ele.removeEventListener(event, customListeners.get(ele, event));\n var customListener = checkStatus.bind(_this, dataEventOff);\n customListeners.set(ele, event, customListener);\n ele.addEventListener(event, customListener, false);\n });\n if (dataEventOff) {\n dataEventOff.split(' ').forEach(function (event) {\n ele.removeEventListener(event, _this.hideTooltip);\n ele.addEventListener(event, _this.hideTooltip, false);\n });\n }\n };\n\n /* Unbind listener for custom event */\n target.prototype.customUnbindListener = function (ele) {\n var _state2 = this.state,\n event = _state2.event,\n eventOff = _state2.eventOff;\n\n var dataEvent = event || ele.getAttribute('data-event');\n var dataEventOff = eventOff || ele.getAttribute('data-event-off');\n\n ele.removeEventListener(dataEvent, customListeners.get(ele, event));\n if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip);\n };\n};\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Custom events to control showing and hiding of tooltip\n *\n * @attributes\n * - `event` {String}\n * - `eventOff` {String}\n */\n\nvar checkStatus = function checkStatus(dataEventOff, e) {\n var show = this.state.show;\n var id = this.props.id;\n\n var dataIsCapture = e.currentTarget.getAttribute('data-iscapture');\n var isCapture = dataIsCapture && dataIsCapture === 'true' || this.props.isCapture;\n var currentItem = e.currentTarget.getAttribute('currentItem');\n\n if (!isCapture) e.stopPropagation();\n if (show && currentItem === 'true') {\n if (!dataEventOff) this.hideTooltip(e);\n } else {\n e.currentTarget.setAttribute('currentItem', 'true');\n setUntargetItems(e.currentTarget, this.getTargetArray(id));\n this.showTooltip(e);\n }\n};\n\nvar setUntargetItems = function setUntargetItems(currentTarget, targetArray) {\n for (var i = 0; i < targetArray.length; i++) {\n if (currentTarget !== targetArray[i]) {\n targetArray[i].setAttribute('currentItem', 'false');\n } else {\n targetArray[i].setAttribute('currentItem', 'true');\n }\n }\n};\n\nvar customListeners = {\n id: '9b69f92e-d3fe-498b-b1b4-c5e63a51b0cf',\n set: function set(target, event, listener) {\n if (this.id in target) {\n var map = target[this.id];\n map[event] = listener;\n } else {\n // this is workaround for WeakMap, which is not supported in older browsers, such as IE\n Object.defineProperty(target, this.id, {\n configurable: true,\n value: _defineProperty({}, event, listener)\n });\n }\n },\n get: function get(target, event) {\n var map = target[this.id];\n if (map !== undefined) {\n return map[event];\n }\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.isCapture = function (currentTarget) {\n return currentTarget && currentTarget.getAttribute('data-iscapture') === 'true' || this.props.isCapture || false;\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.getEffect = function (currentTarget) {\n var dataEffect = currentTarget.getAttribute('data-effect');\n return dataEffect || this.props.effect || 'float';\n };\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.bindRemovalTracker = function () {\n var _this = this;\n\n var MutationObserver = getMutationObserverClass();\n if (MutationObserver == null) return;\n\n var observer = new MutationObserver(function (mutations) {\n for (var m1 = 0; m1 < mutations.length; m1++) {\n var mutation = mutations[m1];\n for (var m2 = 0; m2 < mutation.removedNodes.length; m2++) {\n var element = mutation.removedNodes[m2];\n if (element === _this.state.currentTarget) {\n _this.hideTooltip();\n return;\n }\n }\n }\n });\n\n observer.observe(window.document, { childList: true, subtree: true });\n\n this.removalTracker = observer;\n };\n\n target.prototype.unbindRemovalTracker = function () {\n if (this.removalTracker) {\n this.removalTracker.disconnect();\n this.removalTracker = null;\n }\n };\n};\n\n/**\n * Tracking target removing from DOM.\n * It's nessesary to hide tooltip when it's target disappears.\n * Otherwise, the tooltip would be shown forever until another target\n * is triggered.\n *\n * If MutationObserver is not available, this feature just doesn't work.\n */\n\n// https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/\nvar getMutationObserverClass = function getMutationObserverClass() {\n return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (e, target, node, place, desiredPlace, effect, offset) {\n var _getDimensions = getDimensions(node),\n tipWidth = _getDimensions.width,\n tipHeight = _getDimensions.height;\n\n var _getDimensions2 = getDimensions(target),\n targetWidth = _getDimensions2.width,\n targetHeight = _getDimensions2.height;\n\n var _getCurrentOffset = getCurrentOffset(e, target, effect),\n mouseX = _getCurrentOffset.mouseX,\n mouseY = _getCurrentOffset.mouseY;\n\n var defaultOffset = getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight);\n\n var _calculateOffset = calculateOffset(offset),\n extraOffset_X = _calculateOffset.extraOffset_X,\n extraOffset_Y = _calculateOffset.extraOffset_Y;\n\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n\n var _getParent = getParent(node),\n parentTop = _getParent.parentTop,\n parentLeft = _getParent.parentLeft;\n\n // Get the edge offset of the tooltip\n\n\n var getTipOffsetLeft = function getTipOffsetLeft(place) {\n var offset_X = defaultOffset[place].l;\n return mouseX + offset_X + extraOffset_X;\n };\n var getTipOffsetRight = function getTipOffsetRight(place) {\n var offset_X = defaultOffset[place].r;\n return mouseX + offset_X + extraOffset_X;\n };\n var getTipOffsetTop = function getTipOffsetTop(place) {\n var offset_Y = defaultOffset[place].t;\n return mouseY + offset_Y + extraOffset_Y;\n };\n var getTipOffsetBottom = function getTipOffsetBottom(place) {\n var offset_Y = defaultOffset[place].b;\n return mouseY + offset_Y + extraOffset_Y;\n };\n\n //\n // Functions to test whether the tooltip's sides are inside\n // the client window for a given orientation p\n //\n // _____________\n // | | <-- Right side\n // | p = 'left' |\\\n // | |/ |\\\n // |_____________| |_\\ <-- Mouse\n // / \\ |\n // |\n // |\n // Bottom side\n //\n var outsideLeft = function outsideLeft(p) {\n return getTipOffsetLeft(p) < 0;\n };\n var outsideRight = function outsideRight(p) {\n return getTipOffsetRight(p) > windowWidth;\n };\n var outsideTop = function outsideTop(p) {\n return getTipOffsetTop(p) < 0;\n };\n var outsideBottom = function outsideBottom(p) {\n return getTipOffsetBottom(p) > windowHeight;\n };\n\n // Check whether the tooltip with orientation p is completely inside the client window\n var outside = function outside(p) {\n return outsideLeft(p) || outsideRight(p) || outsideTop(p) || outsideBottom(p);\n };\n var inside = function inside(p) {\n return !outside(p);\n };\n\n var placesList = ['top', 'bottom', 'left', 'right'];\n var insideList = [];\n for (var i = 0; i < 4; i++) {\n var p = placesList[i];\n if (inside(p)) {\n insideList.push(p);\n }\n }\n\n var isNewState = false;\n var newPlace = void 0;\n if (inside(desiredPlace) && desiredPlace !== place) {\n isNewState = true;\n newPlace = desiredPlace;\n } else if (insideList.length > 0 && outside(desiredPlace) && outside(place)) {\n isNewState = true;\n newPlace = insideList[0];\n }\n\n if (isNewState) {\n return {\n isNewState: true,\n newState: { place: newPlace }\n };\n }\n\n return {\n isNewState: false,\n position: {\n left: parseInt(getTipOffsetLeft(place) - parentLeft, 10),\n top: parseInt(getTipOffsetTop(place) - parentTop, 10)\n }\n };\n};\n\nvar getDimensions = function getDimensions(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n height = _node$getBoundingClie.height,\n width = _node$getBoundingClie.width;\n\n return {\n height: parseInt(height, 10),\n width: parseInt(width, 10)\n };\n};\n\n// Get current mouse offset\n/**\n * Calculate the position of tooltip\n *\n * @params\n * - `e` {Event} the event of current mouse\n * - `target` {Element} the currentTarget of the event\n * - `node` {DOM} the react-tooltip object\n * - `place` {String} top / right / bottom / left\n * - `effect` {String} float / solid\n * - `offset` {Object} the offset to default position\n *\n * @return {Object}\n * - `isNewState` {Bool} required\n * - `newState` {Object}\n * - `position` {Object} {left: {Number}, top: {Number}}\n */\nvar getCurrentOffset = function getCurrentOffset(e, currentTarget, effect) {\n var boundingClientRect = currentTarget.getBoundingClientRect();\n var targetTop = boundingClientRect.top;\n var targetLeft = boundingClientRect.left;\n\n var _getDimensions3 = getDimensions(currentTarget),\n targetWidth = _getDimensions3.width,\n targetHeight = _getDimensions3.height;\n\n if (effect === 'float') {\n return {\n mouseX: e.clientX,\n mouseY: e.clientY\n };\n }\n return {\n mouseX: targetLeft + targetWidth / 2,\n mouseY: targetTop + targetHeight / 2\n };\n};\n\n// List all possibility of tooltip final offset\n// This is useful in judging if it is necessary for tooltip to switch position when out of window\nvar getDefaultPosition = function getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight) {\n var top = void 0;\n var right = void 0;\n var bottom = void 0;\n var left = void 0;\n var disToMouse = 3;\n var triangleHeight = 2;\n var cursorHeight = 12; // Optimize for float bottom only, cause the cursor will hide the tooltip\n\n if (effect === 'float') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(tipHeight + disToMouse + triangleHeight),\n b: -disToMouse\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: disToMouse + cursorHeight,\n b: tipHeight + disToMouse + triangleHeight + cursorHeight\n };\n left = {\n l: -(tipWidth + disToMouse + triangleHeight),\n r: -disToMouse,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: disToMouse,\n r: tipWidth + disToMouse + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n } else if (effect === 'solid') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(targetHeight / 2 + tipHeight + triangleHeight),\n b: -(targetHeight / 2)\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: targetHeight / 2,\n b: targetHeight / 2 + tipHeight + triangleHeight\n };\n left = {\n l: -(tipWidth + targetWidth / 2 + triangleHeight),\n r: -(targetWidth / 2),\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: targetWidth / 2,\n r: tipWidth + targetWidth / 2 + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n }\n\n return { top: top, bottom: bottom, left: left, right: right };\n};\n\n// Consider additional offset into position calculation\nvar calculateOffset = function calculateOffset(offset) {\n var extraOffset_X = 0;\n var extraOffset_Y = 0;\n\n if (Object.prototype.toString.apply(offset) === '[object String]') {\n offset = JSON.parse(offset.toString().replace(/\\'/g, '\\\"'));\n }\n for (var key in offset) {\n if (key === 'top') {\n extraOffset_Y -= parseInt(offset[key], 10);\n } else if (key === 'bottom') {\n extraOffset_Y += parseInt(offset[key], 10);\n } else if (key === 'left') {\n extraOffset_X -= parseInt(offset[key], 10);\n } else if (key === 'right') {\n extraOffset_X += parseInt(offset[key], 10);\n }\n }\n\n return { extraOffset_X: extraOffset_X, extraOffset_Y: extraOffset_Y };\n};\n\n// Get the offset of the parent elements\nvar getParent = function getParent(currentTarget) {\n var currentParent = currentTarget;\n while (currentParent) {\n if (window.getComputedStyle(currentParent).getPropertyValue('transform') !== 'none') break;\n currentParent = currentParent.parentElement;\n }\n\n var parentTop = currentParent && currentParent.getBoundingClientRect().top || 0;\n var parentLeft = currentParent && currentParent.getBoundingClientRect().left || 0;\n\n return { parentTop: parentTop, parentLeft: parentLeft };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (tip, children, getContent, multiline) {\n if (children) return children;\n if (getContent !== undefined && getContent !== null) return getContent; // getContent can be 0, '', etc.\n if (getContent === null) return null; // Tip not exist and childern is null or undefined\n\n var regexp = /<br\\s*\\/?>/;\n if (!multiline || multiline === 'false' || !regexp.test(tip)) {\n // No trim(), so that user can keep their input\n return tip;\n }\n\n // Multiline tooltip content\n return tip.split(regexp).map(function (d, i) {\n return _react2.default.createElement(\n 'span',\n { key: i, className: 'multi-line' },\n d\n );\n });\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseAria = parseAria;\n/**\n * Support aria- and role in ReactTooltip\n *\n * @params props {Object}\n * @return {Object}\n */\nfunction parseAria(props) {\n var ariaObj = {};\n Object.keys(props).filter(function (prop) {\n // aria-xxx and role is acceptable\n return (/(^aria-\\w+$|^role$)/.test(prop)\n );\n }).forEach(function (prop) {\n ariaObj[prop] = props[prop];\n });\n\n return ariaObj;\n}","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _class2, _temp;\n\n/* Decoraters */\n\n\n/* Utils */\n\n\n/* CSS */\n\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _classnames = require('classnames');\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _staticMethods = require('./decorators/staticMethods');\n\nvar _staticMethods2 = _interopRequireDefault(_staticMethods);\n\nvar _windowListener = require('./decorators/windowListener');\n\nvar _windowListener2 = _interopRequireDefault(_windowListener);\n\nvar _customEvent = require('./decorators/customEvent');\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nvar _isCapture = require('./decorators/isCapture');\n\nvar _isCapture2 = _interopRequireDefault(_isCapture);\n\nvar _getEffect = require('./decorators/getEffect');\n\nvar _getEffect2 = _interopRequireDefault(_getEffect);\n\nvar _trackRemoval = require('./decorators/trackRemoval');\n\nvar _trackRemoval2 = _interopRequireDefault(_trackRemoval);\n\nvar _getPosition = require('./utils/getPosition');\n\nvar _getPosition2 = _interopRequireDefault(_getPosition);\n\nvar _getTipContent = require('./utils/getTipContent');\n\nvar _getTipContent2 = _interopRequireDefault(_getTipContent);\n\nvar _aria = require('./utils/aria');\n\nvar _nodeListToArray = require('./utils/nodeListToArray');\n\nvar _nodeListToArray2 = _interopRequireDefault(_nodeListToArray);\n\nvar _style = require('./style');\n\nvar _style2 = _interopRequireDefault(_style);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.default)(_class = (0, _customEvent2.default)(_class = (0, _isCapture2.default)(_class = (0, _getEffect2.default)(_class = (0, _trackRemoval2.default)(_class = (_temp = _class2 = function (_React$Component) {\n _inherits(ReactTooltip, _React$Component);\n\n function ReactTooltip(props) {\n _classCallCheck(this, ReactTooltip);\n\n var _this = _possibleConstructorReturn(this, (ReactTooltip.__proto__ || Object.getPrototypeOf(ReactTooltip)).call(this, props));\n\n _this.state = {\n place: props.place || 'top', // Direction of tooltip\n desiredPlace: props.place || 'top',\n type: 'dark', // Color theme of tooltip\n effect: 'float', // float or fixed\n show: false,\n border: false,\n offset: {},\n extraClass: '',\n html: false,\n delayHide: 0,\n delayShow: 0,\n event: props.event || null,\n eventOff: props.eventOff || null,\n currentEvent: null, // Current mouse event\n currentTarget: null, // Current target of mouse event\n ariaProps: (0, _aria.parseAria)(props), // aria- and role attributes\n isEmptyTip: false,\n disable: false,\n originTooltip: null,\n isMultiline: false\n };\n\n _this.bind(['showTooltip', 'updateTooltip', 'hideTooltip', 'getTooltipContent', 'globalRebuild', 'globalShow', 'globalHide', 'onWindowResize', 'mouseOnToolTip']);\n\n _this.mount = true;\n _this.delayShowLoop = null;\n _this.delayHideLoop = null;\n _this.delayReshow = null;\n _this.intervalUpdateContent = null;\n return _this;\n }\n\n /**\n * For unify the bind and unbind listener\n */\n\n\n _createClass(ReactTooltip, [{\n key: 'bind',\n value: function bind(methodArray) {\n var _this2 = this;\n\n methodArray.forEach(function (method) {\n _this2[method] = _this2[method].bind(_this2);\n });\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n insecure = _props.insecure,\n resizeHide = _props.resizeHide;\n\n if (insecure) {\n this.setStyleHeader(); // Set the style to the <link>\n }\n this.bindListener(); // Bind listener for tooltip\n this.bindWindowEvents(resizeHide); // Bind global event for static method\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n var ariaProps = this.state.ariaProps;\n\n var newAriaProps = (0, _aria.parseAria)(props);\n\n var isChanged = Object.keys(newAriaProps).some(function (props) {\n return newAriaProps[props] !== ariaProps[props];\n });\n if (isChanged) {\n this.setState({ ariaProps: newAriaProps });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.mount = false;\n\n this.clearTimer();\n\n this.unbindListener();\n this.removeScrollListener();\n this.unbindWindowEvents();\n }\n\n /**\n * Return if the mouse is on the tooltip.\n * @returns {boolean} true - mouse is on the tooltip\n */\n\n }, {\n key: 'mouseOnToolTip',\n value: function mouseOnToolTip() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n /* old IE or Firefox work around */\n if (!this.tooltipRef.matches) {\n /* old IE work around */\n if (this.tooltipRef.msMatchesSelector) {\n this.tooltipRef.matches = this.tooltipRef.msMatchesSelector;\n } else {\n /* old Firefox work around */\n this.tooltipRef.matches = this.tooltipRef.mozMatchesSelector;\n }\n }\n return this.tooltipRef.matches(':hover');\n }\n return false;\n }\n /**\n * Pick out corresponded target elements\n */\n\n }, {\n key: 'getTargetArray',\n value: function getTargetArray(id) {\n var targetArray = void 0;\n if (!id) {\n targetArray = document.querySelectorAll('[data-tip]:not([data-for])');\n } else {\n var escaped = id.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n targetArray = document.querySelectorAll('[data-tip][data-for=\"' + escaped + '\"]');\n }\n // targetArray is a NodeList, convert it to a real array\n return (0, _nodeListToArray2.default)(targetArray);\n }\n\n /**\n * Bind listener to the target elements\n * These listeners used to trigger showing or hiding the tooltip\n */\n\n }, {\n key: 'bindListener',\n value: function bindListener() {\n var _this3 = this;\n\n var _props2 = this.props,\n id = _props2.id,\n globalEventOff = _props2.globalEventOff,\n isCapture = _props2.isCapture;\n\n var targetArray = this.getTargetArray(id);\n\n targetArray.forEach(function (target) {\n var isCaptureMode = _this3.isCapture(target);\n var effect = _this3.getEffect(target);\n if (target.getAttribute('currentItem') === null) {\n target.setAttribute('currentItem', 'false');\n }\n _this3.unbindBasicListener(target);\n\n if (_this3.isCustomEvent(target)) {\n _this3.customBindListener(target);\n return;\n }\n\n target.addEventListener('mouseenter', _this3.showTooltip, isCaptureMode);\n if (effect === 'float') {\n target.addEventListener('mousemove', _this3.updateTooltip, isCaptureMode);\n }\n target.addEventListener('mouseleave', _this3.hideTooltip, isCaptureMode);\n });\n\n // Global event to hide tooltip\n if (globalEventOff) {\n window.removeEventListener(globalEventOff, this.hideTooltip);\n window.addEventListener(globalEventOff, this.hideTooltip, isCapture);\n }\n\n // Track removal of targetArray elements from DOM\n this.bindRemovalTracker();\n }\n\n /**\n * Unbind listeners on target elements\n */\n\n }, {\n key: 'unbindListener',\n value: function unbindListener() {\n var _this4 = this;\n\n var _props3 = this.props,\n id = _props3.id,\n globalEventOff = _props3.globalEventOff;\n\n var targetArray = this.getTargetArray(id);\n targetArray.forEach(function (target) {\n _this4.unbindBasicListener(target);\n if (_this4.isCustomEvent(target)) _this4.customUnbindListener(target);\n });\n\n if (globalEventOff) window.removeEventListener(globalEventOff, this.hideTooltip);\n this.unbindRemovalTracker();\n }\n\n /**\n * Invoke this before bind listener and ummount the compont\n * it is necessary to invloke this even when binding custom event\n * so that the tooltip can switch between custom and default listener\n */\n\n }, {\n key: 'unbindBasicListener',\n value: function unbindBasicListener(target) {\n var isCaptureMode = this.isCapture(target);\n target.removeEventListener('mouseenter', this.showTooltip, isCaptureMode);\n target.removeEventListener('mousemove', this.updateTooltip, isCaptureMode);\n target.removeEventListener('mouseleave', this.hideTooltip, isCaptureMode);\n }\n }, {\n key: 'getTooltipContent',\n value: function getTooltipContent() {\n var _props4 = this.props,\n getContent = _props4.getContent,\n children = _props4.children;\n\n // Generate tooltip content\n\n var content = void 0;\n if (getContent) {\n if (Array.isArray(getContent)) {\n content = getContent[0] && getContent[0](this.state.originTooltip);\n } else {\n content = getContent(this.state.originTooltip);\n }\n }\n\n return (0, _getTipContent2.default)(this.state.originTooltip, children, content, this.state.isMultiline);\n }\n }, {\n key: 'isEmptyTip',\n value: function isEmptyTip(placeholder) {\n return typeof placeholder === 'string' && placeholder === '' || placeholder === null;\n }\n\n /**\n * When mouse enter, show the tooltip\n */\n\n }, {\n key: 'showTooltip',\n value: function showTooltip(e, isGlobalCall) {\n if (isGlobalCall) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement) return;\n }\n // Get the tooltip content\n // calculate in this phrase so that tip width height can be detected\n var _props5 = this.props,\n multiline = _props5.multiline,\n getContent = _props5.getContent;\n\n var originTooltip = e.currentTarget.getAttribute('data-tip');\n var isMultiline = e.currentTarget.getAttribute('data-multiline') || multiline || false;\n\n // If it is focus event or called by ReactTooltip.show, switch to `solid` effect\n var switchToSolid = e instanceof window.FocusEvent || isGlobalCall;\n\n // if it needs to skip adding hide listener to scroll\n var scrollHide = true;\n if (e.currentTarget.getAttribute('data-scroll-hide')) {\n scrollHide = e.currentTarget.getAttribute('data-scroll-hide') === 'true';\n } else if (this.props.scrollHide != null) {\n scrollHide = this.props.scrollHide;\n }\n\n // Make sure the correct place is set\n var desiredPlace = e.currentTarget.getAttribute('data-place') || this.props.place || 'top';\n var effect = switchToSolid && 'solid' || this.getEffect(e.currentTarget);\n var offset = e.currentTarget.getAttribute('data-offset') || this.props.offset || {};\n var result = (0, _getPosition2.default)(e, e.currentTarget, _reactDom2.default.findDOMNode(this), desiredPlace, desiredPlace, effect, offset);\n var place = result.isNewState ? result.newState.place : desiredPlace;\n\n // To prevent previously created timers from triggering\n this.clearTimer();\n\n var target = e.currentTarget;\n\n var reshowDelay = this.state.show ? target.getAttribute('data-delay-update') || this.props.delayUpdate : 0;\n\n var self = this;\n\n var updateState = function updateState() {\n self.setState({\n originTooltip: originTooltip,\n isMultiline: isMultiline,\n desiredPlace: desiredPlace,\n place: place,\n type: target.getAttribute('data-type') || self.props.type || 'dark',\n effect: effect,\n offset: offset,\n html: target.getAttribute('data-html') ? target.getAttribute('data-html') === 'true' : self.props.html || false,\n delayShow: target.getAttribute('data-delay-show') || self.props.delayShow || 0,\n delayHide: target.getAttribute('data-delay-hide') || self.props.delayHide || 0,\n delayUpdate: target.getAttribute('data-delay-update') || self.props.delayUpdate || 0,\n border: target.getAttribute('data-border') ? target.getAttribute('data-border') === 'true' : self.props.border || false,\n extraClass: target.getAttribute('data-class') || self.props.class || self.props.className || '',\n disable: target.getAttribute('data-tip-disable') ? target.getAttribute('data-tip-disable') === 'true' : self.props.disable || false,\n currentTarget: target\n }, function () {\n if (scrollHide) self.addScrollListener(self.state.currentTarget);\n self.updateTooltip(e);\n\n if (getContent && Array.isArray(getContent)) {\n self.intervalUpdateContent = setInterval(function () {\n if (self.mount) {\n var _getContent = self.props.getContent;\n\n var placeholder = (0, _getTipContent2.default)(originTooltip, '', _getContent[0](), isMultiline);\n var isEmptyTip = self.isEmptyTip(placeholder);\n self.setState({\n isEmptyTip: isEmptyTip\n });\n self.updatePosition();\n }\n }, getContent[1]);\n }\n });\n };\n\n // If there is no delay call immediately, don't allow events to get in first.\n if (reshowDelay) {\n this.delayReshow = setTimeout(updateState, reshowDelay);\n } else {\n updateState();\n }\n }\n\n /**\n * When mouse hover, updatetooltip\n */\n\n }, {\n key: 'updateTooltip',\n value: function updateTooltip(e) {\n var _this5 = this;\n\n var _state = this.state,\n delayShow = _state.delayShow,\n disable = _state.disable;\n var afterShow = this.props.afterShow;\n\n var placeholder = this.getTooltipContent();\n var delayTime = parseInt(delayShow, 10);\n var eventTarget = e.currentTarget || e.target;\n\n // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n if (this.mouseOnToolTip()) {\n return;\n }\n\n if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip\n var updateState = function updateState() {\n if (Array.isArray(placeholder) && placeholder.length > 0 || placeholder) {\n var isInvisible = !_this5.state.show;\n _this5.setState({\n currentEvent: e,\n currentTarget: eventTarget,\n show: true\n }, function () {\n _this5.updatePosition();\n if (isInvisible && afterShow) afterShow(e);\n });\n }\n };\n\n clearTimeout(this.delayShowLoop);\n if (delayShow) {\n this.delayShowLoop = setTimeout(updateState, delayTime);\n } else {\n updateState();\n }\n }\n\n /*\n * If we're mousing over the tooltip remove it when we leave.\n */\n\n }, {\n key: 'listenForTooltipExit',\n value: function listenForTooltipExit() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n this.tooltipRef.addEventListener('mouseleave', this.hideTooltip);\n }\n }\n }, {\n key: 'removeListenerForTooltipExit',\n value: function removeListenerForTooltipExit() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n this.tooltipRef.removeEventListener('mouseleave', this.hideTooltip);\n }\n }\n\n /**\n * When mouse leave, hide tooltip\n */\n\n }, {\n key: 'hideTooltip',\n value: function hideTooltip(e, hasTarget) {\n var _this6 = this;\n\n var _state2 = this.state,\n delayHide = _state2.delayHide,\n disable = _state2.disable;\n var afterHide = this.props.afterHide;\n\n var placeholder = this.getTooltipContent();\n if (!this.mount) return;\n if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip\n if (hasTarget) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement || !this.state.show) return;\n }\n\n var resetState = function resetState() {\n var isVisible = _this6.state.show;\n // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n if (_this6.mouseOnToolTip()) {\n _this6.listenForTooltipExit();\n return;\n }\n _this6.removeListenerForTooltipExit();\n\n _this6.setState({\n show: false\n }, function () {\n _this6.removeScrollListener();\n if (isVisible && afterHide) afterHide(e);\n });\n };\n\n this.clearTimer();\n if (delayHide) {\n this.delayHideLoop = setTimeout(resetState, parseInt(delayHide, 10));\n } else {\n resetState();\n }\n }\n\n /**\n * Add scroll eventlistener when tooltip show\n * automatically hide the tooltip when scrolling\n */\n\n }, {\n key: 'addScrollListener',\n value: function addScrollListener(currentTarget) {\n var isCaptureMode = this.isCapture(currentTarget);\n window.addEventListener('scroll', this.hideTooltip, isCaptureMode);\n }\n }, {\n key: 'removeScrollListener',\n value: function removeScrollListener() {\n window.removeEventListener('scroll', this.hideTooltip);\n }\n\n // Calculation the position\n\n }, {\n key: 'updatePosition',\n value: function updatePosition() {\n var _this7 = this;\n\n var _state3 = this.state,\n currentEvent = _state3.currentEvent,\n currentTarget = _state3.currentTarget,\n place = _state3.place,\n desiredPlace = _state3.desiredPlace,\n effect = _state3.effect,\n offset = _state3.offset;\n\n var node = _reactDom2.default.findDOMNode(this);\n var result = (0, _getPosition2.default)(currentEvent, currentTarget, node, place, desiredPlace, effect, offset);\n\n if (result.isNewState) {\n // Switch to reverse placement\n return this.setState(result.newState, function () {\n _this7.updatePosition();\n });\n }\n // Set tooltip position\n node.style.left = result.position.left + 'px';\n node.style.top = result.position.top + 'px';\n }\n\n /**\n * Set style tag in header\n * in this way we can insert default css\n */\n\n }, {\n key: 'setStyleHeader',\n value: function setStyleHeader() {\n var head = document.getElementsByTagName('head')[0];\n if (!head.querySelector('style[id=\"react-tooltip\"]')) {\n var tag = document.createElement('style');\n tag.id = 'react-tooltip';\n tag.innerHTML = _style2.default;\n /* eslint-disable */\n if (typeof __webpack_nonce__ !== 'undefined' && __webpack_nonce__) {\n tag.setAttribute('nonce', __webpack_nonce__);\n }\n /* eslint-enable */\n head.insertBefore(tag, head.firstChild);\n }\n }\n\n /**\n * CLear all kinds of timeout of interval\n */\n\n }, {\n key: 'clearTimer',\n value: function clearTimer() {\n clearTimeout(this.delayShowLoop);\n clearTimeout(this.delayHideLoop);\n clearTimeout(this.delayReshow);\n clearInterval(this.intervalUpdateContent);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this8 = this;\n\n var _state4 = this.state,\n extraClass = _state4.extraClass,\n html = _state4.html,\n ariaProps = _state4.ariaProps,\n disable = _state4.disable;\n\n var placeholder = this.getTooltipContent();\n var isEmptyTip = this.isEmptyTip(placeholder);\n var tooltipClass = (0, _classnames2.default)('__react_component_tooltip', { 'show': this.state.show && !disable && !isEmptyTip }, { 'border': this.state.border }, { 'place-top': this.state.place === 'top' }, { 'place-bottom': this.state.place === 'bottom' }, { 'place-left': this.state.place === 'left' }, { 'place-right': this.state.place === 'right' }, { 'type-dark': this.state.type === 'dark' }, { 'type-success': this.state.type === 'success' }, { 'type-warning': this.state.type === 'warning' }, { 'type-error': this.state.type === 'error' }, { 'type-info': this.state.type === 'info' }, { 'type-light': this.state.type === 'light' }, { 'allow_hover': this.props.delayUpdate }, { 'allow_click': this.props.clickable });\n\n var Wrapper = this.props.wrapper;\n if (ReactTooltip.supportedWrappers.indexOf(Wrapper) < 0) {\n Wrapper = ReactTooltip.defaultProps.wrapper;\n }\n\n if (html) {\n return _react2.default.createElement(Wrapper, _extends({ className: tooltipClass + ' ' + extraClass,\n id: this.props.id,\n ref: function ref(_ref) {\n return _this8.tooltipRef = _ref;\n }\n }, ariaProps, {\n 'data-id': 'tooltip',\n dangerouslySetInnerHTML: { __html: placeholder } }));\n } else {\n return _react2.default.createElement(\n Wrapper,\n _extends({ className: tooltipClass + ' ' + extraClass,\n id: this.props.id\n }, ariaProps, {\n ref: function ref(_ref2) {\n return _this8.tooltipRef = _ref2;\n },\n 'data-id': 'tooltip' }),\n placeholder\n );\n }\n }\n }]);\n\n return ReactTooltip;\n}(_react2.default.Component), _class2.propTypes = {\n children: _propTypes2.default.any,\n place: _propTypes2.default.string,\n type: _propTypes2.default.string,\n effect: _propTypes2.default.string,\n offset: _propTypes2.default.object,\n multiline: _propTypes2.default.bool,\n border: _propTypes2.default.bool,\n insecure: _propTypes2.default.bool,\n class: _propTypes2.default.string,\n className: _propTypes2.default.string,\n id: _propTypes2.default.string,\n html: _propTypes2.default.bool,\n delayHide: _propTypes2.default.number,\n delayUpdate: _propTypes2.default.number,\n delayShow: _propTypes2.default.number,\n event: _propTypes2.default.string,\n eventOff: _propTypes2.default.string,\n watchWindow: _propTypes2.default.bool,\n isCapture: _propTypes2.default.bool,\n globalEventOff: _propTypes2.default.string,\n getContent: _propTypes2.default.any,\n afterShow: _propTypes2.default.func,\n afterHide: _propTypes2.default.func,\n disable: _propTypes2.default.bool,\n scrollHide: _propTypes2.default.bool,\n resizeHide: _propTypes2.default.bool,\n wrapper: _propTypes2.default.string,\n clickable: _propTypes2.default.bool\n}, _class2.defaultProps = {\n insecure: true,\n resizeHide: true,\n wrapper: 'div',\n clickable: false\n}, _class2.supportedWrappers = ['div', 'span'], _class2.displayName = 'ReactTooltip', _temp)) || _class) || _class) || _class) || _class) || _class) || _class;\n\n/* export default not fit for standalone, it will exports {default:...} */\n\n\nmodule.exports = ReactTooltip;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (nodeList) {\n var length = nodeList.length;\n if (nodeList.hasOwnProperty) {\n return Array.prototype.slice.call(nodeList);\n }\n return new Array(length).fill().map(function (index) {\n return nodeList[index];\n });\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = '.__react_component_tooltip{border-radius:3px;display:inline-block;font-size:13px;left:-999em;opacity:0;padding:8px 21px;position:fixed;pointer-events:none;transition:opacity 0.3s ease-out;top:-999em;visibility:hidden;z-index:999}.__react_component_tooltip.allow_hover,.__react_component_tooltip.allow_click{pointer-events:auto}.__react_component_tooltip:before,.__react_component_tooltip:after{content:\"\";width:0;height:0;position:absolute}.__react_component_tooltip.show{opacity:0.9;margin-top:0px;margin-left:0px;visibility:visible}.__react_component_tooltip.type-dark{color:#fff;background-color:#222}.__react_component_tooltip.type-dark.place-top:after{border-top-color:#222;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-dark.place-bottom:after{border-bottom-color:#222;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-dark.place-left:after{border-left-color:#222;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-dark.place-right:after{border-right-color:#222;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-dark.border{border:1px solid #fff}.__react_component_tooltip.type-dark.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-dark.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-dark.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-dark.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-success{color:#fff;background-color:#8DC572}.__react_component_tooltip.type-success.place-top:after{border-top-color:#8DC572;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-success.place-bottom:after{border-bottom-color:#8DC572;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-success.place-left:after{border-left-color:#8DC572;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-success.place-right:after{border-right-color:#8DC572;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-success.border{border:1px solid #fff}.__react_component_tooltip.type-success.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-success.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-success.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-success.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-warning{color:#fff;background-color:#F0AD4E}.__react_component_tooltip.type-warning.place-top:after{border-top-color:#F0AD4E;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-warning.place-bottom:after{border-bottom-color:#F0AD4E;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-warning.place-left:after{border-left-color:#F0AD4E;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-warning.place-right:after{border-right-color:#F0AD4E;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-warning.border{border:1px solid #fff}.__react_component_tooltip.type-warning.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-warning.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-warning.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-warning.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-error{color:#fff;background-color:#BE6464}.__react_component_tooltip.type-error.place-top:after{border-top-color:#BE6464;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-error.place-bottom:after{border-bottom-color:#BE6464;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-error.place-left:after{border-left-color:#BE6464;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-error.place-right:after{border-right-color:#BE6464;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-error.border{border:1px solid #fff}.__react_component_tooltip.type-error.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-error.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-error.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-error.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-info{color:#fff;background-color:#337AB7}.__react_component_tooltip.type-info.place-top:after{border-top-color:#337AB7;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-info.place-bottom:after{border-bottom-color:#337AB7;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-info.place-left:after{border-left-color:#337AB7;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-info.place-right:after{border-right-color:#337AB7;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-info.border{border:1px solid #fff}.__react_component_tooltip.type-info.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-info.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-info.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-info.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-light{color:#222;background-color:#fff}.__react_component_tooltip.type-light.place-top:after{border-top-color:#fff;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-light.place-bottom:after{border-bottom-color:#fff;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-light.place-left:after{border-left-color:#fff;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-light.place-right:after{border-right-color:#fff;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-light.border{border:1px solid #222}.__react_component_tooltip.type-light.border.place-top:before{border-top:8px solid #222}.__react_component_tooltip.type-light.border.place-bottom:before{border-bottom:8px solid #222}.__react_component_tooltip.type-light.border.place-left:before{border-left:8px solid #222}.__react_component_tooltip.type-light.border.place-right:before{border-right:8px solid #222}.__react_component_tooltip.place-top{margin-top:-10px}.__react_component_tooltip.place-top:before{border-left:10px solid transparent;border-right:10px solid transparent;bottom:-8px;left:50%;margin-left:-10px}.__react_component_tooltip.place-top:after{border-left:8px solid transparent;border-right:8px solid transparent;bottom:-6px;left:50%;margin-left:-8px}.__react_component_tooltip.place-bottom{margin-top:10px}.__react_component_tooltip.place-bottom:before{border-left:10px solid transparent;border-right:10px solid transparent;top:-8px;left:50%;margin-left:-10px}.__react_component_tooltip.place-bottom:after{border-left:8px solid transparent;border-right:8px solid transparent;top:-6px;left:50%;margin-left:-8px}.__react_component_tooltip.place-left{margin-left:-10px}.__react_component_tooltip.place-left:before{border-top:6px solid transparent;border-bottom:6px solid transparent;right:-8px;top:50%;margin-top:-5px}.__react_component_tooltip.place-left:after{border-top:5px solid transparent;border-bottom:5px solid transparent;right:-6px;top:50%;margin-top:-4px}.__react_component_tooltip.place-right{margin-left:10px}.__react_component_tooltip.place-right:before{border-top:6px solid transparent;border-bottom:6px solid transparent;left:-8px;top:50%;margin-top:-5px}.__react_component_tooltip.place-right:after{border-top:5px solid transparent;border-bottom:5px solid transparent;left:-6px;top:50%;margin-top:-4px}.__react_component_tooltip .multi-line{display:block;padding:2px 0px;text-align:center}';","import * as React from 'react';\nimport ReactTooltip from 'react-tooltip';\n\nexport interface ITooltipProps {\n x?: number;\n y?: number;\n content?: JSX.Element;\n // unique ids are needed if we want to show multiple tooltip objects at once\n id?: string;\n}\n\n/*\n * Custom tooltip component to render on top of any svg component.\n * It creates an invisible pixel and uses react-tooltip library\n * to point to it.\n */\nexport default class Tooltip extends React.Component<ITooltipProps> {\n private tooltipTarget: HTMLDivElement;\n\n public componentDidUpdate(prevProps: ITooltipProps) {\n const target = this.tooltipTarget;\n if (prevProps.content && !this.props.content) {\n ReactTooltip.hide(target);\n } else if (this.props.content) {\n ReactTooltip.show(target);\n }\n }\n\n public render() {\n const { x, y, content, id = 'tooltip' } = this.props;\n const tooltipTargetStyle = {\n left: x ? x : 0,\n top: y ? y : 0,\n height: 1,\n width: 1,\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 10,\n } as React.CSSProperties;\n\n const containerStyle = {\n pointerEvents: 'none',\n } as React.CSSProperties;\n\n return (\n <div style={containerStyle}>\n <div data-tip={true} data-for={id} style={tooltipTargetStyle} ref={(el) => (this.tooltipTarget = el)} />\n <ReactTooltip id={id} type=\"light\" border={true}>\n {content ? content : null}\n </ReactTooltip>\n </div>\n );\n }\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": formatDecimal,\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(nb),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\n\nexport default function() {\n return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import { quantile } from 'd3-array';\nimport { format } from 'd3-format';\nimport { scaleUtc } from 'd3-scale';\nimport { DateTime } from 'luxon';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nimport { ISummaryStatistics } from './semiotic.service';\n\n/*\nFormatter for any metric values. If the value is not a valid number (typically NaN),\nwe want to display \"N/A\" to highlight that there was no valid measurement.\nElse, the format is made as close as possible to Atlas graph formats:\nSI notation is used when the exponent is between -24 and 24 (inclusive),\nand exponential notation otherwise. Both with 3 digits of precision\n*/\nexport const formatMetricValue = (value: any) => {\n if (typeof value !== 'number' || isNaN(value)) {\n return 'N/A';\n } else if (Math.abs(value) >= Math.pow(10, 25)) {\n return format('-.3~e')(value);\n } else {\n return format('-.3~s')(value);\n }\n};\n\nconst fromMillis = (millis: number) => {\n const luxonOpts = SETTINGS.feature.displayTimestampsInUserLocalTime ? undefined : { zone: SETTINGS.defaultTimeZone };\n return DateTime.fromMillis(millis, luxonOpts);\n};\n\n/*\nFormatter for timestamps. If the timestamp value is a date boundary (e.g. 04-01-2019 00:00:00),\nan additional date label is returned, otherwise only a single label showing hour & minute is returned\n*/\nexport const dateTimeTickFormatter = (d: number) => {\n const datetime = fromMillis(d);\n if (datetime.hour === 0 && datetime.minute === 0) {\n return [datetime.toFormat('HH:mm'), datetime.toFormat('MMM DD')];\n } else {\n return [datetime.toFormat('HH:mm')];\n }\n};\n\n// function to choose the ideal tick values on the x-axis of a timeseries\n// D3 has a smart tick generator, e.g. it'll tend to show midnight if the data crosses\n// date boundaries. This way we can label date change as date, and other ticks as HH:mm\nexport const calculateDateTimeTicks = (millisSet: number[]) => {\n const minMillis = millisSet[0];\n const maxMillis = millisSet[millisSet.length - 1];\n\n /*\n * since d3 scale doesn't support custom timezone, we have to:\n * 1)shift the UTC domain based on the tz,\n * 2)have d3 calculate the ideal tick values as usual, and\n * 3)shift back the result\n */\n const offsetMillis = fromMillis(minMillis).offset * 60000;\n const minMillisShifted = minMillis + offsetMillis;\n const maxMillisShifted = maxMillis + offsetMillis;\n const scale = scaleUtc().domain([new Date(minMillisShifted), new Date(maxMillisShifted)]);\n const ticks = scale.ticks(6).map((d: Date) => d.valueOf() - offsetMillis);\n return ticks;\n};\n\nexport const calculateSummaryStatistics = (values: number[]): ISummaryStatistics => {\n const output = {\n min: {\n value: quantile(values, 0.0),\n label: 'Minimum',\n },\n q1area: {\n value: quantile(values, 0.25),\n label: '25th %-ile',\n },\n median: {\n value: quantile(values, 0.5),\n label: 'Median',\n },\n q3area: {\n value: quantile(values, 0.75),\n label: '75th %-ile',\n },\n max: {\n value: quantile(values, 1.0),\n label: 'Maximum',\n },\n };\n return output;\n};\n","import { extent } from 'd3-array';\nimport { Force, Node } from 'labella';\nimport * as React from 'react';\nimport {\n Annotation,\n IAnnotationType,\n IOrFrameHoverArgs,\n IOrGroup,\n IOrSummaryPiece,\n ISemioticAnnotationArgs,\n OrdinalFrame,\n} from 'semiotic';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './boxplot.less';\n\ninterface IChartDataPoint {\n value: number;\n group: string;\n color: string;\n}\n\ninterface IHoverData {\n value: number;\n label: string;\n}\n\ninterface IHoverDataGroup {\n [group: string]: IHoverData[];\n}\n\ninterface IAnnotationData {\n group: string;\n summaryKeys: string[];\n type: string;\n}\n\ninterface IBoxPlotState {\n tooltip: ITooltip;\n}\n\nexport default class BoxPlot extends React.Component<ISemioticChartProps, IBoxPlotState> {\n public state: IBoxPlotState = {\n tooltip: null,\n };\n\n private margin: IMargin = {\n top: 10,\n bottom: 20,\n left: 60,\n right: 40,\n };\n\n private decorateData = (dataPoints: number[], group: string): IChartDataPoint[] => {\n return dataPoints.map((dp) => ({\n group,\n value: dp,\n color: vizConfig.colors[group],\n }));\n };\n\n private generateChartData = () => {\n const { metricSetPair } = this.props;\n const filterFunc = (v: IChartDataPoint) => typeof v.value === 'number';\n const baselineInput = this.decorateData(metricSetPair.values.control, 'baseline');\n const canaryInput = this.decorateData(metricSetPair.values.experiment, 'canary');\n const chartData = baselineInput.concat(canaryInput).filter(filterFunc);\n return chartData;\n };\n\n // Generate tooltip content that shows the summary statistics of a boxplot\n private createChartHoverHandler = () => {\n return (d: IOrFrameHoverArgs<IChartDataPoint> & IOrSummaryPiece): void => {\n if (d && d.type === 'frame-hover') {\n const points = d.points;\n const data: IHoverDataGroup = {\n baseline: [],\n canary: [],\n };\n\n points.forEach((p: IOrSummaryPiece) => {\n data[p.key].push({ label: p.label, value: p.value });\n });\n\n const summaryLabels = data.baseline.map((b: IHoverData) => b.label);\n const summaryKeysColumn = [\n <div className={'header'} key={'summary'}>\n Summary\n </div>,\n ...summaryLabels.map((label: string) => {\n return <div key={label}>{label}</div>;\n }),\n ];\n\n const baselineColumn = [\n <div className={'header'} key={'baseline'}>\n <CircleIcon group={'baseline'} />\n Baseline\n </div>,\n data.baseline.map((hd: IHoverData, i: number) => {\n return <div key={i}>{utils.formatMetricValue(hd.value)}</div>;\n }),\n ];\n\n const canaryColumn = [\n <div className=\"header\" key=\"canary\">\n <CircleIcon group=\"canary\" />\n Canary\n </div>,\n data.canary.map((hd: IHoverData, i: number) => {\n return <div key={i}>{utils.formatMetricValue(hd.value)}</div>;\n }),\n ];\n\n const tooltipContent = (\n <div className=\"tooltip-container\">\n <div className=\"columns\">\n <div className=\"column\">{summaryKeysColumn}</div>\n <div className=\"column\">{baselineColumn}</div>\n <div className=\"column\">{canaryColumn}</div>\n </div>\n </div>\n );\n\n this.setState({\n tooltip: {\n content: tooltipContent,\n x: d.x + this.margin.left,\n y: d.y + this.margin.top,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n private defineAnnotations = () => {\n return ['baseline', 'canary'].map((g: string) => {\n return {\n type: 'summary-custom',\n group: g,\n summaryKeys: ['q1area', 'median', 'q3area'],\n };\n });\n };\n\n private customAnnotationFunction = (args: ISemioticAnnotationArgs<IAnnotationData, IOrGroup<IChartDataPoint>>) => {\n const {\n d,\n orFrameState: { pieceDataXY },\n categories,\n } = args;\n\n if (d.type === 'summary-custom') {\n // If no data exists for this group, don't return any annotation elements\n if (!categories[d.group]) {\n return null;\n }\n\n const summaryData = pieceDataXY.filter((sd: IOrSummaryPiece) => sd.key === d.group);\n const boxPlotWidth = categories[d.group].width;\n const statLabelMap: { [stat: string]: string } = {\n median: 'median',\n q1area: '25th %-ile',\n q3area: '75th %-ile',\n };\n const createNoteElement = (posY: number, dataPoint: IOrSummaryPiece) => {\n const name = dataPoint.summaryPieceName;\n const label = statLabelMap[name];\n const noteData = {\n x: dataPoint.x,\n y: posY,\n dx: boxPlotWidth / 2,\n dy: 0,\n note: {\n label: `${label}: ${utils.formatMetricValue(dataPoint.value)}`,\n wrap: 100,\n lineType: 'vertical',\n align: 'middle',\n orientation: 'topBottom',\n padding: 10,\n },\n className: 'boxplot-annotation',\n };\n return <Annotation key={name} noteData={noteData} />;\n };\n\n const nodes = d.summaryKeys\n .map((summaryKey: string) => {\n const pieceData = summaryData.find((sd: IOrSummaryPiece) => sd.summaryPieceName === summaryKey);\n return pieceData ? new Node<IOrSummaryPiece>(pieceData.y, 20, pieceData) : null;\n })\n .map((v: null | Node<IOrSummaryPiece>) => v) as Array<Node<IOrSummaryPiece>>;\n\n const forceOptions = {\n minPos: this.margin.top,\n maxPos: vizConfig.height - this.margin.bottom,\n };\n const annotations = new Force<IOrSummaryPiece>(forceOptions)\n .nodes(nodes)\n .compute()\n .nodes()\n .map((n: Node<IOrSummaryPiece>) => createNoteElement(n.currentPos, n.data));\n\n return annotations;\n } else {\n return null;\n }\n };\n\n private getChartProps = () => {\n const { parentWidth } = this.props;\n const chartData = this.generateChartData();\n\n return {\n size: [parentWidth, vizConfig.height],\n margin: this.margin,\n projection: 'vertical',\n summaryType: 'boxplot',\n oLabel: false,\n oPadding: 160,\n style: (d: IChartDataPoint) => {\n return {\n fill: d.color,\n fillOpacity: 0.7,\n };\n },\n summaryStyle: (d: IChartDataPoint) => {\n return {\n fill: d.color,\n fillOpacity: 0.4,\n stroke: '#6a6a6a',\n strokeWidth: 2,\n };\n },\n pieceClass: (d: IChartDataPoint) => `piece ${d.group}`,\n type: {\n type: 'swarm',\n r: 3,\n iterations: 50,\n },\n rExtent: extent(chartData.map((o) => o.value)),\n customHoverBehavior: this.createChartHoverHandler(),\n hoverAnnotation: false,\n annotations: this.defineAnnotations(),\n summaryHoverAnnotation: [] as IAnnotationType[],\n data: chartData,\n oAccessor: (d: IChartDataPoint) => d.group,\n rAccessor: (d: IChartDataPoint) => d.value,\n svgAnnotationRules: this.customAnnotationFunction,\n summaryClass: 'boxplot-summary',\n axis: {\n orient: 'left',\n label: 'metric value',\n tickFormat: (d: number) => utils.formatMetricValue(d),\n },\n };\n };\n\n public render() {\n const { metricSetPair } = this.props;\n return (\n <div className=\"boxplot\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend />\n <div className=\"graph-container\">\n <div className=\"boxplot-chart\">\n <OrdinalFrame {...this.getChartProps()} />\n </div>\n <Tooltip {...this.state.tooltip} />\n </div>\n </div>\n );\n }\n}\n","import { extent, histogram } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport * as React from 'react';\nimport {\n Annotation,\n IAnnotationType,\n IOrFrameHoverArgs,\n IOrGroup,\n IOrPiece,\n IOrXyData,\n ISemioticAnnotationArgs,\n OrdinalFrame,\n} from 'semiotic';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './histogram.less';\n\ninterface IInputDataPoint {\n value: number;\n group: string;\n}\n\ninterface IChartDataPoint {\n group: string;\n count: number;\n x0: number;\n x1: number;\n}\n\ninterface IAnnotationData extends IChartDataPoint {\n type: string;\n}\n\ninterface IHistogramState {\n tooltip: ITooltip;\n}\n\nexport default class Histogram extends React.Component<ISemioticChartProps, IHistogramState> {\n public state: IHistogramState = {\n tooltip: null,\n };\n\n private margin: IMargin = {\n top: 20,\n bottom: 20,\n left: 60,\n right: 10,\n };\n\n private decorateData = (dataPoints: number[], group: string): IInputDataPoint[] => {\n return dataPoints.map((dp) => ({\n group,\n value: dp,\n }));\n };\n\n /*\n * Semiotic actually supports histogram as a \"summary type\" out of the box, but the customization is\n * currently limited (e.g. it can't display the y-axis ticks & labels)\n * Hence we're manually generating histogram data using D3 and display it as\n * a grouped bar chart in semiotic\n */\n private generateChartData = () => {\n const { metricSetPair } = this.props;\n const filterFunc = (v: IInputDataPoint) => typeof v.value === 'number';\n const baselineInput = this.decorateData(metricSetPair.values.control, 'baseline');\n const canaryInput = this.decorateData(metricSetPair.values.experiment, 'canary');\n const combinedInput = baselineInput.concat(canaryInput).filter(filterFunc);\n\n const x = scaleLinear()\n .domain(extent(combinedInput.map((o) => o.value)))\n .nice();\n const domain = x.domain() as [number, number];\n\n // create histogram bins based on the combined data points\n const histogramData = histogram<IInputDataPoint, number>()\n .domain(domain)\n .value((d: IInputDataPoint) => d.value)(combinedInput);\n\n const chartData: IChartDataPoint[] = [];\n\n // Convert it to ordinal data format for bar chart in semiotic\n histogramData.forEach((h) => {\n const { x0, x1 } = h;\n const baselineBin = { group: 'baseline', x0, x1, count: 0 };\n const canaryBin = { group: 'canary', x0, x1, count: 0 };\n h.forEach((d) => (d.group === 'baseline' ? baselineBin.count++ : canaryBin.count++));\n chartData.push(baselineBin);\n chartData.push(canaryBin);\n });\n\n return chartData;\n };\n\n // Function factory to handle hover event\n private createChartHoverHandler = (chartData: IChartDataPoint[]) => {\n return (d: IOrFrameHoverArgs<IChartDataPoint>): void => {\n if (d && d.type === 'column-hover') {\n const x1Max: number = Math.max(...chartData.map((cd: IChartDataPoint) => cd.x1));\n const xyData = d.column.xyData;\n const x = xyData[1].xy.x + this.margin.left;\n const halfHeight1 = xyData[0].xy.height / 2;\n const halfHeight2 = xyData[1].xy.height / 2;\n const y = vizConfig.height - this.margin.bottom - Math.min(halfHeight1, halfHeight2);\n const { x0, x1 } = d.summary[0].data;\n const tooltipRows = d.summary.map((s: IOrPiece<IChartDataPoint>) => {\n const { group, count } = s.data;\n const valueStyle = {\n fontWeight: 'bold',\n } as React.CSSProperties;\n\n return (\n <div key={group}>\n <CircleIcon group={group} />\n <span>{` ${group} count: `}</span>\n <span style={valueStyle}>{count}</span>\n </div>\n );\n });\n\n let label = `For metric value more than / equal to ${utils.formatMetricValue(x0)} `;\n label +=\n x1 === x1Max\n ? `and less than / equal to ${utils.formatMetricValue(x1)}`\n : `and less than ${utils.formatMetricValue(x1)}`;\n\n const tooltipContent = (\n <div>\n <div>{label}</div>\n {tooltipRows}\n </div>\n );\n\n this.setState({\n tooltip: {\n content: tooltipContent,\n x,\n y,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n // generate bar value annotations object\n private defineAnnotations = (chartData: IChartDataPoint[]) => {\n const annotations = [] as IAnnotationData[];\n chartData.forEach((d: IChartDataPoint) => {\n if (d.count > 0) {\n annotations.push({\n type: 'bar-value-custom',\n ...d,\n });\n }\n });\n return annotations;\n };\n\n // function to actually create the JSX elements based on the annotation object\n private customAnnotationFunction = (\n args: ISemioticAnnotationArgs<IAnnotationData, IOrGroup<IChartDataPoint>>,\n ): JSX.Element | null => {\n const { d, i, categories } = args;\n if (d.type === 'bar-value-custom') {\n const { x, y, width } = categories[d.x1].xyData.find(\n (c: IOrXyData<IChartDataPoint>) => c.piece.data.group === d.group,\n ).xy;\n const noteData = {\n x: x + width / 2,\n y,\n nx: x + width / 2,\n ny: y - 1,\n note: {\n label: `${d.count}`,\n wrap: 100,\n align: 'middle',\n orientation: 'topBottom',\n padding: 0,\n color: vizConfig.colors[d.group],\n lineType: 'horizontal',\n },\n className: `bar-annotation`,\n };\n return <Annotation key={i} noteData={noteData} />;\n } else {\n return null;\n }\n };\n\n private getChartProps = () => {\n const { parentWidth } = this.props;\n const chartData = this.generateChartData();\n\n return {\n size: [parentWidth, vizConfig.height],\n margin: this.margin,\n projection: 'vertical',\n type: 'clusterbar',\n oLabel: (v: string) => <text textAnchor=\"middle\">{utils.formatMetricValue(parseFloat(v))}</text>,\n oPadding: 20,\n oAccessor: (d: IChartDataPoint) => d.x1,\n style: (d: IChartDataPoint) => {\n return {\n fill: vizConfig.colors[d.group],\n strokeWidth: 1,\n stroke: vizConfig.colors.background,\n strokeOpacity: 1,\n };\n },\n customHoverBehavior: this.createChartHoverHandler(chartData),\n data: this.generateChartData(),\n axis: [\n {\n orient: 'left',\n label: 'measurement count',\n tickFormat: (d: number) => (d === 0 ? null : Math.abs(d)),\n },\n ],\n rAccessor: (d: IChartDataPoint) => d.count,\n annotations: this.defineAnnotations(chartData),\n svgAnnotationRules: this.customAnnotationFunction,\n hoverAnnotation: [] as IAnnotationType[],\n };\n };\n\n public render() {\n const { metricSetPair } = this.props;\n\n return (\n <div className=\"histogram\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend />\n <div className=\"graph-container\">\n <div className=\"canary-chart\">\n <OrdinalFrame {...this.getChartProps()} />\n </div>\n <Tooltip {...this.state.tooltip} />\n </div>\n </div>\n );\n }\n}\n","import * as React from 'react';\n\nimport { vizConfig } from './config';\nimport './noValidDataSign.less';\n\nexport default () => (\n <div style={{ height: vizConfig.height }} className=\"no-data-sign\">\n No Valid Data is Available for This Metric\n </div>\n);\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import * as React from 'react';\n\nimport * as utils from './utils';\n\nexport interface ICustomAxisTickLabel {\n millis: number;\n}\n\n// custom labels as we want two label rows when showing date + hour at midnight\nexport default ({ millis }: ICustomAxisTickLabel) => {\n const text = utils.dateTimeTickFormatter(millis).map((s: string, i: number) => (\n <text textAnchor={'middle'} className={'axis-label'} key={i}>\n {s}\n </text>\n ));\n return <g className={'axis-label'}>{text}</g>;\n};\n","import { scaleUtc } from 'd3-scale';\nimport * as React from 'react';\nimport { Axis } from 'semiotic';\n\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport { IMargin } from './semiotic.service';\nimport * as utils from './utils';\n\nimport './secondaryTSXAxis.less';\n\ninterface ISecondaryTSXAxisProps {\n margin: IMargin;\n width: number;\n millisSet: number[];\n axisLabel?: string;\n bottomOffset: number;\n}\n\n/*\n * Secondary X Axis for Time Series Graph\n * Used when canary and baseline have different start time. We can overlay this axis component\n * on the main graph component\n */\nexport default class SecondaryTSXAxis extends React.Component<ISecondaryTSXAxisProps> {\n public render() {\n const { margin, width, millisSet, axisLabel, bottomOffset } = this.props;\n\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight } = vizConfig.timeSeries;\n\n const extent = [millisSet[0], millisSet[millisSet.length - 1]].map((ms: number) => new Date(ms));\n const totalAxisHeight = axisTickLabelHeight + axisTickLineHeight + (axisLabel ? axisLabelHeight : 0);\n const netWidth = width - margin.left - margin.right;\n const range = [0, netWidth];\n const containerStyle = {\n bottom: bottomOffset,\n };\n\n const svgWrapperStyle = {\n transform: `translateX(${margin.left}px)`,\n };\n return (\n <svg className=\"axis secondary-ts-x-axis\" width={width} height={totalAxisHeight} style={containerStyle}>\n <g className=\"wrapper\" style={svgWrapperStyle}>\n <Axis\n className=\"x axis bottom canary-dual-axis\"\n size={[netWidth, axisTickLineHeight]}\n scale={scaleUtc().domain(extent).range(range)}\n orient=\"bottom\"\n label=\"Canary\"\n tickValues={utils.calculateDateTimeTicks(millisSet)}\n tickFormat={(d: number) => <CustomAxisTickLabel millis={d} />}\n />\n </g>\n </svg>\n );\n }\n}\n","import { scaleUtc } from 'd3-scale';\nimport { curveStepAfter } from 'd3-shape';\nimport * as React from 'react';\nimport { XYFrame } from 'semiotic';\n\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport SecondaryTSXAxis from './secondaryTSXAxis';\nimport { IMargin, ISemioticChartProps } from './semiotic.service';\nimport * as utils from './utils';\n\nimport './differenceArea.less';\n\ninterface IDataPoint {\n timestampMillis: number;\n value: number;\n}\n\ninterface IChartDataSet {\n label: string;\n color: string;\n coordinates: IDataPoint[];\n}\n\ninterface IInterimDataSet {\n timestamp: number;\n canary: number | string;\n baseline: number | string;\n}\n\ninterface IDifferenceAreaProps extends ISemioticChartProps {\n millisSetBaseline: number[];\n}\n\n/*\n * Supplemental visualization in the time series view to highlight\n * Canary difference to baseline at any given timestamp\n */\nexport default class DifferenceArea extends React.Component<IDifferenceAreaProps> {\n private margin: IMargin = {\n left: 60,\n right: 20,\n top: 8,\n };\n\n private chartHeight = 40; // chart height not including axes height\n private headerHeight = 17;\n\n private getChartData = () => {\n const { metricSetPair } = this.props;\n const {\n values: { experiment, control },\n scopes,\n } = metricSetPair;\n\n const stepMillis = scopes.control.stepMillis;\n const maxDataPoints = Math.max(experiment.length, control.length);\n\n // Align data sets in case canary & baseline have different lengths and/or starting time\n const intDataSet: IInterimDataSet[] = Array(maxDataPoints)\n .fill(0)\n .map((_, i) => {\n const e = experiment[i];\n const c = control[i];\n return {\n timestamp: scopes.control.startTimeMillis + i * stepMillis,\n canary: e,\n baseline: c,\n };\n });\n\n const baselineReferenceDataPoints: IDataPoint[] = intDataSet.map((ds: IInterimDataSet) => ({\n timestampMillis: ds.timestamp,\n value: 0,\n }));\n\n const differenceDataPoints: IDataPoint[] = intDataSet.map((ds: IInterimDataSet) => ({\n timestampMillis: ds.timestamp,\n value: typeof ds.canary === 'number' && typeof ds.baseline === 'number' ? ds.canary - ds.baseline : 0,\n }));\n\n return {\n chartData: [\n {\n label: 'difference',\n color: vizConfig.colors.canary,\n coordinates: differenceDataPoints,\n },\n {\n label: 'baselineReference',\n color: vizConfig.colors.baseline,\n coordinates: baselineReferenceDataPoints,\n },\n ],\n };\n };\n\n private getSecondaryAxis = (millisOffset: number, millisSetBaseline: number[]) => {\n const { parentWidth } = this.props;\n const millisSetCanary = millisSetBaseline.map((ms: number) => ms + millisOffset);\n\n return (\n <SecondaryTSXAxis\n margin={{ left: this.margin.left, right: this.margin.right, top: 0, bottom: 0 }}\n width={parentWidth}\n millisSet={millisSetCanary}\n axisLabel={'canary'}\n bottomOffset={0}\n />\n );\n };\n\n private getXAxisTotalHeight = (shouldUseSecondaryXAxis: boolean) => {\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight } = vizConfig.timeSeries;\n\n return shouldUseSecondaryXAxis\n ? 2 * (axisLabelHeight + axisTickLabelHeight) + axisTickLineHeight\n : axisTickLabelHeight;\n };\n\n public render() {\n const { metricSetPair, parentWidth, millisSetBaseline } = this.props;\n\n /*\n * Generate the data needed for the graph components\n */\n const { scopes } = metricSetPair;\n const { chartData } = this.getChartData();\n const millisOffset = scopes.experiment.startTimeMillis - scopes.control.startTimeMillis;\n const shouldUseSecondaryXAxis = millisOffset !== 0;\n\n /*\n * Build the visualization components\n */\n const xAxisTotalHeight = this.getXAxisTotalHeight(shouldUseSecondaryXAxis);\n const computedConfig = {\n lines: chartData,\n size: [parentWidth, this.chartHeight + xAxisTotalHeight],\n margin: { ...this.margin, bottom: xAxisTotalHeight },\n lineType: {\n type: 'area',\n interpolator: curveStepAfter,\n },\n lineStyle: (ds: IChartDataSet) =>\n ds.label === 'difference'\n ? {\n fill: ds.color,\n fillOpacity: 0.6,\n }\n : {\n stroke: ds.color,\n strokeOpacity: 1,\n strokeWidth: 2,\n strokeDasharray: 5,\n },\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillis),\n yAccessor: 'value',\n xScaleType: scaleUtc(),\n axes: [\n {\n orient: 'left',\n tickFormat: () => `\\u0394 = 0`, // Δ = 0\n tickValues: [0],\n },\n {\n orient: 'bottom',\n tickValues: utils.calculateDateTimeTicks(millisSetBaseline),\n tickFormat: (d: number) => <CustomAxisTickLabel millis={d} />,\n label: shouldUseSecondaryXAxis ? 'Baseline' : undefined,\n className: shouldUseSecondaryXAxis ? 'baseline-dual-axis' : '',\n },\n ],\n xExtent: [millisSetBaseline[0], millisSetBaseline[millisSetBaseline.length - 1]],\n };\n\n return (\n <div className=\"difference-area\">\n <div className=\"chart-title\" style={{ height: this.headerHeight }}>\n Canary Value Differences from Baseline\n </div>\n <XYFrame {...computedConfig} />\n {shouldUseSecondaryXAxis ? this.getSecondaryAxis(millisOffset, millisSetBaseline) : null}\n </div>\n );\n }\n}\n","import classNames from 'classnames';\nimport { scaleUtc } from 'd3-scale';\nimport { curveStepAfter } from 'd3-shape';\nimport { IMetricSetPair } from 'kayenta/domain/IMetricSetPair';\nimport * as React from 'react';\nimport { IMinimapProps, IXYFrameHoverBaseArgs, IXYFrameProps, MinimapXYFrame, XYFrame } from 'semiotic';\n\nimport { SETTINGS, timestamp } from '@spinnaker/core';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport DifferenceArea from './differenceArea';\nimport SecondaryTSXAxis from './secondaryTSXAxis';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './timeSeries.less';\n\nconst { defaultTimeZone } = SETTINGS;\n\ninterface IDataPoint {\n value: number | null;\n timestampMillisActual: number;\n timestampMillisNormalizedMain: number;\n timestampMillisNormalizedMinimap: number;\n}\n\ninterface IChartDataSet {\n color: string;\n label: string;\n coordinates: IDataPoint[];\n coordinatesUnfiltered: IDataPoint[];\n}\n\ninterface IChartData {\n dataSets: IChartDataSet[];\n xExtentNormalizedMinimap: number[];\n xExtentNormalizedMain: number[];\n millisSetNormalizedMain: number[];\n millisSetNormalizedMinimap: number[];\n}\n\ninterface ITimeSeriesState {\n tooltip: ITooltip;\n userBrushExtent: Date[] | null;\n showGroup: { [group: string]: boolean };\n graphs: { [graph: string]: JSX.Element };\n}\n\ninterface ITooltipDataPoint {\n color: string;\n label: string;\n value: number | undefined;\n ts: number;\n}\n\ninterface IDataSetsAttributes {\n startTimeMillisOffset: number;\n maxDataCount: number;\n shouldDisplayMinimap: boolean;\n shouldUseSecondaryXAxis: boolean;\n}\n\n/*There are 3 vizualisations inside this component:\n1. The main Timeseries chart\n2. The minimap chart for users to zoom/ pan the main timeseries. Only show this if there are many data points\n3. The difference chart that displays the diff between canary and baseline\n*/\nexport default class TimeSeries extends React.Component<ISemioticChartProps, ITimeSeriesState> {\n public state: ITimeSeriesState = {\n tooltip: null,\n userBrushExtent: null,\n showGroup: {\n baseline: true,\n canary: true,\n },\n graphs: {\n // a standalone timeseries chart if data points are few, otherwise it also includes a brushable/ zoomable minimap\n line: null,\n // graph that shows the delta between canary and baseline\n differenceArea: null,\n },\n };\n\n private mainMinimapHeight = 320; // total height of the main & minimap (if applicable)\n\n private marginMain: IMargin = {\n top: 10,\n left: 60,\n right: 20,\n };\n\n private marginMinimap: IMargin = {\n top: 0,\n bottom: 0,\n left: 60,\n right: 20,\n };\n\n public componentDidMount() {\n this.createGraphs();\n }\n\n // Only reconstruct the graph components when necessary\n public componentDidUpdate(prevProps: ISemioticChartProps, prevState: ITimeSeriesState) {\n const { metricSetPair, parentWidth } = this.props;\n const { userBrushExtent, showGroup } = this.state;\n if (\n metricSetPair !== prevProps.metricSetPair ||\n parentWidth !== prevProps.parentWidth ||\n userBrushExtent !== prevState.userBrushExtent ||\n showGroup !== prevState.showGroup\n ) {\n this.createGraphs();\n }\n }\n\n /*\n * Generate chart Data\n * In cases where the start Millis is different betwen canary and baseline, we want to:\n * 1) If data point count is different, extend the shorter dataset to match the longer one (i.e. match the x extent)\n * 2) normalize canary timestamp to match baseline timestamps (needed for the tooltip's\n * voronoi overlay logic in semiotic to work properly)\n */\n private getChartData = (dataSetsAttr: IDataSetsAttributes, metricSetPair: IMetricSetPair) => {\n const { maxDataCount } = dataSetsAttr;\n const { showGroup } = this.state;\n const { dataGroupMap, colors } = vizConfig;\n const { scopes, values } = metricSetPair;\n const { userBrushExtent } = this.state;\n const groups = ['baseline', 'canary'];\n const isOnlyCanarySelected = showGroup.canary && !showGroup.baseline;\n const stepMillis = scopes.control.stepMillis;\n\n /*\n * To support dual-axis, use 'normalized' ts supplied to semiotic for both canary and baseline.\n * We store the actual ts as 'actuals' (which can be different from the normalized ts for canary).\n */\n const dataSets: IChartDataSet[] = groups.map((g: string) => {\n const dataPoints: IDataPoint[] = Array(maxDataCount)\n .fill(0)\n .map((_, i: number) => {\n const name = dataGroupMap[g];\n const timestampMillisActual = scopes[name].startTimeMillis + i * stepMillis;\n\n // if only canary is selected, norm'd ts is based on canary's ts.\n const timestampMillisNormalizedMain = isOnlyCanarySelected\n ? scopes[dataGroupMap['canary']].startTimeMillis + i * stepMillis\n : scopes[dataGroupMap['baseline']].startTimeMillis + i * stepMillis;\n\n // minimap always shows both data sets, so norm'd ts is always based on baseline's ts\n const timestampMillisNormalizedMinimap = scopes[dataGroupMap['baseline']].startTimeMillis + i * stepMillis;\n\n return {\n timestampMillisActual, // original ts for this data point\n timestampMillisNormalizedMain,\n timestampMillisNormalizedMinimap,\n value: values[name][i],\n };\n });\n\n return {\n label: g,\n color: colors[g],\n coordinates: dataPoints.filter((d) => typeof d.value === 'number'),\n coordinatesUnfiltered: dataPoints,\n };\n });\n\n const millisSetNormalizedMinimap: number[] = dataSets[0].coordinatesUnfiltered.map(\n (c: any) => c.timestampMillisNormalizedMinimap,\n );\n\n const millisSetNormalizedMain: number[] = (!userBrushExtent\n ? dataSets[0].coordinatesUnfiltered\n : dataSets[0].coordinatesUnfiltered.filter((c: IDataPoint) => {\n return (\n c.timestampMillisNormalizedMinimap >= userBrushExtent[0].valueOf() &&\n c.timestampMillisNormalizedMinimap <= userBrushExtent[1].valueOf()\n );\n })\n ).map((c: IDataPoint) => c.timestampMillisNormalizedMain);\n\n return {\n dataSets,\n millisSetNormalizedMain,\n millisSetNormalizedMinimap,\n xExtentNormalizedMain: [millisSetNormalizedMain[0], millisSetNormalizedMain[millisSetNormalizedMain.length - 1]],\n xExtentNormalizedMinimap: [\n millisSetNormalizedMinimap[0],\n millisSetNormalizedMinimap[millisSetNormalizedMinimap.length - 1],\n ],\n };\n };\n\n // common chart props that are used for both the main XYFrame and Minimap (if applicable)\n private createCommonChartProps = () => {\n return {\n lineType: {\n type: 'line',\n interpolator: curveStepAfter,\n },\n lineStyle: (ds: IChartDataSet) => ({\n stroke: ds.color,\n strokeWidth: 2,\n strokeOpacity: 0.8,\n }),\n yAccessor: 'value',\n xScaleType: scaleUtc(),\n baseMarkProps: { transitionDuration: { default: 200, fill: 200 } },\n };\n };\n\n private createLineChartProps = (\n chartData: IChartData,\n dataSetsAttributes: IDataSetsAttributes,\n commonChartProps: IXYFrameProps<IChartDataSet, IDataPoint>,\n ) => {\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight, minimapHeight } = vizConfig.timeSeries;\n\n const { parentWidth } = this.props;\n const { showGroup } = this.state;\n\n const { shouldUseSecondaryXAxis, shouldDisplayMinimap } = dataSetsAttributes;\n const { dataSets, xExtentNormalizedMain, xExtentNormalizedMinimap, millisSetNormalizedMain } = chartData;\n\n // if secondary axis is needed, we need more bottom margin to fit both axes\n const totalXAxisHeight = shouldUseSecondaryXAxis\n ? 2 * (axisTickLabelHeight + axisLabelHeight) + axisTickLineHeight\n : axisTickLabelHeight;\n\n const lineChartProps = {\n ...commonChartProps,\n lines: dataSets.filter((ds: IChartDataSet) => showGroup[ds.label]), // only show selected groups\n hoverAnnotation: [\n {\n type: 'x',\n disable: ['connector', 'note'],\n },\n {\n type: 'vertical-points',\n threshold: 0.1,\n r: () => 5,\n },\n ],\n customHoverBehavior: this.createChartHoverHandler(dataSets, dataSetsAttributes),\n xExtent: xExtentNormalizedMain,\n axes: [\n {\n orient: 'left',\n label: 'metric value',\n tickFormat: (d: number) => utils.formatMetricValue(d),\n },\n {\n orient: 'bottom',\n label: shouldUseSecondaryXAxis ? 'Baseline' : undefined,\n tickValues: utils.calculateDateTimeTicks(millisSetNormalizedMain),\n tickFormat: (d: number) => <CustomAxisTickLabel millis={d} />,\n className: shouldUseSecondaryXAxis ? 'baseline-dual-axis' : '',\n },\n ],\n margin: { ...this.marginMain, bottom: totalXAxisHeight },\n matte: true,\n size: [parentWidth, shouldDisplayMinimap ? this.mainMinimapHeight - minimapHeight : this.mainMinimapHeight],\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillisNormalizedMain),\n };\n\n if (shouldDisplayMinimap) {\n return {\n ...lineChartProps,\n minimap: {\n ...commonChartProps,\n lines: dataSets,\n yBrushable: false,\n brushEnd: this.onBrushEnd,\n size: [parentWidth, minimapHeight],\n axes: [\n {\n orient: 'left',\n tickFormat: (): void => null,\n },\n {\n orient: 'bottom',\n },\n ],\n margin: this.marginMinimap,\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillisNormalizedMinimap),\n xExtent: xExtentNormalizedMinimap,\n } as IMinimapProps<IChartDataSet, IDataPoint>,\n };\n } else {\n return lineChartProps as IXYFrameProps<IChartDataSet, IDataPoint>;\n }\n };\n\n // construct the graph JSX components and store them as states\n private createGraphs = () => {\n const { metricSetPair, parentWidth } = this.props;\n const { showGroup } = this.state;\n const { minimapDataPointsThreshold, minimapHeight } = vizConfig.timeSeries;\n\n /*\n * Generate the data needed for the graph components\n */\n const baselineStartTimeMillis = metricSetPair.scopes.control.startTimeMillis;\n const canaryStartTimeMillis = metricSetPair.scopes.experiment.startTimeMillis;\n const isStartTimeMillisEqual = baselineStartTimeMillis === canaryStartTimeMillis;\n\n // Top level attributes to determine how data is formatted & which chart components to include\n const dataSetsAttributes = {\n startTimeMillisOffset: canaryStartTimeMillis - baselineStartTimeMillis,\n maxDataCount: Math.max(metricSetPair.values.control.length, metricSetPair.values.experiment.length),\n shouldDisplayMinimap: metricSetPair.values.control.length > minimapDataPointsThreshold,\n shouldUseSecondaryXAxis: !isStartTimeMillisEqual && showGroup.canary && showGroup.baseline,\n };\n\n const chartData = this.getChartData(dataSetsAttributes, metricSetPair);\n\n /*\n * Build the visualization components\n */\n const commonChartProps = this.createCommonChartProps();\n const lineChartProps = this.createLineChartProps(chartData, dataSetsAttributes, commonChartProps);\n\n const line = (\n <>\n <div className=\"time-series-chart\">\n {dataSetsAttributes.shouldDisplayMinimap ? (\n <MinimapXYFrame {...lineChartProps} />\n ) : (\n <XYFrame {...lineChartProps} />\n )}\n </div>\n {dataSetsAttributes.shouldUseSecondaryXAxis ? (\n <SecondaryTSXAxis\n margin={{ left: this.marginMain.left, right: this.marginMain.right, top: 0, bottom: 0 }}\n width={parentWidth}\n millisSet={chartData.millisSetNormalizedMain.map(\n (ms: number) => ms + dataSetsAttributes.startTimeMillisOffset,\n )}\n axisLabel=\"canary\"\n bottomOffset={dataSetsAttributes.shouldDisplayMinimap ? minimapHeight : 0}\n />\n ) : null}\n {dataSetsAttributes.shouldDisplayMinimap ? (\n <div className=\"zoom-icon\">\n <i className=\"fas fa-search-plus\" />\n </div>\n ) : null}\n </>\n );\n\n const differenceArea =\n showGroup.baseline && showGroup.canary ? (\n <DifferenceArea {...this.props} millisSetBaseline={chartData.millisSetNormalizedMinimap} />\n ) : null;\n\n this.setState({\n graphs: {\n line,\n differenceArea,\n },\n });\n };\n\n private onLegendClickHandler = (group: string) => {\n const showGroup = this.state.showGroup;\n this.setState({\n showGroup: { ...showGroup, [group]: !showGroup[group] },\n });\n };\n\n // function factory to create a custom hover handler function based on the datasets\n private createChartHoverHandler = (dataSets: IChartDataSet[], dataSetsAttr: IDataSetsAttributes) => {\n const { shouldUseSecondaryXAxis } = dataSetsAttr;\n return (d: (IXYFrameHoverBaseArgs<IDataPoint> & IDataPoint) | undefined) => {\n if (d && d.timestampMillisNormalizedMain) {\n const tooltipData = dataSets.map(\n (ds: IChartDataSet): ITooltipDataPoint => {\n const coord = ds.coordinatesUnfiltered.find(\n (c: IDataPoint) => c.timestampMillisNormalizedMain === d.timestampMillisNormalizedMain,\n );\n return {\n color: ds.color,\n label: ds.label,\n ts: coord.timestampMillisActual,\n value: coord.value,\n };\n },\n );\n\n let tooltipRows = tooltipData\n .concat()\n .sort((a: ITooltipDataPoint, b: ITooltipDataPoint) => b.value - a.value)\n .map((o: ITooltipDataPoint) => {\n // if there's a ts offset, timestamp should be displayed for each group\n const tsRow = shouldUseSecondaryXAxis ? <div className=\"tooltip-ts\">{timestamp(o.ts)}</div> : null;\n\n return (\n <div key={o.label} className={classNames({ 'tooltip-dual-axis-row': shouldUseSecondaryXAxis })}>\n {tsRow}\n <div id={o.label}>\n <CircleIcon group={o.label} />\n <span>{`${o.label}: `}</span>\n <span>{utils.formatMetricValue(o.value)}</span>\n </div>\n </div>\n );\n });\n\n if (tooltipData.length === 2) {\n const canaryMinusBaseline = tooltipData[1].value - tooltipData[0].value;\n tooltipRows = tooltipRows.concat([\n <div id=\"diff\" key=\"diff\" className=\"tooltip-row\">\n <span>Canary - Baseline: </span>\n <span>{utils.formatMetricValue(canaryMinusBaseline)}</span>\n </div>,\n ]);\n }\n\n const tooltipContent = (\n <div>\n {/* if no dual axes, display timestamp row at the top level */}\n {shouldUseSecondaryXAxis ? null : (\n <div key=\"ts\" className=\"tooltip-ts\">\n {timestamp(tooltipData[0].ts)}\n </div>\n )}\n {tooltipRows}\n </div>\n );\n this.setState({\n tooltip: {\n content: tooltipContent,\n x: d.voronoiX + this.marginMain.left,\n y: d.voronoiY + this.marginMain.top,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n // Handle user brush action event from semiotic\n private onBrushEnd = (e: Date[]) => {\n this.setState({\n userBrushExtent: e,\n });\n };\n\n public render() {\n const { metricSetPair } = this.props;\n const { showGroup, tooltip } = this.state;\n const { line, differenceArea } = this.state.graphs;\n\n return (\n <div className=\"time-series\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend showGroup={showGroup} isClickable={true} onClickHandler={this.onLegendClickHandler} />\n <div className=\"graph-container\">\n {line}\n <Tooltip {...tooltip} />\n </div>\n {differenceArea}\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport ContainerDimensions from 'react-container-dimensions';\n\nimport BoxPlot from './boxplot';\nimport Histogram from './histogram';\nimport { GraphType, IMetricSetPairGraphProps } from '../metricSetPairGraph.service';\nimport NoValidDataSign from './noValidDataSign';\nimport TimeSeries from './timeSeries';\n\nimport './semioticGraph.less';\n\nexport default class SemioticGraph extends React.Component<IMetricSetPairGraphProps> {\n private fetchChart = (parentWidth: number) => {\n const {\n type,\n metricSetPair: {\n values: { control, experiment },\n },\n } = this.props;\n const chartProps = {\n ...this.props,\n parentWidth,\n };\n const filterInvalidValues = (data: number[]) => data.filter((v) => typeof v === 'number');\n\n if (filterInvalidValues(control).length === 0 && filterInvalidValues(experiment).length === 0) {\n return <NoValidDataSign />;\n }\n\n switch (type) {\n case GraphType.TimeSeries:\n return <TimeSeries {...chartProps} />;\n case GraphType.Histogram:\n return <Histogram {...chartProps} />;\n case GraphType.BoxPlot:\n return <BoxPlot {...chartProps} />;\n default:\n return null;\n }\n };\n\n public render() {\n return (\n <div className=\"semiotic-graph\">\n <ContainerDimensions>{({ width }: { width: number }) => this.fetchChart(width)}</ContainerDimensions>\n </div>\n );\n }\n}\n"],"names":["module","forEach","collection","callback","i","length","result","detector","isIE","version","agent","navigator","userAgent","toLowerCase","indexOf","v","div","document","createElement","all","getElementsByTagName","innerHTML","undef","isLegacyOpera","window","opera","getOption","options","name","defaultValue","value","undefined","reporter","asyncProcess","utils","autoProcess","warn","asyncFrameHandler","batch","Batch","isProcessing","processBatch","size","processingBatch","process","processBatchAsync","fn","setTimeout","add","level","force","localAsyncProcess","clearTimeout","topLevel","bottomLevel","push","fns","getState","element","initState","cleanState","require$$0","batchProcessor","stateHandler","hasState","idHandler","Error","scrollbarSizes","width","height","child","style","cssText","container","appendChild","body","insertBefore","firstChild","widthSize","clientWidth","heightSize","clientHeight","removeChild","getScrollbarSizes","detectionContainerClass","addEvent","el","cb","addEventListener","attachEvent","error","removeEvent","removeEventListener","detachEvent","getExpandElement","childNodes","getShrinkElement","styleId","containerClass","getElementById","containerAnimationClass","method","head","styleElement","id","injectStyle","injectScrollStyle","makeDetectable","debug","args","Array","prototype","slice","call","arguments","unshift","get","log","apply","isUnrendered","getComputedStyle","getStyle","elementStyle","position","offsetWidth","offsetHeight","top","right","bottom","left","widthCSS","heightCSS","storeStyle","storeCurrentSize","lastWidth","lastHeight","getWidthOffset","getHeightOffset","getExpandWidth","getExpandHeight","positionScrollbars","expand","shrink","expandWidth","expandHeight","shrinkWidth","getShrinkWidth","shrinkHeight","getShrinkHeight","scrollLeft","scrollTop","injectContainerElement","className","addAnimationClass","onAnimationStart","onRendered","injectScrollElements","removeRelativeStyles","property","replace","getNumericalValue","alterPositionStyles","rootContainer","scrollbarWidth","scrollbarHeight","containerStyle","containerContainer","expandChild","shrinkChild","dir","onExpandScroll","onShrinkScroll","onExpand","onShrink","registerListenersAndPositionElements","updateChildSizes","getExpandChildElement","updateDetectorElements","done","areElementsInjected","w","h","notifyListenersIfNeeded","state","lastNotifiedWidth","startSize","lastNotifiedHeight","listeners","listener","handleScroll","finalizeDomMutation","ready","install","storeStartSize","ownerDocument","contains","isInDocument","isDetached","addListener","uninstall","isCollection","obj","isArray","toArray","array","isElement","nodeType","condition","format","a","b","c","d","e","f","argIndex","framesToPop","_extends","Object","assign","target","source","key","hasOwnProperty","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_react","_propTypes2","_propTypes","_reactDom2","_reactDom","_elementResizeDetector2","idCount","set","defaultIdHandler","idGenerator","generate","idHandlerMaker","quiet","noop","console","attachFunction","reporterMaker","batchProcessorMaker","globalOptions","callOnAdd","detectionStrategy","eventListenerHandler","eventListeners","getListeners","removeListener","len","splice","removeAllListeners","listenerHandlerMaker","elementUtils","isDetectable","markAsDetectable","isBusy","busy","markBusy","elementUtilsMaker","desiredStrategy","strategyOptions","browserDetector","scrollStrategyMaker","getObject","object","positionCheckPerformed","mutateDom","tabIndex","type","setAttribute","onload","getDocument","contentDocument","this","objectDocument","data","injectObject","listenerProxy","proxy","defaultView","objectStrategyMaker","onReadyCallbacks","listenTo","elements","onResizeCallback","elementsReady","onReadyCallback","_invariant2","_invariant","__esModule","default","ContainerDimensions","_Component","instance","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","initiated","onResize","bind","subClass","superClass","create","constructor","setPrototypeOf","_inherits","Component","node","_node$getBoundingClie","getBoundingClientRect","parentNode","findDOMNode","elementResizeDetector","strategy","componentIsMounted","clientRect","getDomNodeDimensions","setState","children","renderedChildren","Children","only","cloneElement","propTypes","oneOfType","func","isRequired","NaN","compare","bisectRight","ascending","x","lo","hi","mid","values","valueof","min","max","n","e10","Math","sqrt","e5","e2","ceil","LN2","identity","domain","extent","threshold","sturges","histogram","start","stop","count","step0","step1","xz","x0","x1","tz","abs","pow","floor","LN10","step","range","m","shift","pop","bin","bins","bisect","_","constant","thresholds","t","r","exports","loaded","p","Node","Force","Distributor","Renderer","idealPos","currentPos","layerIndex","distanceFrom","currentLeft","currentRight","parent","getPathToRoot","reverse","o","s","nodeSpacing","minPos","maxPos","algorithm","removeOverlap","density","stubWidth","u","extend","nodes","concat","getLayers","pick","keys","DEFAULT_OPTIONS","isDefined","layerWidth","compute","removeStub","distribute","map","computeRequiredWidth","sum","maxWidthPerLayer","needToSplit","estimateRequiredLayers","simple","createStub","roundRobin","overlap","countIdealOverlaps","sort","overlapCount","overlaps","l","isStub","idealLeft","idealRight","search","last","reduce","Symbol","iterator","toString","startKey","endKey","intervalHash","pointTree","_autoIncrement","root","end","idx","insert","starts","every","ends","bsearch","remove","rate1","rate2","filter","_filter","_compare","compares","_unique","unique","resume","insertOne","number","string","Variable","targetPos","index","lineSpacing","Constraint","Solver","solve","round","scale","AB","AD","A2","addVariable","offset","weight","desiredPosition","getPosn","PositionStats","gap","equality","active","unsatisfiable","slack","Number","MAX_VALUE","dfdv","block","ps","posn","visitNeighbours","cOut","cIn","vars","updateWeightedPosition","compute_lm","lm","populateSplitBlock","traverse","findMinLM","findMinLMBetween","findPath","isActiveDirectedPathBetween","split","createSplitBlock","splitBetween","constraint","lb","rb","mergeAcross","cost","Block","vs","list","blockInd","merge","updateBlockPositions","LAGRANGIAN_TOLERANCE","Blocks","cs","inactive","bs","setStartingPositions","setDesiredPositions","mostViolated","ZERO_UPPERBOUND","satisfy","layerGap","nodeHeight","direction","join","lineTo","moveTo","curveTo","vCurveBetween","hCurveBetween","getWaypoints","getPathFromRoot","layout","getLayerIndex","y","dx","dy","generatePath","metric","React","vizConfig","colors","baseline","canary","background","timeSeries","minimapDataPointsThreshold","minimapHeight","axisTickLineHeight","axisTickLabelHeight","axisLabelHeight","dataGroupMap","onClickHandler","showGroup","isClickable","baselineIconStyle","backgroundColor","canaryIconStyle","handleClick","group","legendItemClass","classNames","clickable","legendItemClassCanary","deselected","legendItemClassBaseline","onClick","iconStyle","color","paddingRight","GLOBAL","HIDE","REBUILD","SHOW","_constant2","_constant","dispatchGlobalEvent","eventName","opts","event","CustomEvent","detail","createEvent","initEvent","dispatchEvent","hide","rebuild","show","globalRebuild","mount","unbindListener","bindListener","globalShow","currentTarget","showTooltip","globalHide","hasTarget","hideTooltip","bindWindowEvents","resizeHide","onWindowResize","unbindWindowEvents","_defineProperty","checkStatus","dataEventOff","dataIsCapture","getAttribute","isCapture","currentItem","stopPropagation","setUntargetItems","getTargetArray","targetArray","customListeners","isCustomEvent","ele","customBindListener","_state","eventOff","dataEvent","customListener","customUnbindListener","_state2","getEffect","effect","getMutationObserverClass","MutationObserver","WebKitMutationObserver","MozMutationObserver","bindRemovalTracker","observer","mutations","m1","mutation","m2","removedNodes","observe","childList","subtree","removalTracker","unbindRemovalTracker","disconnect","getDimensions","parseInt","getCurrentOffset","boundingClientRect","targetTop","targetLeft","_getDimensions3","targetWidth","targetHeight","mouseX","clientX","mouseY","clientY","getDefaultPosition","tipWidth","tipHeight","disToMouse","calculateOffset","extraOffset_X","extraOffset_Y","JSON","parse","getParent","currentParent","getPropertyValue","parentElement","parentTop","parentLeft","place","desiredPlace","_getDimensions","_getDimensions2","_getCurrentOffset","defaultOffset","_calculateOffset","windowWidth","innerWidth","windowHeight","innerHeight","_getParent","getTipOffsetLeft","offset_X","getTipOffsetTop","offset_Y","outsideRight","getTipOffsetRight","outsideBottom","getTipOffsetBottom","outside","outsideLeft","outsideTop","inside","placesList","insideList","isNewState","newPlace","newState","tip","getContent","multiline","regexp","test","ariaObj","prop","_class","_class2","_temp","nodeList","fill","_classnames2","_classnames","_staticMethods2","_staticMethods","_windowListener2","_windowListener","_customEvent2","_customEvent","_isCapture2","_isCapture","_getEffect2","_getEffect","_trackRemoval2","_trackRemoval","_getPosition2","_getPosition","_getTipContent2","_getTipContent","_nodeListToArray2","_nodeListToArray","_style2","_style","_React$Component","ReactTooltip","border","extraClass","html","delayHide","delayShow","currentEvent","ariaProps","_aria","parseAria","isEmptyTip","disable","originTooltip","isMultiline","delayShowLoop","delayHideLoop","delayReshow","intervalUpdateContent","methodArray","_this2","_props","insecure","setStyleHeader","newAriaProps","some","clearTimer","removeScrollListener","tooltipRef","matches","msMatchesSelector","mozMatchesSelector","escaped","querySelectorAll","_this3","_props2","globalEventOff","isCaptureMode","unbindBasicListener","updateTooltip","_this4","_props3","_props4","content","placeholder","isGlobalCall","_props5","switchToSolid","FocusEvent","scrollHide","reshowDelay","delayUpdate","updateState","class","addScrollListener","setInterval","_getContent","updatePosition","_this5","afterShow","getTooltipContent","delayTime","eventTarget","mouseOnToolTip","isInvisible","_this6","afterHide","resetState","isVisible","listenForTooltipExit","removeListenerForTooltipExit","_this7","_state3","querySelector","tag","__webpack_nonce__","clearInterval","_this8","_state4","tooltipClass","place-top","place-bottom","place-left","place-right","type-dark","type-success","type-warning","type-error","type-info","type-light","allow_hover","allow_click","Wrapper","wrapper","supportedWrappers","defaultProps","ref","_ref","data-id","dangerouslySetInnerHTML","__html","_ref2","any","bool","watchWindow","displayName","Tooltip","[object Object]","prevProps","tooltipTarget","tooltipTargetStyle","opacity","pointerEvents","zIndex","formatDecimalParts","toExponential","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","align","sign","symbol","zero","comma","precision","trim","exponent","%","toFixed","toLocaleString","g","toPrecision","formatRounded","X","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","j","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","isNaN","out","i1","i0","formatTrim","charCodeAt","Infinity","padding","k","ascendingComparator","formatLocale","bisector","tickIncrement","power","tickStep","Map","each","Set","has","clear","entries","empty","proto","factory","definition","Color","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl2rgb","define","copy","channels","displayable","formatHsl","darker","deg2rad","PI","rad2deg","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","atan2","cubehelix","linear","gamma","nogamma","exponential","cosh","cos","sinh","sin","rgbGamma","colorRgb","nb","na","Date","setTime","reA","reB","am","bm","bi","lastIndex","q","one","date","hue","cubehelixGamma","colorCubehelix","cubehelixLong","unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","d1","r0","r1","polymap","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","rescale","deinterpolateClamp","invert","reinterpolateClamp","rangeRound","interpolateRound","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","tickFormat","nice","t0","t1","newInterval","floori","offseti","field","interval","previous","millisecond","second","getMilliseconds","getUTCSeconds","day","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","monday","thursday","year","setMonth","setFullYear","getFullYear","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","utcFormat","pads","-","0","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","getHours","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","getMonth","formatMinutes","getMinutes","formatSeconds","getSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","G","I","Y","utcFormats","parses","parseSpecifier","charAt","newParse","week","utcParse","defaultLocale","calendar","month","hour","minute","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","durationSecond","durationMinute","durationHour","durationDay","tickInterval","utcWeek","utcSecond","utcMillisecond","ramp","interpolateCubehelixLong","formatMetricValue","fromMillis","millis","luxonOpts","SETTINGS","feature","displayTimestampsInUserLocalTime","zone","defaultTimeZone","DateTime","calculateDateTimeTicks","millisSet","minMillis","maxMillis","offsetMillis","minMillisShifted","maxMillisShifted","scaleUtc","valueOf","BoxPlot","tooltip","dataPoints","dp","metricSetPair","baselineInput","decorateData","control","canaryInput","experiment","points","label","summaryLabels","summaryKeysColumn","baselineColumn","CircleIcon","hd","utils.formatMetricValue","canaryColumn","tooltipContent","margin","summaryKeys","orFrameState","pieceDataXY","categories","summaryData","sd","boxPlotWidth","statLabelMap","median","q1area","q3area","createNoteElement","posY","dataPoint","summaryPieceName","noteData","note","wrap","lineType","orientation","Annotation","summaryKey","pieceData","find","forceOptions","parentWidth","chartData","generateChartData","projection","summaryType","oLabel","oPadding","fillOpacity","summaryStyle","stroke","strokeWidth","pieceClass","iterations","rExtent","customHoverBehavior","createChartHoverHandler","hoverAnnotation","annotations","defineAnnotations","summaryHoverAnnotation","oAccessor","rAccessor","svgAnnotationRules","customAnnotationFunction","summaryClass","axis","orient","ChartHeader","ChartLegend","OrdinalFrame","getChartProps","Histogram","combinedInput","scaleLinear","histogramData","baselineBin","canaryBin","x1Max","cd","xyData","column","xy","halfHeight1","halfHeight2","summary","tooltipRows","fontWeight","piece","nx","ny","textAnchor","parseFloat","strokeOpacity","Step","context","_context","_t","stepAfter","areaStart","_line","areaEnd","lineStart","_x","_y","_point","lineEnd","closePath","point","text","datetime","toFormat","utils.dateTimeTickFormatter","SecondaryTSXAxis","axisLabel","bottomOffset","ms","totalAxisHeight","netWidth","svgWrapperStyle","transform","Axis","tickValues","utils.calculateDateTimeTicks","CustomAxisTickLabel","DifferenceArea","scopes","stepMillis","maxDataPoints","intDataSet","timestamp","startTimeMillis","baselineReferenceDataPoints","ds","timestampMillis","differenceDataPoints","coordinates","millisOffset","millisSetBaseline","millisSetCanary","shouldUseSecondaryXAxis","getChartData","xAxisTotalHeight","getXAxisTotalHeight","computedConfig","lines","chartHeight","interpolator","curveStepAfter","lineStyle","strokeDasharray","xAccessor","yAccessor","xScaleType","axes","xExtent","headerHeight","XYFrame","getSecondaryAxis","TimeSeries","userBrushExtent","graphs","line","differenceArea","dataSetsAttr","maxDataCount","isOnlyCanarySelected","dataSets","timestampMillisActual","timestampMillisNormalizedMain","timestampMillisNormalizedMinimap","coordinatesUnfiltered","millisSetNormalizedMinimap","millisSetNormalizedMain","xExtentNormalizedMain","xExtentNormalizedMinimap","baseMarkProps","transitionDuration","dataSetsAttributes","commonChartProps","shouldDisplayMinimap","totalXAxisHeight","lineChartProps","marginMain","matte","mainMinimapHeight","minimap","yBrushable","brushEnd","onBrushEnd","marginMinimap","baselineStartTimeMillis","canaryStartTimeMillis","isStartTimeMillisEqual","startTimeMillisOffset","createCommonChartProps","createLineChartProps","MinimapXYFrame","tooltipData","coord","ts","tsRow","tooltip-dual-axis-row","canaryMinusBaseline","voronoiX","voronoiY","createGraphs","prevState","onLegendClickHandler","SemioticGraph","chartProps","filterInvalidValues","NoValidDataSign","GraphType","fetchChart"],"mappings":"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"}
1
+ {"version":3,"file":"semioticGraph-a9ade595.js","sources":["../../node_modules/element-resize-detector/src/collection-utils.js","../../node_modules/element-resize-detector/src/browser-detector.js","../../node_modules/batch-processor/src/utils.js","../../node_modules/batch-processor/src/batch-processor.js","../../node_modules/element-resize-detector/src/state-handler.js","../../node_modules/element-resize-detector/src/detection-strategy/scroll.js","../../node_modules/element-resize-detector/src/element-resize-detector.js","../../node_modules/react-container-dimensions/node_modules/invariant/invariant.js","../../node_modules/react-container-dimensions/lib/index.js","../../node_modules/element-resize-detector/src/id-generator.js","../../node_modules/element-resize-detector/src/id-handler.js","../../node_modules/element-resize-detector/src/reporter.js","../../node_modules/element-resize-detector/src/listener-handler.js","../../node_modules/element-resize-detector/src/element-utils.js","../../node_modules/element-resize-detector/src/detection-strategy/object.js","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/array.js","../../node_modules/d3-array/src/constant.js","../../node_modules/d3-array/src/identity.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/threshold/sturges.js","../../node_modules/d3-array/src/histogram.js","../../node_modules/d3-array/src/range.js","../../node_modules/labella/dist/labella.min.js","../../../src/kayenta/report/detail/graph/semiotic/chartHeader.tsx","../../../src/kayenta/report/detail/graph/semiotic/config.ts","../../../src/kayenta/report/detail/graph/semiotic/chartLegend.tsx","../../node_modules/react-tooltip/dist/decorators/staticMethods.js","../../../src/kayenta/report/detail/graph/semiotic/circleIcon.tsx","../../node_modules/react-tooltip/dist/constant.js","../../node_modules/react-tooltip/dist/decorators/windowListener.js","../../node_modules/react-tooltip/dist/decorators/customEvent.js","../../node_modules/react-tooltip/dist/decorators/isCapture.js","../../node_modules/react-tooltip/dist/decorators/getEffect.js","../../node_modules/react-tooltip/dist/decorators/trackRemoval.js","../../node_modules/react-tooltip/dist/utils/getPosition.js","../../node_modules/react-tooltip/dist/utils/getTipContent.js","../../node_modules/react-tooltip/dist/utils/aria.js","../../node_modules/react-tooltip/dist/index.js","../../node_modules/react-tooltip/dist/utils/nodeListToArray.js","../../node_modules/react-tooltip/dist/style.js","../../../src/kayenta/report/detail/graph/semiotic/tooltip.tsx","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-scale/node_modules/d3-array/src/ascending.js","../../node_modules/d3-scale/node_modules/d3-array/src/bisector.js","../../node_modules/d3-scale/node_modules/d3-array/src/bisect.js","../../node_modules/d3-scale/node_modules/d3-array/src/ticks.js","../../node_modules/d3-collection/src/map.js","../../node_modules/d3-collection/src/set.js","../../node_modules/d3-scale/src/array.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-color/src/math.js","../../node_modules/d3-color/src/cubehelix.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/cubehelix.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-time/src/interval.js","../../node_modules/d3-time/src/millisecond.js","../../node_modules/d3-time/src/duration.js","../../node_modules/d3-time/src/second.js","../../node_modules/d3-time/src/day.js","../../node_modules/d3-time/src/week.js","../../node_modules/d3-time/src/year.js","../../node_modules/d3-time/src/utcMinute.js","../../node_modules/d3-time/src/utcHour.js","../../node_modules/d3-time/src/utcDay.js","../../node_modules/d3-time/src/utcWeek.js","../../node_modules/d3-time/src/utcMonth.js","../../node_modules/d3-time/src/utcYear.js","../../node_modules/d3-time-format/src/locale.js","../../node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/d3-scale/src/time.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/utcTime.js","../../node_modules/d3-scale/src/colors.js","../../node_modules/d3-scale/src/viridis.js","../../node_modules/d3-scale/src/category10.js","../../node_modules/d3-scale/src/category20b.js","../../node_modules/d3-scale/src/category20c.js","../../node_modules/d3-scale/src/category20.js","../../node_modules/d3-scale/src/cubehelix.js","../../node_modules/d3-scale/src/rainbow.js","../../../src/kayenta/report/detail/graph/semiotic/utils.ts","../../../src/kayenta/report/detail/graph/semiotic/boxplot.tsx","../../../src/kayenta/report/detail/graph/semiotic/histogram.tsx","../../../src/kayenta/report/detail/graph/semiotic/noValidDataSign.tsx","../../node_modules/d3-shape/src/curve/step.js","../../../src/kayenta/report/detail/graph/semiotic/customAxisTickLabel.tsx","../../../src/kayenta/report/detail/graph/semiotic/secondaryTSXAxis.tsx","../../../src/kayenta/report/detail/graph/semiotic/differenceArea.tsx","../../../src/kayenta/report/detail/graph/semiotic/timeSeries.tsx","../../../src/kayenta/report/detail/graph/semiotic/semioticGraph.tsx"],"sourcesContent":["\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n for(var i = 0; i < collection.length; i++) {\n var result = callback(collection[i]);\n if(result) {\n return result;\n }\n }\n};\n","\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n function isAnyIeVersion() {\n var agent = navigator.userAgent.toLowerCase();\n return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n }\n\n if(!isAnyIeVersion()) {\n return false;\n }\n\n if(!version) {\n return true;\n }\n\n //Shamelessly stolen from https://gist.github.com/padolsey/527683\n var ieVersion = (function(){\n var undef,\n v = 3,\n div = document.createElement(\"div\"),\n all = div.getElementsByTagName(\"i\");\n\n do {\n div.innerHTML = \"<!--[if gt IE \" + (++v) + \"]><i></i><![endif]-->\";\n }\n while (all[0]);\n\n return v > 4 ? v : undef;\n }());\n\n return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n return !!window.opera;\n};\n","\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n options = options || {};\n var reporter = options.reporter;\n var asyncProcess = utils.getOption(options, \"async\", true);\n var autoProcess = utils.getOption(options, \"auto\", true);\n\n if(autoProcess && !asyncProcess) {\n reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n asyncProcess = true;\n }\n\n var batch = Batch();\n var asyncFrameHandler;\n var isProcessing = false;\n\n function addFunction(level, fn) {\n if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n // This needs to be done before, since we're checking the size of the batch to be 0.\n processBatchAsync();\n }\n\n batch.add(level, fn);\n }\n\n function processBatch() {\n // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n isProcessing = true;\n while (batch.size()) {\n var processingBatch = batch;\n batch = Batch();\n processingBatch.process();\n }\n isProcessing = false;\n }\n\n function forceProcessBatch(localAsyncProcess) {\n if (isProcessing) {\n return;\n }\n\n if(localAsyncProcess === undefined) {\n localAsyncProcess = asyncProcess;\n }\n\n if(asyncFrameHandler) {\n cancelFrame(asyncFrameHandler);\n asyncFrameHandler = null;\n }\n\n if(localAsyncProcess) {\n processBatchAsync();\n } else {\n processBatch();\n }\n }\n\n function processBatchAsync() {\n asyncFrameHandler = requestFrame(processBatch);\n }\n\n function clearBatch() {\n batch = {};\n batchSize = 0;\n topLevel = 0;\n bottomLevel = 0;\n }\n\n function cancelFrame(listener) {\n // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n var cancel = clearTimeout;\n return cancel(listener);\n }\n\n function requestFrame(callback) {\n // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n var raf = function(fn) { return setTimeout(fn, 0); };\n return raf(callback);\n }\n\n return {\n add: addFunction,\n force: forceProcessBatch\n };\n};\n\nfunction Batch() {\n var batch = {};\n var size = 0;\n var topLevel = 0;\n var bottomLevel = 0;\n\n function add(level, fn) {\n if(!fn) {\n fn = level;\n level = 0;\n }\n\n if(level > topLevel) {\n topLevel = level;\n } else if(level < bottomLevel) {\n bottomLevel = level;\n }\n\n if(!batch[level]) {\n batch[level] = [];\n }\n\n batch[level].push(fn);\n size++;\n }\n\n function process() {\n for(var level = bottomLevel; level <= topLevel; level++) {\n var fns = batch[level];\n\n for(var i = 0; i < fns.length; i++) {\n var fn = fns[i];\n fn();\n }\n }\n }\n\n function getSize() {\n return size;\n }\n\n return {\n add: add,\n process: process,\n size: getSize\n };\n}\n","\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n element[prop] = {};\n return getState(element);\n}\n\nfunction getState(element) {\n return element[prop];\n}\n\nfunction cleanState(element) {\n delete element[prop];\n}\n\nmodule.exports = {\n initState: initState,\n getState: getState,\n cleanState: cleanState\n};\n","/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n var hasState = options.stateHandler.hasState;\n var idHandler = options.idHandler;\n\n if (!batchProcessor) {\n throw new Error(\"Missing required dependency: batchProcessor\");\n }\n\n if (!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n //TODO: Could this perhaps be done at installation time?\n var scrollbarSizes = getScrollbarSizes();\n\n // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n var styleId = \"erd_scroll_detection_scrollbar_style\";\n var detectionContainerClass = \"erd_scroll_detection_container\";\n injectScrollStyle(styleId, detectionContainerClass);\n\n function getScrollbarSizes() {\n var width = 500;\n var height = 500;\n\n var child = document.createElement(\"div\");\n child.style.cssText = \"position: absolute; width: \" + width*2 + \"px; height: \" + height*2 + \"px; visibility: hidden; margin: 0; padding: 0;\";\n\n var container = document.createElement(\"div\");\n container.style.cssText = \"position: absolute; width: \" + width + \"px; height: \" + height + \"px; overflow: scroll; visibility: none; top: \" + -width*3 + \"px; left: \" + -height*3 + \"px; visibility: hidden; margin: 0; padding: 0;\";\n\n container.appendChild(child);\n\n document.body.insertBefore(container, document.body.firstChild);\n\n var widthSize = width - container.clientWidth;\n var heightSize = height - container.clientHeight;\n\n document.body.removeChild(container);\n\n return {\n width: widthSize,\n height: heightSize\n };\n }\n\n function injectScrollStyle(styleId, containerClass) {\n function injectStyle(style, method) {\n method = method || function (element) {\n document.head.appendChild(element);\n };\n\n var styleElement = document.createElement(\"style\");\n styleElement.innerHTML = style;\n styleElement.id = styleId;\n method(styleElement);\n return styleElement;\n }\n\n if (!document.getElementById(styleId)) {\n var containerAnimationClass = containerClass + \"_animation\";\n var containerAnimationActiveClass = containerClass + \"_animation_active\";\n var style = \"/* Created by the element-resize-detector library. */\\n\";\n style += \".\" + containerClass + \" > div::-webkit-scrollbar { display: none; }\\n\\n\";\n style += \".\" + containerAnimationActiveClass + \" { -webkit-animation-duration: 0.1s; animation-duration: 0.1s; -webkit-animation-name: \" + containerAnimationClass + \"; animation-name: \" + containerAnimationClass + \"; }\\n\";\n style += \"@-webkit-keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n style += \"@keyframes \" + containerAnimationClass + \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n injectStyle(style);\n }\n }\n\n function addAnimationClass(element) {\n element.className += \" \" + detectionContainerClass + \"_animation_active\";\n }\n\n function addEvent(el, name, cb) {\n if (el.addEventListener) {\n el.addEventListener(name, cb);\n } else if(el.attachEvent) {\n el.attachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n }\n }\n\n function removeEvent(el, name, cb) {\n if (el.removeEventListener) {\n el.removeEventListener(name, cb);\n } else if(el.detachEvent) {\n el.detachEvent(\"on\" + name, cb);\n } else {\n return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n }\n }\n\n function getExpandElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n }\n\n function getShrinkElement(element) {\n return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n var listeners = getState(element).listeners;\n\n if (!listeners.push) {\n throw new Error(\"Cannot add listener to an element that is not detectable.\");\n }\n\n getState(element).listeners.push(listener);\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n\n function debug() {\n if (options.debug) {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(idHandler.get(element), \"Scroll: \");\n if (reporter.log.apply) {\n reporter.log.apply(null, args);\n } else {\n for (var i = 0; i < args.length; i++) {\n reporter.log(args[i]);\n }\n }\n }\n }\n\n function isDetached(element) {\n function isInDocument(element) {\n return element === element.ownerDocument.body || element.ownerDocument.body.contains(element);\n }\n\n if (!isInDocument(element)) {\n return true;\n }\n\n // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n if (window.getComputedStyle(element) === null) {\n return true;\n }\n\n return false;\n }\n\n function isUnrendered(element) {\n // Check the absolute positioned container since the top level container is display: inline.\n var container = getState(element).container.childNodes[0];\n var style = window.getComputedStyle(container);\n return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n }\n\n function getStyle() {\n // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n var elementStyle = window.getComputedStyle(element);\n var style = {};\n style.position = elementStyle.position;\n style.width = element.offsetWidth;\n style.height = element.offsetHeight;\n style.top = elementStyle.top;\n style.right = elementStyle.right;\n style.bottom = elementStyle.bottom;\n style.left = elementStyle.left;\n style.widthCSS = elementStyle.width;\n style.heightCSS = elementStyle.height;\n return style;\n }\n\n function storeStartSize() {\n var style = getStyle();\n getState(element).startSize = {\n width: style.width,\n height: style.height\n };\n debug(\"Element start size\", getState(element).startSize);\n }\n\n function initListeners() {\n getState(element).listeners = [];\n }\n\n function storeStyle() {\n debug(\"storeStyle invoked.\");\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getStyle();\n getState(element).style = style;\n }\n\n function storeCurrentSize(element, width, height) {\n getState(element).lastWidth = width;\n getState(element).lastHeight = height;\n }\n\n function getExpandChildElement(element) {\n return getExpandElement(element).childNodes[0];\n }\n\n function getWidthOffset() {\n return 2 * scrollbarSizes.width + 1;\n }\n\n function getHeightOffset() {\n return 2 * scrollbarSizes.height + 1;\n }\n\n function getExpandWidth(width) {\n return width + 10 + getWidthOffset();\n }\n\n function getExpandHeight(height) {\n return height + 10 + getHeightOffset();\n }\n\n function getShrinkWidth(width) {\n return width * 2 + getWidthOffset();\n }\n\n function getShrinkHeight(height) {\n return height * 2 + getHeightOffset();\n }\n\n function positionScrollbars(element, width, height) {\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n var shrinkWidth = getShrinkWidth(width);\n var shrinkHeight = getShrinkHeight(height);\n expand.scrollLeft = expandWidth;\n expand.scrollTop = expandHeight;\n shrink.scrollLeft = shrinkWidth;\n shrink.scrollTop = shrinkHeight;\n }\n\n function injectContainerElement() {\n var container = getState(element).container;\n\n if (!container) {\n container = document.createElement(\"div\");\n container.className = detectionContainerClass;\n container.style.cssText = \"visibility: hidden; display: inline; width: 0px; height: 0px; z-index: -1; overflow: hidden; margin: 0; padding: 0;\";\n getState(element).container = container;\n addAnimationClass(container);\n element.appendChild(container);\n\n var onAnimationStart = function () {\n getState(element).onRendered && getState(element).onRendered();\n };\n\n addEvent(container, \"animationstart\", onAnimationStart);\n\n // Store the event handler here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onAnimationStart = onAnimationStart;\n }\n\n return container;\n }\n\n function injectScrollElements() {\n function alterPositionStyles() {\n var style = getState(element).style;\n\n if(style.position === \"static\") {\n element.style.position = \"relative\";\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function getLeftTopBottomRightCssText(left, top, bottom, right) {\n left = (!left ? \"0\" : (left + \"px\"));\n top = (!top ? \"0\" : (top + \"px\"));\n bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n right = (!right ? \"0\" : (right + \"px\"));\n\n return \"left: \" + left + \"; top: \" + top + \"; right: \" + right + \"; bottom: \" + bottom + \";\";\n }\n\n debug(\"Injecting elements\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n alterPositionStyles();\n\n var rootContainer = getState(element).container;\n\n if (!rootContainer) {\n rootContainer = injectContainerElement();\n }\n\n // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n // the targeted element.\n // When the bug is resolved, \"containerContainer\" may be removed.\n\n // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n var scrollbarWidth = scrollbarSizes.width;\n var scrollbarHeight = scrollbarSizes.height;\n var containerContainerStyle = \"position: absolute; flex: none; overflow: hidden; z-index: -1; visibility: hidden; width: 100%; height: 100%; left: 0px; top: 0px;\";\n var containerStyle = \"position: absolute; flex: none; overflow: hidden; z-index: -1; visibility: hidden; \" + getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth);\n var expandStyle = \"position: absolute; flex: none; overflow: scroll; z-index: -1; visibility: hidden; width: 100%; height: 100%;\";\n var shrinkStyle = \"position: absolute; flex: none; overflow: scroll; z-index: -1; visibility: hidden; width: 100%; height: 100%;\";\n var expandChildStyle = \"position: absolute; left: 0; top: 0;\";\n var shrinkChildStyle = \"position: absolute; width: 200%; height: 200%;\";\n\n var containerContainer = document.createElement(\"div\");\n var container = document.createElement(\"div\");\n var expand = document.createElement(\"div\");\n var expandChild = document.createElement(\"div\");\n var shrink = document.createElement(\"div\");\n var shrinkChild = document.createElement(\"div\");\n\n // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n containerContainer.dir = \"ltr\";\n\n containerContainer.style.cssText = containerContainerStyle;\n containerContainer.className = detectionContainerClass;\n container.className = detectionContainerClass;\n container.style.cssText = containerStyle;\n expand.style.cssText = expandStyle;\n expandChild.style.cssText = expandChildStyle;\n shrink.style.cssText = shrinkStyle;\n shrinkChild.style.cssText = shrinkChildStyle;\n\n expand.appendChild(expandChild);\n shrink.appendChild(shrinkChild);\n container.appendChild(expand);\n container.appendChild(shrink);\n containerContainer.appendChild(container);\n rootContainer.appendChild(containerContainer);\n\n function onExpandScroll() {\n getState(element).onExpand && getState(element).onExpand();\n }\n\n function onShrinkScroll() {\n getState(element).onShrink && getState(element).onShrink();\n }\n\n addEvent(expand, \"scroll\", onExpandScroll);\n addEvent(shrink, \"scroll\", onShrinkScroll);\n\n // Store the event handlers here so that they may be removed when uninstall is called.\n // See uninstall function for an explanation why it is needed.\n getState(element).onExpandScroll = onExpandScroll;\n getState(element).onShrinkScroll = onShrinkScroll;\n }\n\n function registerListenersAndPositionElements() {\n function updateChildSizes(element, width, height) {\n var expandChild = getExpandChildElement(element);\n var expandWidth = getExpandWidth(width);\n var expandHeight = getExpandHeight(height);\n expandChild.style.width = expandWidth + \"px\";\n expandChild.style.height = expandHeight + \"px\";\n }\n\n function updateDetectorElements(done) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n debug(\"Storing current size\", width, height);\n\n // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n // Otherwise the if-check in handleScroll is useless.\n storeCurrentSize(element, width, height);\n\n // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n batchProcessor.add(0, function performUpdateChildSizes() {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n if (options.debug) {\n var w = element.offsetWidth;\n var h = element.offsetHeight;\n\n if (w !== width || h !== height) {\n reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n }\n }\n\n updateChildSizes(element, width, height);\n });\n\n batchProcessor.add(1, function updateScrollbars() {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n positionScrollbars(element, width, height);\n });\n\n if (done) {\n batchProcessor.add(2, function () {\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n if (!areElementsInjected()) {\n debug(\"Aborting because element container has not been initialized\");\n return;\n }\n\n done();\n });\n }\n }\n\n function areElementsInjected() {\n return !!getState(element).container;\n }\n\n function notifyListenersIfNeeded() {\n function isFirstNotify() {\n return getState(element).lastNotifiedWidth === undefined;\n }\n\n debug(\"notifyListenersIfNeeded invoked\");\n\n var state = getState(element);\n\n // Don't notify the if the current size is the start size, and this is the first notification.\n if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n }\n\n // Don't notify if the size already has been notified.\n if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n return debug(\"Not notifying: Size already notified\");\n }\n\n\n debug(\"Current size not notified, notifying...\");\n state.lastNotifiedWidth = state.lastWidth;\n state.lastNotifiedHeight = state.lastHeight;\n forEach(getState(element).listeners, function (listener) {\n listener(element);\n });\n }\n\n function handleRender() {\n debug(\"startanimation triggered.\");\n\n if (isUnrendered(element)) {\n debug(\"Ignoring since element is still unrendered...\");\n return;\n }\n\n debug(\"Element rendered.\");\n var expand = getExpandElement(element);\n var shrink = getShrinkElement(element);\n if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n debug(\"Scrollbars out of sync. Updating detector elements...\");\n updateDetectorElements(notifyListenersIfNeeded);\n }\n }\n\n function handleScroll() {\n debug(\"Scroll detected.\");\n\n if (isUnrendered(element)) {\n // Element is still unrendered. Skip this scroll event.\n debug(\"Scroll event fired while unrendered. Ignoring...\");\n return;\n }\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (width !== getState(element).lastWidth || height !== getState(element).lastHeight) {\n debug(\"Element size changed.\");\n updateDetectorElements(notifyListenersIfNeeded);\n } else {\n debug(\"Element size has not changed (\" + width + \"x\" + height + \").\");\n }\n }\n\n debug(\"registerListenersAndPositionElements invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n getState(element).onRendered = handleRender;\n getState(element).onExpand = handleScroll;\n getState(element).onShrink = handleScroll;\n\n var style = getState(element).style;\n updateChildSizes(element, style.width, style.height);\n }\n\n function finalizeDomMutation() {\n debug(\"finalizeDomMutation invoked.\");\n\n if (!getState(element)) {\n debug(\"Aborting because element has been uninstalled\");\n return;\n }\n\n var style = getState(element).style;\n storeCurrentSize(element, style.width, style.height);\n positionScrollbars(element, style.width, style.height);\n }\n\n function ready() {\n callback(element);\n }\n\n function install() {\n debug(\"Installing...\");\n initListeners();\n storeStartSize();\n\n batchProcessor.add(0, storeStyle);\n batchProcessor.add(1, injectScrollElements);\n batchProcessor.add(2, registerListenersAndPositionElements);\n batchProcessor.add(3, finalizeDomMutation);\n batchProcessor.add(4, ready);\n }\n\n debug(\"Making detectable...\");\n\n if (isDetached(element)) {\n debug(\"Element is detached\");\n\n injectContainerElement();\n\n debug(\"Waiting until element is attached...\");\n\n getState(element).onRendered = function () {\n debug(\"Element is now attached\");\n install();\n };\n } else {\n install();\n }\n }\n\n function uninstall(element) {\n var state = getState(element);\n\n if (!state) {\n // Uninstall has been called on a non-erd element.\n return;\n }\n\n // Uninstall may have been called in the following scenarios:\n // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n // So to be on the safe side, let's check for each thing before removing.\n\n // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n state.container && element.removeChild(state.container);\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","\"use strict\";\n\nvar forEach = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker = require(\"./element-utils\");\nvar listenerHandlerMaker = require(\"./listener-handler\");\nvar idGeneratorMaker = require(\"./id-generator\");\nvar idHandlerMaker = require(\"./id-handler\");\nvar reporterMaker = require(\"./reporter\");\nvar browserDetector = require(\"./browser-detector\");\nvar batchProcessorMaker = require(\"batch-processor\");\nvar stateHandler = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n if (!Array.isArray(collection)) {\n var array = [];\n forEach(collection, function (obj) {\n array.push(obj);\n });\n return array;\n } else {\n return collection;\n }\n}\n\nfunction isElement(obj) {\n return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd Determines if listeners should be called when they are getting added.\n Default is true. If true, the listener is guaranteed to be called when it has been added.\n If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n If not provided, a default id handler will be used.\n * @property {reporter} reporter A custom reporter that handles reporting logs, warnings and errors.\n If not provided, a default id handler will be used.\n If set to false, then nothing will be reported.\n * @property {boolean} debug If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n options = options || {};\n\n //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var idHandler;\n\n if (options.idHandler) {\n // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n idHandler = {\n get: function (element) { return options.idHandler.get(element, true); },\n set: options.idHandler.set\n };\n } else {\n var idGenerator = idGeneratorMaker();\n var defaultIdHandler = idHandlerMaker({\n idGenerator: idGenerator,\n stateHandler: stateHandler\n });\n idHandler = defaultIdHandler;\n }\n\n //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var reporter = options.reporter;\n\n if(!reporter) {\n //If options.reporter is false, then the reporter should be quiet.\n var quiet = reporter === false;\n reporter = reporterMaker(quiet);\n }\n\n //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n //Options to be used as default for the listenTo function.\n var globalOptions = {};\n globalOptions.callOnAdd = !!getOption(options, \"callOnAdd\", true);\n globalOptions.debug = !!getOption(options, \"debug\", false);\n\n var eventListenerHandler = listenerHandlerMaker(idHandler);\n var elementUtils = elementUtilsMaker({\n stateHandler: stateHandler\n });\n\n //The detection strategy to be used.\n var detectionStrategy;\n var desiredStrategy = getOption(options, \"strategy\", \"object\");\n var strategyOptions = {\n reporter: reporter,\n batchProcessor: batchProcessor,\n stateHandler: stateHandler,\n idHandler: idHandler\n };\n\n if(desiredStrategy === \"scroll\") {\n if (browserDetector.isLegacyOpera()) {\n reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n desiredStrategy = \"object\";\n } else if (browserDetector.isIE(9)) {\n reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n desiredStrategy = \"object\";\n }\n }\n\n if(desiredStrategy === \"scroll\") {\n detectionStrategy = scrollStrategyMaker(strategyOptions);\n } else if(desiredStrategy === \"object\") {\n detectionStrategy = objectStrategyMaker(strategyOptions);\n } else {\n throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n }\n\n //Calls can be made to listenTo with elements that are still being installed.\n //Also, same elements can occur in the elements list in the listenTo function.\n //With this map, the ready callbacks can be synchronized between the calls\n //so that the ready callback can always be called when an element is ready - even if\n //it wasn't installed from the function itself.\n var onReadyCallbacks = {};\n\n /**\n * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n * @public\n * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n * @param {function} listener The callback to be executed for each resize event for each element.\n */\n function listenTo(options, elements, listener) {\n function onResizeCallback(element) {\n var listeners = eventListenerHandler.get(element);\n forEach(listeners, function callListenerProxy(listener) {\n listener(element);\n });\n }\n\n function addListener(callOnAdd, element, listener) {\n eventListenerHandler.add(element, listener);\n\n if(callOnAdd) {\n listener(element);\n }\n }\n\n //Options object may be omitted.\n if(!listener) {\n listener = elements;\n elements = options;\n options = {};\n }\n\n if(!elements) {\n throw new Error(\"At least one element required.\");\n }\n\n if(!listener) {\n throw new Error(\"Listener required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n var elementsReady = 0;\n\n var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n var debug = getOption(options, \"debug\", globalOptions.debug);\n\n forEach(elements, function attachListenerToElement(element) {\n if (!stateHandler.getState(element)) {\n stateHandler.initState(element);\n idHandler.set(element);\n }\n\n var id = idHandler.get(element);\n\n debug && reporter.log(\"Attaching listener to element\", id, element);\n\n if(!elementUtils.isDetectable(element)) {\n debug && reporter.log(id, \"Not detectable.\");\n if(elementUtils.isBusy(element)) {\n debug && reporter.log(id, \"System busy making it detectable\");\n\n //The element is being prepared to be detectable. Do not make it detectable.\n //Just add the listener, because the element will soon be detectable.\n addListener(callOnAdd, element, listener);\n onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n onReadyCallbacks[id].push(function onReady() {\n elementsReady++;\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n return;\n }\n\n debug && reporter.log(id, \"Making detectable...\");\n //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n elementUtils.markBusy(element, true);\n return detectionStrategy.makeDetectable({ debug: debug }, element, function onElementDetectable(element) {\n debug && reporter.log(id, \"onElementDetectable\");\n\n if (stateHandler.getState(element)) {\n elementUtils.markAsDetectable(element);\n elementUtils.markBusy(element, false);\n detectionStrategy.addListener(element, onResizeCallback);\n addListener(callOnAdd, element, listener);\n\n // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n // so that a resize event may be emitted.\n // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n // Also, check the state existance before since the element may have been uninstalled in the installation process.\n var state = stateHandler.getState(element);\n if (state && state.startSize) {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (state.startSize.width !== width || state.startSize.height !== height) {\n onResizeCallback(element);\n }\n }\n\n if(onReadyCallbacks[id]) {\n forEach(onReadyCallbacks[id], function(callback) {\n callback();\n });\n }\n } else {\n // The element has been unisntalled before being detectable.\n debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n }\n\n delete onReadyCallbacks[id];\n\n elementsReady++;\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n });\n }\n\n debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n //The element has been prepared to be detectable and is ready to be listened to.\n addListener(callOnAdd, element, listener);\n elementsReady++;\n });\n\n if(elementsReady === elements.length) {\n onReadyCallback();\n }\n }\n\n function uninstall(elements) {\n if(!elements) {\n return reporter.error(\"At least one element is required.\");\n }\n\n if (isElement(elements)) {\n // A single element has been passed in.\n elements = [elements];\n } else if (isCollection(elements)) {\n // Convert collection to array for plugins.\n // TODO: May want to check so that all the elements in the collection are valid elements.\n elements = toArray(elements);\n } else {\n return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n }\n\n forEach(elements, function (element) {\n eventListenerHandler.removeAllListeners(element);\n detectionStrategy.uninstall(element);\n stateHandler.cleanState(element);\n });\n }\n\n return {\n listenTo: listenTo,\n removeListener: eventListenerHandler.removeListener,\n removeAllListeners: eventListenerHandler.removeAllListeners,\n uninstall: uninstall\n };\n};\n\nfunction getOption(options, name, defaultValue) {\n var value = options[name];\n\n if((value === undefined || value === null) && defaultValue !== undefined) {\n return defaultValue;\n }\n\n return value;\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _elementResizeDetector = require('element-resize-detector');\n\nvar _elementResizeDetector2 = _interopRequireDefault(_elementResizeDetector);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ContainerDimensions = function (_Component) {\n _inherits(ContainerDimensions, _Component);\n\n _createClass(ContainerDimensions, null, [{\n key: 'getDomNodeDimensions',\n value: function getDomNodeDimensions(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n top = _node$getBoundingClie.top,\n right = _node$getBoundingClie.right,\n bottom = _node$getBoundingClie.bottom,\n left = _node$getBoundingClie.left,\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n\n return { top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n }\n }]);\n\n function ContainerDimensions() {\n _classCallCheck(this, ContainerDimensions);\n\n var _this = _possibleConstructorReturn(this, (ContainerDimensions.__proto__ || Object.getPrototypeOf(ContainerDimensions)).call(this));\n\n _this.state = {\n initiated: false\n };\n _this.onResize = _this.onResize.bind(_this);\n return _this;\n }\n\n _createClass(ContainerDimensions, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.parentNode = _reactDom2.default.findDOMNode(this).parentNode;\n this.elementResizeDetector = (0, _elementResizeDetector2.default)({\n strategy: 'scroll',\n callOnAdd: false\n });\n this.elementResizeDetector.listenTo(this.parentNode, this.onResize);\n this.componentIsMounted = true;\n this.onResize();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.componentIsMounted = false;\n this.elementResizeDetector.uninstall(this.parentNode);\n }\n }, {\n key: 'onResize',\n value: function onResize() {\n var clientRect = ContainerDimensions.getDomNodeDimensions(this.parentNode);\n if (this.componentIsMounted) {\n this.setState(_extends({\n initiated: true\n }, clientRect));\n }\n }\n }, {\n key: 'render',\n value: function render() {\n (0, _invariant2.default)(this.props.children, 'Expected children to be one of function or React.Element');\n\n if (!this.state.initiated) {\n return _react2.default.createElement('div', null);\n }\n if (typeof this.props.children === 'function') {\n var renderedChildren = this.props.children(this.state);\n return renderedChildren && _react.Children.only(renderedChildren);\n }\n return _react.Children.only(_react2.default.cloneElement(this.props.children, this.state));\n }\n }]);\n\n return ContainerDimensions;\n}(_react.Component);\n\nContainerDimensions.propTypes = {\n children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.func]).isRequired\n};\nexports.default = ContainerDimensions;","\"use strict\";\n\nmodule.exports = function() {\n var idCount = 1;\n\n /**\n * Generates a new unique id in the context.\n * @public\n * @returns {number} A unique id in the context.\n */\n function generate() {\n return idCount++;\n }\n\n return {\n generate: generate\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var idGenerator = options.idGenerator;\n var getState = options.stateHandler.getState;\n\n /**\n * Gets the resize detector id of the element.\n * @public\n * @param {element} element The target element to get the id of.\n * @returns {string|number|null} The id of the element. Null if it has no id.\n */\n function getId(element) {\n var state = getState(element);\n\n if (state && state.id !== undefined) {\n return state.id;\n }\n\n return null;\n }\n\n /**\n * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n * @public\n * @param {element} element The target element to set the id of.\n * @returns {string|number|null} The id of the element.\n */\n function setId(element) {\n var state = getState(element);\n\n if (!state) {\n throw new Error(\"setId required the element to have a resize detection state.\");\n }\n\n var id = idGenerator.generate();\n\n state.id = id;\n\n return id;\n }\n\n return {\n get: getId,\n set: setId\n };\n};\n","\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n function noop() {\n //Does nothing.\n }\n\n var reporter = {\n log: noop,\n warn: noop,\n error: noop\n };\n\n if(!quiet && window.console) {\n var attachFunction = function(reporter, name) {\n //The proxy is needed to be able to call the method with the console context,\n //since we cannot use bind.\n reporter[name] = function reporterProxy() {\n var f = console[name];\n if (f.apply) { //IE9 does not support console.log.apply :)\n f.apply(console, arguments);\n } else {\n for (var i = 0; i < arguments.length; i++) {\n f(arguments[i]);\n }\n }\n };\n };\n\n attachFunction(reporter, \"log\");\n attachFunction(reporter, \"warn\");\n attachFunction(reporter, \"error\");\n }\n\n return reporter;\n};","\"use strict\";\n\nmodule.exports = function(idHandler) {\n var eventListeners = {};\n\n /**\n * Gets all listeners for the given element.\n * @public\n * @param {element} element The element to get all listeners for.\n * @returns All listeners for the given element.\n */\n function getListeners(element) {\n var id = idHandler.get(element);\n\n if (id === undefined) {\n return [];\n }\n\n return eventListeners[id] || [];\n }\n\n /**\n * Stores the given listener for the given element. Will not actually add the listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The callback that the element has added.\n */\n function addListener(element, listener) {\n var id = idHandler.get(element);\n\n if(!eventListeners[id]) {\n eventListeners[id] = [];\n }\n\n eventListeners[id].push(listener);\n }\n\n function removeListener(element, listener) {\n var listeners = getListeners(element);\n for (var i = 0, len = listeners.length; i < len; ++i) {\n if (listeners[i] === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n }\n\n function removeAllListeners(element) {\n var listeners = getListeners(element);\n if (!listeners) { return; }\n listeners.length = 0;\n }\n\n return {\n get: getListeners,\n add: addListener,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners\n };\n};\n","\"use strict\";\n\nmodule.exports = function(options) {\n var getState = options.stateHandler.getState;\n\n /**\n * Tells if the element has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is detectable or not.\n */\n function isDetectable(element) {\n var state = getState(element);\n return state && !!state.isDetectable;\n }\n\n /**\n * Marks the element that it has been made detectable and ready to be listened for resize events.\n * @public\n * @param {element} The element to mark.\n */\n function markAsDetectable(element) {\n getState(element).isDetectable = true;\n }\n\n /**\n * Tells if the element is busy or not.\n * @public\n * @param {element} The element to check.\n * @returns {boolean} True or false depending on if the element is busy or not.\n */\n function isBusy(element) {\n return !!getState(element).busy;\n }\n\n /**\n * Marks the object is busy and should not be made detectable.\n * @public\n * @param {element} element The element to mark.\n * @param {boolean} busy If the element is busy or not.\n */\n function markBusy(element, busy) {\n getState(element).busy = !!busy;\n }\n\n return {\n isDetectable: isDetectable,\n markAsDetectable: markAsDetectable,\n isBusy: isBusy,\n markBusy: markBusy\n };\n};\n","/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n options = options || {};\n var reporter = options.reporter;\n var batchProcessor = options.batchProcessor;\n var getState = options.stateHandler.getState;\n\n if(!reporter) {\n throw new Error(\"Missing required dependency: reporter.\");\n }\n\n /**\n * Adds a resize event listener to the element.\n * @public\n * @param {element} element The element that should have the listener added.\n * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n */\n function addListener(element, listener) {\n if(!getObject(element)) {\n throw new Error(\"Element is not detectable by this strategy.\");\n }\n\n function listenerProxy() {\n listener(element);\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support object, but supports the resize event directly on elements.\n getState(element).object = {\n proxy: listenerProxy\n };\n element.attachEvent(\"onresize\", listenerProxy);\n } else {\n var object = getObject(element);\n object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n }\n }\n\n /**\n * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n * @private\n * @param {object} options Optional options object.\n * @param {element} element The element to make detectable\n * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n */\n function makeDetectable(options, element, callback) {\n if (!callback) {\n callback = element;\n element = options;\n options = null;\n }\n\n options = options || {};\n var debug = options.debug;\n\n function injectObject(element, callback) {\n var OBJECT_STYLE = \"display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; padding: 0; margin: 0; opacity: 0; z-index: -1000; pointer-events: none;\";\n\n //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n var positionCheckPerformed = false;\n\n // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n var style = window.getComputedStyle(element);\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n getState(element).startSize = {\n width: width,\n height: height\n };\n\n function mutateDom() {\n function alterPositionStyles() {\n if(style.position === \"static\") {\n element.style.position = \"relative\";\n\n var removeRelativeStyles = function(reporter, element, style, property) {\n function getNumericalValue(value) {\n return value.replace(/[^-\\d\\.]/g, \"\");\n }\n\n var value = style[property];\n\n if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n element.style[property] = 0;\n }\n };\n\n //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n removeRelativeStyles(reporter, element, style, \"top\");\n removeRelativeStyles(reporter, element, style, \"right\");\n removeRelativeStyles(reporter, element, style, \"bottom\");\n removeRelativeStyles(reporter, element, style, \"left\");\n }\n }\n\n function onObjectLoad() {\n // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n if (!positionCheckPerformed) {\n alterPositionStyles();\n }\n\n /*jshint validthis: true */\n\n function getDocument(element, callback) {\n //Opera 12 seem to call the object.onload before the actual document has been created.\n //So if it is not present, poll it with an timeout until it is present.\n //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n if(!element.contentDocument) {\n setTimeout(function checkForObjectDocument() {\n getDocument(element, callback);\n }, 100);\n\n return;\n }\n\n callback(element.contentDocument);\n }\n\n //Mutating the object element here seems to fire another load event.\n //Mutating the inner document of the object element is fine though.\n var objectElement = this;\n\n //Create the style element to be added to the object.\n getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n //Notify that the element is ready to be listened to.\n callback(element);\n });\n }\n\n // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n if (style.position !== \"\") {\n alterPositionStyles(style);\n positionCheckPerformed = true;\n }\n\n //Add an object element as a child to the target element that will be listened to for resize events.\n var object = document.createElement(\"object\");\n object.style.cssText = OBJECT_STYLE;\n object.tabIndex = -1;\n object.type = \"text/html\";\n object.setAttribute(\"aria-hidden\", \"true\");\n object.onload = onObjectLoad;\n\n //Safari: This must occur before adding the object to the DOM.\n //IE: Does not like that this happens before, even if it is also added after.\n if(!browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n\n element.appendChild(object);\n getState(element).object = object;\n\n //IE: This must occur after adding the object to the DOM.\n if(browserDetector.isIE()) {\n object.data = \"about:blank\";\n }\n }\n\n if(batchProcessor) {\n batchProcessor.add(mutateDom);\n } else {\n mutateDom();\n }\n }\n\n if(browserDetector.isIE(8)) {\n //IE 8 does not support objects properly. Luckily they do support the resize event.\n //So do not inject the object and notify that the element is already ready to be listened to.\n //The event handler for the resize event is attached in the utils.addListener instead.\n callback(element);\n } else {\n injectObject(element, callback);\n }\n }\n\n /**\n * Returns the child object of the target element.\n * @private\n * @param {element} element The target element.\n * @returns The object element of the target.\n */\n function getObject(element) {\n return getState(element).object;\n }\n\n function uninstall(element) {\n if(browserDetector.isIE(8)) {\n element.detachEvent(\"onresize\", getState(element).object.proxy);\n } else {\n element.removeChild(getObject(element));\n }\n delete getState(element).object;\n }\n\n return {\n makeDetectable: makeDetectable,\n addListener: addListener,\n uninstall: uninstall\n };\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return x;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import {slice} from \"./array\";\nimport bisect from \"./bisect\";\nimport constant from \"./constant\";\nimport extent from \"./extent\";\nimport identity from \"./identity\";\nimport range from \"./range\";\nimport {tickStep} from \"./ticks\";\nimport sturges from \"./threshold/sturges\";\n\nexport default function() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.labella=e():t.labella=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var r={};return e.m=t,e.c=r,e.p=\"\",e(0)}([function(t,e,r){\"use strict\";t.exports={Node:r(1),Force:r(2),Distributor:r(3),Renderer:r(10)}},function(t,e){\"use strict\";function r(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var n=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),i=function(){function t(e,n,i){r(this,t),this.idealPos=e,this.currentPos=e,this.width=n,this.data=i,this.layerIndex=0}return n(t,[{key:\"distanceFrom\",value:function(t){var e=this.width/2,r=t.width/2;return Math.max(this.currentPos-e,t.currentPos-r)-Math.min(this.currentPos+e,t.currentPos+r)}},{key:\"moveToIdealPosition\",value:function(){return this.currentPos=this.idealPos,this}},{key:\"displacement\",value:function(){return this.idealPos-this.currentPos}},{key:\"overlapWithNode\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.distanceFrom(t)-e<0}},{key:\"overlapWithPoint\",value:function(t){var e=this.width/2;return t>=this.currentPos-e&&t<=this.currentPos+e}},{key:\"positionBefore\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.currentLeft()-this.width/2-e}},{key:\"positionAfter\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.currentRight()+this.width/2+e}},{key:\"currentRight\",value:function(){return this.currentPos+this.width/2}},{key:\"currentLeft\",value:function(){return this.currentPos-this.width/2}},{key:\"idealRight\",value:function(){return this.idealPos+this.width/2}},{key:\"idealLeft\",value:function(){return this.idealPos-this.width/2}},{key:\"createStub\",value:function(e){var r=new t(this.idealPos,e,this.data);return r.currentPos=this.currentPos,r.child=this,this.parent=r,r}},{key:\"removeStub\",value:function(){return this.parent&&(this.parent.child=null,this.parent=null),this}},{key:\"isStub\",value:function(){return!!this.child}},{key:\"getPathToRoot\",value:function(){for(var t=[],e=this;e;)t.push(e),e=e.parent;return t}},{key:\"getPathFromRoot\",value:function(){return this.getPathToRoot().reverse()}},{key:\"getPathToRootLength\",value:function(){for(var t=0,e=this;e;){var r=e.parent?e.parent.currentPos:e.idealPos;t+=Math.abs(e.currentPos-r),e=e.parent}return t}},{key:\"getRoot\",value:function(){for(var t=this,e=this;e;)t=e,e=e.parent;return t}},{key:\"getLayerIndex\",value:function(){return this.layerIndex}},{key:\"clone\",value:function(){var e=new t(this.idealPos,this.width,this.data);return e.currentPos=this.currentPos,e.layerIndex=this.layerIndex,e}}]),t}();t.exports=i},function(t,e,r){\"use strict\";var n=r(3),i=r(4),o=r(8),s={nodeSpacing:3,minPos:0,maxPos:null,algorithm:\"overlap\",removeOverlap:!0,density:.85,stubWidth:1},u=function(t){var e={},r=i.extend({},s),u=new n,a=[],c=null;return e.nodes=function(t){return arguments.length?(a=t,c=[t.concat()],e):a},e.getLayers=function(){return c},e.options=function(t){if(!arguments.length)return r;r=i.extend(r,t);var o=i.pick(r,Object.keys(n.DEFAULT_OPTIONS));return i.isDefined(r.minPos)&&i.isDefined(r.maxPos)?o.layerWidth=r.maxPos-r.minPos:o.layerWidth=null,u.options(o),e},e.options(t),e.compute=function(){var t=i.pick(r,Object.keys(o.DEFAULT_OPTIONS));return a.forEach(function(t){t.removeStub()}),c=u.distribute(a),c.map(function(e,n){e.forEach(function(t){t.layerIndex=n}),r.removeOverlap&&o(e,t)}),e},e.start=function(){console.log(\"[warning] force.start() is deprecated. Please use force.compute() instead.\")},e};u.DEFAULT_OPTIONS=s,t.exports=u},function(t,e,r){\"use strict\";var n=r(4),i=r(6),o={algorithm:\"overlap\",layerWidth:1e3,density:.75,nodeSpacing:3,stubWidth:1},s=function(t){var e={};t=n.extend({},o,t),e.options=function(r){return arguments.length?(t=n.extend(t,r),e):t},e.computeRequiredWidth=function(e){return n.sum(e,function(e){return e.width+t.nodeSpacing})-t.nodeSpacing},e.maxWidthPerLayer=function(){return t.density*t.layerWidth},e.needToSplit=function(t){return e.estimateRequiredLayers(t)>1},e.estimateRequiredLayers=function(r){return t.layerWidth?Math.ceil(e.computeRequiredWidth(r)/e.maxWidthPerLayer()):1};var r={simple:function(r){for(var n=e.estimateRequiredLayers(r),i=[],o=0;o<n;o++)i.push([]);return r.forEach(function(e,r){var o=r%n;i[o].push(e);for(var s=e,u=o-1;u>=0;u--)s=s.createStub(t.stubWidth),i[u].push(s)}),i},roundRobin:function(t){var e=[];return e},overlap:function(r){for(var n=[],i=e.maxWidthPerLayer(),o=r.concat(),s=e.computeRequiredWidth(o);s>i;){e.countIdealOverlaps(o);var u=o.concat(),a=s;for(o=[];u.length>2&&a>i;){u.sort(function(t,e){return e.overlapCount-t.overlapCount});var c=u.shift();a-=c.width,a+=t.stubWidth,c.overlaps.forEach(function(t){t.overlapCount--}),o.push(c)}n.push(u),s=e.computeRequiredWidth(o)}o.length>0&&n.push(o);for(var h=n.length-1;h>=1;h--)for(var l=n[h],f=0;f<l.length;f++){var p=l[f];if(!p.isStub())for(var d=p,v=h-1;v>=0;v--)d=d.createStub(t.stubWidth),n[v].push(d)}return n}};return e.countIdealOverlaps=function(e){var r=new i(t.layerWidth/2);return e.forEach(function(t){r.add([t.idealLeft(),t.idealRight(),t])}),e.forEach(function(t){var e=r.search(t.idealLeft(),t.idealRight());t.overlaps=e.map(function(t){return t.data[2]}),t.overlapCount=e.length}),e},e.distribute=function(i){if(!i||0===i.length)return[];if(\"none\"==t.algorithm||!n.isDefined(t.algorithm))return[i];if(!e.needToSplit(i))return[i];var o=i.concat().sort(function(t,e){return t.idealPos-e.idealPos});if(\"function\"==typeof t.algorithm)return t.algorithm(o,t);if(r.hasOwnProperty(t.algorithm))return r[t.algorithm](o);throw\"Unknown algorithm: \"+t.algorithm},e};s.DEFAULT_OPTIONS=o,t.exports=s},function(t,e,r){\"use strict\";var n={isDefined:function(t){return null!==t&&void 0!==t},last:function(t){return t.length>0?t[t.length-1]:null},pick:function(t,e){return e.reduce(function(e,r){return e[r]=t[r],e},{})},sum:function(t,e){return t.map(e).reduce(function(t,e){return t+e},0)}};n.extend=r(5),t.exports=n},function(t,e){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=function(t){return\"function\"==typeof Array.isArray?Array.isArray(t):\"[object Array]\"===i.call(t)},s=function(t){if(!t||\"[object Object]\"!==i.call(t))return!1;var e=n.call(t,\"constructor\"),r=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,\"isPrototypeOf\");if(t.constructor&&!e&&!r)return!1;var o;for(o in t);return void 0===o||n.call(t,o)};t.exports=function u(){var t,e,n,i,a,c,h=arguments[0],l=1,f=arguments.length,p=!1;for(\"boolean\"==typeof h?(p=h,h=arguments[1]||{},l=2):(\"object\"!==(\"undefined\"==typeof h?\"undefined\":r(h))&&\"function\"!=typeof h||null==h)&&(h={});l<f;++l)if(t=arguments[l],null!=t)for(e in t)n=h[e],i=t[e],h!==i&&(p&&i&&(s(i)||(a=o(i)))?(a?(a=!1,c=n&&o(n)?n:[]):c=n&&s(n)?n:{},h[e]=u(p,c,i)):void 0!==i&&(h[e]=i));return h}},function(t,e,r){\"use strict\";function n(t,e){if(e||(e={}),this.startKey=e.startKey||0,this.endKey=e.endKey||1,this.intervalHash={},this.pointTree=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t[0]-e[0];return r>0?1:0==r?0:-1}}),this._autoIncrement=0,!t||\"number\"!=typeof t)throw new Error(\"you must specify center index as the 2nd argument.\");this.root=new u(t,this)}function i(t,e){return e.end<t.idx?(t.left||(t.left=new u(e.start+e.end>>1,this)),i.call(this,t.left,e)):t.idx<e.start?(t.right||(t.right=new u(e.start+e.end>>1,this)),i.call(this,t.right,e)):t.insert(e)}function o(t,e,r){if(t)return e<t.idx?(t.starts.every(function(t){var n=t.start<=e;return n&&r.push(t.result()),n}),o.call(this,t.left,e,r)):e>t.idx?(t.ends.every(function(t){var n=t.end>=e;return n&&r.push(t.result()),n}),o.call(this,t.right,e,r)):void t.starts.map(function(t){r.push(t.result())})}function s(t,e,r){if(e-t<=0)throw new Error(\"end must be greater than start. start: \"+t+\", end: \"+e);var n={},i=[];o.call(this,this.root,t+e>>1,i,!0),i.forEach(function(t){n[t.id]=!0});for(var s=this.pointTree.bsearch([t,null]),u=this.pointTree;s>=0&&u[s][0]==t;)s--;var a=this.pointTree.bsearch([e,null]);if(a>=0){for(var c=u.length-1;a<=c&&u[a][0]<=e;)a++;u.slice(s+1,a).forEach(function(t){var e=t[1];n[e]=!0},this),Object.keys(n).forEach(function(n){var i=this.intervalHash[n];r.push(i.result(t,e))},this)}}function u(t){this.idx=t,this.starts=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t.start-e.start;return r>0?1:0==r?0:-1}}),this.ends=new c({compare:function(t,e){if(null==t)return-1;if(null==e)return 1;var r=t.end-e.end;return r<0?1:0==r?0:-1}})}function a(t,e,r,n){if(this.id=e,this.start=t[r],this.end=t[n],this.data=t,\"number\"!=typeof this.start||\"number\"!=typeof this.end)throw new Error(\"start, end must be number. start: \"+this.start+\", end: \"+this.end);if(this.start>=this.end)throw new Error(\"start must be smaller than end. start: \"+this.start+\", end: \"+this.end)}var c=r(7);n.prototype.add=function(t,e){if(this.intervalHash[e])throw new Error(\"id \"+e+\" is already registered.\");if(void 0==e){for(;this.intervalHash[this._autoIncrement];)this._autoIncrement++;e=this._autoIncrement}var r=new a(t,e,this.startKey,this.endKey);this.pointTree.insert([r.start,e]),this.pointTree.insert([r.end,e]),this.intervalHash[e]=r,this._autoIncrement++,i.call(this,this.root,r)},n.prototype.search=function(t,e){var r=[];if(\"number\"!=typeof t)throw new Error(t+\": invalid input\");if(void 0==e)o.call(this,this.root,t,r);else{if(\"number\"!=typeof e)throw new Error(t+\",\"+e+\": invalid input\");s.call(this,t,e,r)}return r},n.prototype.remove=function(t){},u.prototype.insert=function(t){this.starts.insert(t),this.ends.insert(t)},a.prototype.result=function(t,e){var r={id:this.id,data:this.data};if(\"number\"==typeof t&&\"number\"==typeof e){var n=Math.max(this.start,t),i=Math.min(this.end,e),o=i-n;r.rate1=o/(e-t),r.rate2=o/(this.end-this.start)}return r},t.exports=n},function(t,e){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},n=function i(){var t=null,e={},n=arguments;[\"0\",\"1\"].forEach(function(i){var o=n[i];Array.isArray(o)?t=o:o&&\"object\"==(\"undefined\"==typeof o?\"undefined\":r(o))&&(e=o)}),\"function\"==typeof e.filter&&(this._filter=e.filter),\"function\"==typeof e.compare?this._compare=e.compare:\"string\"==typeof e.compare&&i.compares[e.compare]&&(this._compare=i.compares[e.compare]),this._unique=!!e.unique,e.resume&&t?t.forEach(function(t,e){this.push(t)},this):t&&this.insert.apply(this,t)};n.create=function(t,e){return new n(t,e)},n.prototype=new Array,n.prototype.constructor=Array.prototype.constructor,n.prototype.insertOne=function(t){var e=this.bsearch(t);return(!this._unique||null==this.key(t,e))&&(!!this._filter(t,e)&&(this.splice(e+1,0,t),e+1))},n.prototype.insert=function(){return Array.prototype.map.call(arguments,function(t){return this.insertOne(t)},this)},n.prototype.remove=function(t){return this.splice(t,1),this},n.prototype.bsearch=function(t){if(!this.length)return-1;for(var e,r=0,n=this.length;n-r>1;){e=Math.floor((r+n)/2);var i=this[e],o=this._compare(t,i);if(0==o)return e;o>0?r=e:n=e}return 0==r&&this._compare(this[0],t)>0?-1:r},n.prototype.key=function(t,e){null==e&&(e=this.bsearch(t));var r=e;if(r==-1||this._compare(this[r],t)<0)return r+1<this.length&&0==this._compare(this[r+1],t)?r+1:null;for(;r>=1&&0==this._compare(this[r-1],t);)r--;return r},n.prototype.keys=function(t,e){var r=[];null==e&&(e=this.bsearch(t));for(var n=e;n>=0&&0==this._compare(this[n],t);)r.push(n),n--;var i=this.length;for(n=e+1;n<i&&0==this._compare(this[n],t);)r.push(n),n++;return r.length?r:null},n.prototype.unique=function(t){if(t)return this.filter(function(t,e){return 0==e||0!=this._compare(this[e-1],t)},this);var e=0;return this.map(function(t,r){return 0==r||0!=this._compare(this[r-1],t)?null:r-e++},this).forEach(function(t){null!=t&&this.remove(t)},this),this},n.prototype.toArray=function(){return this.slice()},n.prototype._filter=function(t,e){return!0},n.compares={number:function(t,e){var r=t-e;return r>0?1:0==r?0:-1},string:function(t,e){return t>e?1:t==e?0:-1}},n.prototype._compare=n.compares.string,t.exports=n},function(t,e,r){\"use strict\";function n(t){var e=new s.Variable(t.targetPos);return e.node=t,e}function i(t,e){if(t.length>0){e=o.extend(u,e),t.forEach(function(t,e){t.targetPos=t.parent?t.parent.currentPos:t.idealPos,t.index=e});for(var r=t.concat().sort(function(t,e){var r=t.targetPos-e.targetPos;if(0!==r)return r;var n=t.isStub()-e.isStub();return 0!==n?n:t.index-e.index}).map(n),i=[],a=1;a<r.length;a++){var c=r[a-1],h=r[a],l=void 0;l=c.node.isStub()&&h.node.isStub()?(c.node.width+h.node.width)/2+e.lineSpacing:(c.node.width+h.node.width)/2+e.nodeSpacing,i.push(new s.Constraint(c,h,l))}if(o.isDefined(e.minPos)){var f=new s.Variable(e.minPos,1e10),p=r[0];i.push(new s.Constraint(f,p,p.node.width/2)),r.unshift(f)}if(o.isDefined(e.maxPos)){var d=new s.Variable(e.maxPos,1e10),v=o.last(r);i.push(new s.Constraint(v,d,v.node.width/2)),r.push(d)}new s.Solver(r,i).solve(),r.filter(function(t){return t.node}).map(function(t){return t.node.currentPos=Math.round(t.position()),t})}return t}var o=r(4),s=r(9),u={lineSpacing:2,nodeSpacing:3,minPos:0,maxPos:null};i.DEFAULT_OPTIONS=u,t.exports=i},function(t,e){\"use strict\";var r={},n=function(){function t(t){this.scale=t,this.AB=0,this.AD=0,this.A2=0}return t.prototype.addVariable=function(t){var e=this.scale/t.scale,r=t.offset/t.scale,n=t.weight;this.AB+=n*e*r,this.AD+=n*e*t.desiredPosition,this.A2+=n*e*e},t.prototype.getPosn=function(){return(this.AD-this.AB)/this.A2},t}();r.PositionStats=n;var i=function(){function t(t,e,r,n){void 0===n&&(n=!1),this.left=t,this.right=e,this.gap=r,this.equality=n,this.active=!1,this.unsatisfiable=!1,this.left=t,this.right=e,this.gap=r,this.equality=n}return t.prototype.slack=function(){return this.unsatisfiable?Number.MAX_VALUE:this.right.scale*this.right.position()-this.gap-this.left.scale*this.left.position()},t}();r.Constraint=i;var o=function(){function t(t,e,r){void 0===e&&(e=1),void 0===r&&(r=1),this.desiredPosition=t,this.weight=e,this.scale=r,this.offset=0}return t.prototype.dfdv=function(){return 2*this.weight*(this.position()-this.desiredPosition)},t.prototype.position=function(){return(this.block.ps.scale*this.block.posn+this.offset)/this.scale},t.prototype.visitNeighbours=function(t,e){var r=function(r,n){return r.active&&t!==n&&e(r,n)};this.cOut.forEach(function(t){return r(t,t.right)}),this.cIn.forEach(function(t){return r(t,t.left)})},t}();r.Variable=o;var s=function(){function t(t){this.vars=[],t.offset=0,this.ps=new n(t.scale),this.addVariable(t)}return t.prototype.addVariable=function(t){t.block=this,this.vars.push(t),this.ps.addVariable(t),this.posn=this.ps.getPosn()},t.prototype.updateWeightedPosition=function(){this.ps.AB=this.ps.AD=this.ps.A2=0;for(var t=0,e=this.vars.length;t<e;++t)this.ps.addVariable(this.vars[t]);this.posn=this.ps.getPosn()},t.prototype.compute_lm=function(t,e,r){var n=this,i=t.dfdv();return t.visitNeighbours(e,function(e,o){var s=n.compute_lm(o,t,r);o===e.right?(i+=s*e.left.scale,e.lm=s):(i+=s*e.right.scale,e.lm=-s),r(e)}),i/t.scale},t.prototype.populateSplitBlock=function(t,e){var r=this;t.visitNeighbours(e,function(e,n){n.offset=t.offset+(n===e.right?e.gap:-e.gap),r.addVariable(n),r.populateSplitBlock(n,t)})},t.prototype.traverse=function(t,e,r,n){var i=this;void 0===r&&(r=this.vars[0]),void 0===n&&(n=null),r.visitNeighbours(n,function(n,o){e.push(t(n)),i.traverse(t,e,o,r)})},t.prototype.findMinLM=function(){var t=null;return this.compute_lm(this.vars[0],null,function(e){!e.equality&&(null===t||e.lm<t.lm)&&(t=e)}),t},t.prototype.findMinLMBetween=function(t,e){this.compute_lm(t,null,function(){});var r=null;return this.findPath(t,null,e,function(t,e){!t.equality&&t.right===e&&(null===r||t.lm<r.lm)&&(r=t)}),r},t.prototype.findPath=function(t,e,r,n){var i=this,o=!1;return t.visitNeighbours(e,function(e,s){o||s!==r&&!i.findPath(s,t,r,n)||(o=!0,n(e,s))}),o},t.prototype.isActiveDirectedPathBetween=function(t,e){if(t===e)return!0;for(var r=t.cOut.length;r--;){var n=t.cOut[r];if(n.active&&this.isActiveDirectedPathBetween(n.right,e))return!0}return!1},t.split=function(e){return e.active=!1,[t.createSplitBlock(e.left),t.createSplitBlock(e.right)]},t.createSplitBlock=function(e){var r=new t(e);return r.populateSplitBlock(e,null),r},t.prototype.splitBetween=function(e,r){var n=this.findMinLMBetween(e,r);if(null!==n){var i=t.split(n);return{constraint:n,lb:i[0],rb:i[1]}}return null},t.prototype.mergeAcross=function(t,e,r){e.active=!0;for(var n=0,i=t.vars.length;n<i;++n){var o=t.vars[n];o.offset+=r,this.addVariable(o)}this.posn=this.ps.getPosn()},t.prototype.cost=function(){for(var t=0,e=this.vars.length;e--;){var r=this.vars[e],n=r.position()-r.desiredPosition;t+=n*n*r.weight}return t},t}();r.Block=s;var u=function(){function t(t){this.vs=t;var e=t.length;for(this.list=new Array(e);e--;){var r=new s(t[e]);this.list[e]=r,r.blockInd=e}}return t.prototype.cost=function(){for(var t=0,e=this.list.length;e--;)t+=this.list[e].cost();return t},t.prototype.insert=function(t){t.blockInd=this.list.length,this.list.push(t)},t.prototype.remove=function(t){var e=this.list.length-1,r=this.list[e];this.list.length=e,t!==r&&(this.list[t.blockInd]=r,r.blockInd=t.blockInd)},t.prototype.merge=function(t){var e=t.left.block,r=t.right.block,n=t.right.offset-t.left.offset-t.gap;e.vars.length<r.vars.length?(r.mergeAcross(e,t,n),this.remove(e)):(e.mergeAcross(r,t,-n),this.remove(r))},t.prototype.forEach=function(t){this.list.forEach(t)},t.prototype.updateBlockPositions=function(){this.list.forEach(function(t){return t.updateWeightedPosition()})},t.prototype.split=function(t){var e=this;this.updateBlockPositions(),this.list.forEach(function(r){var n=r.findMinLM();null!==n&&n.lm<a.LAGRANGIAN_TOLERANCE&&(r=n.left.block,s.split(n).forEach(function(t){return e.insert(t)}),e.remove(r),t.push(n))})},t}();r.Blocks=u;var a=function(){function t(t,e){this.vs=t,this.cs=e,this.vs=t,t.forEach(function(t){t.cIn=[],t.cOut=[]}),this.cs=e,e.forEach(function(t){t.left.cOut.push(t),t.right.cIn.push(t)}),this.inactive=e.map(function(t){return t.active=!1,t}),this.bs=null}return t.prototype.cost=function(){return this.bs.cost()},t.prototype.setStartingPositions=function(t){this.inactive=this.cs.map(function(t){return t.active=!1,t}),this.bs=new u(this.vs),this.bs.forEach(function(e,r){return e.posn=t[r]})},t.prototype.setDesiredPositions=function(t){this.vs.forEach(function(e,r){return e.desiredPosition=t[r]})},t.prototype.mostViolated=function(){for(var e=Number.MAX_VALUE,r=null,n=this.inactive,i=n.length,o=i,s=0;s<i;++s){var u=n[s];if(!u.unsatisfiable){var a=u.slack();if((u.equality||a<e)&&(e=a,r=u,o=s,u.equality))break}}return o!==i&&(e<t.ZERO_UPPERBOUND&&!r.active||r.equality)&&(n[o]=n[i-1],n.length=i-1),r},t.prototype.satisfy=function(){null==this.bs&&(this.bs=new u(this.vs)),this.bs.split(this.inactive);for(var e=null;(e=this.mostViolated())&&(e.equality||e.slack()<t.ZERO_UPPERBOUND&&!e.active);){var r=e.left.block,n=e.right.block;if(r!==n)this.bs.merge(e);else{if(r.isActiveDirectedPathBetween(e.right,e.left)){e.unsatisfiable=!0;continue}var i=r.splitBetween(e.left,e.right);if(null===i){e.unsatisfiable=!0;continue}this.bs.insert(i.lb),this.bs.insert(i.rb),this.bs.remove(r),this.inactive.push(i.constraint),e.slack()>=0?this.inactive.push(e):this.bs.merge(e)}}},t.prototype.solve=function(){this.satisfy();for(var t=Number.MAX_VALUE,e=this.bs.cost();Math.abs(t-e)>1e-4;)this.satisfy(),t=e,e=this.bs.cost();return e},t.LAGRANGIAN_TOLERANCE=-1e-4,t.ZERO_UPPERBOUND=-1e-10,t}();r.Solver=a,t.exports=r},function(t,e,r){\"use strict\";function n(t){this.options=c.extend({layerGap:60,nodeHeight:10,direction:\"down\"},t)}function i(t){return\"L \"+t.join(\" \")}function o(t){return\"M \"+t.join(\" \")}function s(t,e,r){return\"C \"+t.join(\" \")+\" \"+e.join(\" \")+\" \"+r.join(\" \")}function u(t,e){var r=(t[1]+e[1])/2;return s([t[0],r],[e[0],r],e)}function a(t,e){var r=(t[0]+e[0])/2;return s([r,t[1]],[r,e[1]],e)}var c=r(4);n.lineTo=i,n.moveTo=o,n.curveTo=s,n.vCurveBetween=u,n.hCurveBetween=a,n.prototype.getWaypoints=function(t){var e=this.options,r=e.direction,n=t.getPathFromRoot(),i=e.nodeHeight+e.layerGap;return\"left\"===r?[[[0,n[0].idealPos]]].concat(n.map(function(t,r){var n=i*(r+1)*-1;return[[n+e.nodeHeight,t.currentPos],[n,t.currentPos]]})):\"right\"===r?[[[0,n[0].idealPos]]].concat(n.map(function(t,r){var n=i*(r+1);return[[n-e.nodeHeight,t.currentPos],[n,t.currentPos]]})):\"up\"===r?[[[n[0].idealPos,0]]].concat(n.map(function(t,r){var n=i*(r+1)*-1;return[[t.currentPos,n+e.nodeHeight],[t.currentPos,n]]})):[[[n[0].idealPos,0]]].concat(n.map(function(t,r){var n=i*(r+1);return[[t.currentPos,n-e.nodeHeight],[t.currentPos,n]]}))},n.prototype.layout=function(t){var e=this.options,r=e.layerGap+e.nodeHeight;switch(e.direction){case\"left\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=-n-e.nodeHeight,t.y=t.currentPos,t.dx=e.nodeHeight,t.dy=t.width});break;case\"right\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=n,t.y=t.currentPos,t.dx=e.nodeHeight,t.dy=t.width});break;case\"up\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=t.currentPos,t.y=-n-e.nodeHeight,t.dx=t.width,t.dy=e.nodeHeight});break;default:case\"down\":t.forEach(function(t){var n=t.getLayerIndex()*r+e.layerGap;t.x=t.currentPos,t.y=n,t.dx=t.width,t.dy=e.nodeHeight})}return t},n.prototype.generatePath=function(t){var e=this.options,r=e.direction,n=this.getWaypoints(t,r),s=[o(n[0][0])];return\"left\"===r||\"right\"===r?n.reduce(function(t,e,r){return s.push(a(t[t.length-1],e[0])),r<n.length-1&&s.push(i(e[1])),e}):n.reduce(function(t,e,r){return s.push(u(t[t.length-1],e[0])),r<n.length-1&&s.push(i(e[1])),e}),s.join(\" \")},t.exports=n}])});","import * as React from 'react';\n\nexport interface IChartHeaderProps {\n metric: string;\n}\n\nexport default ({ metric }: IChartHeaderProps) => {\n return (\n <div className=\"chart-header\">\n <h6 className=\"heading-6 color-text-primary\">\n <span className=\"uppercase prefix\">metric name:</span>\n <span>\n &nbsp;\n {metric}\n </span>\n </h6>\n </div>\n );\n};\n","interface IColorConfig {\n [propName: string]: string;\n}\n\ninterface ITimeSeriesConfig {\n [propName: string]: any;\n}\n\ninterface IDataGroup {\n [group: string]: string;\n}\n\ninterface IVizConfig {\n readonly colors: IColorConfig;\n readonly height: number;\n readonly timeSeries: ITimeSeriesConfig;\n readonly dataGroupMap: IDataGroup;\n}\n\nexport const vizConfig: IVizConfig = {\n colors: {\n baseline: '#52b3d9',\n canary: '#e26a6a',\n background: '#f8f8f8',\n },\n height: 400,\n timeSeries: {\n minimapDataPointsThreshold: 240,\n minimapHeight: 40,\n axisTickLineHeight: 4,\n axisTickLabelHeight: 32,\n axisLabelHeight: 16,\n },\n dataGroupMap: {\n baseline: 'control',\n canary: 'experiment',\n },\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nimport { vizConfig } from './config';\n\nimport './chartLegend.less';\n\ninterface IChartLegendProps {\n isClickable?: boolean;\n onClickHandler?: (group: string) => void;\n showGroup?: { [group: string]: boolean };\n}\n\nexport default (props: IChartLegendProps) => {\n const { onClickHandler, showGroup = { baseline: true, canary: true }, isClickable = false } = props;\n\n const baselineIconStyle = {\n backgroundColor: vizConfig.colors.baseline,\n };\n\n const canaryIconStyle = {\n backgroundColor: vizConfig.colors.canary,\n };\n\n const handleClick = (group: string) => (onClickHandler ? () => onClickHandler(group) : undefined);\n\n const legendItemClass = classNames('legend-item', { clickable: isClickable });\n const legendItemClassCanary = classNames(legendItemClass, { deselected: !showGroup.canary });\n const legendItemClassBaseline = classNames(legendItemClass, { deselected: !showGroup.baseline });\n return (\n <div className=\"chart-legend\">\n <div className={legendItemClassBaseline} onClick={handleClick('baseline')}>\n <div className=\"legend-icon\" style={baselineIconStyle} />\n <div>Baseline</div>\n </div>\n <div className={legendItemClassCanary} onClick={handleClick('canary')}>\n <div className=\"legend-icon\" style={canaryIconStyle} />\n <div>Canary</div>\n </div>\n </div>\n );\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n /**\n * Hide all tooltip\n * @trigger ReactTooltip.hide()\n */\n target.hide = function (target) {\n dispatchGlobalEvent(_constant2.default.GLOBAL.HIDE, { target: target });\n };\n\n /**\n * Rebuild all tooltip\n * @trigger ReactTooltip.rebuild()\n */\n target.rebuild = function () {\n dispatchGlobalEvent(_constant2.default.GLOBAL.REBUILD);\n };\n\n /**\n * Show specific tooltip\n * @trigger ReactTooltip.show()\n */\n target.show = function (target) {\n dispatchGlobalEvent(_constant2.default.GLOBAL.SHOW, { target: target });\n };\n\n target.prototype.globalRebuild = function () {\n if (this.mount) {\n this.unbindListener();\n this.bindListener();\n }\n };\n\n target.prototype.globalShow = function (event) {\n if (this.mount) {\n // Create a fake event, specific show will limit the type to `solid`\n // only `float` type cares e.clientX e.clientY\n var e = { currentTarget: event.detail.target };\n this.showTooltip(e, true);\n }\n };\n\n target.prototype.globalHide = function (event) {\n if (this.mount) {\n var hasTarget = event && event.detail && event.detail.target && true || false;\n this.hideTooltip({ currentTarget: hasTarget && event.detail.target }, hasTarget);\n }\n };\n};\n\nvar _constant = require('../constant');\n\nvar _constant2 = _interopRequireDefault(_constant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar dispatchGlobalEvent = function dispatchGlobalEvent(eventName, opts) {\n // Compatibale with IE\n // @see http://stackoverflow.com/questions/26596123/internet-explorer-9-10-11-event-constructor-doesnt-work\n var event = void 0;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventName, { detail: opts });\n } else {\n event = document.createEvent('Event');\n event.initEvent(eventName, false, true);\n event.detail = opts;\n }\n\n window.dispatchEvent(event);\n}; /**\n * Static methods for react-tooltip\n */","import * as React from 'react';\n\nimport { vizConfig } from './config';\n\nexport interface ICircleIconProps {\n group: string;\n}\n\n// simple component to show circle icons in tooltips\nexport default ({ group }: ICircleIconProps) => {\n const iconStyle = {\n color: vizConfig.colors[group],\n paddingRight: 4,\n };\n return <i className=\"fas fa-circle\" style={iconStyle} />;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n\n GLOBAL: {\n HIDE: '__react_tooltip_hide_event',\n REBUILD: '__react_tooltip_rebuild_event',\n SHOW: '__react_tooltip_show_event'\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.bindWindowEvents = function (resizeHide) {\n // ReactTooltip.hide\n window.removeEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide);\n window.addEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide, false);\n\n // ReactTooltip.rebuild\n window.removeEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild);\n window.addEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild, false);\n\n // ReactTooltip.show\n window.removeEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow);\n window.addEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow, false);\n\n // Resize\n if (resizeHide) {\n window.removeEventListener('resize', this.onWindowResize);\n window.addEventListener('resize', this.onWindowResize, false);\n }\n };\n\n target.prototype.unbindWindowEvents = function () {\n window.removeEventListener(_constant2.default.GLOBAL.HIDE, this.globalHide);\n window.removeEventListener(_constant2.default.GLOBAL.REBUILD, this.globalRebuild);\n window.removeEventListener(_constant2.default.GLOBAL.SHOW, this.globalShow);\n window.removeEventListener('resize', this.onWindowResize);\n };\n\n /**\n * invoked by resize event of window\n */\n target.prototype.onWindowResize = function () {\n if (!this.mount) return;\n this.hideTooltip();\n };\n};\n\nvar _constant = require('../constant');\n\nvar _constant2 = _interopRequireDefault(_constant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.isCustomEvent = function (ele) {\n var event = this.state.event;\n\n return event || !!ele.getAttribute('data-event');\n };\n\n /* Bind listener for custom event */\n target.prototype.customBindListener = function (ele) {\n var _this = this;\n\n var _state = this.state,\n event = _state.event,\n eventOff = _state.eventOff;\n\n var dataEvent = ele.getAttribute('data-event') || event;\n var dataEventOff = ele.getAttribute('data-event-off') || eventOff;\n\n dataEvent.split(' ').forEach(function (event) {\n ele.removeEventListener(event, customListeners.get(ele, event));\n var customListener = checkStatus.bind(_this, dataEventOff);\n customListeners.set(ele, event, customListener);\n ele.addEventListener(event, customListener, false);\n });\n if (dataEventOff) {\n dataEventOff.split(' ').forEach(function (event) {\n ele.removeEventListener(event, _this.hideTooltip);\n ele.addEventListener(event, _this.hideTooltip, false);\n });\n }\n };\n\n /* Unbind listener for custom event */\n target.prototype.customUnbindListener = function (ele) {\n var _state2 = this.state,\n event = _state2.event,\n eventOff = _state2.eventOff;\n\n var dataEvent = event || ele.getAttribute('data-event');\n var dataEventOff = eventOff || ele.getAttribute('data-event-off');\n\n ele.removeEventListener(dataEvent, customListeners.get(ele, event));\n if (dataEventOff) ele.removeEventListener(dataEventOff, this.hideTooltip);\n };\n};\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Custom events to control showing and hiding of tooltip\n *\n * @attributes\n * - `event` {String}\n * - `eventOff` {String}\n */\n\nvar checkStatus = function checkStatus(dataEventOff, e) {\n var show = this.state.show;\n var id = this.props.id;\n\n var dataIsCapture = e.currentTarget.getAttribute('data-iscapture');\n var isCapture = dataIsCapture && dataIsCapture === 'true' || this.props.isCapture;\n var currentItem = e.currentTarget.getAttribute('currentItem');\n\n if (!isCapture) e.stopPropagation();\n if (show && currentItem === 'true') {\n if (!dataEventOff) this.hideTooltip(e);\n } else {\n e.currentTarget.setAttribute('currentItem', 'true');\n setUntargetItems(e.currentTarget, this.getTargetArray(id));\n this.showTooltip(e);\n }\n};\n\nvar setUntargetItems = function setUntargetItems(currentTarget, targetArray) {\n for (var i = 0; i < targetArray.length; i++) {\n if (currentTarget !== targetArray[i]) {\n targetArray[i].setAttribute('currentItem', 'false');\n } else {\n targetArray[i].setAttribute('currentItem', 'true');\n }\n }\n};\n\nvar customListeners = {\n id: '9b69f92e-d3fe-498b-b1b4-c5e63a51b0cf',\n set: function set(target, event, listener) {\n if (this.id in target) {\n var map = target[this.id];\n map[event] = listener;\n } else {\n // this is workaround for WeakMap, which is not supported in older browsers, such as IE\n Object.defineProperty(target, this.id, {\n configurable: true,\n value: _defineProperty({}, event, listener)\n });\n }\n },\n get: function get(target, event) {\n var map = target[this.id];\n if (map !== undefined) {\n return map[event];\n }\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.isCapture = function (currentTarget) {\n return currentTarget && currentTarget.getAttribute('data-iscapture') === 'true' || this.props.isCapture || false;\n };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.getEffect = function (currentTarget) {\n var dataEffect = currentTarget.getAttribute('data-effect');\n return dataEffect || this.props.effect || 'float';\n };\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (target) {\n target.prototype.bindRemovalTracker = function () {\n var _this = this;\n\n var MutationObserver = getMutationObserverClass();\n if (MutationObserver == null) return;\n\n var observer = new MutationObserver(function (mutations) {\n for (var m1 = 0; m1 < mutations.length; m1++) {\n var mutation = mutations[m1];\n for (var m2 = 0; m2 < mutation.removedNodes.length; m2++) {\n var element = mutation.removedNodes[m2];\n if (element === _this.state.currentTarget) {\n _this.hideTooltip();\n return;\n }\n }\n }\n });\n\n observer.observe(window.document, { childList: true, subtree: true });\n\n this.removalTracker = observer;\n };\n\n target.prototype.unbindRemovalTracker = function () {\n if (this.removalTracker) {\n this.removalTracker.disconnect();\n this.removalTracker = null;\n }\n };\n};\n\n/**\n * Tracking target removing from DOM.\n * It's nessesary to hide tooltip when it's target disappears.\n * Otherwise, the tooltip would be shown forever until another target\n * is triggered.\n *\n * If MutationObserver is not available, this feature just doesn't work.\n */\n\n// https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/\nvar getMutationObserverClass = function getMutationObserverClass() {\n return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (e, target, node, place, desiredPlace, effect, offset) {\n var _getDimensions = getDimensions(node),\n tipWidth = _getDimensions.width,\n tipHeight = _getDimensions.height;\n\n var _getDimensions2 = getDimensions(target),\n targetWidth = _getDimensions2.width,\n targetHeight = _getDimensions2.height;\n\n var _getCurrentOffset = getCurrentOffset(e, target, effect),\n mouseX = _getCurrentOffset.mouseX,\n mouseY = _getCurrentOffset.mouseY;\n\n var defaultOffset = getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight);\n\n var _calculateOffset = calculateOffset(offset),\n extraOffset_X = _calculateOffset.extraOffset_X,\n extraOffset_Y = _calculateOffset.extraOffset_Y;\n\n var windowWidth = window.innerWidth;\n var windowHeight = window.innerHeight;\n\n var _getParent = getParent(node),\n parentTop = _getParent.parentTop,\n parentLeft = _getParent.parentLeft;\n\n // Get the edge offset of the tooltip\n\n\n var getTipOffsetLeft = function getTipOffsetLeft(place) {\n var offset_X = defaultOffset[place].l;\n return mouseX + offset_X + extraOffset_X;\n };\n var getTipOffsetRight = function getTipOffsetRight(place) {\n var offset_X = defaultOffset[place].r;\n return mouseX + offset_X + extraOffset_X;\n };\n var getTipOffsetTop = function getTipOffsetTop(place) {\n var offset_Y = defaultOffset[place].t;\n return mouseY + offset_Y + extraOffset_Y;\n };\n var getTipOffsetBottom = function getTipOffsetBottom(place) {\n var offset_Y = defaultOffset[place].b;\n return mouseY + offset_Y + extraOffset_Y;\n };\n\n //\n // Functions to test whether the tooltip's sides are inside\n // the client window for a given orientation p\n //\n // _____________\n // | | <-- Right side\n // | p = 'left' |\\\n // | |/ |\\\n // |_____________| |_\\ <-- Mouse\n // / \\ |\n // |\n // |\n // Bottom side\n //\n var outsideLeft = function outsideLeft(p) {\n return getTipOffsetLeft(p) < 0;\n };\n var outsideRight = function outsideRight(p) {\n return getTipOffsetRight(p) > windowWidth;\n };\n var outsideTop = function outsideTop(p) {\n return getTipOffsetTop(p) < 0;\n };\n var outsideBottom = function outsideBottom(p) {\n return getTipOffsetBottom(p) > windowHeight;\n };\n\n // Check whether the tooltip with orientation p is completely inside the client window\n var outside = function outside(p) {\n return outsideLeft(p) || outsideRight(p) || outsideTop(p) || outsideBottom(p);\n };\n var inside = function inside(p) {\n return !outside(p);\n };\n\n var placesList = ['top', 'bottom', 'left', 'right'];\n var insideList = [];\n for (var i = 0; i < 4; i++) {\n var p = placesList[i];\n if (inside(p)) {\n insideList.push(p);\n }\n }\n\n var isNewState = false;\n var newPlace = void 0;\n if (inside(desiredPlace) && desiredPlace !== place) {\n isNewState = true;\n newPlace = desiredPlace;\n } else if (insideList.length > 0 && outside(desiredPlace) && outside(place)) {\n isNewState = true;\n newPlace = insideList[0];\n }\n\n if (isNewState) {\n return {\n isNewState: true,\n newState: { place: newPlace }\n };\n }\n\n return {\n isNewState: false,\n position: {\n left: parseInt(getTipOffsetLeft(place) - parentLeft, 10),\n top: parseInt(getTipOffsetTop(place) - parentTop, 10)\n }\n };\n};\n\nvar getDimensions = function getDimensions(node) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n height = _node$getBoundingClie.height,\n width = _node$getBoundingClie.width;\n\n return {\n height: parseInt(height, 10),\n width: parseInt(width, 10)\n };\n};\n\n// Get current mouse offset\n/**\n * Calculate the position of tooltip\n *\n * @params\n * - `e` {Event} the event of current mouse\n * - `target` {Element} the currentTarget of the event\n * - `node` {DOM} the react-tooltip object\n * - `place` {String} top / right / bottom / left\n * - `effect` {String} float / solid\n * - `offset` {Object} the offset to default position\n *\n * @return {Object}\n * - `isNewState` {Bool} required\n * - `newState` {Object}\n * - `position` {Object} {left: {Number}, top: {Number}}\n */\nvar getCurrentOffset = function getCurrentOffset(e, currentTarget, effect) {\n var boundingClientRect = currentTarget.getBoundingClientRect();\n var targetTop = boundingClientRect.top;\n var targetLeft = boundingClientRect.left;\n\n var _getDimensions3 = getDimensions(currentTarget),\n targetWidth = _getDimensions3.width,\n targetHeight = _getDimensions3.height;\n\n if (effect === 'float') {\n return {\n mouseX: e.clientX,\n mouseY: e.clientY\n };\n }\n return {\n mouseX: targetLeft + targetWidth / 2,\n mouseY: targetTop + targetHeight / 2\n };\n};\n\n// List all possibility of tooltip final offset\n// This is useful in judging if it is necessary for tooltip to switch position when out of window\nvar getDefaultPosition = function getDefaultPosition(effect, targetWidth, targetHeight, tipWidth, tipHeight) {\n var top = void 0;\n var right = void 0;\n var bottom = void 0;\n var left = void 0;\n var disToMouse = 3;\n var triangleHeight = 2;\n var cursorHeight = 12; // Optimize for float bottom only, cause the cursor will hide the tooltip\n\n if (effect === 'float') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(tipHeight + disToMouse + triangleHeight),\n b: -disToMouse\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: disToMouse + cursorHeight,\n b: tipHeight + disToMouse + triangleHeight + cursorHeight\n };\n left = {\n l: -(tipWidth + disToMouse + triangleHeight),\n r: -disToMouse,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: disToMouse,\n r: tipWidth + disToMouse + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n } else if (effect === 'solid') {\n top = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: -(targetHeight / 2 + tipHeight + triangleHeight),\n b: -(targetHeight / 2)\n };\n bottom = {\n l: -(tipWidth / 2),\n r: tipWidth / 2,\n t: targetHeight / 2,\n b: targetHeight / 2 + tipHeight + triangleHeight\n };\n left = {\n l: -(tipWidth + targetWidth / 2 + triangleHeight),\n r: -(targetWidth / 2),\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n right = {\n l: targetWidth / 2,\n r: tipWidth + targetWidth / 2 + triangleHeight,\n t: -(tipHeight / 2),\n b: tipHeight / 2\n };\n }\n\n return { top: top, bottom: bottom, left: left, right: right };\n};\n\n// Consider additional offset into position calculation\nvar calculateOffset = function calculateOffset(offset) {\n var extraOffset_X = 0;\n var extraOffset_Y = 0;\n\n if (Object.prototype.toString.apply(offset) === '[object String]') {\n offset = JSON.parse(offset.toString().replace(/\\'/g, '\\\"'));\n }\n for (var key in offset) {\n if (key === 'top') {\n extraOffset_Y -= parseInt(offset[key], 10);\n } else if (key === 'bottom') {\n extraOffset_Y += parseInt(offset[key], 10);\n } else if (key === 'left') {\n extraOffset_X -= parseInt(offset[key], 10);\n } else if (key === 'right') {\n extraOffset_X += parseInt(offset[key], 10);\n }\n }\n\n return { extraOffset_X: extraOffset_X, extraOffset_Y: extraOffset_Y };\n};\n\n// Get the offset of the parent elements\nvar getParent = function getParent(currentTarget) {\n var currentParent = currentTarget;\n while (currentParent) {\n if (window.getComputedStyle(currentParent).getPropertyValue('transform') !== 'none') break;\n currentParent = currentParent.parentElement;\n }\n\n var parentTop = currentParent && currentParent.getBoundingClientRect().top || 0;\n var parentLeft = currentParent && currentParent.getBoundingClientRect().left || 0;\n\n return { parentTop: parentTop, parentLeft: parentLeft };\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (tip, children, getContent, multiline) {\n if (children) return children;\n if (getContent !== undefined && getContent !== null) return getContent; // getContent can be 0, '', etc.\n if (getContent === null) return null; // Tip not exist and childern is null or undefined\n\n var regexp = /<br\\s*\\/?>/;\n if (!multiline || multiline === 'false' || !regexp.test(tip)) {\n // No trim(), so that user can keep their input\n return tip;\n }\n\n // Multiline tooltip content\n return tip.split(regexp).map(function (d, i) {\n return _react2.default.createElement(\n 'span',\n { key: i, className: 'multi-line' },\n d\n );\n });\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseAria = parseAria;\n/**\n * Support aria- and role in ReactTooltip\n *\n * @params props {Object}\n * @return {Object}\n */\nfunction parseAria(props) {\n var ariaObj = {};\n Object.keys(props).filter(function (prop) {\n // aria-xxx and role is acceptable\n return (/(^aria-\\w+$|^role$)/.test(prop)\n );\n }).forEach(function (prop) {\n ariaObj[prop] = props[prop];\n });\n\n return ariaObj;\n}","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _class2, _temp;\n\n/* Decoraters */\n\n\n/* Utils */\n\n\n/* CSS */\n\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _classnames = require('classnames');\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _staticMethods = require('./decorators/staticMethods');\n\nvar _staticMethods2 = _interopRequireDefault(_staticMethods);\n\nvar _windowListener = require('./decorators/windowListener');\n\nvar _windowListener2 = _interopRequireDefault(_windowListener);\n\nvar _customEvent = require('./decorators/customEvent');\n\nvar _customEvent2 = _interopRequireDefault(_customEvent);\n\nvar _isCapture = require('./decorators/isCapture');\n\nvar _isCapture2 = _interopRequireDefault(_isCapture);\n\nvar _getEffect = require('./decorators/getEffect');\n\nvar _getEffect2 = _interopRequireDefault(_getEffect);\n\nvar _trackRemoval = require('./decorators/trackRemoval');\n\nvar _trackRemoval2 = _interopRequireDefault(_trackRemoval);\n\nvar _getPosition = require('./utils/getPosition');\n\nvar _getPosition2 = _interopRequireDefault(_getPosition);\n\nvar _getTipContent = require('./utils/getTipContent');\n\nvar _getTipContent2 = _interopRequireDefault(_getTipContent);\n\nvar _aria = require('./utils/aria');\n\nvar _nodeListToArray = require('./utils/nodeListToArray');\n\nvar _nodeListToArray2 = _interopRequireDefault(_nodeListToArray);\n\nvar _style = require('./style');\n\nvar _style2 = _interopRequireDefault(_style);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ReactTooltip = (0, _staticMethods2.default)(_class = (0, _windowListener2.default)(_class = (0, _customEvent2.default)(_class = (0, _isCapture2.default)(_class = (0, _getEffect2.default)(_class = (0, _trackRemoval2.default)(_class = (_temp = _class2 = function (_React$Component) {\n _inherits(ReactTooltip, _React$Component);\n\n function ReactTooltip(props) {\n _classCallCheck(this, ReactTooltip);\n\n var _this = _possibleConstructorReturn(this, (ReactTooltip.__proto__ || Object.getPrototypeOf(ReactTooltip)).call(this, props));\n\n _this.state = {\n place: props.place || 'top', // Direction of tooltip\n desiredPlace: props.place || 'top',\n type: 'dark', // Color theme of tooltip\n effect: 'float', // float or fixed\n show: false,\n border: false,\n offset: {},\n extraClass: '',\n html: false,\n delayHide: 0,\n delayShow: 0,\n event: props.event || null,\n eventOff: props.eventOff || null,\n currentEvent: null, // Current mouse event\n currentTarget: null, // Current target of mouse event\n ariaProps: (0, _aria.parseAria)(props), // aria- and role attributes\n isEmptyTip: false,\n disable: false,\n originTooltip: null,\n isMultiline: false\n };\n\n _this.bind(['showTooltip', 'updateTooltip', 'hideTooltip', 'getTooltipContent', 'globalRebuild', 'globalShow', 'globalHide', 'onWindowResize', 'mouseOnToolTip']);\n\n _this.mount = true;\n _this.delayShowLoop = null;\n _this.delayHideLoop = null;\n _this.delayReshow = null;\n _this.intervalUpdateContent = null;\n return _this;\n }\n\n /**\n * For unify the bind and unbind listener\n */\n\n\n _createClass(ReactTooltip, [{\n key: 'bind',\n value: function bind(methodArray) {\n var _this2 = this;\n\n methodArray.forEach(function (method) {\n _this2[method] = _this2[method].bind(_this2);\n });\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n insecure = _props.insecure,\n resizeHide = _props.resizeHide;\n\n if (insecure) {\n this.setStyleHeader(); // Set the style to the <link>\n }\n this.bindListener(); // Bind listener for tooltip\n this.bindWindowEvents(resizeHide); // Bind global event for static method\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n var ariaProps = this.state.ariaProps;\n\n var newAriaProps = (0, _aria.parseAria)(props);\n\n var isChanged = Object.keys(newAriaProps).some(function (props) {\n return newAriaProps[props] !== ariaProps[props];\n });\n if (isChanged) {\n this.setState({ ariaProps: newAriaProps });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.mount = false;\n\n this.clearTimer();\n\n this.unbindListener();\n this.removeScrollListener();\n this.unbindWindowEvents();\n }\n\n /**\n * Return if the mouse is on the tooltip.\n * @returns {boolean} true - mouse is on the tooltip\n */\n\n }, {\n key: 'mouseOnToolTip',\n value: function mouseOnToolTip() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n /* old IE or Firefox work around */\n if (!this.tooltipRef.matches) {\n /* old IE work around */\n if (this.tooltipRef.msMatchesSelector) {\n this.tooltipRef.matches = this.tooltipRef.msMatchesSelector;\n } else {\n /* old Firefox work around */\n this.tooltipRef.matches = this.tooltipRef.mozMatchesSelector;\n }\n }\n return this.tooltipRef.matches(':hover');\n }\n return false;\n }\n /**\n * Pick out corresponded target elements\n */\n\n }, {\n key: 'getTargetArray',\n value: function getTargetArray(id) {\n var targetArray = void 0;\n if (!id) {\n targetArray = document.querySelectorAll('[data-tip]:not([data-for])');\n } else {\n var escaped = id.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n targetArray = document.querySelectorAll('[data-tip][data-for=\"' + escaped + '\"]');\n }\n // targetArray is a NodeList, convert it to a real array\n return (0, _nodeListToArray2.default)(targetArray);\n }\n\n /**\n * Bind listener to the target elements\n * These listeners used to trigger showing or hiding the tooltip\n */\n\n }, {\n key: 'bindListener',\n value: function bindListener() {\n var _this3 = this;\n\n var _props2 = this.props,\n id = _props2.id,\n globalEventOff = _props2.globalEventOff,\n isCapture = _props2.isCapture;\n\n var targetArray = this.getTargetArray(id);\n\n targetArray.forEach(function (target) {\n var isCaptureMode = _this3.isCapture(target);\n var effect = _this3.getEffect(target);\n if (target.getAttribute('currentItem') === null) {\n target.setAttribute('currentItem', 'false');\n }\n _this3.unbindBasicListener(target);\n\n if (_this3.isCustomEvent(target)) {\n _this3.customBindListener(target);\n return;\n }\n\n target.addEventListener('mouseenter', _this3.showTooltip, isCaptureMode);\n if (effect === 'float') {\n target.addEventListener('mousemove', _this3.updateTooltip, isCaptureMode);\n }\n target.addEventListener('mouseleave', _this3.hideTooltip, isCaptureMode);\n });\n\n // Global event to hide tooltip\n if (globalEventOff) {\n window.removeEventListener(globalEventOff, this.hideTooltip);\n window.addEventListener(globalEventOff, this.hideTooltip, isCapture);\n }\n\n // Track removal of targetArray elements from DOM\n this.bindRemovalTracker();\n }\n\n /**\n * Unbind listeners on target elements\n */\n\n }, {\n key: 'unbindListener',\n value: function unbindListener() {\n var _this4 = this;\n\n var _props3 = this.props,\n id = _props3.id,\n globalEventOff = _props3.globalEventOff;\n\n var targetArray = this.getTargetArray(id);\n targetArray.forEach(function (target) {\n _this4.unbindBasicListener(target);\n if (_this4.isCustomEvent(target)) _this4.customUnbindListener(target);\n });\n\n if (globalEventOff) window.removeEventListener(globalEventOff, this.hideTooltip);\n this.unbindRemovalTracker();\n }\n\n /**\n * Invoke this before bind listener and ummount the compont\n * it is necessary to invloke this even when binding custom event\n * so that the tooltip can switch between custom and default listener\n */\n\n }, {\n key: 'unbindBasicListener',\n value: function unbindBasicListener(target) {\n var isCaptureMode = this.isCapture(target);\n target.removeEventListener('mouseenter', this.showTooltip, isCaptureMode);\n target.removeEventListener('mousemove', this.updateTooltip, isCaptureMode);\n target.removeEventListener('mouseleave', this.hideTooltip, isCaptureMode);\n }\n }, {\n key: 'getTooltipContent',\n value: function getTooltipContent() {\n var _props4 = this.props,\n getContent = _props4.getContent,\n children = _props4.children;\n\n // Generate tooltip content\n\n var content = void 0;\n if (getContent) {\n if (Array.isArray(getContent)) {\n content = getContent[0] && getContent[0](this.state.originTooltip);\n } else {\n content = getContent(this.state.originTooltip);\n }\n }\n\n return (0, _getTipContent2.default)(this.state.originTooltip, children, content, this.state.isMultiline);\n }\n }, {\n key: 'isEmptyTip',\n value: function isEmptyTip(placeholder) {\n return typeof placeholder === 'string' && placeholder === '' || placeholder === null;\n }\n\n /**\n * When mouse enter, show the tooltip\n */\n\n }, {\n key: 'showTooltip',\n value: function showTooltip(e, isGlobalCall) {\n if (isGlobalCall) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement) return;\n }\n // Get the tooltip content\n // calculate in this phrase so that tip width height can be detected\n var _props5 = this.props,\n multiline = _props5.multiline,\n getContent = _props5.getContent;\n\n var originTooltip = e.currentTarget.getAttribute('data-tip');\n var isMultiline = e.currentTarget.getAttribute('data-multiline') || multiline || false;\n\n // If it is focus event or called by ReactTooltip.show, switch to `solid` effect\n var switchToSolid = e instanceof window.FocusEvent || isGlobalCall;\n\n // if it needs to skip adding hide listener to scroll\n var scrollHide = true;\n if (e.currentTarget.getAttribute('data-scroll-hide')) {\n scrollHide = e.currentTarget.getAttribute('data-scroll-hide') === 'true';\n } else if (this.props.scrollHide != null) {\n scrollHide = this.props.scrollHide;\n }\n\n // Make sure the correct place is set\n var desiredPlace = e.currentTarget.getAttribute('data-place') || this.props.place || 'top';\n var effect = switchToSolid && 'solid' || this.getEffect(e.currentTarget);\n var offset = e.currentTarget.getAttribute('data-offset') || this.props.offset || {};\n var result = (0, _getPosition2.default)(e, e.currentTarget, _reactDom2.default.findDOMNode(this), desiredPlace, desiredPlace, effect, offset);\n var place = result.isNewState ? result.newState.place : desiredPlace;\n\n // To prevent previously created timers from triggering\n this.clearTimer();\n\n var target = e.currentTarget;\n\n var reshowDelay = this.state.show ? target.getAttribute('data-delay-update') || this.props.delayUpdate : 0;\n\n var self = this;\n\n var updateState = function updateState() {\n self.setState({\n originTooltip: originTooltip,\n isMultiline: isMultiline,\n desiredPlace: desiredPlace,\n place: place,\n type: target.getAttribute('data-type') || self.props.type || 'dark',\n effect: effect,\n offset: offset,\n html: target.getAttribute('data-html') ? target.getAttribute('data-html') === 'true' : self.props.html || false,\n delayShow: target.getAttribute('data-delay-show') || self.props.delayShow || 0,\n delayHide: target.getAttribute('data-delay-hide') || self.props.delayHide || 0,\n delayUpdate: target.getAttribute('data-delay-update') || self.props.delayUpdate || 0,\n border: target.getAttribute('data-border') ? target.getAttribute('data-border') === 'true' : self.props.border || false,\n extraClass: target.getAttribute('data-class') || self.props.class || self.props.className || '',\n disable: target.getAttribute('data-tip-disable') ? target.getAttribute('data-tip-disable') === 'true' : self.props.disable || false,\n currentTarget: target\n }, function () {\n if (scrollHide) self.addScrollListener(self.state.currentTarget);\n self.updateTooltip(e);\n\n if (getContent && Array.isArray(getContent)) {\n self.intervalUpdateContent = setInterval(function () {\n if (self.mount) {\n var _getContent = self.props.getContent;\n\n var placeholder = (0, _getTipContent2.default)(originTooltip, '', _getContent[0](), isMultiline);\n var isEmptyTip = self.isEmptyTip(placeholder);\n self.setState({\n isEmptyTip: isEmptyTip\n });\n self.updatePosition();\n }\n }, getContent[1]);\n }\n });\n };\n\n // If there is no delay call immediately, don't allow events to get in first.\n if (reshowDelay) {\n this.delayReshow = setTimeout(updateState, reshowDelay);\n } else {\n updateState();\n }\n }\n\n /**\n * When mouse hover, updatetooltip\n */\n\n }, {\n key: 'updateTooltip',\n value: function updateTooltip(e) {\n var _this5 = this;\n\n var _state = this.state,\n delayShow = _state.delayShow,\n disable = _state.disable;\n var afterShow = this.props.afterShow;\n\n var placeholder = this.getTooltipContent();\n var delayTime = parseInt(delayShow, 10);\n var eventTarget = e.currentTarget || e.target;\n\n // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n if (this.mouseOnToolTip()) {\n return;\n }\n\n if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip\n var updateState = function updateState() {\n if (Array.isArray(placeholder) && placeholder.length > 0 || placeholder) {\n var isInvisible = !_this5.state.show;\n _this5.setState({\n currentEvent: e,\n currentTarget: eventTarget,\n show: true\n }, function () {\n _this5.updatePosition();\n if (isInvisible && afterShow) afterShow(e);\n });\n }\n };\n\n clearTimeout(this.delayShowLoop);\n if (delayShow) {\n this.delayShowLoop = setTimeout(updateState, delayTime);\n } else {\n updateState();\n }\n }\n\n /*\n * If we're mousing over the tooltip remove it when we leave.\n */\n\n }, {\n key: 'listenForTooltipExit',\n value: function listenForTooltipExit() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n this.tooltipRef.addEventListener('mouseleave', this.hideTooltip);\n }\n }\n }, {\n key: 'removeListenerForTooltipExit',\n value: function removeListenerForTooltipExit() {\n var show = this.state.show;\n\n\n if (show && this.tooltipRef) {\n this.tooltipRef.removeEventListener('mouseleave', this.hideTooltip);\n }\n }\n\n /**\n * When mouse leave, hide tooltip\n */\n\n }, {\n key: 'hideTooltip',\n value: function hideTooltip(e, hasTarget) {\n var _this6 = this;\n\n var _state2 = this.state,\n delayHide = _state2.delayHide,\n disable = _state2.disable;\n var afterHide = this.props.afterHide;\n\n var placeholder = this.getTooltipContent();\n if (!this.mount) return;\n if (this.isEmptyTip(placeholder) || disable) return; // if the tooltip is empty, disable the tooltip\n if (hasTarget) {\n // Don't trigger other elements belongs to other ReactTooltip\n var targetArray = this.getTargetArray(this.props.id);\n var isMyElement = targetArray.some(function (ele) {\n return ele === e.currentTarget;\n });\n if (!isMyElement || !this.state.show) return;\n }\n\n var resetState = function resetState() {\n var isVisible = _this6.state.show;\n // Check if the mouse is actually over the tooltip, if so don't hide the tooltip\n if (_this6.mouseOnToolTip()) {\n _this6.listenForTooltipExit();\n return;\n }\n _this6.removeListenerForTooltipExit();\n\n _this6.setState({\n show: false\n }, function () {\n _this6.removeScrollListener();\n if (isVisible && afterHide) afterHide(e);\n });\n };\n\n this.clearTimer();\n if (delayHide) {\n this.delayHideLoop = setTimeout(resetState, parseInt(delayHide, 10));\n } else {\n resetState();\n }\n }\n\n /**\n * Add scroll eventlistener when tooltip show\n * automatically hide the tooltip when scrolling\n */\n\n }, {\n key: 'addScrollListener',\n value: function addScrollListener(currentTarget) {\n var isCaptureMode = this.isCapture(currentTarget);\n window.addEventListener('scroll', this.hideTooltip, isCaptureMode);\n }\n }, {\n key: 'removeScrollListener',\n value: function removeScrollListener() {\n window.removeEventListener('scroll', this.hideTooltip);\n }\n\n // Calculation the position\n\n }, {\n key: 'updatePosition',\n value: function updatePosition() {\n var _this7 = this;\n\n var _state3 = this.state,\n currentEvent = _state3.currentEvent,\n currentTarget = _state3.currentTarget,\n place = _state3.place,\n desiredPlace = _state3.desiredPlace,\n effect = _state3.effect,\n offset = _state3.offset;\n\n var node = _reactDom2.default.findDOMNode(this);\n var result = (0, _getPosition2.default)(currentEvent, currentTarget, node, place, desiredPlace, effect, offset);\n\n if (result.isNewState) {\n // Switch to reverse placement\n return this.setState(result.newState, function () {\n _this7.updatePosition();\n });\n }\n // Set tooltip position\n node.style.left = result.position.left + 'px';\n node.style.top = result.position.top + 'px';\n }\n\n /**\n * Set style tag in header\n * in this way we can insert default css\n */\n\n }, {\n key: 'setStyleHeader',\n value: function setStyleHeader() {\n var head = document.getElementsByTagName('head')[0];\n if (!head.querySelector('style[id=\"react-tooltip\"]')) {\n var tag = document.createElement('style');\n tag.id = 'react-tooltip';\n tag.innerHTML = _style2.default;\n /* eslint-disable */\n if (typeof __webpack_nonce__ !== 'undefined' && __webpack_nonce__) {\n tag.setAttribute('nonce', __webpack_nonce__);\n }\n /* eslint-enable */\n head.insertBefore(tag, head.firstChild);\n }\n }\n\n /**\n * CLear all kinds of timeout of interval\n */\n\n }, {\n key: 'clearTimer',\n value: function clearTimer() {\n clearTimeout(this.delayShowLoop);\n clearTimeout(this.delayHideLoop);\n clearTimeout(this.delayReshow);\n clearInterval(this.intervalUpdateContent);\n }\n }, {\n key: 'render',\n value: function render() {\n var _this8 = this;\n\n var _state4 = this.state,\n extraClass = _state4.extraClass,\n html = _state4.html,\n ariaProps = _state4.ariaProps,\n disable = _state4.disable;\n\n var placeholder = this.getTooltipContent();\n var isEmptyTip = this.isEmptyTip(placeholder);\n var tooltipClass = (0, _classnames2.default)('__react_component_tooltip', { 'show': this.state.show && !disable && !isEmptyTip }, { 'border': this.state.border }, { 'place-top': this.state.place === 'top' }, { 'place-bottom': this.state.place === 'bottom' }, { 'place-left': this.state.place === 'left' }, { 'place-right': this.state.place === 'right' }, { 'type-dark': this.state.type === 'dark' }, { 'type-success': this.state.type === 'success' }, { 'type-warning': this.state.type === 'warning' }, { 'type-error': this.state.type === 'error' }, { 'type-info': this.state.type === 'info' }, { 'type-light': this.state.type === 'light' }, { 'allow_hover': this.props.delayUpdate }, { 'allow_click': this.props.clickable });\n\n var Wrapper = this.props.wrapper;\n if (ReactTooltip.supportedWrappers.indexOf(Wrapper) < 0) {\n Wrapper = ReactTooltip.defaultProps.wrapper;\n }\n\n if (html) {\n return _react2.default.createElement(Wrapper, _extends({ className: tooltipClass + ' ' + extraClass,\n id: this.props.id,\n ref: function ref(_ref) {\n return _this8.tooltipRef = _ref;\n }\n }, ariaProps, {\n 'data-id': 'tooltip',\n dangerouslySetInnerHTML: { __html: placeholder } }));\n } else {\n return _react2.default.createElement(\n Wrapper,\n _extends({ className: tooltipClass + ' ' + extraClass,\n id: this.props.id\n }, ariaProps, {\n ref: function ref(_ref2) {\n return _this8.tooltipRef = _ref2;\n },\n 'data-id': 'tooltip' }),\n placeholder\n );\n }\n }\n }]);\n\n return ReactTooltip;\n}(_react2.default.Component), _class2.propTypes = {\n children: _propTypes2.default.any,\n place: _propTypes2.default.string,\n type: _propTypes2.default.string,\n effect: _propTypes2.default.string,\n offset: _propTypes2.default.object,\n multiline: _propTypes2.default.bool,\n border: _propTypes2.default.bool,\n insecure: _propTypes2.default.bool,\n class: _propTypes2.default.string,\n className: _propTypes2.default.string,\n id: _propTypes2.default.string,\n html: _propTypes2.default.bool,\n delayHide: _propTypes2.default.number,\n delayUpdate: _propTypes2.default.number,\n delayShow: _propTypes2.default.number,\n event: _propTypes2.default.string,\n eventOff: _propTypes2.default.string,\n watchWindow: _propTypes2.default.bool,\n isCapture: _propTypes2.default.bool,\n globalEventOff: _propTypes2.default.string,\n getContent: _propTypes2.default.any,\n afterShow: _propTypes2.default.func,\n afterHide: _propTypes2.default.func,\n disable: _propTypes2.default.bool,\n scrollHide: _propTypes2.default.bool,\n resizeHide: _propTypes2.default.bool,\n wrapper: _propTypes2.default.string,\n clickable: _propTypes2.default.bool\n}, _class2.defaultProps = {\n insecure: true,\n resizeHide: true,\n wrapper: 'div',\n clickable: false\n}, _class2.supportedWrappers = ['div', 'span'], _class2.displayName = 'ReactTooltip', _temp)) || _class) || _class) || _class) || _class) || _class) || _class;\n\n/* export default not fit for standalone, it will exports {default:...} */\n\n\nmodule.exports = ReactTooltip;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (nodeList) {\n var length = nodeList.length;\n if (nodeList.hasOwnProperty) {\n return Array.prototype.slice.call(nodeList);\n }\n return new Array(length).fill().map(function (index) {\n return nodeList[index];\n });\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = '.__react_component_tooltip{border-radius:3px;display:inline-block;font-size:13px;left:-999em;opacity:0;padding:8px 21px;position:fixed;pointer-events:none;transition:opacity 0.3s ease-out;top:-999em;visibility:hidden;z-index:999}.__react_component_tooltip.allow_hover,.__react_component_tooltip.allow_click{pointer-events:auto}.__react_component_tooltip:before,.__react_component_tooltip:after{content:\"\";width:0;height:0;position:absolute}.__react_component_tooltip.show{opacity:0.9;margin-top:0px;margin-left:0px;visibility:visible}.__react_component_tooltip.type-dark{color:#fff;background-color:#222}.__react_component_tooltip.type-dark.place-top:after{border-top-color:#222;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-dark.place-bottom:after{border-bottom-color:#222;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-dark.place-left:after{border-left-color:#222;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-dark.place-right:after{border-right-color:#222;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-dark.border{border:1px solid #fff}.__react_component_tooltip.type-dark.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-dark.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-dark.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-dark.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-success{color:#fff;background-color:#8DC572}.__react_component_tooltip.type-success.place-top:after{border-top-color:#8DC572;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-success.place-bottom:after{border-bottom-color:#8DC572;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-success.place-left:after{border-left-color:#8DC572;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-success.place-right:after{border-right-color:#8DC572;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-success.border{border:1px solid #fff}.__react_component_tooltip.type-success.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-success.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-success.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-success.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-warning{color:#fff;background-color:#F0AD4E}.__react_component_tooltip.type-warning.place-top:after{border-top-color:#F0AD4E;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-warning.place-bottom:after{border-bottom-color:#F0AD4E;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-warning.place-left:after{border-left-color:#F0AD4E;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-warning.place-right:after{border-right-color:#F0AD4E;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-warning.border{border:1px solid #fff}.__react_component_tooltip.type-warning.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-warning.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-warning.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-warning.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-error{color:#fff;background-color:#BE6464}.__react_component_tooltip.type-error.place-top:after{border-top-color:#BE6464;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-error.place-bottom:after{border-bottom-color:#BE6464;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-error.place-left:after{border-left-color:#BE6464;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-error.place-right:after{border-right-color:#BE6464;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-error.border{border:1px solid #fff}.__react_component_tooltip.type-error.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-error.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-error.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-error.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-info{color:#fff;background-color:#337AB7}.__react_component_tooltip.type-info.place-top:after{border-top-color:#337AB7;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-info.place-bottom:after{border-bottom-color:#337AB7;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-info.place-left:after{border-left-color:#337AB7;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-info.place-right:after{border-right-color:#337AB7;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-info.border{border:1px solid #fff}.__react_component_tooltip.type-info.border.place-top:before{border-top:8px solid #fff}.__react_component_tooltip.type-info.border.place-bottom:before{border-bottom:8px solid #fff}.__react_component_tooltip.type-info.border.place-left:before{border-left:8px solid #fff}.__react_component_tooltip.type-info.border.place-right:before{border-right:8px solid #fff}.__react_component_tooltip.type-light{color:#222;background-color:#fff}.__react_component_tooltip.type-light.place-top:after{border-top-color:#fff;border-top-style:solid;border-top-width:6px}.__react_component_tooltip.type-light.place-bottom:after{border-bottom-color:#fff;border-bottom-style:solid;border-bottom-width:6px}.__react_component_tooltip.type-light.place-left:after{border-left-color:#fff;border-left-style:solid;border-left-width:6px}.__react_component_tooltip.type-light.place-right:after{border-right-color:#fff;border-right-style:solid;border-right-width:6px}.__react_component_tooltip.type-light.border{border:1px solid #222}.__react_component_tooltip.type-light.border.place-top:before{border-top:8px solid #222}.__react_component_tooltip.type-light.border.place-bottom:before{border-bottom:8px solid #222}.__react_component_tooltip.type-light.border.place-left:before{border-left:8px solid #222}.__react_component_tooltip.type-light.border.place-right:before{border-right:8px solid #222}.__react_component_tooltip.place-top{margin-top:-10px}.__react_component_tooltip.place-top:before{border-left:10px solid transparent;border-right:10px solid transparent;bottom:-8px;left:50%;margin-left:-10px}.__react_component_tooltip.place-top:after{border-left:8px solid transparent;border-right:8px solid transparent;bottom:-6px;left:50%;margin-left:-8px}.__react_component_tooltip.place-bottom{margin-top:10px}.__react_component_tooltip.place-bottom:before{border-left:10px solid transparent;border-right:10px solid transparent;top:-8px;left:50%;margin-left:-10px}.__react_component_tooltip.place-bottom:after{border-left:8px solid transparent;border-right:8px solid transparent;top:-6px;left:50%;margin-left:-8px}.__react_component_tooltip.place-left{margin-left:-10px}.__react_component_tooltip.place-left:before{border-top:6px solid transparent;border-bottom:6px solid transparent;right:-8px;top:50%;margin-top:-5px}.__react_component_tooltip.place-left:after{border-top:5px solid transparent;border-bottom:5px solid transparent;right:-6px;top:50%;margin-top:-4px}.__react_component_tooltip.place-right{margin-left:10px}.__react_component_tooltip.place-right:before{border-top:6px solid transparent;border-bottom:6px solid transparent;left:-8px;top:50%;margin-top:-5px}.__react_component_tooltip.place-right:after{border-top:5px solid transparent;border-bottom:5px solid transparent;left:-6px;top:50%;margin-top:-4px}.__react_component_tooltip .multi-line{display:block;padding:2px 0px;text-align:center}';","import * as React from 'react';\nimport ReactTooltip from 'react-tooltip';\n\nexport interface ITooltipProps {\n x?: number;\n y?: number;\n content?: JSX.Element;\n // unique ids are needed if we want to show multiple tooltip objects at once\n id?: string;\n}\n\n/*\n * Custom tooltip component to render on top of any svg component.\n * It creates an invisible pixel and uses react-tooltip library\n * to point to it.\n */\nexport default class Tooltip extends React.Component<ITooltipProps> {\n private tooltipTarget: HTMLDivElement;\n\n public componentDidUpdate(prevProps: ITooltipProps) {\n const target = this.tooltipTarget;\n if (prevProps.content && !this.props.content) {\n ReactTooltip.hide(target);\n } else if (this.props.content) {\n ReactTooltip.show(target);\n }\n }\n\n public render() {\n const { x, y, content, id = 'tooltip' } = this.props;\n const tooltipTargetStyle = {\n left: x ? x : 0,\n top: y ? y : 0,\n height: 1,\n width: 1,\n opacity: 0,\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: 10,\n } as React.CSSProperties;\n\n const containerStyle = {\n pointerEvents: 'none',\n } as React.CSSProperties;\n\n return (\n <div style={containerStyle}>\n <div data-tip={true} data-for={id} style={tooltipTargetStyle} ref={(el) => (this.tooltipTarget = el)} />\n <ReactTooltip id={id} type=\"light\" border={true}>\n {content ? content : null}\n </ReactTooltip>\n </div>\n );\n }\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": formatDecimal,\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(nb),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\n\nexport default function() {\n return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n}\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import { quantile } from 'd3-array';\nimport { format } from 'd3-format';\nimport { scaleUtc } from 'd3-scale';\nimport { DateTime } from 'luxon';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nimport { ISummaryStatistics } from './semiotic.service';\n\n/*\nFormatter for any metric values. If the value is not a valid number (typically NaN),\nwe want to display \"N/A\" to highlight that there was no valid measurement.\nElse, the format is made as close as possible to Atlas graph formats:\nSI notation is used when the exponent is between -24 and 24 (inclusive),\nand exponential notation otherwise. Both with 3 digits of precision\n*/\nexport const formatMetricValue = (value: any) => {\n if (typeof value !== 'number' || isNaN(value)) {\n return 'N/A';\n } else if (Math.abs(value) >= Math.pow(10, 25)) {\n return format('-.3~e')(value);\n } else {\n return format('-.3~s')(value);\n }\n};\n\nconst fromMillis = (millis: number) => {\n const luxonOpts = SETTINGS.feature.displayTimestampsInUserLocalTime ? undefined : { zone: SETTINGS.defaultTimeZone };\n return DateTime.fromMillis(millis, luxonOpts);\n};\n\n/*\nFormatter for timestamps. If the timestamp value is a date boundary (e.g. 04-01-2019 00:00:00),\nan additional date label is returned, otherwise only a single label showing hour & minute is returned\n*/\nexport const dateTimeTickFormatter = (d: number) => {\n const datetime = fromMillis(d);\n if (datetime.hour === 0 && datetime.minute === 0) {\n return [datetime.toFormat('HH:mm'), datetime.toFormat('MMM DD')];\n } else {\n return [datetime.toFormat('HH:mm')];\n }\n};\n\n// function to choose the ideal tick values on the x-axis of a timeseries\n// D3 has a smart tick generator, e.g. it'll tend to show midnight if the data crosses\n// date boundaries. This way we can label date change as date, and other ticks as HH:mm\nexport const calculateDateTimeTicks = (millisSet: number[]) => {\n const minMillis = millisSet[0];\n const maxMillis = millisSet[millisSet.length - 1];\n\n /*\n * since d3 scale doesn't support custom timezone, we have to:\n * 1)shift the UTC domain based on the tz,\n * 2)have d3 calculate the ideal tick values as usual, and\n * 3)shift back the result\n */\n const offsetMillis = fromMillis(minMillis).offset * 60000;\n const minMillisShifted = minMillis + offsetMillis;\n const maxMillisShifted = maxMillis + offsetMillis;\n const scale = scaleUtc().domain([new Date(minMillisShifted), new Date(maxMillisShifted)]);\n const ticks = scale.ticks(6).map((d: Date) => d.valueOf() - offsetMillis);\n return ticks;\n};\n\nexport const calculateSummaryStatistics = (values: number[]): ISummaryStatistics => {\n const output = {\n min: {\n value: quantile(values, 0.0),\n label: 'Minimum',\n },\n q1area: {\n value: quantile(values, 0.25),\n label: '25th %-ile',\n },\n median: {\n value: quantile(values, 0.5),\n label: 'Median',\n },\n q3area: {\n value: quantile(values, 0.75),\n label: '75th %-ile',\n },\n max: {\n value: quantile(values, 1.0),\n label: 'Maximum',\n },\n };\n return output;\n};\n","import { extent } from 'd3-array';\nimport { Force, Node } from 'labella';\nimport * as React from 'react';\nimport {\n Annotation,\n IAnnotationType,\n IOrFrameHoverArgs,\n IOrGroup,\n IOrSummaryPiece,\n ISemioticAnnotationArgs,\n OrdinalFrame,\n} from 'semiotic';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './boxplot.less';\n\ninterface IChartDataPoint {\n value: number;\n group: string;\n color: string;\n}\n\ninterface IHoverData {\n value: number;\n label: string;\n}\n\ninterface IHoverDataGroup {\n [group: string]: IHoverData[];\n}\n\ninterface IAnnotationData {\n group: string;\n summaryKeys: string[];\n type: string;\n}\n\ninterface IBoxPlotState {\n tooltip: ITooltip;\n}\n\nexport default class BoxPlot extends React.Component<ISemioticChartProps, IBoxPlotState> {\n public state: IBoxPlotState = {\n tooltip: null,\n };\n\n private margin: IMargin = {\n top: 10,\n bottom: 20,\n left: 60,\n right: 40,\n };\n\n private decorateData = (dataPoints: number[], group: string): IChartDataPoint[] => {\n return dataPoints.map((dp) => ({\n group,\n value: dp,\n color: vizConfig.colors[group],\n }));\n };\n\n private generateChartData = () => {\n const { metricSetPair } = this.props;\n const filterFunc = (v: IChartDataPoint) => typeof v.value === 'number';\n const baselineInput = this.decorateData(metricSetPair.values.control, 'baseline');\n const canaryInput = this.decorateData(metricSetPair.values.experiment, 'canary');\n const chartData = baselineInput.concat(canaryInput).filter(filterFunc);\n return chartData;\n };\n\n // Generate tooltip content that shows the summary statistics of a boxplot\n private createChartHoverHandler = () => {\n return (d: IOrFrameHoverArgs<IChartDataPoint> & IOrSummaryPiece): void => {\n if (d && d.type === 'frame-hover') {\n const points = d.points;\n const data: IHoverDataGroup = {\n baseline: [],\n canary: [],\n };\n\n points.forEach((p: IOrSummaryPiece) => {\n data[p.key].push({ label: p.label, value: p.value });\n });\n\n const summaryLabels = data.baseline.map((b: IHoverData) => b.label);\n const summaryKeysColumn = [\n <div className={'header'} key={'summary'}>\n Summary\n </div>,\n ...summaryLabels.map((label: string) => {\n return <div key={label}>{label}</div>;\n }),\n ];\n\n const baselineColumn = [\n <div className={'header'} key={'baseline'}>\n <CircleIcon group={'baseline'} />\n Baseline\n </div>,\n data.baseline.map((hd: IHoverData, i: number) => {\n return <div key={i}>{utils.formatMetricValue(hd.value)}</div>;\n }),\n ];\n\n const canaryColumn = [\n <div className=\"header\" key=\"canary\">\n <CircleIcon group=\"canary\" />\n Canary\n </div>,\n data.canary.map((hd: IHoverData, i: number) => {\n return <div key={i}>{utils.formatMetricValue(hd.value)}</div>;\n }),\n ];\n\n const tooltipContent = (\n <div className=\"tooltip-container\">\n <div className=\"columns\">\n <div className=\"column\">{summaryKeysColumn}</div>\n <div className=\"column\">{baselineColumn}</div>\n <div className=\"column\">{canaryColumn}</div>\n </div>\n </div>\n );\n\n this.setState({\n tooltip: {\n content: tooltipContent,\n x: d.x + this.margin.left,\n y: d.y + this.margin.top,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n private defineAnnotations = () => {\n return ['baseline', 'canary'].map((g: string) => {\n return {\n type: 'summary-custom',\n group: g,\n summaryKeys: ['q1area', 'median', 'q3area'],\n };\n });\n };\n\n private customAnnotationFunction = (args: ISemioticAnnotationArgs<IAnnotationData, IOrGroup<IChartDataPoint>>) => {\n const {\n d,\n orFrameState: { pieceDataXY },\n categories,\n } = args;\n\n if (d.type === 'summary-custom') {\n // If no data exists for this group, don't return any annotation elements\n if (!categories[d.group]) {\n return null;\n }\n\n const summaryData = pieceDataXY.filter((sd: IOrSummaryPiece) => sd.key === d.group);\n const boxPlotWidth = categories[d.group].width;\n const statLabelMap: { [stat: string]: string } = {\n median: 'median',\n q1area: '25th %-ile',\n q3area: '75th %-ile',\n };\n const createNoteElement = (posY: number, dataPoint: IOrSummaryPiece) => {\n const name = dataPoint.summaryPieceName;\n const label = statLabelMap[name];\n const noteData = {\n x: dataPoint.x,\n y: posY,\n dx: boxPlotWidth / 2,\n dy: 0,\n note: {\n label: `${label}: ${utils.formatMetricValue(dataPoint.value)}`,\n wrap: 100,\n lineType: 'vertical',\n align: 'middle',\n orientation: 'topBottom',\n padding: 10,\n },\n className: 'boxplot-annotation',\n };\n return <Annotation key={name} noteData={noteData} />;\n };\n\n const nodes = d.summaryKeys\n .map((summaryKey: string) => {\n const pieceData = summaryData.find((sd: IOrSummaryPiece) => sd.summaryPieceName === summaryKey);\n return pieceData ? new Node<IOrSummaryPiece>(pieceData.y, 20, pieceData) : null;\n })\n .map((v: null | Node<IOrSummaryPiece>) => v) as Array<Node<IOrSummaryPiece>>;\n\n const forceOptions = {\n minPos: this.margin.top,\n maxPos: vizConfig.height - this.margin.bottom,\n };\n const annotations = new Force<IOrSummaryPiece>(forceOptions)\n .nodes(nodes)\n .compute()\n .nodes()\n .map((n: Node<IOrSummaryPiece>) => createNoteElement(n.currentPos, n.data));\n\n return annotations;\n } else {\n return null;\n }\n };\n\n private getChartProps = () => {\n const { parentWidth } = this.props;\n const chartData = this.generateChartData();\n\n return {\n size: [parentWidth, vizConfig.height],\n margin: this.margin,\n projection: 'vertical',\n summaryType: 'boxplot',\n oLabel: false,\n oPadding: 160,\n style: (d: IChartDataPoint) => {\n return {\n fill: d.color,\n fillOpacity: 0.7,\n };\n },\n summaryStyle: (d: IChartDataPoint) => {\n return {\n fill: d.color,\n fillOpacity: 0.4,\n stroke: '#6a6a6a',\n strokeWidth: 2,\n };\n },\n pieceClass: (d: IChartDataPoint) => `piece ${d.group}`,\n type: {\n type: 'swarm',\n r: 3,\n iterations: 50,\n },\n rExtent: extent(chartData.map((o) => o.value)),\n customHoverBehavior: this.createChartHoverHandler(),\n hoverAnnotation: false,\n annotations: this.defineAnnotations(),\n summaryHoverAnnotation: [] as IAnnotationType[],\n data: chartData,\n oAccessor: (d: IChartDataPoint) => d.group,\n rAccessor: (d: IChartDataPoint) => d.value,\n svgAnnotationRules: this.customAnnotationFunction,\n summaryClass: 'boxplot-summary',\n axis: {\n orient: 'left',\n label: 'metric value',\n tickFormat: (d: number) => utils.formatMetricValue(d),\n },\n };\n };\n\n public render() {\n const { metricSetPair } = this.props;\n return (\n <div className=\"boxplot\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend />\n <div className=\"graph-container\">\n <div className=\"boxplot-chart\">\n <OrdinalFrame {...this.getChartProps()} />\n </div>\n <Tooltip {...this.state.tooltip} />\n </div>\n </div>\n );\n }\n}\n","import { extent, histogram } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport * as React from 'react';\nimport {\n Annotation,\n IAnnotationType,\n IOrFrameHoverArgs,\n IOrGroup,\n IOrPiece,\n IOrXyData,\n ISemioticAnnotationArgs,\n OrdinalFrame,\n} from 'semiotic';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './histogram.less';\n\ninterface IInputDataPoint {\n value: number;\n group: string;\n}\n\ninterface IChartDataPoint {\n group: string;\n count: number;\n x0: number;\n x1: number;\n}\n\ninterface IAnnotationData extends IChartDataPoint {\n type: string;\n}\n\ninterface IHistogramState {\n tooltip: ITooltip;\n}\n\nexport default class Histogram extends React.Component<ISemioticChartProps, IHistogramState> {\n public state: IHistogramState = {\n tooltip: null,\n };\n\n private margin: IMargin = {\n top: 20,\n bottom: 20,\n left: 60,\n right: 10,\n };\n\n private decorateData = (dataPoints: number[], group: string): IInputDataPoint[] => {\n return dataPoints.map((dp) => ({\n group,\n value: dp,\n }));\n };\n\n /*\n * Semiotic actually supports histogram as a \"summary type\" out of the box, but the customization is\n * currently limited (e.g. it can't display the y-axis ticks & labels)\n * Hence we're manually generating histogram data using D3 and display it as\n * a grouped bar chart in semiotic\n */\n private generateChartData = () => {\n const { metricSetPair } = this.props;\n const filterFunc = (v: IInputDataPoint) => typeof v.value === 'number';\n const baselineInput = this.decorateData(metricSetPair.values.control, 'baseline');\n const canaryInput = this.decorateData(metricSetPair.values.experiment, 'canary');\n const combinedInput = baselineInput.concat(canaryInput).filter(filterFunc);\n\n const x = scaleLinear()\n .domain(extent(combinedInput.map((o) => o.value)))\n .nice();\n const domain = x.domain() as [number, number];\n\n // create histogram bins based on the combined data points\n const histogramData = histogram<IInputDataPoint, number>()\n .domain(domain)\n .value((d: IInputDataPoint) => d.value)(combinedInput);\n\n const chartData: IChartDataPoint[] = [];\n\n // Convert it to ordinal data format for bar chart in semiotic\n histogramData.forEach((h) => {\n const { x0, x1 } = h;\n const baselineBin = { group: 'baseline', x0, x1, count: 0 };\n const canaryBin = { group: 'canary', x0, x1, count: 0 };\n h.forEach((d) => (d.group === 'baseline' ? baselineBin.count++ : canaryBin.count++));\n chartData.push(baselineBin);\n chartData.push(canaryBin);\n });\n\n return chartData;\n };\n\n // Function factory to handle hover event\n private createChartHoverHandler = (chartData: IChartDataPoint[]) => {\n return (d: IOrFrameHoverArgs<IChartDataPoint>): void => {\n if (d && d.type === 'column-hover') {\n const x1Max: number = Math.max(...chartData.map((cd: IChartDataPoint) => cd.x1));\n const xyData = d.column.xyData;\n const x = xyData[1].xy.x + this.margin.left;\n const halfHeight1 = xyData[0].xy.height / 2;\n const halfHeight2 = xyData[1].xy.height / 2;\n const y = vizConfig.height - this.margin.bottom - Math.min(halfHeight1, halfHeight2);\n const { x0, x1 } = d.summary[0].data;\n const tooltipRows = d.summary.map((s: IOrPiece<IChartDataPoint>) => {\n const { group, count } = s.data;\n const valueStyle = {\n fontWeight: 'bold',\n } as React.CSSProperties;\n\n return (\n <div key={group}>\n <CircleIcon group={group} />\n <span>{` ${group} count: `}</span>\n <span style={valueStyle}>{count}</span>\n </div>\n );\n });\n\n let label = `For metric value more than / equal to ${utils.formatMetricValue(x0)} `;\n label +=\n x1 === x1Max\n ? `and less than / equal to ${utils.formatMetricValue(x1)}`\n : `and less than ${utils.formatMetricValue(x1)}`;\n\n const tooltipContent = (\n <div>\n <div>{label}</div>\n {tooltipRows}\n </div>\n );\n\n this.setState({\n tooltip: {\n content: tooltipContent,\n x,\n y,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n // generate bar value annotations object\n private defineAnnotations = (chartData: IChartDataPoint[]) => {\n const annotations = [] as IAnnotationData[];\n chartData.forEach((d: IChartDataPoint) => {\n if (d.count > 0) {\n annotations.push({\n type: 'bar-value-custom',\n ...d,\n });\n }\n });\n return annotations;\n };\n\n // function to actually create the JSX elements based on the annotation object\n private customAnnotationFunction = (\n args: ISemioticAnnotationArgs<IAnnotationData, IOrGroup<IChartDataPoint>>,\n ): JSX.Element | null => {\n const { d, i, categories } = args;\n if (d.type === 'bar-value-custom') {\n const { x, y, width } = categories[d.x1].xyData.find(\n (c: IOrXyData<IChartDataPoint>) => c.piece.data.group === d.group,\n ).xy;\n const noteData = {\n x: x + width / 2,\n y,\n nx: x + width / 2,\n ny: y - 1,\n note: {\n label: `${d.count}`,\n wrap: 100,\n align: 'middle',\n orientation: 'topBottom',\n padding: 0,\n color: vizConfig.colors[d.group],\n lineType: 'horizontal',\n },\n className: `bar-annotation`,\n };\n return <Annotation key={i} noteData={noteData} />;\n } else {\n return null;\n }\n };\n\n private getChartProps = () => {\n const { parentWidth } = this.props;\n const chartData = this.generateChartData();\n\n return {\n size: [parentWidth, vizConfig.height],\n margin: this.margin,\n projection: 'vertical',\n type: 'clusterbar',\n oLabel: (v: string) => <text textAnchor=\"middle\">{utils.formatMetricValue(parseFloat(v))}</text>,\n oPadding: 20,\n oAccessor: (d: IChartDataPoint) => d.x1,\n style: (d: IChartDataPoint) => {\n return {\n fill: vizConfig.colors[d.group],\n strokeWidth: 1,\n stroke: vizConfig.colors.background,\n strokeOpacity: 1,\n };\n },\n customHoverBehavior: this.createChartHoverHandler(chartData),\n data: this.generateChartData(),\n axis: [\n {\n orient: 'left',\n label: 'measurement count',\n tickFormat: (d: number) => (d === 0 ? null : Math.abs(d)),\n },\n ],\n rAccessor: (d: IChartDataPoint) => d.count,\n annotations: this.defineAnnotations(chartData),\n svgAnnotationRules: this.customAnnotationFunction,\n hoverAnnotation: [] as IAnnotationType[],\n };\n };\n\n public render() {\n const { metricSetPair } = this.props;\n\n return (\n <div className=\"histogram\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend />\n <div className=\"graph-container\">\n <div className=\"canary-chart\">\n <OrdinalFrame {...this.getChartProps()} />\n </div>\n <Tooltip {...this.state.tooltip} />\n </div>\n </div>\n );\n }\n}\n","import * as React from 'react';\n\nimport { vizConfig } from './config';\nimport './noValidDataSign.less';\n\nexport default () => (\n <div style={{ height: vizConfig.height }} className=\"no-data-sign\">\n No Valid Data is Available for This Metric\n </div>\n);\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import * as React from 'react';\n\nimport * as utils from './utils';\n\nexport interface ICustomAxisTickLabel {\n millis: number;\n}\n\n// custom labels as we want two label rows when showing date + hour at midnight\nexport default ({ millis }: ICustomAxisTickLabel) => {\n const text = utils.dateTimeTickFormatter(millis).map((s: string, i: number) => (\n <text textAnchor={'middle'} className={'axis-label'} key={i}>\n {s}\n </text>\n ));\n return <g className={'axis-label'}>{text}</g>;\n};\n","import { scaleUtc } from 'd3-scale';\nimport * as React from 'react';\nimport { Axis } from 'semiotic';\n\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport { IMargin } from './semiotic.service';\nimport * as utils from './utils';\n\nimport './secondaryTSXAxis.less';\n\ninterface ISecondaryTSXAxisProps {\n margin: IMargin;\n width: number;\n millisSet: number[];\n axisLabel?: string;\n bottomOffset: number;\n}\n\n/*\n * Secondary X Axis for Time Series Graph\n * Used when canary and baseline have different start time. We can overlay this axis component\n * on the main graph component\n */\nexport default class SecondaryTSXAxis extends React.Component<ISecondaryTSXAxisProps> {\n public render() {\n const { margin, width, millisSet, axisLabel, bottomOffset } = this.props;\n\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight } = vizConfig.timeSeries;\n\n const extent = [millisSet[0], millisSet[millisSet.length - 1]].map((ms: number) => new Date(ms));\n const totalAxisHeight = axisTickLabelHeight + axisTickLineHeight + (axisLabel ? axisLabelHeight : 0);\n const netWidth = width - margin.left - margin.right;\n const range = [0, netWidth];\n const containerStyle = {\n bottom: bottomOffset,\n };\n\n const svgWrapperStyle = {\n transform: `translateX(${margin.left}px)`,\n };\n return (\n <svg className=\"axis secondary-ts-x-axis\" width={width} height={totalAxisHeight} style={containerStyle}>\n <g className=\"wrapper\" style={svgWrapperStyle}>\n <Axis\n className=\"x axis bottom canary-dual-axis\"\n size={[netWidth, axisTickLineHeight]}\n scale={scaleUtc().domain(extent).range(range)}\n orient=\"bottom\"\n label=\"Canary\"\n tickValues={utils.calculateDateTimeTicks(millisSet)}\n tickFormat={(d: number) => <CustomAxisTickLabel millis={d} />}\n />\n </g>\n </svg>\n );\n }\n}\n","import { scaleUtc } from 'd3-scale';\nimport { curveStepAfter } from 'd3-shape';\nimport * as React from 'react';\nimport { XYFrame } from 'semiotic';\n\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport SecondaryTSXAxis from './secondaryTSXAxis';\nimport { IMargin, ISemioticChartProps } from './semiotic.service';\nimport * as utils from './utils';\n\nimport './differenceArea.less';\n\ninterface IDataPoint {\n timestampMillis: number;\n value: number;\n}\n\ninterface IChartDataSet {\n label: string;\n color: string;\n coordinates: IDataPoint[];\n}\n\ninterface IInterimDataSet {\n timestamp: number;\n canary: number | string;\n baseline: number | string;\n}\n\ninterface IDifferenceAreaProps extends ISemioticChartProps {\n millisSetBaseline: number[];\n}\n\n/*\n * Supplemental visualization in the time series view to highlight\n * Canary difference to baseline at any given timestamp\n */\nexport default class DifferenceArea extends React.Component<IDifferenceAreaProps> {\n private margin: IMargin = {\n left: 60,\n right: 20,\n top: 8,\n };\n\n private chartHeight = 40; // chart height not including axes height\n private headerHeight = 17;\n\n private getChartData = () => {\n const { metricSetPair } = this.props;\n const {\n values: { experiment, control },\n scopes,\n } = metricSetPair;\n\n const stepMillis = scopes.control.stepMillis;\n const maxDataPoints = Math.max(experiment.length, control.length);\n\n // Align data sets in case canary & baseline have different lengths and/or starting time\n const intDataSet: IInterimDataSet[] = Array(maxDataPoints)\n .fill(0)\n .map((_, i) => {\n const e = experiment[i];\n const c = control[i];\n return {\n timestamp: scopes.control.startTimeMillis + i * stepMillis,\n canary: e,\n baseline: c,\n };\n });\n\n const baselineReferenceDataPoints: IDataPoint[] = intDataSet.map((ds: IInterimDataSet) => ({\n timestampMillis: ds.timestamp,\n value: 0,\n }));\n\n const differenceDataPoints: IDataPoint[] = intDataSet.map((ds: IInterimDataSet) => ({\n timestampMillis: ds.timestamp,\n value: typeof ds.canary === 'number' && typeof ds.baseline === 'number' ? ds.canary - ds.baseline : 0,\n }));\n\n return {\n chartData: [\n {\n label: 'difference',\n color: vizConfig.colors.canary,\n coordinates: differenceDataPoints,\n },\n {\n label: 'baselineReference',\n color: vizConfig.colors.baseline,\n coordinates: baselineReferenceDataPoints,\n },\n ],\n };\n };\n\n private getSecondaryAxis = (millisOffset: number, millisSetBaseline: number[]) => {\n const { parentWidth } = this.props;\n const millisSetCanary = millisSetBaseline.map((ms: number) => ms + millisOffset);\n\n return (\n <SecondaryTSXAxis\n margin={{ left: this.margin.left, right: this.margin.right, top: 0, bottom: 0 }}\n width={parentWidth}\n millisSet={millisSetCanary}\n axisLabel={'canary'}\n bottomOffset={0}\n />\n );\n };\n\n private getXAxisTotalHeight = (shouldUseSecondaryXAxis: boolean) => {\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight } = vizConfig.timeSeries;\n\n return shouldUseSecondaryXAxis\n ? 2 * (axisLabelHeight + axisTickLabelHeight) + axisTickLineHeight\n : axisTickLabelHeight;\n };\n\n public render() {\n const { metricSetPair, parentWidth, millisSetBaseline } = this.props;\n\n /*\n * Generate the data needed for the graph components\n */\n const { scopes } = metricSetPair;\n const { chartData } = this.getChartData();\n const millisOffset = scopes.experiment.startTimeMillis - scopes.control.startTimeMillis;\n const shouldUseSecondaryXAxis = millisOffset !== 0;\n\n /*\n * Build the visualization components\n */\n const xAxisTotalHeight = this.getXAxisTotalHeight(shouldUseSecondaryXAxis);\n const computedConfig = {\n lines: chartData,\n size: [parentWidth, this.chartHeight + xAxisTotalHeight],\n margin: { ...this.margin, bottom: xAxisTotalHeight },\n lineType: {\n type: 'area',\n interpolator: curveStepAfter,\n },\n lineStyle: (ds: IChartDataSet) =>\n ds.label === 'difference'\n ? {\n fill: ds.color,\n fillOpacity: 0.6,\n }\n : {\n stroke: ds.color,\n strokeOpacity: 1,\n strokeWidth: 2,\n strokeDasharray: 5,\n },\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillis),\n yAccessor: 'value',\n xScaleType: scaleUtc(),\n axes: [\n {\n orient: 'left',\n tickFormat: () => `\\u0394 = 0`, // Δ = 0\n tickValues: [0],\n },\n {\n orient: 'bottom',\n tickValues: utils.calculateDateTimeTicks(millisSetBaseline),\n tickFormat: (d: number) => <CustomAxisTickLabel millis={d} />,\n label: shouldUseSecondaryXAxis ? 'Baseline' : undefined,\n className: shouldUseSecondaryXAxis ? 'baseline-dual-axis' : '',\n },\n ],\n xExtent: [millisSetBaseline[0], millisSetBaseline[millisSetBaseline.length - 1]],\n };\n\n return (\n <div className=\"difference-area\">\n <div className=\"chart-title\" style={{ height: this.headerHeight }}>\n Canary Value Differences from Baseline\n </div>\n <XYFrame {...computedConfig} />\n {shouldUseSecondaryXAxis ? this.getSecondaryAxis(millisOffset, millisSetBaseline) : null}\n </div>\n );\n }\n}\n","import classNames from 'classnames';\nimport { scaleUtc } from 'd3-scale';\nimport { curveStepAfter } from 'd3-shape';\nimport { IMetricSetPair } from 'kayenta/domain/IMetricSetPair';\nimport * as React from 'react';\nimport { IMinimapProps, IXYFrameHoverBaseArgs, IXYFrameProps, MinimapXYFrame, XYFrame } from 'semiotic';\n\nimport { SETTINGS, timestamp } from '@spinnaker/core';\n\nimport ChartHeader from './chartHeader';\nimport ChartLegend from './chartLegend';\nimport CircleIcon from './circleIcon';\nimport { vizConfig } from './config';\nimport CustomAxisTickLabel from './customAxisTickLabel';\nimport DifferenceArea from './differenceArea';\nimport SecondaryTSXAxis from './secondaryTSXAxis';\nimport { IMargin, ISemioticChartProps, ITooltip } from './semiotic.service';\nimport Tooltip from './tooltip';\nimport * as utils from './utils';\n\nimport './timeSeries.less';\n\nconst { defaultTimeZone } = SETTINGS;\n\ninterface IDataPoint {\n value: number | null;\n timestampMillisActual: number;\n timestampMillisNormalizedMain: number;\n timestampMillisNormalizedMinimap: number;\n}\n\ninterface IChartDataSet {\n color: string;\n label: string;\n coordinates: IDataPoint[];\n coordinatesUnfiltered: IDataPoint[];\n}\n\ninterface IChartData {\n dataSets: IChartDataSet[];\n xExtentNormalizedMinimap: number[];\n xExtentNormalizedMain: number[];\n millisSetNormalizedMain: number[];\n millisSetNormalizedMinimap: number[];\n}\n\ninterface ITimeSeriesState {\n tooltip: ITooltip;\n userBrushExtent: Date[] | null;\n showGroup: { [group: string]: boolean };\n graphs: { [graph: string]: JSX.Element };\n}\n\ninterface ITooltipDataPoint {\n color: string;\n label: string;\n value: number | undefined;\n ts: number;\n}\n\ninterface IDataSetsAttributes {\n startTimeMillisOffset: number;\n maxDataCount: number;\n shouldDisplayMinimap: boolean;\n shouldUseSecondaryXAxis: boolean;\n}\n\n/*There are 3 vizualisations inside this component:\n1. The main Timeseries chart\n2. The minimap chart for users to zoom/ pan the main timeseries. Only show this if there are many data points\n3. The difference chart that displays the diff between canary and baseline\n*/\nexport default class TimeSeries extends React.Component<ISemioticChartProps, ITimeSeriesState> {\n public state: ITimeSeriesState = {\n tooltip: null,\n userBrushExtent: null,\n showGroup: {\n baseline: true,\n canary: true,\n },\n graphs: {\n // a standalone timeseries chart if data points are few, otherwise it also includes a brushable/ zoomable minimap\n line: null,\n // graph that shows the delta between canary and baseline\n differenceArea: null,\n },\n };\n\n private mainMinimapHeight = 320; // total height of the main & minimap (if applicable)\n\n private marginMain: IMargin = {\n top: 10,\n left: 60,\n right: 20,\n };\n\n private marginMinimap: IMargin = {\n top: 0,\n bottom: 0,\n left: 60,\n right: 20,\n };\n\n public componentDidMount() {\n this.createGraphs();\n }\n\n // Only reconstruct the graph components when necessary\n public componentDidUpdate(prevProps: ISemioticChartProps, prevState: ITimeSeriesState) {\n const { metricSetPair, parentWidth } = this.props;\n const { userBrushExtent, showGroup } = this.state;\n if (\n metricSetPair !== prevProps.metricSetPair ||\n parentWidth !== prevProps.parentWidth ||\n userBrushExtent !== prevState.userBrushExtent ||\n showGroup !== prevState.showGroup\n ) {\n this.createGraphs();\n }\n }\n\n /*\n * Generate chart Data\n * In cases where the start Millis is different betwen canary and baseline, we want to:\n * 1) If data point count is different, extend the shorter dataset to match the longer one (i.e. match the x extent)\n * 2) normalize canary timestamp to match baseline timestamps (needed for the tooltip's\n * voronoi overlay logic in semiotic to work properly)\n */\n private getChartData = (dataSetsAttr: IDataSetsAttributes, metricSetPair: IMetricSetPair) => {\n const { maxDataCount } = dataSetsAttr;\n const { showGroup } = this.state;\n const { dataGroupMap, colors } = vizConfig;\n const { scopes, values } = metricSetPair;\n const { userBrushExtent } = this.state;\n const groups = ['baseline', 'canary'];\n const isOnlyCanarySelected = showGroup.canary && !showGroup.baseline;\n const stepMillis = scopes.control.stepMillis;\n\n /*\n * To support dual-axis, use 'normalized' ts supplied to semiotic for both canary and baseline.\n * We store the actual ts as 'actuals' (which can be different from the normalized ts for canary).\n */\n const dataSets: IChartDataSet[] = groups.map((g: string) => {\n const dataPoints: IDataPoint[] = Array(maxDataCount)\n .fill(0)\n .map((_, i: number) => {\n const name = dataGroupMap[g];\n const timestampMillisActual = scopes[name].startTimeMillis + i * stepMillis;\n\n // if only canary is selected, norm'd ts is based on canary's ts.\n const timestampMillisNormalizedMain = isOnlyCanarySelected\n ? scopes[dataGroupMap['canary']].startTimeMillis + i * stepMillis\n : scopes[dataGroupMap['baseline']].startTimeMillis + i * stepMillis;\n\n // minimap always shows both data sets, so norm'd ts is always based on baseline's ts\n const timestampMillisNormalizedMinimap = scopes[dataGroupMap['baseline']].startTimeMillis + i * stepMillis;\n\n return {\n timestampMillisActual, // original ts for this data point\n timestampMillisNormalizedMain,\n timestampMillisNormalizedMinimap,\n value: values[name][i],\n };\n });\n\n return {\n label: g,\n color: colors[g],\n coordinates: dataPoints.filter((d) => typeof d.value === 'number'),\n coordinatesUnfiltered: dataPoints,\n };\n });\n\n const millisSetNormalizedMinimap: number[] = dataSets[0].coordinatesUnfiltered.map(\n (c: any) => c.timestampMillisNormalizedMinimap,\n );\n\n const millisSetNormalizedMain: number[] = (!userBrushExtent\n ? dataSets[0].coordinatesUnfiltered\n : dataSets[0].coordinatesUnfiltered.filter((c: IDataPoint) => {\n return (\n c.timestampMillisNormalizedMinimap >= userBrushExtent[0].valueOf() &&\n c.timestampMillisNormalizedMinimap <= userBrushExtent[1].valueOf()\n );\n })\n ).map((c: IDataPoint) => c.timestampMillisNormalizedMain);\n\n return {\n dataSets,\n millisSetNormalizedMain,\n millisSetNormalizedMinimap,\n xExtentNormalizedMain: [millisSetNormalizedMain[0], millisSetNormalizedMain[millisSetNormalizedMain.length - 1]],\n xExtentNormalizedMinimap: [\n millisSetNormalizedMinimap[0],\n millisSetNormalizedMinimap[millisSetNormalizedMinimap.length - 1],\n ],\n };\n };\n\n // common chart props that are used for both the main XYFrame and Minimap (if applicable)\n private createCommonChartProps = () => {\n return {\n lineType: {\n type: 'line',\n interpolator: curveStepAfter,\n },\n lineStyle: (ds: IChartDataSet) => ({\n stroke: ds.color,\n strokeWidth: 2,\n strokeOpacity: 0.8,\n }),\n yAccessor: 'value',\n xScaleType: scaleUtc(),\n baseMarkProps: { transitionDuration: { default: 200, fill: 200 } },\n };\n };\n\n private createLineChartProps = (\n chartData: IChartData,\n dataSetsAttributes: IDataSetsAttributes,\n commonChartProps: IXYFrameProps<IChartDataSet, IDataPoint>,\n ) => {\n const { axisTickLineHeight, axisTickLabelHeight, axisLabelHeight, minimapHeight } = vizConfig.timeSeries;\n\n const { parentWidth } = this.props;\n const { showGroup } = this.state;\n\n const { shouldUseSecondaryXAxis, shouldDisplayMinimap } = dataSetsAttributes;\n const { dataSets, xExtentNormalizedMain, xExtentNormalizedMinimap, millisSetNormalizedMain } = chartData;\n\n // if secondary axis is needed, we need more bottom margin to fit both axes\n const totalXAxisHeight = shouldUseSecondaryXAxis\n ? 2 * (axisTickLabelHeight + axisLabelHeight) + axisTickLineHeight\n : axisTickLabelHeight;\n\n const lineChartProps = {\n ...commonChartProps,\n lines: dataSets.filter((ds: IChartDataSet) => showGroup[ds.label]), // only show selected groups\n hoverAnnotation: [\n {\n type: 'x',\n disable: ['connector', 'note'],\n },\n {\n type: 'vertical-points',\n threshold: 0.1,\n r: () => 5,\n },\n ],\n customHoverBehavior: this.createChartHoverHandler(dataSets, dataSetsAttributes),\n xExtent: xExtentNormalizedMain,\n axes: [\n {\n orient: 'left',\n label: 'metric value',\n tickFormat: (d: number) => utils.formatMetricValue(d),\n },\n {\n orient: 'bottom',\n label: shouldUseSecondaryXAxis ? 'Baseline' : undefined,\n tickValues: utils.calculateDateTimeTicks(millisSetNormalizedMain),\n tickFormat: (d: number) => <CustomAxisTickLabel millis={d} />,\n className: shouldUseSecondaryXAxis ? 'baseline-dual-axis' : '',\n },\n ],\n margin: { ...this.marginMain, bottom: totalXAxisHeight },\n matte: true,\n size: [parentWidth, shouldDisplayMinimap ? this.mainMinimapHeight - minimapHeight : this.mainMinimapHeight],\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillisNormalizedMain),\n };\n\n if (shouldDisplayMinimap) {\n return {\n ...lineChartProps,\n minimap: {\n ...commonChartProps,\n lines: dataSets,\n yBrushable: false,\n brushEnd: this.onBrushEnd,\n size: [parentWidth, minimapHeight],\n axes: [\n {\n orient: 'left',\n tickFormat: (): void => null,\n },\n {\n orient: 'bottom',\n },\n ],\n margin: this.marginMinimap,\n xAccessor: (d: IDataPoint) => new Date(d.timestampMillisNormalizedMinimap),\n xExtent: xExtentNormalizedMinimap,\n } as IMinimapProps<IChartDataSet, IDataPoint>,\n };\n } else {\n return lineChartProps as IXYFrameProps<IChartDataSet, IDataPoint>;\n }\n };\n\n // construct the graph JSX components and store them as states\n private createGraphs = () => {\n const { metricSetPair, parentWidth } = this.props;\n const { showGroup } = this.state;\n const { minimapDataPointsThreshold, minimapHeight } = vizConfig.timeSeries;\n\n /*\n * Generate the data needed for the graph components\n */\n const baselineStartTimeMillis = metricSetPair.scopes.control.startTimeMillis;\n const canaryStartTimeMillis = metricSetPair.scopes.experiment.startTimeMillis;\n const isStartTimeMillisEqual = baselineStartTimeMillis === canaryStartTimeMillis;\n\n // Top level attributes to determine how data is formatted & which chart components to include\n const dataSetsAttributes = {\n startTimeMillisOffset: canaryStartTimeMillis - baselineStartTimeMillis,\n maxDataCount: Math.max(metricSetPair.values.control.length, metricSetPair.values.experiment.length),\n shouldDisplayMinimap: metricSetPair.values.control.length > minimapDataPointsThreshold,\n shouldUseSecondaryXAxis: !isStartTimeMillisEqual && showGroup.canary && showGroup.baseline,\n };\n\n const chartData = this.getChartData(dataSetsAttributes, metricSetPair);\n\n /*\n * Build the visualization components\n */\n const commonChartProps = this.createCommonChartProps();\n const lineChartProps = this.createLineChartProps(chartData, dataSetsAttributes, commonChartProps);\n\n const line = (\n <>\n <div className=\"time-series-chart\">\n {dataSetsAttributes.shouldDisplayMinimap ? (\n <MinimapXYFrame {...lineChartProps} />\n ) : (\n <XYFrame {...lineChartProps} />\n )}\n </div>\n {dataSetsAttributes.shouldUseSecondaryXAxis ? (\n <SecondaryTSXAxis\n margin={{ left: this.marginMain.left, right: this.marginMain.right, top: 0, bottom: 0 }}\n width={parentWidth}\n millisSet={chartData.millisSetNormalizedMain.map(\n (ms: number) => ms + dataSetsAttributes.startTimeMillisOffset,\n )}\n axisLabel=\"canary\"\n bottomOffset={dataSetsAttributes.shouldDisplayMinimap ? minimapHeight : 0}\n />\n ) : null}\n {dataSetsAttributes.shouldDisplayMinimap ? (\n <div className=\"zoom-icon\">\n <i className=\"fas fa-search-plus\" />\n </div>\n ) : null}\n </>\n );\n\n const differenceArea =\n showGroup.baseline && showGroup.canary ? (\n <DifferenceArea {...this.props} millisSetBaseline={chartData.millisSetNormalizedMinimap} />\n ) : null;\n\n this.setState({\n graphs: {\n line,\n differenceArea,\n },\n });\n };\n\n private onLegendClickHandler = (group: string) => {\n const showGroup = this.state.showGroup;\n this.setState({\n showGroup: { ...showGroup, [group]: !showGroup[group] },\n });\n };\n\n // function factory to create a custom hover handler function based on the datasets\n private createChartHoverHandler = (dataSets: IChartDataSet[], dataSetsAttr: IDataSetsAttributes) => {\n const { shouldUseSecondaryXAxis } = dataSetsAttr;\n return (d: (IXYFrameHoverBaseArgs<IDataPoint> & IDataPoint) | undefined) => {\n if (d && d.timestampMillisNormalizedMain) {\n const tooltipData = dataSets.map(\n (ds: IChartDataSet): ITooltipDataPoint => {\n const coord = ds.coordinatesUnfiltered.find(\n (c: IDataPoint) => c.timestampMillisNormalizedMain === d.timestampMillisNormalizedMain,\n );\n return {\n color: ds.color,\n label: ds.label,\n ts: coord.timestampMillisActual,\n value: coord.value,\n };\n },\n );\n\n let tooltipRows = tooltipData\n .concat()\n .sort((a: ITooltipDataPoint, b: ITooltipDataPoint) => b.value - a.value)\n .map((o: ITooltipDataPoint) => {\n // if there's a ts offset, timestamp should be displayed for each group\n const tsRow = shouldUseSecondaryXAxis ? <div className=\"tooltip-ts\">{timestamp(o.ts)}</div> : null;\n\n return (\n <div key={o.label} className={classNames({ 'tooltip-dual-axis-row': shouldUseSecondaryXAxis })}>\n {tsRow}\n <div id={o.label}>\n <CircleIcon group={o.label} />\n <span>{`${o.label}: `}</span>\n <span>{utils.formatMetricValue(o.value)}</span>\n </div>\n </div>\n );\n });\n\n if (tooltipData.length === 2) {\n const canaryMinusBaseline = tooltipData[1].value - tooltipData[0].value;\n tooltipRows = tooltipRows.concat([\n <div id=\"diff\" key=\"diff\" className=\"tooltip-row\">\n <span>Canary - Baseline: </span>\n <span>{utils.formatMetricValue(canaryMinusBaseline)}</span>\n </div>,\n ]);\n }\n\n const tooltipContent = (\n <div>\n {/* if no dual axes, display timestamp row at the top level */}\n {shouldUseSecondaryXAxis ? null : (\n <div key=\"ts\" className=\"tooltip-ts\">\n {timestamp(tooltipData[0].ts)}\n </div>\n )}\n {tooltipRows}\n </div>\n );\n this.setState({\n tooltip: {\n content: tooltipContent,\n x: d.voronoiX + this.marginMain.left,\n y: d.voronoiY + this.marginMain.top,\n },\n });\n } else {\n this.setState({ tooltip: null });\n }\n };\n };\n\n // Handle user brush action event from semiotic\n private onBrushEnd = (e: Date[]) => {\n this.setState({\n userBrushExtent: e,\n });\n };\n\n public render() {\n const { metricSetPair } = this.props;\n const { showGroup, tooltip } = this.state;\n const { line, differenceArea } = this.state.graphs;\n\n return (\n <div className=\"time-series\">\n <ChartHeader metric={metricSetPair.name} />\n <ChartLegend showGroup={showGroup} isClickable={true} onClickHandler={this.onLegendClickHandler} />\n <div className=\"graph-container\">\n {line}\n <Tooltip {...tooltip} />\n </div>\n {differenceArea}\n </div>\n );\n }\n}\n","import * as React from 'react';\nimport ContainerDimensions from 'react-container-dimensions';\n\nimport BoxPlot from './boxplot';\nimport Histogram from './histogram';\nimport { GraphType, IMetricSetPairGraphProps } from '../metricSetPairGraph.service';\nimport NoValidDataSign from './noValidDataSign';\nimport TimeSeries from './timeSeries';\n\nimport './semioticGraph.less';\n\nexport default class SemioticGraph extends React.Component<IMetricSetPairGraphProps> {\n private fetchChart = (parentWidth: number) => {\n const {\n type,\n metricSetPair: {\n values: { control, experiment },\n },\n } = this.props;\n const chartProps = {\n ...this.props,\n parentWidth,\n };\n const filterInvalidValues = (data: number[]) => data.filter((v) => typeof v === 'number');\n\n if (filterInvalidValues(control).length === 0 && filterInvalidValues(experiment).length === 0) {\n return <NoValidDataSign />;\n }\n\n switch (type) {\n case GraphType.TimeSeries:\n return <TimeSeries {...chartProps} />;\n case GraphType.Histogram:\n return <Histogram {...chartProps} />;\n case GraphType.BoxPlot:\n return <BoxPlot {...chartProps} />;\n default:\n return null;\n }\n };\n\n public render() {\n return (\n <div className=\"semiotic-graph\">\n <ContainerDimensions>{({ width }: { width: number }) => this.fetchChart(width)}</ContainerDimensions>\n </div>\n );\n }\n}\n"],"names":["module","forEach","collection","callback","i","length","result","detector","isIE","version","agent","navigator","userAgent","toLowerCase","indexOf","v","div","document","createElement","all","getElementsByTagName","innerHTML","undef","isLegacyOpera","window","opera","getOption","options","name","defaultValue","value","undefined","reporter","asyncProcess","utils","autoProcess","warn","asyncFrameHandler","batch","Batch","isProcessing","processBatch","size","processingBatch","process","processBatchAsync","fn","setTimeout","add","level","force","localAsyncProcess","clearTimeout","topLevel","bottomLevel","push","fns","getState","element","initState","cleanState","require$$0","batchProcessor","stateHandler","hasState","idHandler","Error","scrollbarSizes","width","height","child","style","cssText","container","appendChild","body","insertBefore","firstChild","widthSize","clientWidth","heightSize","clientHeight","removeChild","getScrollbarSizes","detectionContainerClass","addEvent","el","cb","addEventListener","attachEvent","error","removeEvent","removeEventListener","detachEvent","getExpandElement","childNodes","getShrinkElement","styleId","containerClass","getElementById","containerAnimationClass","method","head","styleElement","id","injectStyle","injectScrollStyle","makeDetectable","debug","args","Array","prototype","slice","call","arguments","unshift","get","log","apply","isUnrendered","getComputedStyle","getStyle","elementStyle","position","offsetWidth","offsetHeight","top","right","bottom","left","widthCSS","heightCSS","storeStyle","storeCurrentSize","lastWidth","lastHeight","getWidthOffset","getHeightOffset","getExpandWidth","getExpandHeight","positionScrollbars","expand","shrink","expandWidth","expandHeight","shrinkWidth","getShrinkWidth","shrinkHeight","getShrinkHeight","scrollLeft","scrollTop","injectContainerElement","className","addAnimationClass","onAnimationStart","onRendered","injectScrollElements","removeRelativeStyles","property","replace","getNumericalValue","alterPositionStyles","rootContainer","scrollbarWidth","scrollbarHeight","containerStyle","containerContainer","expandChild","shrinkChild","dir","onExpandScroll","onShrinkScroll","onExpand","onShrink","registerListenersAndPositionElements","updateChildSizes","getExpandChildElement","updateDetectorElements","done","areElementsInjected","w","h","notifyListenersIfNeeded","state","lastNotifiedWidth","startSize","lastNotifiedHeight","listeners","listener","handleScroll","finalizeDomMutation","ready","install","storeStartSize","ownerDocument","contains","isInDocument","isDetached","addListener","uninstall","isCollection","obj","isArray","toArray","array","isElement","nodeType","condition","format","a","b","c","d","e","f","argIndex","framesToPop","_extends","Object","assign","target","source","key","hasOwnProperty","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_react","_propTypes2","_propTypes","_reactDom2","_reactDom","_elementResizeDetector2","idCount","set","defaultIdHandler","idGenerator","generate","idHandlerMaker","quiet","noop","console","attachFunction","reporterMaker","batchProcessorMaker","globalOptions","callOnAdd","detectionStrategy","eventListenerHandler","eventListeners","getListeners","removeListener","len","splice","removeAllListeners","listenerHandlerMaker","elementUtils","isDetectable","markAsDetectable","isBusy","busy","markBusy","elementUtilsMaker","desiredStrategy","strategyOptions","browserDetector","scrollStrategyMaker","getObject","object","positionCheckPerformed","mutateDom","tabIndex","type","setAttribute","onload","getDocument","contentDocument","this","objectDocument","data","injectObject","listenerProxy","proxy","defaultView","objectStrategyMaker","onReadyCallbacks","listenTo","elements","onResizeCallback","elementsReady","onReadyCallback","_invariant2","_invariant","__esModule","default","ContainerDimensions","_Component","instance","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","initiated","onResize","bind","subClass","superClass","create","constructor","setPrototypeOf","_inherits","Component","node","_node$getBoundingClie","getBoundingClientRect","parentNode","findDOMNode","elementResizeDetector","strategy","componentIsMounted","clientRect","getDomNodeDimensions","setState","children","renderedChildren","Children","only","cloneElement","propTypes","oneOfType","func","isRequired","NaN","compare","bisectRight","ascending","x","lo","hi","mid","values","valueof","min","max","n","e10","Math","sqrt","e5","e2","ceil","LN2","identity","domain","extent","threshold","sturges","histogram","start","stop","count","step0","step1","xz","x0","x1","tz","abs","pow","floor","LN10","step","range","m","shift","pop","bin","bins","bisect","_","constant","thresholds","t","r","exports","loaded","p","Node","Force","Distributor","Renderer","idealPos","currentPos","layerIndex","distanceFrom","currentLeft","currentRight","parent","getPathToRoot","reverse","o","s","nodeSpacing","minPos","maxPos","algorithm","removeOverlap","density","stubWidth","u","extend","nodes","concat","getLayers","pick","keys","DEFAULT_OPTIONS","isDefined","layerWidth","compute","removeStub","distribute","map","computeRequiredWidth","sum","maxWidthPerLayer","needToSplit","estimateRequiredLayers","simple","createStub","roundRobin","overlap","countIdealOverlaps","sort","overlapCount","overlaps","l","isStub","idealLeft","idealRight","search","last","reduce","Symbol","iterator","toString","startKey","endKey","intervalHash","pointTree","_autoIncrement","root","end","idx","insert","starts","every","ends","bsearch","remove","rate1","rate2","filter","_filter","_compare","compares","_unique","unique","resume","insertOne","number","string","Variable","targetPos","index","lineSpacing","Constraint","Solver","solve","round","scale","AB","AD","A2","addVariable","offset","weight","desiredPosition","getPosn","PositionStats","gap","equality","active","unsatisfiable","slack","Number","MAX_VALUE","dfdv","block","ps","posn","visitNeighbours","cOut","cIn","vars","updateWeightedPosition","compute_lm","lm","populateSplitBlock","traverse","findMinLM","findMinLMBetween","findPath","isActiveDirectedPathBetween","split","createSplitBlock","splitBetween","constraint","lb","rb","mergeAcross","cost","Block","vs","list","blockInd","merge","updateBlockPositions","LAGRANGIAN_TOLERANCE","Blocks","cs","inactive","bs","setStartingPositions","setDesiredPositions","mostViolated","ZERO_UPPERBOUND","satisfy","layerGap","nodeHeight","direction","join","lineTo","moveTo","curveTo","vCurveBetween","hCurveBetween","getWaypoints","getPathFromRoot","layout","getLayerIndex","y","dx","dy","generatePath","metric","React","vizConfig","colors","baseline","canary","background","timeSeries","minimapDataPointsThreshold","minimapHeight","axisTickLineHeight","axisTickLabelHeight","axisLabelHeight","dataGroupMap","onClickHandler","showGroup","isClickable","baselineIconStyle","backgroundColor","canaryIconStyle","handleClick","group","legendItemClass","classNames","clickable","legendItemClassCanary","deselected","legendItemClassBaseline","onClick","iconStyle","color","paddingRight","GLOBAL","HIDE","REBUILD","SHOW","_constant2","_constant","dispatchGlobalEvent","eventName","opts","event","CustomEvent","detail","createEvent","initEvent","dispatchEvent","hide","rebuild","show","globalRebuild","mount","unbindListener","bindListener","globalShow","currentTarget","showTooltip","globalHide","hasTarget","hideTooltip","bindWindowEvents","resizeHide","onWindowResize","unbindWindowEvents","_defineProperty","checkStatus","dataEventOff","dataIsCapture","getAttribute","isCapture","currentItem","stopPropagation","setUntargetItems","getTargetArray","targetArray","customListeners","isCustomEvent","ele","customBindListener","_state","eventOff","dataEvent","customListener","customUnbindListener","_state2","getEffect","effect","getMutationObserverClass","MutationObserver","WebKitMutationObserver","MozMutationObserver","bindRemovalTracker","observer","mutations","m1","mutation","m2","removedNodes","observe","childList","subtree","removalTracker","unbindRemovalTracker","disconnect","getDimensions","parseInt","getCurrentOffset","boundingClientRect","targetTop","targetLeft","_getDimensions3","targetWidth","targetHeight","mouseX","clientX","mouseY","clientY","getDefaultPosition","tipWidth","tipHeight","disToMouse","calculateOffset","extraOffset_X","extraOffset_Y","JSON","parse","getParent","currentParent","getPropertyValue","parentElement","parentTop","parentLeft","place","desiredPlace","_getDimensions","_getDimensions2","_getCurrentOffset","defaultOffset","_calculateOffset","windowWidth","innerWidth","windowHeight","innerHeight","_getParent","getTipOffsetLeft","offset_X","getTipOffsetTop","offset_Y","outsideRight","getTipOffsetRight","outsideBottom","getTipOffsetBottom","outside","outsideLeft","outsideTop","inside","placesList","insideList","isNewState","newPlace","newState","tip","getContent","multiline","regexp","test","ariaObj","prop","_class","_class2","_temp","nodeList","fill","_classnames2","_classnames","_staticMethods2","_staticMethods","_windowListener2","_windowListener","_customEvent2","_customEvent","_isCapture2","_isCapture","_getEffect2","_getEffect","_trackRemoval2","_trackRemoval","_getPosition2","_getPosition","_getTipContent2","_getTipContent","_nodeListToArray2","_nodeListToArray","_style2","_style","ReactTooltip","_React$Component","border","extraClass","html","delayHide","delayShow","currentEvent","ariaProps","_aria","parseAria","isEmptyTip","disable","originTooltip","isMultiline","delayShowLoop","delayHideLoop","delayReshow","intervalUpdateContent","methodArray","_this2","_props","insecure","setStyleHeader","newAriaProps","isChanged","some","clearTimer","removeScrollListener","tooltipRef","matches","msMatchesSelector","mozMatchesSelector","escaped","querySelectorAll","_this3","_props2","globalEventOff","isCaptureMode","unbindBasicListener","updateTooltip","_this4","_props3","_props4","content","placeholder","isGlobalCall","_props5","switchToSolid","FocusEvent","scrollHide","reshowDelay","delayUpdate","updateState","class","addScrollListener","setInterval","_getContent","updatePosition","_this5","afterShow","getTooltipContent","delayTime","eventTarget","mouseOnToolTip","isInvisible","_this6","afterHide","resetState","isVisible","listenForTooltipExit","removeListenerForTooltipExit","_this7","_state3","querySelector","tag","__webpack_nonce__","clearInterval","_this8","_state4","tooltipClass","allow_hover","allow_click","Wrapper","wrapper","supportedWrappers","defaultProps","ref","_ref","dangerouslySetInnerHTML","__html","_ref2","any","bool","watchWindow","displayName","Tooltip","componentDidUpdate","prevProps","tooltipTarget","render","tooltipTargetStyle","opacity","pointerEvents","zIndex","formatDecimalParts","toExponential","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","align","sign","symbol","zero","comma","precision","trim","exponent","toFixed","toLocaleString","g","toPrecision","formatRounded","X","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","j","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","isNaN","out","i1","i0","formatTrim","charCodeAt","Infinity","padding","k","ascendingComparator","formatLocale","bisector","tickIncrement","power","tickStep","Map","each","Set","has","clear","entries","empty","proto","factory","definition","Color","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl2rgb","define","copy","channels","displayable","formatHsl","darker","deg2rad","PI","rad2deg","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","atan2","cubehelix","linear","gamma","nogamma","exponential","cosh","cos","sinh","sin","rgbGamma","colorRgb","nb","na","Date","setTime","reA","reB","am","bm","bi","lastIndex","q","one","date","hue","cubehelixGamma","colorCubehelix","cubehelixLong","unit","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","d1","r0","r1","polymap","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","rescale","deinterpolateClamp","invert","reinterpolateClamp","rangeRound","interpolateRound","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","tickFormat","nice","t0","t1","newInterval","floori","offseti","field","interval","previous","millisecond","second","getMilliseconds","getUTCSeconds","day","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","monday","thursday","year","setMonth","setFullYear","getFullYear","utcMinute","setUTCSeconds","getUTCMinutes","utcHour","setUTCMinutes","getUTCHours","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcMonth","setUTCMonth","getUTCMonth","getUTCFullYear","utcYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","utcFormat","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","getHours","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","getMonth","formatMinutes","getMinutes","formatSeconds","getSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","G","I","Y","utcFormats","parses","parseSpecifier","charAt","newParse","week","utcParse","defaultLocale","calendar","month","hour","minute","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","durationSecond","durationMinute","durationHour","durationDay","tickInterval","utcWeek","utcSecond","utcMillisecond","ramp","interpolateCubehelixLong","formatMetricValue","fromMillis","millis","luxonOpts","SETTINGS","feature","displayTimestampsInUserLocalTime","zone","defaultTimeZone","DateTime","calculateDateTimeTicks","millisSet","minMillis","maxMillis","offsetMillis","minMillisShifted","maxMillisShifted","scaleUtc","valueOf","BoxPlot","tooltip","dataPoints","dp","metricSetPair","baselineInput","decorateData","control","canaryInput","experiment","points","label","summaryLabels","summaryKeysColumn","baselineColumn","CircleIcon","hd","utils.formatMetricValue","canaryColumn","tooltipContent","margin","summaryKeys","orFrameState","pieceDataXY","categories","summaryData","sd","boxPlotWidth","statLabelMap","median","q1area","q3area","createNoteElement","posY","dataPoint","summaryPieceName","noteData","note","wrap","lineType","orientation","Annotation","summaryKey","pieceData","find","forceOptions","parentWidth","chartData","generateChartData","projection","summaryType","oLabel","oPadding","fillOpacity","summaryStyle","stroke","strokeWidth","pieceClass","iterations","rExtent","customHoverBehavior","createChartHoverHandler","hoverAnnotation","annotations","defineAnnotations","summaryHoverAnnotation","oAccessor","rAccessor","svgAnnotationRules","customAnnotationFunction","summaryClass","axis","orient","ChartHeader","ChartLegend","OrdinalFrame","getChartProps","Histogram","combinedInput","scaleLinear","histogramData","baselineBin","canaryBin","x1Max","cd","xyData","column","xy","halfHeight1","halfHeight2","summary","tooltipRows","fontWeight","piece","nx","ny","textAnchor","parseFloat","strokeOpacity","Step","context","_context","_t","stepAfter","areaStart","_line","areaEnd","lineStart","_x","_y","_point","lineEnd","closePath","point","text","datetime","toFormat","utils.dateTimeTickFormatter","SecondaryTSXAxis","axisLabel","bottomOffset","ms","totalAxisHeight","netWidth","svgWrapperStyle","transform","Axis","tickValues","utils.calculateDateTimeTicks","CustomAxisTickLabel","DifferenceArea","scopes","stepMillis","maxDataPoints","intDataSet","timestamp","startTimeMillis","baselineReferenceDataPoints","ds","timestampMillis","differenceDataPoints","coordinates","millisOffset","millisSetBaseline","millisSetCanary","shouldUseSecondaryXAxis","getChartData","xAxisTotalHeight","getXAxisTotalHeight","computedConfig","lines","chartHeight","interpolator","curveStepAfter","lineStyle","strokeDasharray","xAccessor","yAccessor","xScaleType","axes","xExtent","headerHeight","XYFrame","getSecondaryAxis","TimeSeries","userBrushExtent","graphs","line","differenceArea","dataSetsAttr","maxDataCount","isOnlyCanarySelected","dataSets","timestampMillisActual","timestampMillisNormalizedMain","timestampMillisNormalizedMinimap","coordinatesUnfiltered","millisSetNormalizedMinimap","millisSetNormalizedMain","xExtentNormalizedMain","xExtentNormalizedMinimap","baseMarkProps","transitionDuration","dataSetsAttributes","commonChartProps","shouldDisplayMinimap","totalXAxisHeight","lineChartProps","marginMain","matte","mainMinimapHeight","minimap","yBrushable","brushEnd","onBrushEnd","marginMinimap","baselineStartTimeMillis","canaryStartTimeMillis","isStartTimeMillisEqual","startTimeMillisOffset","createCommonChartProps","createLineChartProps","MinimapXYFrame","tooltipData","coord","ts","tsRow","canaryMinusBaseline","voronoiX","voronoiY","componentDidMount","createGraphs","prevState","onLegendClickHandler","SemioticGraph","chartProps","filterInvalidValues","NoValidDataSign","GraphType","fetchChart"],"mappings":"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"}