{"version":3,"sources":["jsdelivr-header.js","/npm/@cognite/griff-react@0.5.0-rc.78/lib/index.js"],"names":[],"mappings":"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","file":"/npm/@cognite/griff-react@0.5.0-rc.78/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@cognite/griff-react@0.5.0-rc.78/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar tslib = require('tslib');\nvar React = require('react');\nvar React__default = _interopDefault(React);\nvar PropTypes = require('prop-types');\nvar PropTypes__default = _interopDefault(PropTypes);\nvar sizeMe = require('react-sizeme');\nvar sizeMe__default = _interopDefault(sizeMe);\nvar d3 = require('d3');\nvar isEqual$1 = _interopDefault(require('lodash.isequal'));\nvar Promise = _interopDefault(require('bluebird'));\n\nvar AXIS_DISPLAY_MODES = {\r\n    ALL: {\r\n        id: 'ALL',\r\n        width: function (axisWidth, numAxes) { return +axisWidth * +numAxes; },\r\n        toString: function () { return 'ALL'; },\r\n    },\r\n    NONE: {\r\n        id: 'NONE',\r\n        width: function () { return 0; },\r\n        toString: function () { return 'NONE'; },\r\n    },\r\n    COLLAPSED: {\r\n        id: 'COLLAPSED',\r\n        width: function (axisWidth, numAxes) {\r\n            if (numAxes === void 0) { numAxes = 0; }\r\n            return Math.min(+numAxes, 1) * +axisWidth;\r\n        },\r\n        toString: function () { return 'COLLAPSED'; },\r\n    },\r\n};\n\nvar AXIS_PLACEMENTS = {\r\n    UNSPECIFIED: { id: 0, name: 'UNSPECIFIED', toString: function () { return 'UNSPECIFIED'; } },\r\n    RIGHT: { id: 1, name: 'RIGHT', toString: function () { return 'RIGHT'; } },\r\n    LEFT: { id: 2, name: 'LEFT', toString: function () { return 'LEFT'; } },\r\n    BOTH: { id: 3, name: 'BOTH', toString: function () { return 'BOTH'; } },\r\n    BOTTOM: { id: 4, name: 'BOTTOM', toString: function () { return 'BOTTOM'; } },\r\n    TOP: { id: 5, name: 'TOP', toString: function () { return 'TOP'; } },\r\n};\n\nvar Brush = /** @class */ (function (_super) {\r\n    tslib.__extends(Brush, _super);\r\n    function Brush() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            dragStartOverlay: undefined,\r\n            dragStartSelection: undefined,\r\n            isDraggingHandleEast: false,\r\n            isDraggingHandleWest: false,\r\n            isDraggingOverlay: false,\r\n            isDraggingSelection: false,\r\n        };\r\n        _this.onMouseDownOverlay = function (e) {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingOverlay: true,\r\n                dragStartOverlay: e.nativeEvent.offsetX,\r\n            });\r\n        };\r\n        _this.onMouseDownHandleEast = function () {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingHandleEast: true,\r\n            });\r\n        };\r\n        _this.onMouseDownHandleWest = function () {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingHandleWest: true,\r\n            });\r\n        };\r\n        _this.onMouseDownSelection = function (e) {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingSelection: true,\r\n                dragStartSelection: e.nativeEvent.offsetX,\r\n            });\r\n        };\r\n        _this.onMouseUpSelection = function () {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingSelection: false,\r\n            });\r\n        };\r\n        _this.onMouseUp = function () {\r\n            var _a = _this.props.zoomable, zoomable = _a === void 0 ? true : _a;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            _this.setState({\r\n                isDraggingHandleEast: false,\r\n                isDraggingHandleWest: false,\r\n                isDraggingOverlay: false,\r\n                isDraggingSelection: false,\r\n                dragStartOverlay: undefined,\r\n                dragStartSelection: undefined,\r\n            });\r\n        };\r\n        _this.onMouseMove = function (e) {\r\n            var _a = _this.props, onUpdateSelection = _a.onUpdateSelection, zoomable = _a.zoomable;\r\n            var _b = _this.state, isDraggingHandleEast = _b.isDraggingHandleEast, isDraggingHandleWest = _b.isDraggingHandleWest, isDraggingOverlay = _b.isDraggingOverlay, isDraggingSelection = _b.isDraggingSelection;\r\n            if (!zoomable) {\r\n                return;\r\n            }\r\n            if (isDraggingHandleEast) {\r\n                var position = e.nativeEvent.offsetX;\r\n                var selection = _this.props.selection;\r\n                if (position < selection[0]) {\r\n                    _this.setState({\r\n                        isDraggingHandleEast: false,\r\n                        isDraggingHandleWest: true,\r\n                    });\r\n                    return;\r\n                }\r\n                var newSelection = [selection[0], position];\r\n                onUpdateSelection(newSelection);\r\n            }\r\n            else if (isDraggingHandleWest) {\r\n                var position = e.nativeEvent.offsetX;\r\n                var selection = _this.props.selection;\r\n                if (position > selection[1]) {\r\n                    _this.setState({\r\n                        isDraggingHandleWest: false,\r\n                        isDraggingHandleEast: true,\r\n                    });\r\n                    return;\r\n                }\r\n                var newSelection = [position, selection[1]];\r\n                _this.onUpdateSelection(newSelection);\r\n            }\r\n            else if (isDraggingSelection) {\r\n                var _c = _this.props, selection = _c.selection, width = _c.width;\r\n                var dragStartSelection = _this.state.dragStartSelection;\r\n                var position = e.nativeEvent.offsetX;\r\n                var dx_1 = position - (dragStartSelection || 0);\r\n                var newSelection = selection.map(function (d) { return d + dx_1; });\r\n                if (newSelection[0] >= 0 && newSelection[1] <= width) {\r\n                    _this.setState({\r\n                        dragStartSelection: position,\r\n                    });\r\n                    onUpdateSelection(newSelection);\r\n                }\r\n            }\r\n            else if (isDraggingOverlay) {\r\n                var dragStartOverlay = _this.state.dragStartOverlay;\r\n                var newSelection = [\r\n                    dragStartOverlay || 0,\r\n                    e.nativeEvent.offsetX,\r\n                ].sort(function (a, b) { return a - b; });\r\n                onUpdateSelection(newSelection);\r\n            }\r\n        };\r\n        _this.onUpdateSelection = function (selection) {\r\n            var onUpdateSelection = _this.props.onUpdateSelection;\r\n            onUpdateSelection(selection);\r\n        };\r\n        return _this;\r\n    }\r\n    Brush.prototype.componentDidMount = function () {\r\n        window.addEventListener('mouseup', this.onMouseUp);\r\n    };\r\n    Brush.prototype.componentWillUnmount = function () {\r\n        window.removeEventListener('mouseup', this.onMouseUp);\r\n    };\r\n    Brush.prototype.render = function () {\r\n        var _a = this.props, width = _a.width, height = _a.height, selection = _a.selection, _b = _a.handleColor, handleColor = _b === void 0 ? '#333' : _b, _c = _a.selectionColor, selectionColor = _c === void 0 ? 'none' : _c, _d = _a.outsideColor, outsideColor = _d === void 0 ? '#777' : _d, _e = _a.zoomable, zoomable = _e === void 0 ? true : _e, _f = _a.handleWidth, handleWidth = _f === void 0 ? 2 : _f;\r\n        var selectionWidth = selection[1] - selection[0];\r\n        var disabledCursor = zoomable ? null : 'inherit';\r\n        var handleTargetWidth = 10;\r\n        return (React__default.createElement(\"g\", { fill: \"none\", stroke: \"#777\", onMouseMove: this.onMouseMove },\r\n            React__default.createElement(\"rect\", { className: \"before-selection\", fill: outsideColor, fillOpacity: 0.3, stroke: \"#fff\", shapeRendering: \"crispEdges\", width: Math.max(0, selection[0]), height: height, x: 0, y: 0 }),\r\n            React__default.createElement(\"rect\", { className: \"after-selection\", fill: outsideColor, fillOpacity: 0.3, stroke: \"#fff\", shapeRendering: \"crispEdges\", width: Math.max(0, width - selection[1]), height: height, x: selection[1], y: 0 }),\r\n            React__default.createElement(\"rect\", { className: \"overlay\", pointerEvents: \"all\", cursor: disabledCursor || 'crosshair', x: 0, y: 0, fill: \"none\", width: width, height: height, onMouseDown: this.onMouseDownOverlay }),\r\n            React__default.createElement(\"rect\", { className: \"selection\", cursor: disabledCursor || 'move', fill: selectionColor, fillOpacity: 0.3, pointerEvents: \"all\", shapeRendering: \"crispEdges\", width: selectionWidth, height: height, x: selection[0], y: 0, onMouseDown: this.onMouseDownSelection }),\r\n            React__default.createElement(\"path\", { className: \"handle handle--west\", stroke: handleColor, strokeWidth: handleWidth, d: \"M \" + selection[0] + \" 0 V \" + height }),\r\n            React__default.createElement(\"rect\", { className: \"handle-target handle-target--west\", cursor: disabledCursor || 'ew-resize', x: selection[0] - handleTargetWidth / 2, y: 0, width: handleTargetWidth, height: height, fill: \"none\", pointerEvents: \"all\", stroke: \"none\", onMouseDown: this.onMouseDownHandleWest }),\r\n            React__default.createElement(\"path\", { className: \"handle handle--east\", stroke: handleColor, strokeWidth: handleWidth, d: \"M \" + selection[1] + \" 0 V \" + height }),\r\n            React__default.createElement(\"rect\", { className: \"handle-target handle-target--east\", cursor: disabledCursor || 'ew-resize', x: selection[1] - handleTargetWidth / 2, y: 0, width: handleTargetWidth, height: height, fill: \"none\", pointerEvents: \"all\", stroke: \"none\", onMouseDown: this.onMouseDownHandleEast })));\r\n    };\r\n    return Brush;\r\n}(React__default.Component));\n\nvar DataContext = React__default.createContext({\r\n    series: [],\r\n    collections: [],\r\n    xDomain: [Date.now() - 1000 * 60 * 60 * 24 * 365, 0],\r\n    // eslint-disable-next-line no-console\r\n    registerSeries: function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        return console.log.apply(console, tslib.__spreadArrays(['Fake-registering series:'], args));\r\n    },\r\n});\n\nfunction withDisplayName(displayName, Component) {\r\n    return Object.assign(Component, { displayName: displayName });\r\n}\n\nvar WATCHED_PROP_NAMES = [\r\n    'color',\r\n    'drawLines',\r\n    'drawPoints',\r\n    'pointWidth',\r\n    'strokeWidth',\r\n    'hidden',\r\n    'loader',\r\n    'step',\r\n    'zoomable',\r\n    'name',\r\n    'timeAccessor',\r\n    'xAccessor',\r\n    'x0Accessor',\r\n    'x1Accessor',\r\n    'yAccessor',\r\n    'y0Accessor',\r\n    'y1Accessor',\r\n    'yDomain',\r\n    'ySubDomain',\r\n    'yAxisPlacement',\r\n    'yAxisDisplayMode',\r\n    'pointWidthAccessor',\r\n    'opacity',\r\n    'opacityAccessor',\r\n];\r\nvar Series = function (_a) {\r\n    var id = _a.id, registerSeries = _a.registerSeries, updateSeries = _a.updateSeries, children = _a.children, \r\n    // Below are all of the series props.\r\n    props = tslib.__rest(_a, [\"id\", \"registerSeries\", \"updateSeries\", \"children\"]);\r\n    // This only happens once, when the component is first mounted.\r\n    React__default.useEffect(function () {\r\n        return registerSeries(tslib.__assign({ id: id }, props));\r\n    }, []);\r\n    // But whenever the component is updated, we want to update the series in the\r\n    // DataProvider.\r\n    React__default.useEffect(function () {\r\n        return updateSeries(tslib.__assign({ id: id }, props));\r\n        // @ts-ignore - It's okay for props[name] to be implicit any.\r\n    }, WATCHED_PROP_NAMES.map(function (name) { return props[name]; }).concat(props.collectionId));\r\n    return null;\r\n};\r\nvar Series$1 = withDisplayName('Series', function (props) { return (React__default.createElement(DataContext.Consumer, null, function (_a) {\r\n    var registerSeries = _a.registerSeries, updateSeries = _a.updateSeries;\r\n    return (React__default.createElement(Series, tslib.__assign({}, props, { registerSeries: registerSeries, updateSeries: updateSeries })));\r\n})); });\n\n// @ts-ignore - I don't know how to make TypeScript happy about ...props\r\nvar Collection = function (_a) {\r\n    var id = _a.id, registerCollection = _a.registerCollection, updateCollection = _a.updateCollection, children = _a.children, props = tslib.__rest(_a, [\"id\", \"registerCollection\", \"updateCollection\", \"children\"]);\r\n    React__default.useEffect(function () {\r\n        return registerCollection(tslib.__assign({ id: id }, props));\r\n    }, []);\r\n    React__default.useEffect(function () {\r\n        return updateCollection(tslib.__assign({ id: id }, props));\r\n    }, \r\n    // @ts-ignore - It's okay for props[name] to be implicit any.\r\n    WATCHED_PROP_NAMES.map(function (name) { return props[name]; }));\r\n    if (React__default.Children.count(children) === 0) {\r\n        return null;\r\n    }\r\n    return React__default.Children.map(children, function (child) {\r\n        if (!child || !React__default.isValidElement(child)) {\r\n            return null;\r\n        }\r\n        return React__default.cloneElement(child, tslib.__assign(tslib.__assign({}, child.props), { collectionId: id }));\r\n    });\r\n};\r\nvar Collection$1 = withDisplayName('Collection', function (props) { return (React__default.createElement(DataContext.Consumer, null, function (_a) {\r\n    var registerCollection = _a.registerCollection, updateCollection = _a.updateCollection;\r\n    return (React__default.createElement(Collection, tslib.__assign({ registerCollection: registerCollection, updateCollection: updateCollection }, props), props.children));\r\n})); });\n\nvar ScalerContext = React__default.createContext({\r\n    series: [],\r\n    collections: [],\r\n    domainsByItemId: {},\r\n    subDomainsByItemId: {},\r\n    updateDomains: function () { return null; },\r\n});\n\nvar createYScale = function (domain, height) {\r\n    return d3.scaleLinear()\r\n        .domain(domain)\r\n        .range([height, 0]);\r\n};\r\nvar createXScale = function (domain, width) {\r\n    return d3.scaleLinear()\r\n        .domain(domain)\r\n        .range([0, width]);\r\n};\n\n// HTML has an issue with drawing points somewhere in the 30-35M range.\r\n// There's no point in drawing pixels more than 30k pixels outside of the range\r\n// so this hack will work for a while.\r\n// Without this, when zoomed far enough in the line will disappear.\r\nvar boundedSeries = function (value) {\r\n    return Math.min(Math.max(value, -30000), 30000);\r\n};\n\nvar Points = function (_a) {\r\n    var data = _a.data, _b = _a.drawPoints, drawPoints = _b === void 0 ? false : _b, xAccessor = _a.xAccessor, x0Accessor = _a.x0Accessor, x1Accessor = _a.x1Accessor, yAccessor = _a.yAccessor, y0Accessor = _a.y0Accessor, y1Accessor = _a.y1Accessor, xScale = _a.xScale, yScale = _a.yScale, color = _a.color, _c = _a.opacity, opacity = _c === void 0 ? 1 : _c, opacityAccessor = _a.opacityAccessor, _d = _a.pointFilter, pointFilter = _d === void 0 ? function () { return true; } : _d, pointWidth = _a.pointWidth, pointWidthAccessor = _a.pointWidthAccessor, strokeWidth = _a.strokeWidth;\r\n    if (drawPoints === false) {\r\n        return null;\r\n    }\r\n    var points = data.filter(pointFilter).map(function (d, i, arr) {\r\n        var _a = [xAccessor, x0Accessor, x1Accessor].map(function (func) {\r\n            if (!func) {\r\n                return Number.NaN;\r\n            }\r\n            return +boundedSeries(xScale(func(d, i, arr)));\r\n        }), x = _a[0], x0 = _a[1], x1 = _a[2];\r\n        var _b = [yAccessor, y0Accessor, y1Accessor].map(function (func) {\r\n            if (!func) {\r\n                return Number.NaN;\r\n            }\r\n            return +boundedSeries(yScale(func(d, i, arr)));\r\n        }), y = _b[0], y0 = _b[1], y1 = _b[2];\r\n        var width = 0;\r\n        if (pointWidthAccessor) {\r\n            width = pointWidthAccessor(d, i, arr);\r\n        }\r\n        else if (pointWidth !== undefined && pointWidth !== null) {\r\n            width = pointWidth;\r\n        }\r\n        else if (strokeWidth !== undefined && strokeWidth !== null) {\r\n            width = strokeWidth;\r\n        }\r\n        else {\r\n            width = 6;\r\n        }\r\n        var uiElements = [];\r\n        if (!Number.isNaN(x0) && !Number.isNaN(x1)) {\r\n            uiElements.push(React__default.createElement(\"line\", { key: \"horizontal-\" + x0 + \",\" + y + \"-\" + x1 + \",\" + y, x1: x0, y1: y, x2: x1, y2: y, stroke: color, strokeWidth: 1 }));\r\n        }\r\n        if (!Number.isNaN(y0) && !Number.isNaN(y1)) {\r\n            uiElements.push(React__default.createElement(\"line\", { key: \"vertical-\" + x + \",\" + y0 + \"-\" + x + \",\" + y1, x1: x, y1: y0, x2: x, y2: y1, stroke: color, strokeWidth: 1 }));\r\n        }\r\n        if (!Number.isNaN(x) && !Number.isNaN(y)) {\r\n            uiElements.push(React__default.createElement(\"circle\", { key: x + \"-\" + y, className: \"point\", r: width / 2, opacity: opacityAccessor ? opacityAccessor(d, i, arr) : opacity, cx: x, cy: y, fill: color }));\r\n        }\r\n        if (typeof drawPoints === 'function') {\r\n            var metadata = {\r\n                x: x,\r\n                y: y,\r\n                x0: x0,\r\n                x1: x1,\r\n                y0: y0,\r\n                y1: y1,\r\n                color: color,\r\n                opacity: opacity,\r\n                opacityAccessor: opacityAccessor,\r\n                pointWidth: pointWidth,\r\n                pointWidthAccessor: pointWidthAccessor,\r\n                strokeWidth: strokeWidth,\r\n            };\r\n            return drawPoints(d, i, arr, metadata, uiElements);\r\n        }\r\n        return uiElements;\r\n    });\r\n    return React__default.createElement(\"g\", null, points);\r\n};\n\nvar Line = function (_a) {\r\n    var id = _a.id, data = _a.data, xAxisAccessor = _a.xAxisAccessor, xScale = _a.xScale, yAccessor = _a.yAccessor, y0Accessor = _a.y0Accessor, y1Accessor = _a.y1Accessor, yScale = _a.yScale, _b = _a.color, color = _b === void 0 ? '#000' : _b, _c = _a.step, step = _c === void 0 ? false : _c, _d = _a.hidden, hidden = _d === void 0 ? false : _d, _e = _a.drawPoints, drawPoints = _e === void 0 ? false : _e, _f = _a.strokeWidth, strokeWidth = _f === void 0 ? 1 : _f, _g = _a.opacity, opacity = _g === void 0 ? 1 : _g, opacityAccessor = _a.opacityAccessor, _h = _a.pointWidth, pointWidth = _h === void 0 ? 6 : _h, pointWidthAccessor = _a.pointWidthAccessor, clipPath = _a.clipPath;\r\n    var area;\r\n    var curve = step ? d3.curveStepAfter : d3.curveLinear;\r\n    var line = d3.line()\r\n        .curve(curve)\r\n        .x(function (d) {\r\n        return boundedSeries(xScale(xAxisAccessor(\r\n        // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n        d)));\r\n    })\r\n        .y(function (d) {\r\n        return boundedSeries(yScale(yAccessor(\r\n        // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n        d)));\r\n    });\r\n    if (drawPoints !== true && y0Accessor && y1Accessor) {\r\n        area = d3.area()\r\n            .curve(curve)\r\n            .x(function (d) {\r\n            return boundedSeries(xScale(xAxisAccessor(\r\n            // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n            d)));\r\n        })\r\n            .y0(function (d) {\r\n            return boundedSeries(yScale(y0Accessor(\r\n            // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n            d)));\r\n        })\r\n            .y1(function (d) {\r\n            return boundedSeries(yScale(y1Accessor(\r\n            // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n            d)));\r\n        });\r\n    }\r\n    var circles = null;\r\n    if (drawPoints) {\r\n        var xSubDomain_1 = xScale.domain();\r\n        circles = (React__default.createElement(Points, { data: data.filter(function (d) {\r\n                var x = xAxisAccessor(d);\r\n                return x >= xSubDomain_1[0] && x <= xSubDomain_1[1];\r\n            }), opacity: opacity, opacityAccessor: opacityAccessor, drawPoints: drawPoints, xAccessor: xAxisAccessor, yAccessor: yAccessor, xScale: xScale, yScale: yScale, color: color, pointWidth: pointWidth, pointWidthAccessor: pointWidthAccessor }));\r\n    }\r\n    return (React__default.createElement(\"g\", { clipPath: \"url(#\" + clipPath + \")\" },\r\n        area && (React__default.createElement(\"path\", { className: \"line-area\", d: area(\r\n            // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n            data), style: {\r\n                stroke: color,\r\n                strokeOpacity: 0,\r\n                strokeWidth: strokeWidth + \"px\",\r\n                fill: color,\r\n                fillOpacity: 0.25,\r\n                opacity: 1,\r\n                display: hidden ? 'none' : 'inherit',\r\n            } })),\r\n        React__default.createElement(\"path\", { \"data-testid\": \"Line-\" + id, className: \"line\", d: line(\r\n            // @ts-ignore - I'm pretty sure that d3 has the wrong type annotations.\r\n            data), style: {\r\n                stroke: color,\r\n                strokeWidth: strokeWidth + \"px\",\r\n                strokeOpacity: opacity,\r\n                fill: 'none',\r\n                display: hidden ? 'none' : 'inherit',\r\n            } }),\r\n        circles));\r\n};\n\nvar idPropType = PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string]);\r\n/**\r\n * If a {@code boolean} is passed, then this will enable (or disable) the\r\n * default rendering.\r\n * If a {@code function} is passed, then this will be used as the rendering\r\n * function for rendering the points.\r\n *\r\n * @see {@code drawPoints} on {@link DataProvider} for more information.\r\n */\r\nvar drawPoints = PropTypes__default.oneOfType([PropTypes__default.bool, PropTypes__default.func]);\r\nvar singleSeriePropType = PropTypes__default.shape({\r\n    id: idPropType.isRequired,\r\n    collectionId: idPropType,\r\n    color: PropTypes__default.string,\r\n    hidden: PropTypes__default.bool,\r\n    opacity: PropTypes__default.number,\r\n    strokeWidth: PropTypes__default.number,\r\n    drawPoints: drawPoints,\r\n    /**\r\n     * If unset, this defaults to {@code true} for line charts and {@code false}\r\n     * for scatterplots.\r\n     * This will likely be consolidated into a standardized default in the future.\r\n     */\r\n    drawLines: PropTypes__default.bool,\r\n    loader: PropTypes__default.func,\r\n    step: PropTypes__default.bool,\r\n    xAccessor: PropTypes__default.func,\r\n    x0Accessor: PropTypes__default.func,\r\n    x1Accessor: PropTypes__default.func,\r\n    yAccessor: PropTypes__default.func,\r\n    y0Accessor: PropTypes__default.func,\r\n    y1Accessor: PropTypes__default.func,\r\n    yDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    ySubDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    yAxisDisplayMode: PropTypes__default.shape({\r\n        // See AxisDisplayMode\r\n        id: PropTypes__default.string.isRequired,\r\n        width: PropTypes__default.func.isRequired,\r\n    }),\r\n});\r\nvar seriesPropType = PropTypes__default.arrayOf(singleSeriePropType);\r\nvar domainPropType = PropTypes__default.arrayOf(PropTypes__default.number.isRequired);\r\nvar annotationShape = {\r\n    data: PropTypes__default.arrayOf(PropTypes__default.number),\r\n    xScale: PropTypes__default.func,\r\n    height: PropTypes__default.number,\r\n    id: PropTypes__default.number,\r\n    color: PropTypes__default.string,\r\n    fillOpacity: PropTypes__default.number,\r\n};\r\nvar annotationPropType = PropTypes__default.shape(annotationShape);\r\nvar pointPropType = PropTypes__default.shape({\r\n    id: idPropType,\r\n    name: PropTypes__default.string.isRequired,\r\n    color: PropTypes__default.string.isRequired,\r\n    timestamp: PropTypes__default.number.isRequired,\r\n    value: PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string]),\r\n    x: PropTypes__default.number.isRequired,\r\n    y: PropTypes__default.number.isRequired,\r\n});\r\n// TODO: Do we have any required fields on this?\r\nvar dataPointPropType = PropTypes__default.shape({});\r\nvar rulerPropType = PropTypes__default.shape({\r\n    visible: PropTypes__default.bool,\r\n    timeLabel: PropTypes__default.func.isRequired,\r\n    yLabel: PropTypes__default.func.isRequired,\r\n    // a timestamp representing the initial position of the ruler\r\n    timestamp: PropTypes__default.number,\r\n    // a function that determines the position of the timestamp\r\n    // (defaultPosition:number, {height:number, toolTipHeight:number, timeLabelMargin:number}) => number\r\n    getTimeLabelPosition: PropTypes__default.func,\r\n});\r\nvar contextChart = PropTypes__default.shape({\r\n    visible: PropTypes__default.bool,\r\n    // Height of the chart, *excluding* any axes that are rendered.\r\n    height: PropTypes__default.number,\r\n});\r\nvar axisDisplayModeType = PropTypes__default.shape({\r\n    // (axisWidth, numAxes) => (width of all of the axes)\r\n    width: PropTypes__default.func.isRequired,\r\n});\r\n// (domain, [width|height]) => [number, number]\r\nvar scalerFactoryFunc = PropTypes__default.func;\r\n// datapoint => value\r\nvar accessorFuncPropType = PropTypes__default.func;\r\n// value => scaled value\r\nvar scaleFuncPropType = PropTypes__default.func;\r\nvar axisPlacement = PropTypes__default.oneOf(Object.values(AXIS_PLACEMENTS));\r\nvar coordinatePropType = PropTypes__default.shape({\r\n    xval: PropTypes__default.number,\r\n    yval: PropTypes__default.number,\r\n    points: PropTypes__default.arrayOf(pointPropType),\r\n});\r\nvar areaPropType = PropTypes__default.shape({\r\n    id: idPropType,\r\n    seriesId: idPropType,\r\n    color: PropTypes__default.string,\r\n    xMin: PropTypes__default.number.isRequired,\r\n    xMax: PropTypes__default.number.isRequired,\r\n    yMin: PropTypes__default.number.isRequired,\r\n    yMax: PropTypes__default.number.isRequired,\r\n});\r\nvar collection = PropTypes__default.shape({\r\n    id: idPropType.isRequired,\r\n    // This the color used when referencing the collection (eg, the common axis)\r\n    color: PropTypes__default.string,\r\n    /**\r\n     * If unset, this defaults to {@code true} for line charts and {@code false}\r\n     * for scatterplots.\r\n     * This will likely be consolidated into a standardized default in the future.\r\n     */\r\n    drawLines: PropTypes__default.bool,\r\n    drawPoints: drawPoints,\r\n    hidden: PropTypes__default.bool,\r\n    opacity: PropTypes__default.number,\r\n    strokeWidth: PropTypes__default.number,\r\n    xAccessor: PropTypes__default.func,\r\n    yAxisDisplayMode: PropTypes__default.instanceOf(AXIS_DISPLAY_MODES),\r\n    yAccessor: PropTypes__default.func,\r\n    y0Accessor: PropTypes__default.func,\r\n    y1Accessor: PropTypes__default.func,\r\n    yDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    ySubDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n});\r\nvar collections = PropTypes__default.arrayOf(collection);\r\nvar singleSeries = singleSeriePropType;\r\nvar multipleSeries = PropTypes__default.arrayOf(singleSeries);\r\n/**\r\n * Specification for the grid rendered under the data.\r\n */\r\nvar grid = {\r\n    /** Color of the lines (default: #000) */\r\n    color: PropTypes__default.string,\r\n    /** Thickness of the lines (default: 1) */\r\n    strokeWidth: PropTypes__default.number,\r\n    /** Opacity of the lines (default: 0.4) */\r\n    opacity: PropTypes__default.number,\r\n    /**\r\n     * Defines the behavior of the vertical grid lines (rendered from the X axis)\r\n     */\r\n    x: PropTypes__default.shape({\r\n        /** Render lines every X pixels */\r\n        pixels: PropTypes__default.number,\r\n        /**\r\n         * Render this many lines (approximatey). If this is `0`, then the lines\r\n         * will match the tick marks on the x axis.\r\n         */\r\n        count: PropTypes__default.number,\r\n        /**\r\n         * Color of the lines. If this is not specified, then the top-level color\r\n         * property will be used.\r\n         */\r\n        color: PropTypes__default.string,\r\n        /**\r\n         * Thickness of the lines. If this is not specified, then the top-level\r\n         * strokeWidth property will be used.\r\n         */\r\n        strokeWidth: PropTypes__default.number,\r\n        /**\r\n         * Opaccity of the lines. If this is not specified, then the top-level\r\n         * opacity property will be used.\r\n         */\r\n        opacity: PropTypes__default.number,\r\n    }),\r\n    /**\r\n     * Defines the behavior of the horizontal grid lines (rendered from the Y\r\n     * axis)\r\n     */\r\n    y: PropTypes__default.shape({\r\n        /** Render lines every X pixels */\r\n        pixels: PropTypes__default.number,\r\n        /**\r\n         * The series ID to link these lines to for scaling purposes. This way they\r\n         * will be redrawn the y axis is zoomed, translated, etc.\r\n         */\r\n        seriesId: idPropType,\r\n        /**\r\n         * Render this many lines (approximatey). If this is `0`, then the lines\r\n         * will match the tick marks on the x axis.\r\n         */\r\n        count: PropTypes__default.number,\r\n        /**\r\n         * Color of the lines. If this is `null` (magic value), and `seriesId`\r\n         * points to a series, then that color will be used. However, if `seriesId`\r\n         * is not set, then the top-level color will be used.\r\n         */\r\n        color: PropTypes__default.string,\r\n        /**\r\n         * Thickness of the lines. If this is not specified, then the top-level\r\n         * strokeWidth property will be used.\r\n         */\r\n        strokeWidth: PropTypes__default.number,\r\n        /**\r\n         * Opaccity of the lines. If this is not specified, then the top-level\r\n         * opacity property will be used.\r\n         */\r\n        opacity: PropTypes__default.number,\r\n    }),\r\n};\r\nvar updateDomains = PropTypes__default.func;\r\nvar domainsByItemId = PropTypes__default.objectOf(PropTypes__default.shape({\r\n    time: domainPropType,\r\n    x: domainPropType,\r\n    y: domainPropType,\r\n}));\r\nvar zoomAxes = PropTypes__default.shape({\r\n    time: PropTypes__default.bool,\r\n    x: PropTypes__default.bool,\r\n    y: PropTypes__default.bool,\r\n});\r\nvar axes = PropTypes__default.oneOf(['time', 'x', 'y']);\r\nvar GriffPropTypes = {\r\n    axisPlacement: axisPlacement,\r\n    collection: collection,\r\n    collections: collections,\r\n    contextChart: contextChart,\r\n    drawPoints: drawPoints,\r\n    grid: grid,\r\n    multipleSeries: multipleSeries,\r\n    singleSeries: singleSeries,\r\n    updateDomains: updateDomains,\r\n    domainsByItemId: domainsByItemId,\r\n    subDomainsByItemId: domainsByItemId,\r\n    zoomAxes: zoomAxes,\r\n    axes: axes,\r\n};\n\n// If the timeSubDomain is within this margin, consider it to be attached to\r\n// the leading edge of the timeDomain.\r\nvar FRONT_OF_WINDOW_THRESHOLD = 0.05;\r\n/**\r\n * Provide a placeholder domain so that we can test for validity later, but\r\n * it can be safely operated on like a real domain.\r\n */\r\nvar placeholder = function (min, max) {\r\n    var domain = [min, max];\r\n    domain.placeholder = true;\r\n    return domain;\r\n};\r\nvar haveDomainsChanged = function (before, after) {\r\n    return !isEqual(before.timeDomain, after.timeDomain) ||\r\n        !isEqual(before.timeSubDomain, after.timeSubDomain) ||\r\n        !isEqual(before.xDomain, after.xDomain) ||\r\n        !isEqual(before.xSubDomain, after.xSubDomain) ||\r\n        !isEqual(before.yDomain, after.yDomain) ||\r\n        !isEqual(before.ySubDomain, after.ySubDomain);\r\n};\r\nvar findItemsWithChangedDomains = function (previousItems, currentItems) {\r\n    var previousItemsById = previousItems.reduce(function (acc, s) {\r\n        var _a;\r\n        return (tslib.__assign(tslib.__assign({}, acc), (_a = {}, _a[s.id] = s, _a)));\r\n    }, {});\r\n    return currentItems.reduce(function (acc, s) {\r\n        if (!previousItemsById[s.id] ||\r\n            haveDomainsChanged(previousItemsById[s.id] || {}, s)) {\r\n            return tslib.__spreadArrays(acc, [s]);\r\n        }\r\n        return acc;\r\n    }, []);\r\n};\r\nvar isEqual = function (a, b) {\r\n    if (a === b) {\r\n        return true;\r\n    }\r\n    if (!a || !b) {\r\n        return false;\r\n    }\r\n    return a[0] === b[0] && a[1] === b[1];\r\n};\r\nvar firstResolvedDomain = function (domain) {\r\n    // tslint:disable-next-line\r\n    var domains = [];\r\n    for (\r\n    // tslint:disable-next-line\r\n    var _i = 1; \r\n    // tslint:disable-next-line\r\n    _i < arguments.length; \r\n    // tslint:disable-next-line\r\n    _i++) {\r\n        // tslint:disable-next-line\r\n        domains[_i - 1] = arguments[_i];\r\n    }\r\n    if (domain && domain.placeholder !== true) {\r\n        return tslib.__spreadArrays(domain);\r\n    }\r\n    if (domains.length === 0) {\r\n        return undefined;\r\n    }\r\n    return firstResolvedDomain.apply(void 0, tslib.__spreadArrays([domains[0]], domains.splice(1)));\r\n};\r\n/**\r\n * The scaler is the source of truth for all things related to the domains and\r\n * subdomains for all of the items within Griff. Note that an item can be either\r\n * a series or a collection, and domains are flexible. As of this writing, there\r\n * are three axes:\r\n *   time: The timestamp of a datapoint\r\n *   x: The x-value of a datapoint\r\n *   y: The y-value of a datapoint.\r\n *\r\n * These axes all have separate domains and subdomains. The domain is the range\r\n * of that axis, and the subdomain is the currently-visible region of that\r\n * range.\r\n *\r\n * These are manipulated with the {@link #updateDomains} function, which is\r\n * made available through the {@link ScalerContext}.\r\n */\r\nvar Scaler = /** @class */ (function (_super) {\r\n    tslib.__extends(Scaler, _super);\r\n    function Scaler() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            domainsByItemId: {},\r\n            subDomainsByItemId: {},\r\n        };\r\n        /**\r\n         * Update the subdomains for the given items. This is a patch update and will\r\n         * be merged with the current state of the subdomains. An example payload\r\n         * will resemble:\r\n         * <code>\r\n         *   {\r\n         *     \"series-1\": {\r\n         *       \"y\": [0.5, 0.75],\r\n         *     },\r\n         *     \"series-2\": {\r\n         *       \"y\": [1.0, 2.0],\r\n         *     }\r\n         *   }\r\n         * </code>\r\n         *\r\n         * After this is complete, {@code callback} will be called with this patch\r\n         * object.\r\n         */\r\n        _this.updateDomains = function (changedDomainsById, callback) {\r\n            // FIXME: This is not multi-series aware.\r\n            var newTimeSubDomain = null;\r\n            var dataContext = _this.props.dataContext;\r\n            var _a = _this.state, domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId;\r\n            var newSubDomains = tslib.__assign({}, subDomainsByItemId);\r\n            Object.keys(changedDomainsById).forEach(function (itemId) {\r\n                newSubDomains[itemId] = tslib.__assign({}, (subDomainsByItemId[itemId] || {}));\r\n                Object.keys(changedDomainsById[itemId]).forEach(function (uncastAxis) {\r\n                    var axis = uncastAxis;\r\n                    var newSubDomain = changedDomainsById[itemId][axis];\r\n                    if (axis === String(AXES.time)) {\r\n                        if (dataContext.limitTimeSubDomain) {\r\n                            newSubDomain = dataContext.limitTimeSubDomain(newSubDomain);\r\n                        }\r\n                    }\r\n                    var newSpan = newSubDomain[1] - newSubDomain[0];\r\n                    var existingSubDomain = subDomainsByItemId[itemId][axis] || newSubDomain;\r\n                    var existingSpan = existingSubDomain[1] - existingSubDomain[0];\r\n                    var limits = firstResolvedDomain(((domainsByItemId || {})[itemId] || {})[axis], axis === String(AXES.time)\r\n                        ? // FIXME: Phase out this single timeDomain thing.\r\n                            dataContext.timeDomain\r\n                        : undefined) ||\r\n                        // Set a large range because this is a limiting range.\r\n                        placeholder(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\r\n                    if (newSpan === existingSpan) {\r\n                        // This is a translation; check the bounds.\r\n                        if (newSubDomain[0] <= limits[0]) {\r\n                            newSubDomain = [limits[0], limits[0] + newSpan];\r\n                        }\r\n                        if (newSubDomain[1] >= limits[1]) {\r\n                            newSubDomain = [limits[1] - newSpan, limits[1]];\r\n                        }\r\n                    }\r\n                    else {\r\n                        newSubDomain = [\r\n                            Math.max(limits[0], newSubDomain[0]),\r\n                            Math.min(limits[1], newSubDomain[1]),\r\n                        ];\r\n                    }\r\n                    newSubDomains[itemId][axis] = newSubDomain;\r\n                    if (axis === String(AXES.time)) {\r\n                        newTimeSubDomain = newSubDomain;\r\n                    }\r\n                });\r\n            });\r\n            // expose newSubDomains to DataProvider\r\n            if (dataContext.onUpdateDomains) {\r\n                dataContext.onUpdateDomains(newSubDomains);\r\n            }\r\n            _this.setState({ subDomainsByItemId: newSubDomains }, callback ? function () { return callback(changedDomainsById); } : undefined);\r\n            if (newTimeSubDomain) {\r\n                dataContext.timeSubDomainChanged(newTimeSubDomain);\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    Scaler.getDerivedStateFromProps = function (_a, state) {\r\n        var _b = _a.dataContext, timeDomain = _b.timeDomain, timeSubDomain = _b.timeSubDomain, series = _b.series, collections = _b.collections;\r\n        // Make sure that all items in the props are present in the domainsByItemId\r\n        // and subDomainsByItemId state objects.\r\n        var domainsByItemId = state.domainsByItemId, subDomainsByItemId = state.subDomainsByItemId;\r\n        var updated = false;\r\n        var stateUpdates = series.concat(collections).reduce(function (acc, item) {\r\n            var _a, _b;\r\n            var updates = tslib.__assign({}, acc);\r\n            if (!domainsByItemId[item.id]) {\r\n                updated = true;\r\n                updates.domainsByItemId = tslib.__assign(tslib.__assign({}, updates.domainsByItemId), (_a = {}, _a[item.id] = {\r\n                    time: tslib.__spreadArrays(timeDomain),\r\n                    x: firstResolvedDomain(item.xDomain) ||\r\n                        placeholder(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER),\r\n                    y: firstResolvedDomain(item.yDomain) ||\r\n                        placeholder(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER),\r\n                }, _a));\r\n            }\r\n            if (!subDomainsByItemId[item.id]) {\r\n                updated = true;\r\n                updates.subDomainsByItemId = tslib.__assign(tslib.__assign({}, updates.subDomainsByItemId), (_b = {}, _b[item.id] = {\r\n                    time: tslib.__spreadArrays(timeSubDomain),\r\n                    x: firstResolvedDomain(item.xSubDomain) || placeholder(0, 1),\r\n                    y: firstResolvedDomain(item.ySubDomain) || placeholder(0, 1),\r\n                }, _b));\r\n            }\r\n            return updates;\r\n        }, { domainsByItemId: domainsByItemId, subDomainsByItemId: subDomainsByItemId });\r\n        return updated ? stateUpdates : null;\r\n    };\r\n    Scaler.prototype.componentDidUpdate = function (prevProps) {\r\n        var dataContext = this.props.dataContext;\r\n        var _a = this.state, oldDomainsByItemId = _a.domainsByItemId, oldSubDomainsByItemId = _a.subDomainsByItemId;\r\n        var changedSeries = findItemsWithChangedDomains(prevProps.dataContext.series, dataContext.series);\r\n        var changedCollections = findItemsWithChangedDomains(prevProps.dataContext.collections, dataContext.collections);\r\n        if (changedSeries.length > 0 || changedCollections.length > 0) {\r\n            var domainsByItemId_1 = tslib.__assign({}, oldDomainsByItemId);\r\n            var subDomainsByItemId_1 = tslib.__assign({}, oldSubDomainsByItemId);\r\n            tslib.__spreadArrays(changedSeries, changedCollections).forEach(function (item) {\r\n                domainsByItemId_1[item.id] = {\r\n                    time: firstResolvedDomain(dataContext.timeDomain, item.timeDomain, AXES.time(oldDomainsByItemId[item.id])) || placeholder(0, Date.now()),\r\n                    x: firstResolvedDomain(item.xDomain, AXES.x(oldDomainsByItemId[item.id])) ||\r\n                        // Set a large range because this is a domain.\r\n                        placeholder(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER),\r\n                    y: firstResolvedDomain(item.yDomain, AXES.y(oldDomainsByItemId[item.id])) ||\r\n                        // Set a large range because this is a domain.\r\n                        placeholder(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER),\r\n                };\r\n                subDomainsByItemId_1[item.id] = {\r\n                    time: firstResolvedDomain(dataContext.timeSubDomain ||\r\n                        item.timeSubDomain ||\r\n                        AXES.time(oldSubDomainsByItemId[item.id])) ||\r\n                        // Set a large range because this is a subdomain.\r\n                        placeholder(0, Date.now()),\r\n                    x: firstResolvedDomain(item.xSubDomain, AXES.x(oldSubDomainsByItemId[item.id])) ||\r\n                        // Set a small range because this is a subdomain.\r\n                        placeholder(0, 1),\r\n                    y: firstResolvedDomain(item.ySubDomain || AXES.y(oldSubDomainsByItemId[item.id])) ||\r\n                        // Set a small range because this is a subdomain.\r\n                        placeholder(0, 1),\r\n                };\r\n            });\r\n            // eslint-disable-next-line react/no-did-update-set-state\r\n            this.setState({ subDomainsByItemId: subDomainsByItemId_1, domainsByItemId: domainsByItemId_1 });\r\n            return;\r\n        }\r\n        if (!isEqual(prevProps.dataContext.timeDomain, dataContext.timeDomain)) {\r\n            var prevTimeDomain_1 = prevProps.dataContext.timeDomain;\r\n            var nextTimeDomain_1 = dataContext.timeDomain;\r\n            // When timeDomain changes, we need to update everything downstream.\r\n            var domainsByItemId_2 = tslib.__assign({}, oldDomainsByItemId);\r\n            Object.keys(domainsByItemId_2).forEach(function (itemId) {\r\n                domainsByItemId_2[itemId].time = nextTimeDomain_1;\r\n            });\r\n            var subDomainsByItemId_2 = tslib.__assign({}, oldSubDomainsByItemId);\r\n            Object.keys(subDomainsByItemId_2).forEach(function (itemId) {\r\n                var timeSubDomain = oldSubDomainsByItemId[itemId].time;\r\n                subDomainsByItemId_2[itemId] = tslib.__assign({}, oldSubDomainsByItemId[itemId]);\r\n                var dt = timeSubDomain[1] - timeSubDomain[0];\r\n                if (Math.abs((timeSubDomain[1] - prevTimeDomain_1[1]) / dt) <=\r\n                    FRONT_OF_WINDOW_THRESHOLD) {\r\n                    // Looking at the front of the window -- continue to track that.\r\n                    subDomainsByItemId_2[itemId].time = [\r\n                        nextTimeDomain_1[1] - dt,\r\n                        nextTimeDomain_1[1],\r\n                    ];\r\n                }\r\n                else if (timeSubDomain[0] <= prevTimeDomain_1[0]) {\r\n                    // Looking at the back of the window -- continue to track that.\r\n                    subDomainsByItemId_2[itemId].time = [\r\n                        prevTimeDomain_1[0],\r\n                        prevTimeDomain_1[0] + dt,\r\n                    ];\r\n                }\r\n            });\r\n            // eslint-disable-next-line react/no-did-update-set-state\r\n            this.setState({ domainsByItemId: domainsByItemId_2, subDomainsByItemId: subDomainsByItemId_2 });\r\n        }\r\n        if (!isEqual(prevProps.dataContext.timeSubDomain, dataContext.timeSubDomain)) {\r\n            // When timeSubDomain changes, we need to update everything downstream.\r\n            var newSubDomainsByItemId_1 = {};\r\n            Object.keys(oldSubDomainsByItemId).forEach(function (itemId) {\r\n                newSubDomainsByItemId_1[itemId] = tslib.__assign(tslib.__assign({}, oldSubDomainsByItemId[itemId]), { time: dataContext.timeSubDomain });\r\n            });\r\n            // eslint-disable-next-line react/no-did-update-set-state\r\n            this.setState({ subDomainsByItemId: newSubDomainsByItemId_1 });\r\n        }\r\n    };\r\n    Scaler.prototype.render = function () {\r\n        var _a = this.state, domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId;\r\n        var _b = this.props, children = _b.children, _c = _b.dataContext, collections = _c.collections, series = _c.series;\r\n        var finalContext = {\r\n            // Pick what we need out of the dataContext instead of spreading the\r\n            // entire object into the context.\r\n            collections: collections,\r\n            series: series,\r\n            updateDomains: this.updateDomains,\r\n            domainsByItemId: domainsByItemId,\r\n            subDomainsByItemId: subDomainsByItemId,\r\n        };\r\n        return (React__default.createElement(ScalerContext.Provider, { value: finalContext }, children));\r\n    };\r\n    // eslint-disable-next-line react/static-property-placement\r\n    Scaler.propTypes = {\r\n        children: PropTypes__default.node.isRequired,\r\n        dataContext: PropTypes__default.shape({\r\n            timeDomain: PropTypes__default.arrayOf(PropTypes__default.number).isRequired,\r\n            timeSubDomain: PropTypes__default.arrayOf(PropTypes__default.number).isRequired,\r\n            timeSubDomainChanged: PropTypes__default.func.isRequired,\r\n            limitTimeSubDomain: PropTypes__default.func,\r\n            externalXSubDomain: PropTypes__default.arrayOf(PropTypes__default.number),\r\n            series: seriesPropType.isRequired,\r\n            collections: GriffPropTypes.collections.isRequired,\r\n        }).isRequired,\r\n    };\r\n    // eslint-disable-next-line react/static-property-placement\r\n    Scaler.defaultProps = {};\r\n    return Scaler;\r\n}(React__default.Component));\r\nvar Scaler$1 = withDisplayName('Scaler', function (props) { return (React__default.createElement(DataContext.Consumer, null, function (dataContext) { return (React__default.createElement(Scaler, tslib.__assign({}, props, { dataContext: dataContext }))); })); });\n\n/**\r\n * Create a {@code Dimension} for a specific {@code DomainDimension}.\r\n *\r\n * @param key the {@code Domain} that this {@code Dimension} operates on\r\n */\r\nvar dimension = function (key) {\r\n    var functor = function (input) {\r\n        if (!input) {\r\n            return placeholder(0, 0);\r\n        }\r\n        return input[key];\r\n    };\r\n    functor.toString = function () { return key; };\r\n    return functor;\r\n};\r\nvar time = dimension('time');\r\nvar x = dimension('x');\r\nvar y = dimension('y');\r\nvar AXES = {\r\n    /**\r\n     * {@code time} is a reference to the time dimension of the plotted data.\r\n     * Note that not all data necessarily _needs_ to have a time dimension (for\r\n     * example: scatterplots might not have one) but it's required for series\r\n     * which need it, such as a line charts.\r\n     */\r\n    time: time,\r\n    /**\r\n     * {@code x} is the x-dimension of a plotted point. For time series charts,\r\n     * this axis is not used because that data is inherently tied to time, so\r\n     * {@code time = x}. However, for a scatterplot, this is used to determine\r\n     * where the data point will lie along the x axis.\r\n     */\r\n    x: x,\r\n    /**\r\n     * {@code y} is the y-dimension of a plotted point. For time series charts,\r\n     * this will likely be the value of a given point. However, scatterplots will\r\n     * use this to place the point along the y axis (for example, by using the\r\n     * value from another coupled time series).\r\n     */\r\n    y: y,\r\n    HORIZONTAL: [x, time],\r\n    VERTICAL: [y],\r\n    ALL: [time, x, y],\r\n};\n\nvar time$1 = AXES.time;\r\nvar LineCollection = function (_a) {\r\n    var domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId, _b = _a.series, series = _b === void 0 ? new Array() : _b, width = _a.width, height = _a.height, _c = _a.xAxis, xAxis = _c === void 0 ? time$1 : _c, yScalerFactory = _a.yScalerFactory, _d = _a.pointWidth, pointWidth = _d === void 0 ? 6 : _d, _e = _a.scaleX, scaleX = _e === void 0 ? true : _e;\r\n    if (!subDomainsByItemId) {\r\n        return null;\r\n    }\r\n    var clipPath = \"clip-path-\" + width + \"-\" + height + \"-\" + series\r\n        .filter(function (s) { return !s.hidden; })\r\n        .map(function (s) {\r\n        return s.id + \"-\" + (s.collectionId || 0) + \"-\" + (s.yAxisDisplayMode || AXIS_DISPLAY_MODES.ALL).id;\r\n    })\r\n        .join('/');\r\n    var yScaler = yScalerFactory ||\r\n        (function (s, h) {\r\n            return createYScale(AXES.y(subDomainsByItemId[s.collectionId || s.id]), h);\r\n        });\r\n    var lines = series.reduce(function (l, s) {\r\n        if (s.hidden) {\r\n            return l;\r\n        }\r\n        var id = s.id;\r\n        var xScale = createXScale(scaleX ? xAxis(subDomainsByItemId[id]) : xAxis(domainsByItemId[id]), width);\r\n        var yScale = yScaler(s, height);\r\n        return tslib.__spreadArrays(l, [\r\n            React__default.createElement(Line, tslib.__assign({ key: s.id }, s, { xAxisAccessor: xAxis === AXES.time ? s.timeAccessor : s.xAccessor, xScale: xScale, yScale: yScale, clipPath: clipPath, pointWidth: s.pointWidth || pointWidth })),\r\n        ]);\r\n    }, new Array());\r\n    return (React__default.createElement(\"g\", { width: width, height: height },\r\n        React__default.createElement(\"clipPath\", { id: clipPath },\r\n            React__default.createElement(\"rect\", { width: width, height: height, fill: \"none\" })),\r\n        lines));\r\n};\r\nvar LineCollection$1 = withDisplayName('LineCollection', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId, series = _a.series;\r\n    return (React__default.createElement(LineCollection, tslib.__assign({ series: series }, props, { domainsByItemId: domainsByItemId, subDomainsByItemId: subDomainsByItemId })));\r\n})); });\n\nvar propTypes = {\r\n    width: PropTypes__default.number.isRequired,\r\n    height: PropTypes__default.number.isRequired,\r\n    itemIds: PropTypes__default.arrayOf(PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string]).isRequired).isRequired,\r\n    zoomAxes: PropTypes__default.shape({\r\n        x: PropTypes__default.bool,\r\n        y: PropTypes__default.bool,\r\n        time: PropTypes__default.bool,\r\n    }).isRequired,\r\n    onMouseDown: PropTypes__default.func,\r\n    onMouseUp: PropTypes__default.func,\r\n    onMouseMove: PropTypes__default.func,\r\n    onMouseOut: PropTypes__default.func,\r\n    onClick: PropTypes__default.func,\r\n    onDoubleClick: PropTypes__default.func,\r\n    /**\r\n     * This is a callback which will be called whenever there is a touchmove event\r\n     * with only one touch. This is used to keep the rule in the same x-position\r\n     * (in terms of pixels) on the screen while pans happen by dragging.\r\n     *\r\n     * {@code (offsetX, offsetY) => void}\r\n     */\r\n    // FIXME: Remove this bit and move the business logic to the apps.\r\n    onTouchMove: PropTypes__default.func,\r\n    onTouchMoveEnd: PropTypes__default.func,\r\n    // These are provided by Griff.\r\n    updateDomains: GriffPropTypes.updateDomains.isRequired,\r\n    subDomainsByItemId: GriffPropTypes.subDomainsByItemId.isRequired,\r\n};\r\nvar defaultProps = {\r\n    onMouseDown: null,\r\n    onMouseUp: null,\r\n    onMouseMove: null,\r\n    onMouseOut: null,\r\n    onClick: null,\r\n    onDoubleClick: null,\r\n    onTouchMove: null,\r\n    onTouchMoveEnd: null,\r\n};\r\nvar ZoomRect = /** @class */ (function (_super) {\r\n    tslib.__extends(ZoomRect, _super);\r\n    function ZoomRect() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.onTouchStart = function () {\r\n            var _a, _b;\r\n            var touches = d3.event.touches;\r\n            if (touches.length === 1) {\r\n                var touch = touches[0];\r\n                var x = touch.pageX, y = touch.pageY;\r\n                _this.lastTouch = (_a = {},\r\n                    _a[AXES.time] = x,\r\n                    _a[AXES.x] = x,\r\n                    _a[AXES.y] = y,\r\n                    _a);\r\n            }\r\n            else if (touches.length === 2) {\r\n                var touchOne = touches[0], touchTwo = touches[1];\r\n                var _c = _this.getOffset(touchOne), touchOneX = _c.x, touchOneY = _c.y;\r\n                var _d = _this.getOffset(touchTwo), touchTwoX = _d.x, touchTwoY = _d.y;\r\n                _this.lastDeltas = (_b = {},\r\n                    _b[AXES.time] = Math.abs(touchOneX - touchTwoX),\r\n                    _b[AXES.x] = Math.abs(touchOneX - touchTwoX),\r\n                    _b[AXES.y] = Math.abs(touchOneY - touchTwoY),\r\n                    _b);\r\n            }\r\n        };\r\n        // TODO: A lot of this is duplicated with `zoomed` -- maybe they can be\r\n        // consolidated?\r\n        _this.onTouchMove = function () {\r\n            var _a;\r\n            var _b = _this.props, width = _b.width, height = _b.height;\r\n            var totalDistances = (_a = {},\r\n                _a[AXES.time] = width,\r\n                _a[AXES.x] = width,\r\n                // height needs to be negated because pixels are measured with 0 at the\r\n                // top, but the axis is rendered with the 0 value at the bottom.\r\n                _a[AXES.y] = -height,\r\n                _a);\r\n            var touches = d3.event.touches;\r\n            var updates = null;\r\n            if (touches.length === 1) {\r\n                // If there was only one touch, then it was a drag event.\r\n                updates = _this.performTouchDrag(touches, totalDistances);\r\n            }\r\n            else if (touches.length === 2) {\r\n                // If there were two, then it is a zoom event.\r\n                updates = _this.performTouchZoom(touches, totalDistances);\r\n            }\r\n            var _c = _this.props, onTouchMove = _c.onTouchMove, updateDomains = _c.updateDomains;\r\n            if (updates) {\r\n                updateDomains(updates);\r\n            }\r\n            if (onTouchMove) {\r\n                onTouchMove();\r\n            }\r\n        };\r\n        _this.onTouchEnd = function () {\r\n            var _a;\r\n            var touches = d3.event.touches;\r\n            if (touches.length === 0) {\r\n                _this.lastTouch = null;\r\n            }\r\n            else if (touches.length === 1) {\r\n                _this.lastDeltas = null;\r\n                var touch = touches[0];\r\n                var x = touch.pageX, y = touch.pageY;\r\n                _this.lastTouch = (_a = {},\r\n                    _a[AXES.time] = x,\r\n                    _a[AXES.x] = x,\r\n                    _a[AXES.y] = y,\r\n                    _a);\r\n            }\r\n            var onTouchMoveEnd = _this.props.onTouchMoveEnd;\r\n            if (onTouchMoveEnd) {\r\n                onTouchMoveEnd();\r\n            }\r\n        };\r\n        _this.getOffset = function (_a) {\r\n            var pageX = _a.pageX, pageY = _a.pageY;\r\n            var _b = _this.zoomNode.getBoundingClientRect(), boundingX = _b.x, boundingY = _b.y;\r\n            return {\r\n                x: pageX - boundingX,\r\n                y: pageY - boundingY,\r\n            };\r\n        };\r\n        _this.performTouchDrag = function (touches, totalDistances) {\r\n            var _a;\r\n            var _b = _this.props, itemIds = _b.itemIds, subDomainsByItemId = _b.subDomainsByItemId, zoomAxes = _b.zoomAxes;\r\n            var touch = touches[0];\r\n            var newTouchPosition = (_a = {},\r\n                _a[AXES.time] = touch.pageX,\r\n                _a[AXES.x] = touch.pageX,\r\n                _a[AXES.y] = touch.pageY,\r\n                _a);\r\n            var updates = {};\r\n            itemIds.forEach(function (itemId) {\r\n                updates[itemId] = {};\r\n                AXES.ALL.filter(function (axis) { return zoomAxes[axis]; }).forEach(function (axis) {\r\n                    var subDomain = (subDomainsByItemId[itemId] || {})[axis];\r\n                    var subDomainRange = subDomain[1] - subDomain[0];\r\n                    var newSubDomain = null;\r\n                    var percentMovement = subDomainRange *\r\n                        ((_this.lastTouch[axis] - newTouchPosition[axis]) /\r\n                            totalDistances[axis]);\r\n                    newSubDomain = subDomain.map(function (bound) { return bound + percentMovement; });\r\n                    if (newSubDomain) {\r\n                        updates[itemId][axis] = newSubDomain;\r\n                    }\r\n                });\r\n            });\r\n            _this.lastTouch = tslib.__assign({}, newTouchPosition);\r\n            return updates;\r\n        };\r\n        _this.performTouchZoom = function (touches, totalDistances) {\r\n            var _a, _b, _c, _d;\r\n            var _e = _this.props, itemIds = _e.itemIds, subDomainsByItemId = _e.subDomainsByItemId, zoomAxes = _e.zoomAxes, width = _e.width, height = _e.height;\r\n            var touchOne = touches[0], touchTwo = touches[1];\r\n            var _f = _this.getOffset(touchOne), touchOneX = _f.x, touchOneY = _f.y;\r\n            var _g = _this.getOffset(touchTwo), touchTwoX = _g.x, touchTwoY = _g.y;\r\n            var centers = (_a = {},\r\n                _a[AXES.time] = (touchOneX + touchTwoX) / 2,\r\n                _a[AXES.x] = (touchOneX + touchTwoX) / 2,\r\n                _a[AXES.y] = (touchOneY + touchTwoY) / 2,\r\n                _a);\r\n            var deltas = (_b = {},\r\n                _b[AXES.time] = Math.abs(touchOneX - touchTwoX),\r\n                _b[AXES.x] = Math.abs(touchOneX - touchTwoX),\r\n                _b[AXES.y] = Math.abs(touchOneY - touchTwoY),\r\n                _b);\r\n            // These are used to multiply the zoomFactor in each direction. These need\r\n            // to be treated separately because height is measured inverted from width.\r\n            // That is, a point lower on the screen (touching a lower axis value) has a\r\n            // higher Y pixel value than a point above it (one which is touching a\r\n            // higher axis value). Conversely, points along the time and x axes have\r\n            // x values which match the direction of the pixel values.\r\n            // The inversion (or lack thereof) needs to happen because when the\r\n            // distance between the fingers decreases, we want the subdomain to increase\r\n            // so the value needs to be inverted. (Phew!)\r\n            var multipliers = (_c = {},\r\n                _c[AXES.time] = -1,\r\n                _c[AXES.x] = -1,\r\n                _c[AXES.y] = 1,\r\n                _c);\r\n            // This is almost the same as the `totalDistances` object, except the height\r\n            // is un-inverted for y axis.\r\n            var measurements = (_d = {},\r\n                _d[AXES.time] = width,\r\n                _d[AXES.x] = width,\r\n                _d[AXES.y] = height,\r\n                _d);\r\n            var updates = {};\r\n            itemIds.forEach(function (itemId) {\r\n                updates[itemId] = {};\r\n                AXES.ALL.filter(function (axis) { return zoomAxes[axis] && _this.lastDeltas[axis]; }).forEach(function (axis) {\r\n                    var subDomain = (subDomainsByItemId[itemId] || {})[axis];\r\n                    var subDomainRange = subDomain[1] - subDomain[0];\r\n                    var percentFromEnd = centers[axis] / measurements[axis];\r\n                    var zoomFactor = multipliers[axis] *\r\n                        ((deltas[axis] - _this.lastDeltas[axis]) / totalDistances[axis]);\r\n                    // Figure out the value on the scale where the mouse is so that the\r\n                    // new subdomain does not shift.\r\n                    var valueAtCenter = subDomain[0] + subDomainRange * percentFromEnd;\r\n                    // How big the next subdomain is going to be\r\n                    var newSpan = subDomainRange * (1 + zoomFactor);\r\n                    // Finally, place this new span into the subdomain, centered about the\r\n                    // mouse, and correctly (proportionately) split above & below so that\r\n                    // theaxis is stable.\r\n                    var start = valueAtCenter - newSpan * percentFromEnd;\r\n                    var end = valueAtCenter + newSpan * (1 - percentFromEnd);\r\n                    updates[itemId][axis] = [Math.min(start, end), Math.max(end, start)];\r\n                });\r\n            });\r\n            _this.lastDeltas = tslib.__assign({}, deltas);\r\n            return updates;\r\n        };\r\n        _this.syncZoomingState = function () {\r\n            var zoomAxes = _this.props.zoomAxes;\r\n            if (Object.keys(zoomAxes).find(function (axis) { return zoomAxes[axis]; })) {\r\n                _this.rectSelection.on('touchend', _this.onTouchEnd, true);\r\n                _this.rectSelection.on('touchmove', _this.onTouchMove, true);\r\n                _this.rectSelection.on('touchstart', _this.onTouchStart, true);\r\n                _this.rectSelection.call(_this.zoom.on('zoom', _this.zoomed));\r\n                _this.rectSelection.on('dblclick.zoom', null);\r\n            }\r\n            else {\r\n                _this.rectSelection.on('.zoom', null);\r\n            }\r\n        };\r\n        /**\r\n         * {@link #zoomed()} is called when D3 is handling the zoom -- such as with\r\n         * a pointing device. However, {@link #onTouchMove()} is used to handle events\r\n         * with touch sources (such as fingers on a touchscreen).\r\n         */\r\n        _this.zoomed = function () {\r\n            var _a, _b, _c;\r\n            var _d = _this.props, zoomAxes = _d.zoomAxes, itemIds = _d.itemIds, width = _d.width, height = _d.height;\r\n            var sourceEvent = d3.event.sourceEvent;\r\n            var totalDistances = (_a = {},\r\n                _a[AXES.time] = width,\r\n                _a[AXES.x] = width,\r\n                _a[AXES.y] = height,\r\n                _a);\r\n            var movements = (_b = {},\r\n                _b[AXES.time] = -sourceEvent.movementX,\r\n                _b[AXES.x] = -sourceEvent.movementX,\r\n                _b[AXES.y] = sourceEvent.movementY,\r\n                _b);\r\n            var percents = (_c = {},\r\n                _c[AXES.time] = sourceEvent.offsetX / width,\r\n                _c[AXES.x] = sourceEvent.offsetX / width,\r\n                // Invert the event coordinates for sanity, since they're measured from\r\n                // the top-left, but we want to go from the bottom-left.\r\n                _c[AXES.y] = (height - sourceEvent.offsetY) / height,\r\n                _c);\r\n            var updates = {};\r\n            var _e = _this.props, subDomainsByItemId = _e.subDomainsByItemId, updateDomains = _e.updateDomains;\r\n            itemIds.forEach(function (itemId) {\r\n                updates[itemId] = {};\r\n                AXES.ALL.filter(function (axis) { return zoomAxes[axis]; }).forEach(function (axis) {\r\n                    var subDomain = (subDomainsByItemId[itemId] || {})[axis];\r\n                    var subDomainRange = subDomain[1] - subDomain[0];\r\n                    var newSubDomain = null;\r\n                    if (sourceEvent.deltaY) {\r\n                        // This is a zoom event.\r\n                        var deltaMode = sourceEvent.deltaMode, deltaY = sourceEvent.deltaY;\r\n                        var percentFromEnd = percents[axis];\r\n                        // This was borrowed from d3-zoom.\r\n                        var zoomFactor = (deltaY * (deltaMode ? 120 : 1)) / 500;\r\n                        // Figure out the value on the scale where the mouse is so that the\r\n                        // new subdomain does not shift.\r\n                        var valueAtMouse = subDomain[0] + subDomainRange * percentFromEnd;\r\n                        // How big the next subdomain is going to be\r\n                        var newSpan = subDomainRange * (1 + zoomFactor);\r\n                        // Finally, place this new span into the subdomain, centered about the\r\n                        // mouse, and correctly (proportionately) split above & below so that\r\n                        // the axis is stable.\r\n                        var start = valueAtMouse - newSpan * percentFromEnd;\r\n                        var end = valueAtMouse + newSpan * (1 - percentFromEnd);\r\n                        newSubDomain = [Math.min(start, end), Math.max(end, start)];\r\n                    }\r\n                    else if (movements[axis]) {\r\n                        // This is a drag event.\r\n                        var percentMovement_1 = subDomainRange * (movements[axis] / totalDistances[axis]);\r\n                        newSubDomain = subDomain.map(function (bound) { return bound + percentMovement_1; });\r\n                    }\r\n                    if (newSubDomain) {\r\n                        updates[itemId][axis] = newSubDomain;\r\n                    }\r\n                });\r\n            });\r\n            updateDomains(updates);\r\n        };\r\n        return _this;\r\n    }\r\n    ZoomRect.prototype.componentDidMount = function () {\r\n        var _a = this.props, width = _a.width, height = _a.height;\r\n        this.zoom = d3.zoom()\r\n            .translateExtent([\r\n            [0, 0],\r\n            [width, height],\r\n        ])\r\n            .extent([\r\n            [0, 0],\r\n            [width, height],\r\n        ]);\r\n        this.rectSelection = d3.select(this.zoomNode);\r\n        this.syncZoomingState();\r\n    };\r\n    ZoomRect.prototype.componentDidUpdate = function (prevProps) {\r\n        var prevZoomAxes = prevProps.zoomAxes;\r\n        var currZoomAxes = this.props.zoomAxes;\r\n        if (!isEqual$1(prevZoomAxes, currZoomAxes)) {\r\n            this.syncZoomingState();\r\n        }\r\n    };\r\n    ZoomRect.prototype.render = function () {\r\n        var _this = this;\r\n        var _a = this.props, width = _a.width, height = _a.height, onClick = _a.onClick, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut, onMouseDown = _a.onMouseDown, onMouseUp = _a.onMouseUp, onDoubleClick = _a.onDoubleClick;\r\n        return (React__default.createElement(\"rect\", { ref: function (ref) {\r\n                _this.zoomNode = ref;\r\n            }, pointerEvents: \"all\", fill: \"none\", width: width, height: height, onClick: onClick, onMouseMove: onMouseMove, onBlur: onMouseMove, onMouseOut: onMouseOut, onMouseDown: onMouseDown, onMouseUp: onMouseUp, onDoubleClick: onDoubleClick }));\r\n    };\r\n    return ZoomRect;\r\n}(React__default.Component));\r\nZoomRect.propTypes = propTypes;\r\nZoomRect.defaultProps = defaultProps;\r\nvar ZoomRect$1 = withDisplayName('ZoomRect', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId, updateDomains = _a.updateDomains;\r\n    return (React__default.createElement(ZoomRect, tslib.__assign({}, props, { domainsByItemId: domainsByItemId, subDomainsByItemId: subDomainsByItemId, updateDomains: updateDomains })));\r\n})); });\n\nvar tickTransformer = function (v) { return \"translate(\" + v + \", 0)\"; };\r\n/**\r\n * This is only used for rendering the ticks on the x-axis when it is used to\r\n * render time. Everywhere else in the library, {@link createXScale} should be\r\n * used to create scales.\r\n *\r\n * @param {number[]} domain\r\n * @param {number} width\r\n */\r\nvar createTimeScale = function (domain, width) {\r\n    return d3.scaleTime()\r\n        .domain(domain)\r\n        .range([0, width]);\r\n};\r\nvar X_SCALER_FACTORY = {\r\n    time: createTimeScale,\r\n    x: createXScale,\r\n};\r\nvar getLineProps = function (_a) {\r\n    var tickSizeInner = _a.tickSizeInner, strokeWidth = _a.strokeWidth, height = _a.height, placement = _a.placement;\r\n    switch (placement) {\r\n        case AXIS_PLACEMENTS.TOP:\r\n            return {\r\n                x1: strokeWidth / 2,\r\n                x2: strokeWidth / 2,\r\n                y1: height - tickSizeInner,\r\n                y2: height,\r\n            };\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return {\r\n                x1: strokeWidth / 2,\r\n                x2: strokeWidth / 2,\r\n                y2: tickSizeInner,\r\n            };\r\n    }\r\n};\r\nvar getPathString = function (_a) {\r\n    var height = _a.height, placement = _a.placement, range = _a.range, strokeWidth = _a.strokeWidth, tickSizeOuter = _a.tickSizeOuter;\r\n    switch (placement) {\r\n        case AXIS_PLACEMENTS.TOP:\r\n            return [\r\n                \"M\" + range[0] + \",\" + (height - tickSizeOuter),\r\n                \"V\" + (height - strokeWidth / 2),\r\n                \"H\" + (range[1] - strokeWidth),\r\n                \"V\" + (height - tickSizeOuter),\r\n            ].join('');\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return [\r\n                \"M\" + range[0] + \",\" + tickSizeOuter,\r\n                \"V\" + strokeWidth / 2,\r\n                \"H\" + (range[1] - strokeWidth),\r\n                \"V\" + tickSizeOuter,\r\n            ].join('');\r\n    }\r\n};\r\nvar getTextProps = function (_a) {\r\n    var height = _a.height, placement = _a.placement, strokeWidth = _a.strokeWidth, tickPadding = _a.tickPadding, tickSizeInner = _a.tickSizeInner;\r\n    switch (placement) {\r\n        case AXIS_PLACEMENTS.TOP:\r\n            return {\r\n                y: height - (Math.max(tickSizeInner, 0) + tickPadding) - 10,\r\n                x: strokeWidth / 2,\r\n            };\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return {\r\n                y: Math.max(tickSizeInner, 0) + tickPadding,\r\n                x: strokeWidth / 2,\r\n            };\r\n    }\r\n};\r\nvar XAxis = function (_a) {\r\n    var _b;\r\n    var _c = _a.axis, a = _c === void 0 ? 'time' : _c, domainsByItemId = _a.domainsByItemId, _d = _a.height, height = _d === void 0 ? 50 : _d, _e = _a.placement, placement = _e === void 0 ? AXIS_PLACEMENTS.BOTTOM : _e, _f = _a.scaled, scaled = _f === void 0 ? true : _f, series = _a.series, _g = _a.stroke, stroke = _g === void 0 ? 'black' : _g, subDomainsByItemId = _a.subDomainsByItemId, _h = _a.tickFormatter, tickFormatter = _h === void 0 ? function (x) { return Number(x).toString(); } : _h, _j = _a.ticks, ticks = _j === void 0 ? 0 : _j, _k = _a.width, width = _k === void 0 ? 1 : _k;\r\n    if (series.length === 0) {\r\n        return null;\r\n    }\r\n    // TODO: Update this to be multi-series aware. Right now this assumes one\r\n    // single x axis, which isn't scalable.\r\n    var domain = (scaled ? subDomainsByItemId : domainsByItemId)[series[0].id];\r\n    // The system hasn't fully booted-up yet (domains / subdomains are still being\r\n    // calculated and populated), so we need to wait a heartbeat.\r\n    if (!domain) {\r\n        return null;\r\n    }\r\n    // @ts-ignore - I think that TypeScript is wrong here because nothing here\r\n    // will be void .. ?\r\n    var scale = X_SCALER_FACTORY[a](domain[a], width);\r\n    var axis = d3.axisBottom(scale);\r\n    var tickFontSize = 14;\r\n    var strokeWidth = 2;\r\n    var halfStrokeWidth = strokeWidth / 2;\r\n    var tickSizeOuter = axis.tickSizeOuter();\r\n    var tickSizeInner = axis.tickSizeInner();\r\n    var tickPadding = axis.tickPadding();\r\n    // In order to reduce label overlapping for smaller devices\r\n    // we want to adjust amount of ticks depending on width.\r\n    // Default amount of ticks is 10 which is sutable for a\r\n    // regular 1280 display. So by dividing width by ~100\r\n    // we can achieve appropriate amount of ticks for any width.\r\n    var values = scale.ticks(ticks || Math.floor(width / 100) || 1);\r\n    var range = scale.range().map(function (r) { return r + halfStrokeWidth; });\r\n    var pathString = getPathString({\r\n        height: height,\r\n        placement: placement,\r\n        range: range,\r\n        strokeWidth: strokeWidth,\r\n        tickSizeOuter: tickSizeOuter,\r\n    });\r\n    var textProps = tslib.__assign({ fill: stroke, dy: '0.71em' }, getTextProps({\r\n        height: height,\r\n        placement: placement,\r\n        strokeWidth: strokeWidth,\r\n        tickPadding: tickPadding,\r\n        tickSizeInner: tickSizeInner,\r\n    }));\r\n    var axisElement = (React__default.createElement(\"g\", { \"data-testid\": \"xAxis\", className: \"axis x-axis\", fill: \"none\", fontSize: tickFontSize, textAnchor: \"middle\", strokeWidth: strokeWidth },\r\n        React__default.createElement(\"path\", { stroke: stroke, d: pathString }),\r\n        values.map(function (v) {\r\n            var lineProps = tslib.__assign({ stroke: stroke }, getLineProps({\r\n                height: height,\r\n                placement: placement,\r\n                strokeWidth: strokeWidth,\r\n                tickSizeInner: tickSizeInner,\r\n            }));\r\n            return (React__default.createElement(\"g\", { key: +v, opacity: 1, transform: tickTransformer(scale(v)) },\r\n                React__default.createElement(\"line\", tslib.__assign({ stroke: stroke }, lineProps)),\r\n                React__default.createElement(\"text\", tslib.__assign({ className: \"tick-value\" }, textProps), tickFormatter(+v, values))));\r\n        })));\r\n    return (React__default.createElement(\"svg\", { width: width, style: { width: '100%', display: 'block' }, height: height },\r\n        axisElement,\r\n        React__default.createElement(ZoomRect$1, { width: width, height: height, itemIds: series.filter(function (s) { return !s.hidden; }).map(function (s) { return s.id; }), zoomAxes: (_b = {}, _b[a] = true, _b) })));\r\n};\r\nvar XAxis$1 = withDisplayName('XAxis', function (props) {\r\n    var newProps = tslib.__assign({}, props);\r\n    if (props.width === undefined) {\r\n        delete newProps.width;\r\n    }\r\n    return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n        var domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId, series = _a.series;\r\n        return (React__default.createElement(sizeMe.SizeMe, { monitorWidth: true }, function (_a) {\r\n            var size = _a.size;\r\n            return (React__default.createElement(XAxis, tslib.__assign({ series: series, width: size.width || undefined }, newProps, { domainsByItemId: domainsByItemId, subDomainsByItemId: subDomainsByItemId })));\r\n        }));\r\n    }));\r\n});\n\nvar Annotation = function (_a) {\r\n    var data = _a.data, xScale = _a.xScale, height = _a.height, _b = _a.color, color = _b === void 0 ? '#e8336d' : _b, _c = _a.fillOpacity, fillOpacity = _c === void 0 ? 0.1 : _c, id = _a.id;\r\n    return (React__default.createElement(\"rect\", { key: id, className: \"griff-annotation griff-annotation-\" + id, x: xScale(data[0]), y: 0, height: height, width: xScale(data[1]) - xScale(data[0]), style: { stroke: color, fill: color, fillOpacity: fillOpacity } }));\r\n};\n\nvar formatMillisecond = d3.timeFormat('.%L');\r\nvar formatSecond = d3.timeFormat(':%S');\r\nvar formatMinute = d3.timeFormat('%H:%M');\r\nvar formatHour = d3.timeFormat('%H:00');\r\nvar formatDay = d3.timeFormat('%d/%m');\r\nvar formatWeek = d3.timeFormat('%d/%m');\r\nvar formatMonth = d3.timeFormat('%d/%m');\r\nvar formatYear = d3.timeFormat('%b %Y');\r\n/* eslint-disable no-nested-ternary */\r\nvar multiFormat = function (date) {\r\n    return (d3.timeSecond(date) < date\r\n        ? formatMillisecond\r\n        : d3.timeMinute(date) < date\r\n            ? formatSecond\r\n            : d3.timeHour(date) < date\r\n                ? formatMinute\r\n                : d3.timeDay(date) < date\r\n                    ? formatHour\r\n                    : d3.timeMonth(date) < date\r\n                        ? d3.timeWeek(date) < date\r\n                            ? formatDay\r\n                            : formatWeek\r\n                        : d3.timeYear(date) < date\r\n                            ? formatMonth\r\n                            : formatYear)(date);\r\n};\n\nvar calculateDomainFromData = function (data, accessor, minAccessor, maxAccessor) {\r\n    if (minAccessor === void 0) { minAccessor = undefined; }\r\n    if (maxAccessor === void 0) { maxAccessor = undefined; }\r\n    // if there is no data, hard code the domain\r\n    if (!data || !data.length) {\r\n        return [-0.25, 0.25];\r\n    }\r\n    var extent;\r\n    if (minAccessor && maxAccessor) {\r\n        extent = [d3.min(data, minAccessor), d3.max(data, maxAccessor)];\r\n    }\r\n    else {\r\n        extent = d3.extent(data, accessor);\r\n    }\r\n    var diff = extent[1] - extent[0];\r\n    if (Math.abs(diff) < 1e-3) {\r\n        if (extent[0] === 0) {\r\n            // If 0 is the only value present in the series, hard code domain.\r\n            return [-0.25, 0.25];\r\n        }\r\n        var domain = [(1 / 2) * extent[0], (3 / 2) * extent[0]];\r\n        if (domain[1] < domain[0]) {\r\n            return [domain[1], domain[0]];\r\n        }\r\n        return domain;\r\n    }\r\n    return [extent[0] - diff * 0.025, extent[1] + diff * 0.025];\r\n};\r\nvar deleteUndefinedFromObject = function (obj) {\r\n    if (!obj) {\r\n        return {};\r\n    }\r\n    return Object.keys(obj).reduce(function (acc, k) {\r\n        var _a;\r\n        if (obj[k] !== undefined) {\r\n            return tslib.__assign(tslib.__assign({}, acc), (_a = {}, _a[k] = obj[k], _a));\r\n        }\r\n        return acc;\r\n    }, {});\r\n};\r\nvar getTimeSubDomain = function (timeDomain, timeSubDomain, \r\n// eslint-disable-next-line no-shadow\r\nlimitTimeSubDomain) {\r\n    if (limitTimeSubDomain === void 0) { limitTimeSubDomain = function (timeSubDomain) { return timeSubDomain; }; }\r\n    if (!timeSubDomain) {\r\n        return timeDomain;\r\n    }\r\n    var newTimeSubDomain = limitTimeSubDomain(timeSubDomain);\r\n    var timeDomainLength = timeDomain[1] - timeDomain[0];\r\n    var timeSubDomainLength = newTimeSubDomain[1] - newTimeSubDomain[0];\r\n    if (timeDomainLength < timeSubDomainLength) {\r\n        return timeDomain;\r\n    }\r\n    if (newTimeSubDomain[0] < timeDomain[0]) {\r\n        return [timeDomain[0], timeDomain[0] + timeSubDomainLength];\r\n    }\r\n    if (newTimeSubDomain[1] > timeDomain[1]) {\r\n        return [timeDomain[1] - timeSubDomainLength, timeDomain[1]];\r\n    }\r\n    return newTimeSubDomain;\r\n};\r\nvar smallerDomain = function (domain, subDomain) {\r\n    if (!domain && !subDomain) {\r\n        return undefined;\r\n    }\r\n    if (!domain || !subDomain) {\r\n        return domain || subDomain;\r\n    }\r\n    return [Math.max(domain[0], subDomain[0]), Math.min(domain[1], subDomain[1])];\r\n};\r\nvar boundedDomain = function (a, b) {\r\n    return a && b ? [Math.min(a[0], b[0]), Math.max(a[1], b[1])] : a || b;\r\n};\r\nvar DEFAULT_ACCESSORS = {\r\n    time: function (d) { return d.timestamp; },\r\n    x: function (d) { return d.x; },\r\n    y: function (d) { return d.value; },\r\n};\r\nvar DEFAULT_SERIES_CONFIG = {\r\n    color: 'black',\r\n    data: [],\r\n    hidden: false,\r\n    drawPoints: false,\r\n    timeAccessor: DEFAULT_ACCESSORS.time,\r\n    xAccessor: DEFAULT_ACCESSORS.x,\r\n    yAccessor: DEFAULT_ACCESSORS.y,\r\n    timeDomain: undefined,\r\n    timeSubDomain: undefined,\r\n    xDomain: undefined,\r\n    xSubDomain: undefined,\r\n    yDomain: undefined,\r\n    ySubDomain: undefined,\r\n    pointWidth: 6,\r\n    strokeWidth: 1,\r\n};\r\nvar DataProvider = /** @class */ (function (_super) {\r\n    tslib.__extends(DataProvider, _super);\r\n    function DataProvider(props) {\r\n        var _this = _super.call(this, props) || this;\r\n        _this.getSeriesObjects = function () {\r\n            var _a = _this.props, drawLines = _a.drawLines, drawPoints = _a.drawPoints, timeAccessor = _a.timeAccessor, xAccessor = _a.xAccessor, x0Accessor = _a.x0Accessor, x1Accessor = _a.x1Accessor, yAccessor = _a.yAccessor, y0Accessor = _a.y0Accessor, y1Accessor = _a.y1Accessor, timeDomain = _a.timeDomain, timeSubDomain = _a.timeSubDomain, xDomain = _a.xDomain, xSubDomain = _a.xSubDomain, yDomain = _a.yDomain, ySubDomain = _a.ySubDomain, pointWidth = _a.pointWidth, strokeWidth = _a.strokeWidth, opacity = _a.opacity, opacityAccessor = _a.opacityAccessor, pointWidthAccessor = _a.pointWidthAccessor;\r\n            var _b = _this.state, collectionsById = _b.collectionsById, seriesById = _b.seriesById, timeSubDomains = _b.timeSubDomains, xSubDomains = _b.xSubDomains, ySubDomains = _b.ySubDomains;\r\n            return Object.keys(seriesById).reduce(function (acc, id) {\r\n                var series = seriesById[id];\r\n                var dataProvider = {\r\n                    drawLines: drawLines,\r\n                    drawPoints: drawPoints,\r\n                    pointWidth: pointWidth,\r\n                    strokeWidth: strokeWidth,\r\n                    opacity: opacity,\r\n                    opacityAccessor: opacityAccessor,\r\n                    pointWidthAccessor: pointWidthAccessor,\r\n                    timeAccessor: timeAccessor,\r\n                    xAccessor: xAccessor,\r\n                    x0Accessor: x0Accessor,\r\n                    x1Accessor: x1Accessor,\r\n                    yAccessor: yAccessor,\r\n                    y0Accessor: y0Accessor,\r\n                    y1Accessor: y1Accessor,\r\n                };\r\n                var collection = series.collectionId !== undefined\r\n                    ? collectionsById[series.collectionId] || {}\r\n                    : {};\r\n                var completedSeries = tslib.__assign(tslib.__assign(tslib.__assign(tslib.__assign(tslib.__assign({}, DEFAULT_SERIES_CONFIG), dataProvider), { \r\n                    // Then the domains because these are in the DataProvider state, which\r\n                    // supercedes the props.\r\n                    timeSubDomain: smallerDomain(timeDomain, timeSubDomain || timeSubDomains[id]), xSubDomain: smallerDomain(xDomain, xSubDomain || xSubDomains[id]), ySubDomain: smallerDomain(yDomain, ySubDomain || ySubDomains[id]), timeDomain: timeDomain,\r\n                    xDomain: xDomain,\r\n                    yDomain: yDomain }), collection), series);\r\n                return tslib.__spreadArrays(acc, [completedSeries]);\r\n            }, []);\r\n        };\r\n        _this.onUpdateInterval = function () {\r\n            var _a = _this.props, isTimeSubDomainSticky = _a.isTimeSubDomainSticky, limitTimeSubDomain = _a.limitTimeSubDomain, updateInterval = _a.updateInterval;\r\n            var _b = _this.state, seriesById = _b.seriesById, timeDomain = _b.timeDomain, timeSubDomain = _b.timeSubDomain;\r\n            var newTimeDomain = timeDomain.map(function (d) { return d + updateInterval; });\r\n            var newTimeSubDomain = isTimeSubDomainSticky\r\n                ? getTimeSubDomain(newTimeDomain, timeSubDomain.map(function (d) { return d + updateInterval; }), limitTimeSubDomain)\r\n                : timeSubDomain;\r\n            _this.setState({\r\n                timeDomain: newTimeDomain,\r\n                timeSubDomain: newTimeSubDomain,\r\n            }, function () {\r\n                Object.keys(seriesById).map(function (id) { return _this.fetchData(id, 'INTERVAL'); });\r\n            });\r\n        };\r\n        _this.startUpdateInterval = function () {\r\n            var updateInterval = _this.props.updateInterval;\r\n            if (_this.fetchInterval) {\r\n                clearInterval(_this.fetchInterval);\r\n            }\r\n            if (updateInterval) {\r\n                _this.fetchInterval = setInterval(_this.onUpdateInterval, updateInterval);\r\n            }\r\n        };\r\n        _this.fetchData = function (id, reason) { return tslib.__awaiter(_this, void 0, void 0, function () {\r\n            var _a, defaultLoader, onFetchData, pointsPerSeries, timeAccessor, x0Accessor, x1Accessor, xAccessor, y0Accessor, y1Accessor, yAccessor, onFetchDataError, _b, timeDomain, timeSubDomain, seriesById, seriesObject, loader, loaderResult, params, e_1;\r\n            var _this = this;\r\n            return tslib.__generator(this, function (_c) {\r\n                switch (_c.label) {\r\n                    case 0:\r\n                        _a = this.props, defaultLoader = _a.defaultLoader, onFetchData = _a.onFetchData, pointsPerSeries = _a.pointsPerSeries, timeAccessor = _a.timeAccessor, x0Accessor = _a.x0Accessor, x1Accessor = _a.x1Accessor, xAccessor = _a.xAccessor, y0Accessor = _a.y0Accessor, y1Accessor = _a.y1Accessor, yAccessor = _a.yAccessor, onFetchDataError = _a.onFetchDataError;\r\n                        _b = this.state, timeDomain = _b.timeDomain, timeSubDomain = _b.timeSubDomain, seriesById = _b.seriesById;\r\n                        seriesObject = seriesById[id];\r\n                        if (!seriesObject) {\r\n                            return [2 /*return*/];\r\n                        }\r\n                        loader = seriesObject.loader || defaultLoader;\r\n                        if (!loader) {\r\n                            throw new Error(\"Series \" + id + \" does not have a loader.\");\r\n                        }\r\n                        loaderResult = {};\r\n                        params = {\r\n                            id: id,\r\n                            timeDomain: timeDomain,\r\n                            timeSubDomain: timeSubDomain,\r\n                            pointsPerSeries: pointsPerSeries,\r\n                            oldSeries: tslib.__assign({ data: [] }, seriesObject),\r\n                            reason: reason,\r\n                        };\r\n                        _c.label = 1;\r\n                    case 1:\r\n                        _c.trys.push([1, 3, , 4]);\r\n                        return [4 /*yield*/, loader(params)];\r\n                    case 2:\r\n                        loaderResult = _c.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 3:\r\n                        e_1 = _c.sent();\r\n                        onFetchDataError(e_1, params);\r\n                        return [3 /*break*/, 4];\r\n                    case 4:\r\n                        this.setState(function (_a) {\r\n                            var _b, _c, _d, _e;\r\n                            var collectionsById = _a.collectionsById, _f = id, freshSeries = _a.seriesById[_f], freshSeriesById = _a.seriesById, freshTimeSubDomains = _a.timeSubDomains, freshXSubDomains = _a.xSubDomains, freshYSubDomains = _a.ySubDomains;\r\n                            var stateUpdates = {};\r\n                            var series = tslib.__assign(tslib.__assign({}, freshSeries), loaderResult);\r\n                            if (\r\n                            // We either couldn't have any data before ...\r\n                            reason === 'MOUNTED' ||\r\n                                // ... or we didn't have data before, but do now!\r\n                                ((freshSeries.data || []).length === 0 &&\r\n                                    (loaderResult.data || []).length > 0)) {\r\n                                var collection = series.collectionId\r\n                                    ? collectionsById[series.collectionId] || {}\r\n                                    : {};\r\n                                stateUpdates.timeSubDomains = tslib.__assign(tslib.__assign({}, freshTimeSubDomains), (_b = {}, _b[id] = calculateDomainFromData(series.data, series.timeAccessor || timeAccessor || DEFAULT_ACCESSORS.time), _b));\r\n                                stateUpdates.xSubDomains = tslib.__assign(tslib.__assign({}, freshXSubDomains), (_c = {}, _c[id] = calculateDomainFromData(series.data, series.xAccessor ||\r\n                                    collection.xAccessor ||\r\n                                    xAccessor ||\r\n                                    DEFAULT_ACCESSORS.x, series.x0Accessor || collection.x0Accessor || x0Accessor, series.x1Accessor || collection.x1Accessor || x1Accessor), _c));\r\n                                stateUpdates.ySubDomains = tslib.__assign(tslib.__assign({}, freshYSubDomains), (_d = {}, _d[id] = calculateDomainFromData(series.data, series.yAccessor ||\r\n                                    collection.yAccessor ||\r\n                                    yAccessor ||\r\n                                    DEFAULT_ACCESSORS.y, series.y0Accessor || collection.y0Accessor || y0Accessor, series.y1Accessor || collection.y1Accessor || y1Accessor), _d));\r\n                                series.timeSubDomain = series.timeSubDomain || series.timeDomain;\r\n                            }\r\n                            stateUpdates.seriesById = tslib.__assign(tslib.__assign({}, freshSeriesById), (_e = {}, _e[id] = series, _e));\r\n                            return stateUpdates;\r\n                        }, function () {\r\n                            var _a = id, series = _this.state.seriesById[_a];\r\n                            onFetchData(tslib.__assign({}, series));\r\n                        });\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        }); };\r\n        _this.timeSubDomainChanged = function (timeSubDomain) {\r\n            var _a = _this.props, limitTimeSubDomain = _a.limitTimeSubDomain, onTimeSubDomainChanged = _a.onTimeSubDomainChanged;\r\n            var _b = _this.state, timeDomain = _b.timeDomain, current = _b.timeSubDomain, seriesById = _b.seriesById;\r\n            var newTimeSubDomain = getTimeSubDomain(timeDomain, timeSubDomain, limitTimeSubDomain);\r\n            if (isEqual$1(newTimeSubDomain, current)) {\r\n                return;\r\n            }\r\n            clearTimeout(_this.timeSubDomainChangedTimeout);\r\n            _this.timeSubDomainChangedTimeout = setTimeout(function () {\r\n                return Object.keys(seriesById).map(function (id) {\r\n                    return _this.fetchData(id, 'UPDATE_SUBDOMAIN');\r\n                });\r\n            }, 250);\r\n            _this.setState({ timeSubDomain: newTimeSubDomain }, function () {\r\n                if (onTimeSubDomainChanged) {\r\n                    onTimeSubDomainChanged(newTimeSubDomain);\r\n                }\r\n            });\r\n        };\r\n        _this.registerCollection = function (_a) {\r\n            var id = _a.id, collection = tslib.__rest(_a, [\"id\"]);\r\n            _this.setState(function (_a) {\r\n                var _b;\r\n                var collectionsById = _a.collectionsById;\r\n                return ({\r\n                    collectionsById: tslib.__assign(tslib.__assign({}, collectionsById), (_b = {}, _b[id] = deleteUndefinedFromObject(tslib.__assign(tslib.__assign({}, collection), { id: id })), _b)),\r\n                });\r\n            });\r\n            // Return an unregistration so that we can do some cleanup.\r\n            return function () {\r\n                _this.setState(function (_a) {\r\n                    var collectionsById = _a.collectionsById;\r\n                    var copy = tslib.__assign({}, collectionsById);\r\n                    delete copy[id];\r\n                    return {\r\n                        collectionsById: copy,\r\n                    };\r\n                });\r\n            };\r\n        };\r\n        _this.updateCollection = function (_a) {\r\n            var id = _a.id, collection = tslib.__rest(_a, [\"id\"]);\r\n            _this.setState(function (_a) {\r\n                var _b;\r\n                var collectionsById = _a.collectionsById;\r\n                return ({\r\n                    collectionsById: tslib.__assign(tslib.__assign({}, collectionsById), (_b = {}, _b[id] = deleteUndefinedFromObject(tslib.__assign(tslib.__assign(tslib.__assign({}, collectionsById[id]), collection), { id: id })), _b)),\r\n                });\r\n            });\r\n        };\r\n        _this.registerSeries = function (_a) {\r\n            var id = _a.id, series = tslib.__rest(_a, [\"id\"]);\r\n            _this.setState(function (_a) {\r\n                var _b;\r\n                var seriesById = _a.seriesById;\r\n                return ({\r\n                    seriesById: tslib.__assign(tslib.__assign({}, seriesById), (_b = {}, _b[id] = deleteUndefinedFromObject(tslib.__assign(tslib.__assign({}, series), { id: id })), _b)),\r\n                });\r\n            }, function () {\r\n                _this.fetchData(id, 'MOUNTED');\r\n            });\r\n            // Return an unregistration so that we can do some cleanup.\r\n            return function () {\r\n                _this.setState(function (_a) {\r\n                    var seriesById = _a.seriesById;\r\n                    var copy = tslib.__assign({}, seriesById);\r\n                    delete copy[id];\r\n                    return {\r\n                        seriesById: copy,\r\n                    };\r\n                });\r\n            };\r\n        };\r\n        _this.updateSeries = function (_a) {\r\n            var id = _a.id, series = tslib.__rest(_a, [\"id\"]);\r\n            _this.setState(function (_a) {\r\n                var _b;\r\n                var seriesById = _a.seriesById;\r\n                return ({\r\n                    seriesById: tslib.__assign(tslib.__assign({}, seriesById), (_b = {}, _b[id] = deleteUndefinedFromObject(tslib.__assign(tslib.__assign(tslib.__assign({}, seriesById[id]), series), { id: id })), _b)),\r\n                });\r\n            });\r\n        };\r\n        // Add a helper method to render the legacy props using the new tree structure\r\n        // format. This is only intended to ease the transition pain and is not\r\n        // intended to be an ongoing solution.\r\n        _this.renderLegacyItems = function () {\r\n            var _a = _this.props, series = _a.series, collections = _a.collections;\r\n            if (series || collections) {\r\n                return (React__default.createElement(React__default.Fragment, null,\r\n                    (series || []).map(function (s) { return (React__default.createElement(Series$1, tslib.__assign({ key: s.id }, s))); }),\r\n                    (collections || []).map(function (c) { return (React__default.createElement(Collection$1, tslib.__assign({ key: c.id }, c))); })));\r\n            }\r\n            return null;\r\n        };\r\n        var limitTimeSubDomain = props.limitTimeSubDomain, timeDomain = props.timeDomain, timeSubDomain = props.timeSubDomain;\r\n        _this.state = {\r\n            timeSubDomain: getTimeSubDomain(timeDomain, timeSubDomain, limitTimeSubDomain),\r\n            timeDomain: timeDomain,\r\n            timeSubDomains: {},\r\n            xSubDomains: {},\r\n            ySubDomains: {},\r\n            collectionsById: {},\r\n            seriesById: {},\r\n        };\r\n        return _this;\r\n    }\r\n    DataProvider.prototype.componentDidMount = function () {\r\n        var updateInterval = this.props.updateInterval;\r\n        if (updateInterval) {\r\n            this.startUpdateInterval();\r\n        }\r\n    };\r\n    DataProvider.prototype.componentDidUpdate = function (prevProps) {\r\n        return tslib.__awaiter(this, void 0, void 0, function () {\r\n            var _a, limitTimeSubDomain, onTimeSubDomainChanged, pointsPerSeries, series, propsTimeDomain, propsTimeSubDomain, updateInterval, prevUpdateInterval, seriesById_1, newTimeSubDomain_1;\r\n            var _this = this;\r\n            return tslib.__generator(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        _a = this.props, limitTimeSubDomain = _a.limitTimeSubDomain, onTimeSubDomainChanged = _a.onTimeSubDomainChanged, pointsPerSeries = _a.pointsPerSeries, series = _a.series, propsTimeDomain = _a.timeDomain, propsTimeSubDomain = _a.timeSubDomain, updateInterval = _a.updateInterval;\r\n                        prevUpdateInterval = prevProps.updateInterval;\r\n                        if (updateInterval !== prevUpdateInterval) {\r\n                            this.startUpdateInterval();\r\n                        }\r\n                        if (!(pointsPerSeries !== prevProps.pointsPerSeries)) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, Promise.map(series, function (s) {\r\n                                return _this.fetchData(s.id, 'UPDATE_POINTS_PER_SERIES');\r\n                            })];\r\n                    case 1:\r\n                        _b.sent();\r\n                        _b.label = 2;\r\n                    case 2:\r\n                        if (!isEqual$1(propsTimeSubDomain, prevProps.timeSubDomain)) {\r\n                            this.timeSubDomainChanged(propsTimeSubDomain);\r\n                        }\r\n                        // Check if timeDomain changed in props -- if so reset state.\r\n                        if (!isEqual$1(propsTimeDomain, prevProps.timeDomain)) {\r\n                            seriesById_1 = this.state.seriesById;\r\n                            newTimeSubDomain_1 = getTimeSubDomain(propsTimeDomain, propsTimeSubDomain, limitTimeSubDomain);\r\n                            // eslint-disable-next-line\r\n                            this.setState({\r\n                                timeDomain: propsTimeDomain,\r\n                                timeSubDomain: newTimeSubDomain_1,\r\n                                ySubDomains: {},\r\n                            }, function () {\r\n                                Object.keys(seriesById_1).map(function (id) { return _this.fetchData(id, 'MOUNTED'); });\r\n                                if (onTimeSubDomainChanged) {\r\n                                    onTimeSubDomainChanged(newTimeSubDomain_1);\r\n                                }\r\n                            });\r\n                            this.startUpdateInterval();\r\n                        }\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    DataProvider.prototype.componentWillUnmount = function () {\r\n        if (this.fetchInterval) {\r\n            clearInterval(this.fetchInterval);\r\n        }\r\n    };\r\n    DataProvider.prototype.render = function () {\r\n        var _a = this.state, collectionsById = _a.collectionsById, timeDomain = _a.timeDomain, timeSubDomain = _a.timeSubDomain;\r\n        var _b = this.props, children = _b.children, limitTimeSubDomain = _b.limitTimeSubDomain, externalTimeDomain = _b.timeDomain, externalTimeSubDomain = _b.timeSubDomain, yAxisWidth = _b.yAxisWidth, onUpdateDomains = _b.onUpdateDomains;\r\n        var seriesObjects = this.getSeriesObjects();\r\n        // // Compute the domains for all of the collections with one pass over all of\r\n        // // the series objects.\r\n        var domainsByCollectionId = seriesObjects.reduce(function (acc, series) {\r\n            var _a;\r\n            var collectionId = series.collectionId;\r\n            if (!collectionId) {\r\n                return acc;\r\n            }\r\n            var seriesTimeDomain = series.timeDomain, seriesTimeSubDomain = series.timeSubDomain, seriesXDomain = series.xDomain, seriesXSubDomain = series.xSubDomain, seriesYDomain = series.yDomain, seriesYSubDomain = series.ySubDomain;\r\n            var _b = acc[collectionId] || {}, _c = _b.timeDomain, collectionTimeDomain = _c === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _c, _d = _b.timeSubDomain, collectionTimeSubDomain = _d === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _d, _e = _b.xDomain, collectionXDomain = _e === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _e, _f = _b.xSubDomain, collectionXSubDomain = _f === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _f, _g = _b.yDomain, collectionYDomain = _g === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _g, _h = _b.ySubDomain, collectionYSubDomain = _h === void 0 ? [\r\n                Number.MAX_SAFE_INTEGER,\r\n                Number.MIN_SAFE_INTEGER,\r\n            ] : _h;\r\n            return tslib.__assign(tslib.__assign({}, acc), (_a = {}, _a[collectionId] = {\r\n                timeDomain: seriesTimeDomain\r\n                    ? boundedDomain(collectionTimeDomain, seriesTimeDomain)\r\n                    : undefined,\r\n                timeSubDomain: boundedDomain(collectionTimeSubDomain, seriesTimeSubDomain),\r\n                xDomain: seriesXDomain\r\n                    ? boundedDomain(collectionXDomain, seriesXDomain)\r\n                    : undefined,\r\n                xSubDomain: boundedDomain(collectionXSubDomain, seriesXSubDomain),\r\n                yDomain: seriesYDomain\r\n                    ? boundedDomain(collectionYDomain, seriesYDomain)\r\n                    : undefined,\r\n                ySubDomain: boundedDomain(collectionYSubDomain, seriesYSubDomain),\r\n            }, _a));\r\n        }, {});\r\n        // Then we want to enrich the collection objects with their above-computed\r\n        // domains.\r\n        var collectionsWithDomains = Object.keys(collectionsById).reduce(function (acc, id) {\r\n            if (!domainsByCollectionId[id]) {\r\n                return acc;\r\n            }\r\n            return tslib.__spreadArrays(acc, [\r\n                tslib.__assign(tslib.__assign({}, collectionsById[id]), domainsByCollectionId[id]),\r\n            ]);\r\n        }, []);\r\n        // Then take a final pass over all of the series and replace their\r\n        // yDomain and ySubDomain arrays with the one from their collections (if\r\n        // they're a member of a collection).\r\n        var collectedSeries = seriesObjects.map(function (s) {\r\n            var collectionId = s.collectionId;\r\n            if (collectionId === undefined) {\r\n                return s;\r\n            }\r\n            var copy = tslib.__assign({}, s);\r\n            if (!collectionsById[collectionId]) {\r\n                // It's pointing to a collection that doesn't exist.\r\n                delete copy.collectionId;\r\n            }\r\n            else {\r\n                var _a = domainsByCollectionId[collectionId] || {}, collectionTimeDomain = _a.timeDomain, collectionTimeSubDomain = _a.timeSubDomain, collectionXDomain = _a.xDomain, collectionXSubDomain = _a.xSubDomain, collectionYDomain = _a.yDomain, collectionYSubDomain = _a.ySubDomain;\r\n                if (collectionTimeDomain) {\r\n                    copy.timeDomain = collectionTimeDomain;\r\n                }\r\n                if (collectionTimeSubDomain) {\r\n                    copy.timeSubDomain = collectionTimeSubDomain;\r\n                }\r\n                if (collectionXDomain) {\r\n                    copy.xDomain = collectionXDomain;\r\n                }\r\n                if (collectionXSubDomain) {\r\n                    copy.xSubDomain = collectionXSubDomain;\r\n                }\r\n                if (collectionYDomain) {\r\n                    copy.yDomain = collectionYDomain;\r\n                }\r\n                if (collectionYSubDomain) {\r\n                    copy.ySubDomain = collectionYSubDomain;\r\n                }\r\n            }\r\n            return copy;\r\n        });\r\n        var context = {\r\n            series: collectedSeries,\r\n            collections: collectionsWithDomains,\r\n            timeDomain: timeDomain,\r\n            // This is used to signal external changes vs internal changes\r\n            externalTimeDomain: externalTimeDomain,\r\n            timeSubDomain: timeSubDomain,\r\n            // This is used to signal external changes vs internal changes\r\n            externalTimeSubDomain: externalTimeSubDomain,\r\n            yAxisWidth: yAxisWidth,\r\n            timeSubDomainChanged: this.timeSubDomainChanged,\r\n            limitTimeSubDomain: limitTimeSubDomain,\r\n            onUpdateDomains: onUpdateDomains,\r\n            registerCollection: this.registerCollection,\r\n            updateCollection: this.updateCollection,\r\n            registerSeries: this.registerSeries,\r\n            updateSeries: this.updateSeries,\r\n        };\r\n        return (React__default.createElement(DataContext.Provider, { value: context },\r\n            this.renderLegacyItems(),\r\n            React__default.createElement(Scaler$1, null, children)));\r\n    };\r\n    return DataProvider;\r\n}(React.Component));\r\nDataProvider.propTypes = {\r\n    /**\r\n     * A custom renderer for data points.\r\n     *\r\n     * @param {object} datapoint Current data point being rendered\r\n     * @param {number} index Index of this current data point\r\n     * @param {Array} datapoints All of the data points to be rendered\r\n     * @param {object} metadata This object contains metadata useful for the\r\n     * rendering process. This contains the following keys:\r\n     *  - {@code x}: The x-position (in pixels) of the data point.\r\n     *  - {@code x0}: The x-position (in pixels) for the data point's x0 value\r\n     *  - {@code x1}: The x-position (in pixels) for the data point's x1 value\r\n     *  - {@code y}: The y-position (in pixels) of the data point.\r\n     *  - {@code y0}: The y-position (in pixels) for the data point's y0 value\r\n     *  - {@code y1}: The y-position (in pixels) for the data point's y1 value\r\n     *  - {@code color}: The color of this data point\r\n     *  - {@code opacity}: The opacity of this data point\r\n     *  - {@code opacityAccessor}: The opacity accessor for this data point\r\n     *  - {@code pointWidth}: The width of this data point\r\n     *  - {@code pointWidthAccessor}: The accessor for this data point's width\r\n     *  - {@code strokeWidth}: The width of the stroke for this data point\r\n     * @param {Array} elements This is an array of the items that Griff would\r\n     * render for this data point. If custom rendering is not desired for this\r\n     * data point, return this array as-is\r\n     * @returns {(object|Array)} object(s) to render for this point.\r\n     */\r\n    drawPoints: PropTypes__default.oneOfType([PropTypes__default.bool, PropTypes__default.func]),\r\n    drawLines: PropTypes__default.bool,\r\n    timeDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    timeSubDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    xDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    xSubDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    updateInterval: PropTypes__default.number,\r\n    timeAccessor: PropTypes__default.func,\r\n    xAccessor: PropTypes__default.func,\r\n    x0Accessor: PropTypes__default.func,\r\n    x1Accessor: PropTypes__default.func,\r\n    yAccessor: PropTypes__default.func,\r\n    y0Accessor: PropTypes__default.func,\r\n    y1Accessor: PropTypes__default.func,\r\n    yAxisWidth: PropTypes__default.number,\r\n    yDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    ySubDomain: PropTypes__default.arrayOf(PropTypes__default.number.isRequired),\r\n    pointsPerSeries: PropTypes__default.number,\r\n    children: PropTypes__default.node.isRequired,\r\n    defaultLoader: PropTypes__default.func,\r\n    // xSubDomain => void\r\n    onTimeSubDomainChanged: PropTypes__default.func,\r\n    // newSubDomainsPerItem => void\r\n    onUpdateDomains: PropTypes__default.func,\r\n    opacity: PropTypes__default.number,\r\n    /** (datapoint, index, datapoints) => number */\r\n    opacityAccessor: PropTypes__default.func,\r\n    pointWidth: PropTypes__default.number,\r\n    /** (datapoint, index, datapoints) => number */\r\n    pointWidthAccessor: PropTypes__default.func,\r\n    strokeWidth: PropTypes__default.number,\r\n    // if set to true and an updateInterval is provided, xSubDomain\r\n    // will be increased at every interval (similarly to xDomain)\r\n    isTimeSubDomainSticky: PropTypes__default.bool,\r\n    // timeSubDomain => timeSubDomain\r\n    // function to allow limitation of the value of timeSubDomain\r\n    limitTimeSubDomain: PropTypes__default.func,\r\n    // loaderConfig => void\r\n    // called whenever data is fetched by the loader\r\n    onFetchData: PropTypes__default.func,\r\n    // (error, params) => void\r\n    // Callback when data loader throws an error\r\n    onFetchDataError: PropTypes__default.func,\r\n    series: PropTypes__default.arrayOf(PropTypes__default.shape({\r\n        id: PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string]).isRequired,\r\n    })),\r\n    collections: PropTypes__default.arrayOf(PropTypes__default.shape({\r\n        id: PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string]).isRequired,\r\n    })),\r\n};\r\nDataProvider.defaultProps = {\r\n    defaultLoader: undefined,\r\n    drawPoints: undefined,\r\n    drawLines: undefined,\r\n    onTimeSubDomainChanged: undefined,\r\n    onUpdateDomains: undefined,\r\n    opacity: 1.0,\r\n    opacityAccessor: undefined,\r\n    pointsPerSeries: 250,\r\n    pointWidth: undefined,\r\n    pointWidthAccessor: undefined,\r\n    strokeWidth: undefined,\r\n    timeDomain: undefined,\r\n    timeSubDomain: undefined,\r\n    xDomain: undefined,\r\n    xSubDomain: undefined,\r\n    updateInterval: 0,\r\n    timeAccessor: function (d) { return d.timestamp; },\r\n    x0Accessor: undefined,\r\n    x1Accessor: undefined,\r\n    xAccessor: function (d) { return d.timestamp; },\r\n    y0Accessor: undefined,\r\n    y1Accessor: undefined,\r\n    yAccessor: function (d) { return d.value; },\r\n    yAxisWidth: 50,\r\n    yDomain: undefined,\r\n    ySubDomain: undefined,\r\n    isTimeSubDomainSticky: false,\r\n    limitTimeSubDomain: function (xSubDomain) { return xSubDomain; },\r\n    onFetchData: function () { },\r\n    // Just rethrow the error if there is no custom error handler\r\n    onFetchDataError: function (e) {\r\n        throw e;\r\n    },\r\n    series: [],\r\n    collections: [],\r\n};\n\nvar propTypes$1 = {\r\n    height: PropTypes__default.number,\r\n    annotations: PropTypes__default.arrayOf(annotationPropType),\r\n    zoomable: PropTypes__default.bool,\r\n    // Number => String\r\n    xAxisFormatter: PropTypes__default.func,\r\n    xAxisHeight: PropTypes__default.number,\r\n    xAxisPlacement: GriffPropTypes.axisPlacement,\r\n    // These are all provided by Griff.\r\n    domainsByItemId: GriffPropTypes.domainsByItemId.isRequired,\r\n    series: GriffPropTypes.multipleSeries.isRequired,\r\n    subDomainsByItemId: GriffPropTypes.subDomainsByItemId.isRequired,\r\n    updateDomains: GriffPropTypes.updateDomains.isRequired,\r\n    width: PropTypes__default.number,\r\n};\r\nvar defaultProps$1 = {\r\n    width: 1,\r\n    height: 150,\r\n    annotations: [],\r\n    zoomable: true,\r\n    xAxisFormatter: multiFormat,\r\n    xAxisHeight: 50,\r\n    xAxisPlacement: AXIS_PLACEMENTS.BOTTOM,\r\n};\r\nvar onUpdateSelection = function (selection, _a) {\r\n    var series = _a.series, timeDomain = _a.timeDomain, updateDomains = _a.updateDomains, width = _a.width;\r\n    var xScale = createXScale(timeDomain, width);\r\n    var timeSubDomain = selection.map(xScale.invert).map(Number);\r\n    updateDomains(series.reduce(function (changes, s) {\r\n        var _a;\r\n        return (tslib.__assign(tslib.__assign({}, changes), (_a = {}, _a[s.id] = {\r\n            time: timeSubDomain,\r\n        }, _a)));\r\n    }, {}));\r\n};\r\nvar getChartHeight = function (_a) {\r\n    var height = _a.height, xAxisHeight = _a.xAxisHeight, xAxisPlacement = _a.xAxisPlacement;\r\n    return height -\r\n        xAxisHeight -\r\n        (xAxisPlacement === AXIS_PLACEMENTS.BOTH ? xAxisHeight : 0);\r\n};\r\nvar renderXAxis = function (position, xAxis, _a) {\r\n    var xAxisPlacement = _a.xAxisPlacement;\r\n    if (position === xAxisPlacement) {\r\n        return xAxis;\r\n    }\r\n    if (xAxisPlacement === AXIS_PLACEMENTS.BOTH) {\r\n        return React__default.cloneElement(xAxis, { placement: position });\r\n    }\r\n    return null;\r\n};\r\nvar ContextChart = function (_a) {\r\n    var propsAnnotations = _a.annotations, domainsByItemId = _a.domainsByItemId, propsHeight = _a.height, series = _a.series, subDomainsByItemId = _a.subDomainsByItemId, updateDomains = _a.updateDomains, width = _a.width, xAxisFormatter = _a.xAxisFormatter, xAxisHeight = _a.xAxisHeight, xAxisPlacement = _a.xAxisPlacement, zoomable = _a.zoomable;\r\n    if (series.length === 0) {\r\n        return null;\r\n    }\r\n    var getYScale = function (s, height) {\r\n        var domain = firstResolvedDomain(s.yDomain, AXES.y(domainsByItemId[s.collectionId || s.id])) ||\r\n            calculateDomainFromData(s.data, s.yAccessor, s.y0Accessor, s.y1Accessor);\r\n        return createYScale(domain, height);\r\n    };\r\n    var firstItemId = series[0].id;\r\n    var timeDomain = AXES.time(domainsByItemId[firstItemId]);\r\n    var timeSubDomain = AXES.time(subDomainsByItemId[firstItemId]);\r\n    var height = getChartHeight({\r\n        height: propsHeight,\r\n        xAxisHeight: xAxisHeight,\r\n        xAxisPlacement: xAxisPlacement,\r\n    });\r\n    var xScale = createXScale(timeDomain, width);\r\n    var selection = timeSubDomain.map(xScale);\r\n    var annotations = propsAnnotations.map(function (a) { return (React__default.createElement(Annotation, tslib.__assign({ key: a.id }, a, { height: height, xScale: xScale }))); });\r\n    var xAxis = (React__default.createElement(XAxis$1, { height: xAxisHeight, domain: timeDomain, tickFormatter: xAxisFormatter, placement: xAxisPlacement, scaled: false, axis: AXES.time }));\r\n    return (React__default.createElement(React__default.Fragment, null,\r\n        renderXAxis(AXIS_PLACEMENTS.TOP, xAxis, { xAxisPlacement: xAxisPlacement }),\r\n        React__default.createElement(\"svg\", { height: height, width: width, style: { width: '100%', display: 'block' } },\r\n            annotations,\r\n            React__default.createElement(LineCollection$1, { series: series.map(function (s) { return (tslib.__assign(tslib.__assign({}, s), { drawPoints: false })); }), width: width, height: height, yScalerFactory: getYScale, scaleY: false, scaleX: false, subDomainsByItemId: subDomainsByItemId }),\r\n            React__default.createElement(Brush, { width: width, height: height, selection: selection, onUpdateSelection: function (newSelection) {\r\n                    return onUpdateSelection(newSelection, {\r\n                        series: series,\r\n                        timeDomain: timeDomain,\r\n                        updateDomains: updateDomains,\r\n                        width: width,\r\n                    });\r\n                }, zoomable: zoomable })),\r\n        renderXAxis(AXIS_PLACEMENTS.BOTTOM, xAxis, { xAxisPlacement: xAxisPlacement })));\r\n};\r\nContextChart.propTypes = propTypes$1;\r\nContextChart.defaultProps = defaultProps$1;\r\nvar ContextChart$1 = withDisplayName('ContextChart', function (props) {\r\n    var newProps = tslib.__assign({}, props);\r\n    if (props.width === undefined) {\r\n        delete newProps.width;\r\n    }\r\n    return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n        var domainsByItemId = _a.domainsByItemId, subDomainsByItemId = _a.subDomainsByItemId, updateDomains = _a.updateDomains, series = _a.series;\r\n        return (React__default.createElement(sizeMe.SizeMe, { monitorWidth: true }, function (_a) {\r\n            var size = _a.size;\r\n            return (React__default.createElement(ContextChart, tslib.__assign({ width: size.width, series: series }, newProps, { subDomainsByItemId: subDomainsByItemId, domainsByItemId: domainsByItemId, updateDomains: updateDomains })));\r\n        }));\r\n    }));\r\n});\n\nvar GridLines = function (_a) {\r\n    var _b = _a.axes, axes = _b === void 0 ? { x: 'x' } : _b, _c = _a.color, color = _c === void 0 ? '#666' : _c, height = _a.height, _d = _a.opacity, opacity = _d === void 0 ? 0.6 : _d, series = _a.series, _e = _a.strokeWidth, strokeWidth = _e === void 0 ? 1 : _e, subDomainsByItemId = _a.subDomainsByItemId, width = _a.width, x = _a.x, y = _a.y;\r\n    if (!x && !y) {\r\n        return null;\r\n    }\r\n    var lines = [];\r\n    if (y) {\r\n        if (y.seriesIds) {\r\n            var seriesIdMap_1 = y.seriesIds.reduce(function (dict, id) {\r\n                var _a;\r\n                return (tslib.__assign(tslib.__assign({}, dict), (_a = {}, _a[id] = true, _a)));\r\n            }, {});\r\n            series\r\n                .filter(function (s) { return seriesIdMap_1[s.id]; })\r\n                .forEach(function (s) {\r\n                // This is heavily inspired by YAxis -- maybe we could consolidate?\r\n                var scale = createYScale(AXES.y(subDomainsByItemId[s.id]), height);\r\n                var nTicks = y.count || Math.floor(height / 50) || 1;\r\n                var values = scale.ticks(nTicks);\r\n                values.forEach(function (v) {\r\n                    lines.push(React__default.createElement(\"line\", { key: \"horizontal-\" + s.id + \"-\" + v, className: \"grid-line grid-line-horizontal\", opacity: y.opacity || opacity, stroke: y.color === null ? s.color : y.color || color, strokeWidth: y.strokeWidth || strokeWidth, x1: 0, x2: width, y1: (y.strokeWidth || strokeWidth) / 2, y2: (y.strokeWidth || strokeWidth) / 2, transform: \"translate(0, \" + scale(v) + \")\" }));\r\n                });\r\n            });\r\n        }\r\n        else if (y.pixels) {\r\n            for (var position = (height % y.pixels) / 2; position <= height; position += y.pixels) {\r\n                lines.push(React__default.createElement(\"line\", { key: \"horizontal-\" + position, className: \"grid-line grid-line-horizontal\", x1: 0, x2: width, y1: position, y2: position, stroke: y.color || color, strokeWidth: y.strokeWidth || strokeWidth, opacity: y.opacity || opacity }));\r\n            }\r\n        }\r\n        else if (y.count) {\r\n            var interval = height / y.count;\r\n            for (var position = interval / 2; position <= height; position += interval) {\r\n                lines.push(React__default.createElement(\"line\", { key: \"horizontal-\" + position, className: \"grid-line grid-line-horizontal\", x1: 0, x2: width, y1: position, y2: position, stroke: y.color || color, strokeWidth: y.strokeWidth || strokeWidth, opacity: y.opacity || opacity }));\r\n            }\r\n        }\r\n    }\r\n    if (x) {\r\n        if (x.pixels) {\r\n            for (var position = (width % x.pixels) / 2; position <= width; position += x.pixels) {\r\n                lines.push(React__default.createElement(\"line\", { key: \"vertical-\" + position, className: \"grid-line grid-line-vertical\", y1: 0, y2: height, x1: position, x2: position, stroke: x.color || color, strokeWidth: x.strokeWidth || strokeWidth, opacity: x.opacity || opacity }));\r\n            }\r\n        }\r\n        else if (x.ticks !== undefined) {\r\n            // This heavily inspired by XAxis -- maybe we can consolidate them?\r\n            // FIXME: Remove this when we support multiple X axes\r\n            var timeSubDomain = subDomainsByItemId[Object.keys(subDomainsByItemId)[0]][axes.x];\r\n            var scale_1 = createXScale(timeSubDomain, width);\r\n            var values = scale_1.ticks(x.ticks || Math.floor(width / 100) || 1);\r\n            values.forEach(function (v) {\r\n                lines.push(React__default.createElement(\"line\", { key: \"vertical-\" + +v, className: \"grid-line grid-line-vertical\", opacity: x.opacity || opacity, stroke: x.color || color, strokeWidth: x.strokeWidth || strokeWidth, y1: 0, y2: height, x1: (x.strokeWidth || strokeWidth) / 2, x2: (x.strokeWidth || strokeWidth) / 2, transform: \"translate(\" + scale_1(v) + \", 0)\" }));\r\n            });\r\n        }\r\n        else if (x.count) {\r\n            var interval = width / x.count;\r\n            for (var position = interval / 2; position <= width; position += interval) {\r\n                lines.push(React__default.createElement(\"line\", { key: \"vertical-\" + position, className: \"grid-line grid-line-vertical\", y1: 0, y2: height, x1: position, x2: position, stroke: x.color || color, strokeWidth: x.strokeWidth || strokeWidth, opacity: x.opacity || opacity }));\r\n            }\r\n        }\r\n    }\r\n    return React__default.createElement(\"g\", null, lines);\r\n};\r\nvar index = withDisplayName('GridLines', function (_a) {\r\n    var width = _a.width, height = _a.height, props = tslib.__rest(_a, [\"width\", \"height\"]);\r\n    return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n        var series = _a.series, subDomainsByItemId = _a.subDomainsByItemId;\r\n        return (React__default.createElement(GridLines, tslib.__assign({}, props, { width: width, height: height, series: series, subDomainsByItemId: subDomainsByItemId })));\r\n    }));\r\n});\n\nvar propTypes$2 = {\r\n    zoomable: PropTypes__default.bool,\r\n    offsetx: PropTypes__default.number.isRequired,\r\n    series: singleSeriePropType,\r\n    collection: GriffPropTypes.collection,\r\n    height: PropTypes__default.number.isRequired,\r\n    width: PropTypes__default.number.isRequired,\r\n    onMouseEnter: PropTypes__default.func,\r\n    onMouseLeave: PropTypes__default.func,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n    // (number, values) => String\r\n    tickFormatter: PropTypes__default.func.isRequired,\r\n    defaultColor: PropTypes__default.string,\r\n    ticks: PropTypes__default.number,\r\n    // These are populated by Griff.\r\n    subDomainsByItemId: GriffPropTypes.subDomainsByItemId.isRequired,\r\n};\r\nvar defaultProps$2 = {\r\n    series: null,\r\n    collection: null,\r\n    zoomable: true,\r\n    onMouseEnter: null,\r\n    onMouseLeave: null,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n    defaultColor: '#000',\r\n    ticks: 0,\r\n};\r\nvar getItem = function (series, collection) { return series || collection; };\r\nvar getLineProps$1 = function (_a) {\r\n    var strokeWidth = _a.strokeWidth, tickSizeInner = _a.tickSizeInner, width = _a.width, yAxisPlacement = _a.yAxisPlacement;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return {\r\n                x1: width - strokeWidth,\r\n                x2: width - strokeWidth - tickSizeInner,\r\n                y1: strokeWidth / 2,\r\n                y2: strokeWidth / 2,\r\n            };\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for YAxis -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return {\r\n                x1: 0,\r\n                x2: tickSizeInner,\r\n                y1: strokeWidth / 2,\r\n                y2: strokeWidth / 2,\r\n            };\r\n    }\r\n};\r\nvar getTextProps$1 = function (_a) {\r\n    var strokeWidth = _a.strokeWidth, tickPadding = _a.tickPadding, tickSizeInner = _a.tickSizeInner, width = _a.width, yAxisPlacement = _a.yAxisPlacement;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return {\r\n                x: Math.max(width - tickSizeInner, 0) - tickPadding,\r\n                y: strokeWidth / 2,\r\n            };\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for YAxis -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return {\r\n                x: Math.max(tickSizeInner, 0) + tickPadding,\r\n                y: strokeWidth / 2,\r\n            };\r\n    }\r\n};\r\nvar getPathString$1 = function (_a) {\r\n    var range = _a.range, strokeWidth = _a.strokeWidth, tickSizeOuter = _a.tickSizeOuter, width = _a.width, yAxisPlacement = _a.yAxisPlacement;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return [\r\n                \"M\" + (width - tickSizeOuter) + \",\" + (range[0] - strokeWidth),\r\n                \"H\" + (width - strokeWidth),\r\n                \"V\" + range[1],\r\n                \"H\" + (width - tickSizeOuter),\r\n            ].join('');\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for YAxis -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return [\r\n                // Move to this (x,y); start drawing\r\n                \"M\" + tickSizeOuter + \",\" + (range[0] - strokeWidth),\r\n                // Draw a horizontal line half strokeWidth long\r\n                \"H\" + strokeWidth / 2,\r\n                // Draw a vertical line from bottom to top\r\n                \"V\" + range[1],\r\n                // Finish with another horizontal line\r\n                \"H\" + tickSizeOuter,\r\n            ].join('');\r\n    }\r\n};\r\nvar getTextAnchor = function (_a) {\r\n    var yAxisPlacement = _a.yAxisPlacement;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return 'end';\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for YAxis -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return 'start';\r\n    }\r\n};\r\nvar YAxis = function (_a) {\r\n    var collection = _a.collection, defaultColor = _a.defaultColor, height = _a.height, offsetx = _a.offsetx, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, series = _a.series, subDomainsByItemId = _a.subDomainsByItemId, tickFormatter = _a.tickFormatter, ticks = _a.ticks, width = _a.width, yAxisPlacement = _a.yAxisPlacement, zoomable = _a.zoomable;\r\n    var item = getItem(series, collection);\r\n    var color = item.color || defaultColor;\r\n    var scale = createYScale(AXES.y(subDomainsByItemId[item.id]), height);\r\n    var axis = d3.axisRight(scale);\r\n    var tickFontSize = 14;\r\n    var strokeWidth = 2;\r\n    var halfStrokeWidth = strokeWidth / 2;\r\n    var tickSizeOuter = axis.tickSizeOuter();\r\n    var tickSizeInner = axis.tickSizeInner();\r\n    var tickPadding = axis.tickPadding();\r\n    // same as for xAxis but consider height of the screen ~two times smaller\r\n    var nTicks = ticks || Math.floor(height / 50) || 1;\r\n    var values = scale.ticks(nTicks);\r\n    var range = scale.range().map(function (r) { return r + halfStrokeWidth; });\r\n    var axisElement = (React__default.createElement(\"g\", { \"data-testid\": \"yAxis-\" + item.id, className: \"axis y-axis\", fill: \"none\", fontSize: tickFontSize, textAnchor: getTextAnchor({ yAxisPlacement: yAxisPlacement }), strokeWidth: strokeWidth },\r\n        React__default.createElement(\"path\", { stroke: color, d: getPathString$1({\r\n                range: range,\r\n                strokeWidth: strokeWidth,\r\n                tickSizeOuter: tickSizeOuter,\r\n                width: width,\r\n                yAxisPlacement: yAxisPlacement,\r\n            }) }),\r\n        values.map(function (v) {\r\n            var lineProps = tslib.__assign({ stroke: color }, getLineProps$1({\r\n                strokeWidth: strokeWidth,\r\n                tickSizeInner: tickSizeInner,\r\n                width: width,\r\n                yAxisPlacement: yAxisPlacement,\r\n            }));\r\n            var textProps = tslib.__assign({ fill: color, dy: '0.32em' }, getTextProps$1({\r\n                strokeWidth: strokeWidth,\r\n                tickPadding: tickPadding,\r\n                tickSizeInner: tickSizeInner,\r\n                width: width,\r\n                yAxisPlacement: yAxisPlacement,\r\n            }));\r\n            return (React__default.createElement(\"g\", { key: +v, opacity: 1, transform: \"translate(0, \" + scale(v) + \")\" },\r\n                React__default.createElement(\"line\", tslib.__assign({}, lineProps)),\r\n                React__default.createElement(\"text\", tslib.__assign({ className: \"tick-value\" }, textProps), tickFormatter(+v, values))));\r\n        })));\r\n    var cursor = zoomable ? 'move' : 'inherit';\r\n    var id = collection ? collection.id : series.id;\r\n    return (React__default.createElement(\"g\", { className: \"axis-y axis-y-\" + id, transform: \"translate(\" + offsetx + \", 0)\", cursor: cursor, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },\r\n        axisElement,\r\n        zoomable && (React__default.createElement(ZoomRect$1, { width: width, height: height, zoomAxes: { y: true }, itemIds: [getItem(series, collection).id] }))));\r\n};\r\nYAxis.propTypes = propTypes$2;\r\nYAxis.defaultProps = defaultProps$2;\r\nvar YAxis$1 = withDisplayName('YAxis', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var subDomainsByItemId = _a.subDomainsByItemId;\r\n    return (React__default.createElement(YAxis, tslib.__assign({}, props, { subDomainsByItemId: subDomainsByItemId })));\r\n})); });\n\nvar propTypes$3 = {\r\n    height: PropTypes__default.number.isRequired,\r\n    width: PropTypes__default.number.isRequired,\r\n    offsetx: PropTypes__default.number,\r\n    color: PropTypes__default.string,\r\n    onMouseEnter: PropTypes__default.func,\r\n    onMouseLeave: PropTypes__default.func,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n};\r\nvar defaultProps$3 = {\r\n    color: '#666',\r\n    offsetx: 0,\r\n    onMouseEnter: null,\r\n    onMouseLeave: null,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n};\r\nvar getPath = function (_a) {\r\n    var offsetx = _a.offsetx, strokeWidth = _a.strokeWidth, tickSizeOuter = _a.tickSizeOuter, range = _a.range, yAxisPlacement = _a.yAxisPlacement, width = _a.width;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return [\r\n                // Move to this (x,y); start drawing\r\n                \"M \" + (width - offsetx) + \" \" + strokeWidth,\r\n                // Draw a horizontal line to the left\r\n                \"h \" + (tickSizeOuter - strokeWidth),\r\n                // Draw a vertical line from top to bottom\r\n                \"v \" + (range[0] - strokeWidth * 2),\r\n                // Finish with another horizontal line\r\n                \"h -\" + (tickSizeOuter - strokeWidth / 2),\r\n            ].join(' ');\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for CollapsedAxis -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return [\r\n                // Move to this (x,y); start drawing\r\n                \"M \" + offsetx + \" \" + strokeWidth,\r\n                // Draw a horizontal line to the left\r\n                \"h -\" + (tickSizeOuter - strokeWidth),\r\n                // Draw a vertical line from top to bottom\r\n                \"v \" + (range[0] - strokeWidth * 2),\r\n                // Finish with another horizontal line\r\n                \"h \" + (tickSizeOuter - strokeWidth / 2),\r\n            ].join(' ');\r\n    }\r\n};\r\nvar CollapsedAxis = function (_a) {\r\n    var height = _a.height, width = _a.width, initialOffsetX = _a.offsetx, color = _a.color, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, yAxisPlacement = _a.yAxisPlacement;\r\n    var renderAxis = function () {\r\n        var scale = createYScale([0, 100], height);\r\n        var axis = d3.axisRight(scale);\r\n        var tickFontSize = 14;\r\n        var strokeWidth = 2;\r\n        var tickSizeOuter = axis.tickSizeOuter();\r\n        var range = scale.range();\r\n        var paths = {};\r\n        var offsetx = 0;\r\n        for (var i = 1; i < 4; i += 1) {\r\n            offsetx += tickSizeOuter;\r\n            paths[i] = {\r\n                path: getPath({\r\n                    offsetx: offsetx,\r\n                    strokeWidth: strokeWidth,\r\n                    tickSizeOuter: tickSizeOuter,\r\n                    range: range,\r\n                    yAxisPlacement: yAxisPlacement,\r\n                    width: width,\r\n                }),\r\n                color: color,\r\n                opacity: 1 - (i - 1) / 4,\r\n            };\r\n            offsetx += 3;\r\n        }\r\n        return (React__default.createElement(\"g\", { className: \"axis\", fill: \"none\", fontSize: tickFontSize, textAnchor: \"start\", strokeWidth: strokeWidth, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, Object.keys(paths).map(function (key) { return (React__default.createElement(\"path\", { key: key, stroke: paths[key].color, opacity: paths[key].opacity || 1, d: paths[key].path })); })));\r\n    };\r\n    return (React__default.createElement(\"g\", { className: \"axis-y collapsed-axis-y\", transform: \"translate(\" + initialOffsetX + \", 0)\" }, renderAxis()));\r\n};\r\nCollapsedAxis.propTypes = propTypes$3;\r\nCollapsedAxis.defaultProps = defaultProps$3;\n\nvar propTypes$4 = {\r\n    height: PropTypes__default.number.isRequired,\r\n    zoomable: PropTypes__default.bool,\r\n    axisDisplayMode: axisDisplayModeType,\r\n    onMouseEnter: PropTypes__default.func,\r\n    onMouseLeave: PropTypes__default.func,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n    ticks: PropTypes__default.number,\r\n    // Number => String\r\n    tickFormatter: PropTypes__default.func,\r\n    // These are populated by Griff.\r\n    series: seriesPropType,\r\n    collections: GriffPropTypes.collections,\r\n    yAxisWidth: PropTypes__default.number,\r\n};\r\nvar defaultProps$4 = {\r\n    series: [],\r\n    collections: [],\r\n    zoomable: true,\r\n    ticks: 5,\r\n    yAxisWidth: 50,\r\n    axisDisplayMode: AXIS_DISPLAY_MODES.ALL,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n    onMouseEnter: null,\r\n    onMouseLeave: null,\r\n    tickFormatter: Number,\r\n};\r\nvar onAxisMouseEnter = function (seriesId, _a) {\r\n    var onMouseEnter = _a.onMouseEnter;\r\n    return onMouseEnter ? function (e) { return onMouseEnter(e, seriesId); } : null;\r\n};\r\nvar onAxisMouseLeave = function (seriesId, _a) {\r\n    var onMouseLeave = _a.onMouseLeave;\r\n    return onMouseLeave ? function (e) { return onMouseLeave(e, seriesId); } : null;\r\n};\r\nvar axisFilter = function (mode) { return function (s, _a) {\r\n    var axisDisplayMode = _a.axisDisplayMode;\r\n    return !s.hidden && (s.yAxisDisplayMode || axisDisplayMode) === mode;\r\n}; };\r\nvar ALL_FILTER = axisFilter(AXIS_DISPLAY_MODES.ALL);\r\nvar COLLAPSED_FILTER = axisFilter(AXIS_DISPLAY_MODES.COLLAPSED);\r\nvar placementFilter = function (s, _a) {\r\n    var yAxisPlacement = _a.yAxisPlacement;\r\n    return !s.yAxisPlacement ||\r\n        s.yAxisPlacement === AXIS_PLACEMENTS.BOTH ||\r\n        s.yAxisPlacement === yAxisPlacement;\r\n};\r\nvar getAxisOffsets = function (_a) {\r\n    var axisDisplayMode = _a.axisDisplayMode, collections = _a.collections, series = _a.series, yAxisPlacement = _a.yAxisPlacement, yAxisWidth = _a.yAxisWidth;\r\n    var numCollapsed = series\r\n        .concat(collections)\r\n        .filter(function (item) { return COLLAPSED_FILTER(item, { axisDisplayMode: axisDisplayMode }); }).length;\r\n    var numVisible = series.reduce(function (count, s) {\r\n        if (s.collectionId === undefined && ALL_FILTER(s, { axisDisplayMode: axisDisplayMode })) {\r\n            return count + 1;\r\n        }\r\n        return count;\r\n    }, 0) + collections.filter(function (c) { return ALL_FILTER(c, { axisDisplayMode: axisDisplayMode }); }).length;\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.LEFT:\r\n            return {\r\n                collapsed: 0,\r\n                visible: numCollapsed ? yAxisWidth : 0,\r\n            };\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            throw new Error('BOTH is not a valid option for AxisCollection -- please specify RIGHT or LEFT');\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return {\r\n                collapsed: numVisible * yAxisWidth,\r\n                visible: 0,\r\n            };\r\n    }\r\n};\r\nvar renderAllVisibleAxes = function (offsetx, _a) {\r\n    var axisDisplayMode = _a.axisDisplayMode, collections = _a.collections, height = _a.height, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, series = _a.series, tickFormatter = _a.tickFormatter, ticks = _a.ticks, yAxisPlacement = _a.yAxisPlacement, yAxisWidth = _a.yAxisWidth, zoomable = _a.zoomable;\r\n    var axisOffsetX = offsetx - yAxisWidth;\r\n    var filteredCollections = collections\r\n        .filter(function (c) { return ALL_FILTER(c, { axisDisplayMode: axisDisplayMode }); })\r\n        .filter(function (c) { return placementFilter(c, { yAxisPlacement: yAxisPlacement }); });\r\n    if (yAxisPlacement === AXIS_PLACEMENTS.LEFT) {\r\n        filteredCollections.reverse();\r\n    }\r\n    var filteredSeries = series.filter(function (s) {\r\n        return ALL_FILTER(s, { axisDisplayMode: axisDisplayMode }) &&\r\n            placementFilter(s, { yAxisPlacement: yAxisPlacement }) &&\r\n            s.collectionId === undefined;\r\n    });\r\n    if (yAxisPlacement === AXIS_PLACEMENTS.LEFT) {\r\n        filteredSeries.reverse();\r\n    }\r\n    return []\r\n        .concat(filteredSeries.map(function (s) {\r\n        axisOffsetX += yAxisWidth;\r\n        return (React__default.createElement(YAxis$1, { key: \"y-axis--\" + s.id, offsetx: axisOffsetX, zoomable: s.zoomable !== undefined ? s.zoomable : zoomable, series: s, height: height, width: yAxisWidth, onMouseEnter: onAxisMouseEnter(s.id, { onMouseEnter: onMouseEnter }), onMouseLeave: onAxisMouseLeave(s.id, { onMouseLeave: onMouseLeave }), tickFormatter: tickFormatter, yAxisPlacement: yAxisPlacement, ticks: ticks }));\r\n    }))\r\n        .concat(filteredCollections.map(function (c) {\r\n        axisOffsetX += yAxisWidth;\r\n        return (React__default.createElement(YAxis$1, { key: \"y-axis-collection-\" + c.id, offsetx: axisOffsetX, zoomable: c.zoomable !== undefined ? c.zoomable : zoomable, collection: c, height: height, width: yAxisWidth, onMouseEnter: onAxisMouseEnter(c.id, { onMouseEnter: onMouseEnter }), onMouseLeave: onAxisMouseLeave(c.id, { onMouseLeave: onMouseLeave }), tickFormatter: tickFormatter, yAxisPlacement: yAxisPlacement, ticks: ticks }));\r\n    }));\r\n};\r\nvar renderPlaceholderAxis = function (offsetx, _a) {\r\n    var axisDisplayMode = _a.axisDisplayMode, collections = _a.collections, height = _a.height, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, series = _a.series, yAxisPlacement = _a.yAxisPlacement, yAxisWidth = _a.yAxisWidth;\r\n    var collapsed = series\r\n        .filter(function (s) { return placementFilter(s, { yAxisPlacement: yAxisPlacement }); })\r\n        .concat(collections)\r\n        .filter(function (item) { return COLLAPSED_FILTER(item, { axisDisplayMode: axisDisplayMode }); });\r\n    // TODO: Should we only do this if there's more than 1?\r\n    if (collapsed.length) {\r\n        return (React__default.createElement(CollapsedAxis, { key: \"y-axis--collapsed\", height: height, offsetx: offsetx, width: yAxisWidth, onMouseEnter: onAxisMouseEnter('collapsed', { onMouseEnter: onMouseEnter }), onMouseLeave: onAxisMouseLeave('collapsed', { onMouseLeave: onMouseLeave }), yAxisPlacement: yAxisPlacement }));\r\n    }\r\n    return null;\r\n};\r\nvar AxisCollection = function (_a) {\r\n    var axisDisplayMode = _a.axisDisplayMode, collections = _a.collections, height = _a.height, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, series = _a.series, tickFormatter = _a.tickFormatter, ticks = _a.ticks, yAxisPlacement = _a.yAxisPlacement, yAxisWidth = _a.yAxisWidth, zoomable = _a.zoomable;\r\n    var calculatedWidth = []\r\n        .concat(series)\r\n        .concat(collections)\r\n        .filter(function (item) { return item.collectionId === undefined; })\r\n        .filter(function (item) { return ALL_FILTER(item, { axisDisplayMode: axisDisplayMode }); })\r\n        .filter(function (item) { return placementFilter(item, { yAxisPlacement: yAxisPlacement }); })\r\n        .reduce(function (acc, item) {\r\n        if (item.yAxisDisplayMode === AXIS_DISPLAY_MODES.COLLAPSED) {\r\n            return acc;\r\n        }\r\n        return acc + yAxisWidth;\r\n    }, series.filter(function (s) { return COLLAPSED_FILTER(s, { axisDisplayMode: axisDisplayMode }); }).length\r\n        ? yAxisWidth\r\n        : 0);\r\n    var _b = getAxisOffsets({\r\n        axisDisplayMode: axisDisplayMode,\r\n        collections: collections,\r\n        series: series,\r\n        yAxisPlacement: yAxisPlacement,\r\n        yAxisWidth: yAxisWidth,\r\n    }), collapsedOffsetX = _b.collapsed, visibleOffsetX = _b.visible;\r\n    // We need to render all of the axes (even if they're hidden) in order to\r\n    // keep the zoom states in sync across show/hide toggles.\r\n    var axes = renderAllVisibleAxes(visibleOffsetX, {\r\n        axisDisplayMode: axisDisplayMode,\r\n        collections: collections,\r\n        height: height,\r\n        onMouseEnter: onMouseEnter,\r\n        onMouseLeave: onMouseLeave,\r\n        series: series,\r\n        tickFormatter: tickFormatter,\r\n        ticks: ticks,\r\n        yAxisPlacement: yAxisPlacement,\r\n        yAxisWidth: yAxisWidth,\r\n        zoomable: zoomable,\r\n    });\r\n    return (React__default.createElement(\"svg\", { width: calculatedWidth, height: height },\r\n        axes,\r\n        renderPlaceholderAxis(collapsedOffsetX, {\r\n            axisDisplayMode: axisDisplayMode,\r\n            collections: collections,\r\n            height: height,\r\n            onMouseEnter: onMouseEnter,\r\n            onMouseLeave: onMouseLeave,\r\n            series: series,\r\n            yAxisPlacement: yAxisPlacement,\r\n            yAxisWidth: yAxisWidth,\r\n        })));\r\n};\r\nAxisCollection.propTypes = propTypes$4;\r\nAxisCollection.defaultProps = defaultProps$4;\r\nvar AxisCollection$1 = withDisplayName('AxisCollection', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var collections = _a.collections, series = _a.series;\r\n    return (React__default.createElement(AxisCollection, tslib.__assign({}, props, { collections: collections, series: series })));\r\n})); });\n\nvar RulerTooltip = /** @class */ (function (_super) {\r\n    tslib.__extends(RulerTooltip, _super);\r\n    function RulerTooltip() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            textWidth: 0,\r\n            textHeight: 0,\r\n        };\r\n        _this.onTooltipRef = function (ref) {\r\n            if (ref) {\r\n                _this.setState({\r\n                    textWidth: ref.getBBox().width,\r\n                    textHeight: ref.getBBox().height,\r\n                });\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    RulerTooltip.prototype.render = function () {\r\n        var _a = this.props, labelHeight = _a.labelHeight, color = _a.color, label = _a.label, x = _a.x, y = _a.y, _b = _a.padding, padding = _b === void 0 ? 10 : _b, chartWidth = _a.chartWidth;\r\n        var _c = this.state, textHeight = _c.textHeight, textWidth = _c.textWidth;\r\n        var xTranslate = x + 2 * padding + textWidth > chartWidth\r\n            ? x - padding - padding - textWidth\r\n            : x + padding;\r\n        var height = (labelHeight || textHeight) + padding;\r\n        return (React__default.createElement(\"g\", { transform: \"translate(\" + xTranslate + \", \" + y + \")\", style: { cursor: 'default' }, className: \"ruler-tooltip\" },\r\n            React__default.createElement(\"rect\", { className: \"ruler-tooltip-fill\", fill: \"white\", width: textWidth + padding, height: height, stroke: color, strokeWidth: \"1\", strokeOpacity: \"0.5\", opacity: \"0.9\", rx: 3, ry: 3 }),\r\n            React__default.createElement(\"text\", { className: \"ruler-tooltip-text\", textAnchor: \"middle\", alignmentBaseline: \"central\", x: (textWidth + padding) / 2, y: height / 2, ref: this.onTooltipRef, style: {\r\n                    fontSize: '14px',\r\n                    color: '#333333',\r\n                    fill: '#333333',\r\n                } }, label)));\r\n    };\r\n    return RulerTooltip;\r\n}(React__default.Component));\n\nvar labelHeight = 24;\r\nvar calculateY = function (points, yTooltipPosition) {\r\n    var pointsObject = {};\r\n    var pointsSorted = tslib.__spreadArrays(points).sort(function (a, b) { return a.y - b.y; });\r\n    var prevPoint;\r\n    for (var i = 0; i < pointsSorted.length; i += 1) {\r\n        var realSpace = yTooltipPosition - pointsSorted[i].y;\r\n        var neededSpace = (pointsSorted.length - i) * labelHeight;\r\n        // move point upper if no space until the limit available\r\n        if (realSpace < neededSpace) {\r\n            var pointPos = yTooltipPosition - neededSpace;\r\n            // if no upper room available stick it to 0\r\n            prevPoint = pointPos >= 0 ? pointPos : 0;\r\n            // move point lower if it overlaps the previous one\r\n        }\r\n        else if (prevPoint !== undefined &&\r\n            prevPoint + labelHeight > pointsSorted[i].y) {\r\n            prevPoint += labelHeight;\r\n        }\r\n        else {\r\n            prevPoint = pointsSorted[i].y;\r\n        }\r\n        pointsObject[pointsSorted[i].name] = prevPoint;\r\n    }\r\n    return pointsObject;\r\n};\r\nvar Ruler = function (_a) {\r\n    var ruler = _a.ruler, points = _a.points, chartHeight = _a.chartHeight, chartWidth = _a.chartWidth;\r\n    var _b = ruler.visible, visible = _b === void 0 ? true : _b, _c = ruler.timeLabel, timeLabel = _c === void 0 ? function (_a) {\r\n        var timestamp = _a.timestamp;\r\n        return String(new Date(timestamp));\r\n    } : _c, _d = ruler.yLabel, yLabel = _d === void 0 ? function (_a) {\r\n        var value = _a.value;\r\n        return String(value);\r\n    } : _d, _e = ruler.getTimeLabelPosition, getTimeLabelPosition = _e === void 0 ? function (defaultTimeTooltipPosition) {\r\n        return defaultTimeTooltipPosition;\r\n    } : _e;\r\n    if (!visible) {\r\n        return null;\r\n    }\r\n    var xScale = function (x) { return x; };\r\n    var timeLabelMargin = 5;\r\n    var defaultTimeTooltipPosition = chartHeight - labelHeight - 2 * timeLabelMargin;\r\n    var metadata = { height: chartHeight, labelHeight: labelHeight, timeLabelMargin: timeLabelMargin };\r\n    // The fixed position of a x-axis label which is the same for all highlighted points\r\n    var timeTooltipPosition = getTimeLabelPosition\r\n        ? getTimeLabelPosition(defaultTimeTooltipPosition, metadata)\r\n        : defaultTimeTooltipPosition;\r\n    var pointsObject = calculateY(points, timeTooltipPosition);\r\n    var newestPoint = points.reduce(function (newest, current) {\r\n        if (current.timestamp > newest.timestamp) {\r\n            return current;\r\n        }\r\n        return newest;\r\n    }, points[0]);\r\n    var positionX = xScale(newestPoint.x);\r\n    return (React__default.createElement(React__default.Fragment, null,\r\n        React__default.createElement(\"line\", { className: \"ruler-line\", y1: 0, y2: chartHeight, stroke: \"#ccc\", strokeWidth: \"1\", x1: positionX, x2: positionX }),\r\n        React__default.createElement(RulerTooltip, { labelHeight: labelHeight, color: newestPoint.color, label: timeLabel(newestPoint), x: positionX, y: timeTooltipPosition, chartWidth: chartWidth }),\r\n        points.map(function (point) { return [\r\n            React__default.createElement(RulerTooltip, { key: point.name || point.y, labelHeight: labelHeight, color: point.color, label: yLabel(point), x: xScale(point.x), y: pointsObject[point.name] - labelHeight / 2, chartWidth: chartWidth }),\r\n            React__default.createElement(\"circle\", { key: \"circle\" + (point.name || point.y), className: \"ruler-circle\", r: 3, cx: xScale(point.x), cy: point.y, fill: point.color, stroke: point.color, strokeWidth: \"3\", strokeOpacity: \"0.5\" }),\r\n        ]; })));\r\n};\n\nvar Area = function (_a) {\r\n    var id = _a.id, xMin = _a.xMin, xMax = _a.xMax, yMin = _a.yMin, yMax = _a.yMax, _b = _a.color, color = _b === void 0 ? '#000' : _b, _c = _a.opacity, opacity = _c === void 0 ? 0.15 : _c;\r\n    var width = Math.abs(xMax - xMin);\r\n    var height = Math.abs(yMax - yMin);\r\n    return (React__default.createElement(\"rect\", { className: \"area area-\" + id, width: width, height: height, x: xMin, y: yMax, pointerEvents: \"none\", style: { stroke: color, fill: color, fillOpacity: opacity } }));\r\n};\r\nArea.propTypes = {\r\n    id: PropTypes.string.isRequired,\r\n    color: PropTypes.string,\r\n    xMin: PropTypes.number.isRequired,\r\n    xMax: PropTypes.number.isRequired,\r\n    yMin: PropTypes.number.isRequired,\r\n    yMax: PropTypes.number.isRequired,\r\n    opacity: PropTypes.number,\r\n};\r\nArea.defaultProps = {\r\n    color: '#000',\r\n    opacity: 0.15,\r\n};\n\nvar ZoomMode = {\r\n    X: 0,\r\n    Y: 1,\r\n    BOTH: 2,\r\n};\r\nvar MINIMUM_AREA_DIMENSION_PIXELS = 30;\r\nvar isLargeEnough = function (area) {\r\n    return Math.abs(area.start.xpos - area.end.xpos) > MINIMUM_AREA_DIMENSION_PIXELS ||\r\n        Math.abs(area.start.ypos - area.end.ypos) > MINIMUM_AREA_DIMENSION_PIXELS;\r\n};\r\nvar InteractionLayer = /** @class */ (function (_super) {\r\n    tslib.__extends(InteractionLayer, _super);\r\n    function InteractionLayer() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            area: null,\r\n            crosshair: {\r\n                x: null,\r\n                y: null,\r\n            },\r\n            points: [],\r\n            touchX: null,\r\n            touchY: null,\r\n        };\r\n        _this.onMouseDown = function (e) {\r\n            var onAreaDefined = _this.props.onAreaDefined;\r\n            if (onAreaDefined) {\r\n                _this.mouseDown = true;\r\n                var xpos = e.nativeEvent.offsetX;\r\n                var ypos = e.nativeEvent.offsetY;\r\n                _this.setState({\r\n                    area: {\r\n                        id: Date.now(),\r\n                        start: _this.getDataForCoordinate(xpos, ypos, true),\r\n                    },\r\n                });\r\n            }\r\n        };\r\n        _this.onMouseUp = function () {\r\n            var onAreaDefined = _this.props.onAreaDefined;\r\n            setTimeout(function () {\r\n                _this.mouseUp = false;\r\n                _this.dragging = false;\r\n            }, 50);\r\n            if (onAreaDefined) {\r\n                var area = _this.state.area;\r\n                if (area && area.start && area.end && isLargeEnough(area)) {\r\n                    onAreaDefined(area);\r\n                }\r\n            }\r\n            _this.setState({ area: null });\r\n        };\r\n        _this.onMouseMove = function (e) {\r\n            var _a = _this.props, series = _a.series, onMouseMove = _a.onMouseMove, crosshair = _a.crosshair, ruler = _a.ruler;\r\n            if (series.length === 0) {\r\n                return;\r\n            }\r\n            var xpos = e.nativeEvent.offsetX;\r\n            var ypos = e.nativeEvent.offsetY;\r\n            if (crosshair) {\r\n                _this.setState({\r\n                    crosshair: {\r\n                        x: xpos,\r\n                        y: ypos,\r\n                    },\r\n                });\r\n            }\r\n            var area = _this.state.area;\r\n            if (onMouseMove || (ruler && ruler.visible) || area) {\r\n                _this.processMouseMove(xpos, ypos, e);\r\n                _this.setState({\r\n                    touchX: xpos,\r\n                    touchY: ypos,\r\n                });\r\n                if (area) {\r\n                    _this.dragging = true;\r\n                }\r\n            }\r\n        };\r\n        _this.onMouseOut = function (e) {\r\n            var _a = _this.props, onMouseMove = _a.onMouseMove, crosshair = _a.crosshair, onMouseOut = _a.onMouseOut, ruler = _a.ruler;\r\n            if (crosshair) {\r\n                _this.setState({\r\n                    crosshair: {\r\n                        x: null,\r\n                        y: null,\r\n                    },\r\n                });\r\n            }\r\n            if (ruler && ruler.visible) {\r\n                _this.setState({\r\n                    points: [],\r\n                    touchX: null,\r\n                    touchY: null,\r\n                });\r\n            }\r\n            if (onMouseMove) {\r\n                onMouseMove({ points: [] });\r\n            }\r\n            if (onMouseOut) {\r\n                onMouseOut(e);\r\n            }\r\n            _this.setState({ area: null });\r\n        };\r\n        _this.onClick = function (e) {\r\n            var _a = _this.props, onClickAnnotation = _a.onClickAnnotation, onAreaClicked = _a.onAreaClicked, onClick = _a.onClick, width = _a.width, height = _a.height, annotations = _a.annotations, areas = _a.areas, subDomainsByItemId = _a.subDomainsByItemId, series = _a.series;\r\n            if (_this.dragging) {\r\n                return;\r\n            }\r\n            if (onClickAnnotation || onAreaClicked) {\r\n                var notified_1 = false;\r\n                // FIXME: Don't assume a single time domain\r\n                var timeSubDomain = AXES.time(subDomainsByItemId[Object.keys(subDomainsByItemId)[0]]);\r\n                var xScale_1 = createXScale(timeSubDomain, width);\r\n                var xpos_1 = e.nativeEvent.offsetX;\r\n                var ypos_1 = e.nativeEvent.offsetY;\r\n                var rawTimestamp_1 = xScale_1.invert(xpos_1);\r\n                if (onAreaClicked) {\r\n                    var stopNotifying_1 = false;\r\n                    areas.forEach(function (a) {\r\n                        if (stopNotifying_1) {\r\n                            return;\r\n                        }\r\n                        if (a.seriesId) {\r\n                            var s = series.find(function (s1) { return s1.id === a.seriesId; });\r\n                            if (s) {\r\n                                var _a = AXES.y, ySubDomain = subDomainsByItemId[s.collectionId || s.id][_a];\r\n                                var yScale = createYScale(ySubDomain, height);\r\n                                var unScaled = {\r\n                                    xpos: xScale_1.invert(xpos_1),\r\n                                    ypos: yScale.invert(ypos_1),\r\n                                };\r\n                                var x = unScaled.xpos > a.xMin && unScaled.xpos < a.xMax;\r\n                                var y = unScaled.ypos > a.yMin && unScaled.ypos < a.yMax;\r\n                                if (x && y) {\r\n                                    // Clicked within an area\r\n                                    stopNotifying_1 = onAreaClicked(a, xpos_1, ypos_1);\r\n                                    notified_1 = true;\r\n                                }\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n                if (onClickAnnotation) {\r\n                    annotations.forEach(function (a) {\r\n                        if (rawTimestamp_1 > a.data[0] && rawTimestamp_1 < a.data[1]) {\r\n                            // Clicked within an annotation\r\n                            onClickAnnotation(a, xpos_1, ypos_1);\r\n                            notified_1 = true;\r\n                        }\r\n                    });\r\n                }\r\n                if (notified_1) {\r\n                    return;\r\n                }\r\n            }\r\n            if (onClick) {\r\n                onClick(e);\r\n            }\r\n        };\r\n        _this.onDoubleClick = function (e) {\r\n            var onDoubleClick = _this.props.onDoubleClick;\r\n            if (onDoubleClick) {\r\n                onDoubleClick(e);\r\n            }\r\n        };\r\n        _this.onTouchMove = function () {\r\n            _this.touchMoving = true;\r\n        };\r\n        _this.onTouchMoveEnd = function () {\r\n            _this.touchMoving = false;\r\n        };\r\n        // TODO: This extrapolate thing is super gross and so hacky.\r\n        _this.getDataForCoordinate = function (xpos, ypos, extrapolate) {\r\n            if (extrapolate === void 0) { extrapolate = false; }\r\n            var _a = _this.props, subDomainsByItemId = _a.subDomainsByItemId, width = _a.width, series = _a.series, height = _a.height;\r\n            var output = { xpos: xpos, ypos: ypos, points: [] };\r\n            series.forEach(function (s) {\r\n                var _a = subDomainsByItemId[s.id], _b = AXES.time, timeSubDomain = _a[_b], _c = AXES.y, ySubDomain = _a[_c];\r\n                var xScale = createXScale(timeSubDomain, width);\r\n                var rawTimestamp = xScale.invert(xpos);\r\n                var data = s.data, xAccessor = s.xAccessor, yAccessor = s.yAccessor;\r\n                var rawX = d3.bisector(xAccessor).left(data, rawTimestamp, 1);\r\n                var x0 = data[rawX - 1];\r\n                var x1 = data[rawX];\r\n                var d = null;\r\n                if (x0) {\r\n                    // If there is a point *before* the cursor position, then that should\r\n                    // be used since it was the last-known value, and extrapolating into the\r\n                    // future can be misleading (and incorrect).\r\n                    d = x0;\r\n                }\r\n                else if (x1) {\r\n                    // But if we only have a point under the cursor, go ahead and use that.\r\n                    d = x1;\r\n                }\r\n                else {\r\n                    // Otherwise, just use nothing.\r\n                    d = null;\r\n                }\r\n                if (d) {\r\n                    var yScale = createYScale(ySubDomain, height);\r\n                    if (extrapolate) {\r\n                        yScale = d3.scaleLinear()\r\n                            .domain([height, 0])\r\n                            .range(ySubDomain);\r\n                    }\r\n                    var ts = xAccessor(d);\r\n                    var value = extrapolate ? ypos : yAccessor(d);\r\n                    output.points.push({\r\n                        id: s.id,\r\n                        timestamp: ts,\r\n                        value: extrapolate ? yScale(value) : value,\r\n                        x: xScale(ts),\r\n                        y: yScale(value),\r\n                    });\r\n                }\r\n                else {\r\n                    output.points.push({ id: s.id });\r\n                }\r\n            });\r\n            return output;\r\n        };\r\n        _this.getRulerPoints = function (xpos) {\r\n            var _a = _this.props, series = _a.series, height = _a.height, width = _a.width, subDomainsByItemId = _a.subDomainsByItemId;\r\n            var newPoints = [];\r\n            series.forEach(function (s) {\r\n                if (!subDomainsByItemId[s.id]) {\r\n                    return;\r\n                }\r\n                var _a = subDomainsByItemId[s.collectionId] || subDomainsByItemId[s.id], _b = AXES.time, timeSubDomain = _a[_b], _c = AXES.y, ySubDomain = _a[_c];\r\n                var xScale = createXScale(timeSubDomain, width);\r\n                var rawTimestamp = xScale.invert(xpos);\r\n                var data = s.data, xAccessor = s.xAccessor, yAccessor = s.yAccessor;\r\n                var rawX = d3.bisector(xAccessor).left(data, rawTimestamp, 1);\r\n                var x0 = data[rawX - 1];\r\n                var x1 = data[rawX];\r\n                var d = null;\r\n                if (x0) {\r\n                    // If there is a point *before* the cursor position, then that should\r\n                    // be used since it was the last-known value, and extrapolating into the\r\n                    // future can be misleading (and incorrect).\r\n                    d = x0;\r\n                }\r\n                else if (x1) {\r\n                    // But if we only have a point under the cursor, go ahead and use that.\r\n                    d = x1;\r\n                }\r\n                else {\r\n                    // Otherwise, just use nothing.\r\n                    d = null;\r\n                }\r\n                if (d) {\r\n                    var yScale = createYScale(ySubDomain, height);\r\n                    var ts = xAccessor(d);\r\n                    var value = yAccessor(d);\r\n                    newPoints.push({\r\n                        id: s.id,\r\n                        name: s.name,\r\n                        color: s.color,\r\n                        timestamp: ts,\r\n                        rawTimestamp: rawTimestamp,\r\n                        value: value,\r\n                        x: xScale(ts),\r\n                        y: yScale(value),\r\n                    });\r\n                }\r\n            });\r\n            return newPoints;\r\n        };\r\n        _this.setRulerPosition = function (timestamp) {\r\n            if (!timestamp) {\r\n                _this.setState({\r\n                    points: [],\r\n                    touchX: null,\r\n                    touchY: null,\r\n                });\r\n                return;\r\n            }\r\n            var _a = _this.props, width = _a.width, subDomainsByItemId = _a.subDomainsByItemId;\r\n            var timeSubDomain = AXES.time(subDomainsByItemId[Object.keys(subDomainsByItemId)[0]]);\r\n            var xScale = createXScale(timeSubDomain, width);\r\n            var xpos = xScale(timestamp);\r\n            _this.setRulerPoints(xpos);\r\n            _this.setState({\r\n                touchX: xpos,\r\n            });\r\n        };\r\n        _this.setRulerPoints = function (xpos) {\r\n            var rulerPoints = _this.getRulerPoints(xpos);\r\n            _this.setState({ points: rulerPoints });\r\n            return rulerPoints;\r\n        };\r\n        _this.setArea = function (xpos, ypos) {\r\n            var area = _this.state.area;\r\n            if (!area) {\r\n                return;\r\n            }\r\n            var output = _this.getDataForCoordinate(xpos, ypos, true);\r\n            _this.setState({\r\n                area: tslib.__assign(tslib.__assign({}, area), { end: output }),\r\n            });\r\n        };\r\n        _this.processMouseMove = function (xpos, ypos, e) {\r\n            if (e === void 0) { e = null; }\r\n            var rulerPoints = _this.setRulerPoints(xpos);\r\n            _this.setArea(xpos, ypos);\r\n            var onMouseMove = _this.props.onMouseMove;\r\n            if (onMouseMove) {\r\n                onMouseMove({ points: rulerPoints, xpos: xpos, ypos: ypos, e: e });\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    InteractionLayer.prototype.componentDidMount = function () {\r\n        var ruler = this.props.ruler;\r\n        if (ruler.timestamp) {\r\n            this.setRulerPosition(ruler.timestamp);\r\n        }\r\n    };\r\n    // eslint-disable-next-line camelcase\r\n    InteractionLayer.prototype.UNSAFE_componentWillReceiveProps = function (nextProps) {\r\n        var _this = this;\r\n        var _a = this.props, prevSubDomainsByItemId = _a.subDomainsByItemId, ruler = _a.ruler, prevWidth = _a.width;\r\n        // FIXME: Don't assume a single time domain\r\n        var nextWidth = nextProps.width, nextSubDomainsByItemId = nextProps.subDomainsByItemId;\r\n        var _b = this.state, touchX = _b.touchX, touchY = _b.touchY;\r\n        var prevTimeSubDomain = AXES.time(prevSubDomainsByItemId[Object.keys(prevSubDomainsByItemId)[0]]);\r\n        var nextTimeSubDomain = AXES.time(nextSubDomainsByItemId[Object.keys(nextSubDomainsByItemId)[0]]);\r\n        if (ruler &&\r\n            ruler.visible &&\r\n            touchX !== null &&\r\n            (!isEqual$1(prevTimeSubDomain, nextTimeSubDomain) ||\r\n                prevWidth !== nextWidth)) {\r\n            // keep track on ruler on subdomain update\r\n            var prevXScale = createXScale(prevTimeSubDomain, prevWidth);\r\n            var curXScale = createXScale(nextTimeSubDomain, nextWidth);\r\n            var ts = prevXScale.invert(touchX);\r\n            var newXPos_1 = curXScale(ts);\r\n            // hide ruler if point went out to the left of subdomain\r\n            if (newXPos_1 < 0) {\r\n                this.setState({\r\n                    points: [],\r\n                    touchX: null,\r\n                    touchY: null,\r\n                });\r\n            }\r\n            else if (this.touchMoving) {\r\n                // ruler should not follow points during panning and zooming on mobile\r\n                this.processMouseMove(touchX, touchY);\r\n            }\r\n            else {\r\n                // ruler should follow points during live loading and\r\n                // panning and zooming on desktop\r\n                this.setState({ touchX: newXPos_1 }, function () {\r\n                    _this.processMouseMove(newXPos_1, touchY);\r\n                });\r\n            }\r\n        }\r\n    };\r\n    InteractionLayer.prototype.componentDidUpdate = function (prevProps) {\r\n        var _a = this.props, onAreaDefined = _a.onAreaDefined, ruler = _a.ruler;\r\n        if (prevProps.onAreaDefined && !onAreaDefined) {\r\n            // They no longer care about areas; if we're building one, then remove it.\r\n            // eslint-disable-next-line react/no-did-update-set-state\r\n            this.setState({\r\n                area: null,\r\n            });\r\n        }\r\n        if (ruler.timestamp !== prevProps.ruler.timestamp) {\r\n            this.setRulerPosition(ruler.timestamp);\r\n        }\r\n    };\r\n    InteractionLayer.prototype.render = function () {\r\n        var _a = this.props, propsAnnotations = _a.annotations, propsAreas = _a.areas, collections = _a.collections, height = _a.height, crosshair = _a.crosshair, onAreaDefined = _a.onAreaDefined, ruler = _a.ruler, series = _a.series, subDomainsByItemId = _a.subDomainsByItemId, width = _a.width, zoomAxes = _a.zoomAxes;\r\n        if (series.length === 0) {\r\n            return null;\r\n        }\r\n        var _b = this.state, _c = _b.crosshair, x = _c.x, y = _c.y, points = _b.points, area = _b.area;\r\n        var lines = null;\r\n        if (crosshair && x !== null && y !== null) {\r\n            lines = (React__default.createElement(React__default.Fragment, null,\r\n                React__default.createElement(\"line\", { key: \"x\", x1: 0, x2: width, stroke: \"#0004\", strokeWidth: 1, y1: y, y2: y }),\r\n                React__default.createElement(\"line\", { key: \"y\", y1: 0, y2: height, stroke: \"#0004\", strokeWidth: 1, x1: x, x2: x })));\r\n        }\r\n        // FIXME: Don't rely on a single time domain\r\n        var timeSubDomain = AXES.time(subDomainsByItemId[series[0].id]);\r\n        var xScale = createXScale(timeSubDomain, width);\r\n        var annotations = propsAnnotations.map(function (a) { return (React__default.createElement(Annotation, tslib.__assign({ key: \"annotation-\" + a.id }, a, { height: height, xScale: xScale }))); });\r\n        var areas = propsAreas.map(function (a) {\r\n            var scaledArea = tslib.__assign({}, a);\r\n            var s = null;\r\n            scaledArea.xMin = Math.max(0, xScale(a.xMin !== undefined ? a.xMin : timeSubDomain[0]));\r\n            scaledArea.xMax = xScale(a.xMax !== undefined ? a.xMax : timeSubDomain[1]);\r\n            if (a.seriesId) {\r\n                s = series.find(function (s1) { return s1.id === a.seriesId; });\r\n                if (s) {\r\n                    var _a = AXES.y, ySubDomain = subDomainsByItemId[s.collectionId || s.id][_a];\r\n                    var yScale = createYScale(ySubDomain, height);\r\n                    scaledArea.yMin = Math.max(0, yScale(a.yMin !== undefined ? a.yMin : ySubDomain[0]));\r\n                    scaledArea.yMax = yScale(a.yMax !== undefined ? a.yMax : ySubDomain[1]);\r\n                }\r\n            }\r\n            var color = scaledArea.color || (s ? s.color : null);\r\n            return (React__default.createElement(Area, tslib.__assign({ key: \"area-\" + scaledArea.id, color: color }, scaledArea)));\r\n        });\r\n        var areaBeingDefined = area ? (React__default.createElement(Area, tslib.__assign({ key: \"user\" }, area, { color: \"#999\" }))) : null;\r\n        var zoomableAxes = zoomAxes;\r\n        if (onAreaDefined) {\r\n            zoomableAxes = {};\r\n        }\r\n        return (React__default.createElement(React__default.Fragment, null,\r\n            lines,\r\n            annotations,\r\n            ruler.visible && points.length && (React__default.createElement(Ruler, { ruler: ruler, points: points, chartWidth: width, chartHeight: height })),\r\n            areas,\r\n            areaBeingDefined,\r\n            React__default.createElement(ZoomRect$1, { zoomAxes: zoomableAxes, width: width, height: height, onClick: this.onClick, onMouseMove: this.onMouseMove, onBlur: this.onMouseMove, onMouseOut: this.onMouseOut, onMouseDown: this.onMouseDown, onMouseUp: this.onMouseUp, onDoubleClick: this.onDoubleClick, itemIds: series.map(function (s) { return s.id; }).concat(collections.map(function (c) { return c.id; })), onTouchMove: this.onTouchMove, onTouchMoveEnd: this.onTouchMoveEnd })));\r\n    };\r\n    return InteractionLayer;\r\n}(React__default.Component));\r\nInteractionLayer.propTypes = {\r\n    crosshair: PropTypes__default.bool,\r\n    ruler: rulerPropType,\r\n    height: PropTypes__default.number.isRequired,\r\n    // area => void\r\n    onAreaDefined: PropTypes__default.func,\r\n    // (area, xpos, ypos) => void\r\n    onAreaClicked: PropTypes__default.func,\r\n    onClick: PropTypes__default.func,\r\n    onClickAnnotation: PropTypes__default.func,\r\n    // event => void\r\n    onDoubleClick: PropTypes__default.func,\r\n    onMouseMove: PropTypes__default.func,\r\n    onMouseOut: PropTypes__default.func,\r\n    // ({ xSubDomain, transformation }) => void\r\n    onZoomXAxis: PropTypes__default.func,\r\n    areas: PropTypes__default.arrayOf(areaPropType),\r\n    annotations: PropTypes__default.arrayOf(annotationPropType),\r\n    width: PropTypes__default.number.isRequired,\r\n    zoomAxes: GriffPropTypes.zoomAxes.isRequired,\r\n    // These are all populated by Griff.\r\n    series: seriesPropType,\r\n    collections: GriffPropTypes.collections,\r\n    subDomainsByItemId: GriffPropTypes.subDomainsByItemId.isRequired,\r\n};\r\nInteractionLayer.defaultProps = {\r\n    areas: [],\r\n    annotations: [],\r\n    collections: [],\r\n    crosshair: false,\r\n    onAreaDefined: null,\r\n    onAreaClicked: null,\r\n    onClick: null,\r\n    onClickAnnotation: null,\r\n    onDoubleClick: null,\r\n    onMouseMove: null,\r\n    onMouseOut: null,\r\n    onZoomXAxis: null,\r\n    series: [],\r\n    ruler: {\r\n        visible: false,\r\n        timeLabel: function () { },\r\n        yLabel: function () { },\r\n        timestamp: null,\r\n    },\r\n};\r\nvar InteractionLayer$1 = withDisplayName('InteractionLayer', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var collections = _a.collections, series = _a.series, subDomainsByItemId = _a.subDomainsByItemId;\r\n    return (React__default.createElement(InteractionLayer, tslib.__assign({}, props, { collections: collections, series: series, subDomainsByItemId: subDomainsByItemId })));\r\n})); });\n\nvar _a, _b, _c, _d;\r\nvar propTypes$5 = {\r\n    contextChart: PropTypes__default.node,\r\n    lineChart: PropTypes__default.node.isRequired,\r\n    xAxis: PropTypes__default.node.isRequired,\r\n    xAxisPlacement: GriffPropTypes.axisPlacement,\r\n    yAxis: PropTypes__default.node.isRequired,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n};\r\nvar defaultProps$5 = {\r\n    xAxisPlacement: AXIS_PLACEMENTS.BOTTOM,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n    contextChart: null,\r\n};\r\nvar xAxisContainer = function (area) { return function (axis, placement) { return (React__default.createElement(\"div\", { key: area, className: \"x-axis-container\", style: {\r\n        gridArea: area,\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        width: '100%',\r\n    } }, React__default.cloneElement(axis, { placement: placement }))); }; };\r\nvar yAxisContainer = function (area) { return function (axis, placement) { return (React__default.createElement(\"div\", { key: area, className: \"y-axis-container\", style: {\r\n        gridArea: area,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n    } }, React__default.cloneElement(axis, { yAxisPlacement: placement }))); }; };\r\nvar XY_GRIDS = (_a = {},\r\n    _a[AXIS_PLACEMENTS.BOTH] = (_b = {},\r\n        _b[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            '. xaxis-top .',\r\n            'yaxis-left chart yaxis-right',\r\n            '. xaxis-bottom .',\r\n            '. context .',\r\n        ],\r\n        _b[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            '. xaxis-top',\r\n            'yaxis chart',\r\n            '. xaxis-bottom',\r\n            '. context',\r\n        ],\r\n        _b[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'xaxis-top .',\r\n            'chart yaxis',\r\n            'xaxis-bottom .',\r\n            'context .',\r\n        ],\r\n        _b),\r\n    _a[AXIS_PLACEMENTS.BOTTOM] = (_c = {},\r\n        _c[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            'yaxis-left chart yaxis-right',\r\n            '. xaxis .',\r\n            '. context .',\r\n        ],\r\n        _c[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            'yaxis chart',\r\n            '. xaxis',\r\n            '. context',\r\n        ],\r\n        _c[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'chart yaxis',\r\n            'xaxis .',\r\n            'context .',\r\n        ],\r\n        _c),\r\n    _a[AXIS_PLACEMENTS.TOP] = (_d = {},\r\n        _d[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            '. xaxis .',\r\n            'yaxis-left chart yaxis-right',\r\n            '. context .',\r\n        ],\r\n        _d[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            '. xaxis',\r\n            'yaxis chart',\r\n            '. context',\r\n        ],\r\n        _d[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'xaxis .',\r\n            'chart yaxis',\r\n            'context .',\r\n        ],\r\n        _d),\r\n    _a);\r\nvar Layout = function (_a) {\r\n    var contextChart = _a.contextChart, lineChart = _a.lineChart, xAxis = _a.xAxis, xAxisPlacement = _a.xAxisPlacement, yAxis = _a.yAxis, yAxisPlacement = _a.yAxisPlacement;\r\n    var xAxes = [];\r\n    var yAxes = [];\r\n    var areas = (XY_GRIDS[xAxisPlacement][yAxisPlacement] ||\r\n        XY_GRIDS[AXIS_PLACEMENTS.BOTTOM][AXIS_PLACEMENTS.RIGHT])\r\n        .map(function (s) { return \"'\" + s + \"'\"; })\r\n        .join(' ');\r\n    var gridTemplateSpec = function (axisPlacement) {\r\n        switch (axisPlacement) {\r\n            case AXIS_PLACEMENTS.BOTH:\r\n                return 'auto 1fr auto auto';\r\n            case AXIS_PLACEMENTS.LEFT:\r\n            case AXIS_PLACEMENTS.TOP:\r\n                return 'auto 1fr auto';\r\n            default:\r\n                return '1fr auto auto';\r\n        }\r\n    };\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH: {\r\n            yAxes.push(yAxisContainer('yaxis-left')(yAxis, AXIS_PLACEMENTS.LEFT));\r\n            yAxes.push(yAxisContainer('yaxis-right')(yAxis, AXIS_PLACEMENTS.RIGHT));\r\n            break;\r\n        }\r\n        case AXIS_PLACEMENTS.LEFT:\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            yAxes.push(yAxisContainer('yaxis')(yAxis, yAxisPlacement));\r\n            break;\r\n    }\r\n    switch (xAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH: {\r\n            xAxes.push(xAxisContainer('xaxis-top')(xAxis, AXIS_PLACEMENTS.TOP));\r\n            xAxes.push(xAxisContainer('xaxis-bottom')(xAxis, AXIS_PLACEMENTS.BOTTOM));\r\n            break;\r\n        }\r\n        case AXIS_PLACEMENTS.TOP:\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            xAxes.push(xAxisContainer('xaxis')(xAxis, xAxisPlacement));\r\n            break;\r\n    }\r\n    return (React__default.createElement(\"div\", { className: \"linechart-container\", style: {\r\n            display: 'grid',\r\n            gridTemplateAreas: areas,\r\n            gridTemplateRows: gridTemplateSpec(xAxisPlacement),\r\n            gridTemplateColumns: gridTemplateSpec(yAxisPlacement),\r\n            height: '100%',\r\n        } },\r\n        React__default.createElement(\"div\", { className: \"lines-container\", style: {\r\n                gridArea: 'chart',\r\n                display: 'flex',\r\n                flexDirection: 'column',\r\n                height: '100%',\r\n            } }, lineChart),\r\n        yAxes,\r\n        xAxes,\r\n        React__default.createElement(\"div\", { style: { gridArea: 'spacer' } }),\r\n        contextChart && (React__default.createElement(\"div\", { className: \"context-container\", style: {\r\n                gridArea: 'context',\r\n                display: 'flex',\r\n                flexDirection: 'column',\r\n            } }, contextChart))));\r\n};\r\nLayout.propTypes = propTypes$5;\r\nLayout.defaultProps = defaultProps$5;\n\nvar propTypes$6 = {\r\n    // Disable the ESLinter for this because they'll show up from react-sizeme.\r\n    // They'll show up in time, and we set a defaultProp, then react-sizeme\r\n    // doesn't work. So here we go!\r\n    // eslint-disable-next-line react/require-default-props\r\n    size: PropTypes__default.shape({\r\n        width: PropTypes__default.number.isRequired,\r\n        height: PropTypes__default.number.isRequired,\r\n    }),\r\n    width: PropTypes__default.number,\r\n    height: PropTypes__default.number,\r\n    zoomable: PropTypes__default.bool,\r\n    crosshair: PropTypes__default.bool,\r\n    onMouseMove: PropTypes__default.func,\r\n    onMouseOut: PropTypes__default.func,\r\n    onBlur: PropTypes__default.func,\r\n    onClick: PropTypes__default.func,\r\n    // (annotation, x, y) => void\r\n    onClickAnnotation: PropTypes__default.func,\r\n    // event => void\r\n    onDoubleClick: PropTypes__default.func,\r\n    // ({ xSubDomain, transformation }) => void\r\n    onZoomXAxis: PropTypes__default.func,\r\n    xSubDomain: PropTypes__default.arrayOf(PropTypes__default.number),\r\n    xAxisHeight: PropTypes__default.number,\r\n    contextChart: GriffPropTypes.contextChart,\r\n    yAxisTicks: PropTypes__default.number,\r\n    ruler: rulerPropType,\r\n    annotations: PropTypes__default.arrayOf(annotationPropType),\r\n    // Number => String\r\n    yAxisFormatter: PropTypes__default.func,\r\n    xAxisPlacement: GriffPropTypes.axisPlacement,\r\n    yAxisDisplayMode: axisDisplayModeType,\r\n    // (e, seriesId) => void\r\n    onAxisMouseEnter: PropTypes__default.func,\r\n    // (e, seriesId) => void\r\n    onAxisMouseLeave: PropTypes__default.func,\r\n    areas: PropTypes__default.arrayOf(areaPropType),\r\n    /**\r\n     * Pass in a callback function which will be given a defined area when the\r\n     * user creates one. See the definition in proptypes.js for a description of\r\n     * what this object will look like.\r\n     *\r\n     * If this is set, then the chart will not have zooming functionality, because\r\n     * the area definition mechanism (dragging a box with the mouse) conflicts\r\n     * with the panning gesture. If both pieces of functionality are desired, then\r\n     * this should only be set conditionally when the area definition\r\n     * functionality should be enabled.\r\n     */\r\n    // area => null\r\n    onAreaDefined: PropTypes__default.func,\r\n    // (area, xpos, ypos) => shouldContinue\r\n    onAreaClicked: PropTypes__default.func,\r\n    pointWidth: PropTypes__default.number,\r\n    // Number => String\r\n    xAxisFormatter: PropTypes__default.func,\r\n    yAxisWidth: PropTypes__default.number,\r\n    // The following props are all supplied by internals (eg, React).\r\n    children: PropTypes__default.arrayOf(PropTypes__default.node),\r\n};\r\nvar defaultProps$6 = {\r\n    zoomable: true,\r\n    contextChart: {\r\n        visible: true,\r\n        height: 100,\r\n        isDefault: true,\r\n    },\r\n    crosshair: true,\r\n    onMouseMove: null,\r\n    onMouseOut: null,\r\n    onBlur: null,\r\n    onClick: null,\r\n    onClickAnnotation: null,\r\n    onDoubleClick: null,\r\n    onZoomXAxis: null,\r\n    // eslint-disable-next-line react/default-props-match-prop-types\r\n    series: [],\r\n    // eslint-disable-next-line react/default-props-match-prop-types\r\n    collections: [],\r\n    annotations: [],\r\n    ruler: {\r\n        visible: false,\r\n        timeLabel: function () { },\r\n        yLabel: function () { },\r\n        timestamp: null,\r\n    },\r\n    xAxisHeight: 50,\r\n    // eslint-disable-next-line react/default-props-match-prop-types\r\n    yAxisWidth: 50,\r\n    yAxisTicks: null,\r\n    width: 0,\r\n    height: 0,\r\n    xSubDomain: [],\r\n    xAxisFormatter: multiFormat,\r\n    xAxisPlacement: AXIS_PLACEMENTS.BOTTOM,\r\n    yAxisDisplayMode: AXIS_DISPLAY_MODES.ALL,\r\n    yAxisFormatter: Number,\r\n    onAxisMouseEnter: null,\r\n    onAxisMouseLeave: null,\r\n    areas: [],\r\n    onAreaDefined: null,\r\n    onAreaClicked: null,\r\n    pointWidth: 6,\r\n    children: [],\r\n};\r\nvar getXAxisHeight = function (xAxisHeight, xAxisPlacement) {\r\n    switch (xAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            return xAxisHeight * 2;\r\n        case AXIS_PLACEMENTS.TOP:\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            return xAxisHeight;\r\n    }\r\n};\r\nvar getContextChartHeight = function (_a) {\r\n    var contextChart = _a.contextChart, xAxisHeight = _a.xAxisHeight, xAxisPlacement = _a.xAxisPlacement;\r\n    if (!contextChart || contextChart.visible === false || !contextChart.height) {\r\n        // No context chart to show.\r\n        return 0;\r\n    }\r\n    return getXAxisHeight(xAxisHeight, xAxisPlacement) + contextChart.height;\r\n};\r\nvar getYAxisCollectionWidth = function (placement, _a) {\r\n    var collections = _a.collections, series = _a.series, yAxisDisplayMode = _a.yAxisDisplayMode, yAxisPlacement = _a.yAxisPlacement, yAxisWidth = _a.yAxisWidth;\r\n    var displayModeFilter = function (mode) { return function (item) {\r\n        return (item.yAxisDisplayMode || yAxisDisplayMode) === mode;\r\n    }; };\r\n    var filteredItems = []\r\n        .concat(series)\r\n        .concat(collections)\r\n        .filter(function (item) {\r\n        var finalYAxisPlacement = item.yAxisPlacement || yAxisPlacement;\r\n        return (!item.hidden &&\r\n            item.collectionId === undefined &&\r\n            (finalYAxisPlacement === AXIS_PLACEMENTS.BOTH ||\r\n                finalYAxisPlacement === placement));\r\n    });\r\n    var hasCollapsed = filteredItems.filter(displayModeFilter(AXIS_DISPLAY_MODES.COLLAPSED)).length >\r\n        0;\r\n    var isDisplayModeALL = displayModeFilter(AXIS_DISPLAY_MODES.ALL);\r\n    return filteredItems.reduce(function (totalWidth, item) {\r\n        if (!isDisplayModeALL(item)) {\r\n            return totalWidth;\r\n        }\r\n        // COLLAPSED items are already accounted-for with the initial value.\r\n        if (item.yAxisDisplayMode === AXIS_DISPLAY_MODES.COLLAPSED) {\r\n            return totalWidth;\r\n        }\r\n        return totalWidth + yAxisWidth;\r\n    }, hasCollapsed ? yAxisWidth : 0);\r\n};\r\nvar getYAxisPlacement = function (_a) {\r\n    var collections = _a.collections, series = _a.series, yAxisPlacement = _a.yAxisPlacement;\r\n    var yAxisPlacements = []\r\n        .concat(series.filter(function (s) { return s.collectionId === undefined; }))\r\n        .concat(collections)\r\n        .reduce(function (acc, item) {\r\n        var placement = item.yAxisPlacement || yAxisPlacement;\r\n        if (placement) {\r\n            acc[placement] = (acc[placement] || 0) + 1;\r\n        }\r\n        return acc;\r\n    }, {});\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.BOTH]) {\r\n        return AXIS_PLACEMENTS.BOTH;\r\n    }\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.LEFT] &&\r\n        yAxisPlacements[AXIS_PLACEMENTS.RIGHT]) {\r\n        return AXIS_PLACEMENTS.BOTH;\r\n    }\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.LEFT]) {\r\n        return AXIS_PLACEMENTS.LEFT;\r\n    }\r\n    return yAxisPlacement || AXIS_PLACEMENTS.RIGHT;\r\n};\r\nvar LineChart = function (props) {\r\n    var annotations = props.annotations, areas = props.areas, children = props.children, contextChart = props.contextChart, crosshair = props.crosshair, propHeight = props.height, onAreaDefined = props.onAreaDefined, onAreaClicked = props.onAreaClicked, onAxisMouseEnter = props.onAxisMouseEnter, onAxisMouseLeave = props.onAxisMouseLeave, onClick = props.onClick, onZoomXAxis = props.onZoomXAxis, onClickAnnotation = props.onClickAnnotation, onDoubleClick = props.onDoubleClick, onMouseMove = props.onMouseMove, onMouseOut = props.onMouseOut, onBlur = props.onBlur, pointWidth = props.pointWidth, size = props.size, xSubDomain = props.xSubDomain, ruler = props.ruler, propWidth = props.width, xAxisHeight = props.xAxisHeight, xAxisFormatter = props.xAxisFormatter, xAxisPlacement = props.xAxisPlacement, yAxisDisplayMode = props.yAxisDisplayMode, yAxisFormatter = props.yAxisFormatter, yAxisWidth = props.yAxisWidth, yAxisTicks = props.yAxisTicks, zoomable = props.zoomable;\r\n    if (!size) {\r\n        // Can't proceed without a size; just abort until react-sizeme feeds it\r\n        // to the component.\r\n        return null;\r\n    }\r\n    var sizeWidth = size.width, sizeHeight = size.height;\r\n    var width = propWidth || sizeWidth;\r\n    var height = propHeight || sizeHeight;\r\n    var contextChartSpace = getContextChartHeight(props);\r\n    var chartWidth = width -\r\n        getYAxisCollectionWidth(AXIS_PLACEMENTS.LEFT, props) -\r\n        getYAxisCollectionWidth(AXIS_PLACEMENTS.RIGHT, props) -\r\n        getYAxisCollectionWidth(undefined, props);\r\n    var chartHeight = height - getXAxisHeight(xAxisHeight) - contextChartSpace;\r\n    var chartSize = {\r\n        width: Math.max(0, chartWidth),\r\n        height: Math.max(0, chartHeight),\r\n    };\r\n    return (React__default.createElement(Layout, { xAxisPlacement: xAxisPlacement, yAxisPlacement: getYAxisPlacement(props), lineChart: React__default.createElement(\"svg\", { width: chartSize.width, height: chartSize.height },\r\n            React__default.Children.map(children, function (child) {\r\n                var _a;\r\n                var childProps = tslib.__assign(tslib.__assign({}, chartSize), { axes: tslib.__assign(tslib.__assign({}, (child.props || {}).axes), (_a = {}, _a[AXES.x] = ((child.props || {}).axes || {}).x === undefined\r\n                        ? String(AXES.time)\r\n                        : child.props.axes.x, _a)) });\r\n                return React__default.cloneElement(child, childProps);\r\n            }),\r\n            React__default.createElement(LineCollection$1, { height: chartSize.height, width: chartSize.width, pointWidth: pointWidth }),\r\n            // problems for the position of the ruler in InteractionLayer\r\n            chartSize.width > 0 && (React__default.createElement(InteractionLayer$1, { height: chartSize.height, width: chartSize.width, crosshair: crosshair, onMouseMove: onMouseMove, onMouseOut: onMouseOut, onBlur: onBlur, onClickAnnotation: onClickAnnotation, onDoubleClick: onDoubleClick, ruler: ruler, annotations: annotations, onClick: onClick, areas: areas, onAreaDefined: onAreaDefined, onZoomXAxis: onZoomXAxis, onAreaClicked: onAreaClicked, zoomAxes: { time: zoomable } }))), yAxis: React__default.createElement(AxisCollection$1, { zoomable: zoomable, axisDisplayMode: yAxisDisplayMode, onMouseEnter: onAxisMouseEnter, onMouseLeave: onAxisMouseLeave, height: chartSize.height, tickFormatter: yAxisFormatter, yAxisWidth: yAxisWidth, ticks: yAxisTicks }), xAxis: React__default.createElement(XAxis$1, { width: chartWidth, domain: xSubDomain, height: xAxisHeight, placement: xAxisPlacement, tickFormatter: xAxisFormatter }), contextChart: contextChart.visible && (React__default.createElement(ContextChart$1, { width: chartWidth, height: contextChartSpace, zoomable: zoomable, annotations: annotations, xAxisFormatter: xAxisFormatter, xAxisHeight: xAxisHeight, xAxisPlacement: xAxisPlacement })) }));\r\n};\r\nLineChart.propTypes = propTypes$6;\r\nLineChart.defaultProps = defaultProps$6;\r\nvar SizedLineChart = sizeMe__default({ monitorHeight: true })(LineChart);\r\nvar index$1 = withDisplayName('LineChart', function (props) {\r\n    var newProps = tslib.__assign({}, props);\r\n    if (props.size === undefined) {\r\n        delete newProps.size;\r\n    }\r\n    return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n        var collections = _a.collections, series = _a.series;\r\n        return (React__default.createElement(SizedLineChart, tslib.__assign({}, newProps, { collections: collections, series: series })));\r\n    }));\r\n});\n\nvar PointCollection = function (_a) {\r\n    var width = _a.width, height = _a.height, series = _a.series, subDomainsByItemId = _a.subDomainsByItemId;\r\n    var points = series\r\n        .filter(function (s) { return !s.hidden && s.drawPoints !== false; })\r\n        .map(function (s) {\r\n        // TODO: We can't use [s.collectionId || s.id] on the x axis. I'm not\r\n        // entirely sure why; I think it's because the collection's x domain is not\r\n        // correctly calculated to the data's extent. I have not looked into it\r\n        // because it doesn't really matter yet, but it will at some point.\r\n        var xScale = createXScale(AXES.x(subDomainsByItemId[s.id]), width);\r\n        var yScale = createYScale(AXES.y(subDomainsByItemId[s.collectionId || s.id]), height);\r\n        // Only show points which are relevant for the current time subdomain.\r\n        // We don't need to do this for lines because we want lines to be drawn to\r\n        // infinity so that they go to the ends of the graph, but points are special\r\n        // since they can overlap in the [x,y] plane, but not be in the current time\r\n        // subdomain.\r\n        var pointFilter = function (d, i, arr) {\r\n            var timestamp = s.timeAccessor(d, i, arr);\r\n            var subDomain = AXES.time(subDomainsByItemId[s.id]);\r\n            return subDomain[0] <= timestamp && timestamp <= subDomain[1];\r\n        };\r\n        return (React__default.createElement(Points, tslib.__assign({ key: s.id }, s, { xScale: xScale, yScale: yScale, pointFilter: pointFilter })));\r\n    });\r\n    return (React__default.createElement(\"g\", { width: width, height: height },\r\n        React__default.createElement(\"clipPath\", { id: \"scatterplot-clip-path-\" + series.map(function (s) { return s.id; }).join('-') },\r\n            React__default.createElement(\"rect\", { width: width, height: height, fill: \"none\" })),\r\n        points));\r\n};\r\nvar PointCollection$1 = withDisplayName('PointCollection', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var subDomainsByItemId = _a.subDomainsByItemId, series = _a.series;\r\n    return (React__default.createElement(PointCollection, tslib.__assign({}, props, { series: series, subDomainsByItemId: subDomainsByItemId })));\r\n})); });\n\nvar _a$1, _b$1, _c$1, _d$1;\r\nvar propTypes$7 = {\r\n    chart: PropTypes__default.node.isRequired,\r\n    xAxis: PropTypes__default.node.isRequired,\r\n    xAxisPlacement: GriffPropTypes.axisPlacement,\r\n    yAxis: PropTypes__default.node.isRequired,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n};\r\nvar defaultProps$7 = {\r\n    xAxisPlacement: AXIS_PLACEMENTS.BOTTOM,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n};\r\nvar xAxisContainer$1 = function (area) { return function (axis, placement) { return (React__default.createElement(\"div\", { key: area, className: \"x-axis-container\", style: {\r\n        gridArea: area,\r\n        display: 'flex',\r\n        flexDirection: 'row',\r\n        width: '100%',\r\n    } }, React__default.cloneElement(axis, { placement: placement }))); }; };\r\nvar yAxisContainer$1 = function (area) { return function (axis, placement) { return (React__default.createElement(\"div\", { key: area, className: \"y-axis-container\", style: {\r\n        gridArea: area,\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n    } }, React__default.cloneElement(axis, { yAxisPlacement: placement }))); }; };\r\nvar XY_GRIDS$1 = (_a$1 = {},\r\n    _a$1[AXIS_PLACEMENTS.BOTH] = (_b$1 = {},\r\n        _b$1[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            '. xaxis-top .',\r\n            'yaxis-left chart yaxis-right',\r\n            '. xaxis-bottom .',\r\n        ],\r\n        _b$1[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            '. xaxis-top',\r\n            'yaxis chart',\r\n            '. xaxis-bottom',\r\n        ],\r\n        _b$1[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'xaxis-top .',\r\n            'chart yaxis',\r\n            'xaxis-bottom .',\r\n        ],\r\n        _b$1),\r\n    _a$1[AXIS_PLACEMENTS.BOTTOM] = (_c$1 = {},\r\n        _c$1[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            'yaxis-left chart yaxis-right',\r\n            '. xaxis .',\r\n        ],\r\n        _c$1[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            'yaxis chart',\r\n            '. xaxis',\r\n        ],\r\n        _c$1[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'chart yaxis',\r\n            'xaxis .',\r\n        ],\r\n        _c$1),\r\n    _a$1[AXIS_PLACEMENTS.TOP] = (_d$1 = {},\r\n        _d$1[AXIS_PLACEMENTS.BOTH] = [\r\n            // formatting for readability\r\n            '. xaxis .',\r\n            'yaxis-left chart yaxis-right',\r\n        ],\r\n        _d$1[AXIS_PLACEMENTS.LEFT] = [\r\n            // formatting for readability\r\n            '. xaxis',\r\n            'yaxis chart',\r\n        ],\r\n        _d$1[AXIS_PLACEMENTS.RIGHT] = [\r\n            // formatting for readability\r\n            'xaxis .',\r\n            'chart yaxis',\r\n        ],\r\n        _d$1),\r\n    _a$1);\r\nvar Layout$1 = function (_a) {\r\n    var chart = _a.chart, xAxis = _a.xAxis, xAxisPlacement = _a.xAxisPlacement, yAxis = _a.yAxis, yAxisPlacement = _a.yAxisPlacement;\r\n    var xAxes = [];\r\n    var yAxes = [];\r\n    var areas = (XY_GRIDS$1[xAxisPlacement][yAxisPlacement] ||\r\n        XY_GRIDS$1[AXIS_PLACEMENTS.BOTTOM][AXIS_PLACEMENTS.RIGHT])\r\n        .map(function (s) { return \"'\" + s + \"'\"; })\r\n        .join(' ');\r\n    var gridTemplateSpec = function (axisPlacement) {\r\n        switch (axisPlacement) {\r\n            case AXIS_PLACEMENTS.BOTH:\r\n                return 'auto 1fr auto';\r\n            case AXIS_PLACEMENTS.LEFT:\r\n            case AXIS_PLACEMENTS.TOP:\r\n                return 'auto 1fr';\r\n            default:\r\n                return '1fr auto';\r\n        }\r\n    };\r\n    switch (yAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH: {\r\n            yAxes.push(yAxisContainer$1('yaxis-left')(yAxis, AXIS_PLACEMENTS.LEFT));\r\n            yAxes.push(yAxisContainer$1('yaxis-right')(yAxis, AXIS_PLACEMENTS.RIGHT));\r\n            break;\r\n        }\r\n        case AXIS_PLACEMENTS.LEFT:\r\n        case AXIS_PLACEMENTS.RIGHT:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            yAxes.push(yAxisContainer$1('yaxis')(yAxis, yAxisPlacement));\r\n            break;\r\n    }\r\n    switch (xAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH: {\r\n            xAxes.push(xAxisContainer$1('xaxis-top')(xAxis, AXIS_PLACEMENTS.TOP));\r\n            xAxes.push(xAxisContainer$1('xaxis-bottom')(xAxis, AXIS_PLACEMENTS.BOTTOM));\r\n            break;\r\n        }\r\n        case AXIS_PLACEMENTS.TOP:\r\n        case AXIS_PLACEMENTS.BOTTOM:\r\n        case AXIS_PLACEMENTS.UNSPECIFIED:\r\n        default:\r\n            xAxes.push(xAxisContainer$1('xaxis')(xAxis, xAxisPlacement));\r\n            break;\r\n    }\r\n    return (React__default.createElement(\"div\", { className: \"scatterplot-container\", style: {\r\n            display: 'grid',\r\n            gridTemplateAreas: areas,\r\n            gridTemplateColumns: gridTemplateSpec(yAxisPlacement),\r\n            gridTemplateRows: gridTemplateSpec(xAxisPlacement),\r\n            height: '100%',\r\n        } },\r\n        React__default.createElement(\"div\", { className: \"chart-container\", style: { gridArea: 'chart', height: '100%' } }, chart),\r\n        yAxes,\r\n        xAxes));\r\n};\r\nLayout$1.propTypes = propTypes$7;\r\nLayout$1.defaultProps = defaultProps$7;\n\nvar propTypes$8 = {\r\n    size: PropTypes__default.shape({\r\n        width: PropTypes__default.number.isRequired,\r\n        height: PropTypes__default.number.isRequired,\r\n    }).isRequired,\r\n    zoomable: PropTypes__default.bool,\r\n    onClick: PropTypes__default.func,\r\n    // Number => String\r\n    xAxisFormatter: PropTypes__default.func,\r\n    xAxisPlacement: GriffPropTypes.axisPlacement,\r\n    xAxisTicks: PropTypes__default.number,\r\n    // Number => String\r\n    yAxisFormatter: PropTypes__default.func,\r\n    yAxisPlacement: GriffPropTypes.axisPlacement,\r\n    yAxisTicks: PropTypes__default.number,\r\n    collections: GriffPropTypes.collections.isRequired,\r\n    series: seriesPropType.isRequired,\r\n    xAxisHeight: PropTypes__default.number,\r\n    yAxisWidth: PropTypes__default.number,\r\n    // The following props are all supplied internally (eg, by React).\r\n    children: PropTypes__default.arrayOf(PropTypes__default.node),\r\n};\r\nvar defaultProps$8 = {\r\n    zoomable: true,\r\n    onClick: null,\r\n    xAxisFormatter: Number,\r\n    xAxisPlacement: AXIS_PLACEMENTS.BOTTOM,\r\n    xAxisTicks: null,\r\n    yAxisFormatter: Number,\r\n    yAxisPlacement: AXIS_PLACEMENTS.RIGHT,\r\n    yAxisTicks: null,\r\n    xAxisHeight: 50,\r\n    yAxisWidth: 50,\r\n    children: [],\r\n};\r\nvar getYAxisPlacement$1 = function (_a) {\r\n    var collections = _a.collections, series = _a.series, yAxisPlacement = _a.yAxisPlacement;\r\n    var yAxisPlacements = series\r\n        .filter(function (s) { return s.collectionId === undefined; })\r\n        .concat(collections)\r\n        .reduce(function (acc, item) {\r\n        var placement = item.yAxisPlacement || yAxisPlacement;\r\n        if (placement) {\r\n            acc[placement] = (acc[placement] || 0) + 1;\r\n        }\r\n        return acc;\r\n    }, {});\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.BOTH]) {\r\n        return AXIS_PLACEMENTS.BOTH;\r\n    }\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.LEFT] &&\r\n        yAxisPlacements[AXIS_PLACEMENTS.RIGHT]) {\r\n        return AXIS_PLACEMENTS.BOTH;\r\n    }\r\n    if (yAxisPlacements[AXIS_PLACEMENTS.LEFT]) {\r\n        return AXIS_PLACEMENTS.LEFT;\r\n    }\r\n    return yAxisPlacement || AXIS_PLACEMENTS.RIGHT;\r\n};\r\nvar ScatterplotComponent = function (_a) {\r\n    var children = _a.children, collections = _a.collections, series = _a.series, _b = _a.size, width = _b.width, height = _b.height, zoomable = _a.zoomable, onClick = _a.onClick, xAxisFormatter = _a.xAxisFormatter, xAxisPlacement = _a.xAxisPlacement, xAxisTicks = _a.xAxisTicks, yAxisFormatter = _a.yAxisFormatter, propsYAxisPlacement = _a.yAxisPlacement, yAxisTicks = _a.yAxisTicks, xAxisHeight = _a.xAxisHeight, yAxisWidth = _a.yAxisWidth;\r\n    var chartSize = {\r\n        width: width,\r\n        height: height,\r\n    };\r\n    var collectionVisibility = collections.reduce(function (acc, c) {\r\n        var _a;\r\n        return (tslib.__assign(tslib.__assign({}, acc), (_a = {}, _a[c.id] = !c.hidden && c.yAxisDisplayMode !== AXIS_DISPLAY_MODES.NONE, _a)));\r\n    }, {});\r\n    var seriesVisibility = series.reduce(function (acc, s) {\r\n        var _a;\r\n        return (tslib.__assign(tslib.__assign({}, acc), (_a = {}, _a[s.id] = \r\n        // If it's hidden, it won't have an axis.\r\n        !s.hidden &&\r\n            // If it has a non-hidden axis, it will not have an axis.\r\n            s.yAxisDisplayMode !== AXIS_DISPLAY_MODES.NONE &&\r\n            // If it's in a collection, it gets special behavior ...\r\n            ((s.collectionId &&\r\n                // If it's in an unknown collection, it will have an axis.\r\n                collectionVisibility[s.collectionId] === undefined) ||\r\n                // And if it's not in a collection, it gets its own axis\r\n                s.collectionId === undefined), _a)));\r\n    }, {});\r\n    var visibleAxes = Object.values(seriesVisibility)\r\n        .concat(Object.values(collectionVisibility))\r\n        .filter(Boolean).length;\r\n    var yAxisPlacement = getYAxisPlacement$1({\r\n        collections: collections,\r\n        series: series,\r\n        yAxisPlacement: propsYAxisPlacement,\r\n    });\r\n    chartSize.width -= visibleAxes * yAxisWidth;\r\n    switch (xAxisPlacement) {\r\n        case AXIS_PLACEMENTS.BOTH:\r\n            chartSize.height -= 2 * xAxisHeight;\r\n            break;\r\n        default:\r\n            chartSize.height -= xAxisHeight;\r\n            break;\r\n    }\r\n    return (React__default.createElement(Layout$1, { chart: React__default.createElement(\"svg\", { style: { width: '100%', height: '100%' } },\r\n            React__default.Children.map(children, function (child) {\r\n                var _a;\r\n                var childProps = tslib.__assign(tslib.__assign({}, chartSize), { axes: tslib.__assign(tslib.__assign({}, (child.props || {}).axes), (_a = {}, _a[AXES.x] = ((child.props || {}).axes || {}).x === undefined\r\n                        ? String(AXES.x)\r\n                        : child.props.axes.x, _a)) });\r\n                return React__default.cloneElement(child, childProps);\r\n            }),\r\n            React__default.createElement(PointCollection$1, tslib.__assign({}, chartSize)),\r\n            React__default.createElement(LineCollection$1, tslib.__assign({}, chartSize, { series: series.filter(function (s) { return !!s.drawLines; }), xAxis: AXES.x })),\r\n            React__default.createElement(InteractionLayer$1, tslib.__assign({}, chartSize, { onClick: onClick, zoomMode: ZoomMode.BOTH, zoomAxes: { x: zoomable, y: zoomable } }))), yAxis: React__default.createElement(AxisCollection$1, { tickFormatter: yAxisFormatter, yAxisPlacement: yAxisPlacement, height: chartSize.height, yAxisWidth: yAxisWidth, ticks: yAxisTicks }), xAxis: React__default.createElement(XAxis$1, { width: chartSize.width, height: xAxisHeight, tickFormatter: xAxisFormatter, ticks: xAxisTicks, axis: AXES.x }), xAxisPlacement: xAxisPlacement, yAxisPlacement: yAxisPlacement }));\r\n};\r\nScatterplotComponent.propTypes = propTypes$8;\r\nScatterplotComponent.defaultProps = defaultProps$8;\r\nvar SizedScatterplotComponent = sizeMe__default({\r\n    monitorHeight: true,\r\n})(ScatterplotComponent);\r\nvar index$2 = withDisplayName('Scatterplot', function (props) { return (React__default.createElement(ScalerContext.Consumer, null, function (_a) {\r\n    var collections = _a.collections, series = _a.series;\r\n    return (React__default.createElement(SizedScatterplotComponent, tslib.__assign({}, props, { collections: collections, series: series })));\r\n})); });\n\nexports.AxisDisplayMode = AXIS_DISPLAY_MODES;\nexports.AxisPlacement = AXIS_PLACEMENTS;\nexports.Brush = Brush;\nexports.Collection = Collection$1;\nexports.ContextChart = ContextChart$1;\nexports.DataProvider = DataProvider;\nexports.GridLines = index;\nexports.GriffPropTypes = GriffPropTypes;\nexports.Line = Line;\nexports.LineChart = index$1;\nexports.ScalerContext = ScalerContext;\nexports.Scatterplot = index$2;\nexports.Series = Series$1;\nexports.XAxis = XAxis$1;\n"]}