{"version":3,"file":"static/js/4543.737bf734.js","mappings":"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","sources":["../node_modules/plotly.js/src/components/dragelement/unhover.js","../node_modules/plotly.js/src/components/modebar/defaults.js","../node_modules/plotly.js/src/components/drawing/attributes.js","../node_modules/plotly.js/src/components/dragelement/helpers.js","../node_modules/plotly.js/src/components/drawing/index.js","../node_modules/plotly.js/src/components/colorscale/attributes.js","../node_modules/plotly.js/src/components/color/index.js","../node_modules/plotly.js/src/components/images/defaults.js","../node_modules/plotly.js/src/components/colorbar/draw.js","../node_modules/plotly.js/src/components/colorscale/layout_attributes.js","../node_modules/plotly.js/src/components/annotations/click.js","../node_modules/plotly.js/src/components/legend/defaults.js","../node_modules/plotly.js/src/components/legend/helpers.js","../node_modules/plotly.js/src/components/fx/hover.js","../node_modules/plotly.js/src/components/colorbar/has_colorbar.js","../node_modules/plotly.js/src/components/colorscale/layout_defaults.js","../node_modules/plotly.js/src/components/annotations/draw.js","../node_modules/plotly.js/src/components/fx/hoverlabel_defaults.js","../node_modules/plotly.js/src/components/images/convert_coords.js","../node_modules/plotly.js/src/components/errorbars/index.js","../node_modules/plotly.js/src/components/images/attributes.js","../node_modules/plotly.js/src/components/colorscale/defaults.js","../node_modules/plotly.js/src/components/annotations3d/draw.js","../node_modules/plotly.js/src/components/modebar/modebar.js","../node_modules/plotly.js/src/components/dragelement/align.js","../node_modules/plotly.js/src/components/color/attributes.js","../node_modules/plotly.js/lib/box.js","../node_modules/plotly.js/lib/pie.js","../node_modules/plotly.js/src/components/colorbar/constants.js","../node_modules/plotly.js/src/components/fx/attributes.js","../node_modules/plotly.js/src/components/dragelement/index.js","../node_modules/plotly.js/src/components/errorbars/calc.js","../node_modules/plotly.js/src/components/annotations3d/convert.js","../node_modules/plotly.js/src/components/colorscale/scales.js","../node_modules/plotly.js/src/components/legend/attributes.js","../node_modules/plotly.js/src/components/colorbar/attributes.js","../node_modules/plotly.js/src/components/fx/index.js","../node_modules/plotly.js/src/components/annotations/arrow_paths.js","../node_modules/plotly.js/src/components/dragelement/cursor.js","../node_modules/plotly.js/src/components/annotations/attributes.js","../node_modules/plotly.js/src/components/annotations/index.js","../node_modules/plotly.js/src/components/colorscale/index.js","../node_modules/plotly.js/src/components/grid/index.js","../node_modules/plotly.js/src/components/fx/layout_global_defaults.js","../node_modules/plotly.js/src/components/legend/style.js","../node_modules/plotly.js/src/components/errorbars/plot.js","../node_modules/plotly.js/src/components/fx/calc.js","../node_modules/plotly.js/lib/bar.js","../node_modules/plotly.js/src/components/annotations3d/index.js","../node_modules/plotly.js/src/components/drawing/symbol_defs.js","../node_modules/plotly.js/build/plotcss.js","../node_modules/plotly.js/src/components/modebar/buttons.js","../node_modules/plotly.js/src/components/annotations3d/defaults.js","../node_modules/plotly.js/src/components/fx/defaults.js","../node_modules/plotly.js/src/components/errorbars/compute_error.js","../node_modules/plotly.js/src/components/legend/index.js","../node_modules/plotly.js/src/components/annotations/convert_coords.js","../node_modules/plotly.js/src/components/colorbar/index.js","../node_modules/plotly.js/lib/heatmap.js","../node_modules/plotly.js/src/components/images/draw.js","../node_modules/plotly.js/src/components/annotations/common_defaults.js","../node_modules/plotly.js/src/components/modebar/constants.js","../node_modules/plotly.js/src/components/fx/hovermode_defaults.js","../node_modules/plotly.js/src/components/colorscale/helpers.js","../node_modules/plotly.js/src/components/annotations/calc_autorange.js","../node_modules/plotly.js/src/components/legend/constants.js","../node_modules/plotly.js/lib/core.js","../node_modules/plotly.js/src/components/errorbars/style.js","../node_modules/plotly.js/src/components/legend/get_legend_data.js","../node_modules/plotly.js/src/components/fx/layout_defaults.js","../node_modules/plotly.js/src/components/legend/draw.js","../node_modules/plotly.js/src/components/errorbars/attributes.js","../node_modules/plotly.js/src/components/modebar/manage.js","../node_modules/plotly.js/src/components/fx/helpers.js","../node_modules/plotly.js/src/components/modebar/attributes.js","../node_modules/plotly.js/src/components/fx/click.js","../node_modules/plotly.js/src/components/errorbars/defaults.js","../node_modules/plotly.js/src/components/annotations/defaults.js","../node_modules/plotly.js/src/components/images/index.js","../node_modules/plotly.js/src/components/annotations3d/attributes.js","../node_modules/plotly.js/src/components/colorscale/cross_trace_defaults.js","../node_modules/plotly.js/src/components/modebar/index.js","../node_modules/plotly.js/src/components/colorscale/calc.js","../node_modules/plotly.js/src/components/legend/handle_click.js","../node_modules/plotly.js/src/components/fx/layout_attributes.js","../node_modules/plotly.js/src/components/colorbar/defaults.js","../node_modules/plotly.js/src/components/annotations/draw_arrow_head.js","../node_modules/plotly.js/src/components/fx/constants.js"],"sourcesContent":["'use strict';\n\nvar Events = require('../../lib/events');\nvar throttle = require('../../lib/throttle');\nvar getGraphDiv = require('../../lib/dom').getGraphDiv;\n\nvar hoverConstants = require('../fx/constants');\n\nvar unhover = module.exports = {};\n\nunhover.wrapped = function(gd, evt, subplot) {\n gd = getGraphDiv(gd);\n\n // Important, clear any queued hovers\n if(gd._fullLayout) {\n throttle.clear(gd._fullLayout._uid + hoverConstants.HOVERID);\n }\n\n unhover.raw(gd, evt, subplot);\n};\n\n\n// remove hover effects on mouse out, and emit unhover event\nunhover.raw = function raw(gd, evt) {\n var fullLayout = gd._fullLayout;\n var oldhoverdata = gd._hoverdata;\n\n if(!evt) evt = {};\n if(evt.target && !gd._dragged &&\n Events.triggerHandler(gd, 'plotly_beforehover', evt) === false) {\n return;\n }\n\n fullLayout._hoverlayer.selectAll('g').remove();\n fullLayout._hoverlayer.selectAll('line').remove();\n fullLayout._hoverlayer.selectAll('circle').remove();\n gd._hoverdata = undefined;\n\n if(evt.target && oldhoverdata) {\n gd.emit('plotly_unhover', {\n event: evt,\n points: oldhoverdata\n });\n }\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Color = require('../color');\nvar Template = require('../../plot_api/plot_template');\nvar attributes = require('./attributes');\n\nmodule.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {\n var containerIn = layoutIn.modebar || {};\n var containerOut = Template.newContainer(layoutOut, 'modebar');\n\n function coerce(attr, dflt) {\n return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);\n }\n\n coerce('orientation');\n coerce('bgcolor', Color.addOpacity(layoutOut.paper_bgcolor, 0.5));\n var defaultColor = Color.contrast(Color.rgb(layoutOut.modebar.bgcolor));\n coerce('color', Color.addOpacity(defaultColor, 0.3));\n coerce('activecolor', Color.addOpacity(defaultColor, 0.7));\n coerce('uirevision', layoutOut.uirevision);\n coerce('add');\n coerce('remove');\n};\n","'use strict';\n\nexports.dash = {\n valType: 'string',\n // string type usually doesn't take values... this one should really be\n // a special type or at least a special coercion function, from the GUI\n // you only get these values but elsewhere the user can supply a list of\n // dash lengths in px, and it will be honored\n values: ['solid', 'dot', 'dash', 'longdash', 'dashdot', 'longdashdot'],\n dflt: 'solid',\n editType: 'style',\n description: [\n 'Sets the dash style of lines. Set to a dash type string',\n '(*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*)',\n 'or a dash length list in px (eg *5px,10px,2px,2px*).'\n ].join(' ')\n};\n\nexports.pattern = {\n shape: {\n valType: 'enumerated',\n values: ['', '/', '\\\\', 'x', '-', '|', '+', '.'],\n dflt: '',\n arrayOk: true,\n editType: 'style',\n description: [\n 'Sets the shape of the pattern fill.',\n 'By default, no pattern is used for filling the area.',\n ].join(' ')\n },\n fillmode: {\n valType: 'enumerated',\n values: ['replace', 'overlay'],\n dflt: 'replace',\n editType: 'style',\n description: [\n 'Determines whether `marker.color` should be used',\n 'as a default to `bgcolor` or a `fgcolor`.'\n ].join(' ')\n },\n bgcolor: {\n valType: 'color',\n arrayOk: true,\n editType: 'style',\n description: [\n 'When there is no colorscale sets the color of background pattern fill.',\n 'Defaults to a `marker.color` background when `fillmode` is *overlay*.',\n 'Otherwise, defaults to a transparent background.'\n ].join(' ')\n },\n fgcolor: {\n valType: 'color',\n arrayOk: true,\n editType: 'style',\n description: [\n 'When there is no colorscale sets the color of foreground pattern fill.',\n 'Defaults to a `marker.color` background when `fillmode` is *replace*.',\n 'Otherwise, defaults to dark grey or white',\n 'to increase contrast with the `bgcolor`.',\n ].join(' ')\n },\n fgopacity: {\n valType: 'number',\n editType: 'style',\n min: 0,\n max: 1,\n description: [\n 'Sets the opacity of the foreground pattern fill.',\n 'Defaults to a 0.5 when `fillmode` is *overlay*.',\n 'Otherwise, defaults to 1.'\n ].join(' ')\n },\n size: {\n valType: 'number',\n min: 0,\n dflt: 8,\n arrayOk: true,\n editType: 'style',\n description: [\n 'Sets the size of unit squares of the pattern fill in pixels,',\n 'which corresponds to the interval of repetition of the pattern.',\n ].join(' ')\n },\n solidity: {\n valType: 'number',\n min: 0,\n max: 1,\n dflt: 0.3,\n arrayOk: true,\n editType: 'style',\n description: [\n 'Sets the solidity of the pattern fill.',\n 'Solidity is roughly the fraction of the area filled by the pattern.',\n 'Solidity of 0 shows only the background color without pattern',\n 'and solidty of 1 shows only the foreground color without pattern.',\n ].join(' ')\n },\n editType: 'style',\n description: [\n 'Sets the pattern within the marker.'\n ].join(' '),\n};\n","'use strict';\n\nexports.selectMode = function(dragmode) {\n return (\n dragmode === 'lasso' ||\n dragmode === 'select'\n );\n};\n\nexports.drawMode = function(dragmode) {\n return (\n dragmode === 'drawclosedpath' ||\n dragmode === 'drawopenpath' ||\n dragmode === 'drawline' ||\n dragmode === 'drawrect' ||\n dragmode === 'drawcircle'\n );\n};\n\nexports.openMode = function(dragmode) {\n return (\n dragmode === 'drawline' ||\n dragmode === 'drawopenpath'\n );\n};\n\nexports.rectMode = function(dragmode) {\n return (\n dragmode === 'select' ||\n dragmode === 'drawline' ||\n dragmode === 'drawrect' ||\n dragmode === 'drawcircle'\n );\n};\n\nexports.freeMode = function(dragmode) {\n return (\n dragmode === 'lasso' ||\n dragmode === 'drawclosedpath' ||\n dragmode === 'drawopenpath'\n );\n};\n\nexports.selectingOrDrawing = function(dragmode) {\n return (\n exports.freeMode(dragmode) ||\n exports.rectMode(dragmode)\n );\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar Lib = require('../../lib');\nvar numberFormat = Lib.numberFormat;\nvar isNumeric = require('fast-isnumeric');\nvar tinycolor = require('tinycolor2');\n\nvar Registry = require('../../registry');\nvar Color = require('../color');\nvar Colorscale = require('../colorscale');\nvar strTranslate = Lib.strTranslate;\nvar svgTextUtils = require('../../lib/svg_text_utils');\n\nvar xmlnsNamespaces = require('../../constants/xmlns_namespaces');\nvar alignment = require('../../constants/alignment');\nvar LINE_SPACING = alignment.LINE_SPACING;\nvar DESELECTDIM = require('../../constants/interactions').DESELECTDIM;\n\nvar subTypes = require('../../traces/scatter/subtypes');\nvar makeBubbleSizeFn = require('../../traces/scatter/make_bubble_size_func');\nvar appendArrayPointValue = require('../../components/fx/helpers').appendArrayPointValue;\n\nvar drawing = module.exports = {};\n\n// -----------------------------------------------------\n// styling functions for plot elements\n// -----------------------------------------------------\n\ndrawing.font = function(s, family, size, color) {\n // also allow the form font(s, {family, size, color})\n if(Lib.isPlainObject(family)) {\n color = family.color;\n size = family.size;\n family = family.family;\n }\n if(family) s.style('font-family', family);\n if(size + 1) s.style('font-size', size + 'px');\n if(color) s.call(Color.fill, color);\n};\n\n/*\n * Positioning helpers\n * Note: do not use `setPosition` with nodes modified by\n * `svgTextUtils.convertToTspans`. Use `svgTextUtils.positionText`\n * instead, so that elements get updated to match.\n */\ndrawing.setPosition = function(s, x, y) { s.attr('x', x).attr('y', y); };\ndrawing.setSize = function(s, w, h) { s.attr('width', w).attr('height', h); };\ndrawing.setRect = function(s, x, y, w, h) {\n s.call(drawing.setPosition, x, y).call(drawing.setSize, w, h);\n};\n\n/** Translate node\n *\n * @param {object} d : calcdata point item\n * @param {sel} sel : d3 selction of node to translate\n * @param {object} xa : corresponding full xaxis object\n * @param {object} ya : corresponding full yaxis object\n *\n * @return {boolean} :\n * true if selection got translated\n * false if selection could not get translated\n */\ndrawing.translatePoint = function(d, sel, xa, ya) {\n var x = xa.c2p(d.x);\n var y = ya.c2p(d.y);\n\n if(isNumeric(x) && isNumeric(y) && sel.node()) {\n // for multiline text this works better\n if(sel.node().nodeName === 'text') {\n sel.attr('x', x).attr('y', y);\n } else {\n sel.attr('transform', strTranslate(x, y));\n }\n } else {\n return false;\n }\n\n return true;\n};\n\ndrawing.translatePoints = function(s, xa, ya) {\n s.each(function(d) {\n var sel = d3.select(this);\n drawing.translatePoint(d, sel, xa, ya);\n });\n};\n\ndrawing.hideOutsideRangePoint = function(d, sel, xa, ya, xcalendar, ycalendar) {\n sel.attr(\n 'display',\n (xa.isPtWithinRange(d, xcalendar) && ya.isPtWithinRange(d, ycalendar)) ? null : 'none'\n );\n};\n\ndrawing.hideOutsideRangePoints = function(traceGroups, subplot) {\n if(!subplot._hasClipOnAxisFalse) return;\n\n var xa = subplot.xaxis;\n var ya = subplot.yaxis;\n\n traceGroups.each(function(d) {\n var trace = d[0].trace;\n var xcalendar = trace.xcalendar;\n var ycalendar = trace.ycalendar;\n var selector = Registry.traceIs(trace, 'bar-like') ? '.bartext' : '.point,.textpoint';\n\n traceGroups.selectAll(selector).each(function(d) {\n drawing.hideOutsideRangePoint(d, d3.select(this), xa, ya, xcalendar, ycalendar);\n });\n });\n};\n\ndrawing.crispRound = function(gd, lineWidth, dflt) {\n // for lines that disable antialiasing we want to\n // make sure the width is an integer, and at least 1 if it's nonzero\n\n if(!lineWidth || !isNumeric(lineWidth)) return dflt || 0;\n\n // but not for static plots - these don't get antialiased anyway.\n if(gd._context.staticPlot) return lineWidth;\n\n if(lineWidth < 1) return 1;\n return Math.round(lineWidth);\n};\n\ndrawing.singleLineStyle = function(d, s, lw, lc, ld) {\n s.style('fill', 'none');\n var line = (((d || [])[0] || {}).trace || {}).line || {};\n var lw1 = lw || line.width || 0;\n var dash = ld || line.dash || '';\n\n Color.stroke(s, lc || line.color);\n drawing.dashLine(s, dash, lw1);\n};\n\ndrawing.lineGroupStyle = function(s, lw, lc, ld) {\n s.style('fill', 'none')\n .each(function(d) {\n var line = (((d || [])[0] || {}).trace || {}).line || {};\n var lw1 = lw || line.width || 0;\n var dash = ld || line.dash || '';\n\n d3.select(this)\n .call(Color.stroke, lc || line.color)\n .call(drawing.dashLine, dash, lw1);\n });\n};\n\ndrawing.dashLine = function(s, dash, lineWidth) {\n lineWidth = +lineWidth || 0;\n\n dash = drawing.dashStyle(dash, lineWidth);\n\n s.style({\n 'stroke-dasharray': dash,\n 'stroke-width': lineWidth + 'px'\n });\n};\n\ndrawing.dashStyle = function(dash, lineWidth) {\n lineWidth = +lineWidth || 1;\n var dlw = Math.max(lineWidth, 3);\n\n if(dash === 'solid') dash = '';\n else if(dash === 'dot') dash = dlw + 'px,' + dlw + 'px';\n else if(dash === 'dash') dash = (3 * dlw) + 'px,' + (3 * dlw) + 'px';\n else if(dash === 'longdash') dash = (5 * dlw) + 'px,' + (5 * dlw) + 'px';\n else if(dash === 'dashdot') {\n dash = (3 * dlw) + 'px,' + dlw + 'px,' + dlw + 'px,' + dlw + 'px';\n } else if(dash === 'longdashdot') {\n dash = (5 * dlw) + 'px,' + (2 * dlw) + 'px,' + dlw + 'px,' + (2 * dlw) + 'px';\n }\n // otherwise user wrote the dasharray themselves - leave it be\n\n return dash;\n};\n\nfunction setFillStyle(sel, trace, gd) {\n var markerPattern = trace.fillpattern;\n var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');\n if(patternShape) {\n var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);\n var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);\n var patternFGOpacity = markerPattern.fgopacity;\n var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);\n var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);\n var patternID = trace.uid;\n drawing.pattern(sel, 'point', gd, patternID,\n patternShape, patternSize, patternSolidity,\n undefined, markerPattern.fillmode,\n patternBGColor, patternFGColor, patternFGOpacity\n );\n } else if(trace.fillcolor) {\n sel.call(Color.fill, trace.fillcolor);\n }\n}\n\n// Same as fillGroupStyle, except in this case the selection may be a transition\ndrawing.singleFillStyle = function(sel, gd) {\n var node = d3.select(sel.node());\n var data = node.data();\n var trace = ((data[0] || [])[0] || {}).trace || {};\n setFillStyle(sel, trace, gd);\n};\n\ndrawing.fillGroupStyle = function(s, gd) {\n s.style('stroke-width', 0)\n .each(function(d) {\n var shape = d3.select(this);\n // N.B. 'd' won't be a calcdata item when\n // fill !== 'none' on a segment-less and marker-less trace\n if(d[0].trace) {\n setFillStyle(shape, d[0].trace, gd);\n }\n });\n};\n\nvar SYMBOLDEFS = require('./symbol_defs');\n\ndrawing.symbolNames = [];\ndrawing.symbolFuncs = [];\ndrawing.symbolBackOffs = [];\ndrawing.symbolNeedLines = {};\ndrawing.symbolNoDot = {};\ndrawing.symbolNoFill = {};\ndrawing.symbolList = [];\n\nObject.keys(SYMBOLDEFS).forEach(function(k) {\n var symDef = SYMBOLDEFS[k];\n var n = symDef.n;\n drawing.symbolList.push(\n n,\n String(n),\n k,\n\n n + 100,\n String(n + 100),\n k + '-open'\n );\n drawing.symbolNames[n] = k;\n drawing.symbolFuncs[n] = symDef.f;\n drawing.symbolBackOffs[n] = symDef.backoff || 0;\n\n if(symDef.needLine) {\n drawing.symbolNeedLines[n] = true;\n }\n if(symDef.noDot) {\n drawing.symbolNoDot[n] = true;\n } else {\n drawing.symbolList.push(\n n + 200,\n String(n + 200),\n k + '-dot',\n\n n + 300,\n String(n + 300),\n k + '-open-dot'\n );\n }\n if(symDef.noFill) {\n drawing.symbolNoFill[n] = true;\n }\n});\n\nvar MAXSYMBOL = drawing.symbolNames.length;\n// add a dot in the middle of the symbol\nvar DOTPATH = 'M0,0.5L0.5,0L0,-0.5L-0.5,0Z';\n\ndrawing.symbolNumber = function(v) {\n if(isNumeric(v)) {\n v = +v;\n } else if(typeof v === 'string') {\n var vbase = 0;\n if(v.indexOf('-open') > 0) {\n vbase = 100;\n v = v.replace('-open', '');\n }\n if(v.indexOf('-dot') > 0) {\n vbase += 200;\n v = v.replace('-dot', '');\n }\n v = drawing.symbolNames.indexOf(v);\n if(v >= 0) { v += vbase; }\n }\n\n return (v % 100 >= MAXSYMBOL || v >= 400) ?\n 0 : Math.floor(Math.max(v, 0));\n};\n\nfunction makePointPath(symbolNumber, r, t, s) {\n var base = symbolNumber % 100;\n return drawing.symbolFuncs[base](r, t, s) + (symbolNumber >= 200 ? DOTPATH : '');\n}\n\nvar HORZGRADIENT = {x1: 1, x2: 0, y1: 0, y2: 0};\nvar VERTGRADIENT = {x1: 0, x2: 0, y1: 1, y2: 0};\nvar stopFormatter = numberFormat('~f');\nvar gradientInfo = {\n radial: {node: 'radialGradient'},\n radialreversed: {node: 'radialGradient', reversed: true},\n horizontal: {node: 'linearGradient', attrs: HORZGRADIENT},\n horizontalreversed: {node: 'linearGradient', attrs: HORZGRADIENT, reversed: true},\n vertical: {node: 'linearGradient', attrs: VERTGRADIENT},\n verticalreversed: {node: 'linearGradient', attrs: VERTGRADIENT, reversed: true}\n};\n\n/**\n * gradient: create and apply a gradient fill\n *\n * @param {object} sel: d3 selection to apply this gradient to\n * You can use `selection.call(Drawing.gradient, ...)`\n * @param {DOM element} gd: the graph div `sel` is part of\n * @param {string} gradientID: a unique (within this plot) identifier\n * for this gradient, so that we don't create unnecessary definitions\n * @param {string} type: 'radial', 'horizontal', or 'vertical', optionally with\n * 'reversed' at the end. Normally radial goes center to edge,\n * horizontal goes right to left, and vertical goes bottom to top\n * @param {array} colorscale: as in attribute values, [[fraction, color], ...]\n * @param {string} prop: the property to apply to, 'fill' or 'stroke'\n */\ndrawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {\n var len = colorscale.length;\n var info = gradientInfo[type];\n var colorStops = new Array(len);\n for(var i = 0; i < len; i++) {\n if(info.reversed) {\n colorStops[len - 1 - i] = [stopFormatter((1 - colorscale[i][0]) * 100), colorscale[i][1]];\n } else {\n colorStops[i] = [stopFormatter(colorscale[i][0] * 100), colorscale[i][1]];\n }\n }\n\n var fullLayout = gd._fullLayout;\n var fullID = 'g' + fullLayout._uid + '-' + gradientID;\n\n var gradient = fullLayout._defs.select('.gradients')\n .selectAll('#' + fullID)\n .data([type + colorStops.join(';')], Lib.identity);\n\n gradient.exit().remove();\n\n gradient.enter()\n .append(info.node)\n .each(function() {\n var el = d3.select(this);\n if(info.attrs) el.attr(info.attrs);\n\n el.attr('id', fullID);\n\n var stops = el.selectAll('stop')\n .data(colorStops);\n stops.exit().remove();\n stops.enter().append('stop');\n\n stops.each(function(d) {\n var tc = tinycolor(d[1]);\n d3.select(this).attr({\n offset: d[0] + '%',\n 'stop-color': Color.tinyRGB(tc),\n 'stop-opacity': tc.getAlpha()\n });\n });\n });\n\n sel.style(prop, getFullUrl(fullID, gd))\n .style(prop + '-opacity', null);\n\n sel.classed('gradient_filled', true);\n};\n\n/**\n * pattern: create and apply a pattern fill\n *\n * @param {object} sel: d3 selection to apply this pattern to\n * You can use `selection.call(Drawing.pattern, ...)`\n * @param {string} calledBy: option to know the caller component\n * @param {DOM element} gd: the graph div `sel` is part of\n * @param {string} patternID: a unique (within this plot) identifier\n * for this pattern, so that we don't create unnecessary definitions\n * @param {number} size: size of unit squares for repetition of this pattern\n * @param {number} solidity: how solid lines of this pattern are\n * @param {string} mcc: color when painted with colorscale\n * @param {string} fillmode: fillmode for this pattern\n * @param {string} bgcolor: background color for this pattern\n * @param {string} fgcolor: foreground color for this pattern\n * @param {number} fgopacity: foreground opacity for this pattern\n */\ndrawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity, mcc, fillmode, bgcolor, fgcolor, fgopacity) {\n var isLegend = calledBy === 'legend';\n\n if(mcc) {\n if(fillmode === 'overlay') {\n bgcolor = mcc;\n fgcolor = Color.contrast(bgcolor);\n } else {\n bgcolor = undefined;\n fgcolor = mcc;\n }\n }\n\n var fullLayout = gd._fullLayout;\n var fullID = 'p' + fullLayout._uid + '-' + patternID;\n var width, height;\n\n // linear interpolation\n var linearFn = function(x, x0, x1, y0, y1) {\n return y0 + (y1 - y0) * (x - x0) / (x1 - x0);\n };\n\n var path, linewidth, radius;\n var patternTag;\n var patternAttrs = {};\n\n var fgC = tinycolor(fgcolor);\n var fgRGB = Color.tinyRGB(fgC);\n var fgAlpha = fgC.getAlpha();\n var opacity = fgopacity * fgAlpha;\n\n switch(shape) {\n case '/':\n width = size * Math.sqrt(2);\n height = size * Math.sqrt(2);\n path = 'M-' + (width / 4) + ',' + (height / 4) + 'l' + (width / 2) + ',-' + (height / 2) +\n 'M0,' + height + 'L' + width + ',0' +\n 'M' + (width / 4 * 3) + ',' + (height / 4 * 5) + 'l' + (width / 2) + ',-' + (height / 2);\n linewidth = solidity * size;\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case '\\\\':\n width = size * Math.sqrt(2);\n height = size * Math.sqrt(2);\n path = 'M' + (width / 4 * 3) + ',-' + (height / 4) + 'l' + (width / 2) + ',' + (height / 2) +\n 'M0,0L' + width + ',' + height +\n 'M-' + (width / 4) + ',' + (height / 4 * 3) + 'l' + (width / 2) + ',' + (height / 2);\n linewidth = solidity * size;\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case 'x':\n width = size * Math.sqrt(2);\n height = size * Math.sqrt(2);\n path = 'M-' + (width / 4) + ',' + (height / 4) + 'l' + (width / 2) + ',-' + (height / 2) +\n 'M0,' + height + 'L' + width + ',0' +\n 'M' + (width / 4 * 3) + ',' + (height / 4 * 5) + 'l' + (width / 2) + ',-' + (height / 2) +\n 'M' + (width / 4 * 3) + ',-' + (height / 4) + 'l' + (width / 2) + ',' + (height / 2) +\n 'M0,0L' + width + ',' + height +\n 'M-' + (width / 4) + ',' + (height / 4 * 3) + 'l' + (width / 2) + ',' + (height / 2);\n linewidth = size - size * Math.sqrt(1.0 - solidity);\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case '|':\n width = size;\n height = size;\n patternTag = 'path';\n path = 'M' + (width / 2) + ',0L' + (width / 2) + ',' + height;\n linewidth = solidity * size;\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case '-':\n width = size;\n height = size;\n patternTag = 'path';\n path = 'M0,' + (height / 2) + 'L' + width + ',' + (height / 2);\n linewidth = solidity * size;\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case '+':\n width = size;\n height = size;\n patternTag = 'path';\n path = 'M' + (width / 2) + ',0L' + (width / 2) + ',' + height +\n 'M0,' + (height / 2) + 'L' + width + ',' + (height / 2);\n linewidth = size - size * Math.sqrt(1.0 - solidity);\n patternTag = 'path';\n patternAttrs = {\n d: path,\n opacity: opacity,\n stroke: fgRGB,\n 'stroke-width': linewidth + 'px'\n };\n break;\n case '.':\n width = size;\n height = size;\n if(solidity < Math.PI / 4) {\n radius = Math.sqrt(solidity * size * size / Math.PI);\n } else {\n radius = linearFn(solidity, Math.PI / 4, 1.0, size / 2, size / Math.sqrt(2));\n }\n patternTag = 'circle';\n patternAttrs = {\n cx: width / 2,\n cy: height / 2,\n r: radius,\n opacity: opacity,\n fill: fgRGB\n };\n break;\n }\n\n var str = [\n shape || 'noSh',\n bgcolor || 'noBg',\n fgcolor || 'noFg',\n size,\n solidity\n ].join(';');\n\n var pattern = fullLayout._defs.select('.patterns')\n .selectAll('#' + fullID)\n .data([str], Lib.identity);\n\n pattern.exit().remove();\n\n pattern.enter()\n .append('pattern')\n .each(function() {\n var el = d3.select(this);\n\n el.attr({\n id: fullID,\n width: width + 'px',\n height: height + 'px',\n patternUnits: 'userSpaceOnUse',\n // for legends scale down patterns just a bit so that default size (i.e 8) nicely fit in small icons\n patternTransform: isLegend ? 'scale(0.8)' : ''\n });\n\n if(bgcolor) {\n var bgC = tinycolor(bgcolor);\n var bgRGB = Color.tinyRGB(bgC);\n var bgAlpha = bgC.getAlpha();\n\n var rects = el.selectAll('rect').data([0]);\n rects.exit().remove();\n rects.enter()\n .append('rect')\n .attr({\n width: width + 'px',\n height: height + 'px',\n fill: bgRGB,\n 'fill-opacity': bgAlpha,\n });\n }\n\n var patterns = el.selectAll(patternTag).data([0]);\n patterns.exit().remove();\n patterns.enter()\n .append(patternTag)\n .attr(patternAttrs);\n });\n\n sel.style('fill', getFullUrl(fullID, gd))\n .style('fill-opacity', null);\n\n sel.classed('pattern_filled', true);\n};\n\n/*\n * Make the gradients container and clear out any previous gradients.\n * We never collect all the gradients we need in one place,\n * so we can't ever remove gradients that have stopped being useful,\n * except all at once before a full redraw.\n * The upside of this is arbitrary points can share gradient defs\n */\ndrawing.initGradients = function(gd) {\n var fullLayout = gd._fullLayout;\n\n var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');\n gradientsGroup.selectAll('linearGradient,radialGradient').remove();\n\n d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);\n};\n\ndrawing.initPatterns = function(gd) {\n var fullLayout = gd._fullLayout;\n\n var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');\n patternsGroup.selectAll('pattern').remove();\n\n d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);\n};\n\ndrawing.getPatternAttr = function(mp, i, dflt) {\n if(mp && Lib.isArrayOrTypedArray(mp)) {\n return i < mp.length ? mp[i] : dflt;\n }\n return mp;\n};\n\ndrawing.pointStyle = function(s, trace, gd, pt) {\n if(!s.size()) return;\n\n var fns = drawing.makePointStyleFns(trace);\n\n s.each(function(d) {\n drawing.singlePointStyle(d, d3.select(this), trace, fns, gd, pt);\n });\n};\n\ndrawing.singlePointStyle = function(d, sel, trace, fns, gd, pt) {\n var marker = trace.marker;\n var markerLine = marker.line;\n\n if(pt && pt.i >= 0 && d.i === undefined) d.i = pt.i;\n\n sel.style('opacity',\n fns.selectedOpacityFn ? fns.selectedOpacityFn(d) :\n (d.mo === undefined ? marker.opacity : d.mo)\n );\n\n if(fns.ms2mrc) {\n var r;\n\n // handle multi-trace graph edit case\n if(d.ms === 'various' || marker.size === 'various') {\n r = 3;\n } else {\n r = fns.ms2mrc(d.ms);\n }\n\n // store the calculated size so hover can use it\n d.mrc = r;\n\n if(fns.selectedSizeFn) {\n r = d.mrc = fns.selectedSizeFn(d);\n }\n\n // turn the symbol into a sanitized number\n var x = drawing.symbolNumber(d.mx || marker.symbol) || 0;\n\n // save if this marker is open\n // because that impacts how to handle colors\n d.om = x % 200 >= 100;\n\n var angle = getMarkerAngle(d, trace);\n var standoff = getMarkerStandoff(d, trace);\n\n sel.attr('d', makePointPath(x, r, angle, standoff));\n }\n\n var perPointGradient = false;\n var fillColor, lineColor, lineWidth;\n\n // 'so' is suspected outliers, for box plots\n if(d.so) {\n lineWidth = markerLine.outlierwidth;\n lineColor = markerLine.outliercolor;\n fillColor = marker.outliercolor;\n } else {\n var markerLineWidth = (markerLine || {}).width;\n\n lineWidth = (\n d.mlw + 1 ||\n markerLineWidth + 1 ||\n // TODO: we need the latter for legends... can we get rid of it?\n (d.trace ? (d.trace.marker.line || {}).width : 0) + 1\n ) - 1 || 0;\n\n if('mlc' in d) lineColor = d.mlcc = fns.lineScale(d.mlc);\n // weird case: array wasn't long enough to apply to every point\n else if(Lib.isArrayOrTypedArray(markerLine.color)) lineColor = Color.defaultLine;\n else lineColor = markerLine.color;\n\n if(Lib.isArrayOrTypedArray(marker.color)) {\n fillColor = Color.defaultLine;\n perPointGradient = true;\n }\n\n if('mc' in d) {\n fillColor = d.mcc = fns.markerScale(d.mc);\n } else {\n fillColor = marker.color || marker.colors || 'rgba(0,0,0,0)';\n }\n\n if(fns.selectedColorFn) {\n fillColor = fns.selectedColorFn(d);\n }\n }\n\n if(d.om) {\n // open markers can't have zero linewidth, default to 1px,\n // and use fill color as stroke color\n sel.call(Color.stroke, fillColor)\n .style({\n 'stroke-width': (lineWidth || 1) + 'px',\n fill: 'none'\n });\n } else {\n sel.style('stroke-width', (d.isBlank ? 0 : lineWidth) + 'px');\n\n var markerGradient = marker.gradient;\n\n var gradientType = d.mgt;\n if(gradientType) perPointGradient = true;\n else gradientType = markerGradient && markerGradient.type;\n\n // for legend - arrays will propagate through here, but we don't need\n // to treat it as per-point.\n if(Lib.isArrayOrTypedArray(gradientType)) {\n gradientType = gradientType[0];\n if(!gradientInfo[gradientType]) gradientType = 0;\n }\n\n var markerPattern = marker.pattern;\n var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, d.i, '');\n\n if(gradientType && gradientType !== 'none') {\n var gradientColor = d.mgc;\n if(gradientColor) perPointGradient = true;\n else gradientColor = markerGradient.color;\n\n var gradientID = trace.uid;\n if(perPointGradient) gradientID += '-' + d.i;\n\n drawing.gradient(sel, gd, gradientID, gradientType,\n [[0, gradientColor], [1, fillColor]], 'fill');\n } else if(patternShape) {\n var perPointPattern = false;\n var fgcolor = markerPattern.fgcolor;\n if(!fgcolor && pt && pt.color) {\n fgcolor = pt.color;\n perPointPattern = true;\n }\n var patternFGColor = drawing.getPatternAttr(fgcolor, d.i, (pt && pt.color) || null);\n\n var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, d.i, null);\n var patternFGOpacity = markerPattern.fgopacity;\n var patternSize = drawing.getPatternAttr(markerPattern.size, d.i, 8);\n var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, d.i, 0.3);\n perPointPattern = perPointPattern || d.mcc ||\n Lib.isArrayOrTypedArray(markerPattern.shape) ||\n Lib.isArrayOrTypedArray(markerPattern.bgcolor) ||\n Lib.isArrayOrTypedArray(markerPattern.fgcolor) ||\n Lib.isArrayOrTypedArray(markerPattern.size) ||\n Lib.isArrayOrTypedArray(markerPattern.solidity);\n\n var patternID = trace.uid;\n if(perPointPattern) patternID += '-' + d.i;\n\n drawing.pattern(\n sel, 'point', gd, patternID,\n patternShape, patternSize, patternSolidity,\n d.mcc, markerPattern.fillmode,\n patternBGColor, patternFGColor, patternFGOpacity\n );\n } else {\n Lib.isArrayOrTypedArray(fillColor) ? Color.fill(sel, fillColor[d.i]) : Color.fill(sel, fillColor);\n }\n\n if(lineWidth) {\n Color.stroke(sel, lineColor);\n }\n }\n};\n\ndrawing.makePointStyleFns = function(trace) {\n var out = {};\n var marker = trace.marker;\n\n // allow array marker and marker line colors to be\n // scaled by given max and min to colorscales\n out.markerScale = drawing.tryColorscale(marker, '');\n out.lineScale = drawing.tryColorscale(marker, 'line');\n\n if(Registry.traceIs(trace, 'symbols')) {\n out.ms2mrc = subTypes.isBubble(trace) ?\n makeBubbleSizeFn(trace) :\n function() { return (marker.size || 6) / 2; };\n }\n\n if(trace.selectedpoints) {\n Lib.extendFlat(out, drawing.makeSelectedPointStyleFns(trace));\n }\n\n return out;\n};\n\ndrawing.makeSelectedPointStyleFns = function(trace) {\n var out = {};\n\n var selectedAttrs = trace.selected || {};\n var unselectedAttrs = trace.unselected || {};\n\n var marker = trace.marker || {};\n var selectedMarker = selectedAttrs.marker || {};\n var unselectedMarker = unselectedAttrs.marker || {};\n\n var mo = marker.opacity;\n var smo = selectedMarker.opacity;\n var usmo = unselectedMarker.opacity;\n var smoIsDefined = smo !== undefined;\n var usmoIsDefined = usmo !== undefined;\n\n if(Lib.isArrayOrTypedArray(mo) || smoIsDefined || usmoIsDefined) {\n out.selectedOpacityFn = function(d) {\n var base = d.mo === undefined ? marker.opacity : d.mo;\n\n if(d.selected) {\n return smoIsDefined ? smo : base;\n } else {\n return usmoIsDefined ? usmo : DESELECTDIM * base;\n }\n };\n }\n\n var mc = marker.color;\n var smc = selectedMarker.color;\n var usmc = unselectedMarker.color;\n\n if(smc || usmc) {\n out.selectedColorFn = function(d) {\n var base = d.mcc || mc;\n\n if(d.selected) {\n return smc || base;\n } else {\n return usmc || base;\n }\n };\n }\n\n var ms = marker.size;\n var sms = selectedMarker.size;\n var usms = unselectedMarker.size;\n var smsIsDefined = sms !== undefined;\n var usmsIsDefined = usms !== undefined;\n\n if(Registry.traceIs(trace, 'symbols') && (smsIsDefined || usmsIsDefined)) {\n out.selectedSizeFn = function(d) {\n var base = d.mrc || ms / 2;\n\n if(d.selected) {\n return smsIsDefined ? sms / 2 : base;\n } else {\n return usmsIsDefined ? usms / 2 : base;\n }\n };\n }\n\n return out;\n};\n\ndrawing.makeSelectedTextStyleFns = function(trace) {\n var out = {};\n\n var selectedAttrs = trace.selected || {};\n var unselectedAttrs = trace.unselected || {};\n\n var textFont = trace.textfont || {};\n var selectedTextFont = selectedAttrs.textfont || {};\n var unselectedTextFont = unselectedAttrs.textfont || {};\n\n var tc = textFont.color;\n var stc = selectedTextFont.color;\n var utc = unselectedTextFont.color;\n\n out.selectedTextColorFn = function(d) {\n var base = d.tc || tc;\n\n if(d.selected) {\n return stc || base;\n } else {\n if(utc) return utc;\n else return stc ? base : Color.addOpacity(base, DESELECTDIM);\n }\n };\n\n return out;\n};\n\ndrawing.selectedPointStyle = function(s, trace) {\n if(!s.size() || !trace.selectedpoints) return;\n\n var fns = drawing.makeSelectedPointStyleFns(trace);\n var marker = trace.marker || {};\n var seq = [];\n\n if(fns.selectedOpacityFn) {\n seq.push(function(pt, d) {\n pt.style('opacity', fns.selectedOpacityFn(d));\n });\n }\n\n if(fns.selectedColorFn) {\n seq.push(function(pt, d) {\n Color.fill(pt, fns.selectedColorFn(d));\n });\n }\n\n if(fns.selectedSizeFn) {\n seq.push(function(pt, d) {\n var mx = d.mx || marker.symbol || 0;\n var mrc2 = fns.selectedSizeFn(d);\n\n pt.attr('d', makePointPath(drawing.symbolNumber(mx), mrc2, getMarkerAngle(d, trace), getMarkerStandoff(d, trace)));\n\n // save for Drawing.selectedTextStyle\n d.mrc2 = mrc2;\n });\n }\n\n if(seq.length) {\n s.each(function(d) {\n var pt = d3.select(this);\n for(var i = 0; i < seq.length; i++) {\n seq[i](pt, d);\n }\n });\n }\n};\n\ndrawing.tryColorscale = function(marker, prefix) {\n var cont = prefix ? Lib.nestedProperty(marker, prefix).get() : marker;\n\n if(cont) {\n var colorArray = cont.color;\n if((cont.colorscale || cont._colorAx) && Lib.isArrayOrTypedArray(colorArray)) {\n return Colorscale.makeColorScaleFuncFromTrace(cont);\n }\n }\n return Lib.identity;\n};\n\nvar TEXTOFFSETSIGN = {\n start: 1, end: -1, middle: 0, bottom: 1, top: -1\n};\n\nfunction textPointPosition(s, textPosition, fontSize, markerRadius, dontTouchParent) {\n var group = d3.select(s.node().parentNode);\n\n var v = textPosition.indexOf('top') !== -1 ?\n 'top' :\n textPosition.indexOf('bottom') !== -1 ? 'bottom' : 'middle';\n var h = textPosition.indexOf('left') !== -1 ?\n 'end' :\n textPosition.indexOf('right') !== -1 ? 'start' : 'middle';\n\n // if markers are shown, offset a little more than\n // the nominal marker size\n // ie 2/1.6 * nominal, bcs some markers are a bit bigger\n var r = markerRadius ? markerRadius / 0.8 + 1 : 0;\n\n var numLines = (svgTextUtils.lineCount(s) - 1) * LINE_SPACING + 1;\n var dx = TEXTOFFSETSIGN[h] * r;\n var dy = fontSize * 0.75 + TEXTOFFSETSIGN[v] * r +\n (TEXTOFFSETSIGN[v] - 1) * numLines * fontSize / 2;\n\n // fix the overall text group position\n s.attr('text-anchor', h);\n if(!dontTouchParent) {\n group.attr('transform', strTranslate(dx, dy));\n }\n}\n\nfunction extracTextFontSize(d, trace) {\n var fontSize = d.ts || trace.textfont.size;\n return (isNumeric(fontSize) && fontSize > 0) ? fontSize : 0;\n}\n\n// draw text at points\ndrawing.textPointStyle = function(s, trace, gd) {\n if(!s.size()) return;\n\n var selectedTextColorFn;\n if(trace.selectedpoints) {\n var fns = drawing.makeSelectedTextStyleFns(trace);\n selectedTextColorFn = fns.selectedTextColorFn;\n }\n\n var texttemplate = trace.texttemplate;\n var fullLayout = gd._fullLayout;\n\n s.each(function(d) {\n var p = d3.select(this);\n\n var text = texttemplate ?\n Lib.extractOption(d, trace, 'txt', 'texttemplate') :\n Lib.extractOption(d, trace, 'tx', 'text');\n\n if(!text && text !== 0) {\n p.remove();\n return;\n }\n\n if(texttemplate) {\n var fn = trace._module.formatLabels;\n var labels = fn ? fn(d, trace, fullLayout) : {};\n var pointValues = {};\n appendArrayPointValue(pointValues, trace, d.i);\n var meta = trace._meta || {};\n text = Lib.texttemplateString(text, labels, fullLayout._d3locale, pointValues, d, meta);\n }\n\n var pos = d.tp || trace.textposition;\n var fontSize = extracTextFontSize(d, trace);\n var fontColor = selectedTextColorFn ?\n selectedTextColorFn(d) :\n (d.tc || trace.textfont.color);\n\n p.call(drawing.font,\n d.tf || trace.textfont.family,\n fontSize,\n fontColor)\n .text(text)\n .call(svgTextUtils.convertToTspans, gd)\n .call(textPointPosition, pos, fontSize, d.mrc);\n });\n};\n\ndrawing.selectedTextStyle = function(s, trace) {\n if(!s.size() || !trace.selectedpoints) return;\n\n var fns = drawing.makeSelectedTextStyleFns(trace);\n\n s.each(function(d) {\n var tx = d3.select(this);\n var tc = fns.selectedTextColorFn(d);\n var tp = d.tp || trace.textposition;\n var fontSize = extracTextFontSize(d, trace);\n\n Color.fill(tx, tc);\n var dontTouchParent = Registry.traceIs(trace, 'bar-like');\n textPointPosition(tx, tp, fontSize, d.mrc2 || d.mrc, dontTouchParent);\n });\n};\n\n// generalized Catmull-Rom splines, per\n// http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\nvar CatmullRomExp = 0.5;\ndrawing.smoothopen = function(pts, smoothness) {\n if(pts.length < 3) { return 'M' + pts.join('L');}\n var path = 'M' + pts[0];\n var tangents = [];\n var i;\n for(i = 1; i < pts.length - 1; i++) {\n tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness));\n }\n path += 'Q' + tangents[0][0] + ' ' + pts[1];\n for(i = 2; i < pts.length - 1; i++) {\n path += 'C' + tangents[i - 2][1] + ' ' + tangents[i - 1][0] + ' ' + pts[i];\n }\n path += 'Q' + tangents[pts.length - 3][1] + ' ' + pts[pts.length - 1];\n return path;\n};\n\ndrawing.smoothclosed = function(pts, smoothness) {\n if(pts.length < 3) { return 'M' + pts.join('L') + 'Z'; }\n var path = 'M' + pts[0];\n var pLast = pts.length - 1;\n var tangents = [makeTangent(pts[pLast], pts[0], pts[1], smoothness)];\n var i;\n for(i = 1; i < pLast; i++) {\n tangents.push(makeTangent(pts[i - 1], pts[i], pts[i + 1], smoothness));\n }\n tangents.push(\n makeTangent(pts[pLast - 1], pts[pLast], pts[0], smoothness)\n );\n\n for(i = 1; i <= pLast; i++) {\n path += 'C' + tangents[i - 1][1] + ' ' + tangents[i][0] + ' ' + pts[i];\n }\n path += 'C' + tangents[pLast][1] + ' ' + tangents[0][0] + ' ' + pts[0] + 'Z';\n return path;\n};\n\nvar lastDrawnX, lastDrawnY;\n\nfunction roundEnd(pt, isY, isLastPoint) {\n if(isLastPoint) pt = applyBackoff(pt);\n\n return isY ? roundY(pt[1]) : roundX(pt[0]);\n}\n\nfunction roundX(p) {\n var v = d3.round(p, 2);\n lastDrawnX = v;\n return v;\n}\n\nfunction roundY(p) {\n var v = d3.round(p, 2);\n lastDrawnY = v;\n return v;\n}\n\nfunction makeTangent(prevpt, thispt, nextpt, smoothness) {\n var d1x = prevpt[0] - thispt[0];\n var d1y = prevpt[1] - thispt[1];\n var d2x = nextpt[0] - thispt[0];\n var d2y = nextpt[1] - thispt[1];\n var d1a = Math.pow(d1x * d1x + d1y * d1y, CatmullRomExp / 2);\n var d2a = Math.pow(d2x * d2x + d2y * d2y, CatmullRomExp / 2);\n var numx = (d2a * d2a * d1x - d1a * d1a * d2x) * smoothness;\n var numy = (d2a * d2a * d1y - d1a * d1a * d2y) * smoothness;\n var denom1 = 3 * d2a * (d1a + d2a);\n var denom2 = 3 * d1a * (d1a + d2a);\n return [\n [\n roundX(thispt[0] + (denom1 && numx / denom1)),\n roundY(thispt[1] + (denom1 && numy / denom1))\n ], [\n roundX(thispt[0] - (denom2 && numx / denom2)),\n roundY(thispt[1] - (denom2 && numy / denom2))\n ]\n ];\n}\n\n// step paths - returns a generator function for paths\n// with the given step shape\nvar STEPPATH = {\n hv: function(p0, p1, isLastPoint) {\n return 'H' +\n roundX(p1[0]) + 'V' +\n roundEnd(p1, 1, isLastPoint);\n },\n vh: function(p0, p1, isLastPoint) {\n return 'V' +\n roundY(p1[1]) + 'H' +\n roundEnd(p1, 0, isLastPoint);\n },\n hvh: function(p0, p1, isLastPoint) {\n return 'H' +\n roundX((p0[0] + p1[0]) / 2) + 'V' +\n roundY(p1[1]) + 'H' +\n roundEnd(p1, 0, isLastPoint);\n },\n vhv: function(p0, p1, isLastPoint) {\n return 'V' +\n roundY((p0[1] + p1[1]) / 2) + 'H' +\n roundX(p1[0]) + 'V' +\n roundEnd(p1, 1, isLastPoint);\n }\n};\nvar STEPLINEAR = function(p0, p1, isLastPoint) {\n return 'L' +\n roundEnd(p1, 0, isLastPoint) + ',' +\n roundEnd(p1, 1, isLastPoint);\n};\ndrawing.steps = function(shape) {\n var onestep = STEPPATH[shape] || STEPLINEAR;\n return function(pts) {\n var path = 'M' + roundX(pts[0][0]) + ',' + roundY(pts[0][1]);\n var len = pts.length;\n for(var i = 1; i < len; i++) {\n path += onestep(pts[i - 1], pts[i], i === len - 1);\n }\n return path;\n };\n};\n\nfunction applyBackoff(pt, start) {\n var backoff = pt.backoff;\n var trace = pt.trace;\n var d = pt.d;\n var i = pt.i;\n\n if(backoff && trace &&\n trace.marker &&\n trace.marker.angle % 360 === 0 &&\n trace.line &&\n trace.line.shape !== 'spline'\n ) {\n var arrayBackoff = Lib.isArrayOrTypedArray(backoff);\n var end = pt;\n\n var x1 = start ? start[0] : lastDrawnX || 0;\n var y1 = start ? start[1] : lastDrawnY || 0;\n\n var x2 = end[0];\n var y2 = end[1];\n\n var dx = x2 - x1;\n var dy = y2 - y1;\n\n var t = Math.atan2(dy, dx);\n\n var b = arrayBackoff ? backoff[i] : backoff;\n\n if(b === 'auto') {\n var endI = end.i;\n if(trace.type === 'scatter') endI--; // Why we need this hack?\n\n var endMarker = end.marker;\n var endMarkerSymbol = endMarker.symbol;\n if(Lib.isArrayOrTypedArray(endMarkerSymbol)) endMarkerSymbol = endMarkerSymbol[endI];\n\n var endMarkerSize = endMarker.size;\n if(Lib.isArrayOrTypedArray(endMarkerSize)) endMarkerSize = endMarkerSize[endI];\n\n b = endMarker ? drawing.symbolBackOffs[drawing.symbolNumber(endMarkerSymbol)] * endMarkerSize : 0;\n b += drawing.getMarkerStandoff(d[endI], trace) || 0;\n }\n\n var x = x2 - b * Math.cos(t);\n var y = y2 - b * Math.sin(t);\n\n if(\n ((x <= x2 && x >= x1) || (x >= x2 && x <= x1)) &&\n ((y <= y2 && y >= y1) || (y >= y2 && y <= y1))\n ) {\n pt = [x, y];\n }\n }\n\n return pt;\n}\n\ndrawing.applyBackoff = applyBackoff;\n\n// off-screen svg render testing element, shared by the whole page\n// uses the id 'js-plotly-tester' and stores it in drawing.tester\ndrawing.makeTester = function() {\n var tester = Lib.ensureSingleById(d3.select('body'), 'svg', 'js-plotly-tester', function(s) {\n s.attr(xmlnsNamespaces.svgAttrs)\n .style({\n position: 'absolute',\n left: '-10000px',\n top: '-10000px',\n width: '9000px',\n height: '9000px',\n 'z-index': '1'\n });\n });\n\n // browsers differ on how they describe the bounding rect of\n // the svg if its contents spill over... so make a 1x1px\n // reference point we can measure off of.\n var testref = Lib.ensureSingle(tester, 'path', 'js-reference-point', function(s) {\n s.attr('d', 'M0,0H1V1H0Z')\n .style({\n 'stroke-width': 0,\n fill: 'black'\n });\n });\n\n drawing.tester = tester;\n drawing.testref = testref;\n};\n\n/*\n * use our offscreen tester to get a clientRect for an element,\n * in a reference frame where it isn't translated (or transformed) and\n * its anchor point is at (0,0)\n * always returns a copy of the bbox, so the caller can modify it safely\n *\n * @param {SVGElement} node: the element to measure. If possible this should be\n * a or MathJax element that's already passed through\n * `convertToTspans` because in that case we can cache the results, but it's\n * possible to pass in any svg element.\n *\n * @param {boolean} inTester: is this element already in `drawing.tester`?\n * If you are measuring a dummy element, rather than one you really intend\n * to use on the plot, making it in `drawing.tester` in the first place\n * allows us to test faster because it cuts out cloning and appending it.\n *\n * @param {string} hash: for internal use only, if we already know the cache key\n * for this element beforehand.\n *\n * @return {object}: a plain object containing the width, height, left, right,\n * top, and bottom of `node`\n */\ndrawing.savedBBoxes = {};\nvar savedBBoxesCount = 0;\nvar maxSavedBBoxes = 10000;\n\ndrawing.bBox = function(node, inTester, hash) {\n /*\n * Cache elements we've already measured so we don't have to\n * remeasure the same thing many times\n * We have a few bBox callers though who pass a node larger than\n * a or a MathJax , such as an axis group containing many labels.\n * These will not generate a hash (unless we figure out an appropriate\n * hash key for them) and thus we will not hash them.\n */\n if(!hash) hash = nodeHash(node);\n var out;\n if(hash) {\n out = drawing.savedBBoxes[hash];\n if(out) return Lib.extendFlat({}, out);\n } else if(node.childNodes.length === 1) {\n /*\n * If we have only one child element, which is itself hashable, make\n * a new hash from this element plus its x,y,transform\n * These bounding boxes *include* x,y,transform - mostly for use by\n * callers trying to avoid overlaps (ie titles)\n */\n var innerNode = node.childNodes[0];\n\n hash = nodeHash(innerNode);\n if(hash) {\n var x = +innerNode.getAttribute('x') || 0;\n var y = +innerNode.getAttribute('y') || 0;\n var transform = innerNode.getAttribute('transform');\n\n if(!transform) {\n // in this case, just varying x and y, don't bother caching\n // the final bBox because the alteration is quick.\n var innerBB = drawing.bBox(innerNode, false, hash);\n if(x) {\n innerBB.left += x;\n innerBB.right += x;\n }\n if(y) {\n innerBB.top += y;\n innerBB.bottom += y;\n }\n return innerBB;\n }\n /*\n * else we have a transform - rather than make a complicated\n * (and error-prone and probably slow) transform parser/calculator,\n * just continue on calculating the boundingClientRect of the group\n * and use the new composite hash to cache it.\n * That said, `innerNode.transform.baseVal` is an array of\n * `SVGTransform` objects, that *do* seem to have a nice matrix\n * multiplication interface that we could use to avoid making\n * another getBoundingClientRect call...\n */\n hash += '~' + x + '~' + y + '~' + transform;\n\n out = drawing.savedBBoxes[hash];\n if(out) return Lib.extendFlat({}, out);\n }\n }\n var testNode, tester;\n if(inTester) {\n testNode = node;\n } else {\n tester = drawing.tester.node();\n\n // copy the node to test into the tester\n testNode = node.cloneNode(true);\n tester.appendChild(testNode);\n }\n\n // standardize its position (and newline tspans if any)\n d3.select(testNode)\n .attr('transform', null)\n .call(svgTextUtils.positionText, 0, 0);\n\n var testRect = testNode.getBoundingClientRect();\n var refRect = drawing.testref\n .node()\n .getBoundingClientRect();\n\n if(!inTester) tester.removeChild(testNode);\n\n var bb = {\n height: testRect.height,\n width: testRect.width,\n left: testRect.left - refRect.left,\n top: testRect.top - refRect.top,\n right: testRect.right - refRect.left,\n bottom: testRect.bottom - refRect.top\n };\n\n // make sure we don't have too many saved boxes,\n // or a long session could overload on memory\n // by saving boxes for long-gone elements\n if(savedBBoxesCount >= maxSavedBBoxes) {\n drawing.savedBBoxes = {};\n savedBBoxesCount = 0;\n }\n\n // cache this bbox\n if(hash) drawing.savedBBoxes[hash] = bb;\n savedBBoxesCount++;\n\n return Lib.extendFlat({}, bb);\n};\n\n// capture everything about a node (at least in our usage) that\n// impacts its bounding box, given that bBox clears x, y, and transform\nfunction nodeHash(node) {\n var inputText = node.getAttribute('data-unformatted');\n if(inputText === null) return;\n return inputText +\n node.getAttribute('data-math') +\n node.getAttribute('text-anchor') +\n node.getAttribute('style');\n}\n\n/**\n * Set clipPath URL in a way that work for all situations.\n *\n * In details, graphs on pages with HTML tags need to prepend\n * the clip path ids with the page's base url EXCEPT during toImage exports.\n *\n * @param {d3 selection} s : node to add clip-path attribute\n * @param {string} localId : local clip-path (w/o base url) id\n * @param {DOM element || object} gd\n * - context._baseUrl {string}\n * - context._exportedPlot {boolean}\n */\ndrawing.setClipUrl = function(s, localId, gd) {\n s.attr('clip-path', getFullUrl(localId, gd));\n};\n\nfunction getFullUrl(localId, gd) {\n if(!localId) return null;\n\n var context = gd._context;\n var baseUrl = context._exportedPlot ? '' : (context._baseUrl || '');\n return baseUrl ?\n 'url(\\'' + baseUrl + '#' + localId + '\\')' :\n 'url(#' + localId + ')';\n}\n\ndrawing.getTranslate = function(element) {\n // Note the separator [^\\d] between x and y in this regex\n // We generally use ',' but IE will convert it to ' '\n var re = /.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/;\n var getter = element.attr ? 'attr' : 'getAttribute';\n var transform = element[getter]('transform') || '';\n\n var translate = transform.replace(re, function(match, p1, p2) {\n return [p1, p2].join(' ');\n })\n .split(' ');\n\n return {\n x: +translate[0] || 0,\n y: +translate[1] || 0\n };\n};\n\ndrawing.setTranslate = function(element, x, y) {\n var re = /(\\btranslate\\(.*?\\);?)/;\n var getter = element.attr ? 'attr' : 'getAttribute';\n var setter = element.attr ? 'attr' : 'setAttribute';\n var transform = element[getter]('transform') || '';\n\n x = x || 0;\n y = y || 0;\n\n transform = transform.replace(re, '').trim();\n transform += strTranslate(x, y);\n transform = transform.trim();\n\n element[setter]('transform', transform);\n\n return transform;\n};\n\ndrawing.getScale = function(element) {\n var re = /.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/;\n var getter = element.attr ? 'attr' : 'getAttribute';\n var transform = element[getter]('transform') || '';\n\n var translate = transform.replace(re, function(match, p1, p2) {\n return [p1, p2].join(' ');\n })\n .split(' ');\n\n return {\n x: +translate[0] || 1,\n y: +translate[1] || 1\n };\n};\n\ndrawing.setScale = function(element, x, y) {\n var re = /(\\bscale\\(.*?\\);?)/;\n var getter = element.attr ? 'attr' : 'getAttribute';\n var setter = element.attr ? 'attr' : 'setAttribute';\n var transform = element[getter]('transform') || '';\n\n x = x || 1;\n y = y || 1;\n\n transform = transform.replace(re, '').trim();\n transform += 'scale(' + x + ',' + y + ')';\n transform = transform.trim();\n\n element[setter]('transform', transform);\n\n return transform;\n};\n\nvar SCALE_RE = /\\s*sc.*/;\n\ndrawing.setPointGroupScale = function(selection, xScale, yScale) {\n xScale = xScale || 1;\n yScale = yScale || 1;\n\n if(!selection) return;\n\n // The same scale transform for every point:\n var scale = (xScale === 1 && yScale === 1) ?\n '' :\n 'scale(' + xScale + ',' + yScale + ')';\n\n selection.each(function() {\n var t = (this.getAttribute('transform') || '').replace(SCALE_RE, '');\n t += scale;\n t = t.trim();\n this.setAttribute('transform', t);\n });\n};\n\nvar TEXT_POINT_LAST_TRANSLATION_RE = /translate\\([^)]*\\)\\s*$/;\n\ndrawing.setTextPointsScale = function(selection, xScale, yScale) {\n if(!selection) return;\n\n selection.each(function() {\n var transforms;\n var el = d3.select(this);\n var text = el.select('text');\n\n if(!text.node()) return;\n\n var x = parseFloat(text.attr('x') || 0);\n var y = parseFloat(text.attr('y') || 0);\n\n var existingTransform = (el.attr('transform') || '').match(TEXT_POINT_LAST_TRANSLATION_RE);\n\n if(xScale === 1 && yScale === 1) {\n transforms = [];\n } else {\n transforms = [\n strTranslate(x, y),\n 'scale(' + xScale + ',' + yScale + ')',\n strTranslate(-x, -y),\n ];\n }\n\n if(existingTransform) {\n transforms.push(existingTransform);\n }\n\n el.attr('transform', transforms.join(''));\n });\n};\n\nfunction getMarkerStandoff(d, trace) {\n var standoff;\n\n if(d) standoff = d.mf;\n\n if(standoff === undefined) {\n standoff = trace.marker ? trace.marker.standoff || 0 : 0;\n }\n\n if(!trace._geo && !trace._xA) {\n // case of legends\n return -standoff;\n }\n\n return standoff;\n}\n\ndrawing.getMarkerStandoff = getMarkerStandoff;\n\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nfunction rotate(t, xy) {\n var x = xy[0];\n var y = xy[1];\n return [\n x * cos(t) - y * sin(t),\n x * sin(t) + y * cos(t)\n ];\n}\n\nvar previousLon;\nvar previousLat;\nvar previousX;\nvar previousY;\nvar previousI;\nvar previousTraceUid;\n\nfunction getMarkerAngle(d, trace) {\n var angle = d.ma;\n\n if(angle === undefined) {\n angle = trace.marker.angle;\n if(!angle || Lib.isArrayOrTypedArray(angle)) {\n angle = 0;\n }\n }\n\n var x, y;\n var ref = trace.marker.angleref;\n if(ref === 'previous' || ref === 'north') {\n if(trace._geo) {\n var p = trace._geo.project(d.lonlat);\n x = p[0];\n y = p[1];\n } else {\n var xa = trace._xA;\n var ya = trace._yA;\n if(xa && ya) {\n x = xa.c2p(d.x);\n y = ya.c2p(d.y);\n } else {\n // case of legends\n return 90;\n }\n }\n\n if(trace._geo) {\n var lon = d.lonlat[0];\n var lat = d.lonlat[1];\n\n var north = trace._geo.project([\n lon,\n lat + 1e-5 // epsilon\n ]);\n\n var east = trace._geo.project([\n lon + 1e-5, // epsilon\n lat\n ]);\n\n var u = atan2(\n east[1] - y,\n east[0] - x\n );\n\n var v = atan2(\n north[1] - y,\n north[0] - x\n );\n\n var t;\n if(ref === 'north') {\n t = angle / 180 * Math.PI;\n // To use counter-clockwise angles i.e.\n // East: 90, West: -90\n // to facilitate wind visualisations\n // in future we should use t = -t here.\n } else if(ref === 'previous') {\n var lon1 = lon / 180 * Math.PI;\n var lat1 = lat / 180 * Math.PI;\n var lon2 = previousLon / 180 * Math.PI;\n var lat2 = previousLat / 180 * Math.PI;\n\n var dLon = lon2 - lon1;\n\n var deltaY = cos(lat2) * sin(dLon);\n var deltaX = sin(lat2) * cos(lat1) - cos(lat2) * sin(lat1) * cos(dLon);\n\n t = -atan2(\n deltaY,\n deltaX\n ) - Math.PI;\n\n previousLon = lon;\n previousLat = lat;\n }\n\n var A = rotate(u, [cos(t), 0]);\n var B = rotate(v, [sin(t), 0]);\n\n angle = atan2(\n A[1] + B[1],\n A[0] + B[0]\n ) / Math.PI * 180;\n\n if(ref === 'previous' && !(\n previousTraceUid === trace.uid &&\n d.i === previousI + 1\n )) {\n angle = null;\n }\n }\n\n if(ref === 'previous' && !trace._geo) {\n if(\n previousTraceUid === trace.uid &&\n d.i === previousI + 1 &&\n isNumeric(x) &&\n isNumeric(y)\n ) {\n var dX = x - previousX;\n var dY = y - previousY;\n\n var shape = trace.line ? trace.line.shape || '' : '';\n\n var lastShapeChar = shape.slice(shape.length - 1);\n if(lastShapeChar === 'h') dY = 0;\n if(lastShapeChar === 'v') dX = 0;\n\n angle += atan2(dY, dX) / Math.PI * 180 + 90;\n } else {\n angle = null;\n }\n }\n }\n\n previousX = x;\n previousY = y;\n previousI = d.i;\n previousTraceUid = trace.uid;\n\n return angle;\n}\n\ndrawing.getMarkerAngle = getMarkerAngle;\n","'use strict';\n\nvar colorbarAttrs = require('../colorbar/attributes');\nvar counterRegex = require('../../lib/regex').counter;\nvar sortObjectKeys = require('../../lib/sort_object_keys');\n\nvar palettes = require('./scales.js').scales;\nvar paletteStr = sortObjectKeys(palettes);\n\nfunction code(s) {\n return '`' + s + '`';\n}\n\n/**\n * Make colorscale attribute declarations for\n *\n * - colorscale,\n * - (c|z)auto, (c|z)min, (c|z)max,\n * - autocolorscale, reversescale,\n * - showscale (optionally)\n * - color (optionally)\n *\n * @param {string} context (dflt: '', i.e. from trace root):\n * the container this is in ('', *marker*, *marker.line* etc)\n *\n * @param {object} opts:\n * - cLetter {string} (dflt: 'c'):\n * leading letter for 'min', 'max and 'auto' attribute (either 'z' or 'c')\n *\n * - colorAttr {string} (dflt: 'z' if `cLetter: 'z'`, 'color' if `cLetter: 'c'`):\n * (for descriptions) sets the name of the color attribute that maps to the colorscale.\n *\n * N.B. if `colorAttr: 'color'`, we include the `color` declaration here.\n *\n * - onlyIfNumerical {string} (dflt: false' if `cLetter: 'z'`, true if `cLetter: 'c'`):\n * (for descriptions) set to true if colorscale attribute only\n *\n * - colorscaleDflt {string}:\n * overrides the colorscale dflt\n *\n * - autoColorDflt {boolean} (dflt true):\n * normally autocolorscale.dflt is `true`, but pass `false` to override\n *\n * - noScale {boolean} (dflt: true if `context: 'marker.line'`, false otherwise):\n * set to `false` to not include showscale attribute (e.g. for 'marker.line')\n *\n * - showScaleDflt {boolean} (dflt: true if `cLetter: 'z'`, false otherwise)\n *\n * - editTypeOverride {boolean} (dflt: ''):\n * most of these attributes already require a recalc, but the ones that do not\n * have editType *style* or *plot* unless you override (presumably with *calc*)\n *\n * - anim {boolean) (dflt: undefined): is 'color' animatable?\n *\n * @return {object}\n */\nmodule.exports = function colorScaleAttrs(context, opts) {\n context = context || '';\n opts = opts || {};\n\n var cLetter = opts.cLetter || 'c';\n var onlyIfNumerical = ('onlyIfNumerical' in opts) ? opts.onlyIfNumerical : Boolean(context);\n var noScale = ('noScale' in opts) ? opts.noScale : context === 'marker.line';\n var showScaleDflt = ('showScaleDflt' in opts) ? opts.showScaleDflt : cLetter === 'z';\n var colorscaleDflt = typeof opts.colorscaleDflt === 'string' ? palettes[opts.colorscaleDflt] : null;\n var editTypeOverride = opts.editTypeOverride || '';\n var contextHead = context ? (context + '.') : '';\n\n var colorAttr, colorAttrFull;\n\n if('colorAttr' in opts) {\n colorAttr = opts.colorAttr;\n colorAttrFull = opts.colorAttr;\n } else {\n colorAttr = {z: 'z', c: 'color'}[cLetter];\n colorAttrFull = 'in ' + code(contextHead + colorAttr);\n }\n\n var effectDesc = onlyIfNumerical ?\n ' Has an effect only if ' + colorAttrFull + ' is set to a numerical array.' :\n '';\n\n var auto = cLetter + 'auto';\n var min = cLetter + 'min';\n var max = cLetter + 'max';\n var mid = cLetter + 'mid';\n var autoFull = code(contextHead + auto);\n var minFull = code(contextHead + min);\n var maxFull = code(contextHead + max);\n var minmaxFull = minFull + ' and ' + maxFull;\n var autoImpliedEdits = {};\n autoImpliedEdits[min] = autoImpliedEdits[max] = undefined;\n var minmaxImpliedEdits = {};\n minmaxImpliedEdits[auto] = false;\n\n var attrs = {};\n\n if(colorAttr === 'color') {\n attrs.color = {\n valType: 'color',\n arrayOk: true,\n editType: editTypeOverride || 'style',\n description: [\n 'Sets the', context, 'color.',\n 'It accepts either a specific color',\n 'or an array of numbers that are mapped to the colorscale',\n 'relative to the max and min values of the array or relative to',\n minmaxFull, 'if set.'\n ].join(' ')\n };\n\n if(opts.anim) {\n attrs.color.anim = true;\n }\n }\n\n attrs[auto] = {\n valType: 'boolean',\n dflt: true,\n editType: 'calc',\n impliedEdits: autoImpliedEdits,\n description: [\n 'Determines whether or not the color domain is computed',\n 'with respect to the input data (here ' + colorAttrFull + ') or the bounds set in',\n minmaxFull + effectDesc,\n 'Defaults to `false` when', minmaxFull, 'are set by the user.'\n ].join(' ')\n };\n\n attrs[min] = {\n valType: 'number',\n dflt: null,\n editType: editTypeOverride || 'plot',\n impliedEdits: minmaxImpliedEdits,\n description: [\n 'Sets the lower bound of the color domain.' + effectDesc,\n 'Value should have the same units as', colorAttrFull,\n 'and if set,', maxFull, 'must be set as well.'\n ].join(' ')\n };\n\n attrs[max] = {\n valType: 'number',\n dflt: null,\n editType: editTypeOverride || 'plot',\n impliedEdits: minmaxImpliedEdits,\n description: [\n 'Sets the upper bound of the color domain.' + effectDesc,\n 'Value should have the same units as', colorAttrFull,\n 'and if set,', minFull, 'must be set as well.'\n ].join(' ')\n };\n\n attrs[mid] = {\n valType: 'number',\n dflt: null,\n editType: 'calc',\n impliedEdits: autoImpliedEdits,\n description: [\n 'Sets the mid-point of the color domain by scaling', minFull,\n 'and/or', maxFull, 'to be equidistant to this point.' + effectDesc,\n 'Value should have the same units as', colorAttrFull + '.',\n 'Has no effect when', autoFull, 'is `false`.'\n ].join(' ')\n };\n\n attrs.colorscale = {\n valType: 'colorscale',\n editType: 'calc',\n dflt: colorscaleDflt,\n impliedEdits: {autocolorscale: false},\n description: [\n 'Sets the colorscale.' + effectDesc,\n 'The colorscale must be an array containing',\n 'arrays mapping a normalized value to an',\n 'rgb, rgba, hex, hsl, hsv, or named color string.',\n 'At minimum, a mapping for the lowest (0) and highest (1)',\n 'values are required. For example,',\n '`[[0, \\'rgb(0,0,255)\\'], [1, \\'rgb(255,0,0)\\']]`.',\n 'To control the bounds of the colorscale in color space,',\n 'use', minmaxFull + '.',\n 'Alternatively, `colorscale` may be a palette name string',\n 'of the following list: ' + paletteStr + '.'\n ].join(' ')\n };\n\n attrs.autocolorscale = {\n valType: 'boolean',\n // gets overrode in 'heatmap' & 'surface' for backwards comp.\n dflt: opts.autoColorDflt === false ? false : true,\n editType: 'calc',\n impliedEdits: {colorscale: undefined},\n description: [\n 'Determines whether the colorscale is a default palette (`autocolorscale: true`)',\n 'or the palette determined by', code(contextHead + 'colorscale') + '.' + effectDesc,\n 'In case `colorscale` is unspecified or `autocolorscale` is true, the default',\n 'palette will be chosen according to whether numbers in the `color` array are',\n 'all positive, all negative or mixed.'\n ].join(' ')\n };\n\n attrs.reversescale = {\n valType: 'boolean',\n dflt: false,\n editType: 'plot',\n description: [\n 'Reverses the color mapping if true.' + effectDesc,\n 'If true,', minFull, 'will correspond to the last color',\n 'in the array and', maxFull, 'will correspond to the first color.'\n ].join(' ')\n };\n\n if(!noScale) {\n attrs.showscale = {\n valType: 'boolean',\n dflt: showScaleDflt,\n editType: 'calc',\n description: [\n 'Determines whether or not a colorbar is displayed for this trace.' + effectDesc\n ].join(' ')\n };\n\n attrs.colorbar = colorbarAttrs;\n }\n\n if(!opts.noColorAxis) {\n attrs.coloraxis = {\n valType: 'subplotid',\n regex: counterRegex('coloraxis'),\n dflt: null,\n editType: 'calc',\n description: [\n 'Sets a reference to a shared color axis.',\n 'References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc.',\n 'Settings for these shared color axes are set in the layout, under',\n '`layout.coloraxis`, `layout.coloraxis2`, etc.',\n 'Note that multiple color scales can be linked to the same color axis.'\n ].join(' ')\n };\n }\n\n return attrs;\n};\n","'use strict';\n\nvar tinycolor = require('tinycolor2');\nvar isNumeric = require('fast-isnumeric');\nvar isTypedArray = require('../../lib/array').isTypedArray;\n\nvar color = module.exports = {};\n\nvar colorAttrs = require('./attributes');\ncolor.defaults = colorAttrs.defaults;\nvar defaultLine = color.defaultLine = colorAttrs.defaultLine;\ncolor.lightLine = colorAttrs.lightLine;\nvar background = color.background = colorAttrs.background;\n\n/*\n * tinyRGB: turn a tinycolor into an rgb string, but\n * unlike the built-in tinycolor.toRgbString this never includes alpha\n */\ncolor.tinyRGB = function(tc) {\n var c = tc.toRgb();\n return 'rgb(' + Math.round(c.r) + ', ' +\n Math.round(c.g) + ', ' + Math.round(c.b) + ')';\n};\n\ncolor.rgb = function(cstr) { return color.tinyRGB(tinycolor(cstr)); };\n\ncolor.opacity = function(cstr) { return cstr ? tinycolor(cstr).getAlpha() : 0; };\n\ncolor.addOpacity = function(cstr, op) {\n var c = tinycolor(cstr).toRgb();\n return 'rgba(' + Math.round(c.r) + ', ' +\n Math.round(c.g) + ', ' + Math.round(c.b) + ', ' + op + ')';\n};\n\n// combine two colors into one apparent color\n// if back has transparency or is missing,\n// color.background is assumed behind it\ncolor.combine = function(front, back) {\n var fc = tinycolor(front).toRgb();\n if(fc.a === 1) return tinycolor(front).toRgbString();\n\n var bc = tinycolor(back || background).toRgb();\n var bcflat = bc.a === 1 ? bc : {\n r: 255 * (1 - bc.a) + bc.r * bc.a,\n g: 255 * (1 - bc.a) + bc.g * bc.a,\n b: 255 * (1 - bc.a) + bc.b * bc.a\n };\n var fcflat = {\n r: bcflat.r * (1 - fc.a) + fc.r * fc.a,\n g: bcflat.g * (1 - fc.a) + fc.g * fc.a,\n b: bcflat.b * (1 - fc.a) + fc.b * fc.a\n };\n return tinycolor(fcflat).toRgbString();\n};\n\n/*\n * Create a color that contrasts with cstr.\n *\n * If cstr is a dark color, we lighten it; if it's light, we darken.\n *\n * If lightAmount / darkAmount are used, we adjust by these percentages,\n * otherwise we go all the way to white or black.\n */\ncolor.contrast = function(cstr, lightAmount, darkAmount) {\n var tc = tinycolor(cstr);\n\n if(tc.getAlpha() !== 1) tc = tinycolor(color.combine(cstr, background));\n\n var newColor = tc.isDark() ?\n (lightAmount ? tc.lighten(lightAmount) : background) :\n (darkAmount ? tc.darken(darkAmount) : defaultLine);\n\n return newColor.toString();\n};\n\ncolor.stroke = function(s, c) {\n var tc = tinycolor(c);\n s.style({stroke: color.tinyRGB(tc), 'stroke-opacity': tc.getAlpha()});\n};\n\ncolor.fill = function(s, c) {\n var tc = tinycolor(c);\n s.style({\n fill: color.tinyRGB(tc),\n 'fill-opacity': tc.getAlpha()\n });\n};\n\n// search container for colors with the deprecated rgb(fractions) format\n// and convert them to rgb(0-255 values)\ncolor.clean = function(container) {\n if(!container || typeof container !== 'object') return;\n\n var keys = Object.keys(container);\n var i, j, key, val;\n\n for(i = 0; i < keys.length; i++) {\n key = keys[i];\n val = container[key];\n\n if(key.substr(key.length - 5) === 'color') {\n // only sanitize keys that end in \"color\" or \"colorscale\"\n\n if(Array.isArray(val)) {\n for(j = 0; j < val.length; j++) val[j] = cleanOne(val[j]);\n } else container[key] = cleanOne(val);\n } else if(key.substr(key.length - 10) === 'colorscale' && Array.isArray(val)) {\n // colorscales have the format [[0, color1], [frac, color2], ... [1, colorN]]\n\n for(j = 0; j < val.length; j++) {\n if(Array.isArray(val[j])) val[j][1] = cleanOne(val[j][1]);\n }\n } else if(Array.isArray(val)) {\n // recurse into arrays of objects, and plain objects\n\n var el0 = val[0];\n if(!Array.isArray(el0) && el0 && typeof el0 === 'object') {\n for(j = 0; j < val.length; j++) color.clean(val[j]);\n }\n } else if(val && typeof val === 'object' && !isTypedArray(val)) color.clean(val);\n }\n};\n\nfunction cleanOne(val) {\n if(isNumeric(val) || typeof val !== 'string') return val;\n\n var valTrim = val.trim();\n if(valTrim.substr(0, 3) !== 'rgb') return val;\n\n var match = valTrim.match(/^rgba?\\s*\\(([^()]*)\\)$/);\n if(!match) return val;\n\n var parts = match[1].trim().split(/\\s*[\\s,]\\s*/);\n var rgba = valTrim.charAt(3) === 'a' && parts.length === 4;\n if(!rgba && parts.length !== 3) return val;\n\n for(var i = 0; i < parts.length; i++) {\n if(!parts[i].length) return val;\n parts[i] = Number(parts[i]);\n\n if(!(parts[i] >= 0)) {\n // all parts must be non-negative numbers\n\n return val;\n }\n\n if(i === 3) {\n // alpha>1 gets clipped to 1\n\n if(parts[i] > 1) parts[i] = 1;\n } else if(parts[i] >= 1) {\n // r, g, b must be < 1 (ie 1 itself is not allowed)\n\n return val;\n }\n }\n\n var rgbStr = Math.round(parts[0] * 255) + ', ' +\n Math.round(parts[1] * 255) + ', ' +\n Math.round(parts[2] * 255);\n\n if(rgba) return 'rgba(' + rgbStr + ', ' + parts[3] + ')';\n return 'rgb(' + rgbStr + ')';\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Axes = require('../../plots/cartesian/axes');\nvar handleArrayContainerDefaults = require('../../plots/array_container_defaults');\n\nvar attributes = require('./attributes');\nvar name = 'images';\n\nmodule.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {\n var opts = {\n name: name,\n handleItemDefaults: imageDefaults\n };\n\n handleArrayContainerDefaults(layoutIn, layoutOut, opts);\n};\n\n\nfunction imageDefaults(imageIn, imageOut, fullLayout) {\n function coerce(attr, dflt) {\n return Lib.coerce(imageIn, imageOut, attributes, attr, dflt);\n }\n\n var source = coerce('source');\n var visible = coerce('visible', !!source);\n\n if(!visible) return imageOut;\n\n coerce('layer');\n coerce('xanchor');\n coerce('yanchor');\n coerce('sizex');\n coerce('sizey');\n coerce('sizing');\n coerce('opacity');\n\n var gdMock = { _fullLayout: fullLayout };\n var axLetters = ['x', 'y'];\n\n for(var i = 0; i < 2; i++) {\n // 'paper' is the fallback axref\n var axLetter = axLetters[i];\n var axRef = Axes.coerceRef(imageIn, imageOut, gdMock, axLetter, 'paper', undefined);\n\n if(axRef !== 'paper') {\n var ax = Axes.getFromId(gdMock, axRef);\n ax._imgIndices.push(imageOut._index);\n }\n\n Axes.coercePosition(imageOut, gdMock, coerce, axRef, axLetter, 0);\n }\n\n return imageOut;\n}\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar tinycolor = require('tinycolor2');\n\nvar Plots = require('../../plots/plots');\nvar Registry = require('../../registry');\nvar Axes = require('../../plots/cartesian/axes');\nvar dragElement = require('../dragelement');\nvar Lib = require('../../lib');\nvar strTranslate = Lib.strTranslate;\nvar extendFlat = require('../../lib/extend').extendFlat;\nvar setCursor = require('../../lib/setcursor');\nvar Drawing = require('../drawing');\nvar Color = require('../color');\nvar Titles = require('../titles');\nvar svgTextUtils = require('../../lib/svg_text_utils');\nvar flipScale = require('../colorscale/helpers').flipScale;\n\nvar handleAxisDefaults = require('../../plots/cartesian/axis_defaults');\nvar handleAxisPositionDefaults = require('../../plots/cartesian/position_defaults');\nvar axisLayoutAttrs = require('../../plots/cartesian/layout_attributes');\n\nvar alignmentConstants = require('../../constants/alignment');\nvar LINE_SPACING = alignmentConstants.LINE_SPACING;\nvar FROM_TL = alignmentConstants.FROM_TL;\nvar FROM_BR = alignmentConstants.FROM_BR;\n\nvar cn = require('./constants').cn;\n\nfunction draw(gd) {\n var fullLayout = gd._fullLayout;\n\n var colorBars = fullLayout._infolayer\n .selectAll('g.' + cn.colorbar)\n .data(makeColorBarData(gd), function(opts) { return opts._id; });\n\n colorBars.enter().append('g')\n .attr('class', function(opts) { return opts._id; })\n .classed(cn.colorbar, true);\n\n colorBars.each(function(opts) {\n var g = d3.select(this);\n\n Lib.ensureSingle(g, 'rect', cn.cbbg);\n Lib.ensureSingle(g, 'g', cn.cbfills);\n Lib.ensureSingle(g, 'g', cn.cblines);\n Lib.ensureSingle(g, 'g', cn.cbaxis, function(s) { s.classed(cn.crisp, true); });\n Lib.ensureSingle(g, 'g', cn.cbtitleunshift, function(s) { s.append('g').classed(cn.cbtitle, true); });\n Lib.ensureSingle(g, 'rect', cn.cboutline);\n\n var done = drawColorBar(g, opts, gd);\n if(done && done.then) (gd._promises || []).push(done);\n\n if(gd._context.edits.colorbarPosition) {\n makeEditable(g, opts, gd);\n }\n });\n\n colorBars.exit()\n .each(function(opts) { Plots.autoMargin(gd, opts._id); })\n .remove();\n\n colorBars.order();\n}\n\nfunction makeColorBarData(gd) {\n var fullLayout = gd._fullLayout;\n var calcdata = gd.calcdata;\n var out = [];\n\n // single out item\n var opts;\n // colorbar attr parent container\n var cont;\n // trace attr container\n var trace;\n // colorbar options\n var cbOpt;\n\n function initOpts(opts) {\n return extendFlat(opts, {\n // fillcolor can be a d3 scale, domain is z values, range is colors\n // or leave it out for no fill,\n // or set to a string constant for single-color fill\n _fillcolor: null,\n // line.color has the same options as fillcolor\n _line: {color: null, width: null, dash: null},\n // levels of lines to draw.\n // note that this DOES NOT determine the extent of the bar\n // that's given by the domain of fillcolor\n // (or line.color if no fillcolor domain)\n _levels: {start: null, end: null, size: null},\n // separate fill levels (for example, heatmap coloring of a\n // contour map) if this is omitted, fillcolors will be\n // evaluated halfway between levels\n _filllevels: null,\n // for continuous colorscales: fill with a gradient instead of explicit levels\n // value should be the colorscale [[0, c0], [v1, c1], ..., [1, cEnd]]\n _fillgradient: null,\n // when using a gradient, we need the data range specified separately\n _zrange: null\n });\n }\n\n function calcOpts() {\n if(typeof cbOpt.calc === 'function') {\n cbOpt.calc(gd, trace, opts);\n } else {\n opts._fillgradient = cont.reversescale ?\n flipScale(cont.colorscale) :\n cont.colorscale;\n opts._zrange = [cont[cbOpt.min], cont[cbOpt.max]];\n }\n }\n\n for(var i = 0; i < calcdata.length; i++) {\n var cd = calcdata[i];\n trace = cd[0].trace;\n if(!trace._module) continue;\n var moduleOpts = trace._module.colorbar;\n\n if(trace.visible === true && moduleOpts) {\n var allowsMultiplotCbs = Array.isArray(moduleOpts);\n var cbOpts = allowsMultiplotCbs ? moduleOpts : [moduleOpts];\n\n for(var j = 0; j < cbOpts.length; j++) {\n cbOpt = cbOpts[j];\n var contName = cbOpt.container;\n cont = contName ? trace[contName] : trace;\n\n if(cont && cont.showscale) {\n opts = initOpts(cont.colorbar);\n opts._id = 'cb' + trace.uid + (allowsMultiplotCbs && contName ? '-' + contName : '');\n opts._traceIndex = trace.index;\n opts._propPrefix = (contName ? contName + '.' : '') + 'colorbar.';\n opts._meta = trace._meta;\n calcOpts();\n out.push(opts);\n }\n }\n }\n }\n\n for(var k in fullLayout._colorAxes) {\n cont = fullLayout[k];\n\n if(cont.showscale) {\n var colorAxOpts = fullLayout._colorAxes[k];\n\n opts = initOpts(cont.colorbar);\n opts._id = 'cb' + k;\n opts._propPrefix = k + '.colorbar.';\n opts._meta = fullLayout._meta;\n\n cbOpt = {min: 'cmin', max: 'cmax'};\n if(colorAxOpts[0] !== 'heatmap') {\n trace = colorAxOpts[1];\n cbOpt.calc = trace._module.colorbar.calc;\n }\n\n calcOpts();\n out.push(opts);\n }\n }\n\n return out;\n}\n\nfunction drawColorBar(g, opts, gd) {\n var isVertical = opts.orientation === 'v';\n var len = opts.len;\n var lenmode = opts.lenmode;\n var thickness = opts.thickness;\n var thicknessmode = opts.thicknessmode;\n var outlinewidth = opts.outlinewidth;\n var borderwidth = opts.borderwidth;\n var bgcolor = opts.bgcolor;\n var xanchor = opts.xanchor;\n var yanchor = opts.yanchor;\n var xpad = opts.xpad;\n var ypad = opts.ypad;\n var optsX = opts.x;\n var optsY = isVertical ? opts.y : 1 - opts.y;\n\n var isPaperY = opts.yref === 'paper';\n var isPaperX = opts.xref === 'paper';\n\n var fullLayout = gd._fullLayout;\n var gs = fullLayout._size;\n\n var fillColor = opts._fillcolor;\n var line = opts._line;\n var title = opts.title;\n var titleSide = title.side;\n\n var zrange = opts._zrange ||\n d3.extent((typeof fillColor === 'function' ? fillColor : line.color).domain());\n\n var lineColormap = typeof line.color === 'function' ?\n line.color :\n function() { return line.color; };\n var fillColormap = typeof fillColor === 'function' ?\n fillColor :\n function() { return fillColor; };\n\n var levelsIn = opts._levels;\n var levelsOut = calcLevels(gd, opts, zrange);\n var fillLevels = levelsOut.fill;\n var lineLevels = levelsOut.line;\n\n // we calculate pixel sizes based on the specified graph size,\n // not the actual (in case something pushed the margins around)\n // which is a little odd but avoids an odd iterative effect\n // when the colorbar itself is pushing the margins.\n // but then the fractional size is calculated based on the\n // actual graph size, so that the axes will size correctly.\n var thickPx = Math.round(thickness * (thicknessmode === 'fraction' ? (isVertical ? gs.w : gs.h) : 1));\n var thickFrac = thickPx / (isVertical ? gs.w : gs.h);\n var lenPx = Math.round(len * (lenmode === 'fraction' ? (isVertical ? gs.h : gs.w) : 1));\n var lenFrac = lenPx / (isVertical ? gs.h : gs.w);\n\n var posW = isPaperX ? gs.w : gd._fullLayout.width;\n var posH = isPaperY ? gs.h : gd._fullLayout.height;\n\n // x positioning: do it initially just for left anchor,\n // then fix at the end (since we don't know the width yet)\n var uPx = Math.round(isVertical ?\n optsX * posW + xpad :\n optsY * posH + ypad\n );\n\n var xRatio = {center: 0.5, right: 1}[xanchor] || 0;\n var yRatio = {top: 1, middle: 0.5}[yanchor] || 0;\n\n // for dragging... this is getting a little muddled...\n var uFrac = isVertical ?\n optsX - xRatio * thickFrac :\n optsY - yRatio * thickFrac;\n\n // y/x positioning (for v/h) we can do correctly from the start\n var vFrac = isVertical ?\n optsY - yRatio * lenFrac :\n optsX - xRatio * lenFrac;\n\n var vPx = Math.round(isVertical ?\n posH * (1 - vFrac) :\n posW * vFrac\n );\n\n // stash a few things for makeEditable\n opts._lenFrac = lenFrac;\n opts._thickFrac = thickFrac;\n opts._uFrac = uFrac;\n opts._vFrac = vFrac;\n\n // stash mocked axis for contour label formatting\n var ax = opts._axis = mockColorBarAxis(gd, opts, zrange);\n\n // position can't go in through supplyDefaults\n // because that restricts it to [0,1]\n ax.position = thickFrac + (isVertical ?\n optsX + xpad / gs.w :\n optsY + ypad / gs.h\n );\n\n var topOrBottom = ['top', 'bottom'].indexOf(titleSide) !== -1;\n\n if(isVertical && topOrBottom) {\n ax.title.side = titleSide;\n ax.titlex = optsX + xpad / gs.w;\n ax.titley = vFrac + (title.side === 'top' ? lenFrac - ypad / gs.h : ypad / gs.h);\n }\n\n if(!isVertical && !topOrBottom) {\n ax.title.side = titleSide;\n ax.titley = optsY + ypad / gs.h;\n ax.titlex = vFrac + xpad / gs.w; // right side\n }\n\n if(line.color && opts.tickmode === 'auto') {\n ax.tickmode = 'linear';\n ax.tick0 = levelsIn.start;\n var dtick = levelsIn.size;\n // expand if too many contours, so we don't get too many ticks\n var autoNtick = Lib.constrain(lenPx / 50, 4, 15) + 1;\n var dtFactor = (zrange[1] - zrange[0]) / ((opts.nticks || autoNtick) * dtick);\n if(dtFactor > 1) {\n var dtexp = Math.pow(10, Math.floor(Math.log(dtFactor) / Math.LN10));\n dtick *= dtexp * Lib.roundUp(dtFactor / dtexp, [2, 5, 10]);\n // if the contours are at round multiples, reset tick0\n // so they're still at round multiples. Otherwise,\n // keep the first label on the first contour level\n if((Math.abs(levelsIn.start) / levelsIn.size + 1e-6) % 1 < 2e-6) {\n ax.tick0 = 0;\n }\n }\n ax.dtick = dtick;\n }\n\n // set domain after init, because we may want to\n // allow it outside [0,1]\n ax.domain = isVertical ? [\n vFrac + ypad / gs.h,\n vFrac + lenFrac - ypad / gs.h\n ] : [\n vFrac + xpad / gs.w,\n vFrac + lenFrac - xpad / gs.w\n ];\n\n ax.setScale();\n\n g.attr('transform', strTranslate(Math.round(gs.l), Math.round(gs.t)));\n\n var titleCont = g.select('.' + cn.cbtitleunshift)\n .attr('transform', strTranslate(-Math.round(gs.l), -Math.round(gs.t)));\n\n var ticklabelposition = ax.ticklabelposition;\n var titleFontSize = ax.title.font.size;\n\n var axLayer = g.select('.' + cn.cbaxis);\n var titleEl;\n var titleHeight = 0;\n var titleWidth = 0;\n\n function drawTitle(titleClass, titleOpts) {\n var dfltTitleOpts = {\n propContainer: ax,\n propName: opts._propPrefix + 'title',\n traceIndex: opts._traceIndex,\n _meta: opts._meta,\n placeholder: fullLayout._dfltTitle.colorbar,\n containerGroup: g.select('.' + cn.cbtitle)\n };\n\n // this class-to-rotate thing with convertToTspans is\n // getting hackier and hackier... delete groups with the\n // wrong class (in case earlier the colorbar was drawn on\n // a different side, I think?)\n var otherClass = titleClass.charAt(0) === 'h' ?\n titleClass.substr(1) :\n 'h' + titleClass;\n g.selectAll('.' + otherClass + ',.' + otherClass + '-math-group').remove();\n\n Titles.draw(gd, titleClass, extendFlat(dfltTitleOpts, titleOpts || {}));\n }\n\n function drawDummyTitle() {\n // draw the title so we know how much room it needs\n // when we squish the axis.\n // On vertical colorbars this only applies to top or bottom titles, not right side.\n // On horizontal colorbars this only applies to right, etc.\n\n if(\n (isVertical && topOrBottom) ||\n (!isVertical && !topOrBottom)\n ) {\n var x, y;\n\n if(titleSide === 'top') {\n x = xpad + gs.l + posW * optsX;\n y = ypad + gs.t + posH * (1 - vFrac - lenFrac) + 3 + titleFontSize * 0.75;\n }\n\n if(titleSide === 'bottom') {\n x = xpad + gs.l + posW * optsX;\n y = ypad + gs.t + posH * (1 - vFrac) - 3 - titleFontSize * 0.25;\n }\n\n if(titleSide === 'right') {\n y = ypad + gs.t + posH * optsY + 3 + titleFontSize * 0.75;\n x = xpad + gs.l + posW * vFrac;\n }\n\n drawTitle(ax._id + 'title', {\n attributes: {x: x, y: y, 'text-anchor': isVertical ? 'start' : 'middle'}\n });\n }\n }\n\n function drawCbTitle() {\n if(\n (isVertical && !topOrBottom) ||\n (!isVertical && topOrBottom)\n ) {\n var pos = ax.position || 0;\n var mid = ax._offset + ax._length / 2;\n var x, y;\n\n if(titleSide === 'right') {\n y = mid;\n x = gs.l + posW * pos + 10 + titleFontSize * (\n ax.showticklabels ? 1 : 0.5\n );\n } else {\n x = mid;\n\n if(titleSide === 'bottom') {\n y = gs.t + posH * pos + 10 + (\n ticklabelposition.indexOf('inside') === -1 ?\n ax.tickfont.size :\n 0\n ) + (\n ax.ticks !== 'intside' ?\n opts.ticklen || 0 :\n 0\n );\n }\n\n if(titleSide === 'top') {\n var nlines = title.text.split('
').length;\n y = gs.t + posH * pos + 10 - thickPx - LINE_SPACING * titleFontSize * nlines;\n }\n }\n\n drawTitle((isVertical ?\n // the 'h' + is a hack to get around the fact that\n // convertToTspans rotates any 'y...' class by 90 degrees.\n // TODO: find a better way to control this.\n 'h' :\n 'v'\n ) + ax._id + 'title', {\n avoid: {\n selection: d3.select(gd).selectAll('g.' + ax._id + 'tick'),\n side: titleSide,\n offsetTop: isVertical ? 0 : gs.t,\n offsetLeft: isVertical ? gs.l : 0,\n maxShift: isVertical ? fullLayout.width : fullLayout.height\n },\n attributes: {x: x, y: y, 'text-anchor': 'middle'},\n transform: {rotate: isVertical ? -90 : 0, offset: 0}\n });\n }\n }\n\n function drawAxis() {\n if(\n (!isVertical && !topOrBottom) ||\n (isVertical && topOrBottom)\n ) {\n // squish the axis top to make room for the title\n var titleGroup = g.select('.' + cn.cbtitle);\n var titleText = titleGroup.select('text');\n var titleTrans = [-outlinewidth / 2, outlinewidth / 2];\n var mathJaxNode = titleGroup\n .select('.h' + ax._id + 'title-math-group')\n .node();\n var lineSize = 15.6;\n if(titleText.node()) {\n lineSize = parseInt(titleText.node().style.fontSize, 10) * LINE_SPACING;\n }\n\n var bb;\n if(mathJaxNode) {\n bb = Drawing.bBox(mathJaxNode);\n titleWidth = bb.width;\n titleHeight = bb.height;\n if(titleHeight > lineSize) {\n // not entirely sure how mathjax is doing\n // vertical alignment, but this seems to work.\n titleTrans[1] -= (titleHeight - lineSize) / 2;\n }\n } else if(titleText.node() && !titleText.classed(cn.jsPlaceholder)) {\n bb = Drawing.bBox(titleText.node());\n titleWidth = bb.width;\n titleHeight = bb.height;\n }\n\n if(isVertical) {\n if(titleHeight) {\n // buffer btwn colorbar and title\n // TODO: configurable\n titleHeight += 5;\n\n if(titleSide === 'top') {\n ax.domain[1] -= titleHeight / gs.h;\n titleTrans[1] *= -1;\n } else {\n ax.domain[0] += titleHeight / gs.h;\n var nlines = svgTextUtils.lineCount(titleText);\n titleTrans[1] += (1 - nlines) * lineSize;\n }\n\n titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));\n ax.setScale();\n }\n } else { // horizontal colorbars\n if(titleWidth) {\n if(titleSide === 'right') {\n ax.domain[0] += (titleWidth + titleFontSize / 2) / gs.w;\n }\n\n titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));\n ax.setScale();\n }\n }\n }\n\n g.selectAll('.' + cn.cbfills + ',.' + cn.cblines)\n .attr('transform', isVertical ?\n strTranslate(0, Math.round(gs.h * (1 - ax.domain[1]))) :\n strTranslate(Math.round(gs.w * ax.domain[0]), 0)\n );\n\n axLayer.attr('transform', isVertical ?\n strTranslate(0, Math.round(-gs.t)) :\n strTranslate(Math.round(-gs.l), 0)\n );\n\n var fills = g.select('.' + cn.cbfills)\n .selectAll('rect.' + cn.cbfill)\n .attr('style', '')\n .data(fillLevels);\n fills.enter().append('rect')\n .classed(cn.cbfill, true)\n .attr('style', '');\n fills.exit().remove();\n\n var zBounds = zrange\n .map(ax.c2p)\n .map(Math.round)\n .sort(function(a, b) { return a - b; });\n\n fills.each(function(d, i) {\n var z = [\n (i === 0) ? zrange[0] : (fillLevels[i] + fillLevels[i - 1]) / 2,\n (i === fillLevels.length - 1) ? zrange[1] : (fillLevels[i] + fillLevels[i + 1]) / 2\n ]\n .map(ax.c2p)\n .map(Math.round);\n\n // offset the side adjoining the next rectangle so they\n // overlap, to prevent antialiasing gaps\n if(isVertical) {\n z[1] = Lib.constrain(z[1] + (z[1] > z[0]) ? 1 : -1, zBounds[0], zBounds[1]);\n } /* else {\n // TODO: horizontal case\n } */\n\n // Colorbar cannot currently support opacities so we\n // use an opaque fill even when alpha channels present\n var fillEl = d3.select(this)\n .attr(isVertical ? 'x' : 'y', uPx)\n .attr(isVertical ? 'y' : 'x', d3.min(z))\n .attr(isVertical ? 'width' : 'height', Math.max(thickPx, 2))\n .attr(isVertical ? 'height' : 'width', Math.max(d3.max(z) - d3.min(z), 2));\n\n if(opts._fillgradient) {\n Drawing.gradient(fillEl, gd, opts._id, isVertical ? 'vertical' : 'horizontalreversed', opts._fillgradient, 'fill');\n } else {\n // tinycolor can't handle exponents and\n // at this scale, removing it makes no difference.\n var colorString = fillColormap(d).replace('e-', '');\n fillEl.attr('fill', tinycolor(colorString).toHexString());\n }\n });\n\n var lines = g.select('.' + cn.cblines)\n .selectAll('path.' + cn.cbline)\n .data(line.color && line.width ? lineLevels : []);\n lines.enter().append('path')\n .classed(cn.cbline, true);\n lines.exit().remove();\n lines.each(function(d) {\n var a = uPx;\n var b = (Math.round(ax.c2p(d)) + (line.width / 2) % 1);\n\n d3.select(this)\n .attr('d', 'M' +\n (isVertical ? a + ',' + b : b + ',' + a) +\n (isVertical ? 'h' : 'v') +\n thickPx\n )\n .call(Drawing.lineGroupStyle, line.width, lineColormap(d), line.dash);\n });\n\n // force full redraw of labels and ticks\n axLayer.selectAll('g.' + ax._id + 'tick,path').remove();\n\n var shift = uPx + thickPx +\n (outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0);\n\n var vals = Axes.calcTicks(ax);\n var tickSign = Axes.getTickSigns(ax)[2];\n\n Axes.drawTicks(gd, ax, {\n vals: ax.ticks === 'inside' ? Axes.clipEnds(ax, vals) : vals,\n layer: axLayer,\n path: Axes.makeTickPath(ax, shift, tickSign),\n transFn: Axes.makeTransTickFn(ax)\n });\n\n return Axes.drawLabels(gd, ax, {\n vals: vals,\n layer: axLayer,\n transFn: Axes.makeTransTickLabelFn(ax),\n labelFns: Axes.makeLabelFns(ax, shift)\n });\n }\n\n // wait for the axis & title to finish rendering before\n // continuing positioning\n // TODO: why are we redrawing multiple times now with this?\n // I guess autoMargin doesn't like being post-promise?\n function positionCB() {\n var bb;\n var innerThickness = thickPx + outlinewidth / 2;\n if(ticklabelposition.indexOf('inside') === -1) {\n bb = Drawing.bBox(axLayer.node());\n innerThickness += isVertical ? bb.width : bb.height;\n }\n\n titleEl = titleCont.select('text');\n\n var titleWidth = 0;\n\n var topSideVertical = isVertical && titleSide === 'top';\n var rightSideHorizontal = !isVertical && titleSide === 'right';\n\n var moveY = 0;\n\n if(titleEl.node() && !titleEl.classed(cn.jsPlaceholder)) {\n var _titleHeight;\n\n var mathJaxNode = titleCont.select('.h' + ax._id + 'title-math-group').node();\n if(mathJaxNode && (\n (isVertical && topOrBottom) ||\n (!isVertical && !topOrBottom)\n )) {\n bb = Drawing.bBox(mathJaxNode);\n titleWidth = bb.width;\n _titleHeight = bb.height;\n } else {\n // note: the formula below works for all title sides,\n // (except for top/bottom mathjax, above)\n // but the weird gs.l is because the titleunshift\n // transform gets removed by Drawing.bBox\n bb = Drawing.bBox(titleCont.node());\n titleWidth = bb.right - gs.l - (isVertical ? uPx : vPx);\n _titleHeight = bb.bottom - gs.t - (isVertical ? vPx : uPx);\n\n if(\n !isVertical && titleSide === 'top'\n ) {\n innerThickness += bb.height;\n moveY = bb.height;\n }\n }\n\n if(rightSideHorizontal) {\n titleEl.attr('transform', strTranslate(titleWidth / 2 + titleFontSize / 2, 0));\n\n titleWidth *= 2;\n }\n\n innerThickness = Math.max(innerThickness,\n isVertical ? titleWidth : _titleHeight\n );\n }\n\n var outerThickness = (isVertical ?\n xpad :\n ypad\n ) * 2 + innerThickness + borderwidth + outlinewidth / 2;\n\n var hColorbarMoveTitle = 0;\n if(!isVertical && title.text && yanchor === 'bottom' && optsY <= 0) {\n hColorbarMoveTitle = outerThickness / 2;\n\n outerThickness += hColorbarMoveTitle;\n moveY += hColorbarMoveTitle;\n }\n fullLayout._hColorbarMoveTitle = hColorbarMoveTitle;\n fullLayout._hColorbarMoveCBTitle = moveY;\n\n var extraW = borderwidth + outlinewidth;\n\n // TODO - are these the correct positions?\n var lx = (isVertical ? uPx : vPx) - extraW / 2 - (isVertical ? xpad : 0);\n var ly = (isVertical ? vPx : uPx) - (isVertical ? lenPx : ypad + moveY - hColorbarMoveTitle);\n\n g.select('.' + cn.cbbg)\n .attr('x', lx)\n .attr('y', ly)\n .attr(isVertical ? 'width' : 'height', Math.max(outerThickness - hColorbarMoveTitle, 2))\n .attr(isVertical ? 'height' : 'width', Math.max(lenPx + extraW, 2))\n .call(Color.fill, bgcolor)\n .call(Color.stroke, opts.bordercolor)\n .style('stroke-width', borderwidth);\n\n var moveX = rightSideHorizontal ? Math.max(titleWidth - 10, 0) : 0;\n\n g.selectAll('.' + cn.cboutline)\n .attr('x', (isVertical ? uPx : vPx + xpad) + moveX)\n .attr('y', (isVertical ? vPx + ypad - lenPx : uPx) + (topSideVertical ? titleHeight : 0))\n .attr(isVertical ? 'width' : 'height', Math.max(thickPx, 2))\n .attr(isVertical ? 'height' : 'width', Math.max(lenPx - (isVertical ?\n 2 * ypad + titleHeight :\n 2 * xpad + moveX\n ), 2))\n .call(Color.stroke, opts.outlinecolor)\n .style({\n fill: 'none',\n 'stroke-width': outlinewidth\n });\n\n var xShift = ((isVertical ? xRatio * outerThickness : 0));\n var yShift = ((isVertical ? 0 : (1 - yRatio) * outerThickness - moveY));\n xShift = isPaperX ? gs.l - xShift : -xShift;\n yShift = isPaperY ? gs.t - yShift : -yShift;\n\n g.attr('transform', strTranslate(\n xShift,\n yShift\n ));\n\n if(!isVertical && (\n borderwidth || (\n tinycolor(bgcolor).getAlpha() &&\n !tinycolor.equals(fullLayout.paper_bgcolor, bgcolor)\n )\n )) {\n // for horizontal colorbars when there is a border line or having different background color\n // hide/adjust x positioning for the first/last tick labels if they go outside the border\n var tickLabels = axLayer.selectAll('text');\n var numTicks = tickLabels[0].length;\n\n var border = g.select('.' + cn.cbbg).node();\n var oBb = Drawing.bBox(border);\n var oTr = Drawing.getTranslate(g);\n\n var TEXTPAD = 2;\n\n tickLabels.each(function(d, i) {\n var first = 0;\n var last = numTicks - 1;\n if(i === first || i === last) {\n var iBb = Drawing.bBox(this);\n var iTr = Drawing.getTranslate(this);\n var deltaX;\n\n if(i === last) {\n var iRight = iBb.right + iTr.x;\n var oRight = oBb.right + oTr.x + vPx - borderwidth - TEXTPAD + optsX;\n\n deltaX = oRight - iRight;\n if(deltaX > 0) deltaX = 0;\n } else if(i === first) {\n var iLeft = iBb.left + iTr.x;\n var oLeft = oBb.left + oTr.x + vPx + borderwidth + TEXTPAD;\n\n deltaX = oLeft - iLeft;\n if(deltaX < 0) deltaX = 0;\n }\n\n if(deltaX) {\n if(numTicks < 3) { // adjust position\n this.setAttribute('transform',\n 'translate(' + deltaX + ',0) ' +\n this.getAttribute('transform')\n );\n } else { // hide\n this.setAttribute('visibility', 'hidden');\n }\n }\n }\n });\n }\n\n // auto margin adjustment\n var marginOpts = {};\n var lFrac = FROM_TL[xanchor];\n var rFrac = FROM_BR[xanchor];\n var tFrac = FROM_TL[yanchor];\n var bFrac = FROM_BR[yanchor];\n\n var extraThickness = outerThickness - thickPx;\n if(isVertical) {\n if(lenmode === 'pixels') {\n marginOpts.y = optsY;\n marginOpts.t = lenPx * tFrac;\n marginOpts.b = lenPx * bFrac;\n } else {\n marginOpts.t = marginOpts.b = 0;\n marginOpts.yt = optsY + len * tFrac;\n marginOpts.yb = optsY - len * bFrac;\n }\n\n if(thicknessmode === 'pixels') {\n marginOpts.x = optsX;\n marginOpts.l = outerThickness * lFrac;\n marginOpts.r = outerThickness * rFrac;\n } else {\n marginOpts.l = extraThickness * lFrac;\n marginOpts.r = extraThickness * rFrac;\n marginOpts.xl = optsX - thickness * lFrac;\n marginOpts.xr = optsX + thickness * rFrac;\n }\n } else { // horizontal colorbars\n if(lenmode === 'pixels') {\n marginOpts.x = optsX;\n marginOpts.l = lenPx * lFrac;\n marginOpts.r = lenPx * rFrac;\n } else {\n marginOpts.l = marginOpts.r = 0;\n marginOpts.xl = optsX + len * lFrac;\n marginOpts.xr = optsX - len * rFrac;\n }\n\n if(thicknessmode === 'pixels') {\n marginOpts.y = 1 - optsY;\n marginOpts.t = outerThickness * tFrac;\n marginOpts.b = outerThickness * bFrac;\n } else {\n marginOpts.t = extraThickness * tFrac;\n marginOpts.b = extraThickness * bFrac;\n marginOpts.yt = optsY - thickness * tFrac;\n marginOpts.yb = optsY + thickness * bFrac;\n }\n }\n var sideY = opts.y < 0.5 ? 'b' : 't';\n var sideX = opts.x < 0.5 ? 'l' : 'r';\n\n gd._fullLayout._reservedMargin[opts._id] = {};\n var possibleReservedMargins = {\n r: (fullLayout.width - lx - xShift),\n l: lx + marginOpts.r,\n b: (fullLayout.height - ly - yShift),\n t: ly + marginOpts.b\n };\n\n if(isPaperX && isPaperY) {\n Plots.autoMargin(gd, opts._id, marginOpts);\n } else if(isPaperX) {\n gd._fullLayout._reservedMargin[opts._id][sideY] = possibleReservedMargins[sideY];\n } else if(isPaperY) {\n gd._fullLayout._reservedMargin[opts._id][sideX] = possibleReservedMargins[sideX];\n } else {\n if(isVertical) {\n gd._fullLayout._reservedMargin[opts._id][sideX] = possibleReservedMargins[sideX];\n } else {\n gd._fullLayout._reservedMargin[opts._id][sideY] = possibleReservedMargins[sideY];\n }\n }\n }\n\n return Lib.syncOrAsync([\n Plots.previousPromises,\n drawDummyTitle,\n drawAxis,\n drawCbTitle,\n Plots.previousPromises,\n positionCB\n ], gd);\n}\n\nfunction makeEditable(g, opts, gd) {\n var isVertical = opts.orientation === 'v';\n var fullLayout = gd._fullLayout;\n var gs = fullLayout._size;\n var t0, xf, yf;\n\n dragElement.init({\n element: g.node(),\n gd: gd,\n prepFn: function() {\n t0 = g.attr('transform');\n setCursor(g);\n },\n moveFn: function(dx, dy) {\n g.attr('transform', t0 + strTranslate(dx, dy));\n\n xf = dragElement.align(\n (isVertical ? opts._uFrac : opts._vFrac) + (dx / gs.w),\n isVertical ? opts._thickFrac : opts._lenFrac,\n 0, 1, opts.xanchor);\n yf = dragElement.align(\n (isVertical ? opts._vFrac : (1 - opts._uFrac)) - (dy / gs.h),\n isVertical ? opts._lenFrac : opts._thickFrac,\n 0, 1, opts.yanchor);\n\n var csr = dragElement.getCursor(xf, yf, opts.xanchor, opts.yanchor);\n setCursor(g, csr);\n },\n doneFn: function() {\n setCursor(g);\n\n if(xf !== undefined && yf !== undefined) {\n var update = {};\n update[opts._propPrefix + 'x'] = xf;\n update[opts._propPrefix + 'y'] = yf;\n if(opts._traceIndex !== undefined) {\n Registry.call('_guiRestyle', gd, update, opts._traceIndex);\n } else {\n Registry.call('_guiRelayout', gd, update);\n }\n }\n }\n });\n}\n\nfunction calcLevels(gd, opts, zrange) {\n var levelsIn = opts._levels;\n var lineLevels = [];\n var fillLevels = [];\n var l;\n var i;\n\n var l0 = levelsIn.end + levelsIn.size / 100;\n var ls = levelsIn.size;\n var zr0 = (1.001 * zrange[0] - 0.001 * zrange[1]);\n var zr1 = (1.001 * zrange[1] - 0.001 * zrange[0]);\n\n for(i = 0; i < 1e5; i++) {\n l = levelsIn.start + i * ls;\n if(ls > 0 ? (l >= l0) : (l <= l0)) break;\n if(l > zr0 && l < zr1) lineLevels.push(l);\n }\n\n if(opts._fillgradient) {\n fillLevels = [0];\n } else if(typeof opts._fillcolor === 'function') {\n var fillLevelsIn = opts._filllevels;\n\n if(fillLevelsIn) {\n l0 = fillLevelsIn.end + fillLevelsIn.size / 100;\n ls = fillLevelsIn.size;\n for(i = 0; i < 1e5; i++) {\n l = fillLevelsIn.start + i * ls;\n if(ls > 0 ? (l >= l0) : (l <= l0)) break;\n if(l > zrange[0] && l < zrange[1]) fillLevels.push(l);\n }\n } else {\n fillLevels = lineLevels.map(function(v) {\n return v - levelsIn.size / 2;\n });\n fillLevels.push(fillLevels[fillLevels.length - 1] + levelsIn.size);\n }\n } else if(opts._fillcolor && typeof opts._fillcolor === 'string') {\n // doesn't matter what this value is, with a single value\n // we'll make a single fill rect covering the whole bar\n fillLevels = [0];\n }\n\n if(levelsIn.size < 0) {\n lineLevels.reverse();\n fillLevels.reverse();\n }\n\n return {line: lineLevels, fill: fillLevels};\n}\n\nfunction mockColorBarAxis(gd, opts, zrange) {\n var fullLayout = gd._fullLayout;\n\n var isVertical = opts.orientation === 'v';\n\n var cbAxisIn = {\n type: 'linear',\n range: zrange,\n tickmode: opts.tickmode,\n nticks: opts.nticks,\n tick0: opts.tick0,\n dtick: opts.dtick,\n tickvals: opts.tickvals,\n ticktext: opts.ticktext,\n ticks: opts.ticks,\n ticklen: opts.ticklen,\n tickwidth: opts.tickwidth,\n tickcolor: opts.tickcolor,\n showticklabels: opts.showticklabels,\n labelalias: opts.labelalias,\n ticklabelposition: opts.ticklabelposition,\n ticklabeloverflow: opts.ticklabeloverflow,\n ticklabelstep: opts.ticklabelstep,\n tickfont: opts.tickfont,\n tickangle: opts.tickangle,\n tickformat: opts.tickformat,\n exponentformat: opts.exponentformat,\n minexponent: opts.minexponent,\n separatethousands: opts.separatethousands,\n showexponent: opts.showexponent,\n showtickprefix: opts.showtickprefix,\n tickprefix: opts.tickprefix,\n showticksuffix: opts.showticksuffix,\n ticksuffix: opts.ticksuffix,\n title: opts.title,\n showline: true,\n anchor: 'free',\n side: isVertical ? 'right' : 'bottom',\n position: 1\n };\n\n var letter = isVertical ? 'y' : 'x';\n\n var cbAxisOut = {\n type: 'linear',\n _id: letter + opts._id\n };\n\n var axisOptions = {\n letter: letter,\n font: fullLayout.font,\n noAutotickangles: letter === 'y',\n noHover: true,\n noTickson: true,\n noTicklabelmode: true,\n noInsideRange: true,\n calendar: fullLayout.calendar // not really necessary (yet?)\n };\n\n function coerce(attr, dflt) {\n return Lib.coerce(cbAxisIn, cbAxisOut, axisLayoutAttrs, attr, dflt);\n }\n\n handleAxisDefaults(cbAxisIn, cbAxisOut, coerce, axisOptions, fullLayout);\n handleAxisPositionDefaults(cbAxisIn, cbAxisOut, coerce, axisOptions);\n\n return cbAxisOut;\n}\n\nmodule.exports = {\n draw: draw\n};\n","'use strict';\n\nvar extendFlat = require('../../lib/extend').extendFlat;\n\nvar colorScaleAttrs = require('./attributes');\nvar scales = require('./scales').scales;\n\nvar msg = 'Note that `autocolorscale` must be true for this attribute to work.';\n\nmodule.exports = {\n editType: 'calc',\n\n colorscale: {\n editType: 'calc',\n\n sequential: {\n valType: 'colorscale',\n dflt: scales.Reds,\n editType: 'calc',\n description: [\n 'Sets the default sequential colorscale for positive values.',\n msg\n ].join(' ')\n },\n sequentialminus: {\n valType: 'colorscale',\n dflt: scales.Blues,\n editType: 'calc',\n description: [\n 'Sets the default sequential colorscale for negative values.',\n msg\n ].join(' ')\n },\n diverging: {\n valType: 'colorscale',\n dflt: scales.RdBu,\n editType: 'calc',\n description: [\n 'Sets the default diverging colorscale.',\n msg\n ].join(' ')\n }\n },\n\n coloraxis: extendFlat({\n // not really a 'subplot' attribute container,\n // but this is the flag we use to denote attributes that\n // support yaxis, yaxis2, yaxis3, ... counters\n _isSubplotObj: true,\n editType: 'calc',\n description: [\n ''\n ].join(' ')\n }, colorScaleAttrs('', {\n colorAttr: 'corresponding trace color array(s)',\n noColorAxis: true,\n showScaleDflt: true\n }))\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Registry = require('../../registry');\nvar arrayEditor = require('../../plot_api/plot_template').arrayEditor;\n\nmodule.exports = {\n hasClickToShow: hasClickToShow,\n onClick: onClick\n};\n\n/*\n * hasClickToShow: does the given hoverData have ANY annotations which will\n * turn ON if we click here? (used by hover events to set cursor)\n *\n * gd: graphDiv\n * hoverData: a hoverData array, as included with the *plotly_hover* or\n * *plotly_click* events in the `points` attribute\n *\n * returns: boolean\n */\nfunction hasClickToShow(gd, hoverData) {\n var sets = getToggleSets(gd, hoverData);\n return sets.on.length > 0 || sets.explicitOff.length > 0;\n}\n\n/*\n * onClick: perform the toggling (via Plotly.update) implied by clicking\n * at this hoverData\n *\n * gd: graphDiv\n * hoverData: a hoverData array, as included with the *plotly_hover* or\n * *plotly_click* events in the `points` attribute\n *\n * returns: Promise that the update is complete\n */\nfunction onClick(gd, hoverData) {\n var toggleSets = getToggleSets(gd, hoverData);\n var onSet = toggleSets.on;\n var offSet = toggleSets.off.concat(toggleSets.explicitOff);\n var update = {};\n var annotationsOut = gd._fullLayout.annotations;\n var i, editHelpers;\n\n if(!(onSet.length || offSet.length)) return;\n\n for(i = 0; i < onSet.length; i++) {\n editHelpers = arrayEditor(gd.layout, 'annotations', annotationsOut[onSet[i]]);\n editHelpers.modifyItem('visible', true);\n Lib.extendFlat(update, editHelpers.getUpdateObj());\n }\n\n for(i = 0; i < offSet.length; i++) {\n editHelpers = arrayEditor(gd.layout, 'annotations', annotationsOut[offSet[i]]);\n editHelpers.modifyItem('visible', false);\n Lib.extendFlat(update, editHelpers.getUpdateObj());\n }\n\n return Registry.call('update', gd, {}, update);\n}\n\n/*\n * getToggleSets: find the annotations which will turn on or off at this\n * hoverData\n *\n * gd: graphDiv\n * hoverData: a hoverData array, as included with the *plotly_hover* or\n * *plotly_click* events in the `points` attribute\n *\n * returns: {\n * on: Array (indices of annotations to turn on),\n * off: Array (indices to turn off because you're not hovering on them),\n * explicitOff: Array (indices to turn off because you *are* hovering on them)\n * }\n */\nfunction getToggleSets(gd, hoverData) {\n var annotations = gd._fullLayout.annotations;\n var onSet = [];\n var offSet = [];\n var explicitOffSet = [];\n var hoverLen = (hoverData || []).length;\n\n var i, j, anni, showMode, pointj, xa, ya, toggleType;\n\n for(i = 0; i < annotations.length; i++) {\n anni = annotations[i];\n showMode = anni.clicktoshow;\n\n if(showMode) {\n for(j = 0; j < hoverLen; j++) {\n pointj = hoverData[j];\n xa = pointj.xaxis;\n ya = pointj.yaxis;\n\n if(xa._id === anni.xref &&\n ya._id === anni.yref &&\n xa.d2r(pointj.x) === clickData2r(anni._xclick, xa) &&\n ya.d2r(pointj.y) === clickData2r(anni._yclick, ya)\n ) {\n // match! toggle this annotation\n // regardless of its clicktoshow mode\n // but if it's onout mode, off is implicit\n if(anni.visible) {\n if(showMode === 'onout') toggleType = offSet;\n else toggleType = explicitOffSet;\n } else {\n toggleType = onSet;\n }\n toggleType.push(i);\n break;\n }\n }\n\n if(j === hoverLen) {\n // no match - only turn this annotation OFF, and only if\n // showmode is 'onout'\n if(anni.visible && showMode === 'onout') offSet.push(i);\n }\n }\n }\n\n return {on: onSet, off: offSet, explicitOff: explicitOffSet};\n}\n\n// to handle log axes until v3\nfunction clickData2r(d, ax) {\n return ax.type === 'log' ? ax.l2r(d) : ax.d2r(d);\n}\n","'use strict';\n\nvar Registry = require('../../registry');\nvar Lib = require('../../lib');\nvar Template = require('../../plot_api/plot_template');\n\nvar plotsAttrs = require('../../plots/attributes');\nvar attributes = require('./attributes');\nvar basePlotLayoutAttributes = require('../../plots/layout_attributes');\nvar helpers = require('./helpers');\n\nfunction groupDefaults(legendId, layoutIn, layoutOut, fullData) {\n var containerIn = layoutIn[legendId] || {};\n var containerOut = Template.newContainer(layoutOut, legendId);\n\n function coerce(attr, dflt) {\n return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);\n }\n\n // N.B. unified hover needs to inherit from font, bgcolor & bordercolor even when legend.visible is false\n var itemFont = Lib.coerceFont(coerce, 'font', layoutOut.font);\n coerce('bgcolor', layoutOut.paper_bgcolor);\n coerce('bordercolor');\n\n var visible = coerce('visible');\n if(!visible) return;\n\n var trace;\n var traceCoerce = function(attr, dflt) {\n var traceIn = trace._input;\n var traceOut = trace;\n return Lib.coerce(traceIn, traceOut, plotsAttrs, attr, dflt);\n };\n\n var globalFont = layoutOut.font || {};\n var grouptitlefont = Lib.coerceFont(coerce, 'grouptitlefont', Lib.extendFlat({}, globalFont, {\n size: Math.round(globalFont.size * 1.1)\n }));\n\n var legendTraceCount = 0;\n var legendReallyHasATrace = false;\n var defaultOrder = 'normal';\n\n var shapesWithLegend = (layoutOut.shapes || []).filter(function(d) { return d.showlegend; });\n\n var allLegendItems = fullData.concat(shapesWithLegend).filter(function(d) {\n return legendId === (d.legend || 'legend');\n });\n\n for(var i = 0; i < allLegendItems.length; i++) {\n trace = allLegendItems[i];\n\n if(!trace.visible) continue;\n\n var isShape = trace._isShape;\n\n // Note that we explicitly count any trace that is either shown or\n // *would* be shown by default, toward the two traces you need to\n // ensure the legend is shown by default, because this can still help\n // disambiguate.\n if(trace.showlegend || (\n trace._dfltShowLegend && !(\n trace._module &&\n trace._module.attributes &&\n trace._module.attributes.showlegend &&\n trace._module.attributes.showlegend.dflt === false\n )\n )) {\n legendTraceCount++;\n if(trace.showlegend) {\n legendReallyHasATrace = true;\n // Always show the legend by default if there's a pie,\n // or if there's only one trace but it's explicitly shown\n if(!isShape && Registry.traceIs(trace, 'pie-like') ||\n trace._input.showlegend === true\n ) {\n legendTraceCount++;\n }\n }\n\n Lib.coerceFont(traceCoerce, 'legendgrouptitle.font', grouptitlefont);\n }\n\n if((!isShape && Registry.traceIs(trace, 'bar') && layoutOut.barmode === 'stack') ||\n ['tonextx', 'tonexty'].indexOf(trace.fill) !== -1) {\n defaultOrder = helpers.isGrouped({traceorder: defaultOrder}) ?\n 'grouped+reversed' : 'reversed';\n }\n\n if(trace.legendgroup !== undefined && trace.legendgroup !== '') {\n defaultOrder = helpers.isReversed({traceorder: defaultOrder}) ?\n 'reversed+grouped' : 'grouped';\n }\n }\n\n var showLegend = Lib.coerce(layoutIn, layoutOut,\n basePlotLayoutAttributes, 'showlegend',\n legendReallyHasATrace && (legendTraceCount > (legendId === 'legend' ? 1 : 0)));\n\n // delete legend\n if(showLegend === false) layoutOut[legendId] = undefined;\n\n if(showLegend === false && !containerIn.uirevision) return;\n\n coerce('uirevision', layoutOut.uirevision);\n\n if(showLegend === false) return;\n\n coerce('borderwidth');\n\n var orientation = coerce('orientation');\n\n var yref = coerce('yref');\n var xref = coerce('xref');\n\n var isHorizontal = orientation === 'h';\n var isPaperY = yref === 'paper';\n var isPaperX = xref === 'paper';\n var defaultX, defaultY, defaultYAnchor;\n var defaultXAnchor = 'left';\n\n if(isHorizontal) {\n defaultX = 0;\n\n if(Registry.getComponentMethod('rangeslider', 'isVisible')(layoutIn.xaxis)) {\n if(isPaperY) {\n defaultY = 1.1;\n defaultYAnchor = 'bottom';\n } else {\n defaultY = 1;\n defaultYAnchor = 'top';\n }\n } else {\n // maybe use y=1.1 / yanchor=bottom as above\n // to avoid https://github.com/plotly/plotly.js/issues/1199\n // in v3\n if(isPaperY) {\n defaultY = -0.1;\n defaultYAnchor = 'top';\n } else {\n defaultY = 0;\n defaultYAnchor = 'bottom';\n }\n }\n } else {\n defaultY = 1;\n defaultYAnchor = 'auto';\n if(isPaperX) {\n defaultX = 1.02;\n } else {\n defaultX = 1;\n defaultXAnchor = 'right';\n }\n }\n\n Lib.coerce(containerIn, containerOut, {\n x: {\n valType: 'number',\n editType: 'legend',\n min: isPaperX ? -2 : 0,\n max: isPaperX ? 3 : 1,\n dflt: defaultX,\n }\n }, 'x');\n\n Lib.coerce(containerIn, containerOut, {\n y: {\n valType: 'number',\n editType: 'legend',\n min: isPaperY ? -2 : 0,\n max: isPaperY ? 3 : 1,\n dflt: defaultY,\n }\n }, 'y');\n\n coerce('traceorder', defaultOrder);\n if(helpers.isGrouped(layoutOut[legendId])) coerce('tracegroupgap');\n\n coerce('entrywidth');\n coerce('entrywidthmode');\n coerce('itemsizing');\n coerce('itemwidth');\n\n coerce('itemclick');\n coerce('itemdoubleclick');\n coerce('groupclick');\n\n coerce('xanchor', defaultXAnchor);\n coerce('yanchor', defaultYAnchor);\n coerce('valign');\n Lib.noneOrAll(containerIn, containerOut, ['x', 'y']);\n\n var titleText = coerce('title.text');\n if(titleText) {\n coerce('title.side', isHorizontal ? 'left' : 'top');\n var dfltTitleFont = Lib.extendFlat({}, itemFont, {\n size: Lib.bigFont(itemFont.size)\n });\n\n Lib.coerceFont(coerce, 'title.font', dfltTitleFont);\n }\n}\n\nmodule.exports = function legendDefaults(layoutIn, layoutOut, fullData) {\n var i;\n\n var allLegendsData = fullData.slice();\n\n // shapes could also show up in legends\n var shapes = layoutOut.shapes;\n if(shapes) {\n for(i = 0; i < shapes.length; i++) {\n var shape = shapes[i];\n if(!shape.showlegend) continue;\n\n var mockTrace = {\n _input: shape._input,\n visible: shape.visible,\n showlegend: shape.showlegend,\n legend: shape.legend\n };\n\n allLegendsData.push(mockTrace);\n }\n }\n\n var legends = ['legend'];\n for(i = 0; i < allLegendsData.length; i++) {\n Lib.pushUnique(legends, allLegendsData[i].legend);\n }\n\n layoutOut._legends = [];\n for(i = 0; i < legends.length; i++) {\n var legendId = legends[i];\n\n groupDefaults(legendId, layoutIn, layoutOut, allLegendsData);\n\n if(\n layoutOut[legendId] &&\n layoutOut[legendId].visible\n ) {\n layoutOut[legendId]._id = legendId;\n }\n\n layoutOut._legends.push(legendId);\n }\n};\n","'use strict';\n\nexports.isGrouped = function isGrouped(legendLayout) {\n return (legendLayout.traceorder || '').indexOf('grouped') !== -1;\n};\n\nexports.isVertical = function isVertical(legendLayout) {\n return legendLayout.orientation !== 'h';\n};\n\nexports.isReversed = function isReversed(legendLayout) {\n return (legendLayout.traceorder || '').indexOf('reversed') !== -1;\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar isNumeric = require('fast-isnumeric');\nvar tinycolor = require('tinycolor2');\n\nvar Lib = require('../../lib');\nvar strTranslate = Lib.strTranslate;\nvar strRotate = Lib.strRotate;\nvar Events = require('../../lib/events');\nvar svgTextUtils = require('../../lib/svg_text_utils');\nvar overrideCursor = require('../../lib/override_cursor');\nvar Drawing = require('../drawing');\nvar Color = require('../color');\nvar dragElement = require('../dragelement');\nvar Axes = require('../../plots/cartesian/axes');\nvar Registry = require('../../registry');\n\nvar helpers = require('./helpers');\nvar constants = require('./constants');\n\nvar legendSupplyDefaults = require('../legend/defaults');\nvar legendDraw = require('../legend/draw');\n\n// hover labels for multiple horizontal bars get tilted by some angle,\n// then need to be offset differently if they overlap\nvar YANGLE = constants.YANGLE;\nvar YA_RADIANS = Math.PI * YANGLE / 180;\n\n// expansion of projected height\nvar YFACTOR = 1 / Math.sin(YA_RADIANS);\n\n// to make the appropriate post-rotation x offset,\n// you need both x and y offsets\nvar YSHIFTX = Math.cos(YA_RADIANS);\nvar YSHIFTY = Math.sin(YA_RADIANS);\n\n// size and display constants for hover text\nvar HOVERARROWSIZE = constants.HOVERARROWSIZE;\nvar HOVERTEXTPAD = constants.HOVERTEXTPAD;\n\nvar multipleHoverPoints = {\n box: true,\n ohlc: true,\n violin: true,\n candlestick: true\n};\n\nvar cartesianScatterPoints = {\n scatter: true,\n scattergl: true,\n splom: true\n};\n\n// fx.hover: highlight data on hover\n// evt can be a mousemove event, or an object with data about what points\n// to hover on\n// {xpx,ypx[,hovermode]} - pixel locations from top left\n// (with optional overriding hovermode)\n// {xval,yval[,hovermode]} - data values\n// [{curveNumber,(pointNumber|xval and/or yval)}] -\n// array of specific points to highlight\n// pointNumber is a single integer if gd.data[curveNumber] is 1D,\n// or a two-element array if it's 2D\n// xval and yval are data values,\n// 1D data may specify either or both,\n// 2D data must specify both\n// subplot is an id string (default \"xy\")\n// makes use of gl.hovermode, which can be:\n// x (find the points with the closest x values, ie a column),\n// closest (find the single closest point)\n// internally there are two more that occasionally get used:\n// y (pick out a row - only used for multiple horizontal bar charts)\n// array (used when the user specifies an explicit\n// array of points to hover on)\n//\n// We wrap the hovers in a timer, to limit their frequency.\n// The actual rendering is done by private function _hover.\nexports.hover = function hover(gd, evt, subplot, noHoverEvent) {\n gd = Lib.getGraphDiv(gd);\n // The 'target' property changes when bubbling out of Shadow DOM.\n // Throttling can delay reading the target, so we save the current value.\n var eventTarget = evt.target;\n Lib.throttle(\n gd._fullLayout._uid + constants.HOVERID,\n constants.HOVERMINTIME,\n function() { _hover(gd, evt, subplot, noHoverEvent, eventTarget); }\n );\n};\n\n/*\n * Draw a single hover item or an array of hover item in a pre-existing svg container somewhere\n * hoverItem should have keys:\n * - x and y (or x0, x1, y0, and y1):\n * the pixel position to mark, relative to opts.container\n * - xLabel, yLabel, zLabel, text, and name:\n * info to go in the label\n * - color:\n * the background color for the label.\n * - idealAlign (optional):\n * 'left' or 'right' for which side of the x/y box to try to put this on first\n * - borderColor (optional):\n * color for the border, defaults to strongest contrast with color\n * - fontFamily (optional):\n * string, the font for this label, defaults to constants.HOVERFONT\n * - fontSize (optional):\n * the label font size, defaults to constants.HOVERFONTSIZE\n * - fontColor (optional):\n * defaults to borderColor\n * opts should have keys:\n * - bgColor:\n * the background color this is against, used if the trace is\n * non-opaque, and for the name, which goes outside the box\n * - container:\n * a or element to add the hover label to\n * - outerContainer:\n * normally a parent of `container`, sets the bounding box to use to\n * constrain the hover label and determine whether to show it on the left or right\n * opts can have optional keys:\n * - anchorIndex:\n the index of the hover item used as an anchor for positioning.\n The other hover items will be pushed up or down to prevent overlap.\n */\nexports.loneHover = function loneHover(hoverItems, opts) {\n var multiHover = true;\n if(!Array.isArray(hoverItems)) {\n multiHover = false;\n hoverItems = [hoverItems];\n }\n\n var gd = opts.gd;\n var gTop = getTopOffset(gd);\n var gLeft = getLeftOffset(gd);\n\n var pointsData = hoverItems.map(function(hoverItem) {\n var _x0 = hoverItem._x0 || hoverItem.x0 || hoverItem.x || 0;\n var _x1 = hoverItem._x1 || hoverItem.x1 || hoverItem.x || 0;\n var _y0 = hoverItem._y0 || hoverItem.y0 || hoverItem.y || 0;\n var _y1 = hoverItem._y1 || hoverItem.y1 || hoverItem.y || 0;\n\n var eventData = hoverItem.eventData;\n if(eventData) {\n var x0 = Math.min(_x0, _x1);\n var x1 = Math.max(_x0, _x1);\n var y0 = Math.min(_y0, _y1);\n var y1 = Math.max(_y0, _y1);\n\n var trace = hoverItem.trace;\n if(Registry.traceIs(trace, 'gl3d')) {\n var container = gd._fullLayout[trace.scene]._scene.container;\n var dx = container.offsetLeft;\n var dy = container.offsetTop;\n x0 += dx;\n x1 += dx;\n y0 += dy;\n y1 += dy;\n } // TODO: handle heatmapgl\n\n eventData.bbox = {\n x0: x0 + gLeft,\n x1: x1 + gLeft,\n y0: y0 + gTop,\n y1: y1 + gTop\n };\n\n if(opts.inOut_bbox) {\n opts.inOut_bbox.push(eventData.bbox);\n }\n } else {\n eventData = false;\n }\n\n return {\n color: hoverItem.color || Color.defaultLine,\n x0: hoverItem.x0 || hoverItem.x || 0,\n x1: hoverItem.x1 || hoverItem.x || 0,\n y0: hoverItem.y0 || hoverItem.y || 0,\n y1: hoverItem.y1 || hoverItem.y || 0,\n xLabel: hoverItem.xLabel,\n yLabel: hoverItem.yLabel,\n zLabel: hoverItem.zLabel,\n text: hoverItem.text,\n name: hoverItem.name,\n idealAlign: hoverItem.idealAlign,\n\n // optional extra bits of styling\n borderColor: hoverItem.borderColor,\n fontFamily: hoverItem.fontFamily,\n fontSize: hoverItem.fontSize,\n fontColor: hoverItem.fontColor,\n nameLength: hoverItem.nameLength,\n textAlign: hoverItem.textAlign,\n\n // filler to make createHoverText happy\n trace: hoverItem.trace || {\n index: 0,\n hoverinfo: ''\n },\n xa: {_offset: 0},\n ya: {_offset: 0},\n index: 0,\n\n hovertemplate: hoverItem.hovertemplate || false,\n hovertemplateLabels: hoverItem.hovertemplateLabels || false,\n\n eventData: eventData\n };\n });\n\n var rotateLabels = false;\n\n var hoverText = createHoverText(pointsData, {\n gd: gd,\n hovermode: 'closest',\n rotateLabels: rotateLabels,\n bgColor: opts.bgColor || Color.background,\n container: d3.select(opts.container),\n outerContainer: opts.outerContainer || opts.container\n });\n var hoverLabel = hoverText.hoverLabels;\n\n // Fix vertical overlap\n var tooltipSpacing = 5;\n var lastBottomY = 0;\n var anchor = 0;\n hoverLabel\n .sort(function(a, b) {return a.y0 - b.y0;})\n .each(function(d, i) {\n var topY = d.y0 - d.by / 2;\n\n if((topY - tooltipSpacing) < lastBottomY) {\n d.offset = (lastBottomY - topY) + tooltipSpacing;\n } else {\n d.offset = 0;\n }\n\n lastBottomY = topY + d.by + d.offset;\n\n if(i === opts.anchorIndex || 0) anchor = d.offset;\n })\n .each(function(d) {\n d.offset -= anchor;\n });\n\n var scaleX = gd._fullLayout._invScaleX;\n var scaleY = gd._fullLayout._invScaleY;\n alignHoverText(hoverLabel, rotateLabels, scaleX, scaleY);\n\n return multiHover ? hoverLabel : hoverLabel.node();\n};\n\n// The actual implementation is here:\nfunction _hover(gd, evt, subplot, noHoverEvent, eventTarget) {\n if(!subplot) subplot = 'xy';\n\n // if the user passed in an array of subplots,\n // use those instead of finding overlayed plots\n var subplots = Array.isArray(subplot) ? subplot : [subplot];\n\n var fullLayout = gd._fullLayout;\n var plots = fullLayout._plots || [];\n var plotinfo = plots[subplot];\n var hasCartesian = fullLayout._has('cartesian');\n\n // list of all overlaid subplots to look at\n if(plotinfo) {\n var overlayedSubplots = plotinfo.overlays.map(function(pi) {\n return pi.id;\n });\n\n subplots = subplots.concat(overlayedSubplots);\n }\n\n var len = subplots.length;\n var xaArray = new Array(len);\n var yaArray = new Array(len);\n var supportsCompare = false;\n\n for(var i = 0; i < len; i++) {\n var spId = subplots[i];\n\n if(plots[spId]) {\n // 'cartesian' case\n supportsCompare = true;\n xaArray[i] = plots[spId].xaxis;\n yaArray[i] = plots[spId].yaxis;\n } else if(fullLayout[spId] && fullLayout[spId]._subplot) {\n // other subplot types\n var _subplot = fullLayout[spId]._subplot;\n xaArray[i] = _subplot.xaxis;\n yaArray[i] = _subplot.yaxis;\n } else {\n Lib.warn('Unrecognized subplot: ' + spId);\n return;\n }\n }\n\n var hovermode = evt.hovermode || fullLayout.hovermode;\n\n if(hovermode && !supportsCompare) hovermode = 'closest';\n\n if(['x', 'y', 'closest', 'x unified', 'y unified'].indexOf(hovermode) === -1 || !gd.calcdata ||\n gd.querySelector('.zoombox') || gd._dragging) {\n return dragElement.unhoverRaw(gd, evt);\n }\n\n var hoverdistance = fullLayout.hoverdistance;\n if(hoverdistance === -1) hoverdistance = Infinity;\n\n var spikedistance = fullLayout.spikedistance;\n if(spikedistance === -1) spikedistance = Infinity;\n\n // hoverData: the set of candidate points we've found to highlight\n var hoverData = [];\n\n // searchData: the data to search in. Mostly this is just a copy of\n // gd.calcdata, filtered to the subplot and overlays we're on\n // but if a point array is supplied it will be a mapping\n // of indicated curves\n var searchData = [];\n\n // [x|y]valArray: the axis values of the hover event\n // mapped onto each of the currently selected overlaid subplots\n var xvalArray, yvalArray;\n\n var itemnum, curvenum, cd, trace, subplotId, subploti, _mode,\n xval, yval, pointData, closedataPreviousLength;\n\n // spikePoints: the set of candidate points we've found to draw spikes to\n var spikePoints = {\n hLinePoint: null,\n vLinePoint: null\n };\n\n // does subplot have one (or more) horizontal traces?\n // This is used to determine whether we rotate the labels or not\n var hasOneHorizontalTrace = false;\n\n // Figure out what we're hovering on:\n // mouse location or user-supplied data\n\n if(Array.isArray(evt)) {\n // user specified an array of points to highlight\n hovermode = 'array';\n for(itemnum = 0; itemnum < evt.length; itemnum++) {\n cd = gd.calcdata[evt[itemnum].curveNumber || 0];\n if(cd) {\n trace = cd[0].trace;\n if(cd[0].trace.hoverinfo !== 'skip') {\n searchData.push(cd);\n if(trace.orientation === 'h') {\n hasOneHorizontalTrace = true;\n }\n }\n }\n }\n } else {\n for(curvenum = 0; curvenum < gd.calcdata.length; curvenum++) {\n cd = gd.calcdata[curvenum];\n trace = cd[0].trace;\n if(trace.hoverinfo !== 'skip' && helpers.isTraceInSubplots(trace, subplots)) {\n searchData.push(cd);\n if(trace.orientation === 'h') {\n hasOneHorizontalTrace = true;\n }\n }\n }\n\n // [x|y]px: the pixels (from top left) of the mouse location\n // on the currently selected plot area\n // add pointerX|Y property for drawing the spikes in spikesnap 'cursor' situation\n var hasUserCalledHover = !eventTarget;\n var xpx, ypx;\n\n if(hasUserCalledHover) {\n if('xpx' in evt) xpx = evt.xpx;\n else xpx = xaArray[0]._length / 2;\n\n if('ypx' in evt) ypx = evt.ypx;\n else ypx = yaArray[0]._length / 2;\n } else {\n // fire the beforehover event and quit if it returns false\n // note that we're only calling this on real mouse events, so\n // manual calls to fx.hover will always run.\n if(Events.triggerHandler(gd, 'plotly_beforehover', evt) === false) {\n return;\n }\n\n var dbb = eventTarget.getBoundingClientRect();\n\n xpx = evt.clientX - dbb.left;\n ypx = evt.clientY - dbb.top;\n\n fullLayout._calcInverseTransform(gd);\n var transformedCoords = Lib.apply3DTransform(fullLayout._invTransform)(xpx, ypx);\n\n xpx = transformedCoords[0];\n ypx = transformedCoords[1];\n\n // in case hover was called from mouseout into hovertext,\n // it's possible you're not actually over the plot anymore\n if(xpx < 0 || xpx > xaArray[0]._length || ypx < 0 || ypx > yaArray[0]._length) {\n return dragElement.unhoverRaw(gd, evt);\n }\n }\n\n evt.pointerX = xpx + xaArray[0]._offset;\n evt.pointerY = ypx + yaArray[0]._offset;\n\n if('xval' in evt) xvalArray = helpers.flat(subplots, evt.xval);\n else xvalArray = helpers.p2c(xaArray, xpx);\n\n if('yval' in evt) yvalArray = helpers.flat(subplots, evt.yval);\n else yvalArray = helpers.p2c(yaArray, ypx);\n\n if(!isNumeric(xvalArray[0]) || !isNumeric(yvalArray[0])) {\n Lib.warn('Fx.hover failed', evt, gd);\n return dragElement.unhoverRaw(gd, evt);\n }\n }\n\n // the pixel distance to beat as a matching point\n // in 'x' or 'y' mode this resets for each trace\n var distance = Infinity;\n\n // find the closest point in each trace\n // this is minimum dx and/or dy, depending on mode\n // and the pixel position for the label (labelXpx, labelYpx)\n function findHoverPoints(customXVal, customYVal) {\n for(curvenum = 0; curvenum < searchData.length; curvenum++) {\n cd = searchData[curvenum];\n\n // filter out invisible or broken data\n if(!cd || !cd[0] || !cd[0].trace) continue;\n\n trace = cd[0].trace;\n\n if(trace.visible !== true || trace._length === 0) continue;\n\n // Explicitly bail out for these two. I don't know how to otherwise prevent\n // the rest of this function from running and failing\n if(['carpet', 'contourcarpet'].indexOf(trace._module.name) !== -1) continue;\n\n if(trace.type === 'splom') {\n // splom traces do not generate overlay subplots,\n // it is safe to assume here splom traces correspond to the 0th subplot\n subploti = 0;\n subplotId = subplots[subploti];\n } else {\n subplotId = helpers.getSubplot(trace);\n subploti = subplots.indexOf(subplotId);\n }\n\n // within one trace mode can sometimes be overridden\n _mode = hovermode;\n if(helpers.isUnifiedHover(_mode)) {\n _mode = _mode.charAt(0);\n }\n\n // container for new point, also used to pass info into module.hoverPoints\n pointData = {\n // trace properties\n cd: cd,\n trace: trace,\n xa: xaArray[subploti],\n ya: yaArray[subploti],\n\n // max distances for hover and spikes - for points that want to show but do not\n // want to override other points, set distance/spikeDistance equal to max*Distance\n // and it will not get filtered out but it will be guaranteed to have a greater\n // distance than any point that calculated a real distance.\n maxHoverDistance: hoverdistance,\n maxSpikeDistance: spikedistance,\n\n // point properties - override all of these\n index: false, // point index in trace - only used by plotly.js hoverdata consumers\n distance: Math.min(distance, hoverdistance), // pixel distance or pseudo-distance\n\n // distance/pseudo-distance for spikes. This distance should always be calculated\n // as if in \"closest\" mode, and should only be set if this point should\n // generate a spike.\n spikeDistance: Infinity,\n\n // in some cases the spikes have different positioning from the hover label\n // they don't need x0/x1, just one position\n xSpike: undefined,\n ySpike: undefined,\n\n // where and how to display the hover label\n color: Color.defaultLine, // trace color\n name: trace.name,\n x0: undefined,\n x1: undefined,\n y0: undefined,\n y1: undefined,\n xLabelVal: undefined,\n yLabelVal: undefined,\n zLabelVal: undefined,\n text: undefined\n };\n\n // add ref to subplot object (non-cartesian case)\n if(fullLayout[subplotId]) {\n pointData.subplot = fullLayout[subplotId]._subplot;\n }\n // add ref to splom scene\n if(fullLayout._splomScenes && fullLayout._splomScenes[trace.uid]) {\n pointData.scene = fullLayout._splomScenes[trace.uid];\n }\n\n closedataPreviousLength = hoverData.length;\n\n // for a highlighting array, figure out what\n // we're searching for with this element\n if(_mode === 'array') {\n var selection = evt[curvenum];\n if('pointNumber' in selection) {\n pointData.index = selection.pointNumber;\n _mode = 'closest';\n } else {\n _mode = '';\n if('xval' in selection) {\n xval = selection.xval;\n _mode = 'x';\n }\n if('yval' in selection) {\n yval = selection.yval;\n _mode = _mode ? 'closest' : 'y';\n }\n }\n } else if(customXVal !== undefined && customYVal !== undefined) {\n xval = customXVal;\n yval = customYVal;\n } else {\n xval = xvalArray[subploti];\n yval = yvalArray[subploti];\n }\n\n // Now if there is range to look in, find the points to hover.\n if(hoverdistance !== 0) {\n if(trace._module && trace._module.hoverPoints) {\n var newPoints = trace._module.hoverPoints(pointData, xval, yval, _mode, {\n finiteRange: true,\n hoverLayer: fullLayout._hoverlayer\n });\n\n if(newPoints) {\n var newPoint;\n for(var newPointNum = 0; newPointNum < newPoints.length; newPointNum++) {\n newPoint = newPoints[newPointNum];\n if(isNumeric(newPoint.x0) && isNumeric(newPoint.y0)) {\n hoverData.push(cleanPoint(newPoint, hovermode));\n }\n }\n }\n } else {\n Lib.log('Unrecognized trace type in hover:', trace);\n }\n }\n\n // in closest mode, remove any existing (farther) points\n // and don't look any farther than this latest point (or points, some\n // traces like box & violin make multiple hover labels at once)\n if(hovermode === 'closest' && hoverData.length > closedataPreviousLength) {\n hoverData.splice(0, closedataPreviousLength);\n distance = hoverData[0].distance;\n }\n\n // Now if there is range to look in, find the points to draw the spikelines\n // Do it only if there is no hoverData\n if(hasCartesian && (spikedistance !== 0)) {\n if(hoverData.length === 0) {\n pointData.distance = spikedistance;\n pointData.index = false;\n var closestPoints = trace._module.hoverPoints(pointData, xval, yval, 'closest', {\n hoverLayer: fullLayout._hoverlayer\n });\n if(closestPoints) {\n closestPoints = closestPoints.filter(function(point) {\n // some hover points, like scatter fills, do not allow spikes,\n // so will generate a hover point but without a valid spikeDistance\n return point.spikeDistance <= spikedistance;\n });\n }\n if(closestPoints && closestPoints.length) {\n var tmpPoint;\n var closestVPoints = closestPoints.filter(function(point) {\n return point.xa.showspikes && point.xa.spikesnap !== 'hovered data';\n });\n if(closestVPoints.length) {\n var closestVPt = closestVPoints[0];\n if(isNumeric(closestVPt.x0) && isNumeric(closestVPt.y0)) {\n tmpPoint = fillSpikePoint(closestVPt);\n if(!spikePoints.vLinePoint || (spikePoints.vLinePoint.spikeDistance > tmpPoint.spikeDistance)) {\n spikePoints.vLinePoint = tmpPoint;\n }\n }\n }\n\n var closestHPoints = closestPoints.filter(function(point) {\n return point.ya.showspikes && point.ya.spikesnap !== 'hovered data';\n });\n if(closestHPoints.length) {\n var closestHPt = closestHPoints[0];\n if(isNumeric(closestHPt.x0) && isNumeric(closestHPt.y0)) {\n tmpPoint = fillSpikePoint(closestHPt);\n if(!spikePoints.hLinePoint || (spikePoints.hLinePoint.spikeDistance > tmpPoint.spikeDistance)) {\n spikePoints.hLinePoint = tmpPoint;\n }\n }\n }\n }\n }\n }\n }\n }\n\n findHoverPoints();\n\n function selectClosestPoint(pointsData, spikedistance, spikeOnWinning) {\n var resultPoint = null;\n var minDistance = Infinity;\n var thisSpikeDistance;\n\n for(var i = 0; i < pointsData.length; i++) {\n thisSpikeDistance = pointsData[i].spikeDistance;\n if(spikeOnWinning && i === 0) thisSpikeDistance = -Infinity;\n\n if(thisSpikeDistance <= minDistance && thisSpikeDistance <= spikedistance) {\n resultPoint = pointsData[i];\n minDistance = thisSpikeDistance;\n }\n }\n return resultPoint;\n }\n\n function fillSpikePoint(point) {\n if(!point) return null;\n return {\n xa: point.xa,\n ya: point.ya,\n x: point.xSpike !== undefined ? point.xSpike : (point.x0 + point.x1) / 2,\n y: point.ySpike !== undefined ? point.ySpike : (point.y0 + point.y1) / 2,\n distance: point.distance,\n spikeDistance: point.spikeDistance,\n curveNumber: point.trace.index,\n color: point.color,\n pointNumber: point.index\n };\n }\n\n var spikelineOpts = {\n fullLayout: fullLayout,\n container: fullLayout._hoverlayer,\n event: evt\n };\n var oldspikepoints = gd._spikepoints;\n var newspikepoints = {\n vLinePoint: spikePoints.vLinePoint,\n hLinePoint: spikePoints.hLinePoint\n };\n gd._spikepoints = newspikepoints;\n\n var sortHoverData = function() {\n hoverData.sort(function(d1, d2) { return d1.distance - d2.distance; });\n\n // move period positioned points and box/bar-like traces to the end of the list\n hoverData = orderRangePoints(hoverData, hovermode);\n };\n sortHoverData();\n\n var axLetter = hovermode.charAt(0);\n var spikeOnWinning = (axLetter === 'x' || axLetter === 'y') && hoverData[0] && cartesianScatterPoints[hoverData[0].trace.type];\n\n // Now if it is not restricted by spikedistance option, set the points to draw the spikelines\n if(hasCartesian && (spikedistance !== 0)) {\n if(hoverData.length !== 0) {\n var tmpHPointData = hoverData.filter(function(point) {\n return point.ya.showspikes;\n });\n var tmpHPoint = selectClosestPoint(tmpHPointData, spikedistance, spikeOnWinning);\n spikePoints.hLinePoint = fillSpikePoint(tmpHPoint);\n\n var tmpVPointData = hoverData.filter(function(point) {\n return point.xa.showspikes;\n });\n var tmpVPoint = selectClosestPoint(tmpVPointData, spikedistance, spikeOnWinning);\n spikePoints.vLinePoint = fillSpikePoint(tmpVPoint);\n }\n }\n\n // if hoverData is empty check for the spikes to draw and quit if there are none\n if(hoverData.length === 0) {\n var result = dragElement.unhoverRaw(gd, evt);\n if(hasCartesian && ((spikePoints.hLinePoint !== null) || (spikePoints.vLinePoint !== null))) {\n if(spikesChanged(oldspikepoints)) {\n createSpikelines(gd, spikePoints, spikelineOpts);\n }\n }\n return result;\n }\n\n if(hasCartesian) {\n if(spikesChanged(oldspikepoints)) {\n createSpikelines(gd, spikePoints, spikelineOpts);\n }\n }\n\n if(\n helpers.isXYhover(_mode) &&\n hoverData[0].length !== 0 &&\n hoverData[0].trace.type !== 'splom' // TODO: add support for splom\n ) {\n // pick winning point\n var winningPoint = hoverData[0];\n // discard other points\n if(multipleHoverPoints[winningPoint.trace.type]) {\n hoverData = hoverData.filter(function(d) {\n return d.trace.index === winningPoint.trace.index;\n });\n } else {\n hoverData = [winningPoint];\n }\n var initLen = hoverData.length;\n\n var winX = getCoord('x', winningPoint, fullLayout);\n var winY = getCoord('y', winningPoint, fullLayout);\n\n // in compare mode, select every point at position\n findHoverPoints(winX, winY);\n\n var finalPoints = [];\n var seen = {};\n var id = 0;\n var insert = function(newHd) {\n var key = multipleHoverPoints[newHd.trace.type] ? hoverDataKey(newHd) : newHd.trace.index;\n if(!seen[key]) {\n id++;\n seen[key] = id;\n finalPoints.push(newHd);\n } else {\n var oldId = seen[key] - 1;\n var oldHd = finalPoints[oldId];\n if(oldId > 0 &&\n Math.abs(newHd.distance) <\n Math.abs(oldHd.distance)\n ) {\n // replace with closest\n finalPoints[oldId] = newHd;\n }\n }\n };\n\n var k;\n // insert the winnig point(s) first\n for(k = 0; k < initLen; k++) {\n insert(hoverData[k]);\n }\n // override from the end\n for(k = hoverData.length - 1; k > initLen - 1; k--) {\n insert(hoverData[k]);\n }\n hoverData = finalPoints;\n sortHoverData();\n }\n\n // lastly, emit custom hover/unhover events\n var oldhoverdata = gd._hoverdata;\n var newhoverdata = [];\n\n var gTop = getTopOffset(gd);\n var gLeft = getLeftOffset(gd);\n\n // pull out just the data that's useful to\n // other people and send it to the event\n for(itemnum = 0; itemnum < hoverData.length; itemnum++) {\n var pt = hoverData[itemnum];\n var eventData = helpers.makeEventData(pt, pt.trace, pt.cd);\n\n if(pt.hovertemplate !== false) {\n var ht = false;\n if(pt.cd[pt.index] && pt.cd[pt.index].ht) {\n ht = pt.cd[pt.index].ht;\n }\n pt.hovertemplate = ht || pt.trace.hovertemplate || false;\n }\n\n if(pt.xa && pt.ya) {\n var _x0 = pt.x0 + pt.xa._offset;\n var _x1 = pt.x1 + pt.xa._offset;\n var _y0 = pt.y0 + pt.ya._offset;\n var _y1 = pt.y1 + pt.ya._offset;\n\n var x0 = Math.min(_x0, _x1);\n var x1 = Math.max(_x0, _x1);\n var y0 = Math.min(_y0, _y1);\n var y1 = Math.max(_y0, _y1);\n\n eventData.bbox = {\n x0: x0 + gLeft,\n x1: x1 + gLeft,\n y0: y0 + gTop,\n y1: y1 + gTop\n };\n }\n\n pt.eventData = [eventData];\n newhoverdata.push(eventData);\n }\n\n gd._hoverdata = newhoverdata;\n\n var rotateLabels = (\n (hovermode === 'y' && (searchData.length > 1 || hoverData.length > 1)) ||\n (hovermode === 'closest' && hasOneHorizontalTrace && hoverData.length > 1)\n );\n\n var bgColor = Color.combine(\n fullLayout.plot_bgcolor || Color.background,\n fullLayout.paper_bgcolor\n );\n\n var hoverText = createHoverText(hoverData, {\n gd: gd,\n hovermode: hovermode,\n rotateLabels: rotateLabels,\n bgColor: bgColor,\n container: fullLayout._hoverlayer,\n outerContainer: fullLayout._paper.node(),\n commonLabelOpts: fullLayout.hoverlabel,\n hoverdistance: fullLayout.hoverdistance\n });\n var hoverLabels = hoverText.hoverLabels;\n\n if(!helpers.isUnifiedHover(hovermode)) {\n hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, hoverText.commonLabelBoundingBox);\n alignHoverText(hoverLabels, rotateLabels, fullLayout._invScaleX, fullLayout._invScaleY);\n } // TODO: tagName hack is needed to appease geo.js's hack of using eventTarget=true\n // we should improve the \"fx\" API so other plots can use it without these hack.\n if(eventTarget && eventTarget.tagName) {\n var hasClickToShow = Registry.getComponentMethod('annotations', 'hasClickToShow')(gd, newhoverdata);\n overrideCursor(d3.select(eventTarget), hasClickToShow ? 'pointer' : '');\n }\n\n // don't emit events if called manually\n if(!eventTarget || noHoverEvent || !hoverChanged(gd, evt, oldhoverdata)) return;\n\n if(oldhoverdata) {\n gd.emit('plotly_unhover', {\n event: evt,\n points: oldhoverdata\n });\n }\n\n gd.emit('plotly_hover', {\n event: evt,\n points: gd._hoverdata,\n xaxes: xaArray,\n yaxes: yaArray,\n xvals: xvalArray,\n yvals: yvalArray\n });\n}\n\nfunction hoverDataKey(d) {\n return [d.trace.index, d.index, d.x0, d.y0, d.name, d.attr, d.xa ? d.xa._id : '', d.ya ? d.ya._id : ''].join(',');\n}\n\nvar EXTRA_STRING_REGEX = /([\\s\\S]*)<\\/extra>/;\n\nfunction createHoverText(hoverData, opts) {\n var gd = opts.gd;\n var fullLayout = gd._fullLayout;\n var hovermode = opts.hovermode;\n var rotateLabels = opts.rotateLabels;\n var bgColor = opts.bgColor;\n var container = opts.container;\n var outerContainer = opts.outerContainer;\n var commonLabelOpts = opts.commonLabelOpts || {};\n // Early exit if no labels are drawn\n if(hoverData.length === 0) return [[]];\n\n // opts.fontFamily/Size are used for the common label\n // and as defaults for each hover label, though the individual labels\n // can override this.\n var fontFamily = opts.fontFamily || constants.HOVERFONT;\n var fontSize = opts.fontSize || constants.HOVERFONTSIZE;\n\n var c0 = hoverData[0];\n var xa = c0.xa;\n var ya = c0.ya;\n var axLetter = hovermode.charAt(0);\n var axLabel = axLetter + 'Label';\n var t0 = c0[axLabel];\n\n // search in array for the label\n if(t0 === undefined && xa.type === 'multicategory') {\n for(var q = 0; q < hoverData.length; q++) {\n t0 = hoverData[q][axLabel];\n if(t0 !== undefined) break;\n }\n }\n\n var outerContainerBB = getBoundingClientRect(gd, outerContainer);\n var outerTop = outerContainerBB.top;\n var outerWidth = outerContainerBB.width;\n var outerHeight = outerContainerBB.height;\n\n // show the common label, if any, on the axis\n // never show a common label in array mode,\n // even if sometimes there could be one\n var showCommonLabel = (\n (t0 !== undefined) &&\n (c0.distance <= opts.hoverdistance) &&\n (hovermode === 'x' || hovermode === 'y')\n );\n\n // all hover traces hoverinfo must contain the hovermode\n // to have common labels\n if(showCommonLabel) {\n var allHaveZ = true;\n var i, traceHoverinfo;\n for(i = 0; i < hoverData.length; i++) {\n if(allHaveZ && hoverData[i].zLabel === undefined) allHaveZ = false;\n\n traceHoverinfo = hoverData[i].hoverinfo || hoverData[i].trace.hoverinfo;\n if(traceHoverinfo) {\n var parts = Array.isArray(traceHoverinfo) ? traceHoverinfo : traceHoverinfo.split('+');\n if(parts.indexOf('all') === -1 &&\n parts.indexOf(hovermode) === -1) {\n showCommonLabel = false;\n break;\n }\n }\n }\n\n // xyz labels put all info in their main label, so have no need of a common label\n if(allHaveZ) showCommonLabel = false;\n }\n\n var commonLabel = container.selectAll('g.axistext')\n .data(showCommonLabel ? [0] : []);\n commonLabel.enter().append('g')\n .classed('axistext', true);\n commonLabel.exit().remove();\n\n // set rect (without arrow) behind label below for later collision detection\n var commonLabelRect = {\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0\n };\n commonLabel.each(function() {\n var label = d3.select(this);\n var lpath = Lib.ensureSingle(label, 'path', '', function(s) {\n s.style({'stroke-width': '1px'});\n });\n var ltext = Lib.ensureSingle(label, 'text', '', function(s) {\n // prohibit tex interpretation until we can handle\n // tex and regular text together\n s.attr('data-notex', 1);\n });\n\n var commonBgColor = commonLabelOpts.bgcolor || Color.defaultLine;\n var commonStroke = commonLabelOpts.bordercolor || Color.contrast(commonBgColor);\n var contrastColor = Color.contrast(commonBgColor);\n var commonLabelFont = {\n family: commonLabelOpts.font.family || fontFamily,\n size: commonLabelOpts.font.size || fontSize,\n color: commonLabelOpts.font.color || contrastColor\n };\n\n lpath.style({\n fill: commonBgColor,\n stroke: commonStroke\n });\n\n ltext.text(t0)\n .call(Drawing.font, commonLabelFont)\n .call(svgTextUtils.positionText, 0, 0)\n .call(svgTextUtils.convertToTspans, gd);\n\n label.attr('transform', '');\n\n var tbb = getBoundingClientRect(gd, ltext.node());\n var lx, ly;\n\n if(hovermode === 'x') {\n var topsign = xa.side === 'top' ? '-' : '';\n\n ltext.attr('text-anchor', 'middle')\n .call(svgTextUtils.positionText, 0, (xa.side === 'top' ?\n (outerTop - tbb.bottom - HOVERARROWSIZE - HOVERTEXTPAD) :\n (outerTop - tbb.top + HOVERARROWSIZE + HOVERTEXTPAD)));\n\n lx = xa._offset + (c0.x0 + c0.x1) / 2;\n ly = ya._offset + (xa.side === 'top' ? 0 : ya._length);\n\n var halfWidth = tbb.width / 2 + HOVERTEXTPAD;\n\n if(lx < halfWidth) {\n lx = halfWidth;\n\n lpath.attr('d', 'M-' + (halfWidth - HOVERARROWSIZE) + ',0' +\n 'L-' + (halfWidth - HOVERARROWSIZE * 2) + ',' + topsign + HOVERARROWSIZE +\n 'H' + (halfWidth) +\n 'v' + topsign + (HOVERTEXTPAD * 2 + tbb.height) +\n 'H-' + halfWidth +\n 'V' + topsign + HOVERARROWSIZE +\n 'Z');\n } else if(lx > (fullLayout.width - halfWidth)) {\n lx = fullLayout.width - halfWidth;\n\n lpath.attr('d', 'M' + (halfWidth - HOVERARROWSIZE) + ',0' +\n 'L' + halfWidth + ',' + topsign + HOVERARROWSIZE +\n 'v' + topsign + (HOVERTEXTPAD * 2 + tbb.height) +\n 'H-' + halfWidth +\n 'V' + topsign + HOVERARROWSIZE +\n 'H' + (halfWidth - HOVERARROWSIZE * 2) + 'Z');\n } else {\n lpath.attr('d', 'M0,0' +\n 'L' + HOVERARROWSIZE + ',' + topsign + HOVERARROWSIZE +\n 'H' + (halfWidth) +\n 'v' + topsign + (HOVERTEXTPAD * 2 + tbb.height) +\n 'H-' + (halfWidth) +\n 'V' + topsign + HOVERARROWSIZE +\n 'H-' + HOVERARROWSIZE + 'Z');\n }\n\n commonLabelRect.minX = lx - halfWidth;\n commonLabelRect.maxX = lx + halfWidth;\n if(xa.side === 'top') {\n // label on negative y side\n commonLabelRect.minY = ly - (HOVERTEXTPAD * 2 + tbb.height);\n commonLabelRect.maxY = ly - HOVERTEXTPAD;\n } else {\n commonLabelRect.minY = ly + HOVERTEXTPAD;\n commonLabelRect.maxY = ly + (HOVERTEXTPAD * 2 + tbb.height);\n }\n } else {\n var anchor;\n var sgn;\n var leftsign;\n if(ya.side === 'right') {\n anchor = 'start';\n sgn = 1;\n leftsign = '';\n lx = xa._offset + xa._length;\n } else {\n anchor = 'end';\n sgn = -1;\n leftsign = '-';\n lx = xa._offset;\n }\n\n ly = ya._offset + (c0.y0 + c0.y1) / 2;\n\n ltext.attr('text-anchor', anchor);\n\n lpath.attr('d', 'M0,0' +\n 'L' + leftsign + HOVERARROWSIZE + ',' + HOVERARROWSIZE +\n 'V' + (HOVERTEXTPAD + tbb.height / 2) +\n 'h' + leftsign + (HOVERTEXTPAD * 2 + tbb.width) +\n 'V-' + (HOVERTEXTPAD + tbb.height / 2) +\n 'H' + leftsign + HOVERARROWSIZE + 'V-' + HOVERARROWSIZE + 'Z');\n\n commonLabelRect.minY = ly - (HOVERTEXTPAD + tbb.height / 2);\n commonLabelRect.maxY = ly + (HOVERTEXTPAD + tbb.height / 2);\n if(ya.side === 'right') {\n commonLabelRect.minX = lx + HOVERARROWSIZE;\n commonLabelRect.maxX = lx + HOVERARROWSIZE + (HOVERTEXTPAD * 2 + tbb.width);\n } else {\n // label on negative x side\n commonLabelRect.minX = lx - HOVERARROWSIZE - (HOVERTEXTPAD * 2 + tbb.width);\n commonLabelRect.maxX = lx - HOVERARROWSIZE;\n }\n\n var halfHeight = tbb.height / 2;\n var lty = outerTop - tbb.top - halfHeight;\n var clipId = 'clip' + fullLayout._uid + 'commonlabel' + ya._id;\n var clipPath;\n\n if(lx < (tbb.width + 2 * HOVERTEXTPAD + HOVERARROWSIZE)) {\n clipPath = 'M-' + (HOVERARROWSIZE + HOVERTEXTPAD) + '-' + halfHeight +\n 'h-' + (tbb.width - HOVERTEXTPAD) +\n 'V' + halfHeight +\n 'h' + (tbb.width - HOVERTEXTPAD) + 'Z';\n\n var ltx = tbb.width - lx + HOVERTEXTPAD;\n svgTextUtils.positionText(ltext, ltx, lty);\n\n // shift each line (except the longest) so that start-of-line\n // is always visible\n if(anchor === 'end') {\n ltext.selectAll('tspan').each(function() {\n var s = d3.select(this);\n var dummy = Drawing.tester.append('text')\n .text(s.text())\n .call(Drawing.font, commonLabelFont);\n var dummyBB = getBoundingClientRect(gd, dummy.node());\n if(Math.round(dummyBB.width) < Math.round(tbb.width)) {\n s.attr('x', ltx - dummyBB.width);\n }\n dummy.remove();\n });\n }\n } else {\n svgTextUtils.positionText(ltext, sgn * (HOVERTEXTPAD + HOVERARROWSIZE), lty);\n clipPath = null;\n }\n\n var textClip = fullLayout._topclips.selectAll('#' + clipId).data(clipPath ? [0] : []);\n textClip.enter().append('clipPath').attr('id', clipId).append('path');\n textClip.exit().remove();\n textClip.select('path').attr('d', clipPath);\n Drawing.setClipUrl(ltext, clipPath ? clipId : null, gd);\n }\n\n label.attr('transform', strTranslate(lx, ly));\n });\n\n // Show a single hover label\n if(helpers.isUnifiedHover(hovermode)) {\n // Delete leftover hover labels from other hovermodes\n container.selectAll('g.hovertext').remove();\n var groupedHoverData = hoverData.filter(function(data) {return data.hoverinfo !== 'none';});\n // Return early if nothing is hovered on\n if(groupedHoverData.length === 0) return [];\n\n // mock legend\n var hoverlabel = fullLayout.hoverlabel;\n var font = hoverlabel.font;\n var mockLayoutIn = {\n showlegend: true,\n legend: {\n title: {text: t0, font: font},\n font: font,\n bgcolor: hoverlabel.bgcolor,\n bordercolor: hoverlabel.bordercolor,\n borderwidth: 1,\n tracegroupgap: 7,\n traceorder: fullLayout.legend ? fullLayout.legend.traceorder : undefined,\n orientation: 'v'\n }\n };\n var mockLayoutOut = {\n font: font\n };\n legendSupplyDefaults(mockLayoutIn, mockLayoutOut, gd._fullData);\n var mockLegend = mockLayoutOut.legend;\n\n // prepare items for the legend\n mockLegend.entries = [];\n for(var j = 0; j < groupedHoverData.length; j++) {\n var pt = groupedHoverData[j];\n if(pt.hoverinfo === 'none') continue;\n\n var texts = getHoverLabelText(pt, true, hovermode, fullLayout, t0);\n var text = texts[0];\n var name = texts[1];\n\n pt.name = name;\n if(name !== '') {\n pt.text = name + ' : ' + text;\n } else {\n pt.text = text;\n }\n\n // pass through marker's calcdata to style legend items\n var cd = pt.cd[pt.index];\n if(cd) {\n if(cd.mc) pt.mc = cd.mc;\n if(cd.mcc) pt.mc = cd.mcc;\n if(cd.mlc) pt.mlc = cd.mlc;\n if(cd.mlcc) pt.mlc = cd.mlcc;\n if(cd.mlw) pt.mlw = cd.mlw;\n if(cd.mrc) pt.mrc = cd.mrc;\n if(cd.dir) pt.dir = cd.dir;\n }\n pt._distinct = true;\n\n mockLegend.entries.push([pt]);\n }\n mockLegend.entries.sort(function(a, b) { return a[0].trace.index - b[0].trace.index;});\n mockLegend.layer = container;\n\n // Draw unified hover label\n mockLegend._inHover = true;\n mockLegend._groupTitleFont = hoverlabel.grouptitlefont;\n\n legendDraw(gd, mockLegend);\n\n // Position the hover\n var legendContainer = container.select('g.legend');\n var tbb = getBoundingClientRect(gd, legendContainer.node());\n var tWidth = tbb.width + 2 * HOVERTEXTPAD;\n var tHeight = tbb.height + 2 * HOVERTEXTPAD;\n var winningPoint = groupedHoverData[0];\n var avgX = (winningPoint.x0 + winningPoint.x1) / 2;\n var avgY = (winningPoint.y0 + winningPoint.y1) / 2;\n // When a scatter (or e.g. heatmap) point wins, it's OK for the hovelabel to occlude the bar and other points.\n var pointWon = !(\n Registry.traceIs(winningPoint.trace, 'bar-like') ||\n Registry.traceIs(winningPoint.trace, 'box-violin')\n );\n\n var lyBottom, lyTop;\n if(axLetter === 'y') {\n if(pointWon) {\n lyTop = avgY - HOVERTEXTPAD;\n lyBottom = avgY + HOVERTEXTPAD;\n } else {\n lyTop = Math.min.apply(null, groupedHoverData.map(function(c) { return Math.min(c.y0, c.y1); }));\n lyBottom = Math.max.apply(null, groupedHoverData.map(function(c) { return Math.max(c.y0, c.y1); }));\n }\n } else {\n lyTop = lyBottom = Lib.mean(groupedHoverData.map(function(c) { return (c.y0 + c.y1) / 2; })) - tHeight / 2;\n }\n\n var lxRight, lxLeft;\n if(axLetter === 'x') {\n if(pointWon) {\n lxRight = avgX + HOVERTEXTPAD;\n lxLeft = avgX - HOVERTEXTPAD;\n } else {\n lxRight = Math.max.apply(null, groupedHoverData.map(function(c) { return Math.max(c.x0, c.x1); }));\n lxLeft = Math.min.apply(null, groupedHoverData.map(function(c) { return Math.min(c.x0, c.x1); }));\n }\n } else {\n lxRight = lxLeft = Lib.mean(groupedHoverData.map(function(c) { return (c.x0 + c.x1) / 2; })) - tWidth / 2;\n }\n\n var xOffset = xa._offset;\n var yOffset = ya._offset;\n lyBottom += yOffset;\n lxRight += xOffset;\n lxLeft += xOffset - tWidth;\n lyTop += yOffset - tHeight;\n\n var lx, ly; // top and left positions of the hover box\n\n // horizontal alignment to end up on screen\n if(lxRight + tWidth < outerWidth && lxRight >= 0) {\n lx = lxRight;\n } else if(lxLeft + tWidth < outerWidth && lxLeft >= 0) {\n lx = lxLeft;\n } else if(xOffset + tWidth < outerWidth) {\n lx = xOffset; // subplot left corner\n } else {\n // closest left or right side of the paper\n if(lxRight - avgX < avgX - lxLeft + tWidth) {\n lx = outerWidth - tWidth;\n } else {\n lx = 0;\n }\n }\n lx += HOVERTEXTPAD;\n\n // vertical alignement to end up on screen\n if(lyBottom + tHeight < outerHeight && lyBottom >= 0) {\n ly = lyBottom;\n } else if(lyTop + tHeight < outerHeight && lyTop >= 0) {\n ly = lyTop;\n } else if(yOffset + tHeight < outerHeight) {\n ly = yOffset; // subplot top corner\n } else {\n // closest top or bottom side of the paper\n if(lyBottom - avgY < avgY - lyTop + tHeight) {\n ly = outerHeight - tHeight;\n } else {\n ly = 0;\n }\n }\n ly += HOVERTEXTPAD;\n\n legendContainer.attr('transform', strTranslate(lx - 1, ly - 1));\n return legendContainer;\n }\n\n // show all the individual labels\n\n // first create the objects\n var hoverLabels = container.selectAll('g.hovertext')\n .data(hoverData, function(d) {\n // N.B. when multiple items have the same result key-function value,\n // only the first of those items in hoverData gets rendered\n return hoverDataKey(d);\n });\n hoverLabels.enter().append('g')\n .classed('hovertext', true)\n .each(function() {\n var g = d3.select(this);\n // trace name label (rect and text.name)\n g.append('rect')\n .call(Color.fill, Color.addOpacity(bgColor, 0.8));\n g.append('text').classed('name', true);\n // trace data label (path and text.nums)\n g.append('path')\n .style('stroke-width', '1px');\n g.append('text').classed('nums', true)\n .call(Drawing.font, fontFamily, fontSize);\n });\n hoverLabels.exit().remove();\n\n // then put the text in, position the pointer to the data,\n // and figure out sizes\n hoverLabels.each(function(d) {\n var g = d3.select(this).attr('transform', '');\n\n var dColor = d.color;\n if(Array.isArray(dColor)) {\n dColor = dColor[d.eventData[0].pointNumber];\n }\n\n // combine possible non-opaque trace color with bgColor\n var color0 = d.bgcolor || dColor;\n // color for 'nums' part of the label\n var numsColor = Color.combine(\n Color.opacity(color0) ? color0 : Color.defaultLine,\n bgColor\n );\n // color for 'name' part of the label\n var nameColor = Color.combine(\n Color.opacity(dColor) ? dColor : Color.defaultLine,\n bgColor\n );\n // find a contrasting color for border and text\n var contrastColor = d.borderColor || Color.contrast(numsColor);\n\n var texts = getHoverLabelText(d, showCommonLabel, hovermode, fullLayout, t0, g);\n var text = texts[0];\n var name = texts[1];\n\n // main label\n var tx = g.select('text.nums')\n .call(Drawing.font,\n d.fontFamily || fontFamily,\n d.fontSize || fontSize,\n d.fontColor || contrastColor)\n .text(text)\n .attr('data-notex', 1)\n .call(svgTextUtils.positionText, 0, 0)\n .call(svgTextUtils.convertToTspans, gd);\n\n var tx2 = g.select('text.name');\n var tx2width = 0;\n var tx2height = 0;\n\n // secondary label for non-empty 'name'\n if(name && name !== text) {\n tx2.call(Drawing.font,\n d.fontFamily || fontFamily,\n d.fontSize || fontSize,\n nameColor)\n .text(name)\n .attr('data-notex', 1)\n .call(svgTextUtils.positionText, 0, 0)\n .call(svgTextUtils.convertToTspans, gd);\n\n var t2bb = getBoundingClientRect(gd, tx2.node());\n tx2width = t2bb.width + 2 * HOVERTEXTPAD;\n tx2height = t2bb.height + 2 * HOVERTEXTPAD;\n } else {\n tx2.remove();\n g.select('rect').remove();\n }\n\n g.select('path').style({\n fill: numsColor,\n stroke: contrastColor\n });\n\n var htx = d.xa._offset + (d.x0 + d.x1) / 2;\n var hty = d.ya._offset + (d.y0 + d.y1) / 2;\n var dx = Math.abs(d.x1 - d.x0);\n var dy = Math.abs(d.y1 - d.y0);\n\n var tbb = getBoundingClientRect(gd, tx.node());\n var tbbWidth = tbb.width / fullLayout._invScaleX;\n var tbbHeight = tbb.height / fullLayout._invScaleY;\n\n d.ty0 = (outerTop - tbb.top) / fullLayout._invScaleY;\n d.bx = tbbWidth + 2 * HOVERTEXTPAD;\n d.by = Math.max(tbbHeight + 2 * HOVERTEXTPAD, tx2height);\n d.anchor = 'start';\n d.txwidth = tbbWidth;\n d.tx2width = tx2width;\n d.offset = 0;\n\n var txTotalWidth = (tbbWidth + HOVERARROWSIZE + HOVERTEXTPAD + tx2width) * fullLayout._invScaleX;\n var anchorStartOK, anchorEndOK;\n\n if(rotateLabels) {\n d.pos = htx;\n anchorStartOK = hty + dy / 2 + txTotalWidth <= outerHeight;\n anchorEndOK = hty - dy / 2 - txTotalWidth >= 0;\n if((d.idealAlign === 'top' || !anchorStartOK) && anchorEndOK) {\n hty -= dy / 2;\n d.anchor = 'end';\n } else if(anchorStartOK) {\n hty += dy / 2;\n d.anchor = 'start';\n } else {\n d.anchor = 'middle';\n }\n d.crossPos = hty;\n } else {\n d.pos = hty;\n anchorStartOK = htx + dx / 2 + txTotalWidth <= outerWidth;\n anchorEndOK = htx - dx / 2 - txTotalWidth >= 0;\n\n if((d.idealAlign === 'left' || !anchorStartOK) && anchorEndOK) {\n htx -= dx / 2;\n d.anchor = 'end';\n } else if(anchorStartOK) {\n htx += dx / 2;\n d.anchor = 'start';\n } else {\n d.anchor = 'middle';\n\n var txHalfWidth = txTotalWidth / 2;\n var overflowR = htx + txHalfWidth - outerWidth;\n var overflowL = htx - txHalfWidth;\n if(overflowR > 0) htx -= overflowR;\n if(overflowL < 0) htx += -overflowL;\n }\n d.crossPos = htx;\n }\n\n tx.attr('text-anchor', d.anchor);\n if(tx2width) tx2.attr('text-anchor', d.anchor);\n g.attr('transform', strTranslate(htx, hty) +\n (rotateLabels ? strRotate(YANGLE) : ''));\n });\n\n return {\n hoverLabels: hoverLabels,\n commonLabelBoundingBox: commonLabelRect\n };\n}\n\nfunction getHoverLabelText(d, showCommonLabel, hovermode, fullLayout, t0, g) {\n var name = '';\n var text = '';\n // to get custom 'name' labels pass cleanPoint\n if(d.nameOverride !== undefined) d.name = d.nameOverride;\n\n if(d.name) {\n if(d.trace._meta) {\n d.name = Lib.templateString(d.name, d.trace._meta);\n }\n name = plainText(d.name, d.nameLength);\n }\n\n var h0 = hovermode.charAt(0);\n var h1 = h0 === 'x' ? 'y' : 'x';\n\n if(d.zLabel !== undefined) {\n if(d.xLabel !== undefined) text += 'x: ' + d.xLabel + '
';\n if(d.yLabel !== undefined) text += 'y: ' + d.yLabel + '
';\n if(d.trace.type !== 'choropleth' && d.trace.type !== 'choroplethmapbox') {\n text += (text ? 'z: ' : '') + d.zLabel;\n }\n } else if(showCommonLabel && d[h0 + 'Label'] === t0) {\n text = d[h1 + 'Label'] || '';\n } else if(d.xLabel === undefined) {\n if(d.yLabel !== undefined && d.trace.type !== 'scattercarpet') {\n text = d.yLabel;\n }\n } else if(d.yLabel === undefined) text = d.xLabel;\n else text = '(' + d.xLabel + ', ' + d.yLabel + ')';\n\n if((d.text || d.text === 0) && !Array.isArray(d.text)) {\n text += (text ? '
' : '') + d.text;\n }\n\n // used by other modules (initially just ternary) that\n // manage their own hoverinfo independent of cleanPoint\n // the rest of this will still apply, so such modules\n // can still put things in (x|y|z)Label, text, and name\n // and hoverinfo will still determine their visibility\n if(d.extraText !== undefined) text += (text ? '
' : '') + d.extraText;\n\n // if 'text' is empty at this point,\n // and hovertemplate is not defined,\n // put 'name' in main label and don't show secondary label\n if(g && text === '' && !d.hovertemplate) {\n // if 'name' is also empty, remove entire label\n if(name === '') g.remove();\n text = name;\n }\n\n // hovertemplate\n var hovertemplate = d.hovertemplate || false;\n if(hovertemplate) {\n var labels = d.hovertemplateLabels || d;\n\n if(d[h0 + 'Label'] !== t0) {\n labels[h0 + 'other'] = labels[h0 + 'Val'];\n labels[h0 + 'otherLabel'] = labels[h0 + 'Label'];\n }\n\n text = Lib.hovertemplateString(\n hovertemplate,\n labels,\n fullLayout._d3locale,\n d.eventData[0] || {},\n d.trace._meta\n );\n\n text = text.replace(EXTRA_STRING_REGEX, function(match, extra) {\n // assign name for secondary text label\n name = plainText(extra, d.nameLength);\n // remove from main text label\n return '';\n });\n }\n return [text, name];\n}\n\n// Make groups of touching points, and within each group\n// move each point so that no labels overlap, but the average\n// label position is the same as it was before moving. Incidentally,\n// this is equivalent to saying all the labels are on equal linear\n// springs about their initial position. Initially, each point is\n// its own group, but as we find overlaps we will clump the points.\n//\n// Also, there are hard constraints at the edges of the graphs,\n// that push all groups to the middle so they are visible. I don't\n// know what happens if the group spans all the way from one edge to\n// the other, though it hardly matters - there's just too much\n// information then.\nfunction hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabelBoundingBox) {\n var axKey = rotateLabels ? 'xa' : 'ya';\n var crossAxKey = rotateLabels ? 'ya' : 'xa';\n var nummoves = 0;\n var axSign = 1;\n var nLabels = hoverLabels.size();\n\n // make groups of touching points\n var pointgroups = new Array(nLabels);\n var k = 0;\n\n // get extent of axis hover label\n var axisLabelMinX = commonLabelBoundingBox.minX;\n var axisLabelMaxX = commonLabelBoundingBox.maxX;\n var axisLabelMinY = commonLabelBoundingBox.minY;\n var axisLabelMaxY = commonLabelBoundingBox.maxY;\n\n var pX = function(x) { return x * fullLayout._invScaleX; };\n var pY = function(y) { return y * fullLayout._invScaleY; };\n\n hoverLabels.each(function(d) {\n var ax = d[axKey];\n var crossAx = d[crossAxKey];\n var axIsX = ax._id.charAt(0) === 'x';\n var rng = ax.range;\n\n if(k === 0 && rng && ((rng[0] > rng[1]) !== axIsX)) {\n axSign = -1;\n }\n var pmin = 0;\n var pmax = (axIsX ? fullLayout.width : fullLayout.height);\n // in hovermode avoid overlap between hover labels and axis label\n if(fullLayout.hovermode === 'x' || fullLayout.hovermode === 'y') {\n // extent of rect behind hover label on cross axis:\n var offsets = getHoverLabelOffsets(d, rotateLabels);\n var anchor = d.anchor;\n var horzSign = anchor === 'end' ? -1 : 1;\n var labelMin;\n var labelMax;\n if(anchor === 'middle') {\n // use extent of centered rect either on x or y axis depending on current axis\n labelMin = d.crossPos + (axIsX ? pY(offsets.y - d.by / 2) : pX(d.bx / 2 + d.tx2width / 2));\n labelMax = labelMin + (axIsX ? pY(d.by) : pX(d.bx));\n } else {\n // use extend of path (see alignHoverText function) without arrow\n if(axIsX) {\n labelMin = d.crossPos + pY(HOVERARROWSIZE + offsets.y) - pY(d.by / 2 - HOVERARROWSIZE);\n labelMax = labelMin + pY(d.by);\n } else {\n var startX = pX(horzSign * HOVERARROWSIZE + offsets.x);\n var endX = startX + pX(horzSign * d.bx);\n labelMin = d.crossPos + Math.min(startX, endX);\n labelMax = d.crossPos + Math.max(startX, endX);\n }\n }\n\n if(axIsX) {\n if(axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math.min(labelMax, axisLabelMaxY) - Math.max(labelMin, axisLabelMinY) > 1) {\n // has at least 1 pixel overlap with axis label\n if(crossAx.side === 'left') {\n pmin = crossAx._mainLinePosition;\n pmax = fullLayout.width;\n } else {\n pmax = crossAx._mainLinePosition;\n }\n }\n } else {\n if(axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math.min(labelMax, axisLabelMaxX) - Math.max(labelMin, axisLabelMinX) > 1) {\n // has at least 1 pixel overlap with axis label\n if(crossAx.side === 'top') {\n pmin = crossAx._mainLinePosition;\n pmax = fullLayout.height;\n } else {\n pmax = crossAx._mainLinePosition;\n }\n }\n }\n }\n\n pointgroups[k++] = [{\n datum: d,\n traceIndex: d.trace.index,\n dp: 0,\n pos: d.pos,\n posref: d.posref,\n size: d.by * (axIsX ? YFACTOR : 1) / 2,\n pmin: pmin,\n pmax: pmax\n }];\n });\n\n pointgroups.sort(function(a, b) {\n return (a[0].posref - b[0].posref) ||\n // for equal positions, sort trace indices increasing or decreasing\n // depending on whether the axis is reversed or not... so stacked\n // traces will generally keep their order even if one trace adds\n // nothing to the stack.\n (axSign * (b[0].traceIndex - a[0].traceIndex));\n });\n\n var donepositioning, topOverlap, bottomOverlap, i, j, pti, sumdp;\n\n function constrainGroup(grp) {\n var minPt = grp[0];\n var maxPt = grp[grp.length - 1];\n\n // overlap with the top - positive vals are overlaps\n topOverlap = minPt.pmin - minPt.pos - minPt.dp + minPt.size;\n\n // overlap with the bottom - positive vals are overlaps\n bottomOverlap = maxPt.pos + maxPt.dp + maxPt.size - minPt.pmax;\n\n // check for min overlap first, so that we always\n // see the largest labels\n // allow for .01px overlap, so we don't get an\n // infinite loop from rounding errors\n if(topOverlap > 0.01) {\n for(j = grp.length - 1; j >= 0; j--) grp[j].dp += topOverlap;\n donepositioning = false;\n }\n if(bottomOverlap < 0.01) return;\n if(topOverlap < -0.01) {\n // make sure we're not pushing back and forth\n for(j = grp.length - 1; j >= 0; j--) grp[j].dp -= bottomOverlap;\n donepositioning = false;\n }\n if(!donepositioning) return;\n\n // no room to fix positioning, delete off-screen points\n\n // first see how many points we need to delete\n var deleteCount = 0;\n for(i = 0; i < grp.length; i++) {\n pti = grp[i];\n if(pti.pos + pti.dp + pti.size > minPt.pmax) deleteCount++;\n }\n\n // start by deleting points whose data is off screen\n for(i = grp.length - 1; i >= 0; i--) {\n if(deleteCount <= 0) break;\n pti = grp[i];\n\n // pos has already been constrained to [pmin,pmax]\n // so look for points close to that to delete\n if(pti.pos > minPt.pmax - 1) {\n pti.del = true;\n deleteCount--;\n }\n }\n for(i = 0; i < grp.length; i++) {\n if(deleteCount <= 0) break;\n pti = grp[i];\n\n // pos has already been constrained to [pmin,pmax]\n // so look for points close to that to delete\n if(pti.pos < minPt.pmin + 1) {\n pti.del = true;\n deleteCount--;\n\n // shift the whole group minus into this new space\n bottomOverlap = pti.size * 2;\n for(j = grp.length - 1; j >= 0; j--) grp[j].dp -= bottomOverlap;\n }\n }\n // then delete points that go off the bottom\n for(i = grp.length - 1; i >= 0; i--) {\n if(deleteCount <= 0) break;\n pti = grp[i];\n if(pti.pos + pti.dp + pti.size > minPt.pmax) {\n pti.del = true;\n deleteCount--;\n }\n }\n }\n\n // loop through groups, combining them if they overlap,\n // until nothing moves\n while(!donepositioning && nummoves <= nLabels) {\n // to avoid infinite loops, don't move more times\n // than there are traces\n nummoves++;\n\n // assume nothing will move in this iteration,\n // reverse this if it does\n donepositioning = true;\n i = 0;\n while(i < pointgroups.length - 1) {\n // the higher (g0) and lower (g1) point group\n var g0 = pointgroups[i];\n var g1 = pointgroups[i + 1];\n\n // the lowest point in the higher group (p0)\n // the highest point in the lower group (p1)\n var p0 = g0[g0.length - 1];\n var p1 = g1[0];\n topOverlap = p0.pos + p0.dp + p0.size - p1.pos - p1.dp + p1.size;\n\n // Only group points that lie on the same axes\n if(topOverlap > 0.01 && (p0.pmin === p1.pmin) && (p0.pmax === p1.pmax)) {\n // push the new point(s) added to this group out of the way\n for(j = g1.length - 1; j >= 0; j--) g1[j].dp += topOverlap;\n\n // add them to the group\n g0.push.apply(g0, g1);\n pointgroups.splice(i + 1, 1);\n\n // adjust for minimum average movement\n sumdp = 0;\n for(j = g0.length - 1; j >= 0; j--) sumdp += g0[j].dp;\n bottomOverlap = sumdp / g0.length;\n for(j = g0.length - 1; j >= 0; j--) g0[j].dp -= bottomOverlap;\n donepositioning = false;\n } else i++;\n }\n\n // check if we're going off the plot on either side and fix\n pointgroups.forEach(constrainGroup);\n }\n\n // now put these offsets into hoverData\n for(i = pointgroups.length - 1; i >= 0; i--) {\n var grp = pointgroups[i];\n for(j = grp.length - 1; j >= 0; j--) {\n var pt = grp[j];\n var hoverPt = pt.datum;\n hoverPt.offset = pt.dp;\n hoverPt.del = pt.del;\n }\n }\n}\n\nfunction getHoverLabelOffsets(hoverLabel, rotateLabels) {\n var offsetX = 0;\n var offsetY = hoverLabel.offset;\n\n if(rotateLabels) {\n offsetY *= -YSHIFTY;\n offsetX = hoverLabel.offset * YSHIFTX;\n }\n\n return {\n x: offsetX,\n y: offsetY\n };\n}\n\n/**\n * Calculate the shift in x for text and text2 elements\n */\nfunction getTextShiftX(hoverLabel) {\n var alignShift = {start: 1, end: -1, middle: 0}[hoverLabel.anchor];\n var textShiftX = alignShift * (HOVERARROWSIZE + HOVERTEXTPAD);\n var text2ShiftX = textShiftX + alignShift * (hoverLabel.txwidth + HOVERTEXTPAD);\n\n var isMiddle = hoverLabel.anchor === 'middle';\n if(isMiddle) {\n textShiftX -= hoverLabel.tx2width / 2;\n text2ShiftX += hoverLabel.txwidth / 2 + HOVERTEXTPAD;\n }\n\n return {\n alignShift: alignShift,\n textShiftX: textShiftX,\n text2ShiftX: text2ShiftX\n };\n}\n\nfunction alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {\n var pX = function(x) { return x * scaleX; };\n var pY = function(y) { return y * scaleY; };\n\n // finally set the text positioning relative to the data and draw the\n // box around it\n hoverLabels.each(function(d) {\n var g = d3.select(this);\n if(d.del) return g.remove();\n\n var tx = g.select('text.nums');\n var anchor = d.anchor;\n var horzSign = anchor === 'end' ? -1 : 1;\n var shiftX = getTextShiftX(d);\n var offsets = getHoverLabelOffsets(d, rotateLabels);\n var offsetX = offsets.x;\n var offsetY = offsets.y;\n\n var isMiddle = anchor === 'middle';\n\n g.select('path')\n .attr('d', isMiddle ?\n // middle aligned: rect centered on data\n ('M-' + pX(d.bx / 2 + d.tx2width / 2) + ',' + pY(offsetY - d.by / 2) +\n 'h' + pX(d.bx) + 'v' + pY(d.by) + 'h-' + pX(d.bx) + 'Z') :\n // left or right aligned: side rect with arrow to data\n ('M0,0L' + pX(horzSign * HOVERARROWSIZE + offsetX) + ',' + pY(HOVERARROWSIZE + offsetY) +\n 'v' + pY(d.by / 2 - HOVERARROWSIZE) +\n 'h' + pX(horzSign * d.bx) +\n 'v-' + pY(d.by) +\n 'H' + pX(horzSign * HOVERARROWSIZE + offsetX) +\n 'V' + pY(offsetY - HOVERARROWSIZE) +\n 'Z'));\n\n var posX = offsetX + shiftX.textShiftX;\n var posY = offsetY + d.ty0 - d.by / 2 + HOVERTEXTPAD;\n var textAlign = d.textAlign || 'auto';\n\n if(textAlign !== 'auto') {\n if(textAlign === 'left' && anchor !== 'start') {\n tx.attr('text-anchor', 'start');\n posX = isMiddle ?\n -d.bx / 2 - d.tx2width / 2 + HOVERTEXTPAD :\n -d.bx - HOVERTEXTPAD;\n } else if(textAlign === 'right' && anchor !== 'end') {\n tx.attr('text-anchor', 'end');\n posX = isMiddle ?\n d.bx / 2 - d.tx2width / 2 - HOVERTEXTPAD :\n d.bx + HOVERTEXTPAD;\n }\n }\n\n tx.call(svgTextUtils.positionText, pX(posX), pY(posY));\n\n if(d.tx2width) {\n g.select('text.name')\n .call(svgTextUtils.positionText,\n pX(shiftX.text2ShiftX + shiftX.alignShift * HOVERTEXTPAD + offsetX),\n pY(offsetY + d.ty0 - d.by / 2 + HOVERTEXTPAD));\n g.select('rect')\n .call(Drawing.setRect,\n pX(shiftX.text2ShiftX + (shiftX.alignShift - 1) * d.tx2width / 2 + offsetX),\n pY(offsetY - d.by / 2 - 1),\n pX(d.tx2width), pY(d.by + 2));\n }\n });\n}\n\nfunction cleanPoint(d, hovermode) {\n var index = d.index;\n var trace = d.trace || {};\n var cd0 = d.cd[0];\n var cd = d.cd[index] || {};\n\n function pass(v) {\n return v || (isNumeric(v) && v === 0);\n }\n\n var getVal = Array.isArray(index) ?\n function(calcKey, traceKey) {\n var v = Lib.castOption(cd0, index, calcKey);\n return pass(v) ? v : Lib.extractOption({}, trace, '', traceKey);\n } :\n function(calcKey, traceKey) {\n return Lib.extractOption(cd, trace, calcKey, traceKey);\n };\n\n function fill(key, calcKey, traceKey) {\n var val = getVal(calcKey, traceKey);\n if(pass(val)) d[key] = val;\n }\n\n fill('hoverinfo', 'hi', 'hoverinfo');\n fill('bgcolor', 'hbg', 'hoverlabel.bgcolor');\n fill('borderColor', 'hbc', 'hoverlabel.bordercolor');\n fill('fontFamily', 'htf', 'hoverlabel.font.family');\n fill('fontSize', 'hts', 'hoverlabel.font.size');\n fill('fontColor', 'htc', 'hoverlabel.font.color');\n fill('nameLength', 'hnl', 'hoverlabel.namelength');\n fill('textAlign', 'hta', 'hoverlabel.align');\n\n d.posref = (hovermode === 'y' || (hovermode === 'closest' && trace.orientation === 'h')) ?\n (d.xa._offset + (d.x0 + d.x1) / 2) :\n (d.ya._offset + (d.y0 + d.y1) / 2);\n\n // then constrain all the positions to be on the plot\n d.x0 = Lib.constrain(d.x0, 0, d.xa._length);\n d.x1 = Lib.constrain(d.x1, 0, d.xa._length);\n d.y0 = Lib.constrain(d.y0, 0, d.ya._length);\n d.y1 = Lib.constrain(d.y1, 0, d.ya._length);\n\n // and convert the x and y label values into formatted text\n if(d.xLabelVal !== undefined) {\n d.xLabel = ('xLabel' in d) ? d.xLabel : Axes.hoverLabelText(d.xa, d.xLabelVal, trace.xhoverformat);\n d.xVal = d.xa.c2d(d.xLabelVal);\n }\n if(d.yLabelVal !== undefined) {\n d.yLabel = ('yLabel' in d) ? d.yLabel : Axes.hoverLabelText(d.ya, d.yLabelVal, trace.yhoverformat);\n d.yVal = d.ya.c2d(d.yLabelVal);\n }\n\n // Traces like heatmaps generate the zLabel in their hoverPoints function\n if(d.zLabelVal !== undefined && d.zLabel === undefined) {\n d.zLabel = String(d.zLabelVal);\n }\n\n // for box means and error bars, add the range to the label\n if(!isNaN(d.xerr) && !(d.xa.type === 'log' && d.xerr <= 0)) {\n var xeText = Axes.tickText(d.xa, d.xa.c2l(d.xerr), 'hover').text;\n if(d.xerrneg !== undefined) {\n d.xLabel += ' +' + xeText + ' / -' +\n Axes.tickText(d.xa, d.xa.c2l(d.xerrneg), 'hover').text;\n } else d.xLabel += ' ± ' + xeText;\n\n // small distance penalty for error bars, so that if there are\n // traces with errors and some without, the error bar label will\n // hoist up to the point\n if(hovermode === 'x') d.distance += 1;\n }\n if(!isNaN(d.yerr) && !(d.ya.type === 'log' && d.yerr <= 0)) {\n var yeText = Axes.tickText(d.ya, d.ya.c2l(d.yerr), 'hover').text;\n if(d.yerrneg !== undefined) {\n d.yLabel += ' +' + yeText + ' / -' +\n Axes.tickText(d.ya, d.ya.c2l(d.yerrneg), 'hover').text;\n } else d.yLabel += ' ± ' + yeText;\n\n if(hovermode === 'y') d.distance += 1;\n }\n\n var infomode = d.hoverinfo || d.trace.hoverinfo;\n\n if(infomode && infomode !== 'all') {\n infomode = Array.isArray(infomode) ? infomode : infomode.split('+');\n if(infomode.indexOf('x') === -1) d.xLabel = undefined;\n if(infomode.indexOf('y') === -1) d.yLabel = undefined;\n if(infomode.indexOf('z') === -1) d.zLabel = undefined;\n if(infomode.indexOf('text') === -1) d.text = undefined;\n if(infomode.indexOf('name') === -1) d.name = undefined;\n }\n\n return d;\n}\n\nfunction createSpikelines(gd, closestPoints, opts) {\n var container = opts.container;\n var fullLayout = opts.fullLayout;\n var gs = fullLayout._size;\n var evt = opts.event;\n var showY = !!closestPoints.hLinePoint;\n var showX = !!closestPoints.vLinePoint;\n\n var xa, ya;\n\n // Remove old spikeline items\n container.selectAll('.spikeline').remove();\n\n if(!(showX || showY)) return;\n\n var contrastColor = Color.combine(fullLayout.plot_bgcolor, fullLayout.paper_bgcolor);\n\n // Horizontal line (to y-axis)\n if(showY) {\n var hLinePoint = closestPoints.hLinePoint;\n var hLinePointX, hLinePointY;\n\n xa = hLinePoint && hLinePoint.xa;\n ya = hLinePoint && hLinePoint.ya;\n var ySnap = ya.spikesnap;\n\n if(ySnap === 'cursor') {\n hLinePointX = evt.pointerX;\n hLinePointY = evt.pointerY;\n } else {\n hLinePointX = xa._offset + hLinePoint.x;\n hLinePointY = ya._offset + hLinePoint.y;\n }\n var dfltHLineColor = tinycolor.readability(hLinePoint.color, contrastColor) < 1.5 ?\n Color.contrast(contrastColor) : hLinePoint.color;\n var yMode = ya.spikemode;\n var yThickness = ya.spikethickness;\n var yColor = ya.spikecolor || dfltHLineColor;\n var xEdge = Axes.getPxPosition(gd, ya);\n var xBase, xEndSpike;\n\n if(yMode.indexOf('toaxis') !== -1 || yMode.indexOf('across') !== -1) {\n if(yMode.indexOf('toaxis') !== -1) {\n xBase = xEdge;\n xEndSpike = hLinePointX;\n }\n if(yMode.indexOf('across') !== -1) {\n var xAcross0 = ya._counterDomainMin;\n var xAcross1 = ya._counterDomainMax;\n if(ya.anchor === 'free') {\n xAcross0 = Math.min(xAcross0, ya.position);\n xAcross1 = Math.max(xAcross1, ya.position);\n }\n xBase = gs.l + xAcross0 * gs.w;\n xEndSpike = gs.l + xAcross1 * gs.w;\n }\n\n // Foreground horizontal line (to y-axis)\n container.insert('line', ':first-child')\n .attr({\n x1: xBase,\n x2: xEndSpike,\n y1: hLinePointY,\n y2: hLinePointY,\n 'stroke-width': yThickness,\n stroke: yColor,\n 'stroke-dasharray': Drawing.dashStyle(ya.spikedash, yThickness)\n })\n .classed('spikeline', true)\n .classed('crisp', true);\n\n // Background horizontal Line (to y-axis)\n container.insert('line', ':first-child')\n .attr({\n x1: xBase,\n x2: xEndSpike,\n y1: hLinePointY,\n y2: hLinePointY,\n 'stroke-width': yThickness + 2,\n stroke: contrastColor\n })\n .classed('spikeline', true)\n .classed('crisp', true);\n }\n // Y axis marker\n if(yMode.indexOf('marker') !== -1) {\n container.insert('circle', ':first-child')\n .attr({\n cx: xEdge + (ya.side !== 'right' ? yThickness : -yThickness),\n cy: hLinePointY,\n r: yThickness,\n fill: yColor\n })\n .classed('spikeline', true);\n }\n }\n\n if(showX) {\n var vLinePoint = closestPoints.vLinePoint;\n var vLinePointX, vLinePointY;\n\n xa = vLinePoint && vLinePoint.xa;\n ya = vLinePoint && vLinePoint.ya;\n var xSnap = xa.spikesnap;\n\n if(xSnap === 'cursor') {\n vLinePointX = evt.pointerX;\n vLinePointY = evt.pointerY;\n } else {\n vLinePointX = xa._offset + vLinePoint.x;\n vLinePointY = ya._offset + vLinePoint.y;\n }\n var dfltVLineColor = tinycolor.readability(vLinePoint.color, contrastColor) < 1.5 ?\n Color.contrast(contrastColor) : vLinePoint.color;\n var xMode = xa.spikemode;\n var xThickness = xa.spikethickness;\n var xColor = xa.spikecolor || dfltVLineColor;\n var yEdge = Axes.getPxPosition(gd, xa);\n var yBase, yEndSpike;\n\n if(xMode.indexOf('toaxis') !== -1 || xMode.indexOf('across') !== -1) {\n if(xMode.indexOf('toaxis') !== -1) {\n yBase = yEdge;\n yEndSpike = vLinePointY;\n }\n if(xMode.indexOf('across') !== -1) {\n var yAcross0 = xa._counterDomainMin;\n var yAcross1 = xa._counterDomainMax;\n if(xa.anchor === 'free') {\n yAcross0 = Math.min(yAcross0, xa.position);\n yAcross1 = Math.max(yAcross1, xa.position);\n }\n yBase = gs.t + (1 - yAcross1) * gs.h;\n yEndSpike = gs.t + (1 - yAcross0) * gs.h;\n }\n\n // Foreground vertical line (to x-axis)\n container.insert('line', ':first-child')\n .attr({\n x1: vLinePointX,\n x2: vLinePointX,\n y1: yBase,\n y2: yEndSpike,\n 'stroke-width': xThickness,\n stroke: xColor,\n 'stroke-dasharray': Drawing.dashStyle(xa.spikedash, xThickness)\n })\n .classed('spikeline', true)\n .classed('crisp', true);\n\n // Background vertical line (to x-axis)\n container.insert('line', ':first-child')\n .attr({\n x1: vLinePointX,\n x2: vLinePointX,\n y1: yBase,\n y2: yEndSpike,\n 'stroke-width': xThickness + 2,\n stroke: contrastColor\n })\n .classed('spikeline', true)\n .classed('crisp', true);\n }\n\n // X axis marker\n if(xMode.indexOf('marker') !== -1) {\n container.insert('circle', ':first-child')\n .attr({\n cx: vLinePointX,\n cy: yEdge - (xa.side !== 'top' ? xThickness : -xThickness),\n r: xThickness,\n fill: xColor\n })\n .classed('spikeline', true);\n }\n }\n}\n\nfunction hoverChanged(gd, evt, oldhoverdata) {\n // don't emit any events if nothing changed\n if(!oldhoverdata || oldhoverdata.length !== gd._hoverdata.length) return true;\n\n for(var i = oldhoverdata.length - 1; i >= 0; i--) {\n var oldPt = oldhoverdata[i];\n var newPt = gd._hoverdata[i];\n\n if(oldPt.curveNumber !== newPt.curveNumber ||\n String(oldPt.pointNumber) !== String(newPt.pointNumber) ||\n String(oldPt.pointNumbers) !== String(newPt.pointNumbers)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction spikesChanged(gd, oldspikepoints) {\n // don't relayout the plot because of new spikelines if spikelines points didn't change\n if(!oldspikepoints) return true;\n if(oldspikepoints.vLinePoint !== gd._spikepoints.vLinePoint ||\n oldspikepoints.hLinePoint !== gd._spikepoints.hLinePoint\n ) return true;\n return false;\n}\n\nfunction plainText(s, len) {\n return svgTextUtils.plainText(s || '', {\n len: len,\n allowedTags: ['br', 'sub', 'sup', 'b', 'i', 'em']\n });\n}\n\nfunction orderRangePoints(hoverData, hovermode) {\n var axLetter = hovermode.charAt(0);\n\n var first = [];\n var second = [];\n var last = [];\n\n for(var i = 0; i < hoverData.length; i++) {\n var d = hoverData[i];\n\n if(\n Registry.traceIs(d.trace, 'bar-like') ||\n Registry.traceIs(d.trace, 'box-violin')\n ) {\n last.push(d);\n } else if(d.trace[axLetter + 'period']) {\n second.push(d);\n } else {\n first.push(d);\n }\n }\n\n return first.concat(second).concat(last);\n}\n\nfunction getCoord(axLetter, winningPoint, fullLayout) {\n var ax = winningPoint[axLetter + 'a'];\n var val = winningPoint[axLetter + 'Val'];\n\n var cd0 = winningPoint.cd[0];\n\n if(ax.type === 'category' || ax.type === 'multicategory') val = ax._categoriesMap[val];\n else if(ax.type === 'date') {\n var periodalignment = winningPoint.trace[axLetter + 'periodalignment'];\n if(periodalignment) {\n var d = winningPoint.cd[winningPoint.index];\n\n var start = d[axLetter + 'Start'];\n if(start === undefined) start = d[axLetter];\n\n var end = d[axLetter + 'End'];\n if(end === undefined) end = d[axLetter];\n\n var diff = end - start;\n\n if(periodalignment === 'end') {\n val += diff;\n } else if(periodalignment === 'middle') {\n val += diff / 2;\n }\n }\n\n val = ax.d2c(val);\n }\n\n if(cd0 && cd0.t && cd0.t.posLetter === ax._id) {\n if(\n fullLayout.boxmode === 'group' ||\n fullLayout.violinmode === 'group'\n ) {\n val += cd0.t.dPos;\n }\n }\n\n return val;\n}\n\n// Top/left hover offsets relative to graph div. As long as hover content is\n// a sibling of the graph div, it will be positioned correctly relative to\n// the offset parent, whatever that may be.\nfunction getTopOffset(gd) { return gd.offsetTop + gd.clientTop; }\nfunction getLeftOffset(gd) { return gd.offsetLeft + gd.clientLeft; }\n\nfunction getBoundingClientRect(gd, node) {\n var fullLayout = gd._fullLayout;\n\n var rect = node.getBoundingClientRect();\n\n var x0 = rect.left;\n var y0 = rect.top;\n var x1 = x0 + rect.width;\n var y1 = y0 + rect.height;\n\n var A = Lib.apply3DTransform(fullLayout._invTransform)(x0, y0);\n var B = Lib.apply3DTransform(fullLayout._invTransform)(x1, y1);\n\n var Ax = A[0];\n var Ay = A[1];\n var Bx = B[0];\n var By = B[1];\n\n return {\n x: Ax,\n y: Ay,\n width: Bx - Ax,\n height: By - Ay,\n top: Math.min(Ay, By),\n left: Math.min(Ax, Bx),\n right: Math.max(Ax, Bx),\n bottom: Math.max(Ay, By),\n };\n}\n","'use strict';\n\nvar Lib = require('../../lib');\n\n\nmodule.exports = function hasColorbar(container) {\n return Lib.isPlainObject(container.colorbar);\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Template = require('../../plot_api/plot_template');\n\nvar colorScaleAttrs = require('./layout_attributes');\nvar colorScaleDefaults = require('./defaults');\n\nmodule.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {\n function coerce(attr, dflt) {\n return Lib.coerce(layoutIn, layoutOut, colorScaleAttrs, attr, dflt);\n }\n\n coerce('colorscale.sequential');\n coerce('colorscale.sequentialminus');\n coerce('colorscale.diverging');\n\n var colorAxes = layoutOut._colorAxes;\n var colorAxIn, colorAxOut;\n\n function coerceAx(attr, dflt) {\n return Lib.coerce(colorAxIn, colorAxOut, colorScaleAttrs.coloraxis, attr, dflt);\n }\n\n for(var k in colorAxes) {\n var stash = colorAxes[k];\n\n if(stash[0]) {\n colorAxIn = layoutIn[k] || {};\n colorAxOut = Template.newContainer(layoutOut, k, 'coloraxis');\n colorAxOut._name = k;\n colorScaleDefaults(colorAxIn, colorAxOut, layoutOut, coerceAx, {prefix: '', cLetter: 'c'});\n } else {\n // re-coerce colorscale attributes w/o coloraxis\n for(var i = 0; i < stash[2].length; i++) {\n stash[2][i]();\n }\n delete layoutOut._colorAxes[k];\n }\n }\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\n\nvar Registry = require('../../registry');\nvar Plots = require('../../plots/plots');\nvar Lib = require('../../lib');\nvar strTranslate = Lib.strTranslate;\nvar Axes = require('../../plots/cartesian/axes');\nvar Color = require('../color');\nvar Drawing = require('../drawing');\nvar Fx = require('../fx');\nvar svgTextUtils = require('../../lib/svg_text_utils');\nvar setCursor = require('../../lib/setcursor');\nvar dragElement = require('../dragelement');\nvar arrayEditor = require('../../plot_api/plot_template').arrayEditor;\n\nvar drawArrowHead = require('./draw_arrow_head');\n\n// Annotations are stored in gd.layout.annotations, an array of objects\n// index can point to one item in this array,\n// or non-numeric to simply add a new one\n// or -1 to modify all existing\n// opt can be the full options object, or one key (to be set to value)\n// or undefined to simply redraw\n// if opt is blank, val can be 'add' or a full options object to add a new\n// annotation at that point in the array, or 'remove' to delete this one\n\nmodule.exports = {\n draw: draw,\n drawOne: drawOne,\n drawRaw: drawRaw\n};\n\n/*\n * draw: draw all annotations without any new modifications\n */\nfunction draw(gd) {\n var fullLayout = gd._fullLayout;\n\n fullLayout._infolayer.selectAll('.annotation').remove();\n\n for(var i = 0; i < fullLayout.annotations.length; i++) {\n if(fullLayout.annotations[i].visible) {\n drawOne(gd, i);\n }\n }\n\n return Plots.previousPromises(gd);\n}\n\n/*\n * drawOne: draw a single cartesian or paper-ref annotation, potentially with modifications\n *\n * index (int): the annotation to draw\n */\nfunction drawOne(gd, index) {\n var fullLayout = gd._fullLayout;\n var options = fullLayout.annotations[index] || {};\n var xa = Axes.getFromId(gd, options.xref);\n var ya = Axes.getFromId(gd, options.yref);\n\n if(xa) xa.setScale();\n if(ya) ya.setScale();\n\n drawRaw(gd, options, index, false, xa, ya);\n}\n\n// Convert pixels to the coordinates relevant for the axis referred to. For\n// example, for paper it would convert to a value normalized by the dimension of\n// the plot.\n// axDomainRef: if true and axa defined, draws relative to axis domain,\n// otherwise draws relative to data (if axa defined) or paper (if not).\nfunction shiftPosition(axa, dAx, axLetter, gs, options) {\n var optAx = options[axLetter];\n var axRef = options[axLetter + 'ref'];\n var vertical = axLetter.indexOf('y') !== -1;\n var axDomainRef = Axes.getRefType(axRef) === 'domain';\n var gsDim = vertical ? gs.h : gs.w;\n if(axa) {\n if(axDomainRef) {\n // here optAx normalized to length of axis (e.g., normally in range\n // 0 to 1). But dAx is in pixels. So we normalize dAx to length of\n // axis before doing the math.\n return optAx + (vertical ? -dAx : dAx) / axa._length;\n } else {\n return axa.p2r(axa.r2p(optAx) + dAx);\n }\n } else {\n return optAx + (vertical ? -dAx : dAx) / gsDim;\n }\n}\n\n/**\n * drawRaw: draw a single annotation, potentially with modifications\n *\n * @param {DOM element} gd\n * @param {object} options : this annotation's fullLayout options\n * @param {integer} index : index in 'annotations' container of the annotation to draw\n * @param {string} subplotId : id of the annotation's subplot\n * - use false for 2d (i.e. cartesian or paper-ref) annotations\n * @param {object | undefined} xa : full x-axis object to compute subplot pos-to-px\n * @param {object | undefined} ya : ... y-axis\n */\nfunction drawRaw(gd, options, index, subplotId, xa, ya) {\n var fullLayout = gd._fullLayout;\n var gs = gd._fullLayout._size;\n var edits = gd._context.edits;\n\n var className, containerStr;\n\n if(subplotId) {\n className = 'annotation-' + subplotId;\n containerStr = subplotId + '.annotations';\n } else {\n className = 'annotation';\n containerStr = 'annotations';\n }\n\n var editHelpers = arrayEditor(gd.layout, containerStr, options);\n var modifyBase = editHelpers.modifyBase;\n var modifyItem = editHelpers.modifyItem;\n var getUpdateObj = editHelpers.getUpdateObj;\n\n // remove the existing annotation if there is one\n fullLayout._infolayer\n .selectAll('.' + className + '[data-index=\"' + index + '\"]')\n .remove();\n\n var annClipID = 'clip' + fullLayout._uid + '_ann' + index;\n\n // this annotation is gone - quit now after deleting it\n // TODO: use d3 idioms instead of deleting and redrawing every time\n if(!options._input || options.visible === false) {\n d3.selectAll('#' + annClipID).remove();\n return;\n }\n\n // calculated pixel positions\n // x & y each will get text, head, and tail as appropriate\n var annPosPx = {x: {}, y: {}};\n var textangle = +options.textangle || 0;\n\n // create the components\n // made a single group to contain all, so opacity can work right\n // with border/arrow together this could handle a whole bunch of\n // cleanup at this point, but works for now\n var annGroup = fullLayout._infolayer.append('g')\n .classed(className, true)\n .attr('data-index', String(index))\n .style('opacity', options.opacity);\n\n // another group for text+background so that they can rotate together\n var annTextGroup = annGroup.append('g')\n .classed('annotation-text-g', true);\n\n var editTextPosition = edits[options.showarrow ? 'annotationTail' : 'annotationPosition'];\n var textEvents = options.captureevents || edits.annotationText || editTextPosition;\n\n function makeEventData(initialEvent) {\n var eventData = {\n index: index,\n annotation: options._input,\n fullAnnotation: options,\n event: initialEvent\n };\n if(subplotId) {\n eventData.subplotId = subplotId;\n }\n return eventData;\n }\n\n var annTextGroupInner = annTextGroup.append('g')\n .style('pointer-events', textEvents ? 'all' : null)\n .call(setCursor, 'pointer')\n .on('click', function() {\n gd._dragging = false;\n gd.emit('plotly_clickannotation', makeEventData(d3.event));\n });\n\n if(options.hovertext) {\n annTextGroupInner\n .on('mouseover', function() {\n var hoverOptions = options.hoverlabel;\n var hoverFont = hoverOptions.font;\n var bBox = this.getBoundingClientRect();\n var bBoxRef = gd.getBoundingClientRect();\n\n Fx.loneHover({\n x0: bBox.left - bBoxRef.left,\n x1: bBox.right - bBoxRef.left,\n y: (bBox.top + bBox.bottom) / 2 - bBoxRef.top,\n text: options.hovertext,\n color: hoverOptions.bgcolor,\n borderColor: hoverOptions.bordercolor,\n fontFamily: hoverFont.family,\n fontSize: hoverFont.size,\n fontColor: hoverFont.color\n }, {\n container: fullLayout._hoverlayer.node(),\n outerContainer: fullLayout._paper.node(),\n gd: gd\n });\n })\n .on('mouseout', function() {\n Fx.loneUnhover(fullLayout._hoverlayer.node());\n });\n }\n\n var borderwidth = options.borderwidth;\n var borderpad = options.borderpad;\n var borderfull = borderwidth + borderpad;\n\n var annTextBG = annTextGroupInner.append('rect')\n .attr('class', 'bg')\n .style('stroke-width', borderwidth + 'px')\n .call(Color.stroke, options.bordercolor)\n .call(Color.fill, options.bgcolor);\n\n var isSizeConstrained = options.width || options.height;\n\n var annTextClip = fullLayout._topclips\n .selectAll('#' + annClipID)\n .data(isSizeConstrained ? [0] : []);\n\n annTextClip.enter().append('clipPath')\n .classed('annclip', true)\n .attr('id', annClipID)\n .append('rect');\n annTextClip.exit().remove();\n\n var font = options.font;\n\n var text = fullLayout._meta ?\n Lib.templateString(options.text, fullLayout._meta) :\n options.text;\n\n var annText = annTextGroupInner.append('text')\n .classed('annotation-text', true)\n .text(text);\n\n function textLayout(s) {\n s.call(Drawing.font, font)\n .attr({\n 'text-anchor': {\n left: 'start',\n right: 'end'\n }[options.align] || 'middle'\n });\n\n svgTextUtils.convertToTspans(s, gd, drawGraphicalElements);\n return s;\n }\n\n function drawGraphicalElements() {\n // if the text has *only* a link, make the whole box into a link\n var anchor3 = annText.selectAll('a');\n if(anchor3.size() === 1 && anchor3.text() === annText.text()) {\n var wholeLink = annTextGroupInner.insert('a', ':first-child').attr({\n 'xlink:xlink:href': anchor3.attr('xlink:href'),\n 'xlink:xlink:show': anchor3.attr('xlink:show')\n })\n .style({cursor: 'pointer'});\n\n wholeLink.node().appendChild(annTextBG.node());\n }\n\n var mathjaxGroup = annTextGroupInner.select('.annotation-text-math-group');\n var hasMathjax = !mathjaxGroup.empty();\n var anntextBB = Drawing.bBox(\n (hasMathjax ? mathjaxGroup : annText).node());\n var textWidth = anntextBB.width;\n var textHeight = anntextBB.height;\n var annWidth = options.width || textWidth;\n var annHeight = options.height || textHeight;\n var outerWidth = Math.round(annWidth + 2 * borderfull);\n var outerHeight = Math.round(annHeight + 2 * borderfull);\n\n function shiftFraction(v, anchor) {\n if(anchor === 'auto') {\n if(v < 1 / 3) anchor = 'left';\n else if(v > 2 / 3) anchor = 'right';\n else anchor = 'center';\n }\n return {\n center: 0,\n middle: 0,\n left: 0.5,\n bottom: -0.5,\n right: -0.5,\n top: 0.5\n }[anchor];\n }\n\n var annotationIsOffscreen = false;\n var letters = ['x', 'y'];\n\n for(var i = 0; i < letters.length; i++) {\n var axLetter = letters[i];\n var axRef = options[axLetter + 'ref'] || axLetter;\n var tailRef = options['a' + axLetter + 'ref'];\n var ax = {x: xa, y: ya}[axLetter];\n var dimAngle = (textangle + (axLetter === 'x' ? 0 : -90)) * Math.PI / 180;\n // note that these two can be either positive or negative\n var annSizeFromWidth = outerWidth * Math.cos(dimAngle);\n var annSizeFromHeight = outerHeight * Math.sin(dimAngle);\n // but this one is the positive total size\n var annSize = Math.abs(annSizeFromWidth) + Math.abs(annSizeFromHeight);\n var anchor = options[axLetter + 'anchor'];\n var overallShift = options[axLetter + 'shift'] * (axLetter === 'x' ? 1 : -1);\n var posPx = annPosPx[axLetter];\n var basePx;\n var textPadShift;\n var alignPosition;\n var autoAlignFraction;\n var textShift;\n var axRefType = Axes.getRefType(axRef);\n\n /*\n * calculate the *primary* pixel position\n * which is the arrowhead if there is one,\n * otherwise the text anchor point\n */\n if(ax && (axRefType !== 'domain')) {\n // check if annotation is off screen, to bypass DOM manipulations\n var posFraction = ax.r2fraction(options[axLetter]);\n if(posFraction < 0 || posFraction > 1) {\n if(tailRef === axRef) {\n posFraction = ax.r2fraction(options['a' + axLetter]);\n if(posFraction < 0 || posFraction > 1) {\n annotationIsOffscreen = true;\n }\n } else {\n annotationIsOffscreen = true;\n }\n }\n basePx = ax._offset + ax.r2p(options[axLetter]);\n autoAlignFraction = 0.5;\n } else {\n var axRefTypeEqDomain = axRefType === 'domain';\n if(axLetter === 'x') {\n alignPosition = options[axLetter];\n basePx = axRefTypeEqDomain ?\n ax._offset + ax._length * alignPosition :\n basePx = gs.l + gs.w * alignPosition;\n } else {\n alignPosition = 1 - options[axLetter];\n basePx = axRefTypeEqDomain ?\n ax._offset + ax._length * alignPosition :\n basePx = gs.t + gs.h * alignPosition;\n }\n autoAlignFraction = options.showarrow ? 0.5 : alignPosition;\n }\n\n // now translate this into pixel positions of head, tail, and text\n // as well as paddings for autorange\n if(options.showarrow) {\n posPx.head = basePx;\n\n var arrowLength = options['a' + axLetter];\n\n // with an arrow, the text rotates around the anchor point\n textShift = annSizeFromWidth * shiftFraction(0.5, options.xanchor) -\n annSizeFromHeight * shiftFraction(0.5, options.yanchor);\n\n if(tailRef === axRef) {\n // In the case tailRefType is 'domain' or 'paper', the arrow's\n // position is set absolutely, which is consistent with how\n // it behaves when its position is set in data ('range')\n // coordinates.\n var tailRefType = Axes.getRefType(tailRef);\n if(tailRefType === 'domain') {\n if(axLetter === 'y') {\n arrowLength = 1 - arrowLength;\n }\n posPx.tail = ax._offset + ax._length * arrowLength;\n } else if(tailRefType === 'paper') {\n if(axLetter === 'y') {\n arrowLength = 1 - arrowLength;\n posPx.tail = gs.t + gs.h * arrowLength;\n } else {\n posPx.tail = gs.l + gs.w * arrowLength;\n }\n } else {\n // assumed tailRef is range or paper referenced\n posPx.tail = ax._offset + ax.r2p(arrowLength);\n }\n // tail is range- or domain-referenced: autorange pads the\n // text in px from the tail\n textPadShift = textShift;\n } else {\n posPx.tail = basePx + arrowLength;\n // tail is specified in px from head, so autorange also pads vs head\n textPadShift = textShift + arrowLength;\n }\n\n posPx.text = posPx.tail + textShift;\n\n // constrain pixel/paper referenced so the draggers are at least\n // partially visible\n var maxPx = fullLayout[(axLetter === 'x') ? 'width' : 'height'];\n if(axRef === 'paper') {\n posPx.head = Lib.constrain(posPx.head, 1, maxPx - 1);\n }\n if(tailRef === 'pixel') {\n var shiftPlus = -Math.max(posPx.tail - 3, posPx.text);\n var shiftMinus = Math.min(posPx.tail + 3, posPx.text) - maxPx;\n if(shiftPlus > 0) {\n posPx.tail += shiftPlus;\n posPx.text += shiftPlus;\n } else if(shiftMinus > 0) {\n posPx.tail -= shiftMinus;\n posPx.text -= shiftMinus;\n }\n }\n\n posPx.tail += overallShift;\n posPx.head += overallShift;\n } else {\n // with no arrow, the text rotates and *then* we put the anchor\n // relative to the new bounding box\n textShift = annSize * shiftFraction(autoAlignFraction, anchor);\n textPadShift = textShift;\n posPx.text = basePx + textShift;\n }\n\n posPx.text += overallShift;\n textShift += overallShift;\n textPadShift += overallShift;\n\n // padplus/minus are used by autorange\n options['_' + axLetter + 'padplus'] = (annSize / 2) + textPadShift;\n options['_' + axLetter + 'padminus'] = (annSize / 2) - textPadShift;\n\n // size/shift are used during dragging\n options['_' + axLetter + 'size'] = annSize;\n options['_' + axLetter + 'shift'] = textShift;\n }\n\n if(annotationIsOffscreen) {\n annTextGroupInner.remove();\n return;\n }\n\n var xShift = 0;\n var yShift = 0;\n\n if(options.align !== 'left') {\n xShift = (annWidth - textWidth) * (options.align === 'center' ? 0.5 : 1);\n }\n if(options.valign !== 'top') {\n yShift = (annHeight - textHeight) * (options.valign === 'middle' ? 0.5 : 1);\n }\n\n if(hasMathjax) {\n mathjaxGroup.select('svg').attr({\n x: borderfull + xShift - 1,\n y: borderfull + yShift\n })\n .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd);\n } else {\n var texty = borderfull + yShift - anntextBB.top;\n var textx = borderfull + xShift - anntextBB.left;\n\n annText.call(svgTextUtils.positionText, textx, texty)\n .call(Drawing.setClipUrl, isSizeConstrained ? annClipID : null, gd);\n }\n\n annTextClip.select('rect').call(Drawing.setRect, borderfull, borderfull,\n annWidth, annHeight);\n\n annTextBG.call(Drawing.setRect, borderwidth / 2, borderwidth / 2,\n outerWidth - borderwidth, outerHeight - borderwidth);\n\n annTextGroupInner.call(Drawing.setTranslate,\n Math.round(annPosPx.x.text - outerWidth / 2),\n Math.round(annPosPx.y.text - outerHeight / 2));\n\n /*\n * rotate text and background\n * we already calculated the text center position *as rotated*\n * because we needed that for autoranging anyway, so now whether\n * we have an arrow or not, we rotate about the text center.\n */\n annTextGroup.attr({transform: 'rotate(' + textangle + ',' +\n annPosPx.x.text + ',' + annPosPx.y.text + ')'});\n\n /*\n * add the arrow\n * uses options[arrowwidth,arrowcolor,arrowhead] for styling\n * dx and dy are normally zero, but when you are dragging the textbox\n * while the head stays put, dx and dy are the pixel offsets\n */\n var drawArrow = function(dx, dy) {\n annGroup\n .selectAll('.annotation-arrow-g')\n .remove();\n\n var headX = annPosPx.x.head;\n var headY = annPosPx.y.head;\n var tailX = annPosPx.x.tail + dx;\n var tailY = annPosPx.y.tail + dy;\n var textX = annPosPx.x.text + dx;\n var textY = annPosPx.y.text + dy;\n\n // find the edge of the text box, where we'll start the arrow:\n // create transform matrix to rotate the text box corners\n var transform = Lib.rotationXYMatrix(textangle, textX, textY);\n var applyTransform = Lib.apply2DTransform(transform);\n var applyTransform2 = Lib.apply2DTransform2(transform);\n\n // calculate and transform bounding box\n var width = +annTextBG.attr('width');\n var height = +annTextBG.attr('height');\n var xLeft = textX - 0.5 * width;\n var xRight = xLeft + width;\n var yTop = textY - 0.5 * height;\n var yBottom = yTop + height;\n var edges = [\n [xLeft, yTop, xLeft, yBottom],\n [xLeft, yBottom, xRight, yBottom],\n [xRight, yBottom, xRight, yTop],\n [xRight, yTop, xLeft, yTop]\n ].map(applyTransform2);\n\n // Remove the line if it ends inside the box. Use ray\n // casting for rotated boxes: see which edges intersect a\n // line from the arrowhead to far away and reduce with xor\n // to get the parity of the number of intersections.\n if(edges.reduce(function(a, x) {\n return a ^\n !!Lib.segmentsIntersect(headX, headY, headX + 1e6, headY + 1e6,\n x[0], x[1], x[2], x[3]);\n }, false)) {\n // no line or arrow - so quit drawArrow now\n return;\n }\n\n edges.forEach(function(x) {\n var p = Lib.segmentsIntersect(tailX, tailY, headX, headY,\n x[0], x[1], x[2], x[3]);\n if(p) {\n tailX = p.x;\n tailY = p.y;\n }\n });\n\n var strokewidth = options.arrowwidth;\n var arrowColor = options.arrowcolor;\n var arrowSide = options.arrowside;\n\n var arrowGroup = annGroup.append('g')\n .style({opacity: Color.opacity(arrowColor)})\n .classed('annotation-arrow-g', true);\n\n var arrow = arrowGroup.append('path')\n .attr('d', 'M' + tailX + ',' + tailY + 'L' + headX + ',' + headY)\n .style('stroke-width', strokewidth + 'px')\n .call(Color.stroke, Color.rgb(arrowColor));\n\n drawArrowHead(arrow, arrowSide, options);\n\n // the arrow dragger is a small square right at the head, then a line to the tail,\n // all expanded by a stroke width of 6px plus the arrow line width\n if(edits.annotationPosition && arrow.node().parentNode && !subplotId) {\n var arrowDragHeadX = headX;\n var arrowDragHeadY = headY;\n if(options.standoff) {\n var arrowLength = Math.sqrt(Math.pow(headX - tailX, 2) + Math.pow(headY - tailY, 2));\n arrowDragHeadX += options.standoff * (tailX - headX) / arrowLength;\n arrowDragHeadY += options.standoff * (tailY - headY) / arrowLength;\n }\n var arrowDrag = arrowGroup.append('path')\n .classed('annotation-arrow', true)\n .classed('anndrag', true)\n .classed('cursor-move', true)\n .attr({\n d: 'M3,3H-3V-3H3ZM0,0L' + (tailX - arrowDragHeadX) + ',' + (tailY - arrowDragHeadY),\n transform: strTranslate(arrowDragHeadX, arrowDragHeadY)\n })\n .style('stroke-width', (strokewidth + 6) + 'px')\n .call(Color.stroke, 'rgba(0,0,0,0)')\n .call(Color.fill, 'rgba(0,0,0,0)');\n\n var annx0, anny0;\n\n // dragger for the arrow & head: translates the whole thing\n // (head/tail/text) all together\n dragElement.init({\n element: arrowDrag.node(),\n gd: gd,\n prepFn: function() {\n var pos = Drawing.getTranslate(annTextGroupInner);\n\n annx0 = pos.x;\n anny0 = pos.y;\n if(xa && xa.autorange) {\n modifyBase(xa._name + '.autorange', true);\n }\n if(ya && ya.autorange) {\n modifyBase(ya._name + '.autorange', true);\n }\n },\n moveFn: function(dx, dy) {\n var annxy0 = applyTransform(annx0, anny0);\n var xcenter = annxy0[0] + dx;\n var ycenter = annxy0[1] + dy;\n annTextGroupInner.call(Drawing.setTranslate, xcenter, ycenter);\n\n modifyItem('x',\n shiftPosition(xa, dx, 'x', gs, options));\n modifyItem('y',\n shiftPosition(ya, dy, 'y', gs, options));\n\n // for these 2 calls to shiftPosition, it is assumed xa, ya are\n // defined, so gsDim will not be used, but we put it in\n // anyways for consistency\n if(options.axref === options.xref) {\n modifyItem('ax', shiftPosition(xa, dx, 'ax', gs, options));\n }\n\n if(options.ayref === options.yref) {\n modifyItem('ay', shiftPosition(ya, dy, 'ay', gs, options));\n }\n\n arrowGroup.attr('transform', strTranslate(dx, dy));\n annTextGroup.attr({\n transform: 'rotate(' + textangle + ',' +\n xcenter + ',' + ycenter + ')'\n });\n },\n doneFn: function() {\n Registry.call('_guiRelayout', gd, getUpdateObj());\n var notesBox = document.querySelector('.js-notes-box-panel');\n if(notesBox) notesBox.redraw(notesBox.selectedObj);\n }\n });\n }\n };\n\n if(options.showarrow) drawArrow(0, 0);\n\n // user dragging the annotation (text, not arrow)\n if(editTextPosition) {\n var baseTextTransform;\n\n // dragger for the textbox: if there's an arrow, just drag the\n // textbox and tail, leave the head untouched\n dragElement.init({\n element: annTextGroupInner.node(),\n gd: gd,\n prepFn: function() {\n baseTextTransform = annTextGroup.attr('transform');\n },\n moveFn: function(dx, dy) {\n var csr = 'pointer';\n if(options.showarrow) {\n // for these 2 calls to shiftPosition, it is assumed xa, ya are\n // defined, so gsDim will not be used, but we put it in\n // anyways for consistency\n if(options.axref === options.xref) {\n modifyItem('ax', shiftPosition(xa, dx, 'ax', gs, options));\n } else {\n modifyItem('ax', options.ax + dx);\n }\n\n if(options.ayref === options.yref) {\n modifyItem('ay', shiftPosition(ya, dy, 'ay', gs.w, options));\n } else {\n modifyItem('ay', options.ay + dy);\n }\n\n drawArrow(dx, dy);\n } else if(!subplotId) {\n var xUpdate, yUpdate;\n if(xa) {\n // shiftPosition will not execute code where xa was\n // undefined, so we use to calculate xUpdate too\n xUpdate = shiftPosition(xa, dx, 'x', gs, options);\n } else {\n var widthFraction = options._xsize / gs.w;\n var xLeft = options.x + (options._xshift - options.xshift) / gs.w - widthFraction / 2;\n\n xUpdate = dragElement.align(xLeft + dx / gs.w,\n widthFraction, 0, 1, options.xanchor);\n }\n\n if(ya) {\n // shiftPosition will not execute code where ya was\n // undefined, so we use to calculate yUpdate too\n yUpdate = shiftPosition(ya, dy, 'y', gs, options);\n } else {\n var heightFraction = options._ysize / gs.h;\n var yBottom = options.y - (options._yshift + options.yshift) / gs.h - heightFraction / 2;\n\n yUpdate = dragElement.align(yBottom - dy / gs.h,\n heightFraction, 0, 1, options.yanchor);\n }\n modifyItem('x', xUpdate);\n modifyItem('y', yUpdate);\n if(!xa || !ya) {\n csr = dragElement.getCursor(\n xa ? 0.5 : xUpdate,\n ya ? 0.5 : yUpdate,\n options.xanchor, options.yanchor\n );\n }\n } else return;\n\n annTextGroup.attr({\n transform: strTranslate(dx, dy) + baseTextTransform\n });\n\n setCursor(annTextGroupInner, csr);\n },\n clickFn: function(_, initialEvent) {\n if(options.captureevents) {\n gd.emit('plotly_clickannotation', makeEventData(initialEvent));\n }\n },\n doneFn: function() {\n setCursor(annTextGroupInner);\n Registry.call('_guiRelayout', gd, getUpdateObj());\n var notesBox = document.querySelector('.js-notes-box-panel');\n if(notesBox) notesBox.redraw(notesBox.selectedObj);\n }\n });\n }\n }\n\n if(edits.annotationText) {\n annText.call(svgTextUtils.makeEditable, {delegate: annTextGroupInner, gd: gd})\n .call(textLayout)\n .on('edit', function(_text) {\n options.text = _text;\n\n this.call(textLayout);\n\n modifyItem('text', _text);\n\n if(xa && xa.autorange) {\n modifyBase(xa._name + '.autorange', true);\n }\n if(ya && ya.autorange) {\n modifyBase(ya._name + '.autorange', true);\n }\n\n Registry.call('_guiRelayout', gd, getUpdateObj());\n });\n } else annText.call(textLayout);\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Color = require('../color');\nvar isUnifiedHover = require('./helpers').isUnifiedHover;\n\nmodule.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts) {\n opts = opts || {};\n\n var hasLegend = contOut.legend;\n\n function inheritFontAttr(attr) {\n if(!opts.font[attr]) {\n opts.font[attr] = hasLegend ? contOut.legend.font[attr] : contOut.font[attr];\n }\n }\n\n // In unified hover, inherit from layout.legend if available or layout\n if(contOut && isUnifiedHover(contOut.hovermode)) {\n if(!opts.font) opts.font = {};\n inheritFontAttr('size');\n inheritFontAttr('family');\n inheritFontAttr('color');\n\n if(hasLegend) {\n if(!opts.bgcolor) opts.bgcolor = Color.combine(contOut.legend.bgcolor, contOut.paper_bgcolor);\n if(!opts.bordercolor) opts.bordercolor = contOut.legend.bordercolor;\n } else {\n if(!opts.bgcolor) opts.bgcolor = contOut.paper_bgcolor;\n }\n }\n\n coerce('hoverlabel.bgcolor', opts.bgcolor);\n coerce('hoverlabel.bordercolor', opts.bordercolor);\n coerce('hoverlabel.namelength', opts.namelength);\n Lib.coerceFont(coerce, 'hoverlabel.font', opts.font);\n coerce('hoverlabel.align', opts.align);\n};\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\nvar toLogRange = require('../../lib/to_log_range');\n\n/*\n * convertCoords: when converting an axis between log and linear\n * you need to alter any images on that axis to keep them\n * pointing at the same data point.\n * In v3.0 this will become obsolete (or perhaps size will still need conversion?)\n * we convert size by declaring that the maximum extent *in data units* should be\n * the same, assuming the image is anchored by its center (could remove that restriction\n * if we think it's important) even though the actual left and right values will not be\n * quite the same since the scale becomes nonlinear (and central anchor means the pixel\n * center of the image, not the data units center)\n *\n * gd: the plot div\n * ax: the axis being changed\n * newType: the type it's getting\n * doExtra: function(attr, val) from inside relayout that sets the attribute.\n * Use this to make the changes as it's aware if any other changes in the\n * same relayout call should override this conversion.\n */\nmodule.exports = function convertCoords(gd, ax, newType, doExtra) {\n ax = ax || {};\n\n var toLog = (newType === 'log') && (ax.type === 'linear');\n var fromLog = (newType === 'linear') && (ax.type === 'log');\n\n if(!(toLog || fromLog)) return;\n\n var images = gd._fullLayout.images;\n var axLetter = ax._id.charAt(0);\n var image;\n var attrPrefix;\n\n for(var i = 0; i < images.length; i++) {\n image = images[i];\n attrPrefix = 'images[' + i + '].';\n\n if(image[axLetter + 'ref'] === ax._id) {\n var currentPos = image[axLetter];\n var currentSize = image['size' + axLetter];\n var newPos = null;\n var newSize = null;\n\n if(toLog) {\n newPos = toLogRange(currentPos, ax.range);\n\n // this is the inverse of the conversion we do in fromLog below\n // so that the conversion is reversible (notice the fromLog conversion\n // is like sinh, and this one looks like arcsinh)\n var dx = currentSize / Math.pow(10, newPos) / 2;\n newSize = 2 * Math.log(dx + Math.sqrt(1 + dx * dx)) / Math.LN10;\n } else {\n newPos = Math.pow(10, currentPos);\n newSize = newPos * (Math.pow(10, currentSize / 2) - Math.pow(10, -currentSize / 2));\n }\n\n // if conversion failed, delete the value so it can get a default later on\n if(!isNumeric(newPos)) {\n newPos = null;\n newSize = null;\n } else if(!isNumeric(newSize)) newSize = null;\n\n doExtra(attrPrefix + axLetter, newPos);\n doExtra(attrPrefix + 'size' + axLetter, newSize);\n }\n }\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar overrideAll = require('../../plot_api/edit_types').overrideAll;\n\nvar attributes = require('./attributes');\n\nvar xyAttrs = {\n error_x: Lib.extendFlat({}, attributes),\n error_y: Lib.extendFlat({}, attributes)\n};\ndelete xyAttrs.error_x.copy_zstyle;\ndelete xyAttrs.error_y.copy_zstyle;\ndelete xyAttrs.error_y.copy_ystyle;\n\nvar xyzAttrs = {\n error_x: Lib.extendFlat({}, attributes),\n error_y: Lib.extendFlat({}, attributes),\n error_z: Lib.extendFlat({}, attributes)\n};\ndelete xyzAttrs.error_x.copy_ystyle;\ndelete xyzAttrs.error_y.copy_ystyle;\ndelete xyzAttrs.error_z.copy_ystyle;\ndelete xyzAttrs.error_z.copy_zstyle;\n\nmodule.exports = {\n moduleType: 'component',\n name: 'errorbars',\n\n schema: {\n traces: {\n scatter: xyAttrs,\n bar: xyAttrs,\n histogram: xyAttrs,\n scatter3d: overrideAll(xyzAttrs, 'calc', 'nested'),\n scattergl: overrideAll(xyAttrs, 'calc', 'nested')\n }\n },\n\n supplyDefaults: require('./defaults'),\n\n calc: require('./calc'),\n makeComputeError: require('./compute_error'),\n\n plot: require('./plot'),\n style: require('./style'),\n hoverInfo: hoverInfo\n};\n\nfunction hoverInfo(calcPoint, trace, hoverPoint) {\n if((trace.error_y || {}).visible) {\n hoverPoint.yerr = calcPoint.yh - calcPoint.y;\n if(!trace.error_y.symmetric) hoverPoint.yerrneg = calcPoint.y - calcPoint.ys;\n }\n if((trace.error_x || {}).visible) {\n hoverPoint.xerr = calcPoint.xh - calcPoint.x;\n if(!trace.error_x.symmetric) hoverPoint.xerrneg = calcPoint.x - calcPoint.xs;\n }\n}\n","'use strict';\n\nvar cartesianConstants = require('../../plots/cartesian/constants');\nvar templatedArray = require('../../plot_api/plot_template').templatedArray;\nvar axisPlaceableObjs = require('../../constants/axis_placeable_objects');\n\n\nmodule.exports = templatedArray('image', {\n visible: {\n valType: 'boolean',\n dflt: true,\n editType: 'arraydraw',\n description: [\n 'Determines whether or not this image is visible.'\n ].join(' ')\n },\n\n source: {\n valType: 'string',\n editType: 'arraydraw',\n description: [\n 'Specifies the URL of the image to be used.',\n 'The URL must be accessible from the domain where the',\n 'plot code is run, and can be either relative or absolute.'\n\n ].join(' ')\n },\n\n layer: {\n valType: 'enumerated',\n values: ['below', 'above'],\n dflt: 'above',\n editType: 'arraydraw',\n description: [\n 'Specifies whether images are drawn below or above traces.',\n 'When `xref` and `yref` are both set to `paper`,',\n 'image is drawn below the entire plot area.'\n ].join(' ')\n },\n\n sizex: {\n valType: 'number',\n dflt: 0,\n editType: 'arraydraw',\n description: [\n 'Sets the image container size horizontally.',\n 'The image will be sized based on the `position` value.',\n 'When `xref` is set to `paper`, units are sized relative',\n 'to the plot width.',\n 'When `xref` ends with ` domain`, units are sized relative',\n 'to the axis width.',\n ].join(' ')\n },\n\n sizey: {\n valType: 'number',\n dflt: 0,\n editType: 'arraydraw',\n description: [\n 'Sets the image container size vertically.',\n 'The image will be sized based on the `position` value.',\n 'When `yref` is set to `paper`, units are sized relative',\n 'to the plot height.',\n 'When `yref` ends with ` domain`, units are sized relative',\n 'to the axis height.'\n ].join(' ')\n },\n\n sizing: {\n valType: 'enumerated',\n values: ['fill', 'contain', 'stretch'],\n dflt: 'contain',\n editType: 'arraydraw',\n description: [\n 'Specifies which dimension of the image to constrain.'\n ].join(' ')\n },\n\n opacity: {\n valType: 'number',\n min: 0,\n max: 1,\n dflt: 1,\n editType: 'arraydraw',\n description: 'Sets the opacity of the image.'\n },\n\n x: {\n valType: 'any',\n dflt: 0,\n editType: 'arraydraw',\n description: [\n 'Sets the image\\'s x position.',\n 'When `xref` is set to `paper`, units are sized relative',\n 'to the plot height.',\n 'See `xref` for more info'\n ].join(' ')\n },\n\n y: {\n valType: 'any',\n dflt: 0,\n editType: 'arraydraw',\n description: [\n 'Sets the image\\'s y position.',\n 'When `yref` is set to `paper`, units are sized relative',\n 'to the plot height.',\n 'See `yref` for more info'\n ].join(' ')\n },\n\n xanchor: {\n valType: 'enumerated',\n values: ['left', 'center', 'right'],\n dflt: 'left',\n editType: 'arraydraw',\n description: 'Sets the anchor for the x position'\n },\n\n yanchor: {\n valType: 'enumerated',\n values: ['top', 'middle', 'bottom'],\n dflt: 'top',\n editType: 'arraydraw',\n description: 'Sets the anchor for the y position.'\n },\n\n xref: {\n valType: 'enumerated',\n values: [\n 'paper',\n cartesianConstants.idRegex.x.toString()\n ],\n dflt: 'paper',\n editType: 'arraydraw',\n description: [\n 'Sets the images\\'s x coordinate axis.',\n axisPlaceableObjs.axisRefDescription('x', 'left', 'right'),\n ].join(' ')\n },\n\n yref: {\n valType: 'enumerated',\n values: [\n 'paper',\n cartesianConstants.idRegex.y.toString()\n ],\n dflt: 'paper',\n editType: 'arraydraw',\n description: [\n 'Sets the images\\'s y coordinate axis.',\n axisPlaceableObjs.axisRefDescription('y', 'bottom', 'top'),\n ].join(' ')\n },\n editType: 'arraydraw'\n});\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\n\nvar Lib = require('../../lib');\nvar hasColorbar = require('../colorbar/has_colorbar');\nvar colorbarDefaults = require('../colorbar/defaults');\n\nvar isValidScale = require('./scales').isValid;\nvar traceIs = require('../../registry').traceIs;\n\nfunction npMaybe(parentCont, prefix) {\n var containerStr = prefix.slice(0, prefix.length - 1);\n return prefix ?\n Lib.nestedProperty(parentCont, containerStr).get() || {} :\n parentCont;\n}\n\n/**\n * Colorscale / colorbar default handler\n *\n * @param {object} parentContIn : user (input) parent container (e.g. trace or layout coloraxis object)\n * @param {object} parentContOut : full parent container\n * @param {object} layout : (full) layout object\n * @param {fn} coerce : Lib.coerce wrapper\n * @param {object} opts :\n * - prefix {string} : attr string prefix to colorscale container from parent root\n * - cLetter {string} : 'c or 'z' color letter\n */\nmodule.exports = function colorScaleDefaults(parentContIn, parentContOut, layout, coerce, opts) {\n var prefix = opts.prefix;\n var cLetter = opts.cLetter;\n var inTrace = '_module' in parentContOut;\n var containerIn = npMaybe(parentContIn, prefix);\n var containerOut = npMaybe(parentContOut, prefix);\n var template = npMaybe(parentContOut._template || {}, prefix) || {};\n\n // colorScaleDefaults wrapper called if-ever we need to reset the colorscale\n // attributes for containers that were linked to invalid color axes\n var thisFn = function() {\n delete parentContIn.coloraxis;\n delete parentContOut.coloraxis;\n return colorScaleDefaults(parentContIn, parentContOut, layout, coerce, opts);\n };\n\n if(inTrace) {\n var colorAxes = layout._colorAxes || {};\n var colorAx = coerce(prefix + 'coloraxis');\n\n if(colorAx) {\n var colorbarVisuals = (\n traceIs(parentContOut, 'contour') &&\n Lib.nestedProperty(parentContOut, 'contours.coloring').get()\n ) || 'heatmap';\n\n var stash = colorAxes[colorAx];\n\n if(stash) {\n stash[2].push(thisFn);\n\n if(stash[0] !== colorbarVisuals) {\n stash[0] = false;\n Lib.warn([\n 'Ignoring coloraxis:', colorAx, 'setting',\n 'as it is linked to incompatible colorscales.'\n ].join(' '));\n }\n } else {\n // stash:\n // - colorbar visual 'type'\n // - colorbar options to help in Colorbar.draw\n // - list of colorScaleDefaults wrapper functions\n colorAxes[colorAx] = [colorbarVisuals, parentContOut, [thisFn]];\n }\n return;\n }\n }\n\n var minIn = containerIn[cLetter + 'min'];\n var maxIn = containerIn[cLetter + 'max'];\n var validMinMax = isNumeric(minIn) && isNumeric(maxIn) && (minIn < maxIn);\n var auto = coerce(prefix + cLetter + 'auto', !validMinMax);\n\n if(auto) {\n coerce(prefix + cLetter + 'mid');\n } else {\n coerce(prefix + cLetter + 'min');\n coerce(prefix + cLetter + 'max');\n }\n\n // handles both the trace case (autocolorscale is false by default) and\n // the marker and marker.line case (autocolorscale is true by default)\n var sclIn = containerIn.colorscale;\n var sclTemplate = template.colorscale;\n var autoColorscaleDflt;\n if(sclIn !== undefined) autoColorscaleDflt = !isValidScale(sclIn);\n if(sclTemplate !== undefined) autoColorscaleDflt = !isValidScale(sclTemplate);\n coerce(prefix + 'autocolorscale', autoColorscaleDflt);\n\n coerce(prefix + 'colorscale');\n coerce(prefix + 'reversescale');\n\n if(prefix !== 'marker.line.') {\n // handles both the trace case where the dflt is listed in attributes and\n // the marker case where the dflt is determined by hasColorbar\n var showScaleDflt;\n if(prefix && inTrace) showScaleDflt = hasColorbar(containerIn);\n\n var showScale = coerce(prefix + 'showscale', showScaleDflt);\n if(showScale) {\n if(prefix && template) containerOut._template = template;\n colorbarDefaults(containerIn, containerOut, layout);\n }\n }\n};\n","'use strict';\n\nvar drawRaw = require('../annotations/draw').drawRaw;\nvar project = require('../../plots/gl3d/project');\nvar axLetters = ['x', 'y', 'z'];\n\nmodule.exports = function draw(scene) {\n var fullSceneLayout = scene.fullSceneLayout;\n var dataScale = scene.dataScale;\n var anns = fullSceneLayout.annotations;\n\n for(var i = 0; i < anns.length; i++) {\n var ann = anns[i];\n var annotationIsOffscreen = false;\n\n for(var j = 0; j < 3; j++) {\n var axLetter = axLetters[j];\n var pos = ann[axLetter];\n var ax = fullSceneLayout[axLetter + 'axis'];\n var posFraction = ax.r2fraction(pos);\n\n if(posFraction < 0 || posFraction > 1) {\n annotationIsOffscreen = true;\n break;\n }\n }\n\n if(annotationIsOffscreen) {\n scene.fullLayout._infolayer\n .select('.annotation-' + scene.id + '[data-index=\"' + i + '\"]')\n .remove();\n } else {\n ann._pdata = project(scene.glplot.cameraParams, [\n fullSceneLayout.xaxis.r2l(ann.x) * dataScale[0],\n fullSceneLayout.yaxis.r2l(ann.y) * dataScale[1],\n fullSceneLayout.zaxis.r2l(ann.z) * dataScale[2]\n ]);\n\n drawRaw(scene.graphDiv, ann, i, scene.id, ann._xa, ann._ya);\n }\n }\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar isNumeric = require('fast-isnumeric');\n\nvar Lib = require('../../lib');\nvar Icons = require('../../fonts/ploticon');\nvar version = require('../../version').version;\n\nvar Parser = new DOMParser();\n\n/**\n * UI controller for interactive plots\n * @Class\n * @Param {object} opts\n * @Param {object} opts.buttons nested arrays of grouped buttons config objects\n * @Param {object} opts.container container div to append modeBar\n * @Param {object} opts.graphInfo primary plot object containing data and layout\n */\nfunction ModeBar(opts) {\n this.container = opts.container;\n this.element = document.createElement('div');\n\n this.update(opts.graphInfo, opts.buttons);\n\n this.container.appendChild(this.element);\n}\n\nvar proto = ModeBar.prototype;\n\n/**\n * Update modeBar (buttons and logo)\n *\n * @param {object} graphInfo primary plot object containing data and layout\n * @param {array of arrays} buttons nested arrays of grouped buttons to initialize\n *\n */\nproto.update = function(graphInfo, buttons) {\n this.graphInfo = graphInfo;\n\n var context = this.graphInfo._context;\n var fullLayout = this.graphInfo._fullLayout;\n var modeBarId = 'modebar-' + fullLayout._uid;\n\n this.element.setAttribute('id', modeBarId);\n this._uid = modeBarId;\n\n this.element.className = 'modebar';\n if(context.displayModeBar === 'hover') this.element.className += ' modebar--hover ease-bg';\n\n if(fullLayout.modebar.orientation === 'v') {\n this.element.className += ' vertical';\n buttons = buttons.reverse();\n }\n\n var style = fullLayout.modebar;\n var bgSelector = context.displayModeBar === 'hover' ? '.js-plotly-plot .plotly:hover ' : '';\n\n Lib.deleteRelatedStyleRule(modeBarId);\n Lib.addRelatedStyleRule(modeBarId, bgSelector + '#' + modeBarId + ' .modebar-group', 'background-color: ' + style.bgcolor);\n Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn .icon path', 'fill: ' + style.color);\n Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn:hover .icon path', 'fill: ' + style.activecolor);\n Lib.addRelatedStyleRule(modeBarId, '#' + modeBarId + ' .modebar-btn.active .icon path', 'fill: ' + style.activecolor);\n\n // if buttons or logo have changed, redraw modebar interior\n var needsNewButtons = !this.hasButtons(buttons);\n var needsNewLogo = (this.hasLogo !== context.displaylogo);\n var needsNewLocale = (this.locale !== context.locale);\n\n this.locale = context.locale;\n\n if(needsNewButtons || needsNewLogo || needsNewLocale) {\n this.removeAllButtons();\n\n this.updateButtons(buttons);\n\n if(context.watermark || context.displaylogo) {\n var logoGroup = this.getLogo();\n if(context.watermark) {\n logoGroup.className = logoGroup.className + ' watermark';\n }\n\n if(fullLayout.modebar.orientation === 'v') {\n this.element.insertBefore(logoGroup, this.element.childNodes[0]);\n } else {\n this.element.appendChild(logoGroup);\n }\n\n this.hasLogo = true;\n }\n }\n\n this.updateActiveButton();\n};\n\nproto.updateButtons = function(buttons) {\n var _this = this;\n\n this.buttons = buttons;\n this.buttonElements = [];\n this.buttonsNames = [];\n\n this.buttons.forEach(function(buttonGroup) {\n var group = _this.createGroup();\n\n buttonGroup.forEach(function(buttonConfig) {\n var buttonName = buttonConfig.name;\n if(!buttonName) {\n throw new Error('must provide button \\'name\\' in button config');\n }\n if(_this.buttonsNames.indexOf(buttonName) !== -1) {\n throw new Error('button name \\'' + buttonName + '\\' is taken');\n }\n _this.buttonsNames.push(buttonName);\n\n var button = _this.createButton(buttonConfig);\n _this.buttonElements.push(button);\n group.appendChild(button);\n });\n\n _this.element.appendChild(group);\n });\n};\n\n/**\n * Empty div for containing a group of buttons\n * @Return {HTMLelement}\n */\nproto.createGroup = function() {\n var group = document.createElement('div');\n group.className = 'modebar-group';\n return group;\n};\n\n/**\n * Create a new button div and set constant and configurable attributes\n * @Param {object} config (see ./buttons.js for more info)\n * @Return {HTMLelement}\n */\nproto.createButton = function(config) {\n var _this = this;\n var button = document.createElement('a');\n\n button.setAttribute('rel', 'tooltip');\n button.className = 'modebar-btn';\n\n var title = config.title;\n if(title === undefined) title = config.name;\n // for localization: allow title to be a callable that takes gd as arg\n else if(typeof title === 'function') title = title(this.graphInfo);\n\n if(title || title === 0) button.setAttribute('data-title', title);\n\n if(config.attr !== undefined) button.setAttribute('data-attr', config.attr);\n\n var val = config.val;\n if(val !== undefined) {\n if(typeof val === 'function') val = val(this.graphInfo);\n button.setAttribute('data-val', val);\n }\n\n var click = config.click;\n if(typeof click !== 'function') {\n throw new Error('must provide button \\'click\\' function in button config');\n } else {\n button.addEventListener('click', function(ev) {\n config.click(_this.graphInfo, ev);\n\n // only needed for 'hoverClosestGeo' which does not call relayout\n _this.updateActiveButton(ev.currentTarget);\n });\n }\n\n button.setAttribute('data-toggle', config.toggle || false);\n if(config.toggle) d3.select(button).classed('active', true);\n\n var icon = config.icon;\n if(typeof icon === 'function') {\n button.appendChild(icon());\n } else {\n button.appendChild(this.createIcon(icon || Icons.question));\n }\n button.setAttribute('data-gravity', config.gravity || 'n');\n\n return button;\n};\n\n/**\n * Add an icon to a button\n * @Param {object} thisIcon\n * @Param {number} thisIcon.width\n * @Param {string} thisIcon.path\n * @Param {string} thisIcon.color\n * @Return {HTMLelement}\n */\nproto.createIcon = function(thisIcon) {\n var iconHeight = isNumeric(thisIcon.height) ?\n Number(thisIcon.height) :\n thisIcon.ascent - thisIcon.descent;\n var svgNS = 'http://www.w3.org/2000/svg';\n var icon;\n\n if(thisIcon.path) {\n icon = document.createElementNS(svgNS, 'svg');\n icon.setAttribute('viewBox', [0, 0, thisIcon.width, iconHeight].join(' '));\n icon.setAttribute('class', 'icon');\n\n var path = document.createElementNS(svgNS, 'path');\n path.setAttribute('d', thisIcon.path);\n\n if(thisIcon.transform) {\n path.setAttribute('transform', thisIcon.transform);\n } else if(thisIcon.ascent !== undefined) {\n // Legacy icon transform calculation\n path.setAttribute('transform', 'matrix(1 0 0 -1 0 ' + thisIcon.ascent + ')');\n }\n\n icon.appendChild(path);\n }\n\n if(thisIcon.svg) {\n var svgDoc = Parser.parseFromString(thisIcon.svg, 'application/xml');\n icon = svgDoc.childNodes[0];\n }\n\n icon.setAttribute('height', '1em');\n icon.setAttribute('width', '1em');\n\n return icon;\n};\n\n/**\n * Updates active button with attribute specified in layout\n * @Param {object} graphInfo plot object containing data and layout\n * @Return {HTMLelement}\n */\nproto.updateActiveButton = function(buttonClicked) {\n var fullLayout = this.graphInfo._fullLayout;\n var dataAttrClicked = (buttonClicked !== undefined) ?\n buttonClicked.getAttribute('data-attr') :\n null;\n\n this.buttonElements.forEach(function(button) {\n var thisval = button.getAttribute('data-val') || true;\n var dataAttr = button.getAttribute('data-attr');\n var isToggleButton = (button.getAttribute('data-toggle') === 'true');\n var button3 = d3.select(button);\n\n // Use 'data-toggle' and 'buttonClicked' to toggle buttons\n // that have no one-to-one equivalent in fullLayout\n if(isToggleButton) {\n if(dataAttr === dataAttrClicked) {\n button3.classed('active', !button3.classed('active'));\n }\n } else {\n var val = (dataAttr === null) ?\n dataAttr :\n Lib.nestedProperty(fullLayout, dataAttr).get();\n\n button3.classed('active', val === thisval);\n }\n });\n};\n\n/**\n * Check if modeBar is configured as button configuration argument\n *\n * @Param {object} buttons 2d array of grouped button config objects\n * @Return {boolean}\n */\nproto.hasButtons = function(buttons) {\n var currentButtons = this.buttons;\n\n if(!currentButtons) return false;\n\n if(buttons.length !== currentButtons.length) return false;\n\n for(var i = 0; i < buttons.length; ++i) {\n if(buttons[i].length !== currentButtons[i].length) return false;\n for(var j = 0; j < buttons[i].length; j++) {\n if(buttons[i][j].name !== currentButtons[i][j].name) return false;\n }\n }\n\n return true;\n};\n\nfunction jsVersion(str) {\n return str + ' (v' + version + ')';\n}\n\n/**\n * @return {HTMLDivElement} The logo image wrapped in a group\n */\nproto.getLogo = function() {\n var group = this.createGroup();\n var a = document.createElement('a');\n\n a.href = 'https://plotly.com/';\n a.target = '_blank';\n a.setAttribute('data-title', jsVersion(Lib._(this.graphInfo, 'Produced with Plotly.js')));\n a.className = 'modebar-btn plotlyjsicon modebar-btn--logo';\n\n a.appendChild(this.createIcon(Icons.newplotlylogo));\n\n group.appendChild(a);\n return group;\n};\n\nproto.removeAllButtons = function() {\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n\n this.hasLogo = false;\n};\n\nproto.destroy = function() {\n Lib.removeElement(this.container.querySelector('.modebar'));\n Lib.deleteRelatedStyleRule(this._uid);\n};\n\nfunction createModeBar(gd, buttons) {\n var fullLayout = gd._fullLayout;\n\n var modeBar = new ModeBar({\n graphInfo: gd,\n container: fullLayout._modebardiv.node(),\n buttons: buttons\n });\n\n if(fullLayout._privateplot) {\n d3.select(modeBar.element).append('span')\n .classed('badge-private float--left', true)\n .text('PRIVATE');\n }\n\n return modeBar;\n}\n\nmodule.exports = createModeBar;\n","'use strict';\n\n\n// for automatic alignment on dragging, <1/3 means left align,\n// >2/3 means right, and between is center. Pick the right fraction\n// based on where you are, and return the fraction corresponding to\n// that position on the object\nmodule.exports = function align(v, dv, v0, v1, anchor) {\n var vmin = (v - v0) / (v1 - v0);\n var vmax = vmin + dv / (v1 - v0);\n var vc = (vmin + vmax) / 2;\n\n // explicitly specified anchor\n if(anchor === 'left' || anchor === 'bottom') return vmin;\n if(anchor === 'center' || anchor === 'middle') return vc;\n if(anchor === 'right' || anchor === 'top') return vmax;\n\n // automatic based on position\n if(vmin < (2 / 3) - vc) return vmin;\n if(vmax > (4 / 3) - vc) return vmax;\n return vc;\n};\n","'use strict';\n\n\n// IMPORTANT - default colors should be in hex for compatibility\nexports.defaults = [\n '#1f77b4', // muted blue\n '#ff7f0e', // safety orange\n '#2ca02c', // cooked asparagus green\n '#d62728', // brick red\n '#9467bd', // muted purple\n '#8c564b', // chestnut brown\n '#e377c2', // raspberry yogurt pink\n '#7f7f7f', // middle gray\n '#bcbd22', // curry yellow-green\n '#17becf' // blue-teal\n];\n\nexports.defaultLine = '#444';\n\nexports.lightLine = '#eee';\n\nexports.background = '#fff';\n\nexports.borderLine = '#BEC8D9';\n\n// with axis.color and Color.interp we aren't using lightLine\n// itself anymore, instead interpolating between axis.color\n// and the background color using tinycolor.mix. lightFraction\n// gives back exactly lightLine if the other colors are defaults.\nexports.lightFraction = 100 * (0xe - 0x4) / (0xf - 0x4);\n","'use strict';\n\nmodule.exports = require('../src/traces/box');\n","'use strict';\n\nmodule.exports = require('../src/traces/pie');\n","'use strict';\n\nmodule.exports = {\n cn: {\n colorbar: 'colorbar',\n cbbg: 'cbbg',\n cbfill: 'cbfill',\n cbfills: 'cbfills',\n cbline: 'cbline',\n cblines: 'cblines',\n cbaxis: 'cbaxis',\n cbtitleunshift: 'cbtitleunshift',\n cbtitle: 'cbtitle',\n cboutline: 'cboutline',\n crisp: 'crisp',\n jsPlaceholder: 'js-placeholder'\n }\n};\n","'use strict';\n\nvar fontAttrs = require('../../plots/font_attributes');\nvar hoverLabelAttrs = require('./layout_attributes').hoverlabel;\nvar extendFlat = require('../../lib/extend').extendFlat;\n\nmodule.exports = {\n hoverlabel: {\n bgcolor: extendFlat({}, hoverLabelAttrs.bgcolor, {\n arrayOk: true,\n description: 'Sets the background color of the hover labels for this trace'\n }),\n bordercolor: extendFlat({}, hoverLabelAttrs.bordercolor, {\n arrayOk: true,\n description: 'Sets the border color of the hover labels for this trace.'\n }),\n font: fontAttrs({\n arrayOk: true,\n editType: 'none',\n description: 'Sets the font used in hover labels.'\n }),\n align: extendFlat({}, hoverLabelAttrs.align, {arrayOk: true}),\n namelength: extendFlat({}, hoverLabelAttrs.namelength, {arrayOk: true}),\n editType: 'none'\n }\n};\n","'use strict';\n\nvar mouseOffset = require('mouse-event-offset');\nvar hasHover = require('has-hover');\nvar supportsPassive = require('has-passive-events');\n\nvar removeElement = require('../../lib').removeElement;\nvar constants = require('../../plots/cartesian/constants');\n\nvar dragElement = module.exports = {};\n\ndragElement.align = require('./align');\ndragElement.getCursor = require('./cursor');\n\nvar unhover = require('./unhover');\ndragElement.unhover = unhover.wrapped;\ndragElement.unhoverRaw = unhover.raw;\n\n/**\n * Abstracts click & drag interactions\n *\n * During the interaction, a \"coverSlip\" element - a transparent\n * div covering the whole page - is created, which has two key effects:\n * - Lets you drag beyond the boundaries of the plot itself without\n * dropping (but if you drag all the way out of the browser window the\n * interaction will end)\n * - Freezes the cursor: whatever mouse cursor the drag element had when the\n * interaction started gets copied to the coverSlip for use until mouseup\n *\n * If the user executes a drag bigger than MINDRAG, callbacks will fire as:\n * prepFn, moveFn (1 or more times), doneFn\n * If the user does not drag enough, prepFn and clickFn will fire.\n *\n * Note: If you cancel contextmenu, clickFn will fire even with a right click\n * (unlike native events) so you'll get a `plotly_click` event. Cancel context eg:\n * gd.addEventListener('contextmenu', function(e) { e.preventDefault(); });\n * TODO: we should probably turn this into a `config` parameter, so we can fix it\n * such that if you *don't* cancel contextmenu, we can prevent partial drags, which\n * put you in a weird state.\n *\n * If the user clicks multiple times quickly, clickFn will fire each time\n * but numClicks will increase to help you recognize doubleclicks.\n *\n * @param {object} options with keys:\n * element (required) the DOM element to drag\n * prepFn (optional) function(event, startX, startY)\n * executed on mousedown\n * startX and startY are the clientX and clientY pixel position\n * of the mousedown event\n * moveFn (optional) function(dx, dy)\n * executed on move, ONLY after we've exceeded MINDRAG\n * (we keep executing moveFn if you move back to where you started)\n * dx and dy are the net pixel offset of the drag,\n * dragged is true/false, has the mouse moved enough to\n * constitute a drag\n * doneFn (optional) function(e)\n * executed on mouseup, ONLY if we exceeded MINDRAG (so you can be\n * sure that moveFn has been called at least once)\n * numClicks is how many clicks we've registered within\n * a doubleclick time\n * e is the original mouseup event\n * clickFn (optional) function(numClicks, e)\n * executed on mouseup if we have NOT exceeded MINDRAG (ie moveFn\n * has not been called at all)\n * numClicks is how many clicks we've registered within\n * a doubleclick time\n * e is the original mousedown event\n * clampFn (optional, function(dx, dy) return [dx2, dy2])\n * Provide custom clamping function for small displacements.\n * By default, clamping is done using `minDrag` to x and y displacements\n * independently.\n */\ndragElement.init = function init(options) {\n var gd = options.gd;\n var numClicks = 1;\n var doubleClickDelay = gd._context.doubleClickDelay;\n var element = options.element;\n\n var startX,\n startY,\n newMouseDownTime,\n cursor,\n dragCover,\n initialEvent,\n initialTarget,\n rightClick;\n\n if(!gd._mouseDownTime) gd._mouseDownTime = 0;\n\n element.style.pointerEvents = 'all';\n\n element.onmousedown = onStart;\n\n if(!supportsPassive) {\n element.ontouchstart = onStart;\n } else {\n if(element._ontouchstart) {\n element.removeEventListener('touchstart', element._ontouchstart);\n }\n element._ontouchstart = onStart;\n element.addEventListener('touchstart', onStart, {passive: false});\n }\n\n function _clampFn(dx, dy, minDrag) {\n if(Math.abs(dx) < minDrag) dx = 0;\n if(Math.abs(dy) < minDrag) dy = 0;\n return [dx, dy];\n }\n\n var clampFn = options.clampFn || _clampFn;\n\n function onStart(e) {\n // make dragging and dragged into properties of gd\n // so that others can look at and modify them\n gd._dragged = false;\n gd._dragging = true;\n var offset = pointerOffset(e);\n startX = offset[0];\n startY = offset[1];\n initialTarget = e.target;\n initialEvent = e;\n rightClick = e.buttons === 2 || e.ctrlKey;\n\n // fix Fx.hover for touch events\n if(typeof e.clientX === 'undefined' && typeof e.clientY === 'undefined') {\n e.clientX = startX;\n e.clientY = startY;\n }\n\n newMouseDownTime = (new Date()).getTime();\n if(newMouseDownTime - gd._mouseDownTime < doubleClickDelay) {\n // in a click train\n numClicks += 1;\n } else {\n // new click train\n numClicks = 1;\n gd._mouseDownTime = newMouseDownTime;\n }\n\n if(options.prepFn) options.prepFn(e, startX, startY);\n\n if(hasHover && !rightClick) {\n dragCover = coverSlip();\n dragCover.style.cursor = window.getComputedStyle(element).cursor;\n } else if(!hasHover) {\n // document acts as a dragcover for mobile, bc we can't create dragcover dynamically\n dragCover = document;\n cursor = window.getComputedStyle(document.documentElement).cursor;\n document.documentElement.style.cursor = window.getComputedStyle(element).cursor;\n }\n\n document.addEventListener('mouseup', onDone);\n document.addEventListener('touchend', onDone);\n\n if(options.dragmode !== false) {\n e.preventDefault();\n document.addEventListener('mousemove', onMove);\n document.addEventListener('touchmove', onMove, {passive: false});\n }\n\n return;\n }\n\n function onMove(e) {\n e.preventDefault();\n\n var offset = pointerOffset(e);\n var minDrag = options.minDrag || constants.MINDRAG;\n var dxdy = clampFn(offset[0] - startX, offset[1] - startY, minDrag);\n var dx = dxdy[0];\n var dy = dxdy[1];\n\n if(dx || dy) {\n gd._dragged = true;\n dragElement.unhover(gd, e);\n }\n\n if(gd._dragged && options.moveFn && !rightClick) {\n gd._dragdata = {\n element: element,\n dx: dx,\n dy: dy\n };\n options.moveFn(dx, dy);\n }\n\n return;\n }\n\n function onDone(e) {\n delete gd._dragdata;\n\n if(options.dragmode !== false) {\n e.preventDefault();\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('touchmove', onMove);\n }\n\n document.removeEventListener('mouseup', onDone);\n document.removeEventListener('touchend', onDone);\n\n if(hasHover) {\n removeElement(dragCover);\n } else if(cursor) {\n dragCover.documentElement.style.cursor = cursor;\n cursor = null;\n }\n\n if(!gd._dragging) {\n gd._dragged = false;\n return;\n }\n gd._dragging = false;\n\n // don't count as a dblClick unless the mouseUp is also within\n // the dblclick delay\n if((new Date()).getTime() - gd._mouseDownTime > doubleClickDelay) {\n numClicks = Math.max(numClicks - 1, 1);\n }\n\n if(gd._dragged) {\n if(options.doneFn) options.doneFn();\n } else {\n if(options.clickFn) options.clickFn(numClicks, initialEvent);\n\n // If we haven't dragged, this should be a click. But because of the\n // coverSlip changing the element, the natural system might not generate one,\n // so we need to make our own. But right clicks don't normally generate\n // click events, only contextmenu events, which happen on mousedown.\n if(!rightClick) {\n var e2;\n\n try {\n e2 = new MouseEvent('click', e);\n } catch(err) {\n var offset = pointerOffset(e);\n e2 = document.createEvent('MouseEvents');\n e2.initMouseEvent('click',\n e.bubbles, e.cancelable,\n e.view, e.detail,\n e.screenX, e.screenY,\n offset[0], offset[1],\n e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\n e.button, e.relatedTarget);\n }\n\n initialTarget.dispatchEvent(e2);\n }\n }\n\n gd._dragging = false;\n gd._dragged = false;\n return;\n }\n};\n\nfunction coverSlip() {\n var cover = document.createElement('div');\n\n cover.className = 'dragcover';\n var cStyle = cover.style;\n cStyle.position = 'fixed';\n cStyle.left = 0;\n cStyle.right = 0;\n cStyle.top = 0;\n cStyle.bottom = 0;\n cStyle.zIndex = 999999999;\n cStyle.background = 'none';\n\n document.body.appendChild(cover);\n\n return cover;\n}\n\ndragElement.coverSlip = coverSlip;\n\nfunction pointerOffset(e) {\n return mouseOffset(\n e.changedTouches ? e.changedTouches[0] : e,\n document.body\n );\n}\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\n\nvar Registry = require('../../registry');\nvar Axes = require('../../plots/cartesian/axes');\nvar Lib = require('../../lib');\n\nvar makeComputeError = require('./compute_error');\n\nmodule.exports = function calc(gd) {\n var calcdata = gd.calcdata;\n\n for(var i = 0; i < calcdata.length; i++) {\n var calcTrace = calcdata[i];\n var trace = calcTrace[0].trace;\n\n if(trace.visible === true && Registry.traceIs(trace, 'errorBarsOK')) {\n var xa = Axes.getFromId(gd, trace.xaxis);\n var ya = Axes.getFromId(gd, trace.yaxis);\n calcOneAxis(calcTrace, trace, xa, 'x');\n calcOneAxis(calcTrace, trace, ya, 'y');\n }\n }\n};\n\nfunction calcOneAxis(calcTrace, trace, axis, coord) {\n var opts = trace['error_' + coord] || {};\n var isVisible = (opts.visible && ['linear', 'log'].indexOf(axis.type) !== -1);\n var vals = [];\n\n if(!isVisible) return;\n\n var computeError = makeComputeError(opts);\n\n for(var i = 0; i < calcTrace.length; i++) {\n var calcPt = calcTrace[i];\n\n var iIn = calcPt.i;\n\n // for types that don't include `i` in each calcdata point\n if(iIn === undefined) iIn = i;\n\n // for stacked area inserted points\n // TODO: errorbars have been tested cursorily with stacked area,\n // but not thoroughly. It's not even really clear what you want to do:\n // Should it just be calculated based on that trace's size data?\n // Should you add errors from below in quadrature?\n // And what about normalization, where in principle the errors shrink\n // again when you get up to the top end?\n // One option would be to forbid errorbars with stacking until we\n // decide how to handle these questions.\n else if(iIn === null) continue;\n\n var calcCoord = calcPt[coord];\n\n if(!isNumeric(axis.c2l(calcCoord))) continue;\n\n var errors = computeError(calcCoord, iIn);\n if(isNumeric(errors[0]) && isNumeric(errors[1])) {\n var shoe = calcPt[coord + 's'] = calcCoord - errors[0];\n var hat = calcPt[coord + 'h'] = calcCoord + errors[1];\n vals.push(shoe, hat);\n }\n }\n\n var axId = axis._id;\n var baseExtremes = trace._extremes[axId];\n var extremes = Axes.findExtremes(\n axis,\n vals,\n Lib.extendFlat({tozero: baseExtremes.opts.tozero}, {padded: true})\n );\n baseExtremes.min = baseExtremes.min.concat(extremes.min);\n baseExtremes.max = baseExtremes.max.concat(extremes.max);\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Axes = require('../../plots/cartesian/axes');\n\nmodule.exports = function convert(scene) {\n var fullSceneLayout = scene.fullSceneLayout;\n var anns = fullSceneLayout.annotations;\n\n for(var i = 0; i < anns.length; i++) {\n mockAnnAxes(anns[i], scene);\n }\n\n scene.fullLayout._infolayer\n .selectAll('.annotation-' + scene.id)\n .remove();\n};\n\nfunction mockAnnAxes(ann, scene) {\n var fullSceneLayout = scene.fullSceneLayout;\n var domain = fullSceneLayout.domain;\n var size = scene.fullLayout._size;\n\n var base = {\n // this gets fill in on render\n pdata: null,\n\n // to get setConvert to not execute cleanly\n type: 'linear',\n\n // don't try to update them on `editable: true`\n autorange: false,\n\n // set infinite range so that annotation draw routine\n // does not try to remove 'outside-range' annotations,\n // this case is handled in the render loop\n range: [-Infinity, Infinity]\n };\n\n ann._xa = {};\n Lib.extendFlat(ann._xa, base);\n Axes.setConvert(ann._xa);\n ann._xa._offset = size.l + domain.x[0] * size.w;\n ann._xa.l2p = function() {\n return 0.5 * (1 + ann._pdata[0] / ann._pdata[3]) * size.w * (domain.x[1] - domain.x[0]);\n };\n\n ann._ya = {};\n Lib.extendFlat(ann._ya, base);\n Axes.setConvert(ann._ya);\n ann._ya._offset = size.t + (1 - domain.y[1]) * size.h;\n ann._ya.l2p = function() {\n return 0.5 * (1 - ann._pdata[1] / ann._pdata[3]) * size.h * (domain.y[1] - domain.y[0]);\n };\n}\n","'use strict';\n\nvar tinycolor = require('tinycolor2');\n\nvar scales = {\n Greys: [\n [0, 'rgb(0,0,0)'], [1, 'rgb(255,255,255)']\n ],\n\n YlGnBu: [\n [0, 'rgb(8,29,88)'], [0.125, 'rgb(37,52,148)'],\n [0.25, 'rgb(34,94,168)'], [0.375, 'rgb(29,145,192)'],\n [0.5, 'rgb(65,182,196)'], [0.625, 'rgb(127,205,187)'],\n [0.75, 'rgb(199,233,180)'], [0.875, 'rgb(237,248,217)'],\n [1, 'rgb(255,255,217)']\n ],\n\n Greens: [\n [0, 'rgb(0,68,27)'], [0.125, 'rgb(0,109,44)'],\n [0.25, 'rgb(35,139,69)'], [0.375, 'rgb(65,171,93)'],\n [0.5, 'rgb(116,196,118)'], [0.625, 'rgb(161,217,155)'],\n [0.75, 'rgb(199,233,192)'], [0.875, 'rgb(229,245,224)'],\n [1, 'rgb(247,252,245)']\n ],\n\n YlOrRd: [\n [0, 'rgb(128,0,38)'], [0.125, 'rgb(189,0,38)'],\n [0.25, 'rgb(227,26,28)'], [0.375, 'rgb(252,78,42)'],\n [0.5, 'rgb(253,141,60)'], [0.625, 'rgb(254,178,76)'],\n [0.75, 'rgb(254,217,118)'], [0.875, 'rgb(255,237,160)'],\n [1, 'rgb(255,255,204)']\n ],\n\n Bluered: [\n [0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']\n ],\n\n // modified RdBu based on\n // http://www.kennethmoreland.com/color-maps/\n RdBu: [\n [0, 'rgb(5,10,172)'], [0.35, 'rgb(106,137,247)'],\n [0.5, 'rgb(190,190,190)'], [0.6, 'rgb(220,170,132)'],\n [0.7, 'rgb(230,145,90)'], [1, 'rgb(178,10,28)']\n ],\n\n // Scale for non-negative numeric values\n Reds: [\n [0, 'rgb(220,220,220)'], [0.2, 'rgb(245,195,157)'],\n [0.4, 'rgb(245,160,105)'], [1, 'rgb(178,10,28)']\n ],\n\n // Scale for non-positive numeric values\n Blues: [\n [0, 'rgb(5,10,172)'], [0.35, 'rgb(40,60,190)'],\n [0.5, 'rgb(70,100,245)'], [0.6, 'rgb(90,120,245)'],\n [0.7, 'rgb(106,137,247)'], [1, 'rgb(220,220,220)']\n ],\n\n Picnic: [\n [0, 'rgb(0,0,255)'], [0.1, 'rgb(51,153,255)'],\n [0.2, 'rgb(102,204,255)'], [0.3, 'rgb(153,204,255)'],\n [0.4, 'rgb(204,204,255)'], [0.5, 'rgb(255,255,255)'],\n [0.6, 'rgb(255,204,255)'], [0.7, 'rgb(255,153,255)'],\n [0.8, 'rgb(255,102,204)'], [0.9, 'rgb(255,102,102)'],\n [1, 'rgb(255,0,0)']\n ],\n\n Rainbow: [\n [0, 'rgb(150,0,90)'], [0.125, 'rgb(0,0,200)'],\n [0.25, 'rgb(0,25,255)'], [0.375, 'rgb(0,152,255)'],\n [0.5, 'rgb(44,255,150)'], [0.625, 'rgb(151,255,0)'],\n [0.75, 'rgb(255,234,0)'], [0.875, 'rgb(255,111,0)'],\n [1, 'rgb(255,0,0)']\n ],\n\n Portland: [\n [0, 'rgb(12,51,131)'], [0.25, 'rgb(10,136,186)'],\n [0.5, 'rgb(242,211,56)'], [0.75, 'rgb(242,143,56)'],\n [1, 'rgb(217,30,30)']\n ],\n\n Jet: [\n [0, 'rgb(0,0,131)'], [0.125, 'rgb(0,60,170)'],\n [0.375, 'rgb(5,255,255)'], [0.625, 'rgb(255,255,0)'],\n [0.875, 'rgb(250,0,0)'], [1, 'rgb(128,0,0)']\n ],\n\n Hot: [\n [0, 'rgb(0,0,0)'], [0.3, 'rgb(230,0,0)'],\n [0.6, 'rgb(255,210,0)'], [1, 'rgb(255,255,255)']\n ],\n\n Blackbody: [\n [0, 'rgb(0,0,0)'], [0.2, 'rgb(230,0,0)'],\n [0.4, 'rgb(230,210,0)'], [0.7, 'rgb(255,255,255)'],\n [1, 'rgb(160,200,255)']\n ],\n\n Earth: [\n [0, 'rgb(0,0,130)'], [0.1, 'rgb(0,180,180)'],\n [0.2, 'rgb(40,210,40)'], [0.4, 'rgb(230,230,50)'],\n [0.6, 'rgb(120,70,20)'], [1, 'rgb(255,255,255)']\n ],\n\n Electric: [\n [0, 'rgb(0,0,0)'], [0.15, 'rgb(30,0,100)'],\n [0.4, 'rgb(120,0,100)'], [0.6, 'rgb(160,90,0)'],\n [0.8, 'rgb(230,200,0)'], [1, 'rgb(255,250,220)']\n ],\n\n Viridis: [\n [0, '#440154'], [0.06274509803921569, '#48186a'],\n [0.12549019607843137, '#472d7b'], [0.18823529411764706, '#424086'],\n [0.25098039215686274, '#3b528b'], [0.3137254901960784, '#33638d'],\n [0.3764705882352941, '#2c728e'], [0.4392156862745098, '#26828e'],\n [0.5019607843137255, '#21918c'], [0.5647058823529412, '#1fa088'],\n [0.6274509803921569, '#28ae80'], [0.6901960784313725, '#3fbc73'],\n [0.7529411764705882, '#5ec962'], [0.8156862745098039, '#84d44b'],\n [0.8784313725490196, '#addc30'], [0.9411764705882353, '#d8e219'],\n [1, '#fde725']\n ],\n\n Cividis: [\n [0.000000, 'rgb(0,32,76)'], [0.058824, 'rgb(0,42,102)'],\n [0.117647, 'rgb(0,52,110)'], [0.176471, 'rgb(39,63,108)'],\n [0.235294, 'rgb(60,74,107)'], [0.294118, 'rgb(76,85,107)'],\n [0.352941, 'rgb(91,95,109)'], [0.411765, 'rgb(104,106,112)'],\n [0.470588, 'rgb(117,117,117)'], [0.529412, 'rgb(131,129,120)'],\n [0.588235, 'rgb(146,140,120)'], [0.647059, 'rgb(161,152,118)'],\n [0.705882, 'rgb(176,165,114)'], [0.764706, 'rgb(192,177,109)'],\n [0.823529, 'rgb(209,191,102)'], [0.882353, 'rgb(225,204,92)'],\n [0.941176, 'rgb(243,219,79)'], [1.000000, 'rgb(255,233,69)']\n ]\n};\n\nvar defaultScale = scales.RdBu;\n\nfunction getScale(scl, dflt) {\n if(!dflt) dflt = defaultScale;\n if(!scl) return dflt;\n\n function parseScale() {\n try {\n scl = scales[scl] || JSON.parse(scl);\n } catch(e) {\n scl = dflt;\n }\n }\n\n if(typeof scl === 'string') {\n parseScale();\n // occasionally scl is double-JSON encoded...\n if(typeof scl === 'string') parseScale();\n }\n\n if(!isValidScaleArray(scl)) return dflt;\n return scl;\n}\n\n\nfunction isValidScaleArray(scl) {\n var highestVal = 0;\n\n if(!Array.isArray(scl) || scl.length < 2) return false;\n\n if(!scl[0] || !scl[scl.length - 1]) return false;\n\n if(+scl[0][0] !== 0 || +scl[scl.length - 1][0] !== 1) return false;\n\n for(var i = 0; i < scl.length; i++) {\n var si = scl[i];\n\n if(si.length !== 2 || +si[0] < highestVal || !tinycolor(si[1]).isValid()) {\n return false;\n }\n\n highestVal = +si[0];\n }\n\n return true;\n}\n\nfunction isValidScale(scl) {\n if(scales[scl] !== undefined) return true;\n else return isValidScaleArray(scl);\n}\n\nmodule.exports = {\n scales: scales,\n defaultScale: defaultScale,\n\n get: getScale,\n isValid: isValidScale\n};\n","'use strict';\n\nvar fontAttrs = require('../../plots/font_attributes');\nvar colorAttrs = require('../color/attributes');\n\n\nmodule.exports = {\n // not really a 'subplot' attribute container,\n // but this is the flag we use to denote attributes that\n // support yaxis, yaxis2, yaxis3, ... counters\n _isSubplotObj: true,\n\n visible: {\n valType: 'boolean',\n dflt: true,\n editType: 'legend',\n description: [\n 'Determines whether or not this legend is visible.'\n ].join(' ')\n },\n\n bgcolor: {\n valType: 'color',\n editType: 'legend',\n description: [\n 'Sets the legend background color.',\n 'Defaults to `layout.paper_bgcolor`.'\n ].join(' ')\n },\n bordercolor: {\n valType: 'color',\n dflt: colorAttrs.defaultLine,\n editType: 'legend',\n description: 'Sets the color of the border enclosing the legend.'\n },\n borderwidth: {\n valType: 'number',\n min: 0,\n dflt: 0,\n editType: 'legend',\n description: 'Sets the width (in px) of the border enclosing the legend.'\n },\n font: fontAttrs({\n editType: 'legend',\n description: 'Sets the font used to text the legend items.'\n }),\n grouptitlefont: fontAttrs({\n editType: 'legend',\n description: [\n 'Sets the font for group titles in legend.',\n 'Defaults to `legend.font` with its size increased about 10%.'\n ].join(' ')\n }),\n orientation: {\n valType: 'enumerated',\n values: ['v', 'h'],\n dflt: 'v',\n editType: 'legend',\n description: 'Sets the orientation of the legend.'\n },\n traceorder: {\n valType: 'flaglist',\n flags: ['reversed', 'grouped'],\n extras: ['normal'],\n editType: 'legend',\n description: [\n 'Determines the order at which the legend items are displayed.',\n\n 'If *normal*, the items are displayed top-to-bottom in the same',\n 'order as the input data.',\n\n 'If *reversed*, the items are displayed in the opposite order',\n 'as *normal*.',\n\n 'If *grouped*, the items are displayed in groups',\n '(when a trace `legendgroup` is provided).',\n\n 'if *grouped+reversed*, the items are displayed in the opposite order',\n 'as *grouped*.'\n ].join(' ')\n },\n tracegroupgap: {\n valType: 'number',\n min: 0,\n dflt: 10,\n editType: 'legend',\n description: [\n 'Sets the amount of vertical space (in px) between legend groups.'\n ].join(' ')\n },\n entrywidth: {\n valType: 'number',\n min: 0,\n editType: 'legend',\n description: [\n 'Sets the width (in px or fraction) of the legend.',\n 'Use 0 to size the entry based on the text width,',\n 'when `entrywidthmode` is set to *pixels*.'\n ].join(' ')\n },\n entrywidthmode: {\n valType: 'enumerated',\n values: ['fraction', 'pixels'],\n dflt: 'pixels',\n editType: 'legend',\n description: 'Determines what entrywidth means.',\n },\n itemsizing: {\n valType: 'enumerated',\n values: ['trace', 'constant'],\n dflt: 'trace',\n editType: 'legend',\n description: [\n 'Determines if the legend items symbols scale with their corresponding *trace* attributes',\n 'or remain *constant* independent of the symbol size on the graph.'\n ].join(' ')\n },\n itemwidth: {\n valType: 'number',\n min: 30,\n dflt: 30,\n editType: 'legend',\n description: 'Sets the width (in px) of the legend item symbols (the part other than the title.text).',\n },\n itemclick: {\n valType: 'enumerated',\n values: ['toggle', 'toggleothers', false],\n dflt: 'toggle',\n editType: 'legend',\n description: [\n 'Determines the behavior on legend item click.',\n '*toggle* toggles the visibility of the item clicked on the graph.',\n '*toggleothers* makes the clicked item the sole visible item on the graph.',\n '*false* disables legend item click interactions.'\n ].join(' ')\n },\n itemdoubleclick: {\n valType: 'enumerated',\n values: ['toggle', 'toggleothers', false],\n dflt: 'toggleothers',\n editType: 'legend',\n description: [\n 'Determines the behavior on legend item double-click.',\n '*toggle* toggles the visibility of the item clicked on the graph.',\n '*toggleothers* makes the clicked item the sole visible item on the graph.',\n '*false* disables legend item double-click interactions.'\n ].join(' ')\n },\n groupclick: {\n valType: 'enumerated',\n values: ['toggleitem', 'togglegroup'],\n dflt: 'togglegroup',\n editType: 'legend',\n description: [\n 'Determines the behavior on legend group item click.',\n '*toggleitem* toggles the visibility of the individual item clicked on the graph.',\n '*togglegroup* toggles the visibility of all items in the same legendgroup as the item clicked on the graph.'\n ].join(' ')\n },\n x: {\n valType: 'number',\n editType: 'legend',\n description: [\n 'Sets the x position with respect to `xref` (in normalized coordinates) of the legend.',\n 'When `xref` is *paper*, defaults to *1.02* for vertical legends and',\n 'defaults to *0* for horizontal legends.',\n 'When `xref` is *container*, defaults to *1* for vertical legends and',\n 'defaults to *0* for horizontal legends.',\n 'Must be between *0* and *1* if `xref` is *container*.',\n 'and between *-2* and *3* if `xref` is *paper*.'\n ].join(' ')\n },\n xref: {\n valType: 'enumerated',\n dflt: 'paper',\n values: ['container', 'paper'],\n editType: 'layoutstyle',\n description: [\n 'Sets the container `x` refers to.',\n '*container* spans the entire `width` of the plot.',\n '*paper* refers to the width of the plotting area only.'\n ].join(' ')\n },\n xanchor: {\n valType: 'enumerated',\n values: ['auto', 'left', 'center', 'right'],\n dflt: 'left',\n editType: 'legend',\n description: [\n 'Sets the legend\\'s horizontal position anchor.',\n 'This anchor binds the `x` position to the *left*, *center*',\n 'or *right* of the legend.',\n 'Value *auto* anchors legends to the right for `x` values greater than or equal to 2/3,',\n 'anchors legends to the left for `x` values less than or equal to 1/3 and',\n 'anchors legends with respect to their center otherwise.'\n ].join(' ')\n },\n y: {\n valType: 'number',\n editType: 'legend',\n description: [\n 'Sets the y position with respect to `yref` (in normalized coordinates) of the legend.',\n 'When `yref` is *paper*, defaults to *1* for vertical legends,',\n 'defaults to *-0.1* for horizontal legends on graphs w/o range sliders and',\n 'defaults to *1.1* for horizontal legends on graph with one or multiple range sliders.',\n 'When `yref` is *container*, defaults to *1*.',\n 'Must be between *0* and *1* if `yref` is *container*',\n 'and between *-2* and *3* if `yref` is *paper*.'\n ].join(' ')\n },\n yref: {\n valType: 'enumerated',\n dflt: 'paper',\n values: ['container', 'paper'],\n editType: 'layoutstyle',\n description: [\n 'Sets the container `y` refers to.',\n '*container* spans the entire `height` of the plot.',\n '*paper* refers to the height of the plotting area only.'\n ].join(' ')\n },\n yanchor: {\n valType: 'enumerated',\n values: ['auto', 'top', 'middle', 'bottom'],\n editType: 'legend',\n description: [\n 'Sets the legend\\'s vertical position anchor',\n 'This anchor binds the `y` position to the *top*, *middle*',\n 'or *bottom* of the legend.',\n 'Value *auto* anchors legends at their bottom for `y` values less than or equal to 1/3,',\n 'anchors legends to at their top for `y` values greater than or equal to 2/3 and',\n 'anchors legends with respect to their middle otherwise.'\n ].join(' ')\n },\n uirevision: {\n valType: 'any',\n editType: 'none',\n description: [\n 'Controls persistence of legend-driven changes in trace and pie label',\n 'visibility. Defaults to `layout.uirevision`.'\n ].join(' ')\n },\n valign: {\n valType: 'enumerated',\n values: ['top', 'middle', 'bottom'],\n dflt: 'middle',\n editType: 'legend',\n description: [\n 'Sets the vertical alignment of the symbols with respect to their associated text.',\n ].join(' ')\n },\n title: {\n text: {\n valType: 'string',\n dflt: '',\n editType: 'legend',\n description: [\n 'Sets the title of the legend.'\n ].join(' ')\n },\n font: fontAttrs({\n editType: 'legend',\n description: [\n 'Sets this legend\\'s title font.',\n 'Defaults to `legend.font` with its size increased about 20%.'\n ].join(' '),\n }),\n side: {\n valType: 'enumerated',\n values: ['top', 'left', 'top left', 'top center', 'top right'],\n editType: 'legend',\n description: [\n 'Determines the location of legend\\'s title',\n 'with respect to the legend items.',\n 'Defaulted to *top* with `orientation` is *h*.',\n 'Defaulted to *left* with `orientation` is *v*.',\n 'The *top left* options could be used to expand',\n 'top center and top right are for horizontal alignment',\n 'legend area in both x and y sides.'\n ].join(' ')\n },\n editType: 'legend',\n },\n editType: 'legend'\n};\n","'use strict';\n\nvar axesAttrs = require('../../plots/cartesian/layout_attributes');\nvar fontAttrs = require('../../plots/font_attributes');\nvar extendFlat = require('../../lib/extend').extendFlat;\nvar overrideAll = require('../../plot_api/edit_types').overrideAll;\n\n\nmodule.exports = overrideAll({\n orientation: {\n valType: 'enumerated',\n values: ['h', 'v'],\n dflt: 'v',\n description: 'Sets the orientation of the colorbar.'\n },\n thicknessmode: {\n valType: 'enumerated',\n values: ['fraction', 'pixels'],\n dflt: 'pixels',\n description: [\n 'Determines whether this color bar\\'s thickness',\n '(i.e. the measure in the constant color direction)',\n 'is set in units of plot *fraction* or in *pixels*.',\n 'Use `thickness` to set the value.'\n ].join(' ')\n },\n thickness: {\n valType: 'number',\n min: 0,\n dflt: 30,\n description: [\n 'Sets the thickness of the color bar',\n 'This measure excludes the size of the padding, ticks and labels.'\n ].join(' ')\n },\n lenmode: {\n valType: 'enumerated',\n values: ['fraction', 'pixels'],\n dflt: 'fraction',\n description: [\n 'Determines whether this color bar\\'s length',\n '(i.e. the measure in the color variation direction)',\n 'is set in units of plot *fraction* or in *pixels.',\n 'Use `len` to set the value.'\n ].join(' ')\n },\n len: {\n valType: 'number',\n min: 0,\n dflt: 1,\n description: [\n 'Sets the length of the color bar',\n 'This measure excludes the padding of both ends.',\n 'That is, the color bar length is this length minus the',\n 'padding on both ends.'\n ].join(' ')\n },\n x: {\n valType: 'number',\n description: [\n 'Sets the x position with respect to `xref` of the color bar (in plot fraction).',\n 'When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and',\n '0.5 when `orientation` is *h*.',\n 'When `xref` is *container*, defaults to *1* when `orientation` is *v* and',\n '0.5 when `orientation` is *h*.',\n 'Must be between *0* and *1* if `xref` is *container*',\n 'and between *-2* and *3* if `xref` is *paper*.'\n ].join(' ')\n },\n xref: {\n valType: 'enumerated',\n dflt: 'paper',\n values: ['container', 'paper'],\n editType: 'layoutstyle',\n description: [\n 'Sets the container `x` refers to.',\n '*container* spans the entire `width` of the plot.',\n '*paper* refers to the width of the plotting area only.'\n ].join(' ')\n },\n xanchor: {\n valType: 'enumerated',\n values: ['left', 'center', 'right'],\n description: [\n 'Sets this color bar\\'s horizontal position anchor.',\n 'This anchor binds the `x` position to the *left*, *center*',\n 'or *right* of the color bar.',\n 'Defaults to *left* when `orientation` is *v* and',\n '*center* when `orientation` is *h*.'\n ].join(' ')\n },\n xpad: {\n valType: 'number',\n min: 0,\n dflt: 10,\n description: 'Sets the amount of padding (in px) along the x direction.'\n },\n y: {\n valType: 'number',\n description: [\n 'Sets the y position with respect to `yref` of the color bar (in plot fraction).',\n 'When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and',\n '1.02 when `orientation` is *h*.',\n 'When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and',\n '1 when `orientation` is *h*.',\n 'Must be between *0* and *1* if `yref` is *container*',\n 'and between *-2* and *3* if `yref` is *paper*.'\n ].join(' ')\n },\n yref: {\n valType: 'enumerated',\n dflt: 'paper',\n values: ['container', 'paper'],\n editType: 'layoutstyle',\n description: [\n 'Sets the container `y` refers to.',\n '*container* spans the entire `height` of the plot.',\n '*paper* refers to the height of the plotting area only.'\n ].join(' '),\n },\n yanchor: {\n valType: 'enumerated',\n values: ['top', 'middle', 'bottom'],\n description: [\n 'Sets this color bar\\'s vertical position anchor',\n 'This anchor binds the `y` position to the *top*, *middle*',\n 'or *bottom* of the color bar.',\n 'Defaults to *middle* when `orientation` is *v* and',\n '*bottom* when `orientation` is *h*.'\n ].join(' ')\n },\n ypad: {\n valType: 'number',\n min: 0,\n dflt: 10,\n description: 'Sets the amount of padding (in px) along the y direction.'\n },\n // a possible line around the bar itself\n outlinecolor: axesAttrs.linecolor,\n outlinewidth: axesAttrs.linewidth,\n // Should outlinewidth have {dflt: 0} ?\n // another possible line outside the padding and tick labels\n bordercolor: axesAttrs.linecolor,\n borderwidth: {\n valType: 'number',\n min: 0,\n dflt: 0,\n description: [\n 'Sets the width (in px) or the border enclosing this color bar.'\n ].join(' ')\n },\n bgcolor: {\n valType: 'color',\n dflt: 'rgba(0,0,0,0)',\n description: 'Sets the color of padded area.'\n },\n // tick and title properties named and function exactly as in axes\n tickmode: axesAttrs.minor.tickmode,\n nticks: axesAttrs.nticks,\n tick0: axesAttrs.tick0,\n dtick: axesAttrs.dtick,\n tickvals: axesAttrs.tickvals,\n ticktext: axesAttrs.ticktext,\n ticks: extendFlat({}, axesAttrs.ticks, {dflt: ''}),\n ticklabeloverflow: extendFlat({}, axesAttrs.ticklabeloverflow, {\n description: [\n 'Determines how we handle tick labels that would overflow either the graph div or the domain of the axis.',\n 'The default value for inside tick labels is *hide past domain*.',\n 'In other cases the default is *hide past div*.'\n ].join(' ')\n }),\n\n // ticklabelposition: not used directly, as values depend on orientation\n // left/right options are for x axes, and top/bottom options are for y axes\n ticklabelposition: {\n valType: 'enumerated',\n values: [\n 'outside', 'inside',\n 'outside top', 'inside top',\n 'outside left', 'inside left',\n 'outside right', 'inside right',\n 'outside bottom', 'inside bottom'\n ],\n dflt: 'outside',\n description: [\n 'Determines where tick labels are drawn relative to the ticks.',\n 'Left and right options are used when `orientation` is *h*,',\n 'top and bottom when `orientation` is *v*.'\n ].join(' ')\n },\n\n ticklen: axesAttrs.ticklen,\n tickwidth: axesAttrs.tickwidth,\n tickcolor: axesAttrs.tickcolor,\n ticklabelstep: axesAttrs.ticklabelstep,\n showticklabels: axesAttrs.showticklabels,\n labelalias: axesAttrs.labelalias,\n tickfont: fontAttrs({\n description: 'Sets the color bar\\'s tick label font'\n }),\n tickangle: axesAttrs.tickangle,\n tickformat: axesAttrs.tickformat,\n tickformatstops: axesAttrs.tickformatstops,\n tickprefix: axesAttrs.tickprefix,\n showtickprefix: axesAttrs.showtickprefix,\n ticksuffix: axesAttrs.ticksuffix,\n showticksuffix: axesAttrs.showticksuffix,\n separatethousands: axesAttrs.separatethousands,\n exponentformat: axesAttrs.exponentformat,\n minexponent: axesAttrs.minexponent,\n showexponent: axesAttrs.showexponent,\n title: {\n text: {\n valType: 'string',\n description: [\n 'Sets the title of the color bar.',\n 'Note that before the existence of `title.text`, the title\\'s',\n 'contents used to be defined as the `title` attribute itself.',\n 'This behavior has been deprecated.'\n ].join(' ')\n },\n font: fontAttrs({\n description: [\n 'Sets this color bar\\'s title font.',\n 'Note that the title\\'s font used to be set',\n 'by the now deprecated `titlefont` attribute.'\n ].join(' ')\n }),\n side: {\n valType: 'enumerated',\n values: ['right', 'top', 'bottom'],\n description: [\n 'Determines the location of color bar\\'s title',\n 'with respect to the color bar.',\n 'Defaults to *top* when `orientation` if *v* and ',\n 'defaults to *right* when `orientation` if *h*.',\n 'Note that the title\\'s location used to be set',\n 'by the now deprecated `titleside` attribute.'\n ].join(' ')\n }\n },\n\n _deprecated: {\n title: {\n valType: 'string',\n description: [\n 'Deprecated in favor of color bar\\'s `title.text`.',\n 'Note that value of color bar\\'s `title` is no longer a simple',\n '*string* but a set of sub-attributes.'\n ].join(' ')\n },\n titlefont: fontAttrs({\n description: 'Deprecated in favor of color bar\\'s `title.font`.'\n }),\n titleside: {\n valType: 'enumerated',\n values: ['right', 'top', 'bottom'],\n dflt: 'top',\n description: 'Deprecated in favor of color bar\\'s `title.side`.'\n }\n }\n}, 'colorbars', 'from-root');\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar Lib = require('../../lib');\nvar dragElement = require('../dragelement');\nvar helpers = require('./helpers');\nvar layoutAttributes = require('./layout_attributes');\nvar hoverModule = require('./hover');\n\nmodule.exports = {\n moduleType: 'component',\n name: 'fx',\n\n constants: require('./constants'),\n schema: {\n layout: layoutAttributes\n },\n\n attributes: require('./attributes'),\n layoutAttributes: layoutAttributes,\n\n supplyLayoutGlobalDefaults: require('./layout_global_defaults'),\n supplyDefaults: require('./defaults'),\n supplyLayoutDefaults: require('./layout_defaults'),\n\n calc: require('./calc'),\n\n getDistanceFunction: helpers.getDistanceFunction,\n getClosest: helpers.getClosest,\n inbox: helpers.inbox,\n quadrature: helpers.quadrature,\n appendArrayPointValue: helpers.appendArrayPointValue,\n\n castHoverOption: castHoverOption,\n castHoverinfo: castHoverinfo,\n\n hover: hoverModule.hover,\n unhover: dragElement.unhover,\n\n loneHover: hoverModule.loneHover,\n loneUnhover: loneUnhover,\n\n click: require('./click')\n};\n\nfunction loneUnhover(containerOrSelection) {\n // duck type whether the arg is a d3 selection because ie9 doesn't\n // handle instanceof like modern browsers do.\n var selection = Lib.isD3Selection(containerOrSelection) ?\n containerOrSelection :\n d3.select(containerOrSelection);\n\n selection.selectAll('g.hovertext').remove();\n selection.selectAll('.spikeline').remove();\n}\n\n// helpers for traces that use Fx.loneHover\n\nfunction castHoverOption(trace, ptNumber, attr) {\n return Lib.castOption(trace, ptNumber, 'hoverlabel.' + attr);\n}\n\nfunction castHoverinfo(trace, fullLayout, ptNumber) {\n function _coerce(val) {\n return Lib.coerceHoverinfo({hoverinfo: val}, {_module: trace._module}, fullLayout);\n }\n\n return Lib.castOption(trace, ptNumber, 'hoverinfo', _coerce);\n}\n","'use strict';\n\n/**\n * All paths are tuned for maximum scalability of the arrowhead,\n * ie throughout arrowwidth=0.3..3 the head is joined smoothly\n * to the line, with the line coming from the left and ending at (0, 0).\n *\n * `backoff` is the distance to move the arrowhead and the end of the line,\n * in order that the arrowhead points to the desired place, either at\n * the tip of the arrow or (in the case of circle or square)\n * the center of the symbol.\n *\n * `noRotate`, if truthy, says that this arrowhead should not rotate with the\n * arrow. That's the case for squares, which should always be straight, and\n * circles, for which it's irrelevant.\n */\n\nmodule.exports = [\n // no arrow\n {\n path: '',\n backoff: 0\n },\n // wide with flat back\n {\n path: 'M-2.4,-3V3L0.6,0Z',\n backoff: 0.6\n },\n // narrower with flat back\n {\n path: 'M-3.7,-2.5V2.5L1.3,0Z',\n backoff: 1.3\n },\n // barbed\n {\n path: 'M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z',\n backoff: 1.55\n },\n // wide line-drawn\n {\n path: 'M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z',\n backoff: 1.6\n },\n // narrower line-drawn\n {\n path: 'M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z',\n backoff: 2\n },\n // circle\n {\n path: 'M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z',\n backoff: 0,\n noRotate: true\n },\n // square\n {\n path: 'M2,2V-2H-2V2Z',\n backoff: 0,\n noRotate: true\n }\n];\n","'use strict';\n\nvar Lib = require('../../lib');\n\n\n// set cursors pointing toward the closest corner/side,\n// to indicate alignment\n// x and y are 0-1, fractions of the plot area\nvar cursorset = [\n ['sw-resize', 's-resize', 'se-resize'],\n ['w-resize', 'move', 'e-resize'],\n ['nw-resize', 'n-resize', 'ne-resize']\n];\n\nmodule.exports = function getCursor(x, y, xanchor, yanchor) {\n if(xanchor === 'left') x = 0;\n else if(xanchor === 'center') x = 1;\n else if(xanchor === 'right') x = 2;\n else x = Lib.constrain(Math.floor(x * 3), 0, 2);\n\n if(yanchor === 'bottom') y = 0;\n else if(yanchor === 'middle') y = 1;\n else if(yanchor === 'top') y = 2;\n else y = Lib.constrain(Math.floor(y * 3), 0, 2);\n\n return cursorset[y][x];\n};\n","'use strict';\n\nvar ARROWPATHS = require('./arrow_paths');\nvar fontAttrs = require('../../plots/font_attributes');\nvar cartesianConstants = require('../../plots/cartesian/constants');\nvar templatedArray = require('../../plot_api/plot_template').templatedArray;\nvar axisPlaceableObjs = require('../../constants/axis_placeable_objects');\n\nfunction arrowAxisRefDescription(axis) {\n return [\n 'In order for absolute positioning of the arrow to work, *a' + axis +\n 'ref* must be exactly the same as *' + axis + 'ref*, otherwise *a' + axis +\n 'ref* will revert to *pixel* (explained next).',\n 'For relative positioning, *a' + axis + 'ref* can be set to *pixel*,',\n 'in which case the *a' + axis + '* value is specified in pixels',\n 'relative to *' + axis + '*.',\n 'Absolute positioning is useful',\n 'for trendline annotations which should continue to indicate',\n 'the correct trend when zoomed. Relative positioning is useful',\n 'for specifying the text offset for an annotated point.'\n ].join(' ');\n}\n\nfunction arrowCoordinateDescription(axis, lower, upper) {\n return [\n 'Sets the', axis, 'component of the arrow tail about the arrow head.',\n 'If `a' + axis + 'ref` is `pixel`, a positive (negative)',\n 'component corresponds to an arrow pointing',\n 'from', upper, 'to', lower, '(' + lower, 'to', upper + ').',\n 'If `a' + axis + 'ref` is not `pixel` and is exactly the same as `' + axis + 'ref`,',\n 'this is an absolute value on that axis,',\n 'like `' + axis + '`, specified in the same coordinates as `' + axis + 'ref`.'\n ].join(' ');\n}\n\nmodule.exports = templatedArray('annotation', {\n visible: {\n valType: 'boolean',\n dflt: true,\n editType: 'calc+arraydraw',\n description: [\n 'Determines whether or not this annotation is visible.'\n ].join(' ')\n },\n\n text: {\n valType: 'string',\n editType: 'calc+arraydraw',\n description: [\n 'Sets the text associated with this annotation.',\n 'Plotly uses a subset of HTML tags to do things like',\n 'newline (
), bold (), italics (),',\n 'hyperlinks (). Tags , , ',\n ' are also supported.'\n ].join(' ')\n },\n textangle: {\n valType: 'angle',\n dflt: 0,\n editType: 'calc+arraydraw',\n description: [\n 'Sets the angle at which the `text` is drawn',\n 'with respect to the horizontal.'\n ].join(' ')\n },\n font: fontAttrs({\n editType: 'calc+arraydraw',\n colorEditType: 'arraydraw',\n description: 'Sets the annotation text font.'\n }),\n width: {\n valType: 'number',\n min: 1,\n dflt: null,\n editType: 'calc+arraydraw',\n description: [\n 'Sets an explicit width for the text box. null (default) lets the',\n 'text set the box width. Wider text will be clipped.',\n 'There is no automatic wrapping; use
to start a new line.'\n ].join(' ')\n },\n height: {\n valType: 'number',\n min: 1,\n dflt: null,\n editType: 'calc+arraydraw',\n description: [\n 'Sets an explicit height for the text box. null (default) lets the',\n 'text set the box height. Taller text will be clipped.'\n ].join(' ')\n },\n opacity: {\n valType: 'number',\n min: 0,\n max: 1,\n dflt: 1,\n editType: 'arraydraw',\n description: 'Sets the opacity of the annotation (text + arrow).'\n },\n align: {\n valType: 'enumerated',\n values: ['left', 'center', 'right'],\n dflt: 'center',\n editType: 'arraydraw',\n description: [\n 'Sets the horizontal alignment of the `text` within the box.',\n 'Has an effect only if `text` spans two or more lines',\n '(i.e. `text` contains one or more
HTML tags) or if an',\n 'explicit width is set to override the text width.'\n ].join(' ')\n },\n valign: {\n valType: 'enumerated',\n values: ['top', 'middle', 'bottom'],\n dflt: 'middle',\n editType: 'arraydraw',\n description: [\n 'Sets the vertical alignment of the `text` within the box.',\n 'Has an effect only if an explicit height is set to override',\n 'the text height.'\n ].join(' ')\n },\n bgcolor: {\n valType: 'color',\n dflt: 'rgba(0,0,0,0)',\n editType: 'arraydraw',\n description: 'Sets the background color of the annotation.'\n },\n bordercolor: {\n valType: 'color',\n dflt: 'rgba(0,0,0,0)',\n editType: 'arraydraw',\n description: [\n 'Sets the color of the border enclosing the annotation `text`.'\n ].join(' ')\n },\n borderpad: {\n valType: 'number',\n min: 0,\n dflt: 1,\n editType: 'calc+arraydraw',\n description: [\n 'Sets the padding (in px) between the `text`',\n 'and the enclosing border.'\n ].join(' ')\n },\n borderwidth: {\n valType: 'number',\n min: 0,\n dflt: 1,\n editType: 'calc+arraydraw',\n description: [\n 'Sets the width (in px) of the border enclosing',\n 'the annotation `text`.'\n ].join(' ')\n },\n // arrow\n showarrow: {\n valType: 'boolean',\n dflt: true,\n editType: 'calc+arraydraw',\n description: [\n 'Determines whether or not the annotation is drawn with an arrow.',\n 'If *true*, `text` is placed near the arrow\\'s tail.',\n 'If *false*, `text` lines up with the `x` and `y` provided.'\n ].join(' ')\n },\n arrowcolor: {\n valType: 'color',\n editType: 'arraydraw',\n description: 'Sets the color of the annotation arrow.'\n },\n arrowhead: {\n valType: 'integer',\n min: 0,\n max: ARROWPATHS.length,\n dflt: 1,\n editType: 'arraydraw',\n description: 'Sets the end annotation arrow head style.'\n },\n startarrowhead: {\n valType: 'integer',\n min: 0,\n max: ARROWPATHS.length,\n dflt: 1,\n editType: 'arraydraw',\n description: 'Sets the start annotation arrow head style.'\n },\n arrowside: {\n valType: 'flaglist',\n flags: ['end', 'start'],\n extras: ['none'],\n dflt: 'end',\n editType: 'arraydraw',\n description: 'Sets the annotation arrow head position.'\n },\n arrowsize: {\n valType: 'number',\n min: 0.3,\n dflt: 1,\n editType: 'calc+arraydraw',\n description: [\n 'Sets the size of the end annotation arrow head, relative to `arrowwidth`.',\n 'A value of 1 (default) gives a head about 3x as wide as the line.'\n ].join(' ')\n },\n startarrowsize: {\n valType: 'number',\n min: 0.3,\n dflt: 1,\n editType: 'calc+arraydraw',\n description: [\n 'Sets the size of the start annotation arrow head, relative to `arrowwidth`.',\n 'A value of 1 (default) gives a head about 3x as wide as the line.'\n ].join(' ')\n },\n arrowwidth: {\n valType: 'number',\n min: 0.1,\n editType: 'calc+arraydraw',\n description: 'Sets the width (in px) of annotation arrow line.'\n },\n standoff: {\n valType: 'number',\n min: 0,\n dflt: 0,\n editType: 'calc+arraydraw',\n description: [\n 'Sets a distance, in pixels, to move the end arrowhead away from the',\n 'position it is pointing at, for example to point at the edge of',\n 'a marker independent of zoom. Note that this shortens the arrow',\n 'from the `ax` / `ay` vector, in contrast to `xshift` / `yshift`',\n 'which moves everything by this amount.'\n ].join(' ')\n },\n startstandoff: {\n valType: 'number',\n min: 0,\n dflt: 0,\n editType: 'calc+arraydraw',\n description: [\n 'Sets a distance, in pixels, to move the start arrowhead away from the',\n 'position it is pointing at, for example to point at the edge of',\n 'a marker independent of zoom. Note that this shortens the arrow',\n 'from the `ax` / `ay` vector, in contrast to `xshift` / `yshift`',\n 'which moves everything by this amount.'\n ].join(' ')\n },\n ax: {\n valType: 'any',\n editType: 'calc+arraydraw',\n description: [\n arrowCoordinateDescription('x', 'left', 'right')\n ].join(' ')\n },\n ay: {\n valType: 'any',\n editType: 'calc+arraydraw',\n description: [\n arrowCoordinateDescription('y', 'top', 'bottom')\n ].join(' ')\n },\n axref: {\n valType: 'enumerated',\n dflt: 'pixel',\n values: [\n 'pixel',\n cartesianConstants.idRegex.x.toString()\n ],\n editType: 'calc',\n description: [\n 'Indicates in what coordinates the tail of the',\n 'annotation (ax,ay) is specified.',\n axisPlaceableObjs.axisRefDescription('x', 'left', 'right'),\n arrowAxisRefDescription('x')\n ].join(' ')\n },\n ayref: {\n valType: 'enumerated',\n dflt: 'pixel',\n values: [\n 'pixel',\n cartesianConstants.idRegex.y.toString()\n ],\n editType: 'calc',\n description: [\n 'Indicates in what coordinates the tail of the',\n 'annotation (ax,ay) is specified.',\n axisPlaceableObjs.axisRefDescription('y', 'bottom', 'top'),\n arrowAxisRefDescription('y')\n ].join(' ')\n },\n // positioning\n xref: {\n valType: 'enumerated',\n values: [\n 'paper',\n cartesianConstants.idRegex.x.toString()\n ],\n editType: 'calc',\n description: [\n 'Sets the annotation\\'s x coordinate axis.',\n axisPlaceableObjs.axisRefDescription('x', 'left', 'right'),\n ].join(' ')\n },\n x: {\n valType: 'any',\n editType: 'calc+arraydraw',\n description: [\n 'Sets the annotation\\'s x position.',\n 'If the axis `type` is *log*, then you must take the',\n 'log of your desired range.',\n 'If the axis `type` is *date*, it should be date strings,',\n 'like date data, though Date objects and unix milliseconds',\n 'will be accepted and converted to strings.',\n 'If the axis `type` is *category*, it should be numbers,',\n 'using the scale where each category is assigned a serial',\n 'number from zero in the order it appears.'\n ].join(' ')\n },\n xanchor: {\n valType: 'enumerated',\n values: ['auto', 'left', 'center', 'right'],\n dflt: 'auto',\n editType: 'calc+arraydraw',\n description: [\n 'Sets the text box\\'s horizontal position anchor',\n 'This anchor binds the `x` position to the *left*, *center*',\n 'or *right* of the annotation.',\n 'For example, if `x` is set to 1, `xref` to *paper* and',\n '`xanchor` to *right* then the right-most portion of the',\n 'annotation lines up with the right-most edge of the',\n 'plotting area.',\n 'If *auto*, the anchor is equivalent to *center* for',\n 'data-referenced annotations or if there is an arrow,',\n 'whereas for paper-referenced with no arrow, the anchor picked',\n 'corresponds to the closest side.'\n ].join(' ')\n },\n xshift: {\n valType: 'number',\n dflt: 0,\n editType: 'calc+arraydraw',\n description: [\n 'Shifts the position of the whole annotation and arrow to the',\n 'right (positive) or left (negative) by this many pixels.'\n ].join(' ')\n },\n yref: {\n valType: 'enumerated',\n values: [\n 'paper',\n cartesianConstants.idRegex.y.toString()\n ],\n editType: 'calc',\n description: [\n 'Sets the annotation\\'s y coordinate axis.',\n axisPlaceableObjs.axisRefDescription('y', 'bottom', 'top'),\n ].join(' ')\n },\n y: {\n valType: 'any',\n editType: 'calc+arraydraw',\n description: [\n 'Sets the annotation\\'s y position.',\n 'If the axis `type` is *log*, then you must take the',\n 'log of your desired range.',\n 'If the axis `type` is *date*, it should be date strings,',\n 'like date data, though Date objects and unix milliseconds',\n 'will be accepted and converted to strings.',\n 'If the axis `type` is *category*, it should be numbers,',\n 'using the scale where each category is assigned a serial',\n 'number from zero in the order it appears.'\n ].join(' ')\n },\n yanchor: {\n valType: 'enumerated',\n values: ['auto', 'top', 'middle', 'bottom'],\n dflt: 'auto',\n editType: 'calc+arraydraw',\n description: [\n 'Sets the text box\\'s vertical position anchor',\n 'This anchor binds the `y` position to the *top*, *middle*',\n 'or *bottom* of the annotation.',\n 'For example, if `y` is set to 1, `yref` to *paper* and',\n '`yanchor` to *top* then the top-most portion of the',\n 'annotation lines up with the top-most edge of the',\n 'plotting area.',\n 'If *auto*, the anchor is equivalent to *middle* for',\n 'data-referenced annotations or if there is an arrow,',\n 'whereas for paper-referenced with no arrow, the anchor picked',\n 'corresponds to the closest side.'\n ].join(' ')\n },\n yshift: {\n valType: 'number',\n dflt: 0,\n editType: 'calc+arraydraw',\n description: [\n 'Shifts the position of the whole annotation and arrow up',\n '(positive) or down (negative) by this many pixels.'\n ].join(' ')\n },\n clicktoshow: {\n valType: 'enumerated',\n values: [false, 'onoff', 'onout'],\n dflt: false,\n editType: 'arraydraw',\n description: [\n 'Makes this annotation respond to clicks on the plot.',\n 'If you click a data point that exactly matches the `x` and `y`',\n 'values of this annotation, and it is hidden (visible: false),',\n 'it will appear. In *onoff* mode, you must click the same point',\n 'again to make it disappear, so if you click multiple points,',\n 'you can show multiple annotations. In *onout* mode, a click',\n 'anywhere else in the plot (on another data point or not) will',\n 'hide this annotation.',\n 'If you need to show/hide this annotation in response to different',\n '`x` or `y` values, you can set `xclick` and/or `yclick`. This is',\n 'useful for example to label the side of a bar. To label markers',\n 'though, `standoff` is preferred over `xclick` and `yclick`.'\n ].join(' ')\n },\n xclick: {\n valType: 'any',\n editType: 'arraydraw',\n description: [\n 'Toggle this annotation when clicking a data point whose `x` value',\n 'is `xclick` rather than the annotation\\'s `x` value.'\n ].join(' ')\n },\n yclick: {\n valType: 'any',\n editType: 'arraydraw',\n description: [\n 'Toggle this annotation when clicking a data point whose `y` value',\n 'is `yclick` rather than the annotation\\'s `y` value.'\n ].join(' ')\n },\n hovertext: {\n valType: 'string',\n editType: 'arraydraw',\n description: [\n 'Sets text to appear when hovering over this annotation.',\n 'If omitted or blank, no hover label will appear.'\n ].join(' ')\n },\n hoverlabel: {\n bgcolor: {\n valType: 'color',\n editType: 'arraydraw',\n description: [\n 'Sets the background color of the hover label.',\n 'By default uses the annotation\\'s `bgcolor` made opaque,',\n 'or white if it was transparent.'\n ].join(' ')\n },\n bordercolor: {\n valType: 'color',\n editType: 'arraydraw',\n description: [\n 'Sets the border color of the hover label.',\n 'By default uses either dark grey or white, for maximum',\n 'contrast with `hoverlabel.bgcolor`.'\n ].join(' ')\n },\n font: fontAttrs({\n editType: 'arraydraw',\n description: [\n 'Sets the hover label text font.',\n 'By default uses the global hover font and size,',\n 'with color from `hoverlabel.bordercolor`.'\n ].join(' ')\n }),\n editType: 'arraydraw'\n },\n captureevents: {\n valType: 'boolean',\n editType: 'arraydraw',\n description: [\n 'Determines whether the annotation text box captures mouse move',\n 'and click events, or allows those events to pass through to data',\n 'points in the plot that may be behind the annotation. By default',\n '`captureevents` is *false* unless `hovertext` is provided.',\n 'If you use the event `plotly_clickannotation` without `hovertext`',\n 'you must explicitly enable `captureevents`.'\n ].join(' ')\n },\n editType: 'calc',\n\n _deprecated: {\n ref: {\n valType: 'string',\n editType: 'calc',\n description: [\n 'Obsolete. Set `xref` and `yref` separately instead.'\n ].join(' ')\n }\n }\n});\n","'use strict';\n\nvar drawModule = require('./draw');\nvar clickModule = require('./click');\n\nmodule.exports = {\n moduleType: 'component',\n name: 'annotations',\n\n layoutAttributes: require('./attributes'),\n supplyLayoutDefaults: require('./defaults'),\n includeBasePlot: require('../../plots/cartesian/include_components')('annotations'),\n\n calcAutorange: require('./calc_autorange'),\n draw: drawModule.draw,\n drawOne: drawModule.drawOne,\n drawRaw: drawModule.drawRaw,\n\n hasClickToShow: clickModule.hasClickToShow,\n onClick: clickModule.onClick,\n\n convertCoords: require('./convert_coords')\n};\n","'use strict';\n\nvar scales = require('./scales');\nvar helpers = require('./helpers');\n\nmodule.exports = {\n moduleType: 'component',\n name: 'colorscale',\n\n attributes: require('./attributes'),\n layoutAttributes: require('./layout_attributes'),\n\n supplyLayoutDefaults: require('./layout_defaults'),\n handleDefaults: require('./defaults'),\n crossTraceDefaults: require('./cross_trace_defaults'),\n\n calc: require('./calc'),\n\n // ./scales.js is required in lib/coerce.js ;\n // it needs to be a separate module to avoid a circular dependency\n scales: scales.scales,\n defaultScale: scales.defaultScale,\n getScale: scales.get,\n isValidScale: scales.isValid,\n\n hasColorscale: helpers.hasColorscale,\n extractOpts: helpers.extractOpts,\n extractScale: helpers.extractScale,\n flipScale: helpers.flipScale,\n makeColorScaleFunc: helpers.makeColorScaleFunc,\n makeColorScaleFuncFromTrace: helpers.makeColorScaleFuncFromTrace\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar counterRegex = require('../../lib/regex').counter;\nvar domainAttrs = require('../../plots/domain').attributes;\nvar cartesianIdRegex = require('../../plots/cartesian/constants').idRegex;\nvar Template = require('../../plot_api/plot_template');\n\nvar gridAttrs = {\n rows: {\n valType: 'integer',\n min: 1,\n editType: 'plot',\n description: [\n 'The number of rows in the grid. If you provide a 2D `subplots`',\n 'array or a `yaxes` array, its length is used as the default.',\n 'But it\\'s also possible to have a different length, if you',\n 'want to leave a row at the end for non-cartesian subplots.'\n ].join(' ')\n },\n roworder: {\n valType: 'enumerated',\n values: ['top to bottom', 'bottom to top'],\n dflt: 'top to bottom',\n editType: 'plot',\n description: [\n 'Is the first row the top or the bottom? Note that columns',\n 'are always enumerated from left to right.'\n ].join(' ')\n },\n columns: {\n valType: 'integer',\n min: 1,\n editType: 'plot',\n description: [\n 'The number of columns in the grid. If you provide a 2D `subplots`',\n 'array, the length of its longest row is used as the default.',\n 'If you give an `xaxes` array, its length is used as the default.',\n 'But it\\'s also possible to have a different length, if you',\n 'want to leave a row at the end for non-cartesian subplots.'\n ].join(' ')\n },\n subplots: {\n valType: 'info_array',\n freeLength: true,\n dimensions: 2,\n items: {valType: 'enumerated', values: [counterRegex('xy').toString(), ''], editType: 'plot'},\n editType: 'plot',\n description: [\n 'Used for freeform grids, where some axes may be shared across subplots',\n 'but others are not. Each entry should be a cartesian subplot id, like',\n '*xy* or *x3y2*, or ** to leave that cell empty. You may reuse x axes',\n 'within the same column, and y axes within the same row.',\n 'Non-cartesian subplots and traces that support `domain` can place themselves',\n 'in this grid separately using the `gridcell` attribute.'\n ].join(' ')\n },\n xaxes: {\n valType: 'info_array',\n freeLength: true,\n items: {valType: 'enumerated', values: [cartesianIdRegex.x.toString(), ''], editType: 'plot'},\n editType: 'plot',\n description: [\n 'Used with `yaxes` when the x and y axes are shared across columns and rows.',\n 'Each entry should be an x axis id like *x*, *x2*, etc., or ** to',\n 'not put an x axis in that column. Entries other than ** must be unique.',\n 'Ignored if `subplots` is present. If missing but `yaxes` is present,',\n 'will generate consecutive IDs.'\n ].join(' ')\n },\n yaxes: {\n valType: 'info_array',\n freeLength: true,\n items: {valType: 'enumerated', values: [cartesianIdRegex.y.toString(), ''], editType: 'plot'},\n editType: 'plot',\n description: [\n 'Used with `yaxes` when the x and y axes are shared across columns and rows.',\n 'Each entry should be an y axis id like *y*, *y2*, etc., or ** to',\n 'not put a y axis in that row. Entries other than ** must be unique.',\n 'Ignored if `subplots` is present. If missing but `xaxes` is present,',\n 'will generate consecutive IDs.'\n ].join(' ')\n },\n pattern: {\n valType: 'enumerated',\n values: ['independent', 'coupled'],\n dflt: 'coupled',\n editType: 'plot',\n description: [\n 'If no `subplots`, `xaxes`, or `yaxes` are given but we do have `rows` and `columns`,',\n 'we can generate defaults using consecutive axis IDs, in two ways:',\n '*coupled* gives one x axis per column and one y axis per row.',\n '*independent* uses a new xy pair for each cell, left-to-right across each row',\n 'then iterating rows according to `roworder`.'\n ].join(' ')\n },\n xgap: {\n valType: 'number',\n min: 0,\n max: 1,\n editType: 'plot',\n description: [\n 'Horizontal space between grid cells, expressed as a fraction',\n 'of the total width available to one cell. Defaults to 0.1',\n 'for coupled-axes grids and 0.2 for independent grids.'\n ].join(' ')\n },\n ygap: {\n valType: 'number',\n min: 0,\n max: 1,\n editType: 'plot',\n description: [\n 'Vertical space between grid cells, expressed as a fraction',\n 'of the total height available to one cell. Defaults to 0.1',\n 'for coupled-axes grids and 0.3 for independent grids.'\n ].join(' ')\n },\n domain: domainAttrs({name: 'grid', editType: 'plot', noGridCell: true}, {\n description: [\n 'The first and last cells end exactly at the domain',\n 'edges, with no grout around the edges.'\n ].join(' ')\n }),\n xside: {\n valType: 'enumerated',\n values: ['bottom', 'bottom plot', 'top plot', 'top'],\n dflt: 'bottom plot',\n editType: 'plot',\n description: [\n 'Sets where the x axis labels and titles go. *bottom* means',\n 'the very bottom of the grid. *bottom plot* is the lowest plot',\n 'that each x axis is used in. *top* and *top plot* are similar.'\n ].join(' ')\n },\n yside: {\n valType: 'enumerated',\n values: ['left', 'left plot', 'right plot', 'right'],\n dflt: 'left plot',\n editType: 'plot',\n description: [\n 'Sets where the y axis labels and titles go. *left* means',\n 'the very left edge of the grid. *left plot* is the leftmost plot',\n 'that each y axis is used in. *right* and *right plot* are similar.'\n ].join(' ')\n },\n editType: 'plot'\n};\n\nfunction getAxes(layout, grid, axLetter) {\n var gridVal = grid[axLetter + 'axes'];\n var splomVal = Object.keys((layout._splomAxes || {})[axLetter] || {});\n\n if(Array.isArray(gridVal)) return gridVal;\n if(splomVal.length) return splomVal;\n}\n\n// the shape of the grid - this needs to be done BEFORE supplyDataDefaults\n// so that non-subplot traces can place themselves in the grid\nfunction sizeDefaults(layoutIn, layoutOut) {\n var gridIn = layoutIn.grid || {};\n var xAxes = getAxes(layoutOut, gridIn, 'x');\n var yAxes = getAxes(layoutOut, gridIn, 'y');\n\n if(!layoutIn.grid && !xAxes && !yAxes) return;\n\n var hasSubplotGrid = Array.isArray(gridIn.subplots) && Array.isArray(gridIn.subplots[0]);\n var hasXaxes = Array.isArray(xAxes);\n var hasYaxes = Array.isArray(yAxes);\n var isSplomGenerated = (\n hasXaxes && xAxes !== gridIn.xaxes &&\n hasYaxes && yAxes !== gridIn.yaxes\n );\n\n var dfltRows, dfltColumns;\n\n if(hasSubplotGrid) {\n dfltRows = gridIn.subplots.length;\n dfltColumns = gridIn.subplots[0].length;\n } else {\n if(hasYaxes) dfltRows = yAxes.length;\n if(hasXaxes) dfltColumns = xAxes.length;\n }\n\n var gridOut = Template.newContainer(layoutOut, 'grid');\n\n function coerce(attr, dflt) {\n return Lib.coerce(gridIn, gridOut, gridAttrs, attr, dflt);\n }\n\n var rows = coerce('rows', dfltRows);\n var columns = coerce('columns', dfltColumns);\n\n if(!(rows * columns > 1)) {\n delete layoutOut.grid;\n return;\n }\n\n if(!hasSubplotGrid && !hasXaxes && !hasYaxes) {\n var useDefaultSubplots = coerce('pattern') === 'independent';\n if(useDefaultSubplots) hasSubplotGrid = true;\n }\n gridOut._hasSubplotGrid = hasSubplotGrid;\n\n var rowOrder = coerce('roworder');\n var reversed = rowOrder === 'top to bottom';\n\n var dfltGapX = hasSubplotGrid ? 0.2 : 0.1;\n var dfltGapY = hasSubplotGrid ? 0.3 : 0.1;\n\n var dfltSideX, dfltSideY;\n if(isSplomGenerated && layoutOut._splomGridDflt) {\n dfltSideX = layoutOut._splomGridDflt.xside;\n dfltSideY = layoutOut._splomGridDflt.yside;\n }\n\n gridOut._domains = {\n x: fillGridPositions('x', coerce, dfltGapX, dfltSideX, columns),\n y: fillGridPositions('y', coerce, dfltGapY, dfltSideY, rows, reversed)\n };\n}\n\n// coerce x or y sizing attributes and return an array of domains for this direction\nfunction fillGridPositions(axLetter, coerce, dfltGap, dfltSide, len, reversed) {\n var dirGap = coerce(axLetter + 'gap', dfltGap);\n var domain = coerce('domain.' + axLetter);\n coerce(axLetter + 'side', dfltSide);\n\n var out = new Array(len);\n var start = domain[0];\n var step = (domain[1] - start) / (len - dirGap);\n var cellDomain = step * (1 - dirGap);\n for(var i = 0; i < len; i++) {\n var cellStart = start + step * i;\n out[reversed ? (len - 1 - i) : i] = [cellStart, cellStart + cellDomain];\n }\n return out;\n}\n\n// the (cartesian) contents of the grid - this needs to happen AFTER supplyDataDefaults\n// so that we know what cartesian subplots are available\nfunction contentDefaults(layoutIn, layoutOut) {\n var gridOut = layoutOut.grid;\n // make sure we got to the end of handleGridSizing\n if(!gridOut || !gridOut._domains) return;\n\n var gridIn = layoutIn.grid || {};\n var subplots = layoutOut._subplots;\n var hasSubplotGrid = gridOut._hasSubplotGrid;\n var rows = gridOut.rows;\n var columns = gridOut.columns;\n var useDefaultSubplots = gridOut.pattern === 'independent';\n\n var i, j, xId, yId, subplotId, subplotsOut, yPos;\n\n var axisMap = gridOut._axisMap = {};\n\n if(hasSubplotGrid) {\n var subplotsIn = gridIn.subplots || [];\n subplotsOut = gridOut.subplots = new Array(rows);\n var index = 1;\n\n for(i = 0; i < rows; i++) {\n var rowOut = subplotsOut[i] = new Array(columns);\n var rowIn = subplotsIn[i] || [];\n for(j = 0; j < columns; j++) {\n if(useDefaultSubplots) {\n subplotId = (index === 1) ? 'xy' : ('x' + index + 'y' + index);\n index++;\n } else subplotId = rowIn[j];\n\n rowOut[j] = '';\n\n if(subplots.cartesian.indexOf(subplotId) !== -1) {\n yPos = subplotId.indexOf('y');\n xId = subplotId.slice(0, yPos);\n yId = subplotId.slice(yPos);\n if((axisMap[xId] !== undefined && axisMap[xId] !== j) ||\n (axisMap[yId] !== undefined && axisMap[yId] !== i)\n ) {\n continue;\n }\n\n rowOut[j] = subplotId;\n axisMap[xId] = j;\n axisMap[yId] = i;\n }\n }\n }\n } else {\n var xAxes = getAxes(layoutOut, gridIn, 'x');\n var yAxes = getAxes(layoutOut, gridIn, 'y');\n gridOut.xaxes = fillGridAxes(xAxes, subplots.xaxis, columns, axisMap, 'x');\n gridOut.yaxes = fillGridAxes(yAxes, subplots.yaxis, rows, axisMap, 'y');\n }\n\n var anchors = gridOut._anchors = {};\n var reversed = gridOut.roworder === 'top to bottom';\n\n for(var axisId in axisMap) {\n var axLetter = axisId.charAt(0);\n var side = gridOut[axLetter + 'side'];\n\n var i0, inc, iFinal;\n\n if(side.length < 8) {\n // grid edge - ie not \"* plot\" - make these as free axes\n // since we're not guaranteed to have a subplot there at all\n anchors[axisId] = 'free';\n } else if(axLetter === 'x') {\n if((side.charAt(0) === 't') === reversed) {\n i0 = 0;\n inc = 1;\n iFinal = rows;\n } else {\n i0 = rows - 1;\n inc = -1;\n iFinal = -1;\n }\n if(hasSubplotGrid) {\n var column = axisMap[axisId];\n for(i = i0; i !== iFinal; i += inc) {\n subplotId = subplotsOut[i][column];\n if(!subplotId) continue;\n yPos = subplotId.indexOf('y');\n if(subplotId.slice(0, yPos) === axisId) {\n anchors[axisId] = subplotId.slice(yPos);\n break;\n }\n }\n } else {\n for(i = i0; i !== iFinal; i += inc) {\n yId = gridOut.yaxes[i];\n if(subplots.cartesian.indexOf(axisId + yId) !== -1) {\n anchors[axisId] = yId;\n break;\n }\n }\n }\n } else {\n if((side.charAt(0) === 'l')) {\n i0 = 0;\n inc = 1;\n iFinal = columns;\n } else {\n i0 = columns - 1;\n inc = -1;\n iFinal = -1;\n }\n if(hasSubplotGrid) {\n var row = axisMap[axisId];\n for(i = i0; i !== iFinal; i += inc) {\n subplotId = subplotsOut[row][i];\n if(!subplotId) continue;\n yPos = subplotId.indexOf('y');\n if(subplotId.slice(yPos) === axisId) {\n anchors[axisId] = subplotId.slice(0, yPos);\n break;\n }\n }\n } else {\n for(i = i0; i !== iFinal; i += inc) {\n xId = gridOut.xaxes[i];\n if(subplots.cartesian.indexOf(xId + axisId) !== -1) {\n anchors[axisId] = xId;\n break;\n }\n }\n }\n }\n }\n}\n\nfunction fillGridAxes(axesIn, axesAllowed, len, axisMap, axLetter) {\n var out = new Array(len);\n var i;\n\n function fillOneAxis(i, axisId) {\n if(axesAllowed.indexOf(axisId) !== -1 && axisMap[axisId] === undefined) {\n out[i] = axisId;\n axisMap[axisId] = i;\n } else out[i] = '';\n }\n\n if(Array.isArray(axesIn)) {\n for(i = 0; i < len; i++) {\n fillOneAxis(i, axesIn[i]);\n }\n } else {\n // default axis list is the first `len` axis ids\n fillOneAxis(0, axLetter);\n for(i = 1; i < len; i++) {\n fillOneAxis(i, axLetter + (i + 1));\n }\n }\n\n return out;\n}\n\nmodule.exports = {\n moduleType: 'component',\n name: 'grid',\n\n schema: {\n layout: {grid: gridAttrs}\n },\n\n layoutAttributes: gridAttrs,\n sizeDefaults: sizeDefaults,\n contentDefaults: contentDefaults\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar handleHoverLabelDefaults = require('./hoverlabel_defaults');\nvar layoutAttributes = require('./layout_attributes');\n\nmodule.exports = function supplyLayoutGlobalDefaults(layoutIn, layoutOut) {\n function coerce(attr, dflt) {\n return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt);\n }\n\n handleHoverLabelDefaults(layoutIn, layoutOut, coerce);\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\n\nvar Registry = require('../../registry');\nvar Lib = require('../../lib');\nvar strTranslate = Lib.strTranslate;\nvar Drawing = require('../drawing');\nvar Color = require('../color');\nvar extractOpts = require('../colorscale/helpers').extractOpts;\n\nvar subTypes = require('../../traces/scatter/subtypes');\nvar stylePie = require('../../traces/pie/style_one');\nvar pieCastOption = require('../../traces/pie/helpers').castOption;\n\nvar constants = require('./constants');\n\nvar CST_MARKER_SIZE = 12;\nvar CST_LINE_WIDTH = 5;\nvar CST_MARKER_LINE_WIDTH = 2;\nvar MAX_LINE_WIDTH = 10;\nvar MAX_MARKER_LINE_WIDTH = 5;\n\nmodule.exports = function style(s, gd, legend) {\n var fullLayout = gd._fullLayout;\n if(!legend) legend = fullLayout.legend;\n var constantItemSizing = legend.itemsizing === 'constant';\n var itemWidth = legend.itemwidth;\n var centerPos = (itemWidth + constants.itemGap * 2) / 2;\n var centerTransform = strTranslate(centerPos, 0);\n\n var boundLineWidth = function(mlw, cont, max, cst) {\n var v;\n if(mlw + 1) {\n v = mlw;\n } else if(cont && cont.width > 0) {\n v = cont.width;\n } else {\n return 0;\n }\n return constantItemSizing ? cst : Math.min(v, max);\n };\n\n s.each(function(d) {\n var traceGroup = d3.select(this);\n\n var layers = Lib.ensureSingle(traceGroup, 'g', 'layers');\n layers.style('opacity', d[0].trace.opacity);\n\n var valign = legend.valign;\n var lineHeight = d[0].lineHeight;\n var height = d[0].height;\n\n if(valign === 'middle' || !lineHeight || !height) {\n layers.attr('transform', null);\n } else {\n var factor = {top: 1, bottom: -1}[valign];\n var markerOffsetY = factor * (0.5 * (lineHeight - height + 3));\n layers.attr('transform', strTranslate(0, markerOffsetY));\n }\n\n var fill = layers\n .selectAll('g.legendfill')\n .data([d]);\n fill.enter().append('g')\n .classed('legendfill', true);\n\n var line = layers\n .selectAll('g.legendlines')\n .data([d]);\n line.enter().append('g')\n .classed('legendlines', true);\n\n var symbol = layers\n .selectAll('g.legendsymbols')\n .data([d]);\n symbol.enter().append('g')\n .classed('legendsymbols', true);\n\n symbol.selectAll('g.legendpoints')\n .data([d])\n .enter().append('g')\n .classed('legendpoints', true);\n })\n .each(styleSpatial)\n .each(styleWaterfalls)\n .each(styleFunnels)\n .each(styleBars)\n .each(styleBoxes)\n .each(styleFunnelareas)\n .each(stylePies)\n .each(styleLines)\n .each(stylePoints)\n .each(styleCandles)\n .each(styleOHLC);\n\n function styleLines(d) {\n var styleGuide = getStyleGuide(d);\n var showFill = styleGuide.showFill;\n var showLine = styleGuide.showLine;\n var showGradientLine = styleGuide.showGradientLine;\n var showGradientFill = styleGuide.showGradientFill;\n var anyFill = styleGuide.anyFill;\n var anyLine = styleGuide.anyLine;\n\n var d0 = d[0];\n var trace = d0.trace;\n var dMod, tMod;\n\n var cOpts = extractOpts(trace);\n var colorscale = cOpts.colorscale;\n var reversescale = cOpts.reversescale;\n\n var fillStyle = function(s) {\n if(s.size()) {\n if(showFill) {\n Drawing.fillGroupStyle(s, gd);\n } else {\n var gradientID = 'legendfill-' + trace.uid;\n Drawing.gradient(s, gd, gradientID,\n getGradientDirection(reversescale),\n colorscale, 'fill');\n }\n }\n };\n\n var lineGradient = function(s) {\n if(s.size()) {\n var gradientID = 'legendline-' + trace.uid;\n Drawing.lineGroupStyle(s);\n Drawing.gradient(s, gd, gradientID,\n getGradientDirection(reversescale),\n colorscale, 'stroke');\n }\n };\n\n // with fill and no markers or text, move the line and fill up a bit\n // so it's more centered\n\n var pathStart = (subTypes.hasMarkers(trace) || !anyFill) ? 'M5,0' :\n // with a line leave it slightly below center, to leave room for the\n // line thickness and because the line is usually more prominent\n anyLine ? 'M5,-2' : 'M5,-3';\n\n var this3 = d3.select(this);\n\n var fill = this3.select('.legendfill').selectAll('path')\n .data(showFill || showGradientFill ? [d] : []);\n fill.enter().append('path').classed('js-fill', true);\n fill.exit().remove();\n fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')\n .call(fillStyle);\n\n if(showLine || showGradientLine) {\n var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);\n tMod = Lib.minExtend(trace, {line: {width: lw}});\n dMod = [Lib.minExtend(d0, {trace: tMod})];\n }\n\n var line = this3.select('.legendlines').selectAll('path')\n .data(showLine || showGradientLine ? [dMod] : []);\n line.enter().append('path').classed('js-line', true);\n line.exit().remove();\n\n // this is ugly... but you can't apply a gradient to a perfectly\n // horizontal or vertical line. Presumably because then\n // the system doesn't know how to scale vertical variation, even\n // though there *is* no vertical variation in this case.\n // so add an invisibly small angle to the line\n // This issue (and workaround) exist across (Mac) Chrome, FF, and Safari\n line.attr('d', pathStart + (showGradientLine ? 'l' + itemWidth + ',0.0001' : 'h' + itemWidth))\n .call(showLine ? Drawing.lineGroupStyle : lineGradient);\n }\n\n function stylePoints(d) {\n var styleGuide = getStyleGuide(d);\n var anyFill = styleGuide.anyFill;\n var anyLine = styleGuide.anyLine;\n var showLine = styleGuide.showLine;\n var showMarker = styleGuide.showMarker;\n\n var d0 = d[0];\n var trace = d0.trace;\n var showText = !showMarker && !anyLine && !anyFill && subTypes.hasText(trace);\n var dMod, tMod;\n\n // 'scatter3d' don't use gd.calcdata,\n // use d0.trace to infer arrayOk attributes\n\n function boundVal(attrIn, arrayToValFn, bounds, cst) {\n var valIn = Lib.nestedProperty(trace, attrIn).get();\n var valToBound = (Lib.isArrayOrTypedArray(valIn) && arrayToValFn) ?\n arrayToValFn(valIn) :\n valIn;\n\n if(constantItemSizing && valToBound && cst !== undefined) {\n valToBound = cst;\n }\n\n if(bounds) {\n if(valToBound < bounds[0]) return bounds[0];\n else if(valToBound > bounds[1]) return bounds[1];\n }\n return valToBound;\n }\n\n function pickFirst(array) {\n if(d0._distinct && d0.index && array[d0.index]) return array[d0.index];\n return array[0];\n }\n\n // constrain text, markers, etc so they'll fit on the legend\n if(showMarker || showText || showLine) {\n var dEdit = {};\n var tEdit = {};\n\n if(showMarker) {\n dEdit.mc = boundVal('marker.color', pickFirst);\n dEdit.mx = boundVal('marker.symbol', pickFirst);\n dEdit.mo = boundVal('marker.opacity', Lib.mean, [0.2, 1]);\n dEdit.mlc = boundVal('marker.line.color', pickFirst);\n dEdit.mlw = boundVal('marker.line.width', Lib.mean, [0, 5], CST_MARKER_LINE_WIDTH);\n tEdit.marker = {\n sizeref: 1,\n sizemin: 1,\n sizemode: 'diameter'\n };\n\n var ms = boundVal('marker.size', Lib.mean, [2, 16], CST_MARKER_SIZE);\n dEdit.ms = ms;\n tEdit.marker.size = ms;\n }\n\n if(showLine) {\n tEdit.line = {\n width: boundVal('line.width', pickFirst, [0, 10], CST_LINE_WIDTH)\n };\n }\n\n if(showText) {\n dEdit.tx = 'Aa';\n dEdit.tp = boundVal('textposition', pickFirst);\n dEdit.ts = 10;\n dEdit.tc = boundVal('textfont.color', pickFirst);\n dEdit.tf = boundVal('textfont.family', pickFirst);\n }\n\n dMod = [Lib.minExtend(d0, dEdit)];\n tMod = Lib.minExtend(trace, tEdit);\n\n // always show legend items in base state\n tMod.selectedpoints = null;\n\n // never show texttemplate\n tMod.texttemplate = null;\n }\n\n var ptgroup = d3.select(this).select('g.legendpoints');\n\n var pts = ptgroup.selectAll('path.scatterpts')\n .data(showMarker ? dMod : []);\n // make sure marker is on the bottom, in case it enters after text\n pts.enter().insert('path', ':first-child')\n .classed('scatterpts', true)\n .attr('transform', centerTransform);\n pts.exit().remove();\n pts.call(Drawing.pointStyle, tMod, gd);\n\n // 'mrc' is set in pointStyle and used in textPointStyle:\n // constrain it here\n if(showMarker) dMod[0].mrc = 3;\n\n var txt = ptgroup.selectAll('g.pointtext')\n .data(showText ? dMod : []);\n txt.enter()\n .append('g').classed('pointtext', true)\n .append('text').attr('transform', centerTransform);\n txt.exit().remove();\n txt.selectAll('text').call(Drawing.textPointStyle, tMod, gd);\n }\n\n function styleWaterfalls(d) {\n var trace = d[0].trace;\n var isWaterfall = trace.type === 'waterfall';\n\n if(d[0]._distinct && isWaterfall) {\n var cont = d[0].trace[d[0].dir].marker;\n d[0].mc = cont.color;\n d[0].mlw = cont.line.width;\n d[0].mlc = cont.line.color;\n return styleBarLike(d, this, 'waterfall');\n }\n\n var ptsData = [];\n if(trace.visible && isWaterfall) {\n ptsData = d[0].hasTotals ?\n [['increasing', 'M-6,-6V6H0Z'], ['totals', 'M6,6H0L-6,-6H-0Z'], ['decreasing', 'M6,6V-6H0Z']] :\n [['increasing', 'M-6,-6V6H6Z'], ['decreasing', 'M6,6V-6H-6Z']];\n }\n\n var pts = d3.select(this).select('g.legendpoints')\n .selectAll('path.legendwaterfall')\n .data(ptsData);\n pts.enter().append('path').classed('legendwaterfall', true)\n .attr('transform', centerTransform)\n .style('stroke-miterlimit', 1);\n pts.exit().remove();\n\n pts.each(function(dd) {\n var pt = d3.select(this);\n var cont = trace[dd[0]].marker;\n var lw = boundLineWidth(undefined, cont.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n pt.attr('d', dd[1])\n .style('stroke-width', lw + 'px')\n .call(Color.fill, cont.color);\n\n if(lw) {\n pt.call(Color.stroke, cont.line.color);\n }\n });\n }\n\n function styleBars(d) {\n styleBarLike(d, this);\n }\n\n function styleFunnels(d) {\n styleBarLike(d, this, 'funnel');\n }\n\n function styleBarLike(d, lThis, desiredType) {\n var trace = d[0].trace;\n var marker = trace.marker || {};\n var markerLine = marker.line || {};\n\n // If bar has rounded corners, round corners of legend icon\n var pathStr = marker.cornerradius ?\n 'M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z' : // Square with rounded corners\n 'M6,6H-6V-6H6Z'; // Normal square\n\n var isVisible = (!desiredType) ? Registry.traceIs(trace, 'bar') :\n (trace.visible && trace.type === desiredType);\n\n var barpath = d3.select(lThis).select('g.legendpoints')\n .selectAll('path.legend' + desiredType)\n .data(isVisible ? [d] : []);\n barpath.enter().append('path').classed('legend' + desiredType, true)\n .attr('d', pathStr)\n .attr('transform', centerTransform);\n barpath.exit().remove();\n\n barpath.each(function(d) {\n var p = d3.select(this);\n var d0 = d[0];\n var w = boundLineWidth(d0.mlw, marker.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n p.style('stroke-width', w + 'px');\n\n var mcc = d0.mcc;\n if(!legend._inHover && 'mc' in d0) {\n // not in unified hover but\n // for legend use the color in the middle of scale\n var cOpts = extractOpts(marker);\n var mid = cOpts.mid;\n if(mid === undefined) mid = (cOpts.max + cOpts.min) / 2;\n mcc = Drawing.tryColorscale(marker, '')(mid);\n }\n var fillColor = mcc || d0.mc || marker.color;\n\n var markerPattern = marker.pattern;\n var patternShape = markerPattern && Drawing.getPatternAttr(markerPattern.shape, 0, '');\n\n if(patternShape) {\n var patternBGColor = Drawing.getPatternAttr(markerPattern.bgcolor, 0, null);\n var patternFGColor = Drawing.getPatternAttr(markerPattern.fgcolor, 0, null);\n var patternFGOpacity = markerPattern.fgopacity;\n var patternSize = dimAttr(markerPattern.size, 8, 10);\n var patternSolidity = dimAttr(markerPattern.solidity, 0.5, 1);\n var patternID = 'legend-' + trace.uid;\n p.call(\n Drawing.pattern, 'legend', gd, patternID,\n patternShape, patternSize, patternSolidity,\n mcc, markerPattern.fillmode,\n patternBGColor, patternFGColor, patternFGOpacity\n );\n } else {\n p.call(Color.fill, fillColor);\n }\n\n if(w) Color.stroke(p, d0.mlc || markerLine.color);\n });\n }\n\n function styleBoxes(d) {\n var trace = d[0].trace;\n\n var pts = d3.select(this).select('g.legendpoints')\n .selectAll('path.legendbox')\n .data(trace.visible && Registry.traceIs(trace, 'box-violin') ? [d] : []);\n pts.enter().append('path').classed('legendbox', true)\n // if we want the median bar, prepend M6,0H-6\n .attr('d', 'M6,6H-6V-6H6Z')\n .attr('transform', centerTransform);\n pts.exit().remove();\n\n pts.each(function() {\n var p = d3.select(this);\n\n if((trace.boxpoints === 'all' || trace.points === 'all') &&\n Color.opacity(trace.fillcolor) === 0 && Color.opacity((trace.line || {}).color) === 0\n ) {\n var tMod = Lib.minExtend(trace, {\n marker: {\n size: constantItemSizing ? CST_MARKER_SIZE : Lib.constrain(trace.marker.size, 2, 16),\n sizeref: 1,\n sizemin: 1,\n sizemode: 'diameter'\n }\n });\n pts.call(Drawing.pointStyle, tMod, gd);\n } else {\n var w = boundLineWidth(undefined, trace.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n p.style('stroke-width', w + 'px')\n .call(Color.fill, trace.fillcolor);\n\n if(w) Color.stroke(p, trace.line.color);\n }\n });\n }\n\n function styleCandles(d) {\n var trace = d[0].trace;\n\n var pts = d3.select(this).select('g.legendpoints')\n .selectAll('path.legendcandle')\n .data(trace.visible && trace.type === 'candlestick' ? [d, d] : []);\n pts.enter().append('path').classed('legendcandle', true)\n .attr('d', function(_, i) {\n if(i) return 'M-15,0H-8M-8,6V-6H8Z'; // increasing\n return 'M15,0H8M8,-6V6H-8Z'; // decreasing\n })\n .attr('transform', centerTransform)\n .style('stroke-miterlimit', 1);\n pts.exit().remove();\n\n pts.each(function(_, i) {\n var p = d3.select(this);\n var cont = trace[i ? 'increasing' : 'decreasing'];\n var w = boundLineWidth(undefined, cont.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n p.style('stroke-width', w + 'px')\n .call(Color.fill, cont.fillcolor);\n\n if(w) Color.stroke(p, cont.line.color);\n });\n }\n\n function styleOHLC(d) {\n var trace = d[0].trace;\n\n var pts = d3.select(this).select('g.legendpoints')\n .selectAll('path.legendohlc')\n .data(trace.visible && trace.type === 'ohlc' ? [d, d] : []);\n pts.enter().append('path').classed('legendohlc', true)\n .attr('d', function(_, i) {\n if(i) return 'M-15,0H0M-8,-6V0'; // increasing\n return 'M15,0H0M8,6V0'; // decreasing\n })\n .attr('transform', centerTransform)\n .style('stroke-miterlimit', 1);\n pts.exit().remove();\n\n pts.each(function(_, i) {\n var p = d3.select(this);\n var cont = trace[i ? 'increasing' : 'decreasing'];\n var w = boundLineWidth(undefined, cont.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n p.style('fill', 'none')\n .call(Drawing.dashLine, cont.line.dash, w);\n\n if(w) Color.stroke(p, cont.line.color);\n });\n }\n\n function stylePies(d) {\n stylePieLike(d, this, 'pie');\n }\n\n function styleFunnelareas(d) {\n stylePieLike(d, this, 'funnelarea');\n }\n\n function stylePieLike(d, lThis, desiredType) {\n var d0 = d[0];\n var trace = d0.trace;\n\n var isVisible = (!desiredType) ? Registry.traceIs(trace, desiredType) :\n (trace.visible && trace.type === desiredType);\n\n var pts = d3.select(lThis).select('g.legendpoints')\n .selectAll('path.legend' + desiredType)\n .data(isVisible ? [d] : []);\n pts.enter().append('path').classed('legend' + desiredType, true)\n .attr('d', 'M6,6H-6V-6H6Z')\n .attr('transform', centerTransform);\n pts.exit().remove();\n\n if(pts.size()) {\n var cont = trace.marker || {};\n var lw = boundLineWidth(pieCastOption(cont.line.width, d0.pts), cont.line, MAX_MARKER_LINE_WIDTH, CST_MARKER_LINE_WIDTH);\n\n var opt = 'pieLike';\n var tMod = Lib.minExtend(trace, {marker: {line: {width: lw}}}, opt);\n var d0Mod = Lib.minExtend(d0, {trace: tMod}, opt);\n\n stylePie(pts, d0Mod, tMod, gd);\n }\n }\n\n function styleSpatial(d) { // i.e. maninly traces having z and colorscale\n var trace = d[0].trace;\n\n var useGradient;\n var ptsData = [];\n if(trace.visible) {\n switch(trace.type) {\n case 'histogram2d' :\n case 'heatmap' :\n ptsData = [\n ['M-15,-2V4H15V-2Z'] // similar to contour\n ];\n useGradient = true;\n break;\n case 'choropleth' :\n case 'choroplethmapbox' :\n ptsData = [\n ['M-6,-6V6H6V-6Z']\n ];\n useGradient = true;\n break;\n case 'densitymapbox' :\n ptsData = [\n ['M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0']\n ];\n useGradient = 'radial';\n break;\n case 'cone' :\n ptsData = [\n ['M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z'],\n ['M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z'],\n ['M-6,-2 A2,2 0 0,0 -6,2 L6,0Z']\n ];\n useGradient = false;\n break;\n case 'streamtube' :\n ptsData = [\n ['M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z'],\n ['M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z'],\n ['M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z']\n ];\n useGradient = false;\n break;\n case 'surface' :\n ptsData = [\n ['M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z'],\n ['M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z']\n ];\n useGradient = true;\n break;\n case 'mesh3d' :\n ptsData = [\n ['M-6,6H0L-6,-6Z'],\n ['M6,6H0L6,-6Z'],\n ['M-6,-6H6L0,6Z']\n ];\n useGradient = false;\n break;\n case 'volume' :\n ptsData = [\n ['M-6,6H0L-6,-6Z'],\n ['M6,6H0L6,-6Z'],\n ['M-6,-6H6L0,6Z']\n ];\n useGradient = true;\n break;\n case 'isosurface':\n ptsData = [\n ['M-6,6H0L-6,-6Z'],\n ['M6,6H0L6,-6Z'],\n ['M-6,-6 A12,24 0 0,0 6,-6 L0,6Z']\n ];\n useGradient = false;\n break;\n }\n }\n\n var pts = d3.select(this).select('g.legendpoints')\n .selectAll('path.legend3dandfriends')\n .data(ptsData);\n pts.enter().append('path').classed('legend3dandfriends', true)\n .attr('transform', centerTransform)\n .style('stroke-miterlimit', 1);\n pts.exit().remove();\n\n pts.each(function(dd, i) {\n var pt = d3.select(this);\n\n var cOpts = extractOpts(trace);\n var colorscale = cOpts.colorscale;\n var reversescale = cOpts.reversescale;\n var fillGradient = function(s) {\n if(s.size()) {\n var gradientID = 'legendfill-' + trace.uid;\n Drawing.gradient(s, gd, gradientID,\n getGradientDirection(reversescale, useGradient === 'radial'),\n colorscale, 'fill');\n }\n };\n\n var fillColor;\n if(!colorscale) {\n var color = trace.vertexcolor || trace.facecolor || trace.color;\n fillColor = Lib.isArrayOrTypedArray(color) ? (color[i] || color[0]) : color;\n } else {\n if(!useGradient) {\n var len = colorscale.length;\n fillColor =\n i === 0 ? colorscale[reversescale ? len - 1 : 0][1] : // minimum\n i === 1 ? colorscale[reversescale ? 0 : len - 1][1] : // maximum\n colorscale[Math.floor((len - 1) / 2)][1]; // middle\n }\n }\n\n pt.attr('d', dd[0]);\n if(fillColor) {\n pt.call(Color.fill, fillColor);\n } else {\n pt.call(fillGradient);\n }\n });\n }\n};\n\nfunction getGradientDirection(reversescale, isRadial) {\n var str = isRadial ? 'radial' : 'horizontal';\n return str + (reversescale ? '' : 'reversed');\n}\n\nfunction getStyleGuide(d) {\n var trace = d[0].trace;\n var contours = trace.contours;\n var showLine = subTypes.hasLines(trace);\n var showMarker = subTypes.hasMarkers(trace);\n\n var showFill = trace.visible && trace.fill && trace.fill !== 'none';\n var showGradientLine = false;\n var showGradientFill = false;\n\n if(contours) {\n var coloring = contours.coloring;\n\n if(coloring === 'lines') {\n showGradientLine = true;\n } else {\n showLine = coloring === 'none' || coloring === 'heatmap' || contours.showlines;\n }\n\n if(contours.type === 'constraint') {\n showFill = contours._operation !== '=';\n } else if(coloring === 'fill' || coloring === 'heatmap') {\n showGradientFill = true;\n }\n }\n\n return {\n showMarker: showMarker,\n showLine: showLine,\n showFill: showFill,\n showGradientLine: showGradientLine,\n showGradientFill: showGradientFill,\n anyLine: showLine || showGradientLine,\n anyFill: showFill || showGradientFill,\n };\n}\n\nfunction dimAttr(v, dflt, max) {\n if(v && Lib.isArrayOrTypedArray(v)) return dflt;\n if(v > max) return max;\n return v;\n}\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar isNumeric = require('fast-isnumeric');\n\nvar Drawing = require('../drawing');\nvar subTypes = require('../../traces/scatter/subtypes');\n\nmodule.exports = function plot(gd, traces, plotinfo, transitionOpts) {\n var isNew;\n\n var xa = plotinfo.xaxis;\n var ya = plotinfo.yaxis;\n\n var hasAnimation = transitionOpts && transitionOpts.duration > 0;\n var isStatic = gd._context.staticPlot;\n\n traces.each(function(d) {\n var trace = d[0].trace;\n // || {} is in case the trace (specifically scatterternary)\n // doesn't support error bars at all, but does go through\n // the scatter.plot mechanics, which calls ErrorBars.plot\n // internally\n var xObj = trace.error_x || {};\n var yObj = trace.error_y || {};\n\n var keyFunc;\n\n if(trace.ids) {\n keyFunc = function(d) {return d.id;};\n }\n\n var sparse = (\n subTypes.hasMarkers(trace) &&\n trace.marker.maxdisplayed > 0\n );\n\n if(!yObj.visible && !xObj.visible) d = [];\n\n var errorbars = d3.select(this).selectAll('g.errorbar')\n .data(d, keyFunc);\n\n errorbars.exit().remove();\n\n if(!d.length) return;\n\n if(!xObj.visible) errorbars.selectAll('path.xerror').remove();\n if(!yObj.visible) errorbars.selectAll('path.yerror').remove();\n\n errorbars.style('opacity', 1);\n\n var enter = errorbars.enter().append('g')\n .classed('errorbar', true);\n\n if(hasAnimation) {\n enter.style('opacity', 0).transition()\n .duration(transitionOpts.duration)\n .style('opacity', 1);\n }\n\n Drawing.setClipUrl(errorbars, plotinfo.layerClipId, gd);\n\n errorbars.each(function(d) {\n var errorbar = d3.select(this);\n var coords = errorCoords(d, xa, ya);\n\n if(sparse && !d.vis) return;\n\n var path;\n\n var yerror = errorbar.select('path.yerror');\n if(yObj.visible && isNumeric(coords.x) &&\n isNumeric(coords.yh) &&\n isNumeric(coords.ys)) {\n var yw = yObj.width;\n\n path = 'M' + (coords.x - yw) + ',' +\n coords.yh + 'h' + (2 * yw) + // hat\n 'm-' + yw + ',0V' + coords.ys; // bar\n\n\n if(!coords.noYS) path += 'm-' + yw + ',0h' + (2 * yw); // shoe\n\n isNew = !yerror.size();\n\n if(isNew) {\n yerror = errorbar.append('path')\n .style('vector-effect', isStatic ? 'none' : 'non-scaling-stroke')\n .classed('yerror', true);\n } else if(hasAnimation) {\n yerror = yerror\n .transition()\n .duration(transitionOpts.duration)\n .ease(transitionOpts.easing);\n }\n\n yerror.attr('d', path);\n } else yerror.remove();\n\n var xerror = errorbar.select('path.xerror');\n if(xObj.visible && isNumeric(coords.y) &&\n isNumeric(coords.xh) &&\n isNumeric(coords.xs)) {\n var xw = (xObj.copy_ystyle ? yObj : xObj).width;\n\n path = 'M' + coords.xh + ',' +\n (coords.y - xw) + 'v' + (2 * xw) + // hat\n 'm0,-' + xw + 'H' + coords.xs; // bar\n\n if(!coords.noXS) path += 'm0,-' + xw + 'v' + (2 * xw); // shoe\n\n isNew = !xerror.size();\n\n if(isNew) {\n xerror = errorbar.append('path')\n .style('vector-effect', isStatic ? 'none' : 'non-scaling-stroke')\n .classed('xerror', true);\n } else if(hasAnimation) {\n xerror = xerror\n .transition()\n .duration(transitionOpts.duration)\n .ease(transitionOpts.easing);\n }\n\n xerror.attr('d', path);\n } else xerror.remove();\n });\n });\n};\n\n// compute the coordinates of the error-bar objects\nfunction errorCoords(d, xa, ya) {\n var out = {\n x: xa.c2p(d.x),\n y: ya.c2p(d.y)\n };\n\n // calculate the error bar size and hat and shoe locations\n if(d.yh !== undefined) {\n out.yh = ya.c2p(d.yh);\n out.ys = ya.c2p(d.ys);\n\n // if the shoes go off-scale (ie log scale, error bars past zero)\n // clip the bar and hide the shoes\n if(!isNumeric(out.ys)) {\n out.noYS = true;\n out.ys = ya.c2p(d.ys, true);\n }\n }\n\n if(d.xh !== undefined) {\n out.xh = xa.c2p(d.xh);\n out.xs = xa.c2p(d.xs);\n\n if(!isNumeric(out.xs)) {\n out.noXS = true;\n out.xs = xa.c2p(d.xs, true);\n }\n }\n\n return out;\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Registry = require('../../registry');\n\nmodule.exports = function calc(gd) {\n var calcdata = gd.calcdata;\n var fullLayout = gd._fullLayout;\n\n function makeCoerceHoverInfo(trace) {\n return function(val) {\n return Lib.coerceHoverinfo({hoverinfo: val}, {_module: trace._module}, fullLayout);\n };\n }\n\n for(var i = 0; i < calcdata.length; i++) {\n var cd = calcdata[i];\n var trace = cd[0].trace;\n\n // don't include hover calc fields for pie traces\n // as calcdata items might be sorted by value and\n // won't match the data array order.\n if(Registry.traceIs(trace, 'pie-like')) continue;\n\n var fillFn = Registry.traceIs(trace, '2dMap') ? paste : Lib.fillArray;\n\n fillFn(trace.hoverinfo, cd, 'hi', makeCoerceHoverInfo(trace));\n\n if(trace.hovertemplate) fillFn(trace.hovertemplate, cd, 'ht');\n\n if(!trace.hoverlabel) continue;\n\n fillFn(trace.hoverlabel.bgcolor, cd, 'hbg');\n fillFn(trace.hoverlabel.bordercolor, cd, 'hbc');\n fillFn(trace.hoverlabel.font.size, cd, 'hts');\n fillFn(trace.hoverlabel.font.color, cd, 'htc');\n fillFn(trace.hoverlabel.font.family, cd, 'htf');\n fillFn(trace.hoverlabel.namelength, cd, 'hnl');\n fillFn(trace.hoverlabel.align, cd, 'hta');\n }\n};\n\nfunction paste(traceAttr, cd, cdAttr, fn) {\n fn = fn || Lib.identity;\n\n if(Array.isArray(traceAttr)) {\n cd[0][cdAttr] = fn(traceAttr);\n }\n}\n","'use strict';\n\nmodule.exports = require('../src/traces/bar');\n","'use strict';\n\nvar Registry = require('../../registry');\nvar Lib = require('../../lib');\n\nmodule.exports = {\n moduleType: 'component',\n name: 'annotations3d',\n\n schema: {\n subplots: {\n scene: {annotations: require('./attributes')}\n }\n },\n\n layoutAttributes: require('./attributes'),\n handleDefaults: require('./defaults'),\n includeBasePlot: includeGL3D,\n\n convert: require('./convert'),\n draw: require('./draw')\n};\n\nfunction includeGL3D(layoutIn, layoutOut) {\n var GL3D = Registry.subplotsRegistry.gl3d;\n if(!GL3D) return;\n\n var attrRegex = GL3D.attrRegex;\n\n var keys = Object.keys(layoutIn);\n for(var i = 0; i < keys.length; i++) {\n var k = keys[i];\n if(attrRegex.test(k) && (layoutIn[k].annotations || []).length) {\n Lib.pushUnique(layoutOut._basePlotModules, GL3D);\n Lib.pushUnique(layoutOut._subplots.gl3d, k);\n }\n }\n}\n","'use strict';\n\nvar parseSvgPath = require('parse-svg-path');\nvar round = require('@plotly/d3').round;\n\n/** Marker symbol definitions\n * users can specify markers either by number or name\n * add 100 (or '-open') and you get an open marker\n * open markers have no fill and use line color as the stroke color\n * add 200 (or '-dot') and you get a dot in the middle\n * add both and you get both\n */\n\n\nvar emptyPath = 'M0,0Z';\nvar sqrt2 = Math.sqrt(2);\nvar sqrt3 = Math.sqrt(3);\nvar PI = Math.PI;\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nmodule.exports = {\n circle: {\n n: 0,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n var circle = 'M' + rs + ',0A' + rs + ',' + rs + ' 0 1,1 0,-' + rs + 'A' + rs + ',' + rs + ' 0 0,1 ' + rs + ',0Z';\n return standoff ? align(angle, standoff, circle) : circle;\n }\n },\n square: {\n n: 1,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M' + rs + ',' + rs + 'H-' + rs + 'V-' + rs + 'H' + rs + 'Z');\n }\n },\n diamond: {\n n: 2,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rd = round(r * 1.3, 2);\n return align(angle, standoff, 'M' + rd + ',0L0,' + rd + 'L-' + rd + ',0L0,-' + rd + 'Z');\n }\n },\n cross: {\n n: 3,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rc = round(r * 0.4, 2);\n var rc2 = round(r * 1.2, 2);\n return align(angle, standoff, 'M' + rc2 + ',' + rc + 'H' + rc + 'V' + rc2 + 'H-' + rc +\n 'V' + rc + 'H-' + rc2 + 'V-' + rc + 'H-' + rc + 'V-' + rc2 +\n 'H' + rc + 'V-' + rc + 'H' + rc2 + 'Z');\n }\n },\n x: {\n n: 4,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r * 0.8 / sqrt2, 2);\n var ne = 'l' + rx + ',' + rx;\n var se = 'l' + rx + ',-' + rx;\n var sw = 'l-' + rx + ',-' + rx;\n var nw = 'l-' + rx + ',' + rx;\n return align(angle, standoff, 'M0,' + rx + ne + se + sw + se + sw + nw + sw + nw + ne + nw + ne + 'Z');\n }\n },\n 'triangle-up': {\n n: 5,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rt = round(r * 2 / sqrt3, 2);\n var r2 = round(r / 2, 2);\n var rs = round(r, 2);\n return align(angle, standoff, 'M-' + rt + ',' + r2 + 'H' + rt + 'L0,-' + rs + 'Z');\n }\n },\n 'triangle-down': {\n n: 6,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rt = round(r * 2 / sqrt3, 2);\n var r2 = round(r / 2, 2);\n var rs = round(r, 2);\n return align(angle, standoff, 'M-' + rt + ',-' + r2 + 'H' + rt + 'L0,' + rs + 'Z');\n }\n },\n 'triangle-left': {\n n: 7,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rt = round(r * 2 / sqrt3, 2);\n var r2 = round(r / 2, 2);\n var rs = round(r, 2);\n return align(angle, standoff, 'M' + r2 + ',-' + rt + 'V' + rt + 'L-' + rs + ',0Z');\n }\n },\n 'triangle-right': {\n n: 8,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rt = round(r * 2 / sqrt3, 2);\n var r2 = round(r / 2, 2);\n var rs = round(r, 2);\n return align(angle, standoff, 'M-' + r2 + ',-' + rt + 'V' + rt + 'L' + rs + ',0Z');\n }\n },\n 'triangle-ne': {\n n: 9,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var r1 = round(r * 0.6, 2);\n var r2 = round(r * 1.2, 2);\n return align(angle, standoff, 'M-' + r2 + ',-' + r1 + 'H' + r1 + 'V' + r2 + 'Z');\n }\n },\n 'triangle-se': {\n n: 10,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var r1 = round(r * 0.6, 2);\n var r2 = round(r * 1.2, 2);\n return align(angle, standoff, 'M' + r1 + ',-' + r2 + 'V' + r1 + 'H-' + r2 + 'Z');\n }\n },\n 'triangle-sw': {\n n: 11,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var r1 = round(r * 0.6, 2);\n var r2 = round(r * 1.2, 2);\n return align(angle, standoff, 'M' + r2 + ',' + r1 + 'H-' + r1 + 'V-' + r2 + 'Z');\n }\n },\n 'triangle-nw': {\n n: 12,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var r1 = round(r * 0.6, 2);\n var r2 = round(r * 1.2, 2);\n return align(angle, standoff, 'M-' + r1 + ',' + r2 + 'V-' + r1 + 'H' + r2 + 'Z');\n }\n },\n pentagon: {\n n: 13,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x1 = round(r * 0.951, 2);\n var x2 = round(r * 0.588, 2);\n var y0 = round(-r, 2);\n var y1 = round(r * -0.309, 2);\n var y2 = round(r * 0.809, 2);\n return align(angle, standoff, 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2 + 'H-' + x2 +\n 'L-' + x1 + ',' + y1 + 'L0,' + y0 + 'Z');\n }\n },\n hexagon: {\n n: 14,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var y0 = round(r, 2);\n var y1 = round(r / 2, 2);\n var x = round(r * sqrt3 / 2, 2);\n return align(angle, standoff, 'M' + x + ',-' + y1 + 'V' + y1 + 'L0,' + y0 +\n 'L-' + x + ',' + y1 + 'V-' + y1 + 'L0,-' + y0 + 'Z');\n }\n },\n hexagon2: {\n n: 15,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x0 = round(r, 2);\n var x1 = round(r / 2, 2);\n var y = round(r * sqrt3 / 2, 2);\n return align(angle, standoff, 'M-' + x1 + ',' + y + 'H' + x1 + 'L' + x0 +\n ',0L' + x1 + ',-' + y + 'H-' + x1 + 'L-' + x0 + ',0Z');\n }\n },\n octagon: {\n n: 16,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var a = round(r * 0.924, 2);\n var b = round(r * 0.383, 2);\n return align(angle, standoff, 'M-' + b + ',-' + a + 'H' + b + 'L' + a + ',-' + b + 'V' + b +\n 'L' + b + ',' + a + 'H-' + b + 'L-' + a + ',' + b + 'V-' + b + 'Z');\n }\n },\n star: {\n n: 17,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = r * 1.4;\n var x1 = round(rs * 0.225, 2);\n var x2 = round(rs * 0.951, 2);\n var x3 = round(rs * 0.363, 2);\n var x4 = round(rs * 0.588, 2);\n var y0 = round(-rs, 2);\n var y1 = round(rs * -0.309, 2);\n var y3 = round(rs * 0.118, 2);\n var y4 = round(rs * 0.809, 2);\n var y5 = round(rs * 0.382, 2);\n return align(angle, standoff, 'M' + x1 + ',' + y1 + 'H' + x2 + 'L' + x3 + ',' + y3 +\n 'L' + x4 + ',' + y4 + 'L0,' + y5 + 'L-' + x4 + ',' + y4 +\n 'L-' + x3 + ',' + y3 + 'L-' + x2 + ',' + y1 + 'H-' + x1 +\n 'L0,' + y0 + 'Z');\n }\n },\n hexagram: {\n n: 18,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var y = round(r * 0.66, 2);\n var x1 = round(r * 0.38, 2);\n var x2 = round(r * 0.76, 2);\n return align(angle, standoff, 'M-' + x2 + ',0l-' + x1 + ',-' + y + 'h' + x2 +\n 'l' + x1 + ',-' + y + 'l' + x1 + ',' + y + 'h' + x2 +\n 'l-' + x1 + ',' + y + 'l' + x1 + ',' + y + 'h-' + x2 +\n 'l-' + x1 + ',' + y + 'l-' + x1 + ',-' + y + 'h-' + x2 + 'Z');\n }\n },\n 'star-triangle-up': {\n n: 19,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * sqrt3 * 0.8, 2);\n var y1 = round(r * 0.8, 2);\n var y2 = round(r * 1.6, 2);\n var rc = round(r * 4, 2);\n var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 ';\n return align(angle, standoff, 'M-' + x + ',' + y1 + aPart + x + ',' + y1 +\n aPart + '0,-' + y2 + aPart + '-' + x + ',' + y1 + 'Z');\n }\n },\n 'star-triangle-down': {\n n: 20,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * sqrt3 * 0.8, 2);\n var y1 = round(r * 0.8, 2);\n var y2 = round(r * 1.6, 2);\n var rc = round(r * 4, 2);\n var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 ';\n return align(angle, standoff, 'M' + x + ',-' + y1 + aPart + '-' + x + ',-' + y1 +\n aPart + '0,' + y2 + aPart + x + ',-' + y1 + 'Z');\n }\n },\n 'star-square': {\n n: 21,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rp = round(r * 1.1, 2);\n var rc = round(r * 2, 2);\n var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 ';\n return align(angle, standoff, 'M-' + rp + ',-' + rp + aPart + '-' + rp + ',' + rp +\n aPart + rp + ',' + rp + aPart + rp + ',-' + rp +\n aPart + '-' + rp + ',-' + rp + 'Z');\n }\n },\n 'star-diamond': {\n n: 22,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rp = round(r * 1.4, 2);\n var rc = round(r * 1.9, 2);\n var aPart = 'A ' + rc + ',' + rc + ' 0 0 1 ';\n return align(angle, standoff, 'M-' + rp + ',0' + aPart + '0,' + rp +\n aPart + rp + ',0' + aPart + '0,-' + rp +\n aPart + '-' + rp + ',0' + 'Z');\n }\n },\n 'diamond-tall': {\n n: 23,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * 0.7, 2);\n var y = round(r * 1.4, 2);\n return align(angle, standoff, 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z');\n }\n },\n 'diamond-wide': {\n n: 24,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * 1.4, 2);\n var y = round(r * 0.7, 2);\n return align(angle, standoff, 'M0,' + y + 'L' + x + ',0L0,-' + y + 'L-' + x + ',0Z');\n }\n },\n hourglass: {\n n: 25,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M' + rs + ',' + rs + 'H-' + rs + 'L' + rs + ',-' + rs + 'H-' + rs + 'Z');\n },\n noDot: true\n },\n bowtie: {\n n: 26,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M' + rs + ',' + rs + 'V-' + rs + 'L-' + rs + ',' + rs + 'V-' + rs + 'Z');\n },\n noDot: true\n },\n 'circle-cross': {\n n: 27,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M0,' + rs + 'V-' + rs + 'M' + rs + ',0H-' + rs +\n 'M' + rs + ',0A' + rs + ',' + rs + ' 0 1,1 0,-' + rs +\n 'A' + rs + ',' + rs + ' 0 0,1 ' + rs + ',0Z');\n },\n needLine: true,\n noDot: true\n },\n 'circle-x': {\n n: 28,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n var rc = round(r / sqrt2, 2);\n return align(angle, standoff, 'M' + rc + ',' + rc + 'L-' + rc + ',-' + rc +\n 'M' + rc + ',-' + rc + 'L-' + rc + ',' + rc +\n 'M' + rs + ',0A' + rs + ',' + rs + ' 0 1,1 0,-' + rs +\n 'A' + rs + ',' + rs + ' 0 0,1 ' + rs + ',0Z');\n },\n needLine: true,\n noDot: true\n },\n 'square-cross': {\n n: 29,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M0,' + rs + 'V-' + rs + 'M' + rs + ',0H-' + rs +\n 'M' + rs + ',' + rs + 'H-' + rs + 'V-' + rs + 'H' + rs + 'Z');\n },\n needLine: true,\n noDot: true\n },\n 'square-x': {\n n: 30,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rs = round(r, 2);\n return align(angle, standoff, 'M' + rs + ',' + rs + 'L-' + rs + ',-' + rs +\n 'M' + rs + ',-' + rs + 'L-' + rs + ',' + rs +\n 'M' + rs + ',' + rs + 'H-' + rs + 'V-' + rs + 'H' + rs + 'Z');\n },\n needLine: true,\n noDot: true\n },\n 'diamond-cross': {\n n: 31,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rd = round(r * 1.3, 2);\n return align(angle, standoff, 'M' + rd + ',0L0,' + rd + 'L-' + rd + ',0L0,-' + rd + 'Z' +\n 'M0,-' + rd + 'V' + rd + 'M-' + rd + ',0H' + rd);\n },\n needLine: true,\n noDot: true\n },\n 'diamond-x': {\n n: 32,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rd = round(r * 1.3, 2);\n var r2 = round(r * 0.65, 2);\n return align(angle, standoff, 'M' + rd + ',0L0,' + rd + 'L-' + rd + ',0L0,-' + rd + 'Z' +\n 'M-' + r2 + ',-' + r2 + 'L' + r2 + ',' + r2 +\n 'M-' + r2 + ',' + r2 + 'L' + r2 + ',-' + r2);\n },\n needLine: true,\n noDot: true\n },\n 'cross-thin': {\n n: 33,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rc = round(r * 1.4, 2);\n return align(angle, standoff, 'M0,' + rc + 'V-' + rc + 'M' + rc + ',0H-' + rc);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'x-thin': {\n n: 34,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n return align(angle, standoff, 'M' + rx + ',' + rx + 'L-' + rx + ',-' + rx +\n 'M' + rx + ',-' + rx + 'L-' + rx + ',' + rx);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n asterisk: {\n n: 35,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rc = round(r * 1.2, 2);\n var rs = round(r * 0.85, 2);\n return align(angle, standoff, 'M0,' + rc + 'V-' + rc + 'M' + rc + ',0H-' + rc +\n 'M' + rs + ',' + rs + 'L-' + rs + ',-' + rs +\n 'M' + rs + ',-' + rs + 'L-' + rs + ',' + rs);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n hash: {\n n: 36,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var r1 = round(r / 2, 2);\n var r2 = round(r, 2);\n\n return align(angle, standoff, 'M' + r1 + ',' + r2 + 'V-' + r2 +\n 'M' + (r1 - r2) + ',-' + r2 + 'V' + r2 +\n 'M' + r2 + ',' + r1 + 'H-' + r2 +\n 'M-' + r2 + ',' + (r1 - r2) + 'H' + r2);\n },\n needLine: true,\n noFill: true\n },\n 'y-up': {\n n: 37,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * 1.2, 2);\n var y0 = round(r * 1.6, 2);\n var y1 = round(r * 0.8, 2);\n return align(angle, standoff, 'M-' + x + ',' + y1 + 'L0,0M' + x + ',' + y1 + 'L0,0M0,-' + y0 + 'L0,0');\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'y-down': {\n n: 38,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var x = round(r * 1.2, 2);\n var y0 = round(r * 1.6, 2);\n var y1 = round(r * 0.8, 2);\n return align(angle, standoff, 'M-' + x + ',-' + y1 + 'L0,0M' + x + ',-' + y1 + 'L0,0M0,' + y0 + 'L0,0');\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'y-left': {\n n: 39,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var y = round(r * 1.2, 2);\n var x0 = round(r * 1.6, 2);\n var x1 = round(r * 0.8, 2);\n return align(angle, standoff, 'M' + x1 + ',' + y + 'L0,0M' + x1 + ',-' + y + 'L0,0M-' + x0 + ',0L0,0');\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'y-right': {\n n: 40,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var y = round(r * 1.2, 2);\n var x0 = round(r * 1.6, 2);\n var x1 = round(r * 0.8, 2);\n return align(angle, standoff, 'M-' + x1 + ',' + y + 'L0,0M-' + x1 + ',-' + y + 'L0,0M' + x0 + ',0L0,0');\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'line-ew': {\n n: 41,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rc = round(r * 1.4, 2);\n return align(angle, standoff, 'M' + rc + ',0H-' + rc);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'line-ns': {\n n: 42,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rc = round(r * 1.4, 2);\n return align(angle, standoff, 'M0,' + rc + 'V-' + rc);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'line-ne': {\n n: 43,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n return align(angle, standoff, 'M' + rx + ',-' + rx + 'L-' + rx + ',' + rx);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'line-nw': {\n n: 44,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n return align(angle, standoff, 'M' + rx + ',' + rx + 'L-' + rx + ',-' + rx);\n },\n needLine: true,\n noDot: true,\n noFill: true\n },\n 'arrow-up': {\n n: 45,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n var ry = round(r * 2, 2);\n return align(angle, standoff, 'M0,0L-' + rx + ',' + ry + 'H' + rx + 'Z');\n },\n backoff: 1,\n noDot: true\n },\n 'arrow-down': {\n n: 46,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n var ry = round(r * 2, 2);\n return align(angle, standoff, 'M0,0L-' + rx + ',-' + ry + 'H' + rx + 'Z');\n },\n noDot: true\n },\n 'arrow-left': {\n n: 47,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r * 2, 2);\n var ry = round(r, 2);\n return align(angle, standoff, 'M0,0L' + rx + ',-' + ry + 'V' + ry + 'Z');\n },\n noDot: true\n },\n 'arrow-right': {\n n: 48,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r * 2, 2);\n var ry = round(r, 2);\n return align(angle, standoff, 'M0,0L-' + rx + ',-' + ry + 'V' + ry + 'Z');\n },\n noDot: true\n },\n 'arrow-bar-up': {\n n: 49,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n var ry = round(r * 2, 2);\n return align(angle, standoff, 'M-' + rx + ',0H' + rx + 'M0,0L-' + rx + ',' + ry + 'H' + rx + 'Z');\n },\n backoff: 1,\n needLine: true,\n noDot: true\n },\n 'arrow-bar-down': {\n n: 50,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r, 2);\n var ry = round(r * 2, 2);\n return align(angle, standoff, 'M-' + rx + ',0H' + rx + 'M0,0L-' + rx + ',-' + ry + 'H' + rx + 'Z');\n },\n needLine: true,\n noDot: true\n },\n 'arrow-bar-left': {\n n: 51,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r * 2, 2);\n var ry = round(r, 2);\n return align(angle, standoff, 'M0,-' + ry + 'V' + ry + 'M0,0L' + rx + ',-' + ry + 'V' + ry + 'Z');\n },\n needLine: true,\n noDot: true\n },\n 'arrow-bar-right': {\n n: 52,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var rx = round(r * 2, 2);\n var ry = round(r, 2);\n return align(angle, standoff, 'M0,-' + ry + 'V' + ry + 'M0,0L-' + rx + ',-' + ry + 'V' + ry + 'Z');\n },\n needLine: true,\n noDot: true\n },\n arrow: {\n n: 53,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var headAngle = PI / 2.5; // 36 degrees - golden ratio\n var x = 2 * r * cos(headAngle);\n var y = 2 * r * sin(headAngle);\n\n return align(angle, standoff,\n 'M0,0' +\n 'L' + -x + ',' + y +\n 'L' + x + ',' + y +\n 'Z'\n );\n },\n backoff: 0.9,\n noDot: true\n },\n 'arrow-wide': {\n n: 54,\n f: function(r, angle, standoff) {\n if(skipAngle(angle)) return emptyPath;\n\n var headAngle = PI / 4; // 90 degrees\n var x = 2 * r * cos(headAngle);\n var y = 2 * r * sin(headAngle);\n\n return align(angle, standoff,\n 'M0,0' +\n 'L' + -x + ',' + y +\n 'A ' + 2 * r + ',' + 2 * r + ' 0 0 1 ' + x + ',' + y +\n 'Z'\n );\n },\n backoff: 0.4,\n noDot: true\n }\n};\n\nfunction skipAngle(angle) {\n return angle === null;\n}\n\nvar lastPathIn, lastPathOut;\nvar lastAngle, lastStandoff;\n\nfunction align(angle, standoff, path) {\n if((!angle || angle % 360 === 0) && !standoff) return path;\n\n if(\n lastAngle === angle &&\n lastStandoff === standoff &&\n lastPathIn === path\n ) return lastPathOut;\n\n lastAngle = angle;\n lastStandoff = standoff;\n lastPathIn = path;\n\n function rotate(t, xy) {\n var cosT = cos(t);\n var sinT = sin(t);\n\n var x = xy[0];\n var y = xy[1] + (standoff || 0);\n return [\n x * cosT - y * sinT,\n x * sinT + y * cosT\n ];\n }\n\n var t = angle / 180 * PI;\n\n var x = 0;\n var y = 0;\n var cmd = parseSvgPath(path);\n var str = '';\n\n for(var i = 0; i < cmd.length; i++) {\n var cmdI = cmd[i];\n var op = cmdI[0];\n\n var x0 = x;\n var y0 = y;\n\n if(op === 'M' || op === 'L') {\n x = +cmdI[1];\n y = +cmdI[2];\n } else if(op === 'm' || op === 'l') {\n x += +cmdI[1];\n y += +cmdI[2];\n } else if(op === 'H') {\n x = +cmdI[1];\n } else if(op === 'h') {\n x += +cmdI[1];\n } else if(op === 'V') {\n y = +cmdI[1];\n } else if(op === 'v') {\n y += +cmdI[1];\n } else if(op === 'A') {\n x = +cmdI[1];\n y = +cmdI[2];\n\n var E = rotate(t, [+cmdI[6], +cmdI[7]]);\n cmdI[6] = E[0];\n cmdI[7] = E[1];\n cmdI[3] = +cmdI[3] + angle;\n }\n\n // change from H, V, h, v to L or l\n if(op === 'H' || op === 'V') op = 'L';\n if(op === 'h' || op === 'v') op = 'l';\n\n if(op === 'm' || op === 'l') {\n x -= x0;\n y -= y0;\n }\n\n var B = rotate(t, [x, y]);\n\n if(op === 'H' || op === 'V') op = 'L';\n\n\n if(\n op === 'M' || op === 'L' ||\n op === 'm' || op === 'l'\n ) {\n cmdI[1] = B[0];\n cmdI[2] = B[1];\n }\n cmdI[0] = op;\n\n str += cmdI[0] + cmdI.slice(1).join(',');\n }\n\n lastPathOut = str;\n\n return str;\n}\n","'use strict';\n\nvar Lib = require('../src/lib');\nvar rules = {\n \"X,X div\": \"direction:ltr;font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;margin:0;padding:0;\",\n \"X input,X button\": \"font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;\",\n \"X input:focus,X button:focus\": \"outline:none;\",\n \"X a\": \"text-decoration:none;\",\n \"X a:hover\": \"text-decoration:none;\",\n \"X .crisp\": \"shape-rendering:crispEdges;\",\n \"X .user-select-none\": \"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\n \"X svg\": \"overflow:hidden;\",\n \"X svg a\": \"fill:#447adb;\",\n \"X svg a:hover\": \"fill:#3c6dc5;\",\n \"X .main-svg\": \"position:absolute;top:0;left:0;pointer-events:none;\",\n \"X .main-svg .draglayer\": \"pointer-events:all;\",\n \"X .cursor-default\": \"cursor:default;\",\n \"X .cursor-pointer\": \"cursor:pointer;\",\n \"X .cursor-crosshair\": \"cursor:crosshair;\",\n \"X .cursor-move\": \"cursor:move;\",\n \"X .cursor-col-resize\": \"cursor:col-resize;\",\n \"X .cursor-row-resize\": \"cursor:row-resize;\",\n \"X .cursor-ns-resize\": \"cursor:ns-resize;\",\n \"X .cursor-ew-resize\": \"cursor:ew-resize;\",\n \"X .cursor-sw-resize\": \"cursor:sw-resize;\",\n \"X .cursor-s-resize\": \"cursor:s-resize;\",\n \"X .cursor-se-resize\": \"cursor:se-resize;\",\n \"X .cursor-w-resize\": \"cursor:w-resize;\",\n \"X .cursor-e-resize\": \"cursor:e-resize;\",\n \"X .cursor-nw-resize\": \"cursor:nw-resize;\",\n \"X .cursor-n-resize\": \"cursor:n-resize;\",\n \"X .cursor-ne-resize\": \"cursor:ne-resize;\",\n \"X .cursor-grab\": \"cursor:-webkit-grab;cursor:grab;\",\n \"X .modebar\": \"position:absolute;top:2px;right:2px;\",\n \"X .ease-bg\": \"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\",\n \"X .modebar--hover>:not(.watermark)\": \"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\",\n \"X:hover .modebar--hover .modebar-group\": \"opacity:1;\",\n \"X .modebar-group\": \"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\n \"X .modebar-btn\": \"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\",\n \"X .modebar-btn svg\": \"position:relative;top:2px;\",\n \"X .modebar.vertical\": \"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\n \"X .modebar.vertical svg\": \"top:-1px;\",\n \"X .modebar.vertical .modebar-group\": \"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\n \"X .modebar.vertical .modebar-group .modebar-btn\": \"display:block;text-align:center;\",\n \"X [data-title]:before,X [data-title]:after\": \"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\n \"X [data-title]:hover:before,X [data-title]:hover:after\": \"display:block;opacity:1;\",\n \"X [data-title]:before\": \"content:\\\"\\\";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;\",\n \"X [data-title]:after\": \"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\n \"X .vertical [data-title]:before,X .vertical [data-title]:after\": \"top:0%;right:200%;\",\n \"X .vertical [data-title]:before\": \"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",\n Y: \"font-family:\\\"Open Sans\\\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;\",\n \"Y p\": \"margin:0;\",\n \"Y .notifier-note\": \"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\n \"Y .notifier-close\": \"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\n \"Y .notifier-close:hover\": \"color:#444;text-decoration:none;cursor:pointer;\"\n};\n\nfor(var selector in rules) {\n var fullSelector = selector.replace(/^,/,' ,')\n .replace(/X/g, '.js-plotly-plot .plotly')\n .replace(/Y/g, '.plotly-notifier');\n Lib.addStyleRule(fullSelector, rules[selector]);\n}\n","'use strict';\n\nvar Registry = require('../../registry');\nvar Plots = require('../../plots/plots');\nvar axisIds = require('../../plots/cartesian/axis_ids');\nvar Icons = require('../../fonts/ploticon');\nvar eraseActiveShape = require('../shapes/draw').eraseActiveShape;\nvar Lib = require('../../lib');\nvar _ = Lib._;\n\nvar modeBarButtons = module.exports = {};\n\n/**\n * ModeBar buttons configuration\n *\n * @param {string} name\n * name / id of the buttons (for tracking)\n * @param {string} title\n * text that appears while hovering over the button,\n * enter null, false or '' for no hover text\n * @param {string} icon\n * svg icon object associated with the button\n * can be linked to Plotly.Icons to use the default plotly icons\n * @param {string} [gravity]\n * icon positioning\n * @param {function} click\n * click handler associated with the button, a function of\n * 'gd' (the main graph object) and\n * 'ev' (the event object)\n * @param {string} [attr]\n * attribute associated with button,\n * use this with 'val' to keep track of the state\n * @param {*} [val]\n * initial 'attr' value, can be a function of gd\n * @param {boolean} [toggle]\n * is the button a toggle button?\n */\nmodeBarButtons.toImage = {\n name: 'toImage',\n title: function(gd) {\n var opts = gd._context.toImageButtonOptions || {};\n var format = opts.format || 'png';\n return format === 'png' ?\n _(gd, 'Download plot as a png') : // legacy text\n _(gd, 'Download plot'); // generic non-PNG text\n },\n icon: Icons.camera,\n click: function(gd) {\n var toImageButtonOptions = gd._context.toImageButtonOptions;\n var opts = {format: toImageButtonOptions.format || 'png'};\n\n Lib.notifier(_(gd, 'Taking snapshot - this may take a few seconds'), 'long');\n\n if(opts.format !== 'svg' && Lib.isIE()) {\n Lib.notifier(_(gd, 'IE only supports svg. Changing format to svg.'), 'long');\n opts.format = 'svg';\n }\n\n ['filename', 'width', 'height', 'scale'].forEach(function(key) {\n if(key in toImageButtonOptions) {\n opts[key] = toImageButtonOptions[key];\n }\n });\n\n Registry.call('downloadImage', gd, opts)\n .then(function(filename) {\n Lib.notifier(_(gd, 'Snapshot succeeded') + ' - ' + filename, 'long');\n })\n .catch(function() {\n Lib.notifier(_(gd, 'Sorry, there was a problem downloading your snapshot!'), 'long');\n });\n }\n};\n\nmodeBarButtons.sendDataToCloud = {\n name: 'sendDataToCloud',\n title: function(gd) { return _(gd, 'Edit in Chart Studio'); },\n icon: Icons.disk,\n click: function(gd) {\n Plots.sendDataToCloud(gd);\n }\n};\n\nmodeBarButtons.editInChartStudio = {\n name: 'editInChartStudio',\n title: function(gd) { return _(gd, 'Edit in Chart Studio'); },\n icon: Icons.pencil,\n click: function(gd) {\n Plots.sendDataToCloud(gd);\n }\n};\n\nmodeBarButtons.zoom2d = {\n name: 'zoom2d',\n _cat: 'zoom',\n title: function(gd) { return _(gd, 'Zoom'); },\n attr: 'dragmode',\n val: 'zoom',\n icon: Icons.zoombox,\n click: handleCartesian\n};\n\nmodeBarButtons.pan2d = {\n name: 'pan2d',\n _cat: 'pan',\n title: function(gd) { return _(gd, 'Pan'); },\n attr: 'dragmode',\n val: 'pan',\n icon: Icons.pan,\n click: handleCartesian\n};\n\nmodeBarButtons.select2d = {\n name: 'select2d',\n _cat: 'select',\n title: function(gd) { return _(gd, 'Box Select'); },\n attr: 'dragmode',\n val: 'select',\n icon: Icons.selectbox,\n click: handleCartesian\n};\n\nmodeBarButtons.lasso2d = {\n name: 'lasso2d',\n _cat: 'lasso',\n title: function(gd) { return _(gd, 'Lasso Select'); },\n attr: 'dragmode',\n val: 'lasso',\n icon: Icons.lasso,\n click: handleCartesian\n};\n\nmodeBarButtons.drawclosedpath = {\n name: 'drawclosedpath',\n title: function(gd) { return _(gd, 'Draw closed freeform'); },\n attr: 'dragmode',\n val: 'drawclosedpath',\n icon: Icons.drawclosedpath,\n click: handleCartesian\n};\n\nmodeBarButtons.drawopenpath = {\n name: 'drawopenpath',\n title: function(gd) { return _(gd, 'Draw open freeform'); },\n attr: 'dragmode',\n val: 'drawopenpath',\n icon: Icons.drawopenpath,\n click: handleCartesian\n};\n\nmodeBarButtons.drawline = {\n name: 'drawline',\n title: function(gd) { return _(gd, 'Draw line'); },\n attr: 'dragmode',\n val: 'drawline',\n icon: Icons.drawline,\n click: handleCartesian\n};\n\nmodeBarButtons.drawrect = {\n name: 'drawrect',\n title: function(gd) { return _(gd, 'Draw rectangle'); },\n attr: 'dragmode',\n val: 'drawrect',\n icon: Icons.drawrect,\n click: handleCartesian\n};\n\nmodeBarButtons.drawcircle = {\n name: 'drawcircle',\n title: function(gd) { return _(gd, 'Draw circle'); },\n attr: 'dragmode',\n val: 'drawcircle',\n icon: Icons.drawcircle,\n click: handleCartesian\n};\n\nmodeBarButtons.eraseshape = {\n name: 'eraseshape',\n title: function(gd) { return _(gd, 'Erase active shape'); },\n icon: Icons.eraseshape,\n click: eraseActiveShape\n};\n\nmodeBarButtons.zoomIn2d = {\n name: 'zoomIn2d',\n _cat: 'zoomin',\n title: function(gd) { return _(gd, 'Zoom in'); },\n attr: 'zoom',\n val: 'in',\n icon: Icons.zoom_plus,\n click: handleCartesian\n};\n\nmodeBarButtons.zoomOut2d = {\n name: 'zoomOut2d',\n _cat: 'zoomout',\n title: function(gd) { return _(gd, 'Zoom out'); },\n attr: 'zoom',\n val: 'out',\n icon: Icons.zoom_minus,\n click: handleCartesian\n};\n\nmodeBarButtons.autoScale2d = {\n name: 'autoScale2d',\n _cat: 'autoscale',\n title: function(gd) { return _(gd, 'Autoscale'); },\n attr: 'zoom',\n val: 'auto',\n icon: Icons.autoscale,\n click: handleCartesian\n};\n\nmodeBarButtons.resetScale2d = {\n name: 'resetScale2d',\n _cat: 'resetscale',\n title: function(gd) { return _(gd, 'Reset axes'); },\n attr: 'zoom',\n val: 'reset',\n icon: Icons.home,\n click: handleCartesian\n};\n\nmodeBarButtons.hoverClosestCartesian = {\n name: 'hoverClosestCartesian',\n _cat: 'hoverclosest',\n title: function(gd) { return _(gd, 'Show closest data on hover'); },\n attr: 'hovermode',\n val: 'closest',\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: handleCartesian\n};\n\nmodeBarButtons.hoverCompareCartesian = {\n name: 'hoverCompareCartesian',\n _cat: 'hoverCompare',\n title: function(gd) { return _(gd, 'Compare data on hover'); },\n attr: 'hovermode',\n val: function(gd) {\n return gd._fullLayout._isHoriz ? 'y' : 'x';\n },\n icon: Icons.tooltip_compare,\n gravity: 'ne',\n click: handleCartesian\n};\n\nfunction handleCartesian(gd, ev) {\n var button = ev.currentTarget;\n var astr = button.getAttribute('data-attr');\n var val = button.getAttribute('data-val') || true;\n var fullLayout = gd._fullLayout;\n var aobj = {};\n var axList = axisIds.list(gd, null, true);\n var allSpikesEnabled = fullLayout._cartesianSpikesEnabled;\n\n var ax, i;\n\n if(astr === 'zoom') {\n var mag = (val === 'in') ? 0.5 : 2;\n var r0 = (1 + mag) / 2;\n var r1 = (1 - mag) / 2;\n var axName;\n\n for(i = 0; i < axList.length; i++) {\n ax = axList[i];\n\n if(!ax.fixedrange) {\n axName = ax._name;\n if(val === 'auto') {\n aobj[axName + '.autorange'] = true;\n } else if(val === 'reset') {\n if(ax._rangeInitial0 === undefined && ax._rangeInitial1 === undefined) {\n aobj[axName + '.autorange'] = true;\n } else if(ax._rangeInitial0 === undefined) {\n aobj[axName + '.autorange'] = ax._autorangeInitial;\n aobj[axName + '.range'] = [null, ax._rangeInitial1];\n } else if(ax._rangeInitial1 === undefined) {\n aobj[axName + '.range'] = [ax._rangeInitial0, null];\n aobj[axName + '.autorange'] = ax._autorangeInitial;\n } else {\n aobj[axName + '.range'] = [ax._rangeInitial0, ax._rangeInitial1];\n }\n\n // N.B. \"reset\" also resets showspikes\n if(ax._showSpikeInitial !== undefined) {\n aobj[axName + '.showspikes'] = ax._showSpikeInitial;\n if(allSpikesEnabled === 'on' && !ax._showSpikeInitial) {\n allSpikesEnabled = 'off';\n }\n }\n } else {\n var rangeNow = [\n ax.r2l(ax.range[0]),\n ax.r2l(ax.range[1]),\n ];\n\n var rangeNew = [\n r0 * rangeNow[0] + r1 * rangeNow[1],\n r0 * rangeNow[1] + r1 * rangeNow[0]\n ];\n\n aobj[axName + '.range[0]'] = ax.l2r(rangeNew[0]);\n aobj[axName + '.range[1]'] = ax.l2r(rangeNew[1]);\n }\n }\n }\n } else {\n // if ALL traces have orientation 'h', 'hovermode': 'x' otherwise: 'y'\n if(astr === 'hovermode' && (val === 'x' || val === 'y')) {\n val = fullLayout._isHoriz ? 'y' : 'x';\n button.setAttribute('data-val', val);\n }\n\n aobj[astr] = val;\n }\n\n fullLayout._cartesianSpikesEnabled = allSpikesEnabled;\n\n Registry.call('_guiRelayout', gd, aobj);\n}\n\nmodeBarButtons.zoom3d = {\n name: 'zoom3d',\n _cat: 'zoom',\n title: function(gd) { return _(gd, 'Zoom'); },\n attr: 'scene.dragmode',\n val: 'zoom',\n icon: Icons.zoombox,\n click: handleDrag3d\n};\n\nmodeBarButtons.pan3d = {\n name: 'pan3d',\n _cat: 'pan',\n title: function(gd) { return _(gd, 'Pan'); },\n attr: 'scene.dragmode',\n val: 'pan',\n icon: Icons.pan,\n click: handleDrag3d\n};\n\nmodeBarButtons.orbitRotation = {\n name: 'orbitRotation',\n title: function(gd) { return _(gd, 'Orbital rotation'); },\n attr: 'scene.dragmode',\n val: 'orbit',\n icon: Icons['3d_rotate'],\n click: handleDrag3d\n};\n\nmodeBarButtons.tableRotation = {\n name: 'tableRotation',\n title: function(gd) { return _(gd, 'Turntable rotation'); },\n attr: 'scene.dragmode',\n val: 'turntable',\n icon: Icons['z-axis'],\n click: handleDrag3d\n};\n\nfunction handleDrag3d(gd, ev) {\n var button = ev.currentTarget;\n var attr = button.getAttribute('data-attr');\n var val = button.getAttribute('data-val') || true;\n var sceneIds = gd._fullLayout._subplots.gl3d || [];\n var layoutUpdate = {};\n\n var parts = attr.split('.');\n\n for(var i = 0; i < sceneIds.length; i++) {\n layoutUpdate[sceneIds[i] + '.' + parts[1]] = val;\n }\n\n // for multi-type subplots\n var val2d = (val === 'pan') ? val : 'zoom';\n layoutUpdate.dragmode = val2d;\n\n Registry.call('_guiRelayout', gd, layoutUpdate);\n}\n\nmodeBarButtons.resetCameraDefault3d = {\n name: 'resetCameraDefault3d',\n _cat: 'resetCameraDefault',\n title: function(gd) { return _(gd, 'Reset camera to default'); },\n attr: 'resetDefault',\n icon: Icons.home,\n click: handleCamera3d\n};\n\nmodeBarButtons.resetCameraLastSave3d = {\n name: 'resetCameraLastSave3d',\n _cat: 'resetCameraLastSave',\n title: function(gd) { return _(gd, 'Reset camera to last save'); },\n attr: 'resetLastSave',\n icon: Icons.movie,\n click: handleCamera3d\n};\n\nfunction handleCamera3d(gd, ev) {\n var button = ev.currentTarget;\n var attr = button.getAttribute('data-attr');\n var resetLastSave = attr === 'resetLastSave';\n var resetDefault = attr === 'resetDefault';\n\n var fullLayout = gd._fullLayout;\n var sceneIds = fullLayout._subplots.gl3d || [];\n var aobj = {};\n\n for(var i = 0; i < sceneIds.length; i++) {\n var sceneId = sceneIds[i];\n var camera = sceneId + '.camera';\n var aspectratio = sceneId + '.aspectratio';\n var aspectmode = sceneId + '.aspectmode';\n var scene = fullLayout[sceneId]._scene;\n var didUpdate;\n\n if(resetLastSave) {\n aobj[camera + '.up'] = scene.viewInitial.up;\n aobj[camera + '.eye'] = scene.viewInitial.eye;\n aobj[camera + '.center'] = scene.viewInitial.center;\n didUpdate = true;\n } else if(resetDefault) {\n aobj[camera + '.up'] = null;\n aobj[camera + '.eye'] = null;\n aobj[camera + '.center'] = null;\n didUpdate = true;\n }\n\n if(didUpdate) {\n aobj[aspectratio + '.x'] = scene.viewInitial.aspectratio.x;\n aobj[aspectratio + '.y'] = scene.viewInitial.aspectratio.y;\n aobj[aspectratio + '.z'] = scene.viewInitial.aspectratio.z;\n aobj[aspectmode] = scene.viewInitial.aspectmode;\n }\n }\n\n Registry.call('_guiRelayout', gd, aobj);\n}\n\nmodeBarButtons.hoverClosest3d = {\n name: 'hoverClosest3d',\n _cat: 'hoverclosest',\n title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },\n attr: 'hovermode',\n val: null,\n toggle: true,\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: handleHover3d\n};\n\nfunction getNextHover3d(gd, ev) {\n var button = ev.currentTarget;\n var val = button._previousVal;\n var fullLayout = gd._fullLayout;\n var sceneIds = fullLayout._subplots.gl3d || [];\n\n var axes = ['xaxis', 'yaxis', 'zaxis'];\n\n // initialize 'current spike' object to be stored in the DOM\n var currentSpikes = {};\n var layoutUpdate = {};\n\n if(val) {\n layoutUpdate = val;\n button._previousVal = null;\n } else {\n for(var i = 0; i < sceneIds.length; i++) {\n var sceneId = sceneIds[i];\n var sceneLayout = fullLayout[sceneId];\n\n var hovermodeAStr = sceneId + '.hovermode';\n currentSpikes[hovermodeAStr] = sceneLayout.hovermode;\n layoutUpdate[hovermodeAStr] = false;\n\n // copy all the current spike attrs\n for(var j = 0; j < 3; j++) {\n var axis = axes[j];\n var spikeAStr = sceneId + '.' + axis + '.showspikes';\n layoutUpdate[spikeAStr] = false;\n currentSpikes[spikeAStr] = sceneLayout[axis].showspikes;\n }\n }\n\n button._previousVal = currentSpikes;\n }\n return layoutUpdate;\n}\n\nfunction handleHover3d(gd, ev) {\n var layoutUpdate = getNextHover3d(gd, ev);\n Registry.call('_guiRelayout', gd, layoutUpdate);\n}\n\nmodeBarButtons.zoomInGeo = {\n name: 'zoomInGeo',\n _cat: 'zoomin',\n title: function(gd) { return _(gd, 'Zoom in'); },\n attr: 'zoom',\n val: 'in',\n icon: Icons.zoom_plus,\n click: handleGeo\n};\n\nmodeBarButtons.zoomOutGeo = {\n name: 'zoomOutGeo',\n _cat: 'zoomout',\n title: function(gd) { return _(gd, 'Zoom out'); },\n attr: 'zoom',\n val: 'out',\n icon: Icons.zoom_minus,\n click: handleGeo\n};\n\nmodeBarButtons.resetGeo = {\n name: 'resetGeo',\n _cat: 'reset',\n title: function(gd) { return _(gd, 'Reset'); },\n attr: 'reset',\n val: null,\n icon: Icons.autoscale,\n click: handleGeo\n};\n\nmodeBarButtons.hoverClosestGeo = {\n name: 'hoverClosestGeo',\n _cat: 'hoverclosest',\n title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },\n attr: 'hovermode',\n val: null,\n toggle: true,\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: toggleHover\n};\n\nfunction handleGeo(gd, ev) {\n var button = ev.currentTarget;\n var attr = button.getAttribute('data-attr');\n var val = button.getAttribute('data-val') || true;\n var fullLayout = gd._fullLayout;\n var geoIds = fullLayout._subplots.geo || [];\n\n for(var i = 0; i < geoIds.length; i++) {\n var id = geoIds[i];\n var geoLayout = fullLayout[id];\n\n if(attr === 'zoom') {\n var scale = geoLayout.projection.scale;\n var newScale = (val === 'in') ? 2 * scale : 0.5 * scale;\n\n Registry.call('_guiRelayout', gd, id + '.projection.scale', newScale);\n }\n }\n\n if(attr === 'reset') {\n resetView(gd, 'geo');\n }\n}\n\nmodeBarButtons.hoverClosestGl2d = {\n name: 'hoverClosestGl2d',\n _cat: 'hoverclosest',\n title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },\n attr: 'hovermode',\n val: null,\n toggle: true,\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: toggleHover\n};\n\nmodeBarButtons.hoverClosestPie = {\n name: 'hoverClosestPie',\n _cat: 'hoverclosest',\n title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },\n attr: 'hovermode',\n val: 'closest',\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: toggleHover\n};\n\nfunction getNextHover(gd) {\n var fullLayout = gd._fullLayout;\n\n if(fullLayout.hovermode) return false;\n\n if(fullLayout._has('cartesian')) {\n return fullLayout._isHoriz ? 'y' : 'x';\n }\n return 'closest';\n}\n\nfunction toggleHover(gd) {\n var newHover = getNextHover(gd);\n Registry.call('_guiRelayout', gd, 'hovermode', newHover);\n}\n\nmodeBarButtons.resetViewSankey = {\n name: 'resetSankeyGroup',\n title: function(gd) { return _(gd, 'Reset view'); },\n icon: Icons.home,\n click: function(gd) {\n var aObj = {\n 'node.groups': [],\n 'node.x': [],\n 'node.y': []\n };\n for(var i = 0; i < gd._fullData.length; i++) {\n var viewInitial = gd._fullData[i]._viewInitial;\n aObj['node.groups'].push(viewInitial.node.groups.slice());\n aObj['node.x'].push(viewInitial.node.x.slice());\n aObj['node.y'].push(viewInitial.node.y.slice());\n }\n Registry.call('restyle', gd, aObj);\n }\n};\n\n// buttons when more then one plot types are present\n\nmodeBarButtons.toggleHover = {\n name: 'toggleHover',\n title: function(gd) { return _(gd, 'Toggle show closest data on hover'); },\n attr: 'hovermode',\n val: null,\n toggle: true,\n icon: Icons.tooltip_basic,\n gravity: 'ne',\n click: function(gd, ev) {\n var layoutUpdate = getNextHover3d(gd, ev);\n layoutUpdate.hovermode = getNextHover(gd);\n\n Registry.call('_guiRelayout', gd, layoutUpdate);\n }\n};\n\nmodeBarButtons.resetViews = {\n name: 'resetViews',\n title: function(gd) { return _(gd, 'Reset views'); },\n icon: Icons.home,\n click: function(gd, ev) {\n var button = ev.currentTarget;\n\n button.setAttribute('data-attr', 'zoom');\n button.setAttribute('data-val', 'reset');\n handleCartesian(gd, ev);\n\n button.setAttribute('data-attr', 'resetLastSave');\n handleCamera3d(gd, ev);\n\n resetView(gd, 'geo');\n resetView(gd, 'mapbox');\n }\n};\n\nmodeBarButtons.toggleSpikelines = {\n name: 'toggleSpikelines',\n title: function(gd) { return _(gd, 'Toggle Spike Lines'); },\n icon: Icons.spikeline,\n attr: '_cartesianSpikesEnabled',\n val: 'on',\n click: function(gd) {\n var fullLayout = gd._fullLayout;\n var allSpikesEnabled = fullLayout._cartesianSpikesEnabled;\n\n fullLayout._cartesianSpikesEnabled = allSpikesEnabled === 'on' ? 'off' : 'on';\n Registry.call('_guiRelayout', gd, setSpikelineVisibility(gd));\n }\n};\n\nfunction setSpikelineVisibility(gd) {\n var fullLayout = gd._fullLayout;\n var areSpikesOn = fullLayout._cartesianSpikesEnabled === 'on';\n var axList = axisIds.list(gd, null, true);\n var aobj = {};\n\n for(var i = 0; i < axList.length; i++) {\n var ax = axList[i];\n aobj[ax._name + '.showspikes'] = areSpikesOn ? true : ax._showSpikeInitial;\n }\n\n return aobj;\n}\n\nmodeBarButtons.resetViewMapbox = {\n name: 'resetViewMapbox',\n _cat: 'resetView',\n title: function(gd) { return _(gd, 'Reset view'); },\n attr: 'reset',\n icon: Icons.home,\n click: function(gd) {\n resetView(gd, 'mapbox');\n }\n};\n\nmodeBarButtons.zoomInMapbox = {\n name: 'zoomInMapbox',\n _cat: 'zoomin',\n title: function(gd) { return _(gd, 'Zoom in'); },\n attr: 'zoom',\n val: 'in',\n icon: Icons.zoom_plus,\n click: handleMapboxZoom\n};\n\nmodeBarButtons.zoomOutMapbox = {\n name: 'zoomOutMapbox',\n _cat: 'zoomout',\n title: function(gd) { return _(gd, 'Zoom out'); },\n attr: 'zoom',\n val: 'out',\n icon: Icons.zoom_minus,\n click: handleMapboxZoom\n};\n\nfunction handleMapboxZoom(gd, ev) {\n var button = ev.currentTarget;\n var val = button.getAttribute('data-val');\n var fullLayout = gd._fullLayout;\n var subplotIds = fullLayout._subplots.mapbox || [];\n var scalar = 1.05;\n var aObj = {};\n\n for(var i = 0; i < subplotIds.length; i++) {\n var id = subplotIds[i];\n var current = fullLayout[id].zoom;\n var next = (val === 'in') ? scalar * current : current / scalar;\n aObj[id + '.zoom'] = next;\n }\n\n Registry.call('_guiRelayout', gd, aObj);\n}\n\nfunction resetView(gd, subplotType) {\n var fullLayout = gd._fullLayout;\n var subplotIds = fullLayout._subplots[subplotType] || [];\n var aObj = {};\n\n for(var i = 0; i < subplotIds.length; i++) {\n var id = subplotIds[i];\n var subplotObj = fullLayout[id]._subplot;\n var viewInitial = subplotObj.viewInitial;\n var viewKeys = Object.keys(viewInitial);\n\n for(var j = 0; j < viewKeys.length; j++) {\n var key = viewKeys[j];\n aObj[id + '.' + key] = viewInitial[key];\n }\n }\n\n Registry.call('_guiRelayout', gd, aObj);\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Axes = require('../../plots/cartesian/axes');\nvar handleArrayContainerDefaults = require('../../plots/array_container_defaults');\nvar handleAnnotationCommonDefaults = require('../annotations/common_defaults');\nvar attributes = require('./attributes');\n\nmodule.exports = function handleDefaults(sceneLayoutIn, sceneLayoutOut, opts) {\n handleArrayContainerDefaults(sceneLayoutIn, sceneLayoutOut, {\n name: 'annotations',\n handleItemDefaults: handleAnnotationDefaults,\n fullLayout: opts.fullLayout\n });\n};\n\nfunction handleAnnotationDefaults(annIn, annOut, sceneLayout, opts) {\n function coerce(attr, dflt) {\n return Lib.coerce(annIn, annOut, attributes, attr, dflt);\n }\n\n function coercePosition(axLetter) {\n var axName = axLetter + 'axis';\n\n // mock in such way that getFromId grabs correct 3D axis\n var gdMock = { _fullLayout: {} };\n gdMock._fullLayout[axName] = sceneLayout[axName];\n\n return Axes.coercePosition(annOut, gdMock, coerce, axLetter, axLetter, 0.5);\n }\n\n\n var visible = coerce('visible');\n if(!visible) return;\n\n handleAnnotationCommonDefaults(annIn, annOut, opts.fullLayout, coerce);\n\n coercePosition('x');\n coercePosition('y');\n coercePosition('z');\n\n // if you have one coordinate you should all three\n Lib.noneOrAll(annIn, annOut, ['x', 'y', 'z']);\n\n // hard-set here for completeness\n annOut.xref = 'x';\n annOut.yref = 'y';\n annOut.zref = 'z';\n\n coerce('xanchor');\n coerce('yanchor');\n coerce('xshift');\n coerce('yshift');\n\n if(annOut.showarrow) {\n annOut.axref = 'pixel';\n annOut.ayref = 'pixel';\n\n // TODO maybe default values should be bigger than the 2D case?\n coerce('ax', -10);\n coerce('ay', -30);\n\n // if you have one part of arrow length you should have both\n Lib.noneOrAll(annIn, annOut, ['ax', 'ay']);\n }\n}\n","'use strict';\n\nvar Lib = require('../../lib');\nvar attributes = require('./attributes');\nvar handleHoverLabelDefaults = require('./hoverlabel_defaults');\n\nmodule.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {\n function coerce(attr, dflt) {\n return Lib.coerce(traceIn, traceOut, attributes, attr, dflt);\n }\n\n var opts = Lib.extendFlat({}, layout.hoverlabel);\n if(traceOut.hovertemplate) opts.namelength = -1;\n\n handleHoverLabelDefaults(traceIn, traceOut, coerce, opts);\n};\n","'use strict';\n\n\n/**\n * Error bar computing function generator\n *\n * N.B. The generated function does not clean the dataPt entries. Non-numeric\n * entries result in undefined error magnitudes.\n *\n * @param {object} opts error bar attributes\n *\n * @return {function} :\n * @param {numeric} dataPt data point from where to compute the error magnitude\n * @param {number} index index of dataPt in its corresponding data array\n * @return {array}\n * - error[0] : error magnitude in the negative direction\n * - error[1] : \" \" \" \" positive \"\n */\nmodule.exports = function makeComputeError(opts) {\n var type = opts.type;\n var symmetric = opts.symmetric;\n\n if(type === 'data') {\n var array = opts.array || [];\n\n if(symmetric) {\n return function computeError(dataPt, index) {\n var val = +(array[index]);\n return [val, val];\n };\n } else {\n var arrayminus = opts.arrayminus || [];\n return function computeError(dataPt, index) {\n var val = +array[index];\n var valMinus = +arrayminus[index];\n // in case one is present and the other is missing, fill in 0\n // so we still see the present one. Mostly useful during manual\n // data entry.\n if(!isNaN(val) || !isNaN(valMinus)) {\n return [valMinus || 0, val || 0];\n }\n return [NaN, NaN];\n };\n }\n } else {\n var computeErrorValue = makeComputeErrorValue(type, opts.value);\n var computeErrorValueMinus = makeComputeErrorValue(type, opts.valueminus);\n\n if(symmetric || opts.valueminus === undefined) {\n return function computeError(dataPt) {\n var val = computeErrorValue(dataPt);\n return [val, val];\n };\n } else {\n return function computeError(dataPt) {\n return [\n computeErrorValueMinus(dataPt),\n computeErrorValue(dataPt)\n ];\n };\n }\n }\n};\n\n/**\n * Compute error bar magnitude (for all types except data)\n *\n * @param {string} type error bar type\n * @param {numeric} value error bar value\n *\n * @return {function} :\n * @param {numeric} dataPt\n */\nfunction makeComputeErrorValue(type, value) {\n if(type === 'percent') {\n return function(dataPt) {\n return Math.abs(dataPt * value / 100);\n };\n }\n if(type === 'constant') {\n return function() {\n return Math.abs(value);\n };\n }\n if(type === 'sqrt') {\n return function(dataPt) {\n return Math.sqrt(Math.abs(dataPt));\n };\n }\n}\n","'use strict';\n\n\nmodule.exports = {\n moduleType: 'component',\n name: 'legend',\n\n layoutAttributes: require('./attributes'),\n supplyLayoutDefaults: require('./defaults'),\n\n draw: require('./draw'),\n style: require('./style')\n};\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\nvar toLogRange = require('../../lib/to_log_range');\n\n/*\n * convertCoords: when converting an axis between log and linear\n * you need to alter any annotations on that axis to keep them\n * pointing at the same data point.\n * In v3.0 this will become obsolete\n *\n * gd: the plot div\n * ax: the axis being changed\n * newType: the type it's getting\n * doExtra: function(attr, val) from inside relayout that sets the attribute.\n * Use this to make the changes as it's aware if any other changes in the\n * same relayout call should override this conversion.\n */\nmodule.exports = function convertCoords(gd, ax, newType, doExtra) {\n ax = ax || {};\n\n var toLog = (newType === 'log') && (ax.type === 'linear');\n var fromLog = (newType === 'linear') && (ax.type === 'log');\n\n if(!(toLog || fromLog)) return;\n\n var annotations = gd._fullLayout.annotations;\n var axLetter = ax._id.charAt(0);\n var ann;\n var attrPrefix;\n\n function convert(attr) {\n var currentVal = ann[attr];\n var newVal = null;\n\n if(toLog) newVal = toLogRange(currentVal, ax.range);\n else newVal = Math.pow(10, currentVal);\n\n // if conversion failed, delete the value so it gets a default value\n if(!isNumeric(newVal)) newVal = null;\n\n doExtra(attrPrefix + attr, newVal);\n }\n\n for(var i = 0; i < annotations.length; i++) {\n ann = annotations[i];\n attrPrefix = 'annotations[' + i + '].';\n\n if(ann[axLetter + 'ref'] === ax._id) convert(axLetter);\n if(ann['a' + axLetter + 'ref'] === ax._id) convert('a' + axLetter);\n }\n};\n","'use strict';\n\nmodule.exports = {\n moduleType: 'component',\n name: 'colorbar',\n\n attributes: require('./attributes'),\n supplyDefaults: require('./defaults'),\n\n draw: require('./draw').draw,\n hasColorbar: require('./has_colorbar')\n};\n","'use strict';\n\nmodule.exports = require('../src/traces/heatmap');\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar Drawing = require('../drawing');\nvar Axes = require('../../plots/cartesian/axes');\nvar axisIds = require('../../plots/cartesian/axis_ids');\nvar xmlnsNamespaces = require('../../constants/xmlns_namespaces');\n\nmodule.exports = function draw(gd) {\n var fullLayout = gd._fullLayout;\n var imageDataAbove = [];\n var imageDataSubplot = {};\n var imageDataBelow = [];\n var subplot;\n var i;\n\n // Sort into top, subplot, and bottom layers\n for(i = 0; i < fullLayout.images.length; i++) {\n var img = fullLayout.images[i];\n\n if(img.visible) {\n if(img.layer === 'below' && img.xref !== 'paper' && img.yref !== 'paper') {\n subplot = axisIds.ref2id(img.xref) + axisIds.ref2id(img.yref);\n\n var plotinfo = fullLayout._plots[subplot];\n\n if(!plotinfo) {\n // Fall back to _imageLowerLayer in case the requested subplot doesn't exist.\n // This can happen if you reference the image to an x / y axis combination\n // that doesn't have any data on it (and layer is below)\n imageDataBelow.push(img);\n continue;\n }\n\n if(plotinfo.mainplot) {\n subplot = plotinfo.mainplot.id;\n }\n\n if(!imageDataSubplot[subplot]) {\n imageDataSubplot[subplot] = [];\n }\n imageDataSubplot[subplot].push(img);\n } else if(img.layer === 'above') {\n imageDataAbove.push(img);\n } else {\n imageDataBelow.push(img);\n }\n }\n }\n\n\n var anchors = {\n x: {\n left: { sizing: 'xMin', offset: 0 },\n center: { sizing: 'xMid', offset: -1 / 2 },\n right: { sizing: 'xMax', offset: -1 }\n },\n y: {\n top: { sizing: 'YMin', offset: 0 },\n middle: { sizing: 'YMid', offset: -1 / 2 },\n bottom: { sizing: 'YMax', offset: -1 }\n }\n };\n\n\n // Images must be converted to dataURL's for exporting.\n function setImage(d) {\n var thisImage = d3.select(this);\n\n if(this._imgSrc === d.source) {\n return;\n }\n\n thisImage.attr('xmlns', xmlnsNamespaces.svg);\n\n if(d.source && d.source.slice(0, 5) === 'data:') {\n thisImage.attr('xlink:href', d.source);\n this._imgSrc = d.source;\n } else {\n var imagePromise = new Promise(function(resolve) {\n var img = new Image();\n this.img = img;\n\n // If not set, a `tainted canvas` error is thrown\n img.setAttribute('crossOrigin', 'anonymous');\n img.onerror = errorHandler;\n img.onload = function() {\n var canvas = document.createElement('canvas');\n canvas.width = this.width;\n canvas.height = this.height;\n\n var ctx = canvas.getContext('2d', {willReadFrequently: true});\n ctx.drawImage(this, 0, 0);\n\n var dataURL = canvas.toDataURL('image/png');\n\n thisImage.attr('xlink:href', dataURL);\n\n // resolve promise in onload handler instead of on 'load' to support IE11\n // see https://github.com/plotly/plotly.js/issues/1685\n // for more details\n resolve();\n };\n\n thisImage.on('error', errorHandler);\n\n img.src = d.source;\n this._imgSrc = d.source;\n\n function errorHandler() {\n thisImage.remove();\n resolve();\n }\n }.bind(this));\n\n gd._promises.push(imagePromise);\n }\n }\n\n function applyAttributes(d) {\n var thisImage = d3.select(this);\n\n // Axes if specified\n var xa = Axes.getFromId(gd, d.xref);\n var ya = Axes.getFromId(gd, d.yref);\n var xIsDomain = Axes.getRefType(d.xref) === 'domain';\n var yIsDomain = Axes.getRefType(d.yref) === 'domain';\n\n var size = fullLayout._size;\n var width, height;\n if(xa !== undefined) {\n width = ((typeof(d.xref) === 'string') && xIsDomain) ?\n xa._length * d.sizex :\n Math.abs(xa.l2p(d.sizex) - xa.l2p(0));\n } else {\n width = d.sizex * size.w;\n }\n if(ya !== undefined) {\n height = ((typeof(d.yref) === 'string') && yIsDomain) ?\n ya._length * d.sizey :\n Math.abs(ya.l2p(d.sizey) - ya.l2p(0));\n } else {\n height = d.sizey * size.h;\n }\n\n // Offsets for anchor positioning\n var xOffset = width * anchors.x[d.xanchor].offset;\n var yOffset = height * anchors.y[d.yanchor].offset;\n\n var sizing = anchors.x[d.xanchor].sizing + anchors.y[d.yanchor].sizing;\n\n // Final positions\n var xPos, yPos;\n if(xa !== undefined) {\n xPos = ((typeof(d.xref) === 'string') && xIsDomain) ?\n xa._length * d.x + xa._offset :\n xa.r2p(d.x) + xa._offset;\n } else {\n xPos = d.x * size.w + size.l;\n }\n xPos += xOffset;\n if(ya !== undefined) {\n yPos = ((typeof(d.yref) === 'string') && yIsDomain) ?\n // consistent with \"paper\" yref value, where positive values\n // move up the page\n ya._length * (1 - d.y) + ya._offset :\n ya.r2p(d.y) + ya._offset;\n } else {\n yPos = size.h - d.y * size.h + size.t;\n }\n yPos += yOffset;\n\n // Construct the proper aspectRatio attribute\n switch(d.sizing) {\n case 'fill':\n sizing += ' slice';\n break;\n\n case 'stretch':\n sizing = 'none';\n break;\n }\n\n thisImage.attr({\n x: xPos,\n y: yPos,\n width: width,\n height: height,\n preserveAspectRatio: sizing,\n opacity: d.opacity\n });\n\n\n // Set proper clipping on images\n var xId = xa && (Axes.getRefType(d.xref) !== 'domain') ? xa._id : '';\n var yId = ya && (Axes.getRefType(d.yref) !== 'domain') ? ya._id : '';\n var clipAxes = xId + yId;\n\n Drawing.setClipUrl(\n thisImage,\n clipAxes ? ('clip' + fullLayout._uid + clipAxes) : null,\n gd\n );\n }\n\n var imagesBelow = fullLayout._imageLowerLayer.selectAll('image')\n .data(imageDataBelow);\n var imagesAbove = fullLayout._imageUpperLayer.selectAll('image')\n .data(imageDataAbove);\n\n imagesBelow.enter().append('image');\n imagesAbove.enter().append('image');\n\n imagesBelow.exit().remove();\n imagesAbove.exit().remove();\n\n imagesBelow.each(function(d) {\n setImage.bind(this)(d);\n applyAttributes.bind(this)(d);\n });\n imagesAbove.each(function(d) {\n setImage.bind(this)(d);\n applyAttributes.bind(this)(d);\n });\n\n var allSubplots = Object.keys(fullLayout._plots);\n for(i = 0; i < allSubplots.length; i++) {\n subplot = allSubplots[i];\n var subplotObj = fullLayout._plots[subplot];\n\n // filter out overlaid plots (which have their images on the main plot)\n // and gl2d plots (which don't support below images, at least not yet)\n if(!subplotObj.imagelayer) continue;\n\n var imagesOnSubplot = subplotObj.imagelayer.selectAll('image')\n // even if there are no images on this subplot, we need to run\n // enter and exit in case there were previously\n .data(imageDataSubplot[subplot] || []);\n\n imagesOnSubplot.enter().append('image');\n imagesOnSubplot.exit().remove();\n\n imagesOnSubplot.each(function(d) {\n setImage.bind(this)(d);\n applyAttributes.bind(this)(d);\n });\n }\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Color = require('../color');\n\n// defaults common to 'annotations' and 'annotations3d'\nmodule.exports = function handleAnnotationCommonDefaults(annIn, annOut, fullLayout, coerce) {\n coerce('opacity');\n var bgColor = coerce('bgcolor');\n\n var borderColor = coerce('bordercolor');\n var borderOpacity = Color.opacity(borderColor);\n\n coerce('borderpad');\n\n var borderWidth = coerce('borderwidth');\n var showArrow = coerce('showarrow');\n\n coerce('text', showArrow ? ' ' : fullLayout._dfltTitle.annotation);\n coerce('textangle');\n Lib.coerceFont(coerce, 'font', fullLayout.font);\n\n coerce('width');\n coerce('align');\n\n var h = coerce('height');\n if(h) coerce('valign');\n\n if(showArrow) {\n var arrowside = coerce('arrowside');\n var arrowhead;\n var arrowsize;\n\n if(arrowside.indexOf('end') !== -1) {\n arrowhead = coerce('arrowhead');\n arrowsize = coerce('arrowsize');\n }\n\n if(arrowside.indexOf('start') !== -1) {\n coerce('startarrowhead', arrowhead);\n coerce('startarrowsize', arrowsize);\n }\n coerce('arrowcolor', borderOpacity ? annOut.bordercolor : Color.defaultLine);\n coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2);\n coerce('standoff');\n coerce('startstandoff');\n }\n\n var hoverText = coerce('hovertext');\n var globalHoverLabel = fullLayout.hoverlabel || {};\n\n if(hoverText) {\n var hoverBG = coerce('hoverlabel.bgcolor', globalHoverLabel.bgcolor ||\n (Color.opacity(bgColor) ? Color.rgb(bgColor) : Color.defaultLine)\n );\n\n var hoverBorder = coerce('hoverlabel.bordercolor', globalHoverLabel.bordercolor ||\n Color.contrast(hoverBG)\n );\n\n Lib.coerceFont(coerce, 'hoverlabel.font', {\n family: globalHoverLabel.font.family,\n size: globalHoverLabel.font.size,\n color: globalHoverLabel.font.color || hoverBorder\n });\n }\n\n coerce('captureevents', !!hoverText);\n};\n","'use strict';\n\nvar modeBarButtons = require('./buttons');\nvar buttonList = Object.keys(modeBarButtons);\n\nvar DRAW_MODES = [\n 'drawline',\n 'drawopenpath',\n 'drawclosedpath',\n 'drawcircle',\n 'drawrect',\n 'eraseshape'\n];\n\nvar backButtons = [\n 'v1hovermode',\n 'hoverclosest',\n 'hovercompare',\n 'togglehover',\n 'togglespikelines'\n].concat(DRAW_MODES);\n\nvar foreButtons = [];\nvar addToForeButtons = function(b) {\n if(backButtons.indexOf(b._cat || b.name) !== -1) return;\n // for convenience add lowercase shotname e.g. zoomin as well fullname zoomInGeo\n var name = b.name;\n var _cat = (b._cat || b.name).toLowerCase();\n if(foreButtons.indexOf(name) === -1) foreButtons.push(name);\n if(foreButtons.indexOf(_cat) === -1) foreButtons.push(_cat);\n};\nbuttonList.forEach(function(k) {\n addToForeButtons(modeBarButtons[k]);\n});\nforeButtons.sort();\n\nmodule.exports = {\n DRAW_MODES: DRAW_MODES,\n backButtons: backButtons,\n foreButtons: foreButtons\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar layoutAttributes = require('./layout_attributes');\n\nmodule.exports = function handleHoverModeDefaults(layoutIn, layoutOut) {\n function coerce(attr, dflt) {\n // don't coerce if it is already coerced in other place e.g. in cartesian defaults\n if(layoutOut[attr] !== undefined) return layoutOut[attr];\n\n return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt);\n }\n\n coerce('clickmode');\n return coerce('hovermode');\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\nvar tinycolor = require('tinycolor2');\nvar isNumeric = require('fast-isnumeric');\n\nvar Lib = require('../../lib');\nvar Color = require('../color');\n\nvar isValidScale = require('./scales').isValid;\n\nfunction hasColorscale(trace, containerStr, colorKey) {\n var container = containerStr ?\n Lib.nestedProperty(trace, containerStr).get() || {} :\n trace;\n\n var color = container[colorKey || 'color'];\n if(color && color._inputArray) color = color._inputArray;\n\n var isArrayWithOneNumber = false;\n if(Lib.isArrayOrTypedArray(color)) {\n for(var i = 0; i < color.length; i++) {\n if(isNumeric(color[i])) {\n isArrayWithOneNumber = true;\n break;\n }\n }\n }\n\n return (\n Lib.isPlainObject(container) && (\n isArrayWithOneNumber ||\n container.showscale === true ||\n (isNumeric(container.cmin) && isNumeric(container.cmax)) ||\n isValidScale(container.colorscale) ||\n Lib.isPlainObject(container.colorbar)\n )\n );\n}\n\nvar constantAttrs = ['showscale', 'autocolorscale', 'colorscale', 'reversescale', 'colorbar'];\nvar letterAttrs = ['min', 'max', 'mid', 'auto'];\n\n/**\n * Extract 'c' / 'z', trace / color axis colorscale options\n *\n * Note that it would be nice to replace all z* with c* equivalents in v3\n *\n * @param {object} cont : attribute container\n * @return {object}:\n * - min: cmin or zmin\n * - max: cmax or zmax\n * - mid: cmid or zmid\n * - auto: cauto or zauto\n * - *scale: *scale attrs\n * - colorbar: colorbar\n * - _sync: function syncing attr and underscore dual (useful when calc'ing min/max)\n */\nfunction extractOpts(cont) {\n var colorAx = cont._colorAx;\n var cont2 = colorAx ? colorAx : cont;\n var out = {};\n var cLetter;\n var i, k;\n\n for(i = 0; i < constantAttrs.length; i++) {\n k = constantAttrs[i];\n out[k] = cont2[k];\n }\n\n if(colorAx) {\n cLetter = 'c';\n for(i = 0; i < letterAttrs.length; i++) {\n k = letterAttrs[i];\n out[k] = cont2['c' + k];\n }\n } else {\n var k2;\n for(i = 0; i < letterAttrs.length; i++) {\n k = letterAttrs[i];\n k2 = 'c' + k;\n if(k2 in cont2) {\n out[k] = cont2[k2];\n continue;\n }\n k2 = 'z' + k;\n if(k2 in cont2) {\n out[k] = cont2[k2];\n }\n }\n cLetter = k2.charAt(0);\n }\n\n out._sync = function(k, v) {\n var k2 = letterAttrs.indexOf(k) !== -1 ? cLetter + k : k;\n cont2[k2] = cont2['_' + k2] = v;\n };\n\n return out;\n}\n\n/**\n * Extract colorscale into numeric domain and color range.\n *\n * @param {object} cont colorscale container (e.g. trace, marker)\n * - colorscale {array of arrays}\n * - cmin/zmin {number}\n * - cmax/zmax {number}\n * - reversescale {boolean}\n *\n * @return {object}\n * - domain {array}\n * - range {array}\n */\nfunction extractScale(cont) {\n var cOpts = extractOpts(cont);\n var cmin = cOpts.min;\n var cmax = cOpts.max;\n\n var scl = cOpts.reversescale ?\n flipScale(cOpts.colorscale) :\n cOpts.colorscale;\n\n var N = scl.length;\n var domain = new Array(N);\n var range = new Array(N);\n\n for(var i = 0; i < N; i++) {\n var si = scl[i];\n domain[i] = cmin + si[0] * (cmax - cmin);\n range[i] = si[1];\n }\n\n return {domain: domain, range: range};\n}\n\nfunction flipScale(scl) {\n var N = scl.length;\n var sclNew = new Array(N);\n\n for(var i = N - 1, j = 0; i >= 0; i--, j++) {\n var si = scl[i];\n sclNew[j] = [1 - si[0], si[1]];\n }\n return sclNew;\n}\n\n/**\n * General colorscale function generator.\n *\n * @param {object} specs output of Colorscale.extractScale or precomputed domain, range.\n * - domain {array}\n * - range {array}\n *\n * @param {object} opts\n * - noNumericCheck {boolean} if true, scale func bypasses numeric checks\n * - returnArray {boolean} if true, scale func return 4-item array instead of color strings\n *\n * @return {function}\n */\nfunction makeColorScaleFunc(specs, opts) {\n opts = opts || {};\n\n var domain = specs.domain;\n var range = specs.range;\n var N = range.length;\n var _range = new Array(N);\n\n for(var i = 0; i < N; i++) {\n var rgba = tinycolor(range[i]).toRgb();\n _range[i] = [rgba.r, rgba.g, rgba.b, rgba.a];\n }\n\n var _sclFunc = d3.scale.linear()\n .domain(domain)\n .range(_range)\n .clamp(true);\n\n var noNumericCheck = opts.noNumericCheck;\n var returnArray = opts.returnArray;\n var sclFunc;\n\n if(noNumericCheck && returnArray) {\n sclFunc = _sclFunc;\n } else if(noNumericCheck) {\n sclFunc = function(v) {\n return colorArray2rbga(_sclFunc(v));\n };\n } else if(returnArray) {\n sclFunc = function(v) {\n if(isNumeric(v)) return _sclFunc(v);\n else if(tinycolor(v).isValid()) return v;\n else return Color.defaultLine;\n };\n } else {\n sclFunc = function(v) {\n if(isNumeric(v)) return colorArray2rbga(_sclFunc(v));\n else if(tinycolor(v).isValid()) return v;\n else return Color.defaultLine;\n };\n }\n\n // colorbar draw looks into the d3 scale closure for domain and range\n sclFunc.domain = _sclFunc.domain;\n sclFunc.range = function() { return range; };\n\n return sclFunc;\n}\n\nfunction makeColorScaleFuncFromTrace(trace, opts) {\n return makeColorScaleFunc(extractScale(trace), opts);\n}\n\nfunction colorArray2rbga(colorArray) {\n var colorObj = {\n r: colorArray[0],\n g: colorArray[1],\n b: colorArray[2],\n a: colorArray[3]\n };\n\n return tinycolor(colorObj).toRgbString();\n}\n\nmodule.exports = {\n hasColorscale: hasColorscale,\n extractOpts: extractOpts,\n extractScale: extractScale,\n flipScale: flipScale,\n makeColorScaleFunc: makeColorScaleFunc,\n makeColorScaleFuncFromTrace: makeColorScaleFuncFromTrace\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Axes = require('../../plots/cartesian/axes');\n\nvar draw = require('./draw').draw;\n\n\nmodule.exports = function calcAutorange(gd) {\n var fullLayout = gd._fullLayout;\n var annotationList = Lib.filterVisible(fullLayout.annotations);\n\n if(annotationList.length && gd._fullData.length) {\n return Lib.syncOrAsync([draw, annAutorange], gd);\n }\n};\n\nfunction annAutorange(gd) {\n var fullLayout = gd._fullLayout;\n\n // find the bounding boxes for each of these annotations'\n // relative to their anchor points\n // use the arrow and the text bg rectangle,\n // as the whole anno may include hidden text in its bbox\n Lib.filterVisible(fullLayout.annotations).forEach(function(ann) {\n var xa = Axes.getFromId(gd, ann.xref);\n var ya = Axes.getFromId(gd, ann.yref);\n var xRefType = Axes.getRefType(ann.xref);\n var yRefType = Axes.getRefType(ann.yref);\n\n ann._extremes = {};\n if(xRefType === 'range') calcAxisExpansion(ann, xa);\n if(yRefType === 'range') calcAxisExpansion(ann, ya);\n });\n}\n\nfunction calcAxisExpansion(ann, ax) {\n var axId = ax._id;\n var letter = axId.charAt(0);\n var pos = ann[letter];\n var apos = ann['a' + letter];\n var ref = ann[letter + 'ref'];\n var aref = ann['a' + letter + 'ref'];\n var padplus = ann['_' + letter + 'padplus'];\n var padminus = ann['_' + letter + 'padminus'];\n var shift = {x: 1, y: -1}[letter] * ann[letter + 'shift'];\n var headSize = 3 * ann.arrowsize * ann.arrowwidth || 0;\n var headPlus = headSize + shift;\n var headMinus = headSize - shift;\n var startHeadSize = 3 * ann.startarrowsize * ann.arrowwidth || 0;\n var startHeadPlus = startHeadSize + shift;\n var startHeadMinus = startHeadSize - shift;\n var extremes;\n\n if(aref === ref) {\n // expand for the arrowhead (padded by arrowhead)\n var extremeArrowHead = Axes.findExtremes(ax, [ax.r2c(pos)], {\n ppadplus: headPlus,\n ppadminus: headMinus\n });\n // again for the textbox (padded by textbox)\n var extremeText = Axes.findExtremes(ax, [ax.r2c(apos)], {\n ppadplus: Math.max(padplus, startHeadPlus),\n ppadminus: Math.max(padminus, startHeadMinus)\n });\n extremes = {\n min: [extremeArrowHead.min[0], extremeText.min[0]],\n max: [extremeArrowHead.max[0], extremeText.max[0]]\n };\n } else {\n startHeadPlus = apos ? startHeadPlus + apos : startHeadPlus;\n startHeadMinus = apos ? startHeadMinus - apos : startHeadMinus;\n extremes = Axes.findExtremes(ax, [ax.r2c(pos)], {\n ppadplus: Math.max(padplus, headPlus, startHeadPlus),\n ppadminus: Math.max(padminus, headMinus, startHeadMinus)\n });\n }\n\n ann._extremes[axId] = extremes;\n}\n","'use strict';\n\nmodule.exports = {\n scrollBarWidth: 6,\n scrollBarMinHeight: 20,\n scrollBarColor: '#808BA4',\n scrollBarMargin: 4,\n scrollBarEnterAttrs: {rx: 20, ry: 3, width: 0, height: 0},\n\n // number of px between legend title and (left) side of legend (always in x direction and from inner border)\n titlePad: 2,\n // number of px between each legend item (x and/or y direction)\n itemGap: 5\n};\n","'use strict';\n\nmodule.exports = require('../src/core');\n","'use strict';\n\nvar d3 = require('@plotly/d3');\n\nvar Color = require('../color');\n\n\nmodule.exports = function style(traces) {\n traces.each(function(d) {\n var trace = d[0].trace;\n var yObj = trace.error_y || {};\n var xObj = trace.error_x || {};\n\n var s = d3.select(this);\n\n s.selectAll('path.yerror')\n .style('stroke-width', yObj.thickness + 'px')\n .call(Color.stroke, yObj.color);\n\n if(xObj.copy_ystyle) xObj = yObj;\n\n s.selectAll('path.xerror')\n .style('stroke-width', xObj.thickness + 'px')\n .call(Color.stroke, xObj.color);\n });\n};\n","'use strict';\n\nvar Registry = require('../../registry');\nvar helpers = require('./helpers');\n\nmodule.exports = function getLegendData(calcdata, opts, hasMultipleLegends) {\n var inHover = opts._inHover;\n var grouped = helpers.isGrouped(opts);\n var reversed = helpers.isReversed(opts);\n\n var lgroupToTraces = {};\n var lgroups = [];\n var hasOneNonBlankGroup = false;\n var slicesShown = {};\n var lgroupi = 0;\n var maxNameLength = 0;\n var i, j;\n\n function addOneItem(legendId, legendGroup, legendItem) {\n if(opts.visible === false) return;\n if(hasMultipleLegends && legendId !== opts._id) return;\n\n // each '' legend group is treated as a separate group\n if(legendGroup === '' || !helpers.isGrouped(opts)) {\n // TODO: check this against fullData legendgroups?\n var uniqueGroup = '~~i' + lgroupi;\n lgroups.push(uniqueGroup);\n lgroupToTraces[uniqueGroup] = [legendItem];\n lgroupi++;\n } else if(lgroups.indexOf(legendGroup) === -1) {\n lgroups.push(legendGroup);\n hasOneNonBlankGroup = true;\n lgroupToTraces[legendGroup] = [legendItem];\n } else {\n lgroupToTraces[legendGroup].push(legendItem);\n }\n }\n\n // build an { legendgroup: [cd0, cd0], ... } object\n for(i = 0; i < calcdata.length; i++) {\n var cd = calcdata[i];\n var cd0 = cd[0];\n var trace = cd0.trace;\n var lid = trace.legend;\n var lgroup = trace.legendgroup;\n\n if(!inHover && (!trace.visible || !trace.showlegend)) continue;\n\n if(Registry.traceIs(trace, 'pie-like')) {\n if(!slicesShown[lgroup]) slicesShown[lgroup] = {};\n\n for(j = 0; j < cd.length; j++) {\n var labelj = cd[j].label;\n\n if(!slicesShown[lgroup][labelj]) {\n addOneItem(lid, lgroup, {\n label: labelj,\n color: cd[j].color,\n i: cd[j].i,\n trace: trace,\n pts: cd[j].pts\n });\n\n slicesShown[lgroup][labelj] = true;\n maxNameLength = Math.max(maxNameLength, (labelj || '').length);\n }\n }\n } else {\n addOneItem(lid, lgroup, cd0);\n maxNameLength = Math.max(maxNameLength, (trace.name || '').length);\n }\n }\n\n // won't draw a legend in this case\n if(!lgroups.length) return [];\n\n // collapse all groups into one if all groups are blank\n var shouldCollapse = !hasOneNonBlankGroup || !grouped;\n\n var legendData = [];\n for(i = 0; i < lgroups.length; i++) {\n var t = lgroupToTraces[lgroups[i]];\n if(shouldCollapse) {\n legendData.push(t[0]);\n } else {\n legendData.push(t);\n }\n }\n if(shouldCollapse) legendData = [legendData];\n\n for(i = 0; i < legendData.length; i++) {\n // find minimum rank within group\n var groupMinRank = Infinity;\n for(j = 0; j < legendData[i].length; j++) {\n var rank = legendData[i][j].trace.legendrank;\n if(groupMinRank > rank) groupMinRank = rank;\n }\n\n // record on first group element\n legendData[i][0]._groupMinRank = groupMinRank;\n legendData[i][0]._preGroupSort = i;\n }\n\n var orderFn1 = function(a, b) {\n return (\n (a[0]._groupMinRank - b[0]._groupMinRank) ||\n (a[0]._preGroupSort - b[0]._preGroupSort) // fallback for old Chrome < 70 https://bugs.chromium.org/p/v8/issues/detail?id=90\n );\n };\n\n var orderFn2 = function(a, b) {\n return (\n (a.trace.legendrank - b.trace.legendrank) ||\n (a._preSort - b._preSort) // fallback for old Chrome < 70 https://bugs.chromium.org/p/v8/issues/detail?id=90\n );\n };\n\n // sort considering minimum group legendrank\n legendData.forEach(function(a, k) { a[0]._preGroupSort = k; });\n legendData.sort(orderFn1);\n for(i = 0; i < legendData.length; i++) {\n // sort considering trace.legendrank and legend.traceorder\n legendData[i].forEach(function(a, k) { a._preSort = k; });\n legendData[i].sort(orderFn2);\n\n var firstItemTrace = legendData[i][0].trace;\n\n var groupTitle = null;\n // get group title text\n for(j = 0; j < legendData[i].length; j++) {\n var gt = legendData[i][j].trace.legendgrouptitle;\n if(gt && gt.text) {\n groupTitle = gt;\n if(inHover) gt.font = opts._groupTitleFont;\n break;\n }\n }\n\n // reverse order\n if(reversed) legendData[i].reverse();\n\n if(groupTitle) {\n var hasPieLike = false;\n for(j = 0; j < legendData[i].length; j++) {\n if(Registry.traceIs(legendData[i][j].trace, 'pie-like')) {\n hasPieLike = true;\n break;\n }\n }\n\n // set group title text\n legendData[i].unshift({\n i: -1,\n groupTitle: groupTitle,\n noClick: hasPieLike,\n trace: {\n showlegend: firstItemTrace.showlegend,\n legendgroup: firstItemTrace.legendgroup,\n visible: opts.groupclick === 'toggleitem' ? true : firstItemTrace.visible\n }\n });\n }\n\n // rearrange lgroupToTraces into a d3-friendly array of arrays\n for(j = 0; j < legendData[i].length; j++) {\n legendData[i][j] = [\n legendData[i][j]\n ];\n }\n }\n\n // number of legend groups - needed in legend/draw.js\n opts._lgroupsLength = legendData.length;\n // maximum name/label length - needed in legend/draw.js\n opts._maxNameLength = maxNameLength;\n\n return legendData;\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar layoutAttributes = require('./layout_attributes');\nvar handleHoverModeDefaults = require('./hovermode_defaults');\nvar handleHoverLabelDefaults = require('./hoverlabel_defaults');\n\nmodule.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {\n function coerce(attr, dflt) {\n return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt);\n }\n\n var hoverMode = handleHoverModeDefaults(layoutIn, layoutOut);\n if(hoverMode) {\n coerce('hoverdistance');\n coerce('spikedistance');\n }\n\n var dragMode = coerce('dragmode');\n if(dragMode === 'select') coerce('selectdirection');\n\n // if only mapbox or geo subplots is present on graph,\n // reset 'zoom' dragmode to 'pan' until 'zoom' is implemented,\n // so that the correct modebar button is active\n var hasMapbox = layoutOut._has('mapbox');\n var hasGeo = layoutOut._has('geo');\n var len = layoutOut._basePlotModules.length;\n\n if(layoutOut.dragmode === 'zoom' && (\n ((hasMapbox || hasGeo) && len === 1) ||\n (hasMapbox && hasGeo && len === 2)\n )) {\n layoutOut.dragmode = 'pan';\n }\n\n handleHoverLabelDefaults(layoutIn, layoutOut, coerce);\n\n Lib.coerceFont(coerce, 'hoverlabel.grouptitlefont', layoutOut.hoverlabel.font);\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\n\nvar Lib = require('../../lib');\nvar Plots = require('../../plots/plots');\nvar Registry = require('../../registry');\nvar Events = require('../../lib/events');\nvar dragElement = require('../dragelement');\nvar Drawing = require('../drawing');\nvar Color = require('../color');\nvar svgTextUtils = require('../../lib/svg_text_utils');\nvar handleClick = require('./handle_click');\n\nvar constants = require('./constants');\nvar alignmentConstants = require('../../constants/alignment');\nvar LINE_SPACING = alignmentConstants.LINE_SPACING;\nvar FROM_TL = alignmentConstants.FROM_TL;\nvar FROM_BR = alignmentConstants.FROM_BR;\n\nvar getLegendData = require('./get_legend_data');\nvar style = require('./style');\nvar helpers = require('./helpers');\n\nvar MAIN_TITLE = 1;\n\nvar LEGEND_PATTERN = /^legend[0-9]*$/;\n\nmodule.exports = function draw(gd, opts) {\n if(opts) {\n drawOne(gd, opts);\n } else {\n var fullLayout = gd._fullLayout;\n var newLegends = fullLayout._legends;\n\n // remove old legends that won't stay on the graph\n var oldLegends = fullLayout._infolayer.selectAll('[class^=\"legend\"]');\n\n oldLegends.each(function() {\n var el = d3.select(this);\n var classes = el.attr('class');\n var cls = classes.split(' ')[0];\n if(cls.match(LEGEND_PATTERN) && newLegends.indexOf(cls) === -1) {\n el.remove();\n }\n });\n\n // draw/update new legends\n for(var i = 0; i < newLegends.length; i++) {\n var legendId = newLegends[i];\n var legendObj = gd._fullLayout[legendId];\n drawOne(gd, legendObj);\n }\n }\n};\n\n// After legend dimensions are calculated the title can be aligned horizontally left, center, right\nfunction horizontalAlignTitle(titleEl, legendObj, bw) {\n if((legendObj.title.side !== 'top center') && (legendObj.title.side !== 'top right')) return;\n\n var font = legendObj.title.font;\n var lineHeight = font.size * LINE_SPACING;\n var titleOffset = 0;\n var textNode = titleEl.node();\n\n var width = Drawing.bBox(textNode).width; // width of the title text\n\n if(legendObj.title.side === 'top center') {\n titleOffset = 0.5 * (legendObj._width - 2 * bw - 2 * constants.titlePad - width);\n } else if(legendObj.title.side === 'top right') {\n titleOffset = legendObj._width - 2 * bw - 2 * constants.titlePad - width;\n }\n\n svgTextUtils.positionText(titleEl,\n bw + constants.titlePad + titleOffset,\n bw + lineHeight\n );\n}\n\n\nfunction drawOne(gd, opts) {\n var legendObj = opts || {};\n\n var fullLayout = gd._fullLayout;\n var legendId = getId(legendObj);\n\n var clipId, layer;\n\n var inHover = legendObj._inHover;\n if(inHover) {\n layer = legendObj.layer;\n clipId = 'hover';\n } else {\n layer = fullLayout._infolayer;\n clipId = legendId;\n }\n if(!layer) return;\n clipId += fullLayout._uid;\n\n if(!gd._legendMouseDownTime) gd._legendMouseDownTime = 0;\n\n var legendData;\n if(!inHover) {\n var calcdata = (gd.calcdata || []).slice();\n\n var shapes = fullLayout.shapes;\n for(var i = 0; i < shapes.length; i++) {\n var shape = shapes[i];\n if(!shape.showlegend) continue;\n\n var shapeLegend = {\n _isShape: true,\n _fullInput: shape,\n index: shape._index,\n name: shape.name || shape.label.text || ('shape ' + shape._index),\n legend: shape.legend,\n legendgroup: shape.legendgroup,\n legendgrouptitle: shape.legendgrouptitle,\n legendrank: shape.legendrank,\n legendwidth: shape.legendwidth,\n showlegend: shape.showlegend,\n visible: shape.visible,\n opacity: shape.opacity,\n mode: shape.type === 'line' ? 'lines' : 'markers',\n line: shape.line,\n marker: {\n line: shape.line,\n color: shape.fillcolor,\n size: 12,\n symbol:\n shape.type === 'rect' ? 'square' :\n shape.type === 'circle' ? 'circle' :\n // case of path\n 'hexagon2'\n },\n };\n\n calcdata.push([{ trace: shapeLegend }]);\n }\n\n legendData = fullLayout.showlegend && getLegendData(calcdata, legendObj, fullLayout._legends.length > 1);\n } else {\n if(!legendObj.entries) return;\n legendData = getLegendData(legendObj.entries, legendObj);\n }\n\n var hiddenSlices = fullLayout.hiddenlabels || [];\n\n if(!inHover && (!fullLayout.showlegend || !legendData.length)) {\n layer.selectAll('.' + legendId).remove();\n fullLayout._topdefs.select('#' + clipId).remove();\n return Plots.autoMargin(gd, legendId);\n }\n\n var legend = Lib.ensureSingle(layer, 'g', legendId, function(s) {\n if(!inHover) s.attr('pointer-events', 'all');\n });\n\n var clipPath = Lib.ensureSingleById(fullLayout._topdefs, 'clipPath', clipId, function(s) {\n s.append('rect');\n });\n\n var bg = Lib.ensureSingle(legend, 'rect', 'bg', function(s) {\n s.attr('shape-rendering', 'crispEdges');\n });\n bg.call(Color.stroke, legendObj.bordercolor)\n .call(Color.fill, legendObj.bgcolor)\n .style('stroke-width', legendObj.borderwidth + 'px');\n\n var scrollBox = Lib.ensureSingle(legend, 'g', 'scrollbox');\n\n var title = legendObj.title;\n legendObj._titleWidth = 0;\n legendObj._titleHeight = 0;\n var titleEl;\n if(title.text) {\n titleEl = Lib.ensureSingle(scrollBox, 'text', legendId + 'titletext');\n titleEl.attr('text-anchor', 'start')\n .call(Drawing.font, title.font)\n .text(title.text);\n\n textLayout(titleEl, scrollBox, gd, legendObj, MAIN_TITLE); // handle mathjax or multi-line text and compute title height\n } else {\n scrollBox.selectAll('.' + legendId + 'titletext').remove();\n }\n\n var scrollBar = Lib.ensureSingle(legend, 'rect', 'scrollbar', function(s) {\n s.attr(constants.scrollBarEnterAttrs)\n .call(Color.fill, constants.scrollBarColor);\n });\n\n var groups = scrollBox.selectAll('g.groups').data(legendData);\n groups.enter().append('g').attr('class', 'groups');\n groups.exit().remove();\n\n var traces = groups.selectAll('g.traces').data(Lib.identity);\n traces.enter().append('g').attr('class', 'traces');\n traces.exit().remove();\n\n traces.style('opacity', function(d) {\n var trace = d[0].trace;\n if(Registry.traceIs(trace, 'pie-like')) {\n return hiddenSlices.indexOf(d[0].label) !== -1 ? 0.5 : 1;\n } else {\n return trace.visible === 'legendonly' ? 0.5 : 1;\n }\n })\n .each(function() { d3.select(this).call(drawTexts, gd, legendObj); })\n .call(style, gd, legendObj)\n .each(function() { if(!inHover) d3.select(this).call(setupTraceToggle, gd, legendId); });\n\n Lib.syncOrAsync([\n Plots.previousPromises,\n function() { return computeLegendDimensions(gd, groups, traces, legendObj); },\n function() {\n var gs = fullLayout._size;\n var bw = legendObj.borderwidth;\n var isPaperX = legendObj.xref === 'paper';\n var isPaperY = legendObj.yref === 'paper';\n\n // re-calculate title position after legend width is derived. To allow for horizontal alignment\n if(title.text) {\n horizontalAlignTitle(titleEl, legendObj, bw);\n }\n\n if(!inHover) {\n var lx, ly;\n\n if(isPaperX) {\n lx = gs.l + gs.w * legendObj.x - FROM_TL[getXanchor(legendObj)] * legendObj._width;\n } else {\n lx = fullLayout.width * legendObj.x - FROM_TL[getXanchor(legendObj)] * legendObj._width;\n }\n\n if(isPaperY) {\n ly = gs.t + gs.h * (1 - legendObj.y) - FROM_TL[getYanchor(legendObj)] * legendObj._effHeight;\n } else {\n ly = fullLayout.height * (1 - legendObj.y) - FROM_TL[getYanchor(legendObj)] * legendObj._effHeight;\n }\n\n var expMargin = expandMargin(gd, legendId, lx, ly);\n\n // IF expandMargin return a Promise (which is truthy),\n // we're under a doAutoMargin redraw, so we don't have to\n // draw the remaining pieces below\n if(expMargin) return;\n\n if(fullLayout.margin.autoexpand) {\n var lx0 = lx;\n var ly0 = ly;\n\n lx = isPaperX ? Lib.constrain(lx, 0, fullLayout.width - legendObj._width) : lx0;\n ly = isPaperY ? Lib.constrain(ly, 0, fullLayout.height - legendObj._effHeight) : ly0;\n\n if(lx !== lx0) {\n Lib.log('Constrain ' + legendId + '.x to make legend fit inside graph');\n }\n if(ly !== ly0) {\n Lib.log('Constrain ' + legendId + '.y to make legend fit inside graph');\n }\n }\n\n // Set size and position of all the elements that make up a legend:\n // legend, background and border, scroll box and scroll bar as well as title\n Drawing.setTranslate(legend, lx, ly);\n }\n\n // to be safe, remove previous listeners\n scrollBar.on('.drag', null);\n legend.on('wheel', null);\n\n if(inHover || legendObj._height <= legendObj._maxHeight || gd._context.staticPlot) {\n // if scrollbar should not be shown.\n var height = legendObj._effHeight;\n\n // if unified hover, let it be its full size\n if(inHover) height = legendObj._height;\n\n bg.attr({\n width: legendObj._width - bw,\n height: height - bw,\n x: bw / 2,\n y: bw / 2\n });\n\n Drawing.setTranslate(scrollBox, 0, 0);\n\n clipPath.select('rect').attr({\n width: legendObj._width - 2 * bw,\n height: height - 2 * bw,\n x: bw,\n y: bw\n });\n\n Drawing.setClipUrl(scrollBox, clipId, gd);\n\n Drawing.setRect(scrollBar, 0, 0, 0, 0);\n delete legendObj._scrollY;\n } else {\n var scrollBarHeight = Math.max(constants.scrollBarMinHeight,\n legendObj._effHeight * legendObj._effHeight / legendObj._height);\n var scrollBarYMax = legendObj._effHeight -\n scrollBarHeight -\n 2 * constants.scrollBarMargin;\n var scrollBoxYMax = legendObj._height - legendObj._effHeight;\n var scrollRatio = scrollBarYMax / scrollBoxYMax;\n\n var scrollBoxY = Math.min(legendObj._scrollY || 0, scrollBoxYMax);\n\n // increase the background and clip-path width\n // by the scrollbar width and margin\n bg.attr({\n width: legendObj._width -\n 2 * bw +\n constants.scrollBarWidth +\n constants.scrollBarMargin,\n height: legendObj._effHeight - bw,\n x: bw / 2,\n y: bw / 2\n });\n\n clipPath.select('rect').attr({\n width: legendObj._width -\n 2 * bw +\n constants.scrollBarWidth +\n constants.scrollBarMargin,\n height: legendObj._effHeight - 2 * bw,\n x: bw,\n y: bw + scrollBoxY\n });\n\n Drawing.setClipUrl(scrollBox, clipId, gd);\n\n scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio);\n\n // scroll legend by mousewheel or touchpad swipe up/down\n legend.on('wheel', function() {\n scrollBoxY = Lib.constrain(\n legendObj._scrollY +\n ((d3.event.deltaY / scrollBarYMax) * scrollBoxYMax),\n 0, scrollBoxYMax);\n scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio);\n if(scrollBoxY !== 0 && scrollBoxY !== scrollBoxYMax) {\n d3.event.preventDefault();\n }\n });\n\n var eventY0, eventY1, scrollBoxY0;\n\n var getScrollBarDragY = function(scrollBoxY0, eventY0, eventY1) {\n var y = ((eventY1 - eventY0) / scrollRatio) + scrollBoxY0;\n return Lib.constrain(y, 0, scrollBoxYMax);\n };\n\n var getNaturalDragY = function(scrollBoxY0, eventY0, eventY1) {\n var y = ((eventY0 - eventY1) / scrollRatio) + scrollBoxY0;\n return Lib.constrain(y, 0, scrollBoxYMax);\n };\n\n // scroll legend by dragging scrollBAR\n var scrollBarDrag = d3.behavior.drag()\n .on('dragstart', function() {\n var e = d3.event.sourceEvent;\n if(e.type === 'touchstart') {\n eventY0 = e.changedTouches[0].clientY;\n } else {\n eventY0 = e.clientY;\n }\n scrollBoxY0 = scrollBoxY;\n })\n .on('drag', function() {\n var e = d3.event.sourceEvent;\n if(e.buttons === 2 || e.ctrlKey) return;\n if(e.type === 'touchmove') {\n eventY1 = e.changedTouches[0].clientY;\n } else {\n eventY1 = e.clientY;\n }\n scrollBoxY = getScrollBarDragY(scrollBoxY0, eventY0, eventY1);\n scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio);\n });\n scrollBar.call(scrollBarDrag);\n\n // scroll legend by touch-dragging scrollBOX\n var scrollBoxTouchDrag = d3.behavior.drag()\n .on('dragstart', function() {\n var e = d3.event.sourceEvent;\n if(e.type === 'touchstart') {\n eventY0 = e.changedTouches[0].clientY;\n scrollBoxY0 = scrollBoxY;\n }\n })\n .on('drag', function() {\n var e = d3.event.sourceEvent;\n if(e.type === 'touchmove') {\n eventY1 = e.changedTouches[0].clientY;\n scrollBoxY = getNaturalDragY(scrollBoxY0, eventY0, eventY1);\n scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio);\n }\n });\n scrollBox.call(scrollBoxTouchDrag);\n }\n\n function scrollHandler(scrollBoxY, scrollBarHeight, scrollRatio) {\n legendObj._scrollY = gd._fullLayout[legendId]._scrollY = scrollBoxY;\n Drawing.setTranslate(scrollBox, 0, -scrollBoxY);\n\n Drawing.setRect(\n scrollBar,\n legendObj._width,\n constants.scrollBarMargin + scrollBoxY * scrollRatio,\n constants.scrollBarWidth,\n scrollBarHeight\n );\n clipPath.select('rect').attr('y', bw + scrollBoxY);\n }\n\n if(gd._context.edits.legendPosition) {\n var xf, yf, x0, y0;\n\n legend.classed('cursor-move', true);\n\n dragElement.init({\n element: legend.node(),\n gd: gd,\n prepFn: function() {\n var transform = Drawing.getTranslate(legend);\n x0 = transform.x;\n y0 = transform.y;\n },\n moveFn: function(dx, dy) {\n var newX = x0 + dx;\n var newY = y0 + dy;\n\n Drawing.setTranslate(legend, newX, newY);\n xf = dragElement.align(newX, legendObj._width, gs.l, gs.l + gs.w, legendObj.xanchor);\n yf = dragElement.align(newY + legendObj._height, -legendObj._height, gs.t + gs.h, gs.t, legendObj.yanchor);\n },\n doneFn: function() {\n if(xf !== undefined && yf !== undefined) {\n var obj = {};\n obj[legendId + '.x'] = xf;\n obj[legendId + '.y'] = yf;\n Registry.call('_guiRelayout', gd, obj);\n }\n },\n clickFn: function(numClicks, e) {\n var clickedTrace = layer.selectAll('g.traces').filter(function() {\n var bbox = this.getBoundingClientRect();\n return (\n e.clientX >= bbox.left && e.clientX <= bbox.right &&\n e.clientY >= bbox.top && e.clientY <= bbox.bottom\n );\n });\n if(clickedTrace.size() > 0) {\n clickOrDoubleClick(gd, legend, clickedTrace, numClicks, e);\n }\n }\n });\n }\n }], gd);\n}\n\nfunction getTraceWidth(d, legendObj, textGap) {\n var legendItem = d[0];\n var legendWidth = legendItem.width;\n var mode = legendObj.entrywidthmode;\n\n var traceLegendWidth = legendItem.trace.legendwidth || legendObj.entrywidth;\n\n if(mode === 'fraction') return legendObj._maxWidth * traceLegendWidth;\n\n return textGap + (traceLegendWidth || legendWidth);\n}\n\nfunction clickOrDoubleClick(gd, legend, legendItem, numClicks, evt) {\n var trace = legendItem.data()[0][0].trace;\n var evtData = {\n event: evt,\n node: legendItem.node(),\n curveNumber: trace.index,\n expandedIndex: trace._expandedIndex,\n data: gd.data,\n layout: gd.layout,\n frames: gd._transitionData._frames,\n config: gd._context,\n fullData: gd._fullData,\n fullLayout: gd._fullLayout\n };\n\n if(trace._group) {\n evtData.group = trace._group;\n }\n if(Registry.traceIs(trace, 'pie-like')) {\n evtData.label = legendItem.datum()[0].label;\n }\n var clickVal = Events.triggerHandler(gd, 'plotly_legendclick', evtData);\n if(numClicks === 1) {\n if(clickVal === false) return;\n legend._clickTimeout = setTimeout(function() {\n if(!gd._fullLayout) return;\n handleClick(legendItem, gd, numClicks);\n }, gd._context.doubleClickDelay);\n } else if(numClicks === 2) {\n if(legend._clickTimeout) clearTimeout(legend._clickTimeout);\n gd._legendMouseDownTime = 0;\n\n var dblClickVal = Events.triggerHandler(gd, 'plotly_legenddoubleclick', evtData);\n // Activate default double click behaviour only when both single click and double click values are not false\n if(dblClickVal !== false && clickVal !== false) handleClick(legendItem, gd, numClicks);\n }\n}\n\nfunction drawTexts(g, gd, legendObj) {\n var legendId = getId(legendObj);\n var legendItem = g.data()[0][0];\n var trace = legendItem.trace;\n var isPieLike = Registry.traceIs(trace, 'pie-like');\n var isEditable = !legendObj._inHover && gd._context.edits.legendText && !isPieLike;\n var maxNameLength = legendObj._maxNameLength;\n\n var name, font;\n if(legendItem.groupTitle) {\n name = legendItem.groupTitle.text;\n font = legendItem.groupTitle.font;\n } else {\n font = legendObj.font;\n if(!legendObj.entries) {\n name = isPieLike ? legendItem.label : trace.name;\n if(trace._meta) {\n name = Lib.templateString(name, trace._meta);\n }\n } else {\n name = legendItem.text;\n }\n }\n\n var textEl = Lib.ensureSingle(g, 'text', legendId + 'text');\n\n textEl.attr('text-anchor', 'start')\n .call(Drawing.font, font)\n .text(isEditable ? ensureLength(name, maxNameLength) : name);\n\n var textGap = legendObj.itemwidth + constants.itemGap * 2;\n svgTextUtils.positionText(textEl, textGap, 0);\n\n if(isEditable) {\n textEl.call(svgTextUtils.makeEditable, {gd: gd, text: name})\n .call(textLayout, g, gd, legendObj)\n .on('edit', function(newName) {\n this.text(ensureLength(newName, maxNameLength))\n .call(textLayout, g, gd, legendObj);\n\n var fullInput = legendItem.trace._fullInput || {};\n var update = {};\n\n if(Registry.hasTransform(fullInput, 'groupby')) {\n var groupbyIndices = Registry.getTransformIndices(fullInput, 'groupby');\n var _index = groupbyIndices[groupbyIndices.length - 1];\n\n var kcont = Lib.keyedContainer(fullInput, 'transforms[' + _index + '].styles', 'target', 'value.name');\n\n kcont.set(legendItem.trace._group, newName);\n\n update = kcont.constructUpdate();\n } else {\n update.name = newName;\n }\n\n if(fullInput._isShape) {\n return Registry.call('_guiRelayout', gd, 'shapes[' + trace.index + '].name', update.name);\n } else {\n return Registry.call('_guiRestyle', gd, update, trace.index);\n }\n });\n } else {\n textLayout(textEl, g, gd, legendObj);\n }\n}\n\n/*\n * Make sure we have a reasonably clickable region.\n * If this string is missing or very short, pad it with spaces out to at least\n * 4 characters, up to the max length of other labels, on the assumption that\n * most characters are wider than spaces so a string of spaces will usually be\n * no wider than the real labels.\n */\nfunction ensureLength(str, maxLength) {\n var targetLength = Math.max(4, maxLength);\n if(str && str.trim().length >= targetLength / 2) return str;\n str = str || '';\n for(var i = targetLength - str.length; i > 0; i--) str += ' ';\n return str;\n}\n\nfunction setupTraceToggle(g, gd, legendId) {\n var doubleClickDelay = gd._context.doubleClickDelay;\n var newMouseDownTime;\n var numClicks = 1;\n\n var traceToggle = Lib.ensureSingle(g, 'rect', legendId + 'toggle', function(s) {\n if(!gd._context.staticPlot) {\n s.style('cursor', 'pointer').attr('pointer-events', 'all');\n }\n s.call(Color.fill, 'rgba(0,0,0,0)');\n });\n\n if(gd._context.staticPlot) return;\n\n traceToggle.on('mousedown', function() {\n newMouseDownTime = (new Date()).getTime();\n if(newMouseDownTime - gd._legendMouseDownTime < doubleClickDelay) {\n // in a click train\n numClicks += 1;\n } else {\n // new click train\n numClicks = 1;\n gd._legendMouseDownTime = newMouseDownTime;\n }\n });\n traceToggle.on('mouseup', function() {\n if(gd._dragged || gd._editing) return;\n var legend = gd._fullLayout[legendId];\n\n if((new Date()).getTime() - gd._legendMouseDownTime > doubleClickDelay) {\n numClicks = Math.max(numClicks - 1, 1);\n }\n\n clickOrDoubleClick(gd, legend, g, numClicks, d3.event);\n });\n}\n\nfunction textLayout(s, g, gd, legendObj, aTitle) {\n if(legendObj._inHover) s.attr('data-notex', true); // do not process MathJax for unified hover\n svgTextUtils.convertToTspans(s, gd, function() {\n computeTextDimensions(g, gd, legendObj, aTitle);\n });\n}\n\nfunction computeTextDimensions(g, gd, legendObj, aTitle) {\n var legendItem = g.data()[0][0];\n if(!legendObj._inHover && legendItem && !legendItem.trace.showlegend) {\n g.remove();\n return;\n }\n\n var mathjaxGroup = g.select('g[class*=math-group]');\n var mathjaxNode = mathjaxGroup.node();\n\n var legendId = getId(legendObj);\n if(!legendObj) {\n legendObj = gd._fullLayout[legendId];\n }\n var bw = legendObj.borderwidth;\n var font;\n if(aTitle === MAIN_TITLE) {\n font = legendObj.title.font;\n } else if(legendItem.groupTitle) {\n font = legendItem.groupTitle.font;\n } else {\n font = legendObj.font;\n }\n var lineHeight = font.size * LINE_SPACING;\n var height, width;\n\n if(mathjaxNode) {\n var mathjaxBB = Drawing.bBox(mathjaxNode);\n\n height = mathjaxBB.height;\n width = mathjaxBB.width;\n\n if(aTitle === MAIN_TITLE) {\n Drawing.setTranslate(mathjaxGroup, bw, bw + height * 0.75);\n } else { // legend item\n Drawing.setTranslate(mathjaxGroup, 0, height * 0.25);\n }\n } else {\n var cls = '.' + legendId + (\n aTitle === MAIN_TITLE ? 'title' : ''\n ) + 'text';\n\n var textEl = g.select(cls);\n\n var textLines = svgTextUtils.lineCount(textEl);\n var textNode = textEl.node();\n\n height = lineHeight * textLines;\n width = textNode ? Drawing.bBox(textNode).width : 0;\n\n // approximation to height offset to center the font\n // to avoid getBoundingClientRect\n if(aTitle === MAIN_TITLE) {\n if(legendObj.title.side === 'left') {\n // add extra space between legend title and itmes\n width += constants.itemGap * 2;\n }\n\n svgTextUtils.positionText(textEl,\n bw + constants.titlePad,\n bw + lineHeight\n );\n } else { // legend item\n var x = constants.itemGap * 2 + legendObj.itemwidth;\n if(legendItem.groupTitle) {\n x = constants.itemGap;\n width -= legendObj.itemwidth;\n }\n\n svgTextUtils.positionText(textEl,\n x,\n -lineHeight * ((textLines - 1) / 2 - 0.3)\n );\n }\n }\n\n if(aTitle === MAIN_TITLE) {\n legendObj._titleWidth = width;\n legendObj._titleHeight = height;\n } else { // legend item\n legendItem.lineHeight = lineHeight;\n legendItem.height = Math.max(height, 16) + 3;\n legendItem.width = width;\n }\n}\n\nfunction getTitleSize(legendObj) {\n var w = 0;\n var h = 0;\n\n var side = legendObj.title.side;\n if(side) {\n if(side.indexOf('left') !== -1) {\n w = legendObj._titleWidth;\n }\n if(side.indexOf('top') !== -1) {\n h = legendObj._titleHeight;\n }\n }\n\n return [w, h];\n}\n\n/*\n * Computes in fullLayout[legendId]:\n *\n * - _height: legend height including items past scrollbox height\n * - _maxHeight: maximum legend height before scrollbox is required\n * - _effHeight: legend height w/ or w/o scrollbox\n *\n * - _width: legend width\n * - _maxWidth (for orientation:h only): maximum width before starting new row\n */\nfunction computeLegendDimensions(gd, groups, traces, legendObj) {\n var fullLayout = gd._fullLayout;\n var legendId = getId(legendObj);\n if(!legendObj) {\n legendObj = fullLayout[legendId];\n }\n var gs = fullLayout._size;\n\n var isVertical = helpers.isVertical(legendObj);\n var isGrouped = helpers.isGrouped(legendObj);\n var isFraction = legendObj.entrywidthmode === 'fraction';\n\n var bw = legendObj.borderwidth;\n var bw2 = 2 * bw;\n var itemGap = constants.itemGap;\n var textGap = legendObj.itemwidth + itemGap * 2;\n var endPad = 2 * (bw + itemGap);\n\n var yanchor = getYanchor(legendObj);\n var isBelowPlotArea = legendObj.y < 0 || (legendObj.y === 0 && yanchor === 'top');\n var isAbovePlotArea = legendObj.y > 1 || (legendObj.y === 1 && yanchor === 'bottom');\n\n var traceGroupGap = legendObj.tracegroupgap;\n var legendGroupWidths = {};\n\n // - if below/above plot area, give it the maximum potential margin-push value\n // - otherwise, extend the height of the plot area\n legendObj._maxHeight = Math.max(\n (isBelowPlotArea || isAbovePlotArea) ? fullLayout.height / 2 : gs.h,\n 30\n );\n\n var toggleRectWidth = 0;\n legendObj._width = 0;\n legendObj._height = 0;\n var titleSize = getTitleSize(legendObj);\n\n if(isVertical) {\n traces.each(function(d) {\n var h = d[0].height;\n Drawing.setTranslate(this,\n bw + titleSize[0],\n bw + titleSize[1] + legendObj._height + h / 2 + itemGap\n );\n legendObj._height += h;\n legendObj._width = Math.max(legendObj._width, d[0].width);\n });\n\n toggleRectWidth = textGap + legendObj._width;\n legendObj._width += itemGap + textGap + bw2;\n legendObj._height += endPad;\n\n if(isGrouped) {\n groups.each(function(d, i) {\n Drawing.setTranslate(this, 0, i * legendObj.tracegroupgap);\n });\n legendObj._height += (legendObj._lgroupsLength - 1) * legendObj.tracegroupgap;\n }\n } else {\n var xanchor = getXanchor(legendObj);\n var isLeftOfPlotArea = legendObj.x < 0 || (legendObj.x === 0 && xanchor === 'right');\n var isRightOfPlotArea = legendObj.x > 1 || (legendObj.x === 1 && xanchor === 'left');\n var isBeyondPlotAreaY = isAbovePlotArea || isBelowPlotArea;\n var hw = fullLayout.width / 2;\n\n // - if placed within x-margins, extend the width of the plot area\n // - else if below/above plot area and anchored in the margin, extend to opposite margin,\n // - otherwise give it the maximum potential margin-push value\n legendObj._maxWidth = Math.max(\n isLeftOfPlotArea ? ((isBeyondPlotAreaY && xanchor === 'left') ? gs.l + gs.w : hw) :\n isRightOfPlotArea ? ((isBeyondPlotAreaY && xanchor === 'right') ? gs.r + gs.w : hw) :\n gs.w,\n 2 * textGap);\n var maxItemWidth = 0;\n var combinedItemWidth = 0;\n traces.each(function(d) {\n var w = getTraceWidth(d, legendObj, textGap);\n maxItemWidth = Math.max(maxItemWidth, w);\n combinedItemWidth += w;\n });\n\n toggleRectWidth = null;\n var maxRowWidth = 0;\n\n if(isGrouped) {\n var maxGroupHeightInRow = 0;\n var groupOffsetX = 0;\n var groupOffsetY = 0;\n groups.each(function() {\n var maxWidthInGroup = 0;\n var offsetY = 0;\n d3.select(this).selectAll('g.traces').each(function(d) {\n var w = getTraceWidth(d, legendObj, textGap);\n var h = d[0].height;\n\n Drawing.setTranslate(this,\n titleSize[0],\n titleSize[1] + bw + itemGap + h / 2 + offsetY\n );\n offsetY += h;\n maxWidthInGroup = Math.max(maxWidthInGroup, w);\n legendGroupWidths[d[0].trace.legendgroup] = maxWidthInGroup;\n });\n\n var next = maxWidthInGroup + itemGap;\n\n // horizontal_wrapping\n if(\n // not on the first column already\n groupOffsetX > 0 &&\n\n // goes beyound limit\n next + bw + groupOffsetX > legendObj._maxWidth\n ) {\n maxRowWidth = Math.max(maxRowWidth, groupOffsetX);\n groupOffsetX = 0;\n groupOffsetY += maxGroupHeightInRow + traceGroupGap;\n maxGroupHeightInRow = offsetY;\n } else {\n maxGroupHeightInRow = Math.max(maxGroupHeightInRow, offsetY);\n }\n\n Drawing.setTranslate(this, groupOffsetX, groupOffsetY);\n\n groupOffsetX += next;\n });\n\n legendObj._width = Math.max(maxRowWidth, groupOffsetX) + bw;\n legendObj._height = groupOffsetY + maxGroupHeightInRow + endPad;\n } else {\n var nTraces = traces.size();\n var oneRowLegend = (combinedItemWidth + bw2 + (nTraces - 1) * itemGap) < legendObj._maxWidth;\n\n var maxItemHeightInRow = 0;\n var offsetX = 0;\n var offsetY = 0;\n var rowWidth = 0;\n traces.each(function(d) {\n var h = d[0].height;\n var w = getTraceWidth(d, legendObj, textGap, isGrouped);\n var next = (oneRowLegend ? w : maxItemWidth);\n\n if(!isFraction) {\n next += itemGap;\n }\n\n if((next + bw + offsetX - itemGap) >= legendObj._maxWidth) {\n maxRowWidth = Math.max(maxRowWidth, rowWidth);\n offsetX = 0;\n offsetY += maxItemHeightInRow;\n legendObj._height += maxItemHeightInRow;\n maxItemHeightInRow = 0;\n }\n\n Drawing.setTranslate(this,\n titleSize[0] + bw + offsetX,\n titleSize[1] + bw + offsetY + h / 2 + itemGap\n );\n\n rowWidth = offsetX + w + itemGap;\n offsetX += next;\n maxItemHeightInRow = Math.max(maxItemHeightInRow, h);\n });\n\n if(oneRowLegend) {\n legendObj._width = offsetX + bw2;\n legendObj._height = maxItemHeightInRow + endPad;\n } else {\n legendObj._width = Math.max(maxRowWidth, rowWidth) + bw2;\n legendObj._height += maxItemHeightInRow + endPad;\n }\n }\n }\n\n legendObj._width = Math.ceil(\n Math.max(\n legendObj._width + titleSize[0],\n legendObj._titleWidth + 2 * (bw + constants.titlePad)\n )\n );\n\n legendObj._height = Math.ceil(\n Math.max(\n legendObj._height + titleSize[1],\n legendObj._titleHeight + 2 * (bw + constants.itemGap)\n )\n );\n\n legendObj._effHeight = Math.min(legendObj._height, legendObj._maxHeight);\n\n var edits = gd._context.edits;\n var isEditable = edits.legendText || edits.legendPosition;\n traces.each(function(d) {\n var traceToggle = d3.select(this).select('.' + legendId + 'toggle');\n var h = d[0].height;\n var legendgroup = d[0].trace.legendgroup;\n var traceWidth = getTraceWidth(d, legendObj, textGap);\n if(isGrouped && legendgroup !== '') {\n traceWidth = legendGroupWidths[legendgroup];\n }\n var w = isEditable ? textGap : (toggleRectWidth || traceWidth);\n if(!isVertical && !isFraction) {\n w += itemGap / 2;\n }\n Drawing.setRect(traceToggle, 0, -h / 2, w, h);\n });\n}\n\nfunction expandMargin(gd, legendId, lx, ly) {\n var fullLayout = gd._fullLayout;\n var legendObj = fullLayout[legendId];\n var xanchor = getXanchor(legendObj);\n var yanchor = getYanchor(legendObj);\n\n var isPaperX = legendObj.xref === 'paper';\n var isPaperY = legendObj.yref === 'paper';\n\n gd._fullLayout._reservedMargin[legendId] = {};\n var sideY = legendObj.y < 0.5 ? 'b' : 't';\n var sideX = legendObj.x < 0.5 ? 'l' : 'r';\n var possibleReservedMargins = {\n r: (fullLayout.width - lx),\n l: lx + legendObj._width,\n b: (fullLayout.height - ly),\n t: ly + legendObj._effHeight\n };\n\n if(isPaperX && isPaperY) {\n return Plots.autoMargin(gd, legendId, {\n x: legendObj.x,\n y: legendObj.y,\n l: legendObj._width * (FROM_TL[xanchor]),\n r: legendObj._width * (FROM_BR[xanchor]),\n b: legendObj._effHeight * (FROM_BR[yanchor]),\n t: legendObj._effHeight * (FROM_TL[yanchor])\n });\n } else if(isPaperX) {\n gd._fullLayout._reservedMargin[legendId][sideY] = possibleReservedMargins[sideY];\n } else if(isPaperY) {\n gd._fullLayout._reservedMargin[legendId][sideX] = possibleReservedMargins[sideX];\n } else {\n if(legendObj.orientation === 'v') {\n gd._fullLayout._reservedMargin[legendId][sideX] = possibleReservedMargins[sideX];\n } else {\n gd._fullLayout._reservedMargin[legendId][sideY] = possibleReservedMargins[sideY];\n }\n }\n}\n\nfunction getXanchor(legendObj) {\n return Lib.isRightAnchor(legendObj) ? 'right' :\n Lib.isCenterAnchor(legendObj) ? 'center' :\n 'left';\n}\n\nfunction getYanchor(legendObj) {\n return Lib.isBottomAnchor(legendObj) ? 'bottom' :\n Lib.isMiddleAnchor(legendObj) ? 'middle' :\n 'top';\n}\n\nfunction getId(legendObj) {\n return legendObj._id || 'legend';\n}\n","'use strict';\n\n\nmodule.exports = {\n visible: {\n valType: 'boolean',\n editType: 'calc',\n description: [\n 'Determines whether or not this set of error bars is visible.'\n ].join(' ')\n },\n type: {\n valType: 'enumerated',\n values: ['percent', 'constant', 'sqrt', 'data'],\n editType: 'calc',\n description: [\n 'Determines the rule used to generate the error bars.',\n\n 'If *constant`, the bar lengths are of a constant value.',\n 'Set this constant in `value`.',\n\n 'If *percent*, the bar lengths correspond to a percentage of',\n 'underlying data. Set this percentage in `value`.',\n\n 'If *sqrt*, the bar lengths correspond to the square of the',\n 'underlying data.',\n\n 'If *data*, the bar lengths are set with data set `array`.'\n ].join(' ')\n },\n symmetric: {\n valType: 'boolean',\n editType: 'calc',\n description: [\n 'Determines whether or not the error bars have the same length',\n 'in both direction',\n '(top/bottom for vertical bars, left/right for horizontal bars.'\n ].join(' ')\n },\n array: {\n valType: 'data_array',\n editType: 'calc',\n description: [\n 'Sets the data corresponding the length of each error bar.',\n 'Values are plotted relative to the underlying data.'\n ].join(' ')\n },\n arrayminus: {\n valType: 'data_array',\n editType: 'calc',\n description: [\n 'Sets the data corresponding the length of each error bar in the',\n 'bottom (left) direction for vertical (horizontal) bars',\n 'Values are plotted relative to the underlying data.'\n ].join(' ')\n },\n value: {\n valType: 'number',\n min: 0,\n dflt: 10,\n editType: 'calc',\n description: [\n 'Sets the value of either the percentage',\n '(if `type` is set to *percent*) or the constant',\n '(if `type` is set to *constant*) corresponding to the lengths of',\n 'the error bars.'\n ].join(' ')\n },\n valueminus: {\n valType: 'number',\n min: 0,\n dflt: 10,\n editType: 'calc',\n description: [\n 'Sets the value of either the percentage',\n '(if `type` is set to *percent*) or the constant',\n '(if `type` is set to *constant*) corresponding to the lengths of',\n 'the error bars in the',\n 'bottom (left) direction for vertical (horizontal) bars'\n ].join(' ')\n },\n traceref: {\n valType: 'integer',\n min: 0,\n dflt: 0,\n editType: 'style'\n },\n tracerefminus: {\n valType: 'integer',\n min: 0,\n dflt: 0,\n editType: 'style'\n },\n copy_ystyle: {\n valType: 'boolean',\n editType: 'plot'\n },\n copy_zstyle: {\n valType: 'boolean',\n editType: 'style'\n },\n color: {\n valType: 'color',\n editType: 'style',\n description: 'Sets the stoke color of the error bars.'\n },\n thickness: {\n valType: 'number',\n min: 0,\n dflt: 2,\n editType: 'style',\n description: 'Sets the thickness (in px) of the error bars.'\n },\n width: {\n valType: 'number',\n min: 0,\n editType: 'plot',\n description: [\n 'Sets the width (in px) of the cross-bar at both ends',\n 'of the error bars.'\n ].join(' ')\n },\n editType: 'calc',\n\n _deprecated: {\n opacity: {\n valType: 'number',\n editType: 'style',\n description: [\n 'Obsolete.',\n 'Use the alpha channel in error bar `color` to set the opacity.'\n ].join(' ')\n }\n }\n};\n","'use strict';\n\nvar axisIds = require('../../plots/cartesian/axis_ids');\nvar scatterSubTypes = require('../../traces/scatter/subtypes');\nvar Registry = require('../../registry');\nvar isUnifiedHover = require('../fx/helpers').isUnifiedHover;\n\nvar createModeBar = require('./modebar');\nvar modeBarButtons = require('./buttons');\nvar DRAW_MODES = require('./constants').DRAW_MODES;\nvar extendDeep = require('../../lib').extendDeep;\n\n/**\n * ModeBar wrapper around 'create' and 'update',\n * chooses buttons to pass to ModeBar constructor based on\n * plot type and plot config.\n *\n * @param {object} gd main plot object\n *\n */\nmodule.exports = function manageModeBar(gd) {\n var fullLayout = gd._fullLayout;\n var context = gd._context;\n var modeBar = fullLayout._modeBar;\n\n if(!context.displayModeBar && !context.watermark) {\n if(modeBar) {\n modeBar.destroy();\n delete fullLayout._modeBar;\n }\n return;\n }\n\n if(!Array.isArray(context.modeBarButtonsToRemove)) {\n throw new Error([\n '*modeBarButtonsToRemove* configuration options',\n 'must be an array.'\n ].join(' '));\n }\n\n if(!Array.isArray(context.modeBarButtonsToAdd)) {\n throw new Error([\n '*modeBarButtonsToAdd* configuration options',\n 'must be an array.'\n ].join(' '));\n }\n\n var customButtons = context.modeBarButtons;\n var buttonGroups;\n\n if(Array.isArray(customButtons) && customButtons.length) {\n buttonGroups = fillCustomButton(customButtons);\n } else if(!context.displayModeBar && context.watermark) {\n buttonGroups = [];\n } else {\n buttonGroups = getButtonGroups(gd);\n }\n\n if(modeBar) modeBar.update(gd, buttonGroups);\n else fullLayout._modeBar = createModeBar(gd, buttonGroups);\n};\n\n// logic behind which buttons are displayed by default\nfunction getButtonGroups(gd) {\n var fullLayout = gd._fullLayout;\n var fullData = gd._fullData;\n var context = gd._context;\n\n function match(name, B) {\n if(typeof B === 'string') {\n if(B.toLowerCase() === name.toLowerCase()) return true;\n } else {\n var v0 = B.name;\n var v1 = (B._cat || B.name);\n\n if(v0 === name || v1 === name.toLowerCase()) return true;\n }\n return false;\n }\n\n var layoutAdd = fullLayout.modebar.add;\n if(typeof layoutAdd === 'string') layoutAdd = [layoutAdd];\n\n var layoutRemove = fullLayout.modebar.remove;\n if(typeof layoutRemove === 'string') layoutRemove = [layoutRemove];\n\n var buttonsToAdd = context.modeBarButtonsToAdd.concat(\n layoutAdd.filter(function(e) {\n for(var i = 0; i < context.modeBarButtonsToRemove.length; i++) {\n if(match(e, context.modeBarButtonsToRemove[i])) return false;\n }\n return true;\n })\n );\n\n var buttonsToRemove = context.modeBarButtonsToRemove.concat(\n layoutRemove.filter(function(e) {\n for(var i = 0; i < context.modeBarButtonsToAdd.length; i++) {\n if(match(e, context.modeBarButtonsToAdd[i])) return false;\n }\n return true;\n })\n );\n\n var hasCartesian = fullLayout._has('cartesian');\n var hasGL3D = fullLayout._has('gl3d');\n var hasGeo = fullLayout._has('geo');\n var hasPie = fullLayout._has('pie');\n var hasFunnelarea = fullLayout._has('funnelarea');\n var hasGL2D = fullLayout._has('gl2d');\n var hasTernary = fullLayout._has('ternary');\n var hasMapbox = fullLayout._has('mapbox');\n var hasPolar = fullLayout._has('polar');\n var hasSmith = fullLayout._has('smith');\n var hasSankey = fullLayout._has('sankey');\n var allAxesFixed = areAllAxesFixed(fullLayout);\n var hasUnifiedHoverLabel = isUnifiedHover(fullLayout.hovermode);\n\n var groups = [];\n\n function addGroup(newGroup) {\n if(!newGroup.length) return;\n\n var out = [];\n\n for(var i = 0; i < newGroup.length; i++) {\n var name = newGroup[i];\n var B = modeBarButtons[name];\n var v0 = B.name.toLowerCase();\n var v1 = (B._cat || B.name).toLowerCase();\n var found = false;\n for(var q = 0; q < buttonsToRemove.length; q++) {\n var t = buttonsToRemove[q].toLowerCase();\n if(t === v0 || t === v1) {\n found = true;\n break;\n }\n }\n if(found) continue;\n out.push(modeBarButtons[name]);\n }\n\n groups.push(out);\n }\n\n // buttons common to all plot types\n var commonGroup = ['toImage'];\n if(context.showEditInChartStudio) commonGroup.push('editInChartStudio');\n else if(context.showSendToCloud) commonGroup.push('sendDataToCloud');\n addGroup(commonGroup);\n\n var zoomGroup = [];\n var hoverGroup = [];\n var resetGroup = [];\n var dragModeGroup = [];\n\n if((hasCartesian || hasGL2D || hasPie || hasFunnelarea || hasTernary) + hasGeo + hasGL3D + hasMapbox + hasPolar + hasSmith > 1) {\n // graphs with more than one plot types get 'union buttons'\n // which reset the view or toggle hover labels across all subplots.\n hoverGroup = ['toggleHover'];\n resetGroup = ['resetViews'];\n } else if(hasGeo) {\n zoomGroup = ['zoomInGeo', 'zoomOutGeo'];\n hoverGroup = ['hoverClosestGeo'];\n resetGroup = ['resetGeo'];\n } else if(hasGL3D) {\n hoverGroup = ['hoverClosest3d'];\n resetGroup = ['resetCameraDefault3d', 'resetCameraLastSave3d'];\n } else if(hasMapbox) {\n zoomGroup = ['zoomInMapbox', 'zoomOutMapbox'];\n hoverGroup = ['toggleHover'];\n resetGroup = ['resetViewMapbox'];\n } else if(hasGL2D) {\n hoverGroup = ['hoverClosestGl2d'];\n } else if(hasPie) {\n hoverGroup = ['hoverClosestPie'];\n } else if(hasSankey) {\n hoverGroup = ['hoverClosestCartesian', 'hoverCompareCartesian'];\n resetGroup = ['resetViewSankey'];\n } else { // hasPolar, hasSmith, hasTernary\n // always show at least one hover icon.\n hoverGroup = ['toggleHover'];\n }\n // if we have cartesian, allow switching between closest and compare\n // regardless of what other types are on the plot, since they'll all\n // just treat any truthy hovermode as 'closest'\n if(hasCartesian) {\n hoverGroup = ['toggleSpikelines', 'hoverClosestCartesian', 'hoverCompareCartesian'];\n }\n if(hasNoHover(fullData) || hasUnifiedHoverLabel) {\n hoverGroup = [];\n }\n\n if((hasCartesian || hasGL2D) && !allAxesFixed) {\n zoomGroup = ['zoomIn2d', 'zoomOut2d', 'autoScale2d'];\n if(resetGroup[0] !== 'resetViews') resetGroup = ['resetScale2d'];\n }\n\n if(hasGL3D) {\n dragModeGroup = ['zoom3d', 'pan3d', 'orbitRotation', 'tableRotation'];\n } else if(((hasCartesian || hasGL2D) && !allAxesFixed) || hasTernary) {\n dragModeGroup = ['zoom2d', 'pan2d'];\n } else if(hasMapbox || hasGeo) {\n dragModeGroup = ['pan2d'];\n } else if(hasPolar) {\n dragModeGroup = ['zoom2d'];\n }\n if(isSelectable(fullData)) {\n dragModeGroup.push('select2d', 'lasso2d');\n }\n\n var enabledHoverGroup = [];\n var enableHover = function(a) {\n // return if already added\n if(enabledHoverGroup.indexOf(a) !== -1) return;\n // should be in hoverGroup\n if(hoverGroup.indexOf(a) !== -1) {\n enabledHoverGroup.push(a);\n }\n };\n if(Array.isArray(buttonsToAdd)) {\n var newList = [];\n for(var i = 0; i < buttonsToAdd.length; i++) {\n var b = buttonsToAdd[i];\n if(typeof b === 'string') {\n b = b.toLowerCase();\n\n if(DRAW_MODES.indexOf(b) !== -1) {\n // accept pre-defined drag modes i.e. shape drawing features as string\n if(\n fullLayout._has('mapbox') || // draw shapes in paper coordinate (could be improved in future to support data coordinate, when there is no pitch)\n fullLayout._has('cartesian') // draw shapes in data coordinate\n ) {\n dragModeGroup.push(b);\n }\n } else if(b === 'togglespikelines') {\n enableHover('toggleSpikelines');\n } else if(b === 'togglehover') {\n enableHover('toggleHover');\n } else if(b === 'hovercompare') {\n enableHover('hoverCompareCartesian');\n } else if(b === 'hoverclosest') {\n enableHover('hoverClosestCartesian');\n enableHover('hoverClosestGeo');\n enableHover('hoverClosest3d');\n enableHover('hoverClosestGl2d');\n enableHover('hoverClosestPie');\n } else if(b === 'v1hovermode') {\n enableHover('toggleHover');\n enableHover('hoverClosestCartesian');\n enableHover('hoverCompareCartesian');\n enableHover('hoverClosestGeo');\n enableHover('hoverClosest3d');\n enableHover('hoverClosestGl2d');\n enableHover('hoverClosestPie');\n }\n } else newList.push(b);\n }\n buttonsToAdd = newList;\n }\n\n addGroup(dragModeGroup);\n addGroup(zoomGroup.concat(resetGroup));\n addGroup(enabledHoverGroup);\n\n return appendButtonsToGroups(groups, buttonsToAdd);\n}\n\nfunction areAllAxesFixed(fullLayout) {\n var axList = axisIds.list({_fullLayout: fullLayout}, null, true);\n\n for(var i = 0; i < axList.length; i++) {\n if(!axList[i].fixedrange) {\n return false;\n }\n }\n\n return true;\n}\n\n// look for traces that support selection\n// to be updated as we add more selectPoints handlers\nfunction isSelectable(fullData) {\n var selectable = false;\n\n for(var i = 0; i < fullData.length; i++) {\n if(selectable) break;\n\n var trace = fullData[i];\n\n if(!trace._module || !trace._module.selectPoints) continue;\n\n if(Registry.traceIs(trace, 'scatter-like')) {\n if(scatterSubTypes.hasMarkers(trace) || scatterSubTypes.hasText(trace)) {\n selectable = true;\n }\n } else if(Registry.traceIs(trace, 'box-violin')) {\n if(trace.boxpoints === 'all' || trace.points === 'all') {\n selectable = true;\n }\n } else {\n // assume that in general if the trace module has selectPoints,\n // then it's selectable. Scatter is an exception to this because it must\n // have markers or text, not just be a scatter type.\n\n selectable = true;\n }\n }\n\n return selectable;\n}\n\n// check whether all trace are 'noHover'\nfunction hasNoHover(fullData) {\n for(var i = 0; i < fullData.length; i++) {\n if(!Registry.traceIs(fullData[i], 'noHover')) return false;\n }\n return true;\n}\n\nfunction appendButtonsToGroups(groups, buttons) {\n if(buttons.length) {\n if(Array.isArray(buttons[0])) {\n for(var i = 0; i < buttons.length; i++) {\n groups.push(buttons[i]);\n }\n } else groups.push(buttons);\n }\n\n return groups;\n}\n\n// fill in custom buttons referring to default mode bar buttons\nfunction fillCustomButton(originalModeBarButtons) {\n var customButtons = extendDeep([], originalModeBarButtons);\n\n for(var i = 0; i < customButtons.length; i++) {\n var buttonGroup = customButtons[i];\n\n for(var j = 0; j < buttonGroup.length; j++) {\n var button = buttonGroup[j];\n\n if(typeof button === 'string') {\n if(modeBarButtons[button] !== undefined) {\n customButtons[i][j] = modeBarButtons[button];\n } else {\n throw new Error([\n '*modeBarButtons* configuration options',\n 'invalid button name'\n ].join(' '));\n }\n }\n }\n }\n\n return customButtons;\n}\n","'use strict';\n\nvar Lib = require('../../lib');\n\n// look for either subplot or xaxis and yaxis attributes\n// does not handle splom case\nexports.getSubplot = function(trace) {\n return trace.subplot || (trace.xaxis + trace.yaxis) || trace.geo;\n};\n\n// is trace in given list of subplots?\n// does handle splom case\nexports.isTraceInSubplots = function(trace, subplots) {\n if(trace.type === 'splom') {\n var xaxes = trace.xaxes || [];\n var yaxes = trace.yaxes || [];\n for(var i = 0; i < xaxes.length; i++) {\n for(var j = 0; j < yaxes.length; j++) {\n if(subplots.indexOf(xaxes[i] + yaxes[j]) !== -1) {\n return true;\n }\n }\n }\n return false;\n }\n\n return subplots.indexOf(exports.getSubplot(trace)) !== -1;\n};\n\n// convenience functions for mapping all relevant axes\nexports.flat = function(subplots, v) {\n var out = new Array(subplots.length);\n for(var i = 0; i < subplots.length; i++) {\n out[i] = v;\n }\n return out;\n};\n\nexports.p2c = function(axArray, v) {\n var out = new Array(axArray.length);\n for(var i = 0; i < axArray.length; i++) {\n out[i] = axArray[i].p2c(v);\n }\n return out;\n};\n\nexports.getDistanceFunction = function(mode, dx, dy, dxy) {\n if(mode === 'closest') return dxy || exports.quadrature(dx, dy);\n return mode.charAt(0) === 'x' ? dx : dy;\n};\n\nexports.getClosest = function(cd, distfn, pointData) {\n // do we already have a point number? (array mode only)\n if(pointData.index !== false) {\n if(pointData.index >= 0 && pointData.index < cd.length) {\n pointData.distance = 0;\n } else pointData.index = false;\n } else {\n // apply the distance function to each data point\n // this is the longest loop... if this bogs down, we may need\n // to create pre-sorted data (by x or y), not sure how to\n // do this for 'closest'\n for(var i = 0; i < cd.length; i++) {\n var newDistance = distfn(cd[i]);\n if(newDistance <= pointData.distance) {\n pointData.index = i;\n pointData.distance = newDistance;\n }\n }\n }\n return pointData;\n};\n\n/*\n * pseudo-distance function for hover effects on areas: inside the region\n * distance is finite (`passVal`), outside it's Infinity.\n *\n * @param {number} v0: signed difference between the current position and the left edge\n * @param {number} v1: signed difference between the current position and the right edge\n * @param {number} passVal: the value to return on success\n */\nexports.inbox = function(v0, v1, passVal) {\n return (v0 * v1 < 0 || v0 === 0) ? passVal : Infinity;\n};\n\nexports.quadrature = function(dx, dy) {\n return function(di) {\n var x = dx(di);\n var y = dy(di);\n return Math.sqrt(x * x + y * y);\n };\n};\n\n/** Fill event data point object for hover and selection.\n * Invokes _module.eventData if present.\n *\n * N.B. note that point 'index' corresponds to input data array index\n * whereas 'number' is its post-transform version.\n *\n * If the hovered/selected pt corresponds to an multiple input points\n * (e.g. for histogram and transformed traces), 'pointNumbers` and 'pointIndices'\n * are include in the event data.\n *\n * @param {object} pt\n * @param {object} trace\n * @param {object} cd\n * @return {object}\n */\nexports.makeEventData = function(pt, trace, cd) {\n // hover uses 'index', select uses 'pointNumber'\n var pointNumber = 'index' in pt ? pt.index : pt.pointNumber;\n\n var out = {\n data: trace._input,\n fullData: trace,\n curveNumber: trace.index,\n pointNumber: pointNumber\n };\n\n if(trace._indexToPoints) {\n var pointIndices = trace._indexToPoints[pointNumber];\n\n if(pointIndices.length === 1) {\n out.pointIndex = pointIndices[0];\n } else {\n out.pointIndices = pointIndices;\n }\n } else {\n out.pointIndex = pointNumber;\n }\n\n if(trace._module.eventData) {\n out = trace._module.eventData(out, pt, trace, cd, pointNumber);\n } else {\n if('xVal' in pt) out.x = pt.xVal;\n else if('x' in pt) out.x = pt.x;\n\n if('yVal' in pt) out.y = pt.yVal;\n else if('y' in pt) out.y = pt.y;\n\n if(pt.xa) out.xaxis = pt.xa;\n if(pt.ya) out.yaxis = pt.ya;\n if(pt.zLabelVal !== undefined) out.z = pt.zLabelVal;\n }\n\n exports.appendArrayPointValue(out, trace, pointNumber);\n\n return out;\n};\n\n/** Appends values inside array attributes corresponding to given point number\n *\n * @param {object} pointData : point data object (gets mutated here)\n * @param {object} trace : full trace object\n * @param {number|Array(number)} pointNumber : point number. May be a length-2 array\n * [row, col] to dig into 2D arrays\n */\nexports.appendArrayPointValue = function(pointData, trace, pointNumber) {\n var arrayAttrs = trace._arrayAttrs;\n\n if(!arrayAttrs) {\n return;\n }\n\n for(var i = 0; i < arrayAttrs.length; i++) {\n var astr = arrayAttrs[i];\n var key = getPointKey(astr);\n\n if(pointData[key] === undefined) {\n var val = Lib.nestedProperty(trace, astr).get();\n var pointVal = getPointData(val, pointNumber);\n\n if(pointVal !== undefined) pointData[key] = pointVal;\n }\n }\n};\n\n/**\n * Appends values inside array attributes corresponding to given point number array\n * For use when pointData references a plot entity that arose (or potentially arose)\n * from multiple points in the input data\n *\n * @param {object} pointData : point data object (gets mutated here)\n * @param {object} trace : full trace object\n * @param {Array(number)|Array(Array(number))} pointNumbers : Array of point numbers.\n * Each entry in the array may itself be a length-2 array [row, col] to dig into 2D arrays\n */\nexports.appendArrayMultiPointValues = function(pointData, trace, pointNumbers) {\n var arrayAttrs = trace._arrayAttrs;\n\n if(!arrayAttrs) {\n return;\n }\n\n for(var i = 0; i < arrayAttrs.length; i++) {\n var astr = arrayAttrs[i];\n var key = getPointKey(astr);\n\n if(pointData[key] === undefined) {\n var val = Lib.nestedProperty(trace, astr).get();\n var keyVal = new Array(pointNumbers.length);\n\n for(var j = 0; j < pointNumbers.length; j++) {\n keyVal[j] = getPointData(val, pointNumbers[j]);\n }\n pointData[key] = keyVal;\n }\n }\n};\n\nvar pointKeyMap = {\n ids: 'id',\n locations: 'location',\n labels: 'label',\n values: 'value',\n 'marker.colors': 'color',\n parents: 'parent'\n};\n\nfunction getPointKey(astr) {\n return pointKeyMap[astr] || astr;\n}\n\nfunction getPointData(val, pointNumber) {\n if(Array.isArray(pointNumber)) {\n if(Array.isArray(val) && Array.isArray(val[pointNumber[0]])) {\n return val[pointNumber[0]][pointNumber[1]];\n }\n } else {\n return val[pointNumber];\n }\n}\n\nvar xyHoverMode = {\n x: true,\n y: true\n};\n\nvar unifiedHoverMode = {\n 'x unified': true,\n 'y unified': true\n};\n\nexports.isUnifiedHover = function(hovermode) {\n if(typeof hovermode !== 'string') return false;\n return !!unifiedHoverMode[hovermode];\n};\n\nexports.isXYhover = function(hovermode) {\n if(typeof hovermode !== 'string') return false;\n return !!xyHoverMode[hovermode];\n};\n","'use strict';\n\nvar constants = require('./constants');\n\nmodule.exports = {\n editType: 'modebar',\n\n orientation: {\n valType: 'enumerated',\n values: ['v', 'h'],\n dflt: 'h',\n editType: 'modebar',\n description: 'Sets the orientation of the modebar.'\n },\n bgcolor: {\n valType: 'color',\n editType: 'modebar',\n description: 'Sets the background color of the modebar.'\n },\n color: {\n valType: 'color',\n editType: 'modebar',\n description: 'Sets the color of the icons in the modebar.'\n },\n activecolor: {\n valType: 'color',\n editType: 'modebar',\n description: 'Sets the color of the active or hovered on icons in the modebar.'\n },\n uirevision: {\n valType: 'any',\n editType: 'none',\n description: [\n 'Controls persistence of user-driven changes related to the modebar,',\n 'including `hovermode`, `dragmode`, and `showspikes` at both the',\n 'root level and inside subplots. Defaults to `layout.uirevision`.'\n ].join(' ')\n },\n add: {\n valType: 'string',\n arrayOk: true,\n dflt: '',\n editType: 'modebar',\n description: [\n 'Determines which predefined modebar buttons to add.',\n 'Please note that these buttons will only be shown if they are',\n 'compatible with all trace types used in a graph.',\n 'Similar to `config.modeBarButtonsToAdd` option.',\n 'This may include *' + constants.backButtons.join('*, *') + '*.'\n ].join(' ')\n },\n remove: {\n valType: 'string',\n arrayOk: true,\n dflt: '',\n editType: 'modebar',\n description: [\n 'Determines which predefined modebar buttons to remove.',\n 'Similar to `config.modeBarButtonsToRemove` option.',\n 'This may include *' + constants.foreButtons.join('*, *') + '*.'\n ].join(' ')\n }\n};\n","'use strict';\n\nvar Registry = require('../../registry');\nvar hover = require('./hover').hover;\n\nmodule.exports = function click(gd, evt, subplot) {\n var annotationsDone = Registry.getComponentMethod('annotations', 'onClick')(gd, gd._hoverdata);\n\n // fallback to fail-safe in case the plot type's hover method doesn't pass the subplot.\n // Ternary, for example, didn't, but it was caught because tested.\n if(subplot !== undefined) {\n // The true flag at the end causes it to re-run the hover computation to figure out *which*\n // point is being clicked. Without this, clicking is somewhat unreliable.\n hover(gd, evt, subplot, true);\n }\n\n function emitClick() { gd.emit('plotly_click', {points: gd._hoverdata, event: evt}); }\n\n if(gd._hoverdata && evt && evt.target) {\n if(annotationsDone && annotationsDone.then) {\n annotationsDone.then(emitClick);\n } else emitClick();\n\n // why do we get a double event without this???\n if(evt.stopImmediatePropagation) evt.stopImmediatePropagation();\n }\n};\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\n\nvar Registry = require('../../registry');\nvar Lib = require('../../lib');\nvar Template = require('../../plot_api/plot_template');\n\nvar attributes = require('./attributes');\n\n\nmodule.exports = function(traceIn, traceOut, defaultColor, opts) {\n var objName = 'error_' + opts.axis;\n var containerOut = Template.newContainer(traceOut, objName);\n var containerIn = traceIn[objName] || {};\n\n function coerce(attr, dflt) {\n return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);\n }\n\n var hasErrorBars = (\n containerIn.array !== undefined ||\n containerIn.value !== undefined ||\n containerIn.type === 'sqrt'\n );\n\n var visible = coerce('visible', hasErrorBars);\n\n if(visible === false) return;\n\n var type = coerce('type', 'array' in containerIn ? 'data' : 'percent');\n var symmetric = true;\n\n if(type !== 'sqrt') {\n symmetric = coerce('symmetric',\n !((type === 'data' ? 'arrayminus' : 'valueminus') in containerIn));\n }\n\n if(type === 'data') {\n coerce('array');\n coerce('traceref');\n if(!symmetric) {\n coerce('arrayminus');\n coerce('tracerefminus');\n }\n } else if(type === 'percent' || type === 'constant') {\n coerce('value');\n if(!symmetric) coerce('valueminus');\n }\n\n var copyAttr = 'copy_' + opts.inherit + 'style';\n if(opts.inherit) {\n var inheritObj = traceOut['error_' + opts.inherit];\n if((inheritObj || {}).visible) {\n coerce(copyAttr, !(containerIn.color ||\n isNumeric(containerIn.thickness) ||\n isNumeric(containerIn.width)));\n }\n }\n if(!opts.inherit || !containerOut[copyAttr]) {\n coerce('color', defaultColor);\n coerce('thickness');\n coerce('width', Registry.traceIs(traceOut, 'gl3d') ? 0 : 4);\n }\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Axes = require('../../plots/cartesian/axes');\nvar handleArrayContainerDefaults = require('../../plots/array_container_defaults');\n\nvar handleAnnotationCommonDefaults = require('./common_defaults');\nvar attributes = require('./attributes');\n\n\nmodule.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {\n handleArrayContainerDefaults(layoutIn, layoutOut, {\n name: 'annotations',\n handleItemDefaults: handleAnnotationDefaults\n });\n};\n\nfunction handleAnnotationDefaults(annIn, annOut, fullLayout) {\n function coerce(attr, dflt) {\n return Lib.coerce(annIn, annOut, attributes, attr, dflt);\n }\n\n var visible = coerce('visible');\n var clickToShow = coerce('clicktoshow');\n\n if(!(visible || clickToShow)) return;\n\n handleAnnotationCommonDefaults(annIn, annOut, fullLayout, coerce);\n\n var showArrow = annOut.showarrow;\n\n // positioning\n var axLetters = ['x', 'y'];\n var arrowPosDflt = [-10, -30];\n var gdMock = {_fullLayout: fullLayout};\n\n for(var i = 0; i < 2; i++) {\n var axLetter = axLetters[i];\n\n // xref, yref\n var axRef = Axes.coerceRef(annIn, annOut, gdMock, axLetter, '', 'paper');\n\n if(axRef !== 'paper') {\n var ax = Axes.getFromId(gdMock, axRef);\n ax._annIndices.push(annOut._index);\n }\n\n // x, y\n Axes.coercePosition(annOut, gdMock, coerce, axRef, axLetter, 0.5);\n\n if(showArrow) {\n var arrowPosAttr = 'a' + axLetter;\n // axref, ayref\n var aaxRef = Axes.coerceRef(annIn, annOut, gdMock, arrowPosAttr, 'pixel',\n ['pixel', 'paper']);\n\n // for now the arrow can only be on the same axis or specified as pixels\n // TODO: sometime it might be interesting to allow it to be on *any* axis\n // but that would require updates to drawing & autorange code and maybe more\n if(aaxRef !== 'pixel' && aaxRef !== axRef) {\n aaxRef = annOut[arrowPosAttr] = 'pixel';\n }\n\n // ax, ay\n var aDflt = (aaxRef === 'pixel') ? arrowPosDflt[i] : 0.4;\n Axes.coercePosition(annOut, gdMock, coerce, aaxRef, arrowPosAttr, aDflt);\n }\n\n // xanchor, yanchor\n coerce(axLetter + 'anchor');\n\n // xshift, yshift\n coerce(axLetter + 'shift');\n }\n\n // if you have one coordinate you should have both\n Lib.noneOrAll(annIn, annOut, ['x', 'y']);\n\n // if you have one part of arrow length you should have both\n if(showArrow) {\n Lib.noneOrAll(annIn, annOut, ['ax', 'ay']);\n }\n\n if(clickToShow) {\n var xClick = coerce('xclick');\n var yClick = coerce('yclick');\n\n // put the actual click data to bind to into private attributes\n // so we don't have to do this little bit of logic on every hover event\n annOut._xclick = (xClick === undefined) ?\n annOut.x :\n Axes.cleanPosition(xClick, gdMock, annOut.xref);\n annOut._yclick = (yClick === undefined) ?\n annOut.y :\n Axes.cleanPosition(yClick, gdMock, annOut.yref);\n }\n}\n","'use strict';\n\nmodule.exports = {\n moduleType: 'component',\n name: 'images',\n\n layoutAttributes: require('./attributes'),\n supplyLayoutDefaults: require('./defaults'),\n includeBasePlot: require('../../plots/cartesian/include_components')('images'),\n\n draw: require('./draw'),\n\n convertCoords: require('./convert_coords')\n};\n","'use strict';\n\nvar annAttrs = require('../annotations/attributes');\nvar overrideAll = require('../../plot_api/edit_types').overrideAll;\nvar templatedArray = require('../../plot_api/plot_template').templatedArray;\n\nmodule.exports = overrideAll(templatedArray('annotation', {\n visible: annAttrs.visible,\n x: {\n valType: 'any',\n description: [\n 'Sets the annotation\\'s x position.'\n ].join(' ')\n },\n y: {\n valType: 'any',\n description: [\n 'Sets the annotation\\'s y position.'\n ].join(' ')\n },\n z: {\n valType: 'any',\n description: [\n 'Sets the annotation\\'s z position.'\n ].join(' ')\n },\n ax: {\n valType: 'number',\n description: [\n 'Sets the x component of the arrow tail about the arrow head (in pixels).'\n ].join(' ')\n },\n ay: {\n valType: 'number',\n description: [\n 'Sets the y component of the arrow tail about the arrow head (in pixels).'\n ].join(' ')\n },\n\n xanchor: annAttrs.xanchor,\n xshift: annAttrs.xshift,\n yanchor: annAttrs.yanchor,\n yshift: annAttrs.yshift,\n\n text: annAttrs.text,\n textangle: annAttrs.textangle,\n font: annAttrs.font,\n width: annAttrs.width,\n height: annAttrs.height,\n opacity: annAttrs.opacity,\n align: annAttrs.align,\n valign: annAttrs.valign,\n bgcolor: annAttrs.bgcolor,\n bordercolor: annAttrs.bordercolor,\n borderpad: annAttrs.borderpad,\n borderwidth: annAttrs.borderwidth,\n showarrow: annAttrs.showarrow,\n arrowcolor: annAttrs.arrowcolor,\n arrowhead: annAttrs.arrowhead,\n startarrowhead: annAttrs.startarrowhead,\n arrowside: annAttrs.arrowside,\n arrowsize: annAttrs.arrowsize,\n startarrowsize: annAttrs.startarrowsize,\n arrowwidth: annAttrs.arrowwidth,\n standoff: annAttrs.standoff,\n startstandoff: annAttrs.startstandoff,\n hovertext: annAttrs.hovertext,\n hoverlabel: annAttrs.hoverlabel,\n captureevents: annAttrs.captureevents,\n\n // maybes later?\n // clicktoshow: annAttrs.clicktoshow,\n // xclick: annAttrs.xclick,\n // yclick: annAttrs.yclick,\n\n // not needed!\n // axref: 'pixel'\n // ayref: 'pixel'\n // xref: 'x'\n // yref: 'y\n // zref: 'z'\n}), 'calc', 'from-root');\n","'use strict';\n\nvar Lib = require('../../lib');\nvar hasColorscale = require('./helpers').hasColorscale;\nvar extractOpts = require('./helpers').extractOpts;\n\nmodule.exports = function crossTraceDefaults(fullData, fullLayout) {\n function replace(cont, k) {\n var val = cont['_' + k];\n if(val !== undefined) {\n cont[k] = val;\n }\n }\n\n function relinkColorAttrs(outerCont, cbOpt) {\n var cont = cbOpt.container ?\n Lib.nestedProperty(outerCont, cbOpt.container).get() :\n outerCont;\n\n if(cont) {\n if(cont.coloraxis) {\n // stash ref to color axis\n cont._colorAx = fullLayout[cont.coloraxis];\n } else {\n var cOpts = extractOpts(cont);\n var isAuto = cOpts.auto;\n\n if(isAuto || cOpts.min === undefined) {\n replace(cont, cbOpt.min);\n }\n if(isAuto || cOpts.max === undefined) {\n replace(cont, cbOpt.max);\n }\n if(cOpts.autocolorscale) {\n replace(cont, 'colorscale');\n }\n }\n }\n }\n\n for(var i = 0; i < fullData.length; i++) {\n var trace = fullData[i];\n var cbOpts = trace._module.colorbar;\n\n if(cbOpts) {\n if(Array.isArray(cbOpts)) {\n for(var j = 0; j < cbOpts.length; j++) {\n relinkColorAttrs(trace, cbOpts[j]);\n }\n } else {\n relinkColorAttrs(trace, cbOpts);\n }\n }\n\n if(hasColorscale(trace, 'marker.line')) {\n relinkColorAttrs(trace, {\n container: 'marker.line',\n min: 'cmin',\n max: 'cmax'\n });\n }\n }\n\n for(var k in fullLayout._colorAxes) {\n relinkColorAttrs(fullLayout[k], {min: 'cmin', max: 'cmax'});\n }\n};\n","'use strict';\n\nmodule.exports = {\n moduleType: 'component',\n name: 'modebar',\n\n layoutAttributes: require('./attributes'),\n supplyLayoutDefaults: require('./defaults'),\n\n manage: require('./manage')\n};\n","'use strict';\n\nvar isNumeric = require('fast-isnumeric');\n\nvar Lib = require('../../lib');\nvar extractOpts = require('./helpers').extractOpts;\n\nmodule.exports = function calc(gd, trace, opts) {\n var fullLayout = gd._fullLayout;\n var vals = opts.vals;\n var containerStr = opts.containerStr;\n\n var container = containerStr ?\n Lib.nestedProperty(trace, containerStr).get() :\n trace;\n\n var cOpts = extractOpts(container);\n var auto = cOpts.auto !== false;\n var min = cOpts.min;\n var max = cOpts.max;\n var mid = cOpts.mid;\n\n var minVal = function() { return Lib.aggNums(Math.min, null, vals); };\n var maxVal = function() { return Lib.aggNums(Math.max, null, vals); };\n\n if(min === undefined) {\n min = minVal();\n } else if(auto) {\n if(container._colorAx && isNumeric(min)) {\n min = Math.min(min, minVal());\n } else {\n min = minVal();\n }\n }\n\n if(max === undefined) {\n max = maxVal();\n } else if(auto) {\n if(container._colorAx && isNumeric(max)) {\n max = Math.max(max, maxVal());\n } else {\n max = maxVal();\n }\n }\n\n if(auto && mid !== undefined) {\n if(max - mid > mid - min) {\n min = mid - (max - mid);\n } else if(max - mid < mid - min) {\n max = mid + (mid - min);\n }\n }\n\n if(min === max) {\n min -= 0.5;\n max += 0.5;\n }\n\n cOpts._sync('min', min);\n cOpts._sync('max', max);\n\n if(cOpts.autocolorscale) {\n var scl;\n if(min * max < 0) scl = fullLayout.colorscale.diverging;\n else if(min >= 0) scl = fullLayout.colorscale.sequential;\n else scl = fullLayout.colorscale.sequentialminus;\n cOpts._sync('colorscale', scl);\n }\n};\n","'use strict';\n\nvar Registry = require('../../registry');\nvar Lib = require('../../lib');\nvar pushUnique = Lib.pushUnique;\n\nvar SHOWISOLATETIP = true;\n\nmodule.exports = function handleClick(g, gd, numClicks) {\n var fullLayout = gd._fullLayout;\n\n if(gd._dragged || gd._editing) return;\n\n var itemClick = fullLayout.legend.itemclick;\n var itemDoubleClick = fullLayout.legend.itemdoubleclick;\n var groupClick = fullLayout.legend.groupclick;\n\n if(numClicks === 1 && itemClick === 'toggle' && itemDoubleClick === 'toggleothers' &&\n SHOWISOLATETIP && gd.data && gd._context.showTips\n ) {\n Lib.notifier(Lib._(gd, 'Double-click on legend to isolate one trace'), 'long');\n SHOWISOLATETIP = false;\n } else {\n SHOWISOLATETIP = false;\n }\n\n var mode;\n if(numClicks === 1) mode = itemClick;\n else if(numClicks === 2) mode = itemDoubleClick;\n if(!mode) return;\n\n var toggleGroup = groupClick === 'togglegroup';\n\n var hiddenSlices = fullLayout.hiddenlabels ?\n fullLayout.hiddenlabels.slice() :\n [];\n\n var legendItem = g.data()[0][0];\n if(legendItem.groupTitle && legendItem.noClick) return;\n\n var fullData = gd._fullData;\n var shapesWithLegend = (fullLayout.shapes || []).filter(function(d) { return d.showlegend; });\n var allLegendItems = fullData.concat(shapesWithLegend);\n\n var fullTrace = legendItem.trace;\n if(fullTrace._isShape) {\n fullTrace = fullTrace._fullInput;\n }\n\n var legendgroup = fullTrace.legendgroup;\n\n var i, j, kcont, key, keys, val;\n var dataUpdate = {};\n var dataIndices = [];\n var carrs = [];\n var carrIdx = [];\n\n function insertDataUpdate(traceIndex, value) {\n var attrIndex = dataIndices.indexOf(traceIndex);\n var valueArray = dataUpdate.visible;\n if(!valueArray) {\n valueArray = dataUpdate.visible = [];\n }\n\n if(dataIndices.indexOf(traceIndex) === -1) {\n dataIndices.push(traceIndex);\n attrIndex = dataIndices.length - 1;\n }\n\n valueArray[attrIndex] = value;\n\n return attrIndex;\n }\n\n var updatedShapes = (fullLayout.shapes || []).map(function(d) {\n return d._input;\n });\n\n var shapesUpdated = false;\n\n function insertShapesUpdate(shapeIndex, value) {\n updatedShapes[shapeIndex].visible = value;\n shapesUpdated = true;\n }\n\n function setVisibility(fullTrace, visibility) {\n if(legendItem.groupTitle && !toggleGroup) return;\n\n var fullInput = fullTrace._fullInput || fullTrace;\n var isShape = fullInput._isShape;\n var index = fullInput.index;\n if(index === undefined) index = fullInput._index;\n\n if(Registry.hasTransform(fullInput, 'groupby')) {\n var kcont = carrs[index];\n if(!kcont) {\n var groupbyIndices = Registry.getTransformIndices(fullInput, 'groupby');\n var lastGroupbyIndex = groupbyIndices[groupbyIndices.length - 1];\n kcont = Lib.keyedContainer(fullInput, 'transforms[' + lastGroupbyIndex + '].styles', 'target', 'value.visible');\n carrs[index] = kcont;\n }\n\n var curState = kcont.get(fullTrace._group);\n\n // If not specified, assume visible. This happens if there are other style\n // properties set for a group but not the visibility. There are many similar\n // ways to do this (e.g. why not just `curState = fullTrace.visible`??? The\n // answer is: because it breaks other things like groupby trace names in\n // subtle ways.)\n if(curState === undefined) {\n curState = true;\n }\n\n if(curState !== false) {\n // true -> legendonly. All others toggle to true:\n kcont.set(fullTrace._group, visibility);\n }\n carrIdx[index] = insertDataUpdate(index, fullInput.visible === false ? false : true);\n } else {\n // false -> false (not possible since will not be visible in legend)\n // true -> legendonly\n // legendonly -> true\n var nextVisibility = fullInput.visible === false ? false : visibility;\n\n if(isShape) {\n insertShapesUpdate(index, nextVisibility);\n } else {\n insertDataUpdate(index, nextVisibility);\n }\n }\n }\n\n var thisLegend = fullTrace.legend;\n\n var fullInput = fullTrace._fullInput;\n var isShape = fullInput && fullInput._isShape;\n\n if(!isShape && Registry.traceIs(fullTrace, 'pie-like')) {\n var thisLabel = legendItem.label;\n var thisLabelIndex = hiddenSlices.indexOf(thisLabel);\n\n if(mode === 'toggle') {\n if(thisLabelIndex === -1) hiddenSlices.push(thisLabel);\n else hiddenSlices.splice(thisLabelIndex, 1);\n } else if(mode === 'toggleothers') {\n var changed = thisLabelIndex !== -1;\n var unhideList = [];\n for(i = 0; i < gd.calcdata.length; i++) {\n var cdi = gd.calcdata[i];\n for(j = 0; j < cdi.length; j++) {\n var d = cdi[j];\n var dLabel = d.label;\n\n // ensure we toggle slices that are in this legend)\n if(thisLegend === cdi[0].trace.legend) {\n if(thisLabel !== dLabel) {\n if(hiddenSlices.indexOf(dLabel) === -1) changed = true;\n pushUnique(hiddenSlices, dLabel);\n unhideList.push(dLabel);\n }\n }\n }\n }\n\n if(!changed) {\n for(var q = 0; q < unhideList.length; q++) {\n var pos = hiddenSlices.indexOf(unhideList[q]);\n if(pos !== -1) {\n hiddenSlices.splice(pos, 1);\n }\n }\n }\n }\n\n Registry.call('_guiRelayout', gd, 'hiddenlabels', hiddenSlices);\n } else {\n var hasLegendgroup = legendgroup && legendgroup.length;\n var traceIndicesInGroup = [];\n var tracei;\n if(hasLegendgroup) {\n for(i = 0; i < allLegendItems.length; i++) {\n tracei = allLegendItems[i];\n if(!tracei.visible) continue;\n if(tracei.legendgroup === legendgroup) {\n traceIndicesInGroup.push(i);\n }\n }\n }\n\n if(mode === 'toggle') {\n var nextVisibility;\n\n switch(fullTrace.visible) {\n case true:\n nextVisibility = 'legendonly';\n break;\n case false:\n nextVisibility = false;\n break;\n case 'legendonly':\n nextVisibility = true;\n break;\n }\n\n if(hasLegendgroup) {\n if(toggleGroup) {\n for(i = 0; i < allLegendItems.length; i++) {\n var item = allLegendItems[i];\n if(item.visible !== false && item.legendgroup === legendgroup) {\n setVisibility(item, nextVisibility);\n }\n }\n } else {\n setVisibility(fullTrace, nextVisibility);\n }\n } else {\n setVisibility(fullTrace, nextVisibility);\n }\n } else if(mode === 'toggleothers') {\n // Compute the clicked index. expandedIndex does what we want for expanded traces\n // but also culls hidden traces. That means we have some work to do.\n var isClicked, isInGroup, notInLegend, otherState, _item;\n var isIsolated = true;\n for(i = 0; i < allLegendItems.length; i++) {\n _item = allLegendItems[i];\n isClicked = _item === fullTrace;\n notInLegend = _item.showlegend !== true;\n if(isClicked || notInLegend) continue;\n\n isInGroup = (hasLegendgroup && _item.legendgroup === legendgroup);\n\n if(!isInGroup && _item.legend === thisLegend && _item.visible === true && !Registry.traceIs(_item, 'notLegendIsolatable')) {\n isIsolated = false;\n break;\n }\n }\n\n for(i = 0; i < allLegendItems.length; i++) {\n _item = allLegendItems[i];\n\n // False is sticky; we don't change it. Also ensure we don't change states of itmes in other legend\n if(_item.visible === false || _item.legend !== thisLegend) continue;\n\n if(Registry.traceIs(_item, 'notLegendIsolatable')) {\n continue;\n }\n\n switch(fullTrace.visible) {\n case 'legendonly':\n setVisibility(_item, true);\n break;\n case true:\n otherState = isIsolated ? true : 'legendonly';\n isClicked = _item === fullTrace;\n // N.B. consider traces that have a set legendgroup as toggleable\n notInLegend = (_item.showlegend !== true && !_item.legendgroup);\n isInGroup = isClicked || (hasLegendgroup && _item.legendgroup === legendgroup);\n setVisibility(_item, (isInGroup || notInLegend) ? true : otherState);\n break;\n }\n }\n }\n\n for(i = 0; i < carrs.length; i++) {\n kcont = carrs[i];\n if(!kcont) continue;\n var update = kcont.constructUpdate();\n\n var updateKeys = Object.keys(update);\n for(j = 0; j < updateKeys.length; j++) {\n key = updateKeys[j];\n val = dataUpdate[key] = dataUpdate[key] || [];\n val[carrIdx[i]] = update[key];\n }\n }\n\n // The length of the value arrays should be equal and any unspecified\n // values should be explicitly undefined for them to get properly culled\n // as updates and not accidentally reset to the default value. This fills\n // out sparse arrays with the required number of undefined values:\n keys = Object.keys(dataUpdate);\n for(i = 0; i < keys.length; i++) {\n key = keys[i];\n for(j = 0; j < dataIndices.length; j++) {\n // Use hasOwnProperty to protect against falsy values:\n if(!dataUpdate[key].hasOwnProperty(j)) {\n dataUpdate[key][j] = undefined;\n }\n }\n }\n\n if(shapesUpdated) {\n Registry.call('_guiUpdate', gd, dataUpdate, {shapes: updatedShapes}, dataIndices);\n } else {\n Registry.call('_guiRestyle', gd, dataUpdate, dataIndices);\n }\n }\n};\n","'use strict';\n\nvar constants = require('./constants');\n\nvar fontAttrs = require('../../plots/font_attributes');\n\nvar font = fontAttrs({\n editType: 'none',\n description: 'Sets the default hover label font used by all traces on the graph.'\n});\nfont.family.dflt = constants.HOVERFONT;\nfont.size.dflt = constants.HOVERFONTSIZE;\n\nmodule.exports = {\n clickmode: {\n valType: 'flaglist',\n flags: ['event', 'select'],\n dflt: 'event',\n editType: 'plot',\n extras: ['none'],\n description: [\n 'Determines the mode of single click interactions.',\n '*event* is the default value and emits the `plotly_click`',\n 'event. In addition this mode emits the `plotly_selected` event',\n 'in drag modes *lasso* and *select*, but with no event data attached',\n '(kept for compatibility reasons).',\n 'The *select* flag enables selecting single',\n 'data points via click. This mode also supports persistent selections,',\n 'meaning that pressing Shift while clicking, adds to / subtracts from an',\n 'existing selection. *select* with `hovermode`: *x* can be confusing, consider',\n 'explicitly setting `hovermode`: *closest* when using this feature.',\n 'Selection events are sent accordingly as long as *event* flag is set as well.',\n 'When the *event* flag is missing, `plotly_click` and `plotly_selected`',\n 'events are not fired.'\n ].join(' ')\n },\n dragmode: {\n valType: 'enumerated',\n values: [\n 'zoom',\n 'pan',\n 'select',\n 'lasso',\n 'drawclosedpath',\n 'drawopenpath',\n 'drawline',\n 'drawrect',\n 'drawcircle',\n 'orbit',\n 'turntable',\n false\n ],\n dflt: 'zoom',\n editType: 'modebar',\n description: [\n 'Determines the mode of drag interactions.',\n '*select* and *lasso* apply only to scatter traces with',\n 'markers or text. *orbit* and *turntable* apply only to',\n '3D scenes.'\n ].join(' ')\n },\n hovermode: {\n valType: 'enumerated',\n values: ['x', 'y', 'closest', false, 'x unified', 'y unified'],\n dflt: 'closest',\n editType: 'modebar',\n description: [\n 'Determines the mode of hover interactions.',\n 'If *closest*, a single hoverlabel will appear',\n 'for the *closest* point within the `hoverdistance`.',\n 'If *x* (or *y*), multiple hoverlabels will appear for multiple points',\n 'at the *closest* x- (or y-) coordinate within the `hoverdistance`,',\n 'with the caveat that no more than one hoverlabel will appear per trace.',\n 'If *x unified* (or *y unified*), a single hoverlabel will appear',\n 'multiple points at the closest x- (or y-) coordinate within the `hoverdistance`',\n 'with the caveat that no more than one hoverlabel will appear per trace.',\n 'In this mode, spikelines are enabled by default perpendicular to the specified axis.',\n 'If false, hover interactions are disabled.'\n ].join(' ')\n },\n hoverdistance: {\n valType: 'integer',\n min: -1,\n dflt: 20,\n editType: 'none',\n description: [\n 'Sets the default distance (in pixels) to look for data',\n 'to add hover labels (-1 means no cutoff, 0 means no looking for data).',\n 'This is only a real distance for hovering on point-like objects,',\n 'like scatter points. For area-like objects (bars, scatter fills, etc)',\n 'hovering is on inside the area and off outside, but these objects',\n 'will not supersede hover on point-like objects in case of conflict.'\n ].join(' ')\n },\n spikedistance: {\n valType: 'integer',\n min: -1,\n dflt: -1,\n editType: 'none',\n description: [\n 'Sets the default distance (in pixels) to look for data to draw',\n 'spikelines to (-1 means no cutoff, 0 means no looking for data).',\n 'As with hoverdistance, distance does not apply to area-like objects.',\n 'In addition, some objects can be hovered on but will not generate',\n 'spikelines, such as scatter fills.'\n ].join(' ')\n },\n hoverlabel: {\n bgcolor: {\n valType: 'color',\n editType: 'none',\n description: [\n 'Sets the background color of all hover labels on graph'\n ].join(' ')\n },\n bordercolor: {\n valType: 'color',\n editType: 'none',\n description: [\n 'Sets the border color of all hover labels on graph.'\n ].join(' ')\n },\n font: font,\n grouptitlefont: fontAttrs({\n editType: 'none',\n description: [\n 'Sets the font for group titles in hover (unified modes).',\n 'Defaults to `hoverlabel.font`.'\n ].join(' ')\n }),\n align: {\n valType: 'enumerated',\n values: ['left', 'right', 'auto'],\n dflt: 'auto',\n editType: 'none',\n description: [\n 'Sets the horizontal alignment of the text content within hover label box.',\n 'Has an effect only if the hover label text spans more two or more lines'\n ].join(' ')\n },\n namelength: {\n valType: 'integer',\n min: -1,\n dflt: 15,\n editType: 'none',\n description: [\n 'Sets the default length (in number of characters) of the trace name in',\n 'the hover labels for all traces. -1 shows the whole name',\n 'regardless of length. 0-3 shows the first 0-3 characters, and',\n 'an integer >3 will show the whole name if it is less than that',\n 'many characters, but if it is longer, will truncate to',\n '`namelength - 3` characters and add an ellipsis.'\n ].join(' ')\n },\n\n editType: 'none'\n },\n selectdirection: {\n valType: 'enumerated',\n values: ['h', 'v', 'd', 'any'],\n dflt: 'any',\n description: [\n 'When `dragmode` is set to *select*, this limits the selection of the drag to',\n 'horizontal, vertical or diagonal. *h* only allows horizontal selection,',\n '*v* only vertical, *d* only diagonal and *any* sets no limit.'\n ].join(' '),\n editType: 'none'\n }\n};\n","'use strict';\n\nvar Lib = require('../../lib');\nvar Template = require('../../plot_api/plot_template');\n\nvar handleTickValueDefaults = require('../../plots/cartesian/tick_value_defaults');\nvar handleTickMarkDefaults = require('../../plots/cartesian/tick_mark_defaults');\nvar handleTickLabelDefaults = require('../../plots/cartesian/tick_label_defaults');\nvar handlePrefixSuffixDefaults = require('../../plots/cartesian/prefix_suffix_defaults');\n\nvar attributes = require('./attributes');\n\nmodule.exports = function colorbarDefaults(containerIn, containerOut, layout) {\n var colorbarOut = Template.newContainer(containerOut, 'colorbar');\n var colorbarIn = containerIn.colorbar || {};\n\n function coerce(attr, dflt) {\n return Lib.coerce(colorbarIn, colorbarOut, attributes, attr, dflt);\n }\n\n var margin = layout.margin || {t: 0, b: 0, l: 0, r: 0};\n var w = layout.width - margin.l - margin.r;\n var h = layout.height - margin.t - margin.b;\n\n var orientation = coerce('orientation');\n var isVertical = orientation === 'v';\n\n var thicknessmode = coerce('thicknessmode');\n coerce('thickness', (thicknessmode === 'fraction') ?\n 30 / (isVertical ? w : h) :\n 30\n );\n\n var lenmode = coerce('lenmode');\n coerce('len', (lenmode === 'fraction') ?\n 1 :\n isVertical ? h : w\n );\n\n var yref = coerce('yref');\n var xref = coerce('xref');\n\n var isPaperY = yref === 'paper';\n var isPaperX = xref === 'paper';\n\n var defaultX, defaultY, defaultYAnchor;\n var defaultXAnchor = 'left';\n\n if(isVertical) {\n defaultYAnchor = 'middle';\n defaultXAnchor = isPaperX ? 'left' : 'right';\n defaultX = isPaperX ? 1.02 : 1;\n defaultY = 0.5;\n } else {\n defaultYAnchor = isPaperY ? 'bottom' : 'top';\n defaultXAnchor = 'center';\n defaultX = 0.5;\n defaultY = isPaperY ? 1.02 : 1;\n }\n\n Lib.coerce(colorbarIn, colorbarOut, {\n x: {\n valType: 'number',\n min: isPaperX ? -2 : 0,\n max: isPaperX ? 3 : 1,\n dflt: defaultX,\n }\n }, 'x');\n\n Lib.coerce(colorbarIn, colorbarOut, {\n y: {\n valType: 'number',\n min: isPaperY ? -2 : 0,\n max: isPaperY ? 3 : 1,\n dflt: defaultY,\n }\n }, 'y');\n\n coerce('xanchor', defaultXAnchor);\n coerce('xpad');\n coerce('yanchor', defaultYAnchor);\n coerce('ypad');\n Lib.noneOrAll(colorbarIn, colorbarOut, ['x', 'y']);\n\n coerce('outlinecolor');\n coerce('outlinewidth');\n coerce('bordercolor');\n coerce('borderwidth');\n coerce('bgcolor');\n\n var ticklabelposition = Lib.coerce(colorbarIn, colorbarOut, {\n ticklabelposition: {\n valType: 'enumerated',\n dflt: 'outside',\n values: isVertical ? [\n 'outside', 'inside',\n 'outside top', 'inside top',\n 'outside bottom', 'inside bottom'\n ] : [\n 'outside', 'inside',\n 'outside left', 'inside left',\n 'outside right', 'inside right'\n ]\n }\n }, 'ticklabelposition');\n\n coerce('ticklabeloverflow', ticklabelposition.indexOf('inside') !== -1 ? 'hide past domain' : 'hide past div');\n\n handleTickValueDefaults(colorbarIn, colorbarOut, coerce, 'linear');\n\n var font = layout.font;\n var opts = {\n noAutotickangles: true,\n outerTicks: false,\n font: font\n };\n if(ticklabelposition.indexOf('inside') !== -1) {\n opts.bgColor = 'black'; // could we instead use the average of colors in the scale?\n }\n handlePrefixSuffixDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts);\n handleTickLabelDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts);\n handleTickMarkDefaults(colorbarIn, colorbarOut, coerce, 'linear', opts);\n\n coerce('title.text', layout._dfltTitle.colorbar);\n\n var tickFont = colorbarOut.showticklabels ? colorbarOut.tickfont : font;\n var dfltTitleFont = Lib.extendFlat({}, tickFont, {\n color: font.color,\n size: Lib.bigFont(tickFont.size)\n });\n Lib.coerceFont(coerce, 'title.font', dfltTitleFont);\n coerce('title.side', isVertical ? 'top' : 'right');\n};\n","'use strict';\n\nvar d3 = require('@plotly/d3');\n\nvar Color = require('../color');\n\nvar ARROWPATHS = require('./arrow_paths');\n\nvar Lib = require('../../lib');\nvar strScale = Lib.strScale;\nvar strRotate = Lib.strRotate;\nvar strTranslate = Lib.strTranslate;\n\n/**\n * Add arrowhead(s) to a path or line element\n *\n * @param {d3.selection} el3: a d3-selected line or path element\n *\n * @param {string} ends: 'none', 'start', 'end', or 'start+end' for which ends get arrowheads\n *\n * @param {object} options: style information. Must have all the following:\n * @param {number} options.arrowhead: end head style - see ./arrow_paths\n * @param {number} options.startarrowhead: start head style - see ./arrow_paths\n * @param {number} options.arrowsize: relative size of the end head vs line width\n * @param {number} options.startarrowsize: relative size of the start head vs line width\n * @param {number} options.standoff: distance in px to move the end arrow point from its target\n * @param {number} options.startstandoff: distance in px to move the start arrow point from its target\n * @param {number} options.arrowwidth: width of the arrow line\n * @param {string} options.arrowcolor: color of the arrow line, for the head to match\n * Note that the opacity of this color is ignored, as it's assumed the container\n * of both the line and head has opacity applied to it so there isn't greater opacity\n * where they overlap.\n */\nmodule.exports = function drawArrowHead(el3, ends, options) {\n var el = el3.node();\n var headStyle = ARROWPATHS[options.arrowhead || 0];\n var startHeadStyle = ARROWPATHS[options.startarrowhead || 0];\n var scale = (options.arrowwidth || 1) * (options.arrowsize || 1);\n var startScale = (options.arrowwidth || 1) * (options.startarrowsize || 1);\n var doStart = ends.indexOf('start') >= 0;\n var doEnd = ends.indexOf('end') >= 0;\n var backOff = headStyle.backoff * scale + options.standoff;\n var startBackOff = startHeadStyle.backoff * startScale + options.startstandoff;\n\n var start, end, startRot, endRot;\n\n if(el.nodeName === 'line') {\n start = {x: +el3.attr('x1'), y: +el3.attr('y1')};\n end = {x: +el3.attr('x2'), y: +el3.attr('y2')};\n\n var dx = start.x - end.x;\n var dy = start.y - end.y;\n\n startRot = Math.atan2(dy, dx);\n endRot = startRot + Math.PI;\n if(backOff && startBackOff) {\n if(backOff + startBackOff > Math.sqrt(dx * dx + dy * dy)) {\n hideLine();\n return;\n }\n }\n\n if(backOff) {\n if(backOff * backOff > dx * dx + dy * dy) {\n hideLine();\n return;\n }\n var backOffX = backOff * Math.cos(startRot);\n var backOffY = backOff * Math.sin(startRot);\n\n end.x += backOffX;\n end.y += backOffY;\n el3.attr({x2: end.x, y2: end.y});\n }\n\n if(startBackOff) {\n if(startBackOff * startBackOff > dx * dx + dy * dy) {\n hideLine();\n return;\n }\n var startBackOffX = startBackOff * Math.cos(startRot);\n var startbackOffY = startBackOff * Math.sin(startRot);\n\n start.x -= startBackOffX;\n start.y -= startbackOffY;\n el3.attr({x1: start.x, y1: start.y});\n }\n } else if(el.nodeName === 'path') {\n var pathlen = el.getTotalLength();\n // using dash to hide the backOff region of the path.\n // if we ever allow dash for the arrow we'll have to\n // do better than this hack... maybe just manually\n // combine the two\n var dashArray = '';\n\n if(pathlen < backOff + startBackOff) {\n hideLine();\n return;\n }\n\n\n var start0 = el.getPointAtLength(0);\n var dstart = el.getPointAtLength(0.1);\n\n startRot = Math.atan2(start0.y - dstart.y, start0.x - dstart.x);\n start = el.getPointAtLength(Math.min(startBackOff, pathlen));\n\n dashArray = '0px,' + startBackOff + 'px,';\n\n var end0 = el.getPointAtLength(pathlen);\n var dend = el.getPointAtLength(pathlen - 0.1);\n\n endRot = Math.atan2(end0.y - dend.y, end0.x - dend.x);\n end = el.getPointAtLength(Math.max(0, pathlen - backOff));\n\n var shortening = dashArray ? startBackOff + backOff : backOff;\n dashArray += (pathlen - shortening) + 'px,' + pathlen + 'px';\n\n el3.style('stroke-dasharray', dashArray);\n }\n\n function hideLine() { el3.style('stroke-dasharray', '0px,100px'); }\n\n function drawhead(arrowHeadStyle, p, rot, arrowScale) {\n if(!arrowHeadStyle.path) return;\n if(arrowHeadStyle.noRotate) rot = 0;\n\n d3.select(el.parentNode).append('path')\n .attr({\n class: el3.attr('class'),\n d: arrowHeadStyle.path,\n transform:\n strTranslate(p.x, p.y) +\n strRotate(rot * 180 / Math.PI) +\n strScale(arrowScale)\n })\n .style({\n fill: Color.rgb(options.arrowcolor),\n 'stroke-width': 0\n });\n }\n\n if(doStart) drawhead(startHeadStyle, start, startRot, startScale);\n if(doEnd) drawhead(headStyle, end, endRot, scale);\n};\n","'use strict';\n\nmodule.exports = {\n // hover labels for multiple horizontal bars get tilted by this angle\n YANGLE: 60,\n\n // size and display constants for hover text\n\n // pixel size of hover arrows\n HOVERARROWSIZE: 6,\n // pixels padding around text\n HOVERTEXTPAD: 3,\n // hover font\n HOVERFONTSIZE: 13,\n HOVERFONT: 'Arial, sans-serif',\n\n // minimum time (msec) between hover calls\n HOVERMINTIME: 50,\n\n // ID suffix (with fullLayout._uid) for hover events in the throttle cache\n HOVERID: '-hover'\n};\n"],"names":["Events","require","throttle","getGraphDiv","hoverConstants","unhover","module","exports","wrapped","gd","evt","subplot","_fullLayout","clear","_uid","HOVERID","raw","fullLayout","oldhoverdata","_hoverdata","target","_dragged","triggerHandler","_hoverlayer","selectAll","remove","undefined","emit","event","points","Lib","Color","Template","attributes","layoutIn","layoutOut","containerIn","modebar","containerOut","newContainer","coerce","attr","dflt","addOpacity","paper_bgcolor","defaultColor","contrast","rgb","bgcolor","uirevision","valType","values","editType","description","join","shape","arrayOk","fillmode","fgcolor","fgopacity","min","max","size","solidity","selectMode","dragmode","drawMode","openMode","rectMode","freeMode","selectingOrDrawing","d3","numberFormat","isNumeric","tinycolor","Registry","Colorscale","strTranslate","svgTextUtils","xmlnsNamespaces","LINE_SPACING","DESELECTDIM","subTypes","makeBubbleSizeFn","appendArrayPointValue","drawing","setFillStyle","sel","trace","markerPattern","fillpattern","patternShape","getPatternAttr","patternBGColor","patternFGColor","patternFGOpacity","patternSize","patternSolidity","patternID","uid","pattern","fillcolor","call","fill","font","s","family","color","isPlainObject","style","setPosition","x","y","setSize","w","h","setRect","translatePoint","d","xa","ya","c2p","node","nodeName","translatePoints","each","select","this","hideOutsideRangePoint","xcalendar","ycalendar","isPtWithinRange","hideOutsideRangePoints","traceGroups","_hasClipOnAxisFalse","xaxis","yaxis","selector","traceIs","crispRound","lineWidth","_context","staticPlot","Math","round","singleLineStyle","lw","lc","ld","line","lw1","width","dash","stroke","dashLine","lineGroupStyle","dashStyle","dlw","singleFillStyle","data","fillGroupStyle","SYMBOLDEFS","symbolNames","symbolFuncs","symbolBackOffs","symbolNeedLines","symbolNoDot","symbolNoFill","symbolList","Object","keys","forEach","k","symDef","n","push","String","f","backoff","needLine","noDot","noFill","MAXSYMBOL","length","makePointPath","symbolNumber","r","t","base","v","vbase","indexOf","replace","floor","HORZGRADIENT","x1","x2","y1","y2","VERTGRADIENT","stopFormatter","gradientInfo","radial","radialreversed","reversed","horizontal","attrs","horizontalreversed","vertical","verticalreversed","gradient","gradientID","type","colorscale","prop","len","info","colorStops","Array","i","fullID","_defs","identity","exit","enter","append","el","stops","tc","offset","tinyRGB","getAlpha","getFullUrl","classed","calledBy","mcc","isLegend","height","path","linewidth","radius","patternTag","x0","y0","patternAttrs","fgC","fgRGB","opacity","sqrt","PI","cx","cy","str","id","patternUnits","patternTransform","bgC","bgRGB","bgAlpha","rects","patterns","initGradients","ensureSingle","initPatterns","mp","isArrayOrTypedArray","pointStyle","pt","fns","makePointStyleFns","singlePointStyle","marker","markerLine","selectedOpacityFn","mo","ms2mrc","ms","mrc","selectedSizeFn","mx","symbol","om","angle","getMarkerAngle","standoff","getMarkerStandoff","fillColor","lineColor","perPointGradient","so","outlierwidth","outliercolor","markerLineWidth","mlw","mlcc","lineScale","mlc","defaultLine","markerScale","mc","colors","selectedColorFn","isBlank","markerGradient","gradientType","mgt","gradientColor","mgc","perPointPattern","out","tryColorscale","isBubble","selectedpoints","extendFlat","makeSelectedPointStyleFns","selectedAttrs","selected","unselectedAttrs","unselected","selectedMarker","unselectedMarker","smo","usmo","smoIsDefined","usmoIsDefined","smc","usmc","sms","usms","smsIsDefined","usmsIsDefined","makeSelectedTextStyleFns","textFont","textfont","selectedTextFont","unselectedTextFont","stc","utc","selectedTextColorFn","selectedPointStyle","seq","mrc2","prefix","cont","nestedProperty","get","colorArray","_colorAx","makeColorScaleFuncFromTrace","TEXTOFFSETSIGN","start","end","middle","bottom","top","textPointPosition","textPosition","fontSize","markerRadius","dontTouchParent","group","parentNode","numLines","lineCount","dx","dy","extracTextFontSize","ts","textPointStyle","texttemplate","p","text","extractOption","fn","_module","formatLabels","labels","pointValues","meta","_meta","texttemplateString","_d3locale","pos","tp","textposition","fontColor","tf","convertToTspans","selectedTextStyle","tx","lastDrawnX","lastDrawnY","roundEnd","isY","isLastPoint","applyBackoff","roundY","roundX","makeTangent","prevpt","thispt","nextpt","smoothness","d1x","d1y","d2x","d2y","d1a","pow","CatmullRomExp","d2a","numx","numy","denom1","denom2","smoothopen","pts","tangents","smoothclosed","pLast","STEPPATH","hv","p0","p1","vh","hvh","vhv","STEPLINEAR","arrayBackoff","atan2","b","endI","endMarker","endMarkerSymbol","endMarkerSize","cos","sin","steps","onestep","makeTester","tester","ensureSingleById","svgAttrs","position","left","testref","savedBBoxes","savedBBoxesCount","nodeHash","inputText","getAttribute","localId","context","baseUrl","_exportedPlot","_baseUrl","bBox","inTester","hash","testNode","childNodes","innerNode","transform","innerBB","right","cloneNode","appendChild","positionText","testRect","getBoundingClientRect","refRect","removeChild","bb","setClipUrl","getTranslate","element","translate","match","p2","split","setTranslate","getter","setter","trim","getScale","setScale","SCALE_RE","setPointGroupScale","selection","xScale","yScale","scale","setAttribute","TEXT_POINT_LAST_TRANSLATION_RE","mf","_geo","_xA","setTextPointsScale","transforms","parseFloat","existingTransform","previousLon","previousLat","previousX","previousY","previousI","previousTraceUid","rotate","xy","ma","ref","angleref","project","lonlat","_yA","lon","lat","north","east","u","lon1","lat1","lon2","lat2","dLon","deltaY","deltaX","A","B","dX","dY","lastShapeChar","slice","colorbarAttrs","counterRegex","sortObjectKeys","palettes","paletteStr","code","opts","colorAttr","colorAttrFull","cLetter","onlyIfNumerical","Boolean","noScale","showScaleDflt","colorscaleDflt","editTypeOverride","contextHead","z","c","effectDesc","auto","mid","autoFull","minFull","maxFull","minmaxFull","autoImpliedEdits","minmaxImpliedEdits","anim","impliedEdits","autocolorscale","autoColorDflt","reversescale","showscale","colorbar","noColorAxis","coloraxis","regex","isTypedArray","colorAttrs","defaults","lightLine","background","cleanOne","val","valTrim","substr","parts","rgba","charAt","Number","rgbStr","toRgb","g","cstr","op","combine","front","back","fc","a","toRgbString","bc","bcflat","fcflat","lightAmount","darkAmount","isDark","lighten","darken","toString","clean","container","j","key","isArray","el0","Axes","handleArrayContainerDefaults","imageDefaults","imageIn","imageOut","source","gdMock","axLetters","axLetter","axRef","coerceRef","getFromId","_imgIndices","_index","coercePosition","name","handleItemDefaults","Plots","dragElement","setCursor","Drawing","Titles","flipScale","handleAxisDefaults","handleAxisPositionDefaults","axisLayoutAttrs","alignmentConstants","FROM_TL","FROM_BR","cn","draw","colorBars","_infolayer","cbOpt","calcdata","initOpts","_fillcolor","_line","_levels","_filllevels","_fillgradient","_zrange","calcOpts","calc","cd","moduleOpts","visible","allowsMultiplotCbs","cbOpts","contName","_id","_traceIndex","index","_propPrefix","_colorAxes","colorAxOpts","makeColorBarData","cbbg","cbfills","cblines","cbaxis","crisp","cbtitleunshift","cbtitle","cboutline","done","isVertical","orientation","lenmode","thickness","thicknessmode","outlinewidth","borderwidth","xanchor","yanchor","xpad","ypad","optsX","optsY","isPaperY","yref","isPaperX","xref","gs","_size","title","titleSide","side","zrange","extent","domain","lineColormap","fillColormap","levelsIn","levelsOut","l","lineLevels","fillLevels","l0","ls","zr0","zr1","fillLevelsIn","map","reverse","calcLevels","thickPx","thickFrac","lenPx","lenFrac","posW","posH","uPx","xRatio","center","yRatio","uFrac","vFrac","vPx","_lenFrac","_thickFrac","_uFrac","_vFrac","ax","_axis","cbAxisIn","range","tickmode","nticks","tick0","dtick","tickvals","ticktext","ticks","ticklen","tickwidth","tickcolor","showticklabels","labelalias","ticklabelposition","ticklabeloverflow","ticklabelstep","tickfont","tickangle","tickformat","exponentformat","minexponent","separatethousands","showexponent","showtickprefix","tickprefix","showticksuffix","ticksuffix","showline","anchor","letter","cbAxisOut","axisOptions","noAutotickangles","noHover","noTickson","noTicklabelmode","noInsideRange","calendar","mockColorBarAxis","topOrBottom","titlex","titley","autoNtick","constrain","dtFactor","dtexp","log","LN10","roundUp","abs","titleEl","titleCont","titleFontSize","axLayer","titleHeight","titleWidth","drawTitle","titleClass","titleOpts","dfltTitleOpts","propContainer","propName","traceIndex","placeholder","_dfltTitle","containerGroup","otherClass","drawDummyTitle","drawCbTitle","_offset","_length","nlines","avoid","offsetTop","offsetLeft","maxShift","drawAxis","titleGroup","titleText","titleTrans","mathJaxNode","lineSize","parseInt","jsPlaceholder","fills","cbfill","zBounds","sort","fillEl","colorString","toHexString","lines","cbline","shift","vals","calcTicks","tickSign","getTickSigns","drawTicks","clipEnds","layer","makeTickPath","transFn","makeTransTickFn","drawLabels","makeTransTickLabelFn","labelFns","makeLabelFns","positionCB","innerThickness","topSideVertical","rightSideHorizontal","moveY","_titleHeight","outerThickness","hColorbarMoveTitle","_hColorbarMoveTitle","_hColorbarMoveCBTitle","extraW","lx","ly","bordercolor","moveX","outlinecolor","xShift","yShift","equals","tickLabels","numTicks","border","oBb","oTr","TEXTPAD","first","last","iBb","iTr","iRight","iLeft","marginOpts","lFrac","rFrac","tFrac","bFrac","extraThickness","yt","yb","xl","xr","sideY","sideX","_reservedMargin","possibleReservedMargins","autoMargin","syncOrAsync","previousPromises","drawColorBar","then","_promises","edits","colorbarPosition","t0","xf","yf","init","prepFn","moveFn","align","csr","getCursor","doneFn","update","makeEditable","order","colorScaleAttrs","scales","msg","sequential","Reds","sequentialminus","Blues","diverging","RdBu","_isSubplotObj","arrayEditor","getToggleSets","hoverData","anni","showMode","pointj","annotations","onSet","offSet","explicitOffSet","hoverLen","clicktoshow","d2r","clickData2r","_xclick","_yclick","on","off","explicitOff","l2r","hasClickToShow","sets","onClick","editHelpers","toggleSets","concat","annotationsOut","layout","modifyItem","getUpdateObj","plotsAttrs","basePlotLayoutAttributes","helpers","groupDefaults","legendId","fullData","itemFont","coerceFont","traceCoerce","traceIn","_input","traceOut","globalFont","grouptitlefont","legendTraceCount","legendReallyHasATrace","defaultOrder","shapesWithLegend","shapes","filter","showlegend","allLegendItems","legend","isShape","_isShape","_dfltShowLegend","barmode","isGrouped","traceorder","legendgroup","isReversed","showLegend","defaultX","defaultY","defaultYAnchor","isHorizontal","defaultXAnchor","getComponentMethod","noneOrAll","dfltTitleFont","bigFont","allLegendsData","mockTrace","legends","pushUnique","_legends","legendLayout","strRotate","overrideCursor","constants","legendSupplyDefaults","legendDraw","YANGLE","YA_RADIANS","YFACTOR","YSHIFTX","YSHIFTY","HOVERARROWSIZE","HOVERTEXTPAD","multipleHoverPoints","box","ohlc","violin","candlestick","cartesianScatterPoints","scatter","scattergl","splom","hoverDataKey","hover","noHoverEvent","eventTarget","HOVERMINTIME","subplots","plots","_plots","plotinfo","hasCartesian","_has","overlayedSubplots","overlays","pi","xaArray","yaArray","supportsCompare","spId","_subplot","warn","hovermode","querySelector","_dragging","unhoverRaw","hoverdistance","Infinity","spikedistance","xvalArray","yvalArray","itemnum","curvenum","subplotId","subploti","_mode","xval","yval","pointData","closedataPreviousLength","searchData","spikePoints","hLinePoint","vLinePoint","hasOneHorizontalTrace","curveNumber","hoverinfo","isTraceInSubplots","xpx","ypx","dbb","clientX","clientY","_calcInverseTransform","transformedCoords","apply3DTransform","_invTransform","pointerX","pointerY","flat","p2c","distance","findHoverPoints","customXVal","customYVal","getSubplot","isUnifiedHover","maxHoverDistance","maxSpikeDistance","spikeDistance","xSpike","ySpike","xLabelVal","yLabelVal","zLabelVal","_splomScenes","scene","pointNumber","hoverPoints","newPoints","finiteRange","hoverLayer","newPoint","newPointNum","cleanPoint","splice","closestPoints","point","tmpPoint","closestVPoints","showspikes","spikesnap","closestVPt","fillSpikePoint","closestHPoints","closestHPt","selectClosestPoint","pointsData","spikeOnWinning","thisSpikeDistance","resultPoint","minDistance","spikelineOpts","oldspikepoints","_spikepoints","newspikepoints","sortHoverData","d1","d2","second","orderRangePoints","tmpHPoint","tmpVPoint","result","spikesChanged","createSpikelines","isXYhover","winningPoint","initLen","getCoord","finalPoints","seen","insert","newHd","oldId","oldHd","newhoverdata","gTop","getTopOffset","gLeft","getLeftOffset","eventData","makeEventData","hovertemplate","ht","_x0","_x1","_y0","_y1","bbox","rotateLabels","bgColor","plot_bgcolor","hoverText","createHoverText","outerContainer","_paper","commonLabelOpts","hoverlabel","hoverLabels","commonLabelBoundingBox","donepositioning","topOverlap","bottomOverlap","pti","sumdp","axKey","crossAxKey","nummoves","axSign","nLabels","pointgroups","axisLabelMinX","minX","axisLabelMaxX","maxX","axisLabelMinY","minY","axisLabelMaxY","maxY","pX","_invScaleX","pY","_invScaleY","constrainGroup","grp","minPt","maxPt","pmin","dp","pmax","deleteCount","del","crossAx","axIsX","rng","labelMin","labelMax","offsets","getHoverLabelOffsets","horzSign","crossPos","by","bx","tx2width","startX","endX","_mainLinePosition","datum","posref","g0","g1","apply","hoverPt","hoverAvoidOverlaps","alignHoverText","tagName","oldPt","newPt","pointNumbers","hoverChanged","xaxes","yaxes","xvals","yvals","_hover","loneHover","hoverItems","multiHover","hoverLabel","hoverItem","_scene","inOut_bbox","xLabel","yLabel","zLabel","idealAlign","borderColor","fontFamily","nameLength","textAlign","hovertemplateLabels","lastBottomY","topY","anchorIndex","EXTRA_STRING_REGEX","HOVERFONT","HOVERFONTSIZE","c0","axLabel","q","outerContainerBB","outerTop","outerWidth","outerHeight","showCommonLabel","traceHoverinfo","allHaveZ","commonLabel","commonLabelRect","label","lpath","ltext","commonBgColor","commonStroke","contrastColor","commonLabelFont","tbb","topsign","halfWidth","sgn","leftsign","clipPath","halfHeight","lty","clipId","ltx","dummy","dummyBB","textClip","_topclips","groupedHoverData","mockLayoutIn","tracegroupgap","mockLayoutOut","_fullData","mockLegend","entries","texts","getHoverLabelText","dir","_distinct","_inHover","_groupTitleFont","lyBottom","lyTop","lxRight","lxLeft","legendContainer","tWidth","tHeight","avgX","avgY","pointWon","mean","xOffset","yOffset","dColor","color0","numsColor","nameColor","tx2","tx2height","t2bb","htx","hty","tbbWidth","tbbHeight","ty0","txwidth","anchorStartOK","anchorEndOK","txTotalWidth","txHalfWidth","overflowR","overflowL","nameOverride","templateString","plainText","h0","h1","extraText","hovertemplateString","extra","offsetX","offsetY","scaleX","scaleY","shiftX","alignShift","textShiftX","text2ShiftX","getTextShiftX","isMiddle","posX","posY","cd0","pass","getVal","calcKey","traceKey","castOption","hoverLabelText","xhoverformat","xVal","c2d","yhoverformat","yVal","isNaN","xerr","xeText","tickText","c2l","xerrneg","yerr","yeText","yerrneg","infomode","showY","showX","hLinePointX","hLinePointY","xBase","xEndSpike","dfltHLineColor","readability","yMode","spikemode","yThickness","spikethickness","yColor","spikecolor","xEdge","getPxPosition","xAcross0","_counterDomainMin","xAcross1","_counterDomainMax","spikedash","vLinePointX","vLinePointY","yBase","yEndSpike","dfltVLineColor","xMode","xThickness","xColor","yEdge","yAcross0","yAcross1","allowedTags","_categoriesMap","periodalignment","diff","d2c","posLetter","boxmode","violinmode","dPos","clientTop","clientLeft","rect","Ax","Ay","Bx","By","colorScaleDefaults","colorAxIn","colorAxOut","colorAxes","coerceAx","stash","_name","Fx","drawArrowHead","drawOne","options","drawRaw","shiftPosition","axa","dAx","optAx","axDomainRef","getRefType","gsDim","p2r","r2p","className","containerStr","modifyBase","annClipID","annPosPx","textangle","annGroup","annTextGroup","editTextPosition","showarrow","textEvents","captureevents","annotationText","annTextGroupInner","hovertext","hoverOptions","hoverFont","bBoxRef","loneUnhover","borderpad","borderfull","annTextBG","isSizeConstrained","annTextClip","annText","delegate","textLayout","_text","autorange","initialEvent","annotation","fullAnnotation","drawGraphicalElements","anchor3","cursor","mathjaxGroup","hasMathjax","empty","anntextBB","textWidth","textHeight","annWidth","annHeight","shiftFraction","annotationIsOffscreen","letters","basePx","textPadShift","alignPosition","autoAlignFraction","textShift","tailRef","dimAngle","annSizeFromWidth","annSizeFromHeight","annSize","overallShift","posPx","axRefType","posFraction","r2fraction","axRefTypeEqDomain","head","arrowLength","tailRefType","tail","maxPx","shiftPlus","shiftMinus","valign","texty","textx","baseTextTransform","drawArrow","headX","headY","tailX","tailY","textX","textY","rotationXYMatrix","applyTransform","apply2DTransform","applyTransform2","apply2DTransform2","xLeft","xRight","yTop","yBottom","edges","reduce","segmentsIntersect","strokewidth","arrowwidth","arrowColor","arrowcolor","arrowSide","arrowside","arrowGroup","arrow","annotationPosition","arrowDragHeadX","arrowDragHeadY","annx0","anny0","arrowDrag","annxy0","xcenter","ycenter","axref","ayref","notesBox","document","redraw","selectedObj","ay","xUpdate","yUpdate","widthFraction","_xsize","_xshift","xshift","heightFraction","_ysize","_yshift","yshift","clickFn","_","contIn","contOut","hasLegend","inheritFontAttr","namelength","toLogRange","newType","doExtra","toLog","fromLog","image","attrPrefix","images","currentPos","currentSize","newPos","newSize","overrideAll","xyAttrs","error_x","error_y","copy_zstyle","copy_ystyle","xyzAttrs","error_z","moduleType","schema","traces","bar","histogram","scatter3d","supplyDefaults","makeComputeError","plot","hoverInfo","calcPoint","hoverPoint","yh","symmetric","ys","xh","xs","cartesianConstants","templatedArray","axisPlaceableObjs","sizex","sizey","sizing","idRegex","axisRefDescription","hasColorbar","colorbarDefaults","isValidScale","npMaybe","parentCont","parentContIn","parentContOut","inTrace","template","_template","thisFn","colorAx","colorbarVisuals","minIn","maxIn","validMinMax","autoColorscaleDflt","sclIn","sclTemplate","fullSceneLayout","dataScale","anns","ann","_pdata","glplot","cameraParams","r2l","zaxis","graphDiv","_xa","_ya","Icons","version","Parser","DOMParser","ModeBar","createElement","graphInfo","buttons","proto","prototype","modeBarId","displayModeBar","bgSelector","deleteRelatedStyleRule","addRelatedStyleRule","activecolor","needsNewButtons","hasButtons","needsNewLogo","hasLogo","displaylogo","needsNewLocale","locale","removeAllButtons","updateButtons","watermark","logoGroup","getLogo","insertBefore","updateActiveButton","_this","buttonElements","buttonsNames","buttonGroup","createGroup","buttonConfig","buttonName","Error","button","createButton","config","click","addEventListener","ev","currentTarget","toggle","icon","createIcon","question","gravity","thisIcon","iconHeight","ascent","descent","svgNS","createElementNS","svg","parseFromString","buttonClicked","dataAttrClicked","thisval","dataAttr","isToggleButton","button3","currentButtons","href","newplotlylogo","firstChild","destroy","removeElement","modeBar","_modebardiv","_privateplot","dv","v0","v1","vmin","vmax","vc","borderLine","lightFraction","fontAttrs","hoverLabelAttrs","mouseOffset","hasHover","supportsPassive","coverSlip","cover","cStyle","zIndex","body","pointerOffset","e","changedTouches","startY","newMouseDownTime","dragCover","initialTarget","rightClick","numClicks","doubleClickDelay","_mouseDownTime","pointerEvents","onmousedown","onStart","_ontouchstart","removeEventListener","passive","ontouchstart","clampFn","minDrag","ctrlKey","Date","getTime","window","getComputedStyle","documentElement","onDone","preventDefault","onMove","MINDRAG","dxdy","_dragdata","e2","MouseEvent","err","createEvent","initMouseEvent","bubbles","cancelable","view","detail","screenX","screenY","altKey","shiftKey","metaKey","relatedTarget","dispatchEvent","calcOneAxis","calcTrace","axis","coord","computeError","calcPt","iIn","calcCoord","errors","shoe","hat","axId","baseExtremes","_extremes","extremes","findExtremes","tozero","padded","mockAnnAxes","pdata","setConvert","l2p","Greys","YlGnBu","Greens","YlOrRd","Bluered","Picnic","Rainbow","Portland","Jet","Hot","Blackbody","Earth","Electric","Viridis","Cividis","defaultScale","isValidScaleArray","scl","highestVal","si","isValid","parseScale","JSON","parse","flags","extras","entrywidth","entrywidthmode","itemsizing","itemwidth","itemclick","itemdoubleclick","groupclick","axesAttrs","linecolor","minor","tickformatstops","_deprecated","titlefont","titleside","layoutAttributes","hoverModule","supplyLayoutGlobalDefaults","supplyLayoutDefaults","getDistanceFunction","getClosest","inbox","quadrature","castHoverOption","ptNumber","castHoverinfo","coerceHoverinfo","containerOrSelection","isD3Selection","noRotate","cursorset","ARROWPATHS","arrowAxisRefDescription","arrowCoordinateDescription","lower","upper","colorEditType","arrowhead","startarrowhead","arrowsize","startarrowsize","startstandoff","xclick","yclick","drawModule","clickModule","includeBasePlot","calcAutorange","convertCoords","handleDefaults","crossTraceDefaults","hasColorscale","extractOpts","extractScale","makeColorScaleFunc","domainAttrs","cartesianIdRegex","gridAttrs","rows","roworder","columns","freeLength","dimensions","items","xgap","ygap","noGridCell","xside","yside","getAxes","grid","gridVal","splomVal","_splomAxes","fillGridPositions","dfltGap","dfltSide","dirGap","step","cellDomain","cellStart","fillGridAxes","axesIn","axesAllowed","axisMap","fillOneAxis","axisId","sizeDefaults","gridIn","xAxes","yAxes","dfltRows","dfltColumns","hasSubplotGrid","hasXaxes","hasYaxes","isSplomGenerated","gridOut","_hasSubplotGrid","dfltSideX","dfltSideY","dfltGapX","dfltGapY","_splomGridDflt","_domains","contentDefaults","xId","yId","subplotsOut","yPos","_subplots","useDefaultSubplots","_axisMap","subplotsIn","rowOut","rowIn","cartesian","anchors","_anchors","i0","inc","iFinal","column","row","handleHoverLabelDefaults","stylePie","pieCastOption","getGradientDirection","isRadial","getStyleGuide","contours","showLine","hasLines","showMarker","hasMarkers","showFill","showGradientLine","showGradientFill","coloring","showlines","_operation","anyLine","anyFill","dimAttr","constantItemSizing","itemWidth","centerPos","itemGap","centerTransform","boundLineWidth","cst","styleBarLike","lThis","desiredType","pathStr","cornerradius","isVisible","barpath","d0","cOpts","stylePieLike","opt","tMod","minExtend","d0Mod","traceGroup","layers","lineHeight","markerOffsetY","useGradient","ptsData","dd","vertexcolor","facecolor","isWaterfall","hasTotals","boxpoints","sizeref","sizemin","sizemode","dMod","styleGuide","pathStart","this3","showText","hasText","boundVal","attrIn","arrayToValFn","bounds","valIn","valToBound","pickFirst","array","dEdit","tEdit","ptgroup","txt","transitionOpts","hasAnimation","duration","isStatic","keyFunc","xObj","yObj","ids","sparse","maxdisplayed","errorbars","transition","layerClipId","errorbar","coords","noYS","noXS","errorCoords","vis","yerror","yw","ease","easing","xerror","xw","paste","traceAttr","cdAttr","makeCoerceHoverInfo","fillFn","fillArray","GL3D","subplotsRegistry","gl3d","attrRegex","test","_basePlotModules","convert","lastPathIn","lastPathOut","lastAngle","lastStandoff","parseSvgPath","emptyPath","sqrt2","sqrt3","skipAngle","cosT","sinT","cmd","cmdI","E","circle","rs","square","diamond","rd","cross","rc","rc2","rx","ne","se","sw","nw","rt","r1","r2","pentagon","hexagon","hexagon2","octagon","star","x3","x4","y3","y4","hexagram","aPart","rp","hourglass","bowtie","asterisk","ry","headAngle","rules","Y","fullSelector","addStyleRule","axisIds","eraseActiveShape","modeBarButtons","handleCartesian","astr","aobj","axList","list","allSpikesEnabled","_cartesianSpikesEnabled","axName","mag","r0","fixedrange","_rangeInitial0","_rangeInitial1","_autorangeInitial","_showSpikeInitial","rangeNow","rangeNew","_isHoriz","handleDrag3d","sceneIds","layoutUpdate","val2d","handleCamera3d","resetLastSave","resetDefault","didUpdate","sceneId","camera","aspectratio","aspectmode","viewInitial","up","eye","getNextHover3d","_previousVal","axes","currentSpikes","sceneLayout","hovermodeAStr","spikeAStr","handleGeo","geoIds","geo","geoLayout","projection","newScale","resetView","getNextHover","toggleHover","newHover","handleMapboxZoom","subplotIds","mapbox","aObj","current","zoom","next","subplotType","viewKeys","toImage","format","toImageButtonOptions","notifier","isIE","filename","catch","sendDataToCloud","disk","editInChartStudio","pencil","zoom2d","_cat","zoombox","pan2d","pan","select2d","selectbox","lasso2d","lasso","drawclosedpath","drawopenpath","drawline","drawrect","drawcircle","eraseshape","zoomIn2d","zoom_plus","zoomOut2d","zoom_minus","autoScale2d","autoscale","resetScale2d","home","hoverClosestCartesian","tooltip_basic","hoverCompareCartesian","tooltip_compare","zoom3d","pan3d","orbitRotation","tableRotation","resetCameraDefault3d","resetCameraLastSave3d","movie","hoverClosest3d","zoomInGeo","zoomOutGeo","resetGeo","hoverClosestGeo","hoverClosestGl2d","hoverClosestPie","resetViewSankey","_viewInitial","groups","resetViews","toggleSpikelines","spikeline","areSpikesOn","setSpikelineVisibility","resetViewMapbox","zoomInMapbox","zoomOutMapbox","handleAnnotationCommonDefaults","handleAnnotationDefaults","annIn","annOut","zref","sceneLayoutIn","sceneLayoutOut","makeComputeErrorValue","value","dataPt","arrayminus","valMinus","NaN","computeErrorValue","computeErrorValueMinus","valueminus","currentVal","newVal","imageDataAbove","imageDataSubplot","imageDataBelow","img","ref2id","mainplot","setImage","thisImage","_imgSrc","imagePromise","Promise","resolve","Image","errorHandler","onerror","onload","canvas","getContext","willReadFrequently","drawImage","dataURL","toDataURL","src","bind","applyAttributes","xIsDomain","yIsDomain","xPos","preserveAspectRatio","clipAxes","imagesBelow","_imageLowerLayer","imagesAbove","_imageUpperLayer","allSubplots","subplotObj","imagelayer","imagesOnSubplot","borderOpacity","borderWidth","showArrow","globalHoverLabel","hoverBG","hoverBorder","buttonList","DRAW_MODES","backButtons","foreButtons","toLowerCase","addToForeButtons","constantAttrs","letterAttrs","cont2","k2","_sync","cmin","cmax","N","sclNew","specs","_range","sclFunc","_sclFunc","linear","clamp","noNumericCheck","returnArray","colorArray2rbga","colorObj","colorKey","_inputArray","isArrayWithOneNumber","annAutorange","filterVisible","xRefType","yRefType","calcAxisExpansion","apos","aref","padplus","padminus","headSize","headPlus","headMinus","startHeadSize","startHeadPlus","startHeadMinus","extremeArrowHead","r2c","ppadplus","ppadminus","extremeText","scrollBarWidth","scrollBarMinHeight","scrollBarColor","scrollBarMargin","scrollBarEnterAttrs","titlePad","hasMultipleLegends","inHover","grouped","lgroupToTraces","lgroups","hasOneNonBlankGroup","slicesShown","lgroupi","maxNameLength","addOneItem","legendGroup","legendItem","uniqueGroup","lid","lgroup","labelj","shouldCollapse","legendData","groupMinRank","rank","legendrank","_groupMinRank","_preGroupSort","orderFn2","_preSort","firstItemTrace","groupTitle","gt","legendgrouptitle","hasPieLike","unshift","noClick","_lgroupsLength","_maxNameLength","handleHoverModeDefaults","hasMapbox","hasGeo","handleClick","getLegendData","LEGEND_PATTERN","legendObj","getId","_legendMouseDownTime","shapeLegend","_fullInput","legendwidth","mode","hiddenSlices","hiddenlabels","_topdefs","bg","scrollBox","_titleWidth","scrollBar","drawTexts","setupTraceToggle","isFraction","bw","bw2","textGap","endPad","getYanchor","isBelowPlotArea","isAbovePlotArea","traceGroupGap","legendGroupWidths","_maxHeight","toggleRectWidth","_width","_height","titleSize","getTitleSize","getXanchor","isLeftOfPlotArea","isRightOfPlotArea","isBeyondPlotAreaY","hw","_maxWidth","maxItemWidth","combinedItemWidth","getTraceWidth","maxRowWidth","maxGroupHeightInRow","groupOffsetX","groupOffsetY","maxWidthInGroup","nTraces","oneRowLegend","maxItemHeightInRow","rowWidth","ceil","_effHeight","isEditable","legendText","legendPosition","traceToggle","traceWidth","computeLegendDimensions","titleOffset","textNode","horizontalAlignTitle","expMargin","expandMargin","margin","autoexpand","lx0","ly0","_scrollY","eventY0","eventY1","scrollBoxY0","scrollBarHeight","scrollBarYMax","scrollBoxYMax","scrollRatio","scrollBoxY","scrollHandler","scrollBarDrag","behavior","drag","sourceEvent","getScrollBarDragY","scrollBoxTouchDrag","getNaturalDragY","newX","newY","obj","clickedTrace","clickOrDoubleClick","legendWidth","traceLegendWidth","evtData","expandedIndex","_expandedIndex","frames","_transitionData","_frames","_group","clickVal","_clickTimeout","setTimeout","clearTimeout","isPieLike","textEl","ensureLength","newName","fullInput","hasTransform","groupbyIndices","getTransformIndices","kcont","keyedContainer","set","constructUpdate","maxLength","targetLength","_editing","aTitle","mathjaxNode","mathjaxBB","cls","textLines","computeTextDimensions","isRightAnchor","isCenterAnchor","isBottomAnchor","isMiddleAnchor","newLegends","traceref","tracerefminus","scatterSubTypes","createModeBar","extendDeep","_modeBar","modeBarButtonsToRemove","modeBarButtonsToAdd","buttonGroups","customButtons","originalModeBarButtons","fillCustomButton","layoutAdd","add","layoutRemove","buttonsToAdd","buttonsToRemove","hasGL3D","hasPie","hasFunnelarea","hasGL2D","hasTernary","hasPolar","hasSmith","hasSankey","allAxesFixed","areAllAxesFixed","hasUnifiedHoverLabel","addGroup","newGroup","found","commonGroup","showEditInChartStudio","showSendToCloud","zoomGroup","hoverGroup","resetGroup","dragModeGroup","hasNoHover","selectable","selectPoints","isSelectable","enabledHoverGroup","enableHover","newList","appendButtonsToGroups","getButtonGroups","axArray","dxy","distfn","newDistance","passVal","di","_indexToPoints","pointIndices","pointIndex","arrayAttrs","_arrayAttrs","getPointKey","pointVal","getPointData","appendArrayMultiPointValues","keyVal","pointKeyMap","locations","parents","xyHoverMode","unifiedHoverMode","annotationsDone","emitClick","stopImmediatePropagation","objName","copyAttr","inherit","clickToShow","arrowPosDflt","_annIndices","arrowPosAttr","aaxRef","aDflt","xClick","yClick","cleanPosition","annAttrs","relinkColorAttrs","outerCont","isAuto","manage","minVal","aggNums","maxVal","SHOWISOLATETIP","itemClick","itemDoubleClick","groupClick","showTips","toggleGroup","fullTrace","dataUpdate","dataIndices","carrs","carrIdx","updatedShapes","shapesUpdated","thisLegend","thisLabel","thisLabelIndex","changed","unhideList","cdi","dLabel","tracei","hasLegendgroup","traceIndicesInGroup","nextVisibility","item","setVisibility","isClicked","notInLegend","otherState","_item","isIsolated","updateKeys","hasOwnProperty","insertDataUpdate","attrIndex","valueArray","visibility","lastGroupbyIndex","curState","clickmode","selectdirection","handleTickValueDefaults","handleTickMarkDefaults","handleTickLabelDefaults","handlePrefixSuffixDefaults","colorbarOut","colorbarIn","outerTicks","tickFont","strScale","el3","ends","startRot","endRot","headStyle","startHeadStyle","startScale","doStart","doEnd","backOff","startBackOff","hideLine","backOffX","backOffY","startBackOffX","startbackOffY","pathlen","getTotalLength","dashArray","start0","getPointAtLength","dstart","end0","dend","drawhead","arrowHeadStyle","rot","arrowScale","class"],"sourceRoot":""}