@windborne/grapher 1.0.55 → 1.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.cjs +1 -1
- package/dist/bundle.cjs.map +1 -1
- package/dist/bundle.esm.js +1 -1
- package/dist/bundle.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/renderer/draw_bars.js +1 -1
- package/src/renderer/graph_body_renderer.js +7 -10
- package/src/state/calculate_tooltip_state.js +7 -11
package/dist/bundle.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{default as e,useCallback as t,useEffect as n,useMemo as i,useRef as r,useState as o}from"react";var a={39(e){e.exports="precision highp float;\n\nattribute vec2 position;\nattribute vec2 prevPosition;\nattribute float vertex;\n\nuniform float width;\nuniform float height;\nuniform float thickness;\n\nvarying vec2 position_vec;\nvarying vec2 prev_position_vec;\n\nvoid main() {\n vec2 delta = position - prevPosition;\n vec2 alpha = prevPosition;\n vec2 beta = position;\n\n vec2 normalized_delta = normalize(delta);\n vec2 normal = vec2(-thickness/2.0 * normalized_delta.y, thickness/2.0 * normalized_delta.x);\n\n vec2 vertex_position =\n step(0.5, mod(vertex, 2.0))*alpha + // alpha if vertex is odd, 0 otherwise\n step(0.5, mod(vertex + 1.0, 2.0))*beta + // beta if vertex is even, 0 otherwise\n 2.0*(step(1.5, vertex)-0.5)*normal // -normal if vertex < 2, +normal otherwise\n ;\n\n position_vec = vec2(position.x, height - position.y);\n prev_position_vec = vec2(prevPosition.x, height - prevPosition.y);\n\n gl_Position = vec4(2.0*vertex_position.x/width - 1.0, 1.0 - 2.0*vertex_position.y/height, 0.0, 1.0);\n}\n"},56(e,t,n){e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},72(e){var t=[];function n(e){for(var n=-1,i=0;i<t.length;i++)if(t[i].identifier===e){n=i;break}return n}function i(e,i){for(var o={},a=[],s=0;s<e.length;s++){var l=e[s],h=i.base?l[0]+i.base:l[0],c=o[h]||0,g="".concat(h," ").concat(c);o[h]=c+1;var A=n(g),d={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==A)t[A].references++,t[A].updater(d);else{var p=r(d,i);i.byIndex=s,t.splice(s,0,{identifier:g,updater:p,references:1})}a.push(g)}return a}function r(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,r){var o=i(e=e||[],r=r||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=n(o[a]);t[s].references--}for(var l=i(e,r),h=0;h<o.length;h++){var c=n(o[h]);0===t[c].references&&(t[c].updater(),t.splice(c,1))}o=l}}},113(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},120(e){e.exports="#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n\nprecision mediump float;\n\nuniform vec4 color;\n\n// Adapted and modified from https://www.desultoryquest.com/blog/drawing-anti-aliased-circular-points-using-opengl-slash-webgl/\nvoid main() {\n float delta = 0.0;\n float alpha = 1.0;\n vec2 center = 2.0 * gl_PointCoord - 1.0;\n float r = dot(center, center);\n\n if (r > 1.0) {\n discard;\n }\n\n #ifdef GL_OES_standard_derivatives\n delta = fwidth(r);\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n #endif\n\n gl_FragColor = color * alpha;\n}\n"},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",i=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),i&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),i&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,i,r,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(i)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var h=0;h<e.length;h++){var c=[].concat(e[h]);i&&a[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),r&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=r):c[4]="".concat(r)),t.push(c))}},t}},354(e){e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(r," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},365(e,t,n){n.r(t),n.d(t,{LINE_COLORS:()=>i,applyReducedOpacity:()=>o,applyReducedOpacityToGradient:()=>a,createDefaultGradient:()=>s,default:()=>r});const i=["#F1C232","#1259f8","#cb4b4b","#4da74d","#9440ed","#61e0ed","#ed6d2c","#ed13c6","#bbed59"];function r(e,t,n){return"string"==typeof e?e:"number"==typeof e?i[e%i.length]:void 0!==n?i[n%i.length]:i[t%i.length]}function o(e,t){if(!e)return e;if(e.startsWith("rgba(")){const n=e.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(n){const[,e,i,r,o]=n;return`rgba(${e}, ${i}, ${r}, ${parseFloat(o)*t})`}}if(e.startsWith("rgb(")){const n=e.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(n){const[,e,i,r]=n;return`rgba(${e}, ${i}, ${r}, ${t})`}}if(e.startsWith("#")){let n=e.slice(1);return 3===n.length&&(n=n.split("").map(e=>e+e).join("")),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}return e}function a(e,t){return e&&Array.isArray(e)?e.map(e=>{if(Array.isArray(e)&&2===e.length){const[n,i]=e;return[n,o(i,t)]}return"string"==typeof e?o(e,t):e}):e}function s(e){if(!e)return[[0,"transparent"],[1,"transparent"]];const t=o(e,.5);return[[0,t],[1,t]]}},390(e){e.exports="precision highp float;\n\nuniform vec4 color;\nuniform float thickness;\nuniform float shadowBlur;\nuniform vec4 shadowColor;\nuniform float width; // Canvas width for normalization\nuniform float cutoffX; // Cutoff X position as ratio (0.0-1.0)\nuniform float cutoffOpacity; // Opacity for pre-cutoff area\n\nvarying vec2 position_vec;\nvarying vec2 prev_position_vec;\n\n/**\n * Calculate distance between point and line in screen space (ie, inputs in pixels, returns distance in pixels)\n */\nfloat distance_from_line() {\n float x0 = gl_FragCoord.x;\n float y0 = gl_FragCoord.y;\n\n // let line be defined by ax + by + c = 0;\n float a, b, c;\n\n if (position_vec.x == prev_position_vec.x) {\n a = 1.0;\n b = 0.0;\n c = -position_vec.x;\n } else {\n float slope = (position_vec.y - prev_position_vec.y)/(position_vec.x - prev_position_vec.x);\n float y_intercept = position_vec.y - slope*position_vec.x;\n\n // y = slope*x + y_intercept\n // (-slope)(x) + (1)(y) - y_intercept = 0;\n a = -slope;\n b = 1.0;\n c = -y_intercept;\n }\n\n return abs(a*x0 + b*y0 + c)/length(vec2(a, b));\n}\n\nvoid main() {\n vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\n\n // Apply cutoff opacity if active\n vec4 finalColor = vec4(color);\n if (cutoffX >= 0.0) {\n // Convert pixel position to normalized coordinate (0.0 to 1.0)\n float normalizedX = gl_FragCoord.x / width;\n \n // Apply reduced opacity to pixels left of cutoff\n if (normalizedX < cutoffX) {\n finalColor.a *= cutoffOpacity;\n }\n }\n\n float dist = distance_from_line();\n\n if (dist + shadowBlur >= thickness) {\n float percent_shadowed = ((thickness - dist) / shadowBlur);\n gl_FragColor = mix(transparent, shadowColor, percent_shadowed*percent_shadowed);\n } else {\n gl_FragColor = finalColor;\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n}\n"},400(e){e.exports="precision highp float;\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = vec4(color);\n}\n"},540(e){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},556(e,t,n){e.exports=n(694)()},557(e,t,n){n.d(t,{A:()=>s});var i=n(354),r=n.n(i),o=n(314),a=n.n(o)()(r());a.push([e.id,'.grapher-night{position:relative;background:linear-gradient(to bottom right, #131313, #1e1e1e);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-night *,.grapher-night :after,.grapher-night :before{box-sizing:content-box}.grapher-night .grapher-title{text-align:center;color:#fff;font-size:18px;margin-bottom:8px}.grapher-night .grapher-primary-container-outer{display:flex}.grapher-night .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#111, transparent 75%, transparent 100%);color:#eee;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-night .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-night .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-night .series-key .scale-label{display:inline-block;background:#111;color:silver;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-night .series-key .series-key-axis-container{display:inline-block;border:1px solid #111;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-night .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#e0e0e3}.grapher-night .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-night .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-night .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-night .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-night .series-key .series-key-axis-container .label-input-toggler path{fill:#111}.grapher-night .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#e0e0e3}.grapher-night .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none;background:rgba(0,0,0,0)}.grapher-night .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-night .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px silver}.grapher-night .range-selection{color:silver;user-select:none}.grapher-night .range-selection.range-not-dates{color:#aaa}.grapher-night .range-selection .range-buttons{text-align:right}.grapher-night .range-selection .range-buttons .options-bar{display:inline-block}.grapher-night .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-night .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:silver;background:#000;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-night .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-night .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-night .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:6px;border-radius:2px;background:#505053}.grapher-night .range-selection .range-buttons .range-button.range-button-selected{color:silver;background:#000}.grapher-night .range-selection .range-buttons .range-button.range-button-disabled,.grapher-night .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#aaa;background:#7a7a7a}.grapher-night .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-night .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-night .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-night .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-night .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-night .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #505053;margin:2px 8px 2px 0;color:#e0e0e3;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-night .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#e0e0e3}.grapher-night .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-night .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-night .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-night .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-night .grapher-main-row{display:flex}.grapher-night .grapher-main-row .central-container{width:100%}.grapher-night .range-graph-container{display:flex;margin-top:10px}.grapher-night .graph-body{width:100%;height:400px;position:relative}.grapher-night .graph-body canvas{width:100%;height:100%}.grapher-night .graph-body .grapher-tooltip,.grapher-night .graph-body .grapher-draggable-points,.grapher-night .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-night .graph-body .grapher-tooltip>svg,.grapher-night .graph-body .grapher-draggable-points>svg,.grapher-night .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-night .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-night .graph-body .grapher-tooltip .tooltip-item path{fill:rgba(0,0,0,.6)}.grapher-night .graph-body .grapher-tooltip .tooltip-item text{fill:#f0f0f0;dominant-baseline:hanging;text-anchor:start}.grapher-night .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#000}.grapher-night .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #ccc}.grapher-night .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-night .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-night .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.3);color:#f0f0f0;padding:2px 4px;max-width:max-content;width:200px}.grapher-night .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-night .graph-body .grapher-vertical-lines line{stroke:#ccc}.grapher-night .graph-body .grapher-vertical-lines polygon{fill:#ccc}.grapher-night .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-night .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:hsla(0,0%,100%,.3)}.grapher-night .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.3);color:#f0f0f0;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-night .graph-body .bounds-selection{position:absolute;background:hsla(0,0%,100%,.1)}.grapher-night .axis{overflow:visible;user-select:none}.grapher-night .axis.x-axis{width:1px;height:20px}.grapher-night .axis.x-axis.x-axis-dual{height:30px}.grapher-night .axis.x-axis{display:block}.grapher-night .axis.y-axis{height:400px}.grapher-night .axis.y-axis .axis-item text{text-anchor:end}.grapher-night .axis.y-axis .y-axis-label{text-anchor:middle;fill:#e0e0e3}.grapher-night .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-night .axis.y-axis .series-color-box{cursor:pointer}.grapher-night .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-night .axis .axis-line{stroke:rgba(192,192,192,.3);stroke-width:1px}.grapher-night .axis .axis-item path{stroke:rgba(192,192,192,.3);stroke-width:1px}.grapher-night .axis .axis-item text{fill:#e0e0e3;font-size:8px}.grapher-night .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-night .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-night .wind-arrows{color:#e0e0e3;opacity:.7}.grapher-night .range-selection-graph{width:100%;background-color:rgba(0,0,0,.3);height:calc(50px + 14px)}.grapher-night .range-selection-graph .graph-body-secondary{height:50px}.grapher-night .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-night .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection{fill:hsla(0,0%,100%,.1);cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#aaa;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#303033}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#808083;cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#fff;stroke-width:1px;cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#aaa;fill:#666;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#aaa;stroke-width:1;transition:stroke-width .15s ease}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#9f9f9f;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#9f9f9f;stroke-width:1px}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#fff}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#fff}.grapher-night input,.grapher-night textarea{background:rgba(0,0,0,0);border:1px solid #505053;margin:2px 0;color:#e0e0e3;padding:1px 2px;text-align:center}.grapher-night input:focus,.grapher-night textarea:focus{outline:none;border-color:#e0e0e3}.grapher-night.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-night.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-night.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-night.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-night.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#ddd}.grapher-day{position:relative;background:linear-gradient(to bottom right, #FFF, #FFF);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-day *,.grapher-day :after,.grapher-day :before{box-sizing:content-box}.grapher-day .grapher-title{text-align:center;color:#000;font-size:18px;margin-bottom:8px}.grapher-day .grapher-primary-container-outer{display:flex}.grapher-day .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#EEE, transparent 75%, transparent 100%);color:#111;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-day .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-day .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-day .series-key .scale-label{display:inline-block;background:#b0b0b7;color:#000;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-day .series-key .series-key-axis-container{display:inline-block;border:1px solid #b0b0b7;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-day .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#505053}.grapher-day .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-day .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-day .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-day .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-day .series-key .series-key-axis-container .label-input-toggler path{fill:#b0b0b7}.grapher-day .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#505053}.grapher-day .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none}.grapher-day .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-day .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px #000}.grapher-day .range-selection{color:#444;user-select:none}.grapher-day .range-selection.range-not-dates{color:#888}.grapher-day .range-selection .range-buttons{text-align:right}.grapher-day .range-selection .range-buttons .options-bar{display:inline-block}.grapher-day .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-day .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:#000;background:#fff;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-day .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-day .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-day .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:4px;border-radius:2px;background:#fff;border:1px dotted silver}.grapher-day .range-selection .range-buttons .range-button.range-button-selected{color:#000;background:#fff;border:1px solid #000}.grapher-day .range-selection .range-buttons .range-button.range-button-disabled,.grapher-day .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#888;background:#eee}.grapher-day .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-day .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-day .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-day .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-day .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-day .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 8px 2px 0;color:#222;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-day .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#505053}.grapher-day .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-day .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-day .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-day .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-day .grapher-main-row{display:flex}.grapher-day .grapher-main-row .central-container{width:100%}.grapher-day .range-graph-container{display:flex;margin-top:10px}.grapher-day .graph-body{width:100%;height:400px;position:relative}.grapher-day .graph-body canvas{width:100%;height:100%}.grapher-day .graph-body .grapher-tooltip,.grapher-day .graph-body .grapher-draggable-points,.grapher-day .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-day .graph-body .grapher-tooltip>svg,.grapher-day .graph-body .grapher-draggable-points>svg,.grapher-day .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-day .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-day .graph-body .grapher-tooltip .tooltip-item path{fill:hsla(0,0%,100%,.6)}.grapher-day .graph-body .grapher-tooltip .tooltip-item text{fill:#0f0f0f;dominant-baseline:hanging;text-anchor:start}.grapher-day .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#fff}.grapher-day .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #333}.grapher-day .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-day .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-day .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.grapher-day .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-day .graph-body .grapher-vertical-lines line{stroke:#333}.grapher-day .graph-body .grapher-vertical-lines polygon{fill:#333}.grapher-day .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-day .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:rgba(0,0,0,.3)}.grapher-day .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-day .graph-body .bounds-selection{position:absolute;background:rgba(0,0,0,.02)}.grapher-day .axis{overflow:visible;user-select:none}.grapher-day .axis.x-axis{width:1px;height:20px}.grapher-day .axis.x-axis.x-axis-dual{height:30px}.grapher-day .axis.x-axis{display:block}.grapher-day .axis.y-axis{height:400px}.grapher-day .axis.y-axis .axis-item text{text-anchor:end}.grapher-day .axis.y-axis .y-axis-label{text-anchor:middle;fill:#1f1f1c}.grapher-day .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-day .axis.y-axis .series-color-box{cursor:pointer}.grapher-day .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-day .axis .axis-line{stroke:#656565;stroke-width:1px}.grapher-day .axis .axis-item path{stroke:#bfbfbf;stroke-width:1px}.grapher-day .axis .axis-item text{fill:#1f1f1c;font-size:8px}.grapher-day .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-day .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-day .wind-arrows{color:#1f1f1c;opacity:.7}.grapher-day .range-selection-graph{width:100%;background-color:hsla(0,0%,100%,.3);height:calc(50px + 14px)}.grapher-day .range-selection-graph .graph-body-secondary{height:50px}.grapher-day .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-day .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-day .range-selection-graph .graph-body-secondary svg .target-selection{fill:rgba(0,0,0,.02);cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#eee}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#b0b0b7;cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#333;stroke-width:1px;cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;fill:#b0b0b7;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#333;stroke-width:1;transition:stroke-width .15s ease}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#555;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#555;stroke-width:1px}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#000}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#000}.grapher-day input,.grapher-day textarea{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 0;color:#222;padding:1px 2px;text-align:center}.grapher-day input:focus,.grapher-day textarea:focus{outline:none;border-color:#505053}.grapher-day.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-day.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-day.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-day.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-day.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#222}.grapher-export{position:relative;background:linear-gradient(to bottom right, #FFF, #FFF);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-export *,.grapher-export :after,.grapher-export :before{box-sizing:content-box}.grapher-export .grapher-title{text-align:center;color:#000;font-size:18px;margin-bottom:8px}.grapher-export .grapher-primary-container-outer{display:flex}.grapher-export .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#EEE, transparent 75%, transparent 100%);color:#111;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-export .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-export .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-export .series-key .scale-label{display:inline-block;background:#b0b0b7;color:#000;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-export .series-key .series-key-axis-container{display:inline-block;border:1px solid #b0b0b7;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-export .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#505053}.grapher-export .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-export .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-export .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-export .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-export .series-key .series-key-axis-container .label-input-toggler path{fill:#b0b0b7}.grapher-export .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#505053}.grapher-export .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none}.grapher-export .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-export .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px #000}.grapher-export .range-selection{color:#444;user-select:none}.grapher-export .range-selection.range-not-dates{color:#888}.grapher-export .range-selection .range-buttons{text-align:right}.grapher-export .range-selection .range-buttons .options-bar{display:inline-block}.grapher-export .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-export .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:#000;background:#fff;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-export .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-export .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-export .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:4px;border-radius:2px;background:#fff;border:1px dotted silver}.grapher-export .range-selection .range-buttons .range-button.range-button-selected{color:#000;background:#fff;border:1px solid #000}.grapher-export .range-selection .range-buttons .range-button.range-button-disabled,.grapher-export .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#888;background:#eee}.grapher-export .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-export .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-export .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-export .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-export .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-export .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 8px 2px 0;color:#222;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-export .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#505053}.grapher-export .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-export .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-export .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-export .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-export .grapher-main-row{display:flex}.grapher-export .grapher-main-row .central-container{width:100%}.grapher-export .range-graph-container{display:flex;margin-top:10px}.grapher-export .graph-body{width:100%;height:400px;position:relative}.grapher-export .graph-body canvas{width:100%;height:100%}.grapher-export .graph-body .grapher-tooltip,.grapher-export .graph-body .grapher-draggable-points,.grapher-export .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-export .graph-body .grapher-tooltip>svg,.grapher-export .graph-body .grapher-draggable-points>svg,.grapher-export .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-export .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-export .graph-body .grapher-tooltip .tooltip-item path{fill:hsla(0,0%,100%,.6)}.grapher-export .graph-body .grapher-tooltip .tooltip-item text{fill:#0f0f0f;dominant-baseline:hanging;text-anchor:start}.grapher-export .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#fff}.grapher-export .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #333}.grapher-export .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-export .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-export .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.grapher-export .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-export .graph-body .grapher-vertical-lines line{stroke:#333}.grapher-export .graph-body .grapher-vertical-lines polygon{fill:#333}.grapher-export .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-export .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:rgba(0,0,0,.3)}.grapher-export .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-export .graph-body .bounds-selection{position:absolute;background:rgba(0,0,0,.02)}.grapher-export .axis{overflow:visible;user-select:none}.grapher-export .axis.x-axis{width:1px;height:20px}.grapher-export .axis.x-axis.x-axis-dual{height:30px}.grapher-export .axis.x-axis{display:block}.grapher-export .axis.y-axis{height:400px}.grapher-export .axis.y-axis .axis-item text{text-anchor:end}.grapher-export .axis.y-axis .y-axis-label{text-anchor:middle;fill:#000}.grapher-export .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-export .axis.y-axis .series-color-box{cursor:pointer}.grapher-export .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-export .axis .axis-line{stroke:#000;stroke-width:1px}.grapher-export .axis .axis-item path{stroke:#bfbfbf;stroke-width:1px}.grapher-export .axis .axis-item text{fill:#000;font-size:8px}.grapher-export .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-export .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-export .wind-arrows{color:#000;opacity:.7}.grapher-export .range-selection-graph{width:100%;background-color:hsla(0,0%,100%,.3);height:calc(50px + 14px)}.grapher-export .range-selection-graph .graph-body-secondary{height:50px}.grapher-export .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-export .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-export .range-selection-graph .graph-body-secondary svg .target-selection{fill:rgba(0,0,0,.02);cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#eee}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#b0b0b7;cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#333;stroke-width:1px;cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;fill:#b0b0b7;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#333;stroke-width:1;transition:stroke-width .15s ease}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#333;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#333;stroke-width:1px}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#000}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#000}.grapher-export input,.grapher-export textarea{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 0;color:#222;padding:1px 2px;text-align:center}.grapher-export input:focus,.grapher-export textarea:focus{outline:none;border-color:#505053}.grapher-export.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-export.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-export.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-export.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-export.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#222}',"",{version:3,sources:["webpack://./src/grapher.scss"],names:[],mappings:"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",sourcesContent:["@mixin grapher(\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n\n $background-color-1: #131313,\n $background-color-2: #1e1e1e,\n\n $tooltip-line-color: #CCC,\n $tooltip-background-color: rgba(0, 0, 0, 0.6),\n $tooltip-text-color: #F0F0F0,\n $vertical-line-color: #CCC,\n\n $axis-line-color: rgb(192, 192, 192, 0.3),\n $axis-line-width: 1px,\n $axis-tick-color: rgb(192, 192, 192, 0.3),\n $axis-text-color: #E0E0E3,\n\n $range-selection-text-color: silver,\n $range-selection-button-color: #505053,\n $range-selection-button-selected-color: black,\n $range-selection-text-selected-color: silver,\n $range-selection-text-color-faded: #AAA,\n $range-selection-button-color-faded: #7A7A7A,\n $range-selection-button-border: null,\n $range-selection-selected-button-border: null,\n\n $range-graph-selection-background-color: rgba(0, 0, 0, 0.3),\n $range-graph-selection-range-color: rgba(255, 255, 255, 0.1),\n $range-graph-selection-outline-color: #AAA,\n $range-graph-selection-bar-color: #808083,\n $range-graph-selection-bar-track-color: #303033,\n $range-graph-selection-bar-rifles-color: #FFF,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #AAA,\n $range-graph-handle-fill-color: #666,\n $range-graph-axis-text-color: #9f9f9f,\n $range-graph-tick-highlighted-color: #FFF,\n $range-graph-text-highlighted-color: #FFF,\n\n $annotation-background-color: rgba(255, 255, 255, 0.3),\n\n $series-key-axis-container-color: #111,\n $series-key-input-border-color: #505053,\n $series-key-input-selected-border-color: #E0E0E3,\n $series-key-input-text-color: #E0E0E3,\n $series-key-background: transparent,\n $scale-label-color: silver,\n $series-key-shadow-color: silver,\n\n $title-color: white,\n\n $sidebar-background-color: #111,\n $sidebar-text-color: #EEE,\n\n $new-grapher-color: #DDD\n) {\n $x-axis-height: 20px;\n $x-axis-dual-height: 30px;\n $padding: 10px;\n\n $axis-z-index: 0;\n $graph-body-z-index: 1;\n\n position: relative;\n background: linear-gradient(to bottom right, $background-color-1, $background-color-2);\n padding: $padding;\n\n font-family: sans-serif;\n font-size: 12px;\n line-height: normal;\n\n *, :after, :before {\n box-sizing: content-box;\n }\n\n .grapher-title {\n text-align: center;\n color: $title-color;\n font-size: 18px;\n margin-bottom: 8px;\n }\n\n .grapher-primary-container-outer {\n display: flex;\n\n .grapher-sidebar {\n background: linear-gradient($sidebar-background-color, transparent 75%, transparent 100%);\n color: $sidebar-text-color;\n padding: 50px 6px 5px 10px;\n margin-left: -$padding;\n margin-top: -$padding;\n margin-bottom: -$padding;\n overflow-y: auto;\n flex-shrink: 0;\n\n .series-toggle {\n white-space: nowrap;\n\n & + .series-toggle {\n margin-top: 3px;\n }\n\n label {\n display: inline-block;\n position: relative;\n user-select: none;\n }\n\n input[type='checkbox'] {\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n margin-right: 11px;\n }\n\n input:not(:checked) ~ .checkmark {\n background-color: transparent !important;\n }\n\n input:checked ~ .checkmark:after {\n display: block;\n }\n\n .checkmark {\n position: absolute;\n top: 1px;\n left: 0;\n height: 7px;\n width: 7px;\n background-color: #eee;\n border: 2px solid;\n border-radius: 1px;\n }\n\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n\n left: 0.5px;\n top: -1.5px;\n width: 3px;\n height: 6px;\n border: solid white;\n border-width: 0 2px 2px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n }\n }\n\n .grapher-primary-container-body {\n width: 100%;\n padding-left: 2px;\n }\n }\n\n .series-key {\n text-align: center;\n margin-bottom: -14px;\n position: relative;\n\n .scale-label {\n display: inline-block;\n background: $series-key-axis-container-color;\n color: $scale-label-color;\n transform: rotate(-90deg);\n width: 24px;\n margin-left: -5px;\n vertical-align: top;\n margin-top: 4px;\n padding-bottom: 2px;\n cursor: pointer;\n user-select: none;\n }\n\n .series-key-axis-container {\n display: inline-block;\n border: 1px solid $series-key-axis-container-color;\n\n min-width: 18px;\n min-height: 24px;\n vertical-align: top;\n\n white-space: nowrap;\n\n & + .series-key-axis-container {\n margin-left: 4px;\n }\n\n &.series-key-axis-container-showing-label {\n .scale-label {\n width: 46px;\n margin-top: 15px;\n margin-left: -15px;\n margin-right: -12px;\n }\n\n .series-key-axis-label-container {\n display: block;\n }\n\n .label-input-toggler {\n path {\n fill: $series-key-input-selected-border-color;\n }\n }\n }\n\n .series-key-axis-container-body {\n display: inline-block;\n\n & > div {\n white-space: initial;\n }\n }\n\n .series-key-axis-label-container {\n display: none;\n }\n\n .label-input-toggler {\n width: 16px;\n cursor: pointer;\n display: inline-block;\n vertical-align: top;\n margin: 4px 2px;\n\n path {\n fill: $series-key-axis-container-color;\n }\n\n &:hover {\n path {\n fill: $series-key-input-selected-border-color;\n }\n }\n }\n }\n\n .series-key-item {\n border: 1px solid currentColor;\n padding: 2px;\n margin: 2px;\n display: inline-block;\n cursor: pointer;\n user-select: none;\n background: $series-key-background;\n\n & + .series-key-item {\n margin-left: 4px;\n }\n\n &.series-key-item-highlighted {\n box-shadow: 0 0 4px $series-key-shadow-color;\n }\n }\n }\n\n .range-selection {\n color: $range-selection-text-color;\n user-select: none;\n\n &.range-not-dates {\n color: $range-selection-text-color-faded;\n }\n\n .range-buttons {\n text-align: right;\n\n .options-bar {\n display: inline-block;\n }\n\n .option-tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n\n .option-tooltip-text {\n visibility: hidden;\n color: $range-selection-text-selected-color;\n background: $range-selection-button-selected-color;\n text-align: center;\n padding: 5px 5px;\n border-radius: 6px;\n position: absolute;\n z-index: 1;\n border: 1px solid black;\n\n width: 120px;\n margin-left: -65px;\n top: calc(100% + 7px);\n left: 50%;\n }\n\n &:hover .option-tooltip-text {\n visibility: visible;\n }\n\n .option-tooltip-text::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent black transparent;\n }\n }\n\n .range-button {\n display: inline-block;\n cursor: pointer;\n padding: 4px 8px;\n @if ($range-selection-button-border == null) {\n margin-left: 6px;\n } @else {\n margin-left: 4px;\n }\n\n border-radius: 2px;\n background: $range-selection-button-color;\n border: $range-selection-button-border;\n\n &.range-button-selected {\n color: $range-selection-text-selected-color;\n background: $range-selection-button-selected-color;\n border: $range-selection-selected-button-border;\n }\n\n &.range-button-disabled, &.range-button-selected.range-button-disabled {\n cursor: not-allowed;\n color: $range-selection-text-color-faded;\n background: $range-selection-button-color-faded;\n }\n\n .icon-container {\n position: relative;\n width: 0;\n\n &.icon-container-narrow {\n svg {\n left: -3px;\n }\n }\n\n &.icon-container-square {\n width: 5px;\n\n svg {\n left: -5px;\n }\n }\n\n &.icon-container-448 {\n width: 3px;\n\n svg {\n left: -5px;\n }\n }\n\n &:before {\n content: 'A';\n opacity: 0;\n }\n\n svg {\n height: 15px;\n position: absolute;\n top: -1px;\n left: -4px;\n }\n }\n }\n\n .range-selection-history + .range-selection-history {\n margin-right: 8px;\n margin-left: 4px;\n }\n\n .percentile-button {\n & > div {\n display: inline-block;\n }\n\n input {\n background: transparent;\n border: 1px solid $series-key-input-border-color;\n margin: 2px 8px 2px 0;\n color: $series-key-input-text-color;\n padding: 1px 2px;\n width: 20px;\n font-size: 11px;\n -moz-appearance: textfield;\n\n &:focus {\n outline: none;\n border-color: $series-key-input-selected-border-color;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n .icon-container.icon-container-narrow {\n svg {\n height: 12px;\n top: 1px;\n left: -5px;\n }\n }\n }\n\n .showing-options-button {\n margin-right: 8px;\n }\n }\n }\n\n .grapher-main-row {\n display: flex;\n\n .central-container {\n width: 100%;\n }\n }\n\n .range-graph-container {\n display: flex;\n margin-top: 10px;\n }\n\n .graph-body {\n width: 100%;\n height: $primary-graph-body-height;\n position: relative;\n\n canvas {\n width: 100%;\n height: 100%;\n }\n\n .grapher-tooltip, .grapher-draggable-points, .grapher-vertical-lines {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 20;\n\n > svg {\n position: absolute;\n overflow: visible;\n left: 0;\n }\n }\n\n .grapher-vertical-lines {\n pointer-events: none;\n user-select: none;\n }\n\n .grapher-tooltip {\n .tooltip-item {\n path {\n fill: $tooltip-background-color;\n }\n\n text {\n fill: $tooltip-text-color;\n dominant-baseline: hanging;\n text-anchor: start;\n }\n\n &.tooltip-item-fixed {\n path {\n fill: rgba($tooltip-background-color, 1);\n }\n }\n }\n\n .line {\n position: absolute;\n height: 400px;\n border-left: 1px solid $tooltip-line-color;\n }\n\n .custom-tooltip-container {\n position: absolute;\n }\n }\n\n .grapher-context-menu {\n position: absolute;\n top: 0;\n left: 0;\n .menu-item {\n\n .menu-text {\n user-select: all;\n position: absolute;\n top: 0;\n background: $tooltip-background-color;\n border: 1px solid $annotation-background-color;\n color: $tooltip-text-color;\n padding: 2px 4px;\n max-width: max-content;\n width: 200px;\n }\n }\n }\n\n .grapher-draggable-points {\n circle {\n cursor: pointer;\n }\n }\n\n .grapher-vertical-lines {\n line {\n stroke: $vertical-line-color;\n }\n\n polygon {\n fill: $vertical-line-color;\n }\n }\n\n .grapher-annotations {\n position: absolute;\n top: 0;\n pointer-events: none;\n user-select: none;\n z-index: 10;\n\n .grapher-annotation {\n position: absolute;\n\n .annotation-marker {\n display: inline-block;\n background: $annotation-background-color;\n }\n\n &.grapher-annotation-range {\n .annotation-range-marker {\n display: inline-block;\n background-color: rgba(128, 128, 128, 0.2);\n background-image: repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);\n background-size: 40px 40px;\n border-right: 1px solid white;\n border-left: 1px solid white;\n }\n }\n\n .annotation-text {\n position: absolute;\n background: $tooltip-background-color;\n border: 1px solid $annotation-background-color;\n color: $tooltip-text-color;\n padding: 2px 4px;\n white-space: nowrap;\n font-size: 10px;\n z-index: 10;\n }\n }\n }\n\n .bounds-selection {\n position: absolute;\n background: $range-graph-selection-range-color;\n }\n }\n\n .axis {\n overflow: visible;\n user-select: none;\n\n &.x-axis {\n width: 1px;\n height: $x-axis-height;\n \n &.x-axis-dual {\n height: $x-axis-dual-height;\n }\n display: block;\n }\n\n &.y-axis {\n height: $primary-graph-body-height;\n\n .axis-item text {\n text-anchor: end;\n }\n\n .y-axis-label {\n text-anchor: middle;\n fill: $axis-text-color;\n\n &.y-axis-big-label {\n font-size: 18px;\n }\n }\n\n .series-color-box {\n cursor: pointer;\n }\n\n &.y-axis-right {\n .axis-item text {\n text-anchor: start;\n }\n }\n }\n\n .axis-line {\n stroke: $axis-line-color;\n stroke-width: $axis-line-width;\n }\n\n .axis-item {\n path {\n stroke: $axis-tick-color;\n stroke-width: 1px;\n }\n\n text {\n fill: $axis-text-color;\n font-size: 8px;\n }\n\n &.axis-item-major {\n .axis-tick {\n stroke-width: 1px;\n }\n }\n\n &.axis-item-big-labels {\n text {\n font-size: 16px;\n }\n }\n }\n }\n\n .wind-arrows {\n color: $axis-text-color;\n opacity: 0.7;\n }\n\n .range-selection-graph {\n width: 100%;\n background-color: $range-graph-selection-background-color;\n height: calc(#{$secondary-graph-body-height} + #{$range-graph-selection-bar-height}); \n\n .graph-body-secondary {\n height: $secondary-graph-body-height;\n\n canvas {\n height: 100%;\n }\n\n svg {\n position: absolute;\n left: 0;\n width: 100%;\n overflow: visible;\n\n .target-selection {\n fill: $range-graph-selection-range-color;\n cursor: ew-resize;\n }\n\n\n .target-selection-outline {\n stroke: $range-graph-selection-outline-color;\n cursor: ew-resize;\n fill: transparent;\n }\n\n .selection-bar-track {\n fill: $range-graph-selection-bar-track-color;\n }\n\n .selection-bar {\n fill: $range-graph-selection-bar-color;\n cursor: ew-resize;\n }\n\n .selection-bar-rifles {\n stroke: $range-graph-selection-bar-rifles-color;\n stroke-width: 1px;\n cursor: ew-resize;\n }\n\n .selection-bar-handle-hit {\n cursor: ew-resize;\n }\n\n .selection-bar-handle {\n stroke: $range-graph-handle-color;\n fill: $range-graph-handle-fill-color;\n stroke-width: 1px;\n cursor: ew-resize;\n transition: stroke-width 0.15s ease, fill 0.15s ease;\n }\n\n .selection-handle {\n .selection-handle-hit {\n cursor: ew-resize;\n }\n\n .selection-handle-line {\n stroke: $range-graph-handle-color;\n stroke-width: 1;\n transition: stroke-width 0.15s ease;\n }\n\n &:hover .selection-handle-line {\n stroke-width: 3;\n }\n\n &.selection-handle-dragging .selection-handle-line {\n stroke-width: 3;\n }\n\n &:hover .selection-bar-handle {\n stroke-width: 2px;\n }\n\n &.selection-handle-dragging .selection-bar-handle {\n stroke-width: 2px;\n }\n }\n\n .axis-item {\n text {\n fill: $range-graph-axis-text-color;\n text-anchor: start;\n font-size: 8px;\n user-select: none;\n dominant-baseline: text-after-edge;\n }\n\n path {\n stroke: $range-graph-axis-text-color;\n stroke-width: 1px;\n }\n \n &.axis-item-highlighted {\n path {\n stroke: $range-graph-tick-highlighted-color;\n }\n \n text {\n fill: $range-graph-text-highlighted-color;\n }\n }\n }\n }\n }\n }\n\n input, textarea {\n background: transparent;\n border: 1px solid $series-key-input-border-color;\n margin: 2px 0;\n color: $series-key-input-text-color;\n padding: 1px 2px;\n text-align: center;\n\n &:focus {\n outline: none;\n border-color: $series-key-input-selected-border-color;\n }\n }\n\n &.grapher-dragging-y {\n .y-axis {\n border: 2px dashed silver;\n margin: -2px;\n flex-shrink: 0;\n\n & + .y-axis {\n border-left: none;\n }\n }\n }\n\n &.grapher-fullscreen {\n height: calc(100vh - 2*#{$padding});\n }\n\n &.grapher-fixed-height {\n .grapher-primary-container-outer {\n height: 100%;\n\n .grapher-primary-container-body {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .grapher-main-row {\n flex-grow: 1;\n\n .central-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n\n > .graph-body {\n flex-grow: 1;\n height: unset;\n }\n }\n\n .axis.y-axis {\n height: calc(100% - #{2*$x-axis-height});\n }\n }\n }\n }\n }\n\n &.new-grapher {\n height: auto;\n border: 2px dashed silver;\n text-align: center;\n color: $new-grapher-color;\n }\n}\n\n@mixin grapher-theme-night (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height\n );\n}\n\n@mixin grapher-theme-day (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height,\n\n $background-color-1: #FFF,\n $background-color-2: #FFF,\n\n $tooltip-line-color: invert(#CCC),\n $tooltip-background-color: invert(rgba(0, 0, 0, 0.6)),\n $tooltip-text-color: invert(#F0F0F0),\n $vertical-line-color: invert(#CCC),\n\n $axis-line-color: #656565,\n $axis-tick-color: #BFBFBF,\n $axis-text-color: invert(#E0E0E3),\n\n $range-selection-text-color: #444,\n $range-selection-button-color: white,\n $range-selection-button-selected-color: white,\n $range-selection-text-selected-color: black,\n $range-selection-text-color-faded: #888,\n $range-selection-button-color-faded: #EEE,\n $range-selection-button-border: 1px dotted silver,\n $range-selection-selected-button-border: 1px solid black,\n\n $range-graph-selection-background-color: rgba(255, 255, 255, 0.3),\n $range-graph-selection-range-color: rgba(0, 0, 0, 0.02),\n $range-graph-selection-outline-color: #333,\n $range-graph-selection-bar-color: #B0B0B7,\n $range-graph-selection-bar-track-color: #EEE,\n $range-graph-selection-bar-rifles-color: #333,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\n $range-graph-axis-text-color: #555,\n $range-graph-tick-highlighted-color: #000,\n $range-graph-text-highlighted-color: #000,\n\n $annotation-background-color: rgba(0, 0, 0, 0.3),\n\n $series-key-axis-container-color: #B0B0B7,\n $series-key-input-border-color: #E0E0E3,\n $series-key-input-selected-border-color: #505053,\n $series-key-input-text-color: #222,\n $series-key-background: null,\n $series-key-shadow-color: black,\n $scale-label-color: black,\n\n $title-color: black,\n\n $sidebar-background-color: #EEE,\n $sidebar-text-color: #111,\n\n $new-grapher-color: #222\n );\n}\n\n@mixin grapher-theme-export (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height,\n\n $background-color-1: #FFF,\n $background-color-2: #FFF,\n\n $tooltip-line-color: invert(#CCC),\n $tooltip-background-color: invert(rgba(0, 0, 0, 0.6)),\n $tooltip-text-color: invert(#F0F0F0),\n $vertical-line-color: invert(#CCC),\n\n $axis-line-color: black,\n $axis-line-width: 1px,\n $axis-tick-color: #BFBFBF,\n $axis-text-color: black,\n\n $range-selection-text-color: #444,\n $range-selection-button-color: white,\n $range-selection-button-selected-color: white,\n $range-selection-text-selected-color: black,\n $range-selection-text-color-faded: #888,\n $range-selection-button-color-faded: #EEE,\n $range-selection-button-border: 1px dotted silver,\n $range-selection-selected-button-border: 1px solid black,\n\n $range-graph-selection-background-color: rgba(255, 255, 255, 0.3),\n $range-graph-selection-range-color: rgba(0, 0, 0, 0.02),\n $range-graph-selection-outline-color: #333,\n $range-graph-selection-bar-color: #B0B0B7,\n $range-graph-selection-bar-track-color: #EEE,\n $range-graph-selection-bar-rifles-color: #333,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\n $range-graph-axis-text-color: #333,\n $range-graph-tick-highlighted-color: #000,\n $range-graph-text-highlighted-color: #000,\n\n $annotation-background-color: rgba(0, 0, 0, 0.3),\n\n $series-key-axis-container-color: #B0B0B7,\n $series-key-input-border-color: #E0E0E3,\n $series-key-input-selected-border-color: #505053,\n $series-key-input-text-color: #222,\n $series-key-background: null,\n $series-key-shadow-color: black,\n $scale-label-color: black,\n\n $title-color: black,\n\n $sidebar-background-color: #EEE,\n $sidebar-text-color: #111,\n\n $new-grapher-color: #222\n );\n}\n\n.grapher-night {\n @include grapher-theme-night();\n}\n\n.grapher-day {\n @include grapher-theme-day();\n}\n\n.grapher-export {\n @include grapher-theme-export();\n}\n"],sourceRoot:""}]);const s=a},659(e){var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},694(e,t,n){var i=n(925);function r(){}function o(){}o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,a){if(a!==i){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},744(e){e.exports="precision highp float;\n\nvarying vec4 trapBounds; // [x1, lineY1, x2, lineY2]\nvarying vec4 trapBottom; // [x1, bottomY1, x2, bottomY2] \nvarying vec2 worldPos; // World position\n\nuniform int gradientCount;\nuniform sampler2D gradientTexture; // Texture containing gradient data\nuniform vec4 fallbackColor;\n\nvec4 interpolateGradient(float position) {\n if (gradientCount <= 0) {\n return fallbackColor;\n }\n if (gradientCount == 1) {\n return texture2D(gradientTexture, vec2(0.5 / float(gradientCount * 2), 0.5));\n }\n\n float textureWidth = float(gradientCount * 2);\n float firstStop = texture2D(gradientTexture, vec2(0.5 / textureWidth, 0.5)).r;\n float lastStop = texture2D(gradientTexture, vec2((float((gradientCount - 1) * 2) + 0.5) / textureWidth, 0.5)).r;\n \n // Scale position to fit the gradient range\n if (lastStop > firstStop) {\n position = firstStop + position * (lastStop - firstStop);\n }\n \n position = clamp(position, 0.0, 1.0);\n\n // Handle boundary cases first\n vec4 firstColor = texture2D(gradientTexture, vec2(1.5 / textureWidth, 0.5));\n vec4 lastColor = texture2D(gradientTexture, vec2((float((gradientCount - 1) * 2 + 1) + 0.5) / textureWidth, 0.5));\n \n if (position <= firstStop) return firstColor;\n if (position >= lastStop) return lastColor;\n \n // Calculate normalized position within the gradient range\n float normalizedPos = (position - firstStop) / max(lastStop - firstStop, 0.001);\n normalizedPos = clamp(normalizedPos, 0.0, 1.0);\n \n // Map to segment index using only float operations\n float segmentFloat = normalizedPos * float(gradientCount - 1);\n float segmentIndex = floor(segmentFloat);\n \n // Ensure segment index is within valid bounds using float operations\n segmentIndex = min(segmentIndex, float(gradientCount - 2));\n segmentIndex = max(segmentIndex, 0.0);\n \n // Calculate texture coordinates for the two colors to interpolate\n float texCoordA = (segmentIndex * 2.0 + 1.0 + 0.5) / textureWidth;\n float texCoordB = ((segmentIndex + 1.0) * 2.0 + 1.0 + 0.5) / textureWidth;\n \n // Sample the two colors\n vec4 colorA = texture2D(gradientTexture, vec2(texCoordA, 0.5));\n vec4 colorB = texture2D(gradientTexture, vec2(texCoordB, 0.5));\n \n // Get the actual gradient stops for proper interpolation\n float stopA = texture2D(gradientTexture, vec2((segmentIndex * 2.0 + 0.5) / textureWidth, 0.5)).r;\n float stopB = texture2D(gradientTexture, vec2(((segmentIndex + 1.0) * 2.0 + 0.5) / textureWidth, 0.5)).r;\n \n // Calculate interpolation factor based on actual stop positions\n float stopRange = stopB - stopA;\n float t = stopRange > 0.001 ? (position - stopA) / stopRange : 0.0;\n t = clamp(t, 0.0, 1.0);\n \n return mix(colorA, colorB, t);\n}\n\nvoid main() {\n float pixelX = worldPos.x;\n float pixelY = worldPos.y;\n \n // Extract trapezoid corners\n float x1 = trapBounds.x;\n float lineY1 = trapBounds.y;\n float x2 = trapBounds.z;\n float lineY2 = trapBounds.w;\n \n float bottomX1 = trapBottom.x;\n float bottomY1 = trapBottom.y;\n float bottomX2 = trapBottom.z;\n float bottomY2 = trapBottom.w;\n \n // Interpolate line Y at current pixel X\n float t = (pixelX - x1) / (x2 - x1 + 0.001); // Avoid division by zero\n t = clamp(t, 0.0, 1.0);\n \n float lineYAtPixel = mix(lineY1, lineY2, t);\n float bottomYAtPixel = mix(bottomY1, bottomY2, t);\n \n // Calculate gradient position: 0.0 at line, 1.0 at bottom\n float totalDistance = abs(bottomYAtPixel - lineYAtPixel);\n float gradientPos = totalDistance > 0.001 ? \n abs(pixelY - lineYAtPixel) / totalDistance : 0.0;\n \n vec4 color = interpolateGradient(gradientPos);\n gl_FragColor = color;\n}\n"},765(e){e.exports="precision highp float;\n\nattribute vec2 position;\n\nvoid main() {\n gl_Position = vec4((position - 0.5)*2.0, 0.0, 1.0);\n}\n"},789(e){e.exports="precision mediump float;\n\nattribute vec2 position;\n\nuniform float width;\nuniform float height;\nuniform float pointSize;\n\nvoid main() {\n gl_Position = vec4(2.0*position.x/width - 1.0, 1.0 - 2.0*position.y/height, 0.0, 1.0);\n gl_PointSize = pointSize;\n}"},825(e){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},885(e){e.exports="precision highp float;\n\nattribute vec2 position;\nattribute vec4 trapezoidBounds; // [x1, y1_line, x2, y2_line] - the line segment \nattribute vec4 trapezoidBottom; // [x1, y1_bottom, x2, y2_bottom] - the bottom segment\n\nuniform float width;\nuniform float height;\n\nvarying vec4 trapBounds; // Pass trapezoid line bounds to fragment\nvarying vec4 trapBottom; // Pass trapezoid bottom bounds to fragment \nvarying vec2 worldPos; // Pass world position\n\nvoid main() {\n trapBounds = trapezoidBounds;\n trapBottom = trapezoidBottom;\n worldPos = position;\n \n gl_Position = vec4(2.0*position.x/width - 1.0, 1.0 - 2.0*position.y/height, 0.0, 1.0);\n}\n"},925(e){e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={id:e,exports:{}};return a[e](n,n.exports,l),n.exports}l.m=a,l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,n)=>(l.f[n](e,t),t),[])),l.u=e=>e+".bundle.esm.js",l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.p="/assets/",(()=>{l.b=new URL("./",import.meta.url);var e={792:0},t=t=>{var n,i,{__webpack_esm_ids__:r,__webpack_esm_modules__:o,__webpack_esm_runtime__:a}=t,s=0;for(n in o)l.o(o,n)&&(l.m[n]=o[n]);for(a&&a(l);s<r.length;s++)i=r[s],l.o(e,i)&&e[i]&&e[i][0](),e[r[s]]=0};l.f.j=(n,i)=>{var r=l.o(e,n)?e[n]:void 0;if(0!==r)if(r)i.push(r[1]);else{var o=import(l.p+l.u(n)).then(t,t=>{throw 0!==e[n]&&(e[n]=void 0),t});o=Promise.race([o,new Promise(t=>r=e[n]=[t])]),i.push(r[1]=o)}}})(),l.nc=void 0;var h=l(556),c=l.n(h);const g=["values","tuples","objects"],A=[...g,"tuple_observable","object_observable","generator"],d=c().any,p=c().shape({data:d.isRequired,type:c().oneOf([...A,"infer"]),xKey:c().string,yKey:c().string,windXKey:c().string,windYKey:c().string,windComp:c().elementType,xUnixDates:c().bool,color:c().oneOfType([c().string,c().number]),name:c().string,xLabel:c().string,yLabel:c().string,ignoreDiscontinuities:c().bool,dashed:c().bool,dashPattern:c().arrayOf(c().number),width:c().number,rangeSelectorWidth:c().number,axis:c().oneOfType([c().string,c().object]),expandYWith:c().arrayOf(c().number),defaultAlwaysTooltipped:c().bool,followingMouseTooltip:c().bool,square:c().bool,shiftXBy:c().number,graph:c().number,background:c().object,hideFromKey:c().bool,showIndividualPoints:c().bool,minPointSpacing:c().number,rendering:c().oneOf(["line","bar","area","shadow"]),negativeColor:c().string,gradient:c().array,negativeGradient:c().array,zeroLineWidth:c().number,zeroLineColor:c().string,zeroLineY:c().oneOfType([c().number,c().string]),pointRadius:c().number,tooltipWidth:c().number,hasAreaBottom:c().bool,shadowColor:c().string,gradient:c().arrayOf(c().oneOfType([c().string,c().array])),rangeKey:c().string}),u=c().arrayOf(p),m=c().shape({axisIndex:c().number.isRequired,series:c().array.isRequired,side:c().oneOf(["left","right"]).isRequired,scale:c().oneOf(["linear","log"]).isRequired,label:c().string}),f=c().arrayOf(m),C=c().shape({label:c().string.isRequired,calculator:c().func.isRequired,datesOnly:c().bool}),x=c().arrayOf(C),b={includeSeriesLabel:c().bool,includeXLabel:c().bool,includeYLabel:c().bool,includeXValue:c().bool,includeYValue:c().bool,floating:c().bool,alwaysFixedPosition:c().bool,floatPosition:c().oneOf(["top","bottom"]),floatDelta:c().number,savingDisabled:c().bool,customTooltip:c().func,combineTooltips:c().oneOfType([c().bool,c().number])},y=c().shape(b),_=c().shape({x:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),startX:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),endX:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),series:c().arrayOf(c().string),content:c().string,lineOnly:c().bool}),B=c().arrayOf(_),v=c().shape({x:c().number.isRequired,y:c().number.isRequired,radius:c().number,fillColor:c().string,strokeColor:c().string,strokeWidth:c().number,onClick:c().func,onDoubleClick:c().func}),w=c().arrayOf(v),E=c().shape({x:c().oneOfType([c().number,c().instanceOf(Date)]).isRequired,color:c().string,lineTop:c().number,width:c().number,markTop:c().bool,style:c().object,markerStyle:c().object,text:c().string,textTop:c().number,textStyle:c().object,minPixelX:c().number,maxPixelX:c().number,onRangeGraph:c().oneOfType([c().bool,c().object]),onRangeGraphOnly:c().bool}),k={Data:d,SingleSeries:p,Series:u,Axis:m,Axes:f,CustomBoundsSelector:C,CustomBoundsSelectors:x,TooltipOptions:y,TooltipOptionsRaw:b,Annotations:B,DraggablePoint:v,DraggablePoints:w,VerticalLine:E,VerticalLines:c().arrayOf(E)};class S{constructor(){this._listeners={}}clearListeners(){this._listeners={}}on(e,t){this._listeners[e]=this._listeners[e]||new Set,this._listeners[e].add(t)}off(e,t){this._listeners[e]&&(this._listeners[e].delete(t),0===this._listeners[e].size&&delete this._listeners[e])}emit(e){if(!this._listeners[e])return;const t=[];for(let e=1;e<arguments.length;e++)t.push(arguments[e]);this._listeners[e].forEach(e=>{e.apply(this,t)})}}var D=l(365);function T(e,t={useSimpleData:!1}){if(e.type&&"infer"!==e.type)return e.type;const n=t.data||t.useSimpleData&&e.simpleData||e.data;if(!n)throw new Error("Data must be provided");if(Array.isArray(n))return 0===n.length||Array.isArray(n[0])?"tuples":"number"!=typeof n[0]&&n[0]?"objects":"values";if(n.observe)return e.xKey?"object_observable":"tuple_observable";if("function"==typeof n)return"generator";throw new Error("Could not infer type")}var z=l(400),R=l.n(z),X=l(765),Y=l.n(X);function P(e){if("black"===e)e="#000000";else if("white"===e)e="#FFFFFF";else if("transparent"===e)return[0,0,0,0];if(e.startsWith("rgb")){const t=e.split(",").map(e=>parseFloat(e.match(/\d+(\.\d+)?/)[0]));return[t[0]/255,t[1]/255,t[2]/255,t.length>=4?t[3]:1]}if("string"!=typeof e||!/^#[\dA-F]{3}$|^#[\dA-F]{6}$/i.test(e))throw new Error(`Color must be a hex string: ${e}`);return 4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),[parseInt(e.substr(1,2),16)/255,parseInt(e.substr(3,2),16)/255,parseInt(e.substr(5,2),16)/255,1]}function M(e,t,n){const i=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(i,t),e.compileShader(i),!e.getShaderParameter(i,e.COMPILE_STATUS))return console.error(e.getShaderInfoLog(i)),null;const r=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))return console.error(e.getShaderInfoLog(r)),null;const o=e.createProgram();return e.attachShader(o,i),e.attachShader(o,r),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS)?(e.validateProgram(o),e.getProgramParameter(o,e.VALIDATE_STATUS)?o:(console.error("Shader program validation failed:",e.getProgramInfoLog(o)),null)):(console.error("Shader program linking failed:",e.getProgramInfoLog(o)),null)}class F{constructor(e){this._gl=e,this._program=M(e,Y(),R()),this._vertexBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}draw({data:e}){const t=this._gl;t.useProgram(this._program);for(let{minXt:n,maxXt:i,color:r}of e){t.uniform4f(t.getUniformLocation(this._program,"color"),...P(r));const e=new Float32Array([n,1,i,1,i,-1,n,1,i,-1,n,-1]);t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(e),t.STATIC_DRAW);const o=t.getAttribLocation(this._program,"position");t.enableVertexAttribArray(o),t.vertexAttribPointer(o,2,t.FLOAT,!1,0,0),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.drawArrays(t.TRIANGLES,0,6)}}}async function L(e,t,{reset:n=!0}={}){n&&(e.width="",e.height="",e.style.width="0",e.style.height="",await new Promise(e=>requestAnimationFrame(e)));let i=e.parentNode.getBoundingClientRect();for(;0===i.width;)await new Promise(e=>requestAnimationFrame(e)),i=e.getBoundingClientRect();const r=2*(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),o=i.width,a=i.height,s=o*r,l=a*r;return e.width=s,e.height=l,e.style.width=`${o}px`,e.style.height=`${a}px`,{pixelRatio:r,elementWidth:o,elementHeight:a,renderWidth:s,renderHeight:l,boundingRect:i}}function O(e,{splitAtY:t}={}){const n=[];let i=[],r=!0;const{nullMask:o,maxYValues:a,minYValues:s,yValues:l}=e;for(let e=0;e<l.length;e++){const h=2*e,c=l[e];if(1&o[e]){r||(n.push(i),i=[]),r=!0;continue}i.push([h,c]);const g=s[e],A=a[e];if(g!==A&&(2&o[e]||i.push([h,g]),4&o[e]||i.push([h,A]),i.push([h,c])),r=!1,"number"==typeof t&&e>0){const a=l[e-1];(!(1&o[e-1])&&a<t&&c>=t||a>t&&c<=t||a===t&&c!==t)&&(r||(n.push(i),i=[[h,c]]),r=!0)}}return r||n.push(i),n}function I(e,{context:t,sizing:n,color:i,zeroColor:r,zeroWidth:o}){o&&(t?(t.strokeStyle=r||i,t.lineWidth=o,t.beginPath(),t.moveTo(0,e),t.lineTo(n.renderWidth,e),t.stroke()):console.error("Canvas context is null in drawZeroLine"))}function $(e,t,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s}){if(i.fillStyle=n,s&&s.length>=2){const e=i.createLinearGradient(0,0,0,r.renderHeight);for(let t=0;t<s.length;t++){const n=s[t];Array.isArray(n)?e.addColorStop(n[0],n[1]):e.addColorStop(t/(s.length-1),n)}i.fillStyle=e}const l=a?o:r.renderHeight;i.beginPath();const[h,c]=e[0],[g,A]=e[e.length-1];t||i.moveTo(h,l);for(let t=0;t<e.length;t++){const[n,r]=e[t];i.lineTo(n,r)}if(t&&t.length){for(let e=t.length-1;e>=0;e--){const[n,r]=t[e];i.lineTo(n,r)}i.lineTo(...e[0])}else i.lineTo(g,l);i.fill()}function G(e,t,n,i,r,{color:o,context:a,sizing:s,zero:l,hasNegatives:h,gradient:c,areaBottomPaths:g}){if(a.fillStyle=o,c&&c.length>=2){const e=a.createLinearGradient(0,0,0,s.renderHeight);for(let t=0;t<c.length;t++){const n=c[t];if(Array.isArray(n)){const t=r?(0,D.applyReducedOpacity)(n[1],.35):n[1];e.addColorStop(n[0],t)}else{const i=r?(0,D.applyReducedOpacity)(n,.35):n;e.addColorStop(t/(c.length-1),i)}}a.fillStyle=e}const A=h?l:s.renderHeight;if(a.beginPath(),r){const r=i?n+1:n,[o]=e[0];g||a.moveTo(o,A);for(let t=0;t<=r&&t<e.length;t++){const[n,o]=t===r&&i?i:e[t];a.lineTo(n,o)}if(t&&t.length){for(let e=Math.min(r,t.length-1);e>=0;e--){const[n,i]=t[e];a.lineTo(n,i)}a.lineTo(...e[0])}else{const t=i||e[r]||e[e.length-1];a.lineTo(t[0],A)}}else{const r=i?n:n+1,o=i||e[r];if(o){a.moveTo(o[0],A),i&&a.lineTo(...i);for(let t=r;t<e.length;t++)a.lineTo(...e[t]);if(t&&t.length){for(let e=t.length-1;e>=Math.max(r,0);e--){const[n,i]=t[e];a.lineTo(n,i)}i&&a.lineTo(i[0],A)}else{const[t]=e[e.length-1];a.lineTo(t,A)}}}a.fill()}function W(e,{color:t,context:n,negativeColor:i,hasNegatives:r,zero:o,zeroColor:a,pointRadius:s}){if(e&&Array.isArray(e))for(let l=0;l<e.length;l++){const[h,c]=e[l];let g=t;i&&r&&(g=c===o&&a?a:c<o?t:i),n.fillStyle=g,n.beginPath(),n.arc(h,c,s||8,0,2*Math.PI,!1),n.fill()}}function N(e,{color:t,context:n,hasNegatives:i,negativeColor:r,width:o,highlighted:a}){if(e&&Array.isArray(e)){a&&(o+=2),o*=2;for(let a of e)if(a.length){n.strokeStyle=i&&r?r:t,n.lineWidth=o,n.beginPath();for(let e=0;e<a.length;e++){const[t,i]=a[e];0===e?n.moveTo(t,i):n.lineTo(t,i)}n.stroke()}}}function U(e,t,{color:n,context:i,hasNegatives:r,negativeColor:o,zero:a,width:s,highlighted:l,cutoffOpacity:h}){if(!e||!Array.isArray(e))return;l&&(s+=2),s*=2;const c=t*i.canvas.width,g=[],A=[];for(let t of e){if(!t.length)continue;const e=[],n=[];let i=null,r=-1;for(let i=0;i<t.length;i++){const[o,a]=t[i];o<c?(e.push([o,a]),r=i):n.push([o,a])}if(e.length>0&&n.length>0){const t=e[e.length-1],r=n[0],[o,a]=t,[s,l]=r;s!==o&&(i=[c,a+(c-o)/(s-o)*(l-a)],e.push(i),n.unshift(i))}e.length>0&&g.push(e),n.length>0&&A.push(n)}if(g.length>0){const e=(0,D.applyReducedOpacity)(n,h);i.strokeStyle=e,i.lineWidth=s;for(let e of g)if(e.length>1){i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}}if(A.length>0){i.strokeStyle=r&&o?o:n,i.lineWidth=s;for(let e of A)if(e.length>1){i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}}}function q(e,t,{color:n,context:i,negativeColor:r,hasNegatives:o,zero:a,zeroColor:s,pointRadius:l,cutoffOpacity:h}){if(!e||!Array.isArray(e))return;const c=t*i.canvas.width;for(let t=0;t<e.length;t++){const[g,A]=e[t],d=g<c;let p=n;d&&(p=(0,D.applyReducedOpacity)(n,h)),r&&o&&(p=A===a&&s?s:A<a?d?(0,D.applyReducedOpacity)(n,h):n:d?(0,D.applyReducedOpacity)(r,h):r),i.fillStyle=p,i.beginPath(),i.arc(g,A,l||8,0,2*Math.PI,!1),i.fill()}}function H({closestSpacing:e,bounds:t,sizing:n,axisSeriesCount:i}){const r=e/(t.maxX-t.minX)*n.renderWidth,o=.8*r;return{barWidth:o/i,totalBarWidth:o,barSpacing:.2*r}}function V(e,t){if(!t||e.length<=1)return e;const n=[];let i=-1/0;for(const r of e){const[e]=r;e-i>=t&&(n.push(r),i=e)}return n}var j=l(390),K=l.n(j),Z=l(39),J=l.n(Z),Q=l(120),ee=l.n(Q),te=l(789),ne=l.n(te);let ie;const re=l.e(744).then(l.bind(l,363)).then(e=>e.default().then(()=>{ie=e}));function oe(){return ie}function ae(e,{dashed:t,dashPattern:n}){let i=0;for(let r of e)if(t)for(let e=0;e<r.length;e++)t&&e%(n[0]+n[1])>=n[0]||i++;else i+=r.length;const r=new Float32Array(8*i),o=new Float32Array(8*i),a=new Float32Array(4*i),s=new Uint32Array(6*i);if(i>0){const e=new Float32Array([0,1,2,3]);a.set(e);let t=e.length,n=e.length;for(;t<a.length;)t+n>a.length&&(n=a.length-t),a.copyWithin(t,0,n),t+=n,n<<=1}let l=0;for(let i of e)for(let e=0;e<i.length;e++){if(t&&e%(n[0]+n[1])>=n[0])continue;const[a,h]=i[e];let c,g;0===e?(c=a-1,g=h):[c,g]=i[e-1];for(let e=0;e<4;e++)r[8*l+2*e]=a,r[8*l+2*e+1]=h,o[8*l+2*e]=c,o[8*l+2*e+1]=g;s[6*l]=4*l,s[6*l+1]=4*l+1,s[6*l+2]=4*l+3,s[6*l+3]=4*l,s[6*l+4]=4*l+2,s[6*l+5]=4*l+3,l++}return{positions:r,prevPositions:o,vertices:a,indices:s}}class se{constructor(e){this._gl=e,this._program=M(e,J(),K()),this._circleProgram=M(e,ne(),ee()),this._positionBuffer=e.createBuffer(),this._prevPositionBuffer=e.createBuffer(),this._vertexBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),this._individualPointBuffer=e.createBuffer(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}dispose(){}clear(){const e=this._gl,t=e.drawingBufferWidth,n=e.drawingBufferHeight;e.clearColor(0,0,0,0),e.viewport(0,0,t,n)}draw(e,t){const n=this._gl,i=n.drawingBufferWidth,r=n.drawingBufferHeight;n.useProgram(this._program);const o=2*((t.width||1)+(t.highlighted?2:0)),a=void 0===t.shadowBlur?2:t.shadowBlur,s=t.shadowColor||"black",l=t.dashed||!1,h=t.dashPattern||[5,5];if(t.renderCutoffGradient&&void 0!==t.cutoffIndex&&t.originalData)return void this.drawLineWithCutoff(e,t);const{positions:c,prevPositions:g,vertices:A,indices:d}=function(e,{dashed:t,dashPattern:n}){if(e&&e.paths)return ae(e.paths,{dashed:t,dashPattern:n});if(!oe())return ae(O(e),{dashed:t,dashPattern:n});const i=oe().get_point_number(e.nullMask,e.yValues,e.minYValues,e.maxYValues,t,n[0],n[1]);let r=new Float32Array(8*i),o=new Float32Array(8*i),a=new Float32Array(4*i),s=new Uint32Array(6*i);return oe().extract_vertices(2,e.nullMask,e.yValues,e.minYValues,e.maxYValues,r,o,a,s,t,n[0],n[1]),{positions:r,prevPositions:o,vertices:a,indices:s}}(e,{dashed:l,dashPattern:h});if(!this._program)return void console.error("WebGL line program is null - shader compilation failed!");const p=n.getAttribLocation(this._program,"position"),u=n.getAttribLocation(this._program,"prevPosition"),m=n.getAttribLocation(this._program,"vertex");n.enableVertexAttribArray(p),n.bindBuffer(n.ARRAY_BUFFER,this._positionBuffer),n.bufferData(n.ARRAY_BUFFER,c,n.STATIC_DRAW),n.vertexAttribPointer(p,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(u),n.bindBuffer(n.ARRAY_BUFFER,this._prevPositionBuffer),n.bufferData(n.ARRAY_BUFFER,g,n.STATIC_DRAW),n.vertexAttribPointer(u,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(m),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.bufferData(n.ARRAY_BUFFER,A,n.STATIC_DRAW),n.vertexAttribPointer(m,1,n.FLOAT,!1,0,0),n.uniform1f(n.getUniformLocation(this._program,"width"),i),n.uniform1f(n.getUniformLocation(this._program,"height"),r),n.uniform1f(n.getUniformLocation(this._program,"thickness"),Math.max(o,1)+a),n.uniform1f(n.getUniformLocation(this._program,"shadowBlur"),a);const f=P(t.color);n.uniform4f(n.getUniformLocation(this._program,"color"),...f),n.uniform4f(n.getUniformLocation(this._program,"shadowColor"),...P(s));const C=void 0!==t.cutoffX?t.cutoffX:-1,x=void 0!==t.cutoffOpacity?t.cutoffOpacity:.35;if(n.uniform1f(n.getUniformLocation(this._program,"cutoffX"),C),n.uniform1f(n.getUniformLocation(this._program,"cutoffOpacity"),x),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,d,n.STATIC_DRAW),n.drawElements(n.TRIANGLES,d.length,n.UNSIGNED_INT,0),t.showIndividualPoints){n.useProgram(this._circleProgram),n.uniform1f(n.getUniformLocation(this._circleProgram,"width"),i),n.uniform1f(n.getUniformLocation(this._circleProgram,"height"),r);const e=t.pointRadius?2*t.pointRadius*2:2*(o+6);n.uniform1f(n.getUniformLocation(this._circleProgram,"pointSize"),e);let a=t.getIndividualPoints();if(t.minPointSpacing&&a.length>1){const e=[];let n=-1/0;for(const i of a){const[r]=i;r-n>=t.minPointSpacing&&(e.push(i),n=r)}a=e}if(void 0!==t.cutoffIndex&&t.cutoffIndex>0&&t.originalData){const{originalData:e}=t;let r;if("object"==typeof e[0]&&2===e[0].length){const n=Math.floor(t.cutoffIndex),i=t.cutoffIndex-n;if(0===i||n>=e.length-1){const t=e[Math.min(n,e.length-1)][0];r=t instanceof Date?t.getTime():t}else{const t=e[n][0],o=e[n+1][0],a=t instanceof Date?t.getTime():t;r=a+i*((o instanceof Date?o.getTime():o)-a)}}const o=[],s=[];if(t.isPreview){const e=t.selectionBounds.minX instanceof Date?t.selectionBounds.minX.getTime():t.selectionBounds.minX,n=(r-e)/((t.selectionBounds.maxX instanceof Date?t.selectionBounds.maxX.getTime():t.selectionBounds.maxX)-e)*i;for(let e=0;e<a.length;e++){const[t,i]=a[e];t<n?o.push(a[e]):s.push(a[e])}}else if(t.selectionBounds){const e=t.selectionBounds.minX instanceof Date?t.selectionBounds.minX.getTime():t.selectionBounds.minX,n=t.selectionBounds.maxX instanceof Date?t.selectionBounds.maxX.getTime():t.selectionBounds.maxX;if(r<e)s.push(...a);else if(r>n)"shadow"===t.rendering?s.push(...a):o.push(...a);else{const t=(r-e)/(n-e)*this._gl.canvas.width;a.forEach((e,n)=>{const[i,r]=e;i<t?o.push(e):s.push(e)})}}else s.push(...a);if(o.length>0){const e=(0,D.applyReducedOpacity)(t.color,t.cutoffOpacity||.35);n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(e)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(o.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,o.length)}s.length>0&&(n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(t.color)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(s.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,s.length))}else n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(t.color)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(a.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,a.length)}}drawLineWithCutoff(e,t){const{cutoffIndex:n,cutoffTimeValue:i,cutoffOpacity:r,originalData:o,selectionBounds:a}=t;let s;if(null!=i)s=i;else if("object"==typeof o[0]&&2===o[0].length){const e=Math.floor(n),t=n-e;if(0===t||e>=o.length-1){const t=o[Math.min(e,o.length-1)][0];s=t instanceof Date?t.getTime():t}else{const n=o[e][0],i=o[e+1][0],r=n instanceof Date?n.getTime():n;s=r+t*((i instanceof Date?i.getTime():i)-r)}}else s=n;if(t.isPreview){const n=this._gl,i=a.minX instanceof Date?a.minX.getTime():a.minX,o=(s-i)/((a.maxX instanceof Date?a.maxX.getTime():a.maxX)-i);if(o<0)this.draw(e,{...t,renderCutoffGradient:!1});else if(o>1){const n=(0,D.applyReducedOpacity)(t.color,r);this.draw(e,{...t,color:n,renderCutoffGradient:!1})}else n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),this.draw(e,{...t,renderCutoffGradient:!1,cutoffX:o,cutoffOpacity:r||.35})}else{if(!a)return void this.draw(e,{...t,renderCutoffGradient:!1});const n=a.minX instanceof Date?a.minX.getTime():a.minX,i=a.maxX instanceof Date?a.maxX.getTime():a.maxX;if(s<n)this.draw(e,{...t,renderCutoffGradient:!1});else if(s>i){const n=(0,D.applyReducedOpacity)(t.color,r);this.draw(e,{...t,color:n,renderCutoffGradient:!1})}else{const o=(s-n)/(i-n),a=this._gl;a.enable(a.BLEND),a.blendFunc(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA),this.draw(e,{...t,renderCutoffGradient:!1,cutoffX:o,cutoffOpacity:r||.35})}}}}var le=l(744),he=l.n(le),ce=l(885),ge=l.n(ce);class Ae{constructor(e){if(this._gl=e,this._program=M(e,ge(),he()),!this._program)return console.error("Failed to create shadow shader program"),void(this._program=null);e.validateProgram(this._program),e.getProgramParameter(this._program,e.VALIDATE_STATUS)||console.error("Shadow program validation failed:",e.getProgramInfoLog(this._program));const t=e.getAttribLocation(this._program,"position"),n=e.getAttribLocation(this._program,"trapezoidBounds"),i=e.getAttribLocation(this._program,"trapezoidBottom");-1!==t&&-1!==n&&-1!==i||console.error("Missing required shader attributes"),this._positionBuffer=e.createBuffer(),this._trapezoidBoundsBuffer=e.createBuffer(),this._trapezoidBottomBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),this._gradientTexture=e.createTexture(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}dispose(){const e=this._gl;this._gradientTexture&&(e.deleteTexture(this._gradientTexture),this._gradientTexture=null)}generateTrapezoidGeometry(e){const t=[],n=[],i=[],r=[];let o=0;for(const a of e){const{x1:e,y1:s,x2:l,y2:h,bottomY1:c,bottomY2:g}=a,A=[[e,s],[l,h],[l,g],[e,c]],d=[e,s,l,h],p=[e,c,l,g];for(let e=0;e<4;e++){const[r,o]=A[e];t.push(r,o),n.push(...d),i.push(...p)}r.push(o,o+1,o+2,o,o+2,o+3),o+=4}return{positions:new Float32Array(t),trapezoidBounds:new Float32Array(n),trapezoidBottom:new Float32Array(i),indices:new Uint32Array(r)}}parseGradient(e,t){if(!e||!Array.isArray(e)||e.length<2){const e=P(t);return{textureData:new Uint8Array([0,0,0,255,Math.floor(255*e[0]),Math.floor(255*e[1]),Math.floor(255*e[2]),Math.floor(255*e[3])]),textureWidth:2,gradientCount:1,fallbackColor:e}}const n=[],i=[];for(let t=0;t<e.length;t++){const r=e[t];Array.isArray(r)?(i.push(r[0]),n.push(P(r[1]))):(i.push(t/(e.length-1)),n.push(P(r)))}const r=2*n.length,o=new Uint8Array(4*r);for(let e=0;e<n.length;e++){const t=8*e,r=t+4;o[t]=Math.floor(255*i[e]),o[t+1]=0,o[t+2]=0,o[t+3]=255,o[r]=Math.floor(255*n[e][0]),o[r+1]=Math.floor(255*n[e][1]),o[r+2]=Math.floor(255*n[e][2]),o[r+3]=Math.floor(255*n[e][3])}return{textureData:o,textureWidth:r,gradientCount:n.length,fallbackColor:P(t)}}draw(e,t){if(!e||e.length<2)return;const n=this._gl,i=n.drawingBufferWidth,r=n.drawingBufferHeight;if(n.useProgram(this._program),t.renderCutoffGradient&&void 0!==t.cutoffIndex&&t.originalData)return void this.drawShadowWithCutoff(e,t);const o=[],a=[],s=[],{zero:l,inRenderSpaceAreaBottom:h,negativeGradient:c,hasNegatives:g}=t;for(let t=0;t<e.length-1;t++){const[n,r]=e[t],[h,A]=e[t+1];let d=l,p=l;const u=r-l,m=A-l;if(u*m<0){const e=n+(h-n)*(Math.abs(u)/(Math.abs(u)+Math.abs(m))),t=l;if(Math.abs(r-t)>.1){const i={x1:n,y1:r,x2:e,y2:t,bottomY1:d,bottomY2:l};o.push(i),g&&c&&(r<=l?a.push(i):s.push(i))}if(Math.abs(A-t)>.1){const n={x1:e,y1:t,x2:h,y2:A,bottomY1:l,bottomY2:p};o.push(n),g&&c&&(A<=l?a.push(n):s.push(n))}}else{if(n>i||h<0)continue;let e=h,t=A,u=p;if(h>i){const o=(i-n)/(h-n);e=i,t=r+(A-r)*o,u=d+(p-d)*o}const m={x1:n,y1:r,x2:e,y2:t,bottomY1:d,bottomY2:u};o.push(m),g&&c&&((r+t)/2<=l?a.push(m):s.push(m))}}if(0===o.length)return;const A=n.getAttribLocation(this._program,"position"),d=n.getAttribLocation(this._program,"trapezoidBounds"),p=n.getAttribLocation(this._program,"trapezoidBottom");n.uniform1f(n.getUniformLocation(this._program,"width"),i),n.uniform1f(n.getUniformLocation(this._program,"height"),r),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);const u=(e,t,i)=>{if(0===e.length)return;const r=this.generateTrapezoidGeometry(e);n.enableVertexAttribArray(A),n.bindBuffer(n.ARRAY_BUFFER,this._positionBuffer),n.bufferData(n.ARRAY_BUFFER,r.positions,n.STATIC_DRAW),n.vertexAttribPointer(A,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(d),n.bindBuffer(n.ARRAY_BUFFER,this._trapezoidBoundsBuffer),n.bufferData(n.ARRAY_BUFFER,r.trapezoidBounds,n.STATIC_DRAW),n.vertexAttribPointer(d,4,n.FLOAT,!1,0,0),n.enableVertexAttribArray(p),n.bindBuffer(n.ARRAY_BUFFER,this._trapezoidBottomBuffer),n.bufferData(n.ARRAY_BUFFER,r.trapezoidBottom,n.STATIC_DRAW),n.vertexAttribPointer(p,4,n.FLOAT,!1,0,0);const o=this.parseGradient(t,i);n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,this._gradientTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.textureWidth,1,0,n.RGBA,n.UNSIGNED_BYTE,o.textureData),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.uniform1i(n.getUniformLocation(this._program,"gradientTexture"),0),n.uniform1i(n.getUniformLocation(this._program,"gradientCount"),o.gradientCount),n.uniform4fv(n.getUniformLocation(this._program,"fallbackColor"),o.fallbackColor),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,r.indices,n.STATIC_DRAW),n.drawElements(n.TRIANGLES,r.indices.length,n.UNSIGNED_INT,0)};g&&c&&(a.length>0||s.length>0)?(u(a,t.gradient,t.color),u(s,c,t.color)):u(o,t.gradient,t.color);const m=n.getError();m!==n.NO_ERROR&&console.error("WebGL error in shadow rendering:",m)}drawShadowWithCutoff(e,t){const{cutoffIndex:n,cutoffTimeValue:i,cutoffOpacity:r,originalData:o,selectionBounds:a,zero:s}=t;let l;if(this._lastIndividualPoints=null,this._lastParams=null,null!=i)l=i;else if(Array.isArray(o[0])&&2===o[0].length){const e=Math.floor(n),t=n-e;if(0===t||e>=o.length-1){const t=o[Math.min(e,o.length-1)][0];l=t instanceof Date?t.getTime():t}else{const n=o[e],i=o[e+1],r=n[0],a=i[0],s=r instanceof Date?r.getTime():r;l=s+t*((a instanceof Date?a.getTime():a)-s)}}else l=n;const h=t.selectionBounds;let c,g;if(h&&void 0!==h.minX&&void 0!==h.maxX)c=h.minX instanceof Date?h.minX.getTime():h.minX,g=h.maxX instanceof Date?h.maxX.getTime():h.maxX;else{const e=o[0],t=o[o.length-1],n=e[0],i=t[0];c=n instanceof Date?n.getTime():n,g=i instanceof Date?i.getTime():i}const A=(l-c)/(g-c);if(A<0)this.draw(e,{...t,renderCutoffGradient:!1});else if(A>1){const n=(0,D.applyReducedOpacity)(t.color,r),i=(0,D.applyReducedOpacityToGradient)(t.gradient,r);this.draw(e,{...t,color:n,gradient:i,renderCutoffGradient:!1})}else this.drawSplitShadowTrapezoids(e,{...t,selectionBounds:t.selectionBounds},A,l)}drawSplitShadowTrapezoids(e,t,n,i){const{zero:r,cutoffOpacity:o,selectionBounds:a}=t,s=n*this._gl.canvas.width,l=[],h=[];for(let t=0;t<e.length;t++){const[n,i]=e[t];n<s?l.push(e[t]):h.push(e[t])}let c=null;if(l.length>0&&h.length>0){const e=l[l.length-1],t=h[0],[n,i]=e,[r,o]=t;r!==n&&(c=[s,i+(s-n)/(r-n)*(o-i)],l.push(c),h.unshift(c))}if(l.length>=2){const e=(0,D.applyReducedOpacity)(t.color,o),n=this._gl;n.disable(n.DEPTH_TEST),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);const i=(0,D.applyReducedOpacityToGradient)(t.gradient,o);this.draw(l,{...t,color:e,gradient:i,renderCutoffGradient:!1})}h.length>=2&&this.draw(h,{...t,renderCutoffGradient:!1})}}class de extends S{constructor({stateController:e,canvasElement:t,webgl:n=!1,checkIntersection:i=!0}){return super(),this._stateController=e,this._checkIntersection=i,this._canvas=t,this._webgl=n,this._canvas?(n&&(this._context=this._canvas.getContext("webgl"),this._context?(this._lineProgram=new se(this._context),this._shadowProgram=new Ae(this._context)):(console.error("❌ WebGL context creation failed"),alert("WebGL failed! Attempting fallback to CPU rendering"),this._webgl=!1)),this._webgl||(this._context=this._canvas.getContext("2d"),this._context2d=this._context),this._context?(this._initialized=this._initializeCanvas(),this._boundResize=this.resize.bind(this),this._cachedAxisCount=null,this._onAxisChange=e=>{const t=e.filter(({series:e})=>e.length>0).length;this._cachedAxisCount!==t&&(this._cachedAxisCount=t,this.resize())},e.on("axes_changed",this._onAxisChange),e.on("dragging_y_changed",this._boundResize),void e.on("showing_sidebar_changed",this._boundResize)):(console.error("Failed to get canvas context in GraphBodyRenderer"),void(this._initialized=!1))):(console.error("Canvas element is null in GraphBodyRenderer constructor"),void(this._initialized=!1))}dispose(){this.clearListeners(),this._lineProgram&&this._lineProgram.dispose(),this._shadowProgram&&this._shadowProgram.dispose(),this._cachedAxisCount=null,this._stateController.off("axes_changed",this._onAxisChange),this._stateController.off("dragging_y_changed",this._boundResize),this._resizeObserver&&this._resizeObserver.disconnect(),this._intersectionObserver&&this._intersectionObserver.disconnect(),this._zeroLineCanvas&&this._zeroLineCanvas.parentNode&&(this._zeroLineCanvas.parentNode.removeChild(this._zeroLineCanvas),this._zeroLineCanvas=null,this._zeroLineContext=null)}clear(){this._webgl?(this._lineProgram.clear(),this._overlayContext&&this._overlayContext.clearRect(0,0,this._overlayCanvas.width,this._overlayCanvas.height),this._overlayCanvasInitialized=!1):this._context.clearRect(0,0,this._context.canvas.width,this._context.canvas.height)}render(e,t,{highlighted:n,showIndividualPoints:i,shadowColor:r,shadowBlur:o,width:a,defaultLineWidth:s,bounds:h,globalBounds:c,inRenderSpaceAreaBottom:g}){if(!this._initialized||!this._context||!this._canvas)return void console.warn("GraphBodyRenderer: Cannot render - not initialized, missing context, or missing canvas");let A=-1,d=null,p=e.data;if(e.data&&e.data.length>0&&"object"==typeof e.data[0]&&!Array.isArray(e.data[0])&&e.cutoffTime&&(p=e.data.map(t=>{const n=t[e.xKey||"x"],i=t[e.yKey||"y"];return["string"==typeof n?new Date(n):n,i]})),e.cutoffTime&&e.data&&e.data.length>0){let t;t="now"===e.cutoffTime?new Date:"number"==typeof e.cutoffTime?new Date(e.cutoffTime):e.cutoffTime,d=t instanceof Date?t.getTime():t;for(let e=0;e<p.length-1;e++){const t=p[e],n=p[e+1],i=t[0]instanceof Date?t[0].getTime():t[0],r=n[0]instanceof Date?n[0].getTime():n[0];if(i<=d&&d<=r){A=e+(d-i)/(r-i);break}if(i>d){A=e;break}}-1===A&&(A=p.length-1)}const u=(n,r=!1)=>{if(!n&&t&&t.yValues&&!i){h||(h=e.axis.currentBounds);const n=[],{yValues:i,nullMask:o}=t,a=i.length/2;let s=0;const l=[];for(let e=0;e<i.length;e++)if(0===o[e]){const t=2*e;n.push([t,i[e]]),e>a&&(s++,l.length<3&&l.push({pixelX:e,xCoord:t,nullMask:o[e]}))}return n.length<50?u(!0,r):n}h||(h=e.axis.currentBounds);const o=[];let a=e.inSelectedSpace.data;n&&(a=e.inDataSpace);let s=h.minX instanceof Date?h.minX.getTime():h.minX,l=h.maxX instanceof Date?h.maxX.getTime():h.maxX,c=!1,g=null;for(let t=0;t<a.length;t++){let n,i;if(Array.isArray(a[t]))[n,i]=a[t];else{if("object"!=typeof a[t]||null===a[t])continue;n=a[t][e.xKey],i=a[t][e.yKey]}if(null==i)continue;let A=n instanceof Date?n.getTime():n;if(A<s){r&&(g=[A,i]);continue}if(A>l){if(!r||c)break;c=!0}const d=(A-s)/(l-s)*(this._sizing.renderWidth/2-1)*2,p=(1-(i-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;o.push([d,p])}if(g&&r){const[e,t]=g,n=(e-s)/(l-s)*(this._sizing.renderWidth/2-1)*2,i=(1-(t-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;o.unshift([n,i])}return o};let m;if("bar"===e.rendering||"area"===e.rendering){if(this._webgl)return void console.warn(`CPU rendering (${e.rendering}) is not supported with webgl={true}. Use webgl={false} or switch to 'line' rendering.`);if(this._context2d||(this._context2d=this._canvas.getContext("2d",{willReadFrequently:!1})),!this._context2d)return void console.error("Failed to get 2D context for CPU rendering");if(this._webgl&&this._context.flush(),h||(h=e.axis?.currentBounds),!h)return void console.error("No bounds available for rendering");const t="bottom"===e.zeroLineY?this._sizing.renderHeight:(1-((e.zeroLineY||0)-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;m={context:this._context2d,color:(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),sizing:this._sizing,zero:t,hasNegatives:!!e.inDataSpace.find(e=>e[1]<0),negativeColor:e.negativeColor,zeroWidth:e.zeroLineWidth,zeroColor:e.zeroLineColor},!m.hasNegatives&&e.expandYWith&&(m.hasNegatives=e.expandYWith.some(e=>e<0))}if("bar"===e.rendering){const t=e.axis.series.filter(e=>"bar"===e.rendering);let n=null;for(const e of t){const t=e.dataBounds?.closestSpacing;null!=t&&t>0&&(null===n||t>n)&&(n=t)}let i={...m,indexInAxis:t.indexOf(e),axisSeriesCount:t.length,closestSpacing:n||c.closestSpacing,bounds:h};if(e.cutoffTime){i.cutoffIndex=A,i.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,i.originalData=p,i.renderCutoffGradient=A>=0;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;i.selectionBounds=t}return void function(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,renderCutoffGradient:m,selectionBounds:f}){if(!n)return void console.error("Canvas context is null in drawBars");n.strokeStyle=t,n.fillStyle=t;const{barWidth:C,totalBarWidth:x}=H({closestSpacing:g,bounds:A,sizing:i,axisSeriesCount:o}),b=s?a:i.renderHeight;if(m&&void 0!==d&&u)!function(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,selectionBounds:m,barWidth:f,totalBarWidth:C,barBottom:x}){let b;if("object"==typeof u[0]&&2===u[0].length){const e=Math.floor(d),t=d-e;if(0===t||e>=u.length-1){const t=u[Math.min(e,u.length-1)][0];b=t instanceof Date?t.getTime():t}else{const n=u[e][0],i=u[e+1][0],r=n instanceof Date?n.getTime():n;b=r+t*((i instanceof Date?i.getTime():i)-r)}}else b=d;for(let i=0;i<e.length;i++){const[o,h]=e[i];let c=t,g=!1;if(i<u.length){const e=u[i];g=(e[0]instanceof Date?e[0].getTime():e[0])<b,g&&(c=(0,D.applyReducedOpacity)(t,p))}if(s)if(h<=a)n.fillStyle=c;else{const e=g?(0,D.applyReducedOpacity)(l,p):l;n.fillStyle=e}else n.fillStyle=c;n.fillRect(o-C/2+f*r,h,f,x-h)}c&&I(x,{context:n,sizing:i,color:t,zero:a,zeroColor:h,zeroWidth:c})}(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,selectionBounds:f,barWidth:C,totalBarWidth:x,barBottom:b});else{for(let i=0;i<e.length;i++){const[o,h]=e[i];s&&(n.fillStyle=h<=a?t:l),n.fillRect(o-x/2+C*r,h,C,b-h)}c&&I(b,{context:n,sizing:i,color:t,zero:a,zeroColor:h,zeroWidth:c})}}(u(!0),i)}if("area"===e.rendering){let l={...m,showIndividualPoints:"boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:i,gradient:e.gradient,negativeGradient:e.negativeGradient,pointRadius:e.pointRadius,minPointSpacing:e.minPointSpacing,highlighted:n,width:a||e.width||s,shadowColor:r,shadowBlur:o,inRenderSpaceAreaBottom:g};if(e.cutoffTime){l.cutoffIndex=A,l.cutoffTimeValue=d,l.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,l.originalData=p,l.renderCutoffGradient=A>=0,l.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;l.selectionBounds=t}!function(e,t,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s,negativeGradient:l,zeroColor:h,zeroWidth:c,showIndividualPoints:g,negativeColor:A,pointRadius:d,minPointSpacing:p,width:u,highlighted:m,shadowColor:f="black",shadowBlur:C=5,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,renderCutoffGradient:B,selectionBounds:v,isPreview:w}){if(!i)return void console.error("Canvas context is null in drawArea");if(i.fillStyle=n,i.shadowColor=f,i.shadowBlur=C,s&&s.length>=2){const R=i.createLinearGradient(0,0,0,r.renderHeight);for(let X=0;X<s.length;X++){const Y=s[X];Array.isArray(Y)?R.addColorStop(Y[0],Y[1]):R.addColorStop(X/(s.length-1),Y)}i.fillStyle=R,"gradient"===n&&(i.strokeStyle=R)}else i.fillStyle=n;if(!e.length)return;const E=a?o:r.renderHeight,k=a&&l,S=O(t,k?{splitAtY:o}:void 0),T=x&&O(x,k?{splitAtY:o}:void 0),z=O(t,{splitAtY:o});if(B&&void 0!==b&&_)!function(e,t,n,i,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,showIndividualPoints:A,negativeColor:d,pointRadius:p,width:u,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,selectionBounds:B,isPreview:v}){let w,E,k;if("object"==typeof _[0]&&2===_[0].length){const e=Math.floor(b),t=b-e;if(0===t||e>=_.length-1){const t=_[Math.min(e,_.length-1)][0];w=t instanceof Date?t.getTime():t}else{const n=_[e][0],i=_[e+1][0],r=n instanceof Date?n.getTime():n;w=r+t*((i instanceof Date?i.getTime():i)-r)}}else w=b;v&&B?(E=B.minX instanceof Date?B.minX.getTime():B.minX,k=B.maxX instanceof Date?B.maxX.getTime():B.maxX):(E=_[0][0]instanceof Date?_[0][0].getTime():_[0][0],k=_[_.length-1][0]instanceof Date?_[_.length-1][0].getTime():_[_.length-1][0]);const S=(w-E)/(k-E);if(S<0)for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});else if(S>1){const e=h?(0,D.applyReducedOpacityToGradient)(h,y):null;for(let i=0;i<t.length;i++)$(t[i],n&&n[i],{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:e,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}else{if(v){for(let e=0;e<t.length;e++){const i=t[e],A=n&&n[e];if(!i.length)continue;const d=S*i.length,p=Math.floor(d),u=d-p;let b=null;if(p<i.length-1&&u>0){const[e,t]=i[p],[n,r]=i[p+1];b=[e+u*(n-e),t+u*(r-t)]}if(p>0||0===p&&u>0){const e=i.slice(0,p+1);b&&p<i.length-1&&e.push(b);const t=A?A.slice(0,p+1):null;if(b&&t&&p<A.length-1){const e=[b[0],s];t.push(e)}const n=h?(0,D.applyReducedOpacityToGradient)(h,y):null;$(e,t,{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:n,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}if(p<i.length-1||p===i.length-1&&0===u){const e=[];b&&p<i.length-1&&e.push(b),e.push(...i.slice(p+1));const t=[];if(b&&A&&p<A.length-1){const e=[b[0],s];t.push(e)}A&&t.push(...A.slice(p+1)),$(e,t.length?t:null,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}}i&&i.length>0&&U(i,S,{color:r,context:o,hasNegatives:l,negativeColor:d,zero:s,width:u,highlighted:m,cutoffOpacity:y}),A&&e&&e.length>0&&q(e,S,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p,cutoffOpacity:y})}else if(B){const e=B.minX instanceof Date?B.minX.getTime():B.minX,i=B.maxX instanceof Date?B.maxX.getTime():B.maxX;if(w<e)for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});else if(w>i){const e=h?(0,D.applyReducedOpacityToGradient)(h,y):null;for(let i=0;i<t.length;i++)$(t[i],n&&n[i],{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:e,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}else{const c=(w-e)/(i-e);for(let e=0;e<t.length;e++){const i=t[e],g=n&&n[e];if(!i.length)continue;const A=c*i.length,d=Math.floor(A),p=A-d;let u=null;if(d<i.length-1&&p>0){const[e,t]=i[d],[n,r]=i[d+1];u=[e+p*(n-e),t+p*(r-t)]}(d>0||0===d&&p>0)&&G(i,g,d,u,!0,{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,areaBottomPaths:n}),d<i.length-1&&G(i,g,d,u,!1,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,areaBottomPaths:n})}}}else for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});if(S>=0&&S<=1&&!v)if(B){const e=B.minX instanceof Date?B.minX.getTime():B.minX,t=B.maxX instanceof Date?B.maxX.getTime():B.maxX;w<e?N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m}):w>t?N(i,{color:(0,D.applyReducedOpacity)(r,y),context:o,hasNegatives:l,negativeColor:d?(0,D.applyReducedOpacity)(d,y):d,width:u,highlighted:m}):U(i,(w-e)/(t-e),{color:r,context:o,hasNegatives:l,negativeColor:d,zero:s,width:u,highlighted:m,cutoffOpacity:y})}else N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m});else v||N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m});if(g&&I(l?s:a.renderHeight,{context:o,sizing:a,color:r,zero:s,zeroColor:c,zeroWidth:g}),A&&!v)if(S>=0&&S<=1)if(B){const t=B.minX instanceof Date?B.minX.getTime():B.minX,n=B.maxX instanceof Date?B.maxX.getTime():B.maxX;w<t?W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p}):w>n?W(e,{color:(0,D.applyReducedOpacity)(r,y),context:o,negativeColor:d?(0,D.applyReducedOpacity)(d,y):d,hasNegatives:l,zero:s,zeroColor:c?(0,D.applyReducedOpacity)(c,y):c,pointRadius:p}):q(e,(w-t)/(n-t),{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p,cutoffOpacity:y})}else W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p});else W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p})}}(e,S,T,z,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s,zeroColor:h,zeroWidth:c,showIndividualPoints:g,negativeColor:A,pointRadius:d,width:u,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,selectionBounds:v,isPreview:w});else{for(let P=0;P<S.length;P++){const M=S[P],F=T&&T[P];i.beginPath();const[L,H]=M[0],[V,j]=M[M.length-1];T||i.moveTo(L,E);for(let K=0;K<M.length;K++){const[Z,J]=M[K];i.lineTo(Z,J)}if(F&&F.length){for(let Q=F.length-1;Q>=0;Q--){const[ee,te]=F[Q];i.lineTo(ee,te)}i.lineTo(...M[0])}else i.lineTo(V,E);i.fill()}m&&(u+=2),u*=2,i.strokeStyle=n,i.lineWidth=u;for(let ne of z)if(ne.length){if(a&&A){let ie=!0;ie=ne.length>=2?ne[1][1]<=o:ne[0][1]<=o,i.strokeStyle=ie?n:A}else i.strokeStyle=n;i.beginPath();for(let re=0;re<ne.length;re++){const[oe,ae]=ne[re];0===re?i.moveTo(oe,ae):i.lineTo(oe,ae)}i.stroke()}if(c&&I(E,{context:i,sizing:r,color:n,zero:o,zeroColor:h,zeroWidth:c}),g&&!B){function se(e,t){if(!t||e.length<=1)return e;const n=[];let i=-1/0;for(const r of e){const[e]=r;e-i>=t&&(n.push(r),i=e)}return n}const le=se(e,p);for(let[he,ce]of le){let ge=n;A&&a&&(ge=ce===o&&h?h:ce<o?n:A),i.fillStyle=ge,i.beginPath(),i.arc(he,ce,d||8,0,2*Math.PI,!1),i.fill()}}}}(u(!0),t,l)}if("shadow"===e.rendering){if(!this._webgl||!this._shadowProgram)return void console.warn("Shadow rendering requires WebGL. Enable webgl={true} on your Grapher component.",{webgl:!!this._webgl,shadowProgram:!!this._shadowProgram,program:!!this._shadowProgram?._program});if(!this._shadowProgram._program)return void console.error("ShadowProgram has no valid WebGL program");if(!t)return void console.error("inRenderSpace is null for shadow rendering");if(h||(h=e.axis?.currentBounds),!h)return void console.error("No bounds available for shadow rendering");let n;n="bottom"===e.zeroLineY?this._sizing.renderHeight:void 0!==e.zeroLineY?(1-(e.zeroLineY-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:h.minY<=0&&h.maxY>=0?(1-(0-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:this._sizing.renderHeight;const i=!this._lastBounds||h.minY!==this._lastBounds.minY||h.maxY!==this._lastBounds.maxY||this._sizing.renderHeight!==this._lastRenderHeight;this._lastBounds={...h},this._lastRenderHeight=this._sizing.renderHeight,i&&this._lastShadowCache&&(this._lastShadowCache=null),n>1.5*this._sizing.renderHeight?n=this._sizing.renderHeight:n<.5*-this._sizing.renderHeight&&(n=0);const r=(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),o=!!e.inDataSpace.find(e=>e[1]<0);let a={color:r,gradient:e.gradient||(0,D.createDefaultGradient)(r),negativeGradient:e.negativeGradient,hasNegatives:o,zero:n,sizing:this._sizing,inRenderSpaceAreaBottom:g};if(e.cutoffTime){a.cutoffIndex=A,a.cutoffTimeValue=d,a.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,a.originalData=p,a.renderCutoffGradient=A>=0,a.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;a.selectionBounds=t||h}if(this._shadowProgram.draw(u(!1,!0),a),this._webgl){const e=this._context;e.disable(e.BLEND),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)}e.zeroLineWidth&&e.zeroLineWidth>0&&(this._context2d?(this._context2d.save(),this._context2d.strokeStyle=e.zeroLineColor||(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),this._context2d.lineWidth=e.zeroLineWidth,this._context2d.globalCompositeOperation="source-over",this._context2d.beginPath(),this._context2d.moveTo(0,n),this._context2d.lineTo(this._sizing.renderWidth,n),this._context2d.stroke(),this._context2d.restore()):(this._zeroLineCanvas||(this._zeroLineCanvas=document.createElement("canvas"),this._zeroLineCanvas.style.position="absolute",this._zeroLineCanvas.style.top="0",this._zeroLineCanvas.style.left="0",this._zeroLineCanvas.style.pointerEvents="none",this._zeroLineContext=this._zeroLineCanvas.getContext("2d"),this._canvas.parentNode.insertBefore(this._zeroLineCanvas,this._canvas.nextSibling)),this._zeroLineCanvas.width=this._canvas.width,this._zeroLineCanvas.height=this._canvas.height,this._zeroLineCanvas.style.width=this._canvas.style.width,this._zeroLineCanvas.style.height=this._canvas.style.height,this._zeroLineContext.clearRect(0,0,this._zeroLineCanvas.width,this._zeroLineCanvas.height),this._zeroLineContext.strokeStyle=e.zeroLineColor||(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),this._zeroLineContext.lineWidth=e.zeroLineWidth,this._zeroLineContext.beginPath(),this._zeroLineContext.moveTo(0,n),this._zeroLineContext.lineTo(this._sizing.renderWidth,n),this._zeroLineContext.stroke()))}const f=!(this===this._stateController.rangeGraphRenderer)&&("boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:i);let C;h||(h=e.axis?.currentBounds||c),C="bottom"===e.zeroLineY?this._sizing.renderHeight:void 0!==e.zeroLineY&&h?(1-(e.zeroLineY-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:h&&h.minY<=0&&h.maxY>=0?(1-(0-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:this._sizing.renderHeight;const x=!!e.inDataSpace.find(e=>e[1]<0);let b=this._context;if(this._webgl&&"shadow"===e.rendering)this._overlayCanvas||(this._overlayCanvas=document.createElement("canvas"),this._overlayCanvas.style.position="absolute",this._overlayCanvas.style.top="0",this._overlayCanvas.style.left="0",this._overlayCanvas.style.pointerEvents="none",this._overlayContext=this._overlayCanvas.getContext("2d"),this._canvas.parentNode.insertBefore(this._overlayCanvas,this._canvas.nextSibling)),this._overlayCanvasInitialized||(this._overlayCanvas.width=this._canvas.width,this._overlayCanvas.height=this._canvas.height,this._overlayCanvas.style.width=this._canvas.style.width,this._overlayCanvas.style.height=this._canvas.style.height,this._overlayCanvasInitialized=!0),b=this._overlayContext;else if(this._context2d)b=this._context2d;else if(this._webgl){if(console.warn("Creating fallback 2D context for WebGL shadow chart"),!this._fallbackContext){const e=document.createElement("canvas");e.width=this._canvas.width,e.height=this._canvas.height,this._fallbackContext=e.getContext("2d")}b=this._fallbackContext}const y={color:(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),context:b,width:a||e.width||s,shadowColor:r,shadowBlur:o,dashed:e.dashed,dashPattern:e.dashPattern,highlighted:n,showIndividualPoints:f,pointRadius:e.pointRadius,minPointSpacing:e.minPointSpacing,getIndividualPoints:u,getRanges:e.rangeKey?()=>(h||(h=e.axis.currentBounds),e.rangeKey?"objects"!==T(e,{useSimpleData:!0})?[]:(e.simpleData||e.data).map(t=>{const n=t[e.rangeKey];if(!n)return null;const i=n.min,r=n.max,o=t[e.xKey];return{x:o,range:n,pixelX:(o-h.minX)/(h.maxX-h.minX)*this._sizing.renderWidth,pixelMinY:"number"==typeof i?(1-(i-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:null,pixelMaxY:"number"==typeof r?(1-(r-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:null}}):[]):null,rendering:e.rendering,negativeColor:e.negativeColor,hasNegatives:x,zero:C,zeroColor:e.zeroLineColor};if(this._webgl&&"shadow"===e.rendering&&e.cutoffTime&&(a>0||f)){y.cutoffIndex=A,y.cutoffTimeValue=d,y.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,y.originalData=p,y.renderCutoffGradient=A>=0;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;y.selectionBounds=t||h,y.currentBounds=h}if(t){if(e.cutoffTime){y.cutoffIndex=A,y.cutoffTimeValue=d,y.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,y.originalData=p,y.renderCutoffGradient=A>=0,y.currentBounds=h,y.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;y.selectionBounds=t||h}this._webgl&&"shadow"!==e.rendering?this._lineProgram.draw(t,y):function(e,{color:t,width:n=1,context:i,shadowColor:r="black",shadowBlur:o=5,dashed:a=!1,dashPattern:s=null,highlighted:h=!1,showIndividualPoints:c=!1,pointRadius:g,minPointSpacing:A,getIndividualPoints:d,getRanges:p,cutoffIndex:u,cutoffTimeValue:m,cutoffOpacity:f,originalData:C,renderCutoffGradient:x,currentBounds:b,selectionBounds:y,rendering:_,isPreview:B,negativeColor:v,hasNegatives:w,zero:E,zeroColor:k}){if(!i)return void console.error("Canvas context is null in drawLine");if(!i.setLineDash)return void console.error("drawLine called with WebGL context instead of 2D context");h&&(n+=2),n*=2,i.strokeStyle=t,i.lineWidth=n,i.shadowColor=r,i.shadowBlur=o,a?i.setLineDash(s||[5,5]):i.setLineDash([]);const S=O(e,w&&v?{splitAtY:E}:void 0);for(let e of S)if(x&&void 0!==u&&C){let r;if(null!=m)r=m;else if("object"==typeof C[0]&&2===C[0].length){const e=Math.floor(u),t=u-e;if(0===t||e>=C.length-1){const t=C[Math.min(e,C.length-1)][0];r=t instanceof Date?t.getTime():t}else{const n=C[e][0],i=C[e+1][0],o=n instanceof Date?n.getTime():n;r=o+t*((i instanceof Date?i.getTime():i)-o)}}else r=u;if(B){const o=C[0][0]instanceof Date?C[0][0].getTime():C[0][0],a=(r-o)/((C[C.length-1][0]instanceof Date?C[C.length-1][0].getTime():C[C.length-1][0])-o);if(a<0){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else if(a>1){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else{const r=a*(e.length-1),o=Math.floor(r),s=r-o;let l=null;if(o<e.length-1&&s>0){const[t,n]=e[o],[i,r]=e[o+1];l=[t+s*(i-t),n+s*(r-n)]}if(o>0||0===o&&s>0){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<=o;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}l&&i.lineTo(l[0],l[1]),i.stroke()}if(o<e.length-1){i.strokeStyle=t,i.lineWidth=n,i.beginPath(),l?i.moveTo(l[0],l[1]):i.moveTo(e[o+1][0],e[o+1][1]);for(let t=o+1;t<e.length;t++){const[n,r]=e[t];i.lineTo(n,r)}i.stroke()}}}else{if(!y){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke();continue}const o=y.minX instanceof Date?y.minX.getTime():y.minX,a=y.maxX instanceof Date?y.maxX.getTime():y.maxX;if(r<o){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else if(r>a){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke(),i.strokeStyle=t}else{const s=(r-o)/(a-o)*i.canvas.width;let l=-1,h=null;for(let t=0;t<e.length-1;t++){const[n]=e[t],[i]=e[t+1];if(n<=s&&s<=i){const r=(s-n)/(i-n);l=t+r;const[,o]=e[t],[,a]=e[t+1];h=[s,o+r*(a-o)];break}}if(-1===l){const t=C[C.length-1][0];t instanceof Date&&t.getTime(),s>=e[e.length-1][0]?l=e.length-1:s<e[0][0]&&(l=0)}const c=[],g=[];for(let t=0;t<e.length;t++)t<l?c.push(e[t]):g.push(e[t]);if(h&&(c.length>0&&c.push(h),g.length>0&&g.unshift(h)),c.length>1){const e=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=e,i.lineWidth=n,i.beginPath();for(let e=0;e<c.length;e++){const[t,n]=c[e];0===e?i.moveTo(t,n):i.lineTo(t,n)}i.stroke()}if(g.length>1){i.strokeStyle=t,i.lineWidth=n,i.beginPath();for(let e=0;e<g.length;e++){const[t,n]=g[e];0===e?i.moveTo(t,n):i.lineTo(t,n)}i.stroke()}}}}else{if(w&&v){let n=!0;e.length>=2?n=e[1][1]<=E:e.length>0&&(n=e[0][1]<=E),i.strokeStyle=n?t:v}else i.strokeStyle=t;i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}if(p){const e=p();i.lineWidth=n,i.strokeStyle=t,i.setLineDash([]);const r=16;for(let t of e){if(!t)continue;const{pixelX:e,pixelMinY:n,pixelMaxY:o}=t;null!==n&&(i.beginPath(),i.moveTo(e-r/2,n),i.lineTo(e+r/2,n),i.stroke()),null!==o&&(i.beginPath(),i.moveTo(e-r/2,o),i.lineTo(e+r/2,o),i.stroke()),null!==n&&null!==o&&(i.beginPath(),i.moveTo(e,n),i.lineTo(e,o),i.stroke())}}if(c){const e=d();if(x&&void 0!==u&&C&&y){const n=y;let r,o,a;if(n&&void 0!==n.minX&&void 0!==n.maxX)r=n.minX instanceof Date?n.minX.getTime():n.minX,o=n.maxX instanceof Date?n.maxX.getTime():n.maxX;else{const e=C[0],t=C[C.length-1],n=e[0],i=t[0];r=n instanceof Date?n.getTime():n,o=i instanceof Date?i.getTime():i}if("string"==typeof u&&"now"===u)a=Date.now();else if("object"==typeof C[0]&&2===C[0].length){const e=Math.floor(u),t=u-e;if(0===t||e>=C.length-1){const t=C[Math.min(e,C.length-1)][0];a=t instanceof Date?t.getTime():t}else{const n=C[e][0],i=C[e+1][0],r=n instanceof Date?n.getTime():n;a=r+t*((i instanceof Date?i.getTime():i)-r)}}else a=u;if(null!==a&&(a-r)/(o-r)>1){const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v);const{applyReducedOpacity:s}=l(365),h=s(a,f);i.fillStyle=h,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}return}if(B){const n=y.minX instanceof Date?y.minX.getTime():y.minX,r=y.maxX instanceof Date?y.maxX.getTime():y.maxX,o=V(e,A);for(let e=0;e<o.length;e++){const[s,l]=o[e];let h=!1;h=!(a<n)&&(a>r?"shadow"!==_:s<(a-n)/(r-n)*i.canvas.width);let c=t;if(v&&w&&(c=l===E&&k?k:l<E?t:v),h){const e=(0,D.applyReducedOpacity)(c,f);i.fillStyle=e}else i.fillStyle=c;i.beginPath(),i.arc(s,l,g||8,0,2*Math.PI,!1),i.fill()}}else if(y){const n=y.minX instanceof Date?y.minX.getTime():y.minX,r=y.maxX instanceof Date?y.maxX.getTime():y.maxX,o=V(e,A);for(let e=0;e<o.length;e++){const[s,l]=o[e];let h=!1;h=!(a<n)&&(a>r?"shadow"!==_:s<(a-n)/(r-n)*i.canvas.width);let c=t;if(v&&w&&(c=l===E&&k?k:l<E?t:v),h){const e=(0,D.applyReducedOpacity)(c,f);i.fillStyle=e}else i.fillStyle=c;i.beginPath(),i.arc(s,l,g||8,0,2*Math.PI,!1),i.fill()}}else{const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v),i.fillStyle=a,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}}}else{const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v),i.fillStyle=a,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}}}}(t,y)}else console.error("inRenderSpace is null for line rendering")}renderBackground(e){e&&(this._webgl?(this._backgroundProgram||(this._backgroundProgram=new F(this._context)),this._backgroundProgram.draw(e)):function({data:e},{context:t}){if(!t)return void console.error("Canvas context is null in drawBackground");const n=t.canvas.width,i=t.canvas.height;for(let{minXt:r,maxXt:o,color:a}of e)t.fillStyle=a,t.fillRect(r*n,0,(o-r)*n,i)}(e,{context:this._context}))}async _initializeCanvas(){if(this._sizing=await L(this._canvas,this._context),this.emit("size_changed",this._sizing),this._stateController.markSizeChanged(),window.ResizeObserver){let e=!0,t=!1;this._resizeObserver=new window.ResizeObserver(()=>{e?e=!1:t||(t=!0,this.resize().then(()=>{t=!1}))}),this._resizeObserver.observe(this._canvas.parentNode)}this._checkIntersection&&window.IntersectionObserver&&(this._intersectionObserver=new window.IntersectionObserver(e=>{clearTimeout(this._intersectionTimeout),e[0].isIntersecting&&(this._intersectionTimeout=setTimeout(()=>{this.resize()},50))},{threshold:.1}),this._intersectionObserver.observe(this._canvas.parentNode))}async resize(){const e=L(this._canvas,this._context,{reset:!0});this._initialized=e,this._sizing=await this._initialized,this._initialized===e&&(this.emit("size_changed",this._sizing),this._stateController.markSizeChanged(this))}resizeDebounced(){this._resizeTimeout&&clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(()=>{this.resize(),this._resizeTimeout=null},50)}recalculatePosition(){this._sizing&&(this._sizing.boundingRect=this._canvas.getBoundingClientRect())}get boundingRect(){return this._sizing?.boundingRect}get sizing(){return this._sizing}}function pe(e){return Math.max(2-Math.log10(Math.abs(e)),0)}function ue(e,t=null){if(null===t&&(t=pe(e)),isNaN(t)||t>100)return e.toString();const n=e.toFixed(Math.ceil(t));let i=n;return n.includes(".")&&(i=i.replace(/\.?0+$/g,"")),""===i?"0":i}const me={};function fe(e,t){try{let n=me[e];if(!n){let t=e;e&&"local"!==e||(t=Intl.DateTimeFormat().resolvedOptions().timeZone),n=new Intl.DateTimeFormat("en-US",{timeZone:t,timeZoneName:"longOffset"}),me[e]=n}const i=n.formatToParts(t).find(e=>"timeZoneName"===e.type);if(!i)return null;if("GMT"===i.value)return 0;if(!/^GMT[+-]\d{2}:\d{2}$/.test(i.value))return null;const[r,o]=i.value.slice(3).split(":");return 60*parseInt(r)*60*1e3+60*parseInt(o)*1e3}catch(n){return console.error(new Error(`Could not parse timezone offset for ${t} in ${e}`)),console.error(n),null}}function Ce(e,t){if(!t){const t=new Date(e);return t.setHours(0,0,0,0),t}const n=fe(t,e);let i=new Date(e);return i.setUTCHours(0,0,0,0),i.valueOf()-e.valueOf()>n&&(i=new Date(i.valueOf()-864e5)),new Date(i.valueOf()-n)}function xe(e,{dates:t=!1,precision:n=null,justTime:i=!1,justDate:r=!1,justMonthAndDay:o=!1,clockStyle:a="24h",unitOverride:s,timeZone:l,integersOnly:h=!1,inverseEnumMap:c}={}){return!t||e instanceof Date||(e=new Date(e),!isNaN(e))?e instanceof Date?function(e,{precision:t,justTime:n,justDate:i,justMonthAndDay:r,unitOverride:o,clockStyle:a="24h",timeZone:s}){const l=s&&"utc"===s.toLowerCase();if(s&&!l&&"local"!==s&&window.Intl&&window.Intl.DateTimeFormat){const t=fe(s,e),n=fe("local",e);"number"==typeof t&&"number"==typeof n&&(e=new Date(e.valueOf()+t-n))}const h=l?e.getUTCFullYear():e.getFullYear(),c=(l?e.getUTCMonth():e.getMonth())+1,g=l?e.getUTCDate():e.getDate();if("year"===o)return h.toString();if(i)return l?`${c}/${g}/${h}`:e.toLocaleDateString();if(r)return`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][c-1]} ${g}`;const A=l?e.getUTCHours():e.getHours(),d=l?e.getUTCMinutes():e.getMinutes(),p=l?e.getUTCSeconds():e.getSeconds(),u=l?e.getUTCMilliseconds():e.getMilliseconds();let m;return m="12h"===a?`${((A+11)%12+1).toString()}:${d.toString().padStart(2,"0")}`:`${A.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}`,"s"!==t&&"ms"!==t||(m+=`:${p.toString().padStart(2,"0")}`),"ms"===t&&(m+=`.${u.toString().padStart(3,"0")}`),"12h"===a&&(m+=A>=12?"pm":"am"),n?m:(l&&(m+=" UTC"),(l?`${c}/${g}/${h}`:e.toLocaleDateString())+" "+m)}(e,{precision:n,justTime:i,justDate:r,justMonthAndDay:o,unitOverride:s,clockStyle:a,timeZone:l}):isNaN(e)?"NaN":c?Math.abs(e-Math.round(e))>1e-10?"":c[Math.round(e)]:h&&Math.abs(e-Math.round(e))>1e-10?"":ue(e,n):"Invalid Date"}function be(e,{precision:t=null,log:n=!1}={}){return null===e?"null":isNaN(e)?"NaN":n?`10^${ue(Math.log10(e),t)}`:ue(e,t)}const ye=32;function _e(){return _e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},_e.apply(null,arguments)}function Be({yLabel:e,y:t,fullYPrecision:n}){return n&&!e?void 0===t?"undefined":null===t?"null":t.toString():"number"==typeof e?n?e.toString():be(e):"object"==typeof e?be(t):e||be(t)}function ve({axisLabel:t,x:n,y:i,xLabel:r,yLabel:o,textLeft:a,textTop:s,includeSeriesLabel:l,includeXValue:h,includeYValue:c,includeXLabel:g,includeYLabel:A,fullYPrecision:d,formatXOptions:p}){let u=0;return e.createElement("g",null,l&&e.createElement("text",{x:a,y:s+12*u++},t),h&&e.createElement("text",{x:a,y:s+12*u++},g&&"x: ",r||xe(n,p)),c&&e.createElement("text",{x:a,y:s+12*u++},A&&"y: ",Be({yLabel:o,y:i,fullYPrecision:d})))}ve.propTypes={axisLabel:c().string,x:c().oneOfType([c().number,c().instanceOf(Date)]),y:c().number,xLabel:c().string,yLabel:c().oneOfType([c().number,c().string]),textLeft:c().number.isRequired,textTop:c().number.isRequired,fullYPrecision:c().bool,formatXOptions:c().object,...k.TooltipOptionsRaw};class we extends e.PureComponent{render(){let t=42;this.props.includeSeriesLabel||(t-=12),this.props.includeXValue||(t-=12),this.props.includeYValue||(t-=12);const n=t/2,i=3-n,r={clockStyle:this.props.clockStyle,timeZone:this.props.timeZone},o={includeSeriesLabel:this.props.includeSeriesLabel,includeXLabel:this.props.includeXLabel,includeYLabel:this.props.includeYLabel,includeXValue:this.props.includeXValue,includeYValue:this.props.includeYValue,formatXOptions:r},a=this.props.tooltips.map(e=>{const{x:a,y:s,pixelY:l,tooltipPixelY:h,pixelX:c,series:g,index:A,xLabel:d,yLabel:p,fullYPrecision:u}=e;if("number"!=typeof c)return null;const m=(g.name||g.yKey||A).toString();let f=7.5*Math.max(m.length,(d||xe(a,r)).length+4,Be({yLabel:p,y:s,fullYPrecision:u}).length+4);g.tooltipWidth&&(f=g.tooltipWidth);let C=this.props.elementWidth<f+14+8,x=1;c>=this.props.elementWidth-(f+14+4)&&(x=-1),c<f+14+4&&-1===x&&(C=!0),null===s&&(C=!0),this.props.alwaysFixedPosition&&(C=!0);let b=11;if(x<0?b=-f-b:b+=6,!isFinite(c))return null;const y=`translate(${c},${l})`,_=`translate(${c},${h??l})`,B={fullYPrecision:u||this.props.maxPrecision,x:a,y:s,axisLabel:m,xLabel:d,yLabel:p,...o};let v,w=0;return C&&(b=6,v=this.props.elementWidth/2-f/2,f>this.props.elementWidth&&!this.props.floating&&(v-=ye*this.props.axisCount/2),w=18,this.props.floating&&(w="bottom"===this.props.floatPosition?this.props.elementHeight+n+4:-t,this.props.floatDelta&&(w+=this.props.floatDelta))),{...e,label:m,indexInAxis:g?.axis?.series?.indexOf(g),axisLabel:m,width:f,fixedPosition:C,multiplier:x,textLeft:b,markerTransform:y,tooltipTransform:_,commonLabelProps:B,textTop:i,height:t,caretSize:7,halfHeight:n,caretPadding:4,yTranslation:w,baseLeft:v}}).filter(Boolean),s=this.props.customTooltip;let l;if(this.props.combineTooltips){let e=50;"number"==typeof this.props.combineTooltips&&(e=this.props.combineTooltips),l=[];for(let t of a){let n=!1;for(let i of l)if(Math.abs(i.pixelX-t.pixelX)<=e){i.tooltips.push(t),t.pixelX>i.pixelX&&(i.pixelX=t.pixelX,i.multiplier=t.multiplier),t.pixelY<i.pixelY&&(i.pixelY=t.pixelY),n=!0;break}n||l.push({pixelX:t.pixelX,pixelY:t.pixelY,multiplier:t.multiplier,tooltips:[t]})}for(let e of l){let t=0,n=0;e.tooltips.sort((e,t)=>e.indexInAxis-t.indexInAxis);for(let i=0;i<e.tooltips.length;i++)e.tooltips[i].textTop=t,t+=e.tooltips[i].height,n=Math.max(n,e.tooltips[i].width);for(let n=0;n<e.tooltips.length;n++)e.tooltips[n].textTop-=t/2,e.tooltips[n].textTop+=3;e.height=t,e.halfHeight=t/2,e.caretSize=7,e.width=n}}return e.createElement("div",{className:"grapher-tooltip"},e.createElement("svg",null,a.map((t,i)=>{const{color:r,fixedPosition:o,width:a,markerTransform:s,tooltipTransform:h,baseLeft:c,commonLabelProps:g,yTranslation:A,multiplier:d,textLeft:p,textTop:u}=t;return this.props.customTooltip||l?e.createElement("g",{key:i,transform:s,className:"tooltip-item"},e.createElement("circle",{r:4,fill:r})):o?e.createElement("g",{key:i,className:"tooltip-item tooltip-item-fixed"},e.createElement("circle",{r:4,fill:r,transform:s}),e.createElement("g",{transform:`translate(${c}, ${A})`},e.createElement("path",{stroke:r,d:`M0,0 V-${n} h${a} V${n} h${-a} V0`}),e.createElement(ve,_e({textLeft:p,textTop:u},g)))):e.createElement("g",{key:i,className:"tooltip-item"},e.createElement("circle",{r:4,fill:r,transform:s}),e.createElement("g",{transform:h},e.createElement("path",{stroke:r,d:`M${4*d},0 L${7*d*2},-7 V-${n} h${d*a} V${n} h${d*-a} V7 L${4*d},0`}),e.createElement(ve,_e({textLeft:p,textTop:u},g))))}),!this.props.customTooltip&&l&&l.map(({tooltips:t,pixelX:n,pixelY:i,halfHeight:r,multiplier:o,color:a,width:s},l)=>e.createElement("g",{key:l,transform:`translate(${n},${i})`,className:"tooltip-item"},e.createElement("path",{stroke:a,d:`M${4*o},0 L${7*o*2},-7 V-${r} h${o*s} V${r} h${o*-s} V7 L${4*o},0`}),t.map((t,n)=>e.createElement(ve,_e({key:n,textTop:t.textTop,textLeft:t.textLeft},t.commonLabelProps)))))),this.props.customTooltip&&(l||a).map((t,n)=>e.createElement("div",{key:n,className:"custom-tooltip-container",style:{top:t.pixelY,left:t.pixelX}},e.createElement(s,t))))}}we.defaultProps={includeSeriesLabel:!0,includeXLabel:!0,includeYLabel:!0,includeXValue:!0,includeYValue:!0},we.propTypes={mouseX:c().number.isRequired,mouseY:c().number.isRequired,elementHeight:c().number.isRequired,elementWidth:c().number.isRequired,tooltips:c().arrayOf(c().shape({x:c().oneOfType([c().number,c().instanceOf(Date)]),y:c().number,pixelY:c().number,color:c().string,xLabel:c().string,yLabel:c().any,fullYPrecision:c().bool})),axisCount:c().number.isRequired,maxPrecision:c().bool.isRequired,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,...k.TooltipOptionsRaw};class Ee extends e.PureComponent{constructor(e){super(e),this.setTextRef=this.setTextRef.bind(this)}setTextRef(e){if(this.textRef=e,this.props.contextMenu.showing&&this.textRef){const e=document.createRange(),t=window.getSelection();t.removeAllRanges(),e.selectNodeContents(this.textRef),t.addRange(e),this.textRef.focus()}}formatDateTime(e){const[t,n]=e.split(", "),[i,r,o]=t.split("/"),a=`${i.padStart(2,"0")}/${r.padStart(2,"0")}/${o}`,[s,l]=n.split(" "),[h,c]=s.split(":");return`${a} ${h.padStart(2,"0")}:${c} ${l}`}render(){const{x:t,y:n,showing:i,value:r}=this.props.contextMenu,o={left:t,top:n,width:"150px"};if(!i||!r||"Invalid Date"===r.toLocaleString()||isNaN(t)||isNaN(n))return null;const a=r instanceof Date?this.formatDateTime(r.toLocaleString()):r;return e.createElement("div",{className:"grapher-context-menu",style:o},e.createElement("div",{className:"menu-item"},e.createElement("div",{className:"menu-text",autoFocus:!0,ref:this.setTextRef},a)))}}function ke(e,t={}){const n=T(e,{useSimpleData:!0,data:t.data});if(!g.includes(n))throw new Error(`Cannot normalize ${n} (expected a simple type)`);const i={tuples:De,values:Se,objects:ze}[n](t.data||e.simpleData||e.data,e,t);let r,o=[],a=null,s=null;if(Array.isArray(i)?r=i:(r=i.data,o=i.rangeValues||[],a=i.windDirections||null,s=i.windData||null),e.square){const e=[];let n=t.prevY;for(let t of r)void 0!==n&&e.push([t[0],n]),e.push(t),n=t[1];return e}if(e.shiftXBy)for(let n of r)if("string"==typeof n[0]){const i=n[0];n[0]=new Date(new Date(n[0]).valueOf()+e.shiftXBy),isNaN(n[0])&&(n[0]=t.stateController.enumToNumber(i,e))}else n[0]instanceof Date?n[0]=new Date(n[0].valueOf()+e.shiftXBy):"number"==typeof n[0]&&(n[0]+=e.shiftXBy);if(e.xUnixDates)for(let e of r)"number"==typeof e[0]&&(e[0]=new Date(1e3*e[0]));return o.length>0||a?{data:r,rangeValues:o,windDirections:a,windData:s}:r}function Se(e,t,n){const i=[];for(let r=0;r<e.length;r++){let o=e[r];"string"==typeof o&&(o=n.stateController.enumToNumber(o,t)),"boolean"==typeof o&&(o=+o),i.push([r+(n.valueXStart||0),o])}return i}function De(e,t,n){return[...e.map(([e,i])=>{if(void 0===i&&(i=null),"string"==typeof e){const i=e;e=new Date(e),isNaN(e)&&(e=n.stateController.enumToNumber(i,t,!0))}return"string"==typeof i&&(i=n.stateController.enumToNumber(i,t)),"boolean"==typeof i&&(i=+i),[e,i]})]}function Te(e,t,n){const i=e.getUint32(t+2+Uint32Array.BYTES_PER_ELEMENT*n,!0);if(0===i)return null;const r=e.getUint8(i);if(0===r)return e.getFloat64(t+i+1,!0);if(1===r||6===r)return null;if(3===r)return new Date(e.getFloat64(t+i+1,!0));throw new Error(`Binary format type ${r} not supported`)}function ze(e,t,n){const i=t.windXKey&&t.windYKey;if(!t.xKey||"string"!=typeof t.xKey)throw new Error("xKey must be provided in the series");if(!(i||t.yKey&&"string"==typeof t.yKey))throw new Error("yKey must be provided in the series (or both windXKey and windYKey)");const r=[],o=[],a=i?[]:null,s=i?[]:null;for(let l of e)if(l.buffer instanceof ArrayBuffer){const e=new DataView(l.buffer),n=l.channels[t.xKey],i=l.channels[t.yKey];for(let t of l.offsets)r.push([Te(e,t,n),Te(e,t,i)])}else if(!i&&Array.isArray(l[t.yKey]))if(l[t.yKey].length&&!Array.isArray(l[t.yKey][0])&&"object"==typeof l[t.yKey][0])for(let e of l[t.yKey]){let i=e[t.yKey];void 0===i&&(i=null),"string"==typeof i&&(i=n.stateController.enumToNumber(i,t)),"boolean"==typeof i&&(i=+i);let o=e[t.xKey];"string"==typeof o&&(o=new Date(o)),r.push([o,i])}else r.push(...l[t.yKey]);else{let e;if(i){const n=l[t.windXKey],i=l[t.windYKey];null!=n&&null!=i?(e=Math.sqrt(n*n+i*i),a.push(Math.atan2(i,n)),s.push({x:n,y:i})):(e=null,a.push(null),s.push(null))}else e=l[t.yKey],void 0===e&&(e=null),"string"==typeof e&&(e=n.stateController.enumToNumber(e,t)),"boolean"==typeof e&&(e=+e);let h=l[t.xKey];if("string"==typeof h&&(h=new Date(h)),r.push([h,e]),t.rangeKey&&l[t.rangeKey]){const e=l[t.rangeKey];"object"==typeof e&&void 0!==e.min&&void 0!==e.max&&("number"==typeof e.min&&o.push(e.min),"number"==typeof e.max&&o.push(e.max))}}return o.length>0||a?{data:r,rangeValues:o,windDirections:a,windData:s}:r}function Re(e,{dates:t}){const n=null===e.minX&&null===e.maxX||null===e.minY||null===e.maxY;for(let t of Object.keys(e))"number"!=typeof e[t]&&null!==e[t]&&(e[t]=null);return e.initial=n,e.dates=t,e}function Xe(e,{percentile:t=100,percentileAsymmetry:n=0,rangeValues:i=[]}={}){let r={minX:null,maxX:null,minY:null,maxY:null,closestSpacing:null};if(100!==t&&e.length)return function(e,t,{percentile:n=100,percentileAsymmetry:i=0,rangeValues:r=[]}={}){let o=!1;t.minX=e[0][0],t.minX instanceof Date&&(t.minX=t.minX.valueOf(),o=!0),t.maxX=e[e.length-1][0],t.maxX instanceof Date&&(t.maxX=t.maxX.valueOf(),o=!0);const a=e.filter(([e,t])=>"number"==typeof t).sort(([e,t],[n,i])=>t-i);for(let e of r)"number"==typeof e&&a.push([null,e]);if(a.sort(([e,t],[n,i])=>t-i),!a.length)return Re(t,{dates:o});const s=Math.min(Math.abs(i),(100-n)/2)*(i<0?-1:1),l=(100-n)/2+s,h=(100-n)/2-s,c=Math.floor((a.length-1)*l/100),g=Math.floor((a.length-1)*(100-h)/100);return t.minY=a[c][1],t.maxY=a[g][1],Re(t,{dates:o})}(e,r,{percentile:t,percentileAsymmetry:n,rangeValues:i});let o=!1,a=null;for(let[t,n]of e)if(null!==t){if(t instanceof Date&&(t=t.valueOf(),o=!0),("number"!=typeof r.minX||t<r.minX)&&(r.minX=t),("number"!=typeof r.maxX||t>r.maxX)&&(r.maxX=t),"number"==typeof a&&"number"==typeof t){const e=t-a;("number"!=typeof r.closestSpacing||e<r.closestSpacing)&&(r.closestSpacing=e)}a=t,"number"==typeof n&&(("number"!=typeof r.minY||n<r.minY)&&(r.minY=n),("number"!=typeof r.maxY||n>r.maxY)&&(r.maxY=n))}for(let e of i)"number"==typeof e&&(("number"!=typeof r.minY||e<r.minY)&&(r.minY=e),("number"!=typeof r.maxY||e>r.maxY)&&(r.maxY=e));return Re(r,{dates:o})}function Ye(e){const t={minX:null,maxX:null,minY:null,maxY:null,closestSpacing:null,dates:!1,initial:!0};for(let{minX:n,maxX:i,minY:r,maxY:o,dates:a,initial:s,closestSpacing:l}of e)a&&(t.dates=!0),s||(t.initial=!1,null!==n&&(null===t.minX||n<t.minX)&&(t.minX=n),null!==i&&(null===t.maxX||i>t.maxX)&&(t.maxX=i),null!==l&&(null===t.closestSpacing||l<t.closestSpacing)&&(t.closestSpacing=l),null!==r&&(null===t.minY||r<t.minY)&&(t.minY=r),null!==o&&(null===t.maxY||o>t.maxY)&&(t.maxY=o));return null===t.minX&&(t.minX=0),null===t.maxX&&(t.maxX=0),null===t.closestSpacing&&(t.closestSpacing=1),null===t.minY&&(t.minY=0),null===t.maxY&&(t.maxY=0),t}function Pe(e,{expandYWith:t=[],extendXForNBars:n=0}){const i=Object.assign({},e);for(let e of t)null!=e&&(("number"!=typeof i.minY||e<i.minY)&&(i.minY=e),("number"!=typeof i.maxY||e>i.maxY)&&(i.maxY=e));i.unscaledMinY=i.minY,i.unscaledMaxY=i.maxY;const r=i.maxY-i.minY,o=i.minY+r/2;if(i.minY=Math.min(i.minY,o-1.05*r/2),i.maxY=Math.max(i.maxY,o+1.05*r/2),i.minY===i.maxY&&null!==i.minY&&(i.minY>0?(i.minY*=.95,i.maxY*=1.05):i.minY<0?(i.minY*=1.05,i.maxY*=.95):(i.minY-=1,i.maxY+=1)),n&&i.minX!==i.maxX&&null!==i.minX&&null!==i.maxX){const e=(i.maxX-i.minX)/n;i.minX-=e/2,i.maxX+=e/2}return i}function Me(e,t,n={},i=0,r=void 0){if(void 0===r&&(r=e.length-1),0===e.length)return n.returnIndex?-1:[null,null];const o=Math.floor((i+r)/2);if(t===e[o][0]||e[o][0]instanceof Date&&e[o][0].valueOf()===t)return n.returnIndex?o:e[o];if(i===r)return e[i][0]<t&&"before"===n.searchType||e[i][0]>t&&"after"===n.searchType?n.returnIndex?i:e[i]:n.returnIndex?-1:[null,null];if(r-1===i){let o;return o="before"===n.searchType?i:"after"===n.searchType||Math.abs(e[i][0]-t)>Math.abs(e[r][0]-t)?r:i,n.returnIndex?o:e[o]}return t>e[o][0]?Me(e,t,n,o,r):t<e[o][0]?Me(e,t,n,i,o):void 0}function Fe({data:e,swap:t,minX:n,maxX:i,ignoreDiscontinuities:r,square:o}){if(!e.length||e.length&&n>e[e.length-1][0]||e.length&&i<e[0][0])return{data:[[n,null],[i,null]],firstAdded:!0,lastAdded:!0};let a,s=Me(e,n,{searchType:"before",returnIndex:!0})||0,l=Me(e,i,{searchType:"after",returnIndex:!0})||0;for(-1===l&&(l=0);s>=0&&e[s][0]>=n;)s--;for(;l<e.length&&e[l][0]<=i;)l++;let h=!1,c=!1,g=!1,A=s,d=l;if(r){for(;A>=0&&null===e[A][1];)A--;for(;d<e.length&&null===e[d][1];)d++}if(t){if(a=t.data,t.lastAdded&&a.pop(),n===t.minX&&(h=!0),s!==t.beforeIndex){h=!1,t.firstAdded&&a.shift();let i=t.beforeIndex;for(;i>=0&&a.length&&a[0][0]>=n;)r&&!e[i][1]&&0!==e[i][1]||a.unshift(e[i]),i--;for(;i<e.length&&a.length&&a[0][0]<n;)a.shift(),i++}if(r&&!t.ignoreDiscontinuities&&(a=a.filter(([e,t])=>null!=t)),s===t.beforeIndex&&t.firstAdded){c=!0;let t=s+1;if(r)for(;t<e.length&&null===e[t][1];)t++;-1===A&&a.length?a[0]=[n,null]:o&&a.length?a[0]=[n,e[A][1]]:a.length&&(a[0]=[n,Le(e,A,t,n)]),e[s+1][0]===a[0][0]&&e[s+1][1]===a[0][1]&&(c=!1)}let g=t.afterIndex;if(t.ignoreDiscontinuities&&!r){let t=s+1,n=0;for(c&&n++;n<=a.length&&t<e.length&&t<l;)e[t][0]<=i&&null===e[t][1]&&(!a[n]||a[n][0]!==e[t][0]||a[n][1]!==e[t][1])&&(a.splice(n,0,e[t]),t>=g&&(g=t+1)),t++,n++}let d=g||0;for(;d<e.length&&e[d][0]<=i;)e[d][0]>=n&&(r&&!e[d][1]&&0!==e[d][1]||a.push(e[d])),d++;for(;a.length&&a[a.length-1][0]>i;)a.pop()}else a=e.slice(s+1,l),r&&(a=a.filter(([e,t])=>null!=t));if(a.length||(a=o?A<0?[[n,null],[i,null]]:[[n,e[A][1]],[i,e[A][1]]]:[[n,Le(e,A,d,n)],[i,Le(e,A,d,i)]],c=!0,g=!0),!h){let t=s+1;if(r)for(;t<e.length&&null===e[t][1];)t++;a.length&&a[0][0]>n&&(c=!0,-1===A?a.unshift([n,null]):o?a.unshift([n,e[A][1]]):a.unshift([n,Le(e,A,t,n)]))}if(a.length&&a[a.length-1][0]<i){g=!0;let t=l-1;if(r)for(;t>=0&&null===e[t][1];)t--;d===e.length?a.push([i,null]):o?a.push([i,a[a.length-1][1]]):a.push([i,Le(e,t,d,i)])}if(1===a.length){let t,r;o?(t=A<0?[n,null]:[n,e[A][1]],r=[i,a[0][1]]):(t=[n,Le(e,A,s+1,n)],r=[i,Le(e,l-1,d,i)]),a.unshift(t),a.push(r),c=!0,g=!0}return{data:a,minX:n,maxX:i,beforeIndex:s,afterIndex:l,firstAdded:c,lastAdded:g,ignoreDiscontinuities:r}}function Le(e,t,n,i){if(t<0||n<0)return null;if(t>=e.length||n>=e.length)return null;if(t===n)return e[t][1];const[r,o]=e[t],[a,s]=e[n];if(i===r&&null!==o)return o;if(i===a&&null!==s)return s;if(null===o||null===s)return null;const l=(i-r)/(a-r);return l<0||l>1?null:l*(s-o)+o}function Oe({minY:e,maxY:t,scale:n}){return"log"===n&&(t=Math.log10(t),e=e<=0?t>0?-t:2*t:Math.log10(e)),{minY:e,maxY:t}}function Ie({data:e,swap:t,renderWidth:n,renderHeight:i,minX:r,maxX:o,minY:a,maxY:s,scale:l,dataChanged:h}){t&&t.yValues.length!==n&&(t=null);const c=t&&t.nullMask||new Uint8Array(n);c.fill(0);const g=new Float64Array(n),A=new Float64Array(n),d=new Float64Array(n),p=Oe({minY:a,maxY:s,scale:l}),u={data:e,renderWidth:n,renderHeight:i,minX:r,maxX:o,minY:a=p.minY,maxY:s=p.maxY,scale:l};let m,f;if(oe()){let n=0;const i=t&&t.dataNullMask&&t.dataF64,a=!h&&i&&t.minX===r&&t.maxX<=o&&t.length<=e.length;if(!a||t.dataNullMask.length<e.length){const n=1.25;m=new Float64Array(Math.floor(2*e.length*n)),f=new Uint8Array(Math.floor(e.length*n)),a&&(f.set(t.dataNullMask),m.set(t.dataF64))}else m=t.dataF64,f=t.dataNullMask;a&&(n=Math.max(t.length-1,0));for(let t=n;t<e.length;t++)m[2*t]=e[t][0],m[2*t+1]=e[t][1],null===e[t][1]?f[t]=1:f[t]=0;oe().selected_space_to_render_space(e.length,m,f,u,c,g,A,d)}else!function({data:e,renderWidth:t,renderHeight:n,minX:i,maxX:r,minY:o,maxY:a,scale:s},{nullMask:l,yValues:h,minYValues:c,maxYValues:g}){let A=0,d=A-1;for(let p=0;p<t;p++){const u=p/(t-1)*(r-i)+i;let m=null,f=null;for(A>0&&A<=e.length&&null===e[A-1][1]&&A--,A<e.length-2&&e[A+1][0]<u&&A++;A<e.length-2&&e[A+1][0]<u;A++){const t=e[A][1];null!==t&&((null===m||t<m)&&(m=t),(null===f||t>f)&&(f=t))}if(c[p]=null===m?0:n*(1-(("log"===s?Math.log10(m):m)-o)/(a-o)),g[p]=null===f?0:n*(1-(("log"===s?Math.log10(f):f)-o)/(a-o)),A>=e.length-1||null===e[A][1]||null===e[A+1][1]){const t=A>=e.length-1?null:e[A][1];l[p]=null===t|(null===m)<<1|(null===f)<<2,h[p]=null===t?0:n*(1-(("log"===s?Math.log10(t):t)-o)/(a-o)),A++;continue}const[C,x]=e[A],[b,y]=e[A+1];let _=(u-C)/(b-C)*(y-x)+x;d!==A&&(_=x),h[p]=null===_?0:n*(1-(("log"===s?Math.log10(_):_)-o)/(a-o)),l[p]=null===_|(null===m)<<1|(null===f)<<2,d=A}}(u,{nullMask:c,yValues:g,minYValues:A,maxYValues:d});return{nullMask:c,yValues:g,minYValues:A,maxYValues:d,dataF64:m,dataNullMask:f,minX:r,maxX:o,length:e.length}}function $e(e,{series:t,inDataSpace:n}){const i=[];let r=0;for(let o of e){const e=Ge(o,t);if(t.yKey&&Array.isArray(e)){for(let e of o[t.yKey]){if(t.ignoreDiscontinuities&&"number"!=typeof e[t.yKey]&&!Array.isArray(e))continue;const o=n[r++][0];t.square&&i.length>0&&i.push([o,i[i.length-1][1]]),i.push([o,e])}continue}if(t.ignoreDiscontinuities&&null==e)continue;const a=n[r++][0];t.square&&i.length>0&&i.push([a,i[i.length-1][1]]),i.push([a,o])}return i.length!==n.length&&console.warn("Flattening didn't give the same length as it has in data space"),i}function Ge(e,t){return t.yKey?e[t.yKey]:Array.isArray(e)?1===e.length?e[0]:e[1]:e}function We(e,t){return t.xKey?e[t.xKey]:Array.isArray(e)?e[0]:e}function Ne({mouseX:e,mouseY:t,sizing:n},i){const{x:r,y:o}=i,a=i.series.axis.scale,s=i.series.axis.currentBounds,{minY:l,maxY:h}=Oe({...s,scale:a}),c=(r-s.minX)/(s.maxX-s.minX)*n.elementWidth,g=(1-(("log"===a?Math.log10(o):o)-l)/(h-l))*n.elementHeight,A=Math.sqrt((c-e)**2+(g-t)**2),d=Math.abs(c-e);Object.assign(i,{pixelWidth:n.elementWidth,pixelX:c,pixelY:isNaN(g)?n.elementHeight/2:g,xDistance:d,distance:A})}Ee.propTypes={contextMenu:c().shape({x:c().number,y:c().number,showing:c().bool,value:c().oneOfType([c().instanceOf(Date),c().number,c().object])}).isRequired};const Ue={all:()=>{},lastMinute:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-6e4,e.minX)}},last10Minutes:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-6e5,e.minX)}},lastHour:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-36e5,e.minX)}},lastDay:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-864e5,e.minX)}}};function qe({data:e,swap:t,minX:n,maxX:i,renderWidth:r,dataChanged:o}){const a=2*r;let s;if(!o&&t&&t.minX===n&&t.maxX<=i&&t.length<=e.length?(s=t.data,e.length>t.length&&(e.length>0&&s.length>0&&(s[s.length-1]=e[t.length-1]),s=s.concat(e.slice(t.length)))):s=[...e],s.length/a<4)return{data:s,minX:n,maxX:i,length:e.length};const l=[],h=(i-n)/a;let c=null,g=null,A=0;e.length&&l.push(e[0]);for(let e of s){const[t,i]=e;if(null===i)continue;const r=Math.floor((t-n)/h);r!==A&&(c&&g&&(c===g?l[l.length-1]!==c&&l.push(c):c[0]<g[0]?l.push(g,c):l.push(c,g)),c=null,g=null,A=r),(!c||i<c[1])&&(c=e),(!g||i>g[1])&&(g=e)}return c&&g&&(c===g?l.push(c):c[0]<g[0]?l.push(g,c):l.push(c,g)),e.length>=2&&e[e.length-1]!==c&&e[e.length-1]!==g&&l.push(e[e.length-1]),{data:l,minX:n,maxX:i,length:e.length}}function He(e,t){let n=e.name||e.yKey;return n||(n=t.toString()),n}function Ve({data:e,background:t,minX:n,maxX:i}){if(!t)return null;const r=[];for(let[e,n]of Object.entries(t)){if("object"==typeof n){if("function"!=typeof n.evaluator)throw new Error("Invalid background declaration: "+e+" (evaluator must be a function)");r.push(Object.assign({key:e,comparator:"custom",comparedAgainst:null},n));continue}if("null"===e){r.push({evaluator:e=>null===e&&n,color:n,key:e,comparator:"=",comparedAgainst:null});continue}const[t,i]=e.split(" ");if(!t||!i||isNaN(parseFloat(i)))throw new Error("Invalid background declaration: "+e);const o=parseFloat(i);let a;if("="===t)a=e=>"number"==typeof e&&e===o&&n;else if("<"===t)a=e=>"number"==typeof e&&e<o&&n;else if(">"===t)a=e=>"number"==typeof e&&e>o&&n;else if("<="===t)a=e=>"number"==typeof e&&e<=o&&n;else{if(">="!==t)throw new Error("Invalid background declaration: "+e);a=e=>"number"==typeof e&&e>=o&&n}r.push({evaluator:a,color:n,key:e,comparator:t,comparedAgainst:o})}const o=[];let a=null;for(let t=0;t<e.length;t++){let[s,l]=e[t];s instanceof Date&&(s=s.valueOf());for(let h of a?[a.condition,...r]:r){const r=h.evaluator(l);if(a){if(a.color===r)break;let c=s;if(t>0){let[n,i]=e[t-1];n instanceof Date&&(n=n.valueOf()),c=null===a.condition.comparedAgainst?s:null===l?n:n+(h.comparedAgainst-i)/(l-i)*(s-n)}o.push({...a,maxX:c,maxXt:(c-n)/(i-n)}),a=null}if(r){let o=s;if(t>0){let[n,i]=e[t-1];n instanceof Date&&(n=n.valueOf()),o=null===h.comparedAgainst?n:null===i?s:n+(h.comparedAgainst-i)/(l-i)*(s-n)}a={minX:o,minXt:(o-n)/(i-n),color:r,condition:h};break}}}return a&&o.push({...a,maxX:e[e.length-1][0],maxXt:(e[e.length-1][0]-n)/(i-n)}),{data:o}}class je extends S{constructor({defaultBoundsCalculator:e,customBoundsSelectors:t,requireWASM:n,defaultShowIndividualPoints:i,defaultShowSidebar:r,defaultShowAnnotations:o,defaultShowOptions:a,syncPool:s,grapherID:l,sharedDataCache:h,sharedSubscriptions:c,fullscreen:g}){super(),this._requireWASM=n,n&&re.then(()=>{this._markDirty()}),this._series=[],this._seriesFromOriginalSeries=new Map,this._axes=[{series:[],scale:"linear",side:"left",axisIndex:0}],this._highlightedSeries=null,this._showIndividualPoints=i||!1,this._autoscaleY=!0,this._percentile=100,this._percentileAsymmetry=0,this._showingOptions=a,this._maxPrecision=!1,this._showingSidebar=r||!1,this._showingAnnotations=o||!1,this._grapherID=l,this._fullscreen=g||!1,this._alwaysTooltipped=new Set,this._tooltipState={mousePresent:!1,mouseX:0,mouseY:0,elementWidth:0,elementHeight:0,tooltips:[]},this._contextMenuPosition={x:0,y:0,showing:!1,value:null},this._savedTooltips=[],this._draggingY=!1,this._annotations=[],this._annotationsState={elementWidth:0,annotations:[]},this._enumMap={},this._hasXEnum=!1,this._timingBuffer=[],this._timingIndex=0,this._timingFrameCount=0,this._modifiedSeries=new Set,this._deferredEmissions={},this._deferredPriorityEmissions={},this.primaryRenderer=null,this.rangeGraphRenderer=null,this._boundsCalculator=function(e,t){if(Ue[e])return Ue[e];for(let{label:n,calculator:i}of t)if(e===n)return i;return Ue.all}(e,t),this._boundsHistory=[this._boundsCalculator],this._boundsIndex=0,this._dataCache=h||new Map,this._subscriptions=c||new Map,this._subscriptionsShared=!!c,this._observablesToSeries=new Map,this._generators=new Set,this._generatorsToSeries=new Map,this._generatorCallArgs=new Map,this._seriesChangedFromPromises=new Set,this._syncPool=s,this._syncPool&&this._syncPool.add(this),this._onDataChange()}dispose(){if(this.emit("dispose",this),this.clearListeners(),!this._subscriptionsShared){for(let e of this._subscriptions.values())e.unsubscribe();this._subscriptions.clear()}for(let e of this._series)this._removeSeries(e);this._syncPool&&this._syncPool.remove(this),this.disposed=!0}setSeries(e){const t=this._series.filter(e=>e.userCreated),n=this._series.filter(e=>!e.userCreated);if(e.length===n.length){let t=!1;for(let n=0;n<e.length;n++)if(e[n]!==this._series[n].originalSeries){t=!0;break}if(!t)return}else this._mustResize=this._mustResize||this._fullscreen;const i=new Set(e);for(let e of n)i.has(e.originalSeries)||this._removeSeries(e);this._series.splice(0);for(let t=0;t<e.length;t++){const n=e[t];let i=this._seriesFromOriginalSeries.get(n);i||(i={...n,originalSeries:n},this._seriesFromOriginalSeries.set(n,i),i.defaultAlwaysTooltipped&&(this._alwaysTooltipped.add(i),this._tooltipsChanged=!0,this.deferredEmit("always_tooltipped_changed",this._alwaysTooltipped))),i.index=t,this._series.push(i),this._assignAxisTo(i),i.hidden&&this._hideSeries(i)}for(let n=0;n<t.length;n++){const i=t[n];i.index=n+e.length,this._series.push(i)}this.deferredEmit("series_changed",this._series),this._dataChanged=!0,this._markDirty()}_markDirty(){if(this._frameRequested)return;if(this._requireWASM&&!oe)return;const e=performance.now();this._frameRequested=!0,requestAnimationFrame(()=>{if(this.disposed)return;const t=performance.now(),n=performance.now();this._dataChanged?(this._onDataChange(),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0):this._modifiedSeries.size?(this._onDataAdd(this._modifiedSeries),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0):(this._primarySizeChanged&&(this._calculatePrimarySizeDependents(),this._mustRerender=!0),this._rangeGraphSizeChanged&&(this._calculateRangeGraphSizeDependents(),this._mustRerender=!0));const i=performance.now(),r=performance.now();this._mustRerender&&this._render();const o=performance.now(),a=performance.now();this._mustCallGenerators&&this._callGenerators();const s=performance.now(),l=performance.now();this._tooltipsChanged&&this._recalculateTooltips();const h=performance.now(),c=performance.now();this._contextMenuChanged&&this._recalculateContextMenu();const g=performance.now(),A=performance.now();this._annotationsChanged&&this._recalculateAnnotations();const d=performance.now();this._mustResize&&(this.primaryRenderer.resizeDebounced(),this.rangeGraphRenderer&&this.rangeGraphRenderer.resizeDebounced()),this._frameRequested=!1,this._mustRerender=!1,this._dataChanged=!1,this._primarySizeChanged=!1,this._rangeGraphSizeChanged=!1,this._modifiedSeries.clear(),this._seriesChangedFromPromises.clear(),this._tooltipsChanged=!1,this._contextMenuChanged=!1,this._annotationsChanged=!1,this._mustCallGenerators=!1,this._mustResize=!1;const p=performance.now();for(let e of[...Object.values(this._deferredPriorityEmissions),...Object.values(this._deferredEmissions)])this.emit(...e);const u=performance.now();this._deferredEmissions={},this._deferredPriorityEmissions={};const m=performance.now(),f={frameExecution:m-t,frameRequestAndExecution:m-e,generators:s-a,dataProcessing:i-n,renderPipeline:o-r,tooltips:h-l,contextMenu:g-c,annotations:d-A,callbacks:u-p};this.lastLoopTime=f,this._timingFrameCount&&(this._timingBuffer.length<this._timingFrameCount?this._timingBuffer.push(f):this._timingBuffer[this._timingIndex%this._timingFrameCount]=f,this._timingIndex++),this.emit("render_time",m-t,f)})}deferredEmit(...e){this._deferredEmissions[e[0]]=e}deferredPriorityEmit(...e){this._deferredPriorityEmissions[e[0]]=e}_seriesToSimpleData(e){const t=T(e);if(g.includes(t))return e.data;let n=this._dataCache.get(e.data);if(n&&this._seriesChangedFromPromises.has(e.data))return n;if(n||(n=[],this._dataCache.set(e.data,n),e.simpleData=n),"object_observable"===t||"tuple_observable"===t){let t=this._observablesToSeries.get(e.data);if(t){const i=t.values().next().value;if(n=i.simpleData,!n)throw new Error(`Cannot find simpleData in ${i.name||i.yKey||i.data}`);this._dataCache.set(e.data,n),e.simpleData=n}else t=new Set,e.simpleData=n,this._observablesToSeries.set(e.data,t);t.add(e),this._listenToObservableData({observable:e.data,currentData:n})}return"generator"===t&&(this._generatorsToSeries.has(e.data)||this._generatorsToSeries.set(e.data,new Set),this._generatorsToSeries.get(e.data).add(e),this._generators.has(e.data)||(this._generators.add(e.data),this._callGenerator(e.data))),n}_listenToPromise(e,t){t.then(t=>{this._dataCache.set(e.data,t),e.simpleData=t,this._seriesChangedFromPromises.add(e.data),this._dataChanged=!0,this._markDirty()})}_listenToObservableData({observable:e,currentData:t}){if(this._subscriptions.has(e))return;this._subscriptions.set(e,!0);const n=e.observe(n=>{if(Array.isArray(n))for(let e of n)t.push(e);else t.push(n);this.emit("observable_modified",e),this.markObservableModified(e)});this._subscriptions.set(e,n)}markObservableModified(e){if(this._observablesToSeries.has(e)){for(let t of this._observablesToSeries.get(e))this._modifiedSeries.add(t);this._markDirty()}}_unsubscribeFromStaleSeries(){const e=new Set(this._series);for(let[t,n]of this._observablesToSeries){let i=!1;for(let t of n)if(e.has(t)){i=!0;break}i||(this._subscriptions.get(t).unsubscribe(),this._subscriptions.delete(t),this._observablesToSeries.delete(t))}for(let[t,n]of this._generatorsToSeries){let i=!1;for(let t of n)if(e.has(t)){i=!0;break}i||(this._generatorsToSeries.delete(t),this._generators.delete(t),this._generatorCallArgs.delete(t))}}async _callGenerator(e){const t={minX:this._selection.minX,maxX:this._selection.maxX,sizing:this.primaryRenderer.sizing};if(i=t,void 0===(n=this._generatorCallArgs.get(e))||void 0===i?n===i:n.minX===i.minX&&n.maxX===i.maxX&&n.sizing.elementWidth===i.sizing.elementWidth&&n.sizing.renderWidth===i.sizing.renderWidth)return;var n,i;this._generatorCallArgs.set(e,t);const r=await Promise.resolve(e(t));if(r&&this._generatorsToSeries.has(e))if(this._dataChanged=!0,this._markDirty(),"function"==typeof r.observe){const t=[];this._dataCache.set(e,t);for(let n of this._generatorsToSeries.get(e))n.simpleData=t;for(let t of this._generatorsToSeries.get(e))this._observablesToSeries.has(r)||this._observablesToSeries.set(r,new Set),this._observablesToSeries.get(r).add(t);this._listenToObservableData({observable:r,currentData:t})}else{this._dataCache.set(e,r);for(let t of this._generatorsToSeries.get(e))t.simpleData=r}}_callGenerators(){for(let e of this._generators)this._callGenerator(e)}_recalculateTooltips(){this.primaryRenderer&&this.primaryRenderer.sizing&&(this._tooltipState=function({mousePresent:e,mouseX:t,mouseY:n,sizing:i,series:r,alwaysTooltipped:o,savedTooltips:a,allTooltipped:s,closestSpacing:l}){a=a.filter(e=>e.series.axis);for(let e of a)Ne({mouseX:t,mouseY:n,sizing:i},e);if(!e)return{mouseX:t,mouseY:n,elementWidth:i.elementWidth,elementHeight:i.elementHeight,tooltips:[...a]};const h=[];let c=1/0;for(let e=0;e<r.length;e++){const a=r[e];if(a.hidden)continue;const g=a.axis,A=g.scale,d=g.currentBounds,{minY:p,maxY:u}=Oe({...d,scale:A}),m=t/i.elementWidth*(d.maxX-d.minX)+d.minX;let f=a.inDataSpace;if(a.ignoreDiscontinuities&&(f=f.filter(e=>"number"==typeof e[1])),0===f.length)continue;let C=f[0][0],x=f[f.length-1][0];C instanceof Date&&(C=C.getTime()),x instanceof Date&&(x=x.getTime());const b=0;if(m<C-b||m>x+b)continue;const y=Me(f,m,{returnIndex:!0}),_=f[y];if(!_)continue;const[B,v]=_;if(null===B)continue;let w=(B-d.minX)/(d.maxX-d.minX)*i.elementWidth;const E=(1-(("log"===A?Math.log10(v):v)-p)/(u-p))*i.elementHeight;if(E>i.elementHeight||E<0)continue;const k=o.has(a)||s;let S=20,T=20,z=20;if("bar"===a.rendering){const e=a.axis.series.filter(e=>"bar"===e.rendering),t=e.indexOf(a),n=e.length;let r=null;for(const t of e){const e=t.dataBounds?.closestSpacing;null!=e&&e>0&&(null===r||e>r)&&(r=e)}const{totalBarWidth:o,barWidth:s}=H({closestSpacing:r||l,bounds:d,sizing:i,axisSeriesCount:n});w-=o/2/i.pixelRatio,w+=s*(t+.5)/i.pixelRatio,S=s/2/i.pixelRatio,T=100,z=S+T}const R=Math.abs(w-t),X=Math.abs(E-n),Y=Math.sqrt(R**2+(E-n)**2);if(!k&&(R>S||X>T||Y>z))continue;let P,M;const F=a.simpleData||a.data,L=F.length&&!!a.hasEnum;if(a.xLabel||a.yLabel||L){let e;e=F.length===f.length?F[y]:$e(F,{series:a,inDataSpace:f})[y][1],a.xLabel?P=e[a.xLabel]:a.hasXEnum&&(P=We(e,a)),a.yLabel?M=e[a.yLabel]:L&&(M=Ge(e,a))}Y<c&&(c=Y);let O=(0,D.default)(a.color,e,a.multigrapherSeriesIndex);v<0&&a.negativeColor?O=a.negativeColor:0===v&&a.zeroLineColor&&(O=a.zeroLineColor);const I=a.followingMouseTooltip&&o.has(a),$=isNaN(E)?i.elementHeight/2:E;h.push({pixelWidth:i.elementWidth,pixelX:w,pixelY:$,tooltipPixelY:I?n:$,x:B,y:v,color:O,distance:Y,xDistance:R,index:e,series:a,xLabel:P,yLabel:M,fullYPrecision:a.fullYPrecision,ignoreYDistanceCheck:k})}const g=h.filter(({distance:e,ignoreYDistanceCheck:t})=>e===c||t).sort((e,t)=>t.distance-e.distance);return{mousePresent:e,mouseX:t,mouseY:n,elementWidth:i.elementWidth,elementHeight:i.elementHeight,unsavedTooltipsCount:g.length,tooltips:[...a,...g]}}({mousePresent:this._tooltipState.mousePresent,mouseX:this._tooltipState.mouseX,mouseY:this._tooltipState.mouseY,sizing:this.primaryRenderer.sizing,series:this._series,alwaysTooltipped:this._alwaysTooltipped,savedTooltips:this._savedTooltips,allTooltipped:this._tooltipAllNext,closestSpacing:this._globalBounds.closestSpacing}),this._tooltipAllNext=!1,this.deferredEmit("tooltip_state_changed",this._tooltipState,this._tooltipStateArg),this._tooltipStateArg=null)}_recalculateContextMenu(){if(!this.primaryRenderer||!this.primaryRenderer.sizing)return;const e=this.primaryRenderer.boundingRect,t=this.primaryRenderer.sizing;let n=null,i=null;for(let r of this._series){const o=r.axis.currentBounds;i=this._contextMenuPosition.x-e.left,this._contextMenuPosition.x>2*(e.right-t.elementWidth)&&(i-=130),n="timestamp"===r.xKey||"time"===r.xKey||"date"===r.xKey?new Date((this._contextMenuPosition.x-e.left)/t.elementWidth*(o.maxX-o.minX)+o.minX):(this._contextMenuPosition.x-e.left)/t.elementWidth*(o.maxX-o.minX)+o.minX}this._contextMenuPosition={x:i,y:this._contextMenuPosition.y-e.top,showing:this._contextMenuPosition.showing,value:n},this.deferredEmit("context_menu_position_changed",this._contextMenuPosition)}_recalculateAnnotations(){this.primaryRenderer&&this.primaryRenderer.sizing&&(this._annotationsState=function({annotations:e,series:t,sizing:n,selection:i}){const r=new Set(t.map((e,t)=>({name:He(e,t),hidden:e.hidden})).filter(({hidden:e})=>!e).map(({name:e})=>e)),{elementWidth:o}=n,{minX:a,maxX:s}=i,l=s-a;return 0===l?{annotations:[],elementWidth:o}:{annotations:e.filter(e=>{if(!e.series)return!0;for(let t of e.series)if(r.has(t))return!0;return!1}).map(e=>{const t=void 0!==e.startX&&void 0!==e.endX,n=void 0!==e.x;let i=e.startX,r=e.endX;if(!t&&n)i=e.x,r=e.x;else if(!t&&!n)return null;const s=e=>"string"==typeof e?new Date(e).valueOf():e instanceof Date?e.valueOf():e;let h=s(i),c=s(r);h>c&&([h,c]=[c,h]);let g=(h-a)/l*o,A=(c-a)/l*o;g=Math.max(0,Math.min(o,g)),A=Math.max(0,Math.min(o,A));let d=A-g;return d<1&&A>0&&g<o&&(!t&&n?(d=1,g-=.5):d=t?1:0),g=Math.max(0,Math.min(o-d,g)),d<=0?null:{...e,isRange:t,pixelStartX:g,pixelWidth:d}}).filter(e=>null!==e),elementWidth:o}}({annotations:this._annotations,series:this._series,sizing:this.primaryRenderer.sizing,selection:this._selection}),this.deferredEmit("annotations_changed",this._annotationsState))}_onDataChange(){this._expandYWith=[];const e=[];for(let t of this._series){if(t.hidden)continue;const n=this._seriesToSimpleData(t),i=ke({...t,data:n},{stateController:this});let r,o,a,s;Array.isArray(i)?(r=i,o=[],a=null,s=null):(r=i.data,o=i.rangeValues||[],a=i.windDirections||null,s=i.windData||null),t.inDataSpace=r,t.windDirections=a,t.windData=s,t.simpleDataSliceStart=n.length,t._rangeValues=o,r.map(([e,t])=>t).filter(e=>"number"==typeof e);const l=r.map(([e,t])=>[e,t]);for(let e of o)l.push([null,e]);t.dataBounds=Xe(l,{rangeValues:o}),"bar"===t.rendering&&(t.dataBounds=Pe(t.dataBounds,{extendXForNBars:t.inDataSpace.length,expandYWith:t.expandYWith})),e.push(t.dataBounds),t.expandYWith&&this._expandYWith.push(t.expandYWith)}this._unsubscribeFromStaleSeries(),this._dataBounds=Ye(e),this._recalculateSelection({disableSwap:!0});for(let e of this._series)e.hidden||(e.selectedBounds=Xe(e.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),e.hasAreaBottom&&(e.selectedBoundsAreaTop=e.selectedBounds,e.selectedBoundsAreaBottom=Xe(e.inSelectedSpaceAreaBottom.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),e.selectedBounds=Ye([e.selectedBoundsAreaTop,e.selectedBoundsAreaBottom])));this._recalculateAxisBounds();for(let e of this._series)e.hidden||(this._calculatePrimarySizeDependents(e,{dataChanged:!0}),this._calculateRangeGraphSizeDependents(e,{dataChanged:!0}))}_onDataAdd(e){const t=new Map,n=new Set,i=new Set;for(let t of e)i.add(t);for(let i of e){if(n.add(i.axis),!i.inDataSpace)throw new Error("inDataSpace must be present for onDataAdd to be called");const e=this._seriesToSimpleData(i);let r;i.inDataSpace.length&&(r=i.inDataSpace[i.inDataSpace.length-1][1]);const o=ke(i,{data:e.slice(i.simpleDataSliceStart||0),valueXStart:i.inDataSpace.length,prevY:r,stateController:this});if(t.set(i,o),i.simpleDataSliceStart=e.length,o.length<32)i.inDataSpace.push(...o);else for(let e of o)i.inDataSpace.push(e);let a=Xe(o);"bar"===i.rendering&&(a=Pe(a,{extendXForNBars:i.inDataSpace.length,expandYWith:i.expandYWith})),i.dataBounds=Ye([i.dataBounds,a]),this._dataBounds=Ye([this._dataBounds,a]),i.newPointCount=o.length,i.newDataBounds=a}const r=this._selection;this._recalculateSelection();for(let n of e){if(!n.inSelectedSpace.data.length){n.selectedBounds=Xe(n.inSelectedSpace.data);continue}const e=n.inSelectedSpace.data[0][0],i=n.inSelectedSpace.data[n.inSelectedSpace.data.length-1][0];if(!(r.minX>=e&&r.maxX<=i)||100!==this._percentile){n.selectedBounds=Xe(n.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),n.hasAreaBottom&&(n.selectedBoundsAreaTop=n.selectedBounds,n.selectedBoundsAreaBottom=Xe(n.inSelectedSpaceAreaBottom.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),n.selectedBounds=Ye([n.selectedBoundsAreaTop,n.selectedBoundsAreaBottom]));continue}const o=t.get(n).filter(e=>e[0]>=this._selection.minX&&e[0]<=this._selection.maxX);n.newSelectedData=o,n.selectedBounds=Ye([n.selectedBounds,Xe(o)])}this._recalculateAxisBounds(),this.deferredPriorityEmit("axis_bounds_changed",this._axes.map(({currentBounds:e})=>e));for(let e of n)for(let t of e.series)this._calculatePrimarySizeDependents(t),this._calculateRangeGraphSizeDependents(t)}_recalculateAxisBounds(){for(let e of this._axes){if(this._selection.fixedY||!this._autoscaleY){e.targetBounds=this._selection,e.targetBounds.byAxis&&(e.targetBounds=e.targetBounds.byAxis[e.axisIndex]);const t=[];for(let n of e.series)if(n._rangeValues&&n._rangeValues.length>0){const i=[];for(let t=0;t<n.inDataSpace.length;t++){const[r,o]=n.inDataSpace[t];let a=r,s=e.targetBounds.minX,l=e.targetBounds.maxX;if(r instanceof Date&&(a=r.valueOf()),s instanceof Date&&(s=s.valueOf()),l instanceof Date&&(l=l.valueOf()),null!==s&&null!==l&&a>=s&&a<=l){const e=2*t;e<n._rangeValues.length&&(i.push(n._rangeValues[e]),e+1<n._rangeValues.length&&i.push(n._rangeValues[e+1]))}}i.length>0&&t.push(...i)}if(t.length>0){const n=t.filter(e=>"number"==typeof e);e.currentBounds={...e.targetBounds,minY:null===e.targetBounds.minY?Math.min(...n):e.targetBounds.minY,maxY:null===e.targetBounds.maxY?Math.max(...n):e.targetBounds.maxY}}else e.currentBounds=e.targetBounds;continue}const t=[],n=[];for(let i of e.series)if(t.push(i.selectedBounds),i.expandYWith&&n.push(...i.expandYWith),"bar"===i.rendering&&n.push(i.selectedBounds.minY,i.selectedBounds.maxY),i._rangeValues&&i._rangeValues.length>0){const e=[];for(let t=0;t<i.inDataSpace.length;t++){const[n,r]=i.inDataSpace[t];let o=n,a=i.selectedBounds.minX,s=i.selectedBounds.maxX;if(n instanceof Date&&(o=n.valueOf()),a instanceof Date&&(a=a.valueOf()),s instanceof Date&&(s=s.valueOf()),null!==a&&null!==s&&o>=a&&o<=s){const n=2*t;n<i._rangeValues.length&&(e.push(i._rangeValues[n]),n+1<i._rangeValues.length&&e.push(i._rangeValues[n+1]))}}e.length>0&&n.push(...e)}e.selectedDataBounds=Ye(t),e.targetBounds=e.currentBounds=Pe(e.selectedDataBounds,{expandYWith:n})}this.deferredPriorityEmit("axis_bounds_changed",this._axes.map(({currentBounds:e})=>e))}_recalculateSelection({disableSwap:e=!1}={}){this._globalBounds=Pe(this._dataBounds,{expandYWith:this._expandYWith.flat()}),this.deferredPriorityEmit("global_bounds_changed",this._globalBounds),this._selection=function(e,t){const n=Object.assign({},e,t(e));return n.maxX instanceof Date&&(n.maxX=n.maxX.valueOf()),n.minX instanceof Date&&(n.minX=n.minX.valueOf()),n.maxX<n.minX&&(n.maxX=n.minX),n.minX<e.minX&&(n.minX=e.minX),n.maxX>e.maxX&&(n.maxX=e.maxX),n}(this._globalBounds,this._boundsCalculator),this.deferredPriorityEmit("selection_changed",this._selection);for(let t of this._series)t.hidden||(t.inSelectedSpace=Fe({data:t.hasAreaBottom?t.inDataSpace.filter((e,t)=>t%2==1):t.inDataSpace,swap:e?null:t.inSelectedSpace,minX:this._selection.minX,maxX:this._selection.maxX,ignoreDiscontinuities:t.ignoreDiscontinuities,square:t.square}),t.hasAreaBottom&&(t.inSelectedSpaceAreaBottom=Fe({data:t.inDataSpace.filter((e,t)=>t%2==0),swap:e?null:t.inSelectedSpaceAreaBottom,minX:this._selection.minX,maxX:this._selection.maxX,ignoreDiscontinuities:t.ignoreDiscontinuities,square:t.square})))}_render(){if(this.primaryRenderer&&this.primaryRenderer.sizing){this.primaryRenderer.clear(),this.rangeGraphRenderer&&this.rangeGraphRenderer.clear();for(let e of this._series){if(e.hidden)continue;const t=e.shadowColor||{day:"white",export:"transparent",night:"black"}[this._theme]||"black",n=void 0;if(this.primaryRenderer.renderBackground(e.inBackgroundSpacePrimary),this.primaryRenderer.render(e,e.inRenderSpacePrimary,{highlighted:this._highlightedSeries===e.index,showIndividualPoints:this._showIndividualPoints,shadowColor:t,shadowBlur:n,defaultLineWidth:this._defaultLineWidth,globalBounds:this._globalBounds,inRenderSpaceAreaBottom:e.inRenderSpacePrimaryAreaBottom}),this.rangeGraphRenderer&&this.rangeGraphRenderer.sizing){const t={...this._globalBounds,minY:void 0!==this._globalBounds.unscaledMinY?this._globalBounds.unscaledMinY:this._globalBounds.minY,maxY:void 0!==this._globalBounds.unscaledMaxY?this._globalBounds.unscaledMaxY:this._globalBounds.maxY};this.rangeGraphRenderer.render(e,e.inRenderSpaceRangeGraph,{shadowColor:"transparent",shadowBlur:0,width:1,showIndividualPoints:!1,bounds:t,globalBounds:t,inRenderSpaceAreaBottom:e.inRenderSpaceRangeGraphAreaBottom})}}}}_calculatePrimarySizeDependents(e,{dataChanged:t=!1}={}){if(!this.primaryRenderer||!this.primaryRenderer.sizing)return;if(!e){for(let e of this._series)this._calculatePrimarySizeDependents(e);return}if(!this._series.includes(e))throw new Error("Series no longer exists");if(e.hidden)return;const{currentBounds:n,scale:i}=e.axis,r=Math.ceil(this.primaryRenderer.sizing.renderWidth/2),o=Math.ceil(this.primaryRenderer.sizing.renderHeight),a={minX:n.minX,maxX:n.maxX,renderWidth:r,dataChanged:t};e.inCondensedSelectedSpacePrimary=qe({data:e.inSelectedSpace.data,swap:e.inCondensedSelectedSpacePrimary,...a});const s={minX:n.minX,maxX:n.maxX,minY:n.minY,maxY:n.maxY,renderWidth:r,renderHeight:o,scale:i,dataChanged:t};e.inRenderSpacePrimary=Ie({data:e.inCondensedSelectedSpacePrimary.data,swap:e.inRenderSpacePrimary,...s}),e.inBackgroundSpacePrimary=Ve({data:e.inCondensedSelectedSpacePrimary.data,background:e.background,swap:e.inBackgroundSpacePrimary,minX:n.minX,maxX:n.maxX}),e.hasAreaBottom&&(e.inCondensedSelectedSpacePrimaryAreaBottom=qe({data:e.inSelectedSpaceAreaBottom.data,swap:e.inCondensedSelectedSpacePrimaryAreaBottom,...a}),e.inRenderSpacePrimaryAreaBottom=Ie({data:e.inCondensedSelectedSpacePrimaryAreaBottom.data,swap:e.inRenderSpacePrimaryAreaBottom,...s}),e.inBackgroundSpacePrimaryAreaBottom=Ve({data:e.inCondensedSelectedSpacePrimaryAreaBottom.data,background:e.background,swap:e.inBackgroundSpacePrimaryAreaBottom,minX:n.minX,maxX:n.maxX}))}_calculateRangeGraphSizeDependents(e,{dataChanged:t=!1}={}){if(!this.rangeGraphRenderer||!this.rangeGraphRenderer.sizing)return;if(!e){for(let e of this._series)this._calculateRangeGraphSizeDependents(e);return}if(!this._series.includes(e))throw new Error("Series no longer exists");if(e.hidden)return;const{scale:n}=e.axis,i=this._globalBounds,r={...i,minY:void 0!==i.unscaledMinY?i.unscaledMinY:i.minY,maxY:void 0!==i.unscaledMaxY?i.unscaledMaxY:i.maxY},o=Math.ceil(this.rangeGraphRenderer.sizing.renderWidth/2),a=Math.ceil(this.rangeGraphRenderer.sizing.renderHeight),s={minX:i.minX,maxX:i.maxX,ignoreDiscontinuities:e.ignoreDiscontinuities,square:e.square};e.inSelectedSpaceRangeGraph=Fe({data:e.hasAreaBottom?e.inDataSpace.filter((e,t)=>t%2==1):e.inDataSpace,swap:e.inSelectedSpaceRangeGraph,...s});const l={minX:i.minX,maxX:i.maxX,renderWidth:o,dataChanged:t};e.inCondensedSelectedSpaceRangeGraph=qe({data:e.inSelectedSpaceRangeGraph.data,swap:e.inCondensedSelectedSpaceRangeGraph});const h={minX:r.minX,maxX:r.maxX,minY:r.minY,maxY:r.maxY,renderWidth:o,renderHeight:a,scale:n,dataChanged:t};e.inRenderSpaceRangeGraph=Ie({data:e.inCondensedSelectedSpaceRangeGraph.data,swap:e.inRenderSpaceRangeGraph,...h}),e.hasAreaBottom&&(e.inSelectedSpaceRangeGraphAreaBottom=Fe({data:e.inDataSpace.filter((e,t)=>t%2==0),swap:e.inSelectedSpaceRangeGraphAreaBottom,...s}),e.inCondensedSelectedSpaceRangeGraphAreaBottom=qe({data:e.inSelectedSpaceRangeGraphAreaBottom.data,swap:e.inCondensedSelectedSpaceRangeGraphAreaBottom,...l}),e.inRenderSpaceRangeGraphAreaBottom=Ie({data:e.inCondensedSelectedSpaceRangeGraphAreaBottom.data,swap:e.inRenderSpaceRangeGraphAreaBottom,...h}))}_createAxis({side:e}){const t={series:[],scale:"linear",side:e,axisIndex:this._axes.length};return this._axes.push(t),t}_moveAxis(e,t){if(!this._series.includes(e))throw new Error("Series no longer exists");let n;if(n="new-left"===t||"new-right"===t?this._createAxis({side:t.split("-")[1]}):this._axes[parseInt(t)],e.axis===n)return;const i=e.axis,r=i.series.indexOf(e);if(-1===r)throw new Error("Series not present in axis");i.series.splice(r,1),n.series.push(e),e.axis=n,this._dataChanged=!0,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("left_axes_changed",this.leftAxes),this.deferredEmit("right_axes_changed",this.rightAxes),this.deferredEmit("exported_axes_changed",this.exportedAxes),this._markDirty()}_assignAxisTo(e){if(e.axis&&"object"==typeof e.axis)return;let t;if(e.axisIndex){const{axisIndex:n}=e;t="new-left"===n||"new-right"===n?this._createAxis({side:n.split("-")[1]}):this._axes[parseInt(n)]}else if(e.axis){e.originalAxis=e.axis;let[n,i]=e.axis.split("-");t=function({axes:e,side:t,number:n}){let i;n=n&&parseInt(n)||0;let r=0;for(let o of e)if(o.side===t){if(r===n){i=o;break}r++}return i}({axes:this._axes,side:n,number:i}),t||(t=this._createAxis({side:n}))}else t=this._axes[0];t.series.push(e),e.axis=t,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("exported_axes_changed",this.exportedAxes),"left"===e.axis.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_removeSeries(e){this._seriesFromOriginalSeries.delete(e.originalSeries);const{axis:t,data:n}=e;t.series.splice(t.series.indexOf(e),1);const i=this._observablesToSeries.get(n);i&&(i.delete(e),0===i.size&&this._observablesToSeries.delete(n)),this._generatorsToSeries.has(n)&&(this._generatorsToSeries.get(n).delete(e),0===this._generatorsToSeries.get(n).size&&(this._generatorsToSeries.delete(n),this._generators.delete(n))),this._alwaysTooltipped.delete(e),e.axis=e.originalAxis,delete e.originalAxis,delete e.inDataSpace,delete e.inSelectedSpace,delete e.inValueSpacePrimary,delete e.inValueSpaceRangeGraph,delete e.inRenderSpacePrimary,delete e.inRenderSpaceRangeGraph,delete e.newPointCount,delete e.newDataBounds,delete e.simpleDataSliceStart,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("exported_axes_changed",this.exportedAxes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_hideSeries(e){const{axis:t}=e,n=t.series.indexOf(e);e.indexInAxis=n,t.series.splice(n,1),this.deferredEmit("axes_changed",this._axes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_showSeries(e){const{axis:t}=e;t.series.splice(e.indexInAxis,0,e),this.deferredEmit("axes_changed",this._axes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}get boundCalculator(){return this._boundsCalculator}get axes(){return this._axes}get leftAxes(){const e=this._axes.filter(({side:e,series:t})=>"left"===e&&t.length>0).reverse();return 0===e.length&&0===this.rightAxes.length&&e.push(this._axes[0]),e}get rightAxes(){return this._axes.filter(({side:e,series:t})=>"right"===e&&t.length>0)}get bounds(){return this._axes.map(({targetBounds:e})=>e)}get selection(){return this._selection}get globalBounds(){return this._globalBounds}get series(){return this._series}get highlightedSeries(){return this._highlightedSeries}get showIndividualPoints(){return this._showIndividualPoints}get autoscaleY(){return this._autoscaleY}get boundHistory(){return{hasNextBounds:this._boundsIndex<this._boundsHistory.length-1,hasPreviousBounds:this._boundsIndex>0}}get tooltipState(){return this._tooltipState}get contextMenuState(){return this._contextMenuPosition}get alwaysTooltipped(){return this._alwaysTooltipped}get draggingY(){return this._draggingY}get averageLoopTime(){return function(e){const t={};for(let n of e)for(let[e,i]of Object.entries(n))t[e]=(t[e]||0)+i;for(let[n,i]of Object.entries(t))t[n]=i/e.length;return t}(this._timingBuffer)}get exportedAxes(){const e=new Map;let t=0,n=0;for(let i of this._axes){let r;"left"===i.side?(r=`left-${t}`,t++):(r=`right-${n}`,n++);for(let t of i.series)e.set(t,r)}return this.series.map(t=>({...t.originalSeries,axis:e.get(t)}))}get percentile(){return this._percentile}get percentileAsymmetry(){return this._percentileAsymmetry}get showingOptions(){return this._showingOptions}get maxPrecision(){return this._maxPrecision}get showingSidebar(){return this._showingSidebar}get showingAnnotations(){return this._showingAnnotations}get userCreatedSeries(){return this._series.filter(e=>e.userCreated)}get grapherID(){return this._grapherID}get annotationState(){return this._annotationsState}get sizing(){return this.primaryRenderer&&this.primaryRenderer.sizing}get theme(){return this._theme}get exportMode(){return this._exportMode}get enumMap(){return this._enumMap}get hasXEnum(){return this._hasXEnum}markSizeChanged(e){e===this.primaryRenderer?(this.deferredEmit("primary_size_change",this.primaryRenderer.sizing),this.deferredEmit("primary_bounding_rect_change",this.primaryRenderer.boundingRect),this._primarySizeChanged=!0):e===this.rangeGraphRenderer&&(this.deferredEmit("range_graph_size_change",this.rangeGraphRenderer.sizing),this.deferredEmit("range_graph_bounding_rect_change",this.rangeGraphRenderer.boundingRect),this._rangeGraphSizeChanged=!0),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0,this._mustCallGenerators=!0,this._markDirty()}set theme(e){this._theme=e,this._mustRerender=!0,this.deferredEmit("theme_change",this._theme),this._markDirty()}set exportMode(e){this._exportMode=e,e?(this._nonExportTheme=this.theme,this.theme="export"):this.theme=this._nonExportTheme,this.deferredEmit("export_mode_change",this._exportMode),this._markDirty()}set defaultLineWidth(e){this._defaultLineWidth=e,this._mustRerender=!0,this._markDirty()}set boundCalculator(e){e&&e!==this._boundsCalculator&&(e.debounceHistory?(clearTimeout(this._boundingCalculatorDebouncer),this._boundingCalculatorDebouncer=setTimeout(()=>{this._addBoundCalculatorToHistory(e)},250)):this._addBoundCalculatorToHistory(e),this._boundsCalculator=e,this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this._dataChanged=!0,this._mustCallGenerators=!0,this._markDirty())}set customBoundsSelectors(e){this._customBoundsSelectors=this._customBoundsSelectors||{};const t={};for(let{label:n,calculator:i}of e)t[n]=i,this._boundsCalculator===this._customBoundsSelectors[n]&&this._boundsCalculator!==i&&(this.boundCalculator=i);this._customBoundsSelectors=t}_addBoundCalculatorToHistory(e){this._boundsIndex++,this._boundsHistory=this._boundsHistory.slice(0,this._boundsIndex),this._boundsHistory.push(e),this.emit("bound_history_changed",this.boundHistory)}registerSeriesClick(e){this.emit("series_click",this._series[e],e)}setHighlightedSeries(e){this._highlightedSeries=e,this.deferredEmit("highlighted_series_changed",e),this._mustRerender=!0,this._markDirty()}toggleIndividualPoints(){this._showIndividualPoints=!this._showIndividualPoints,this.deferredEmit("show_individual_points_changed",this._showIndividualPoints),this._mustRerender=!0,this._markDirty()}toggleYAutoscaling(){this._autoscaleY=!this._autoscaleY,this.deferredEmit("autoscale_y_changed",this._autoscaleY),this._markDirty()}toggleExportMode(){this.exportMode=!this._exportMode}setBoundsFromSelection(e){this.boundCalculator=function({minPixelX:e,maxPixelX:t,minPixelY:n,maxPixelY:i},{elementWidth:r,elementHeight:o,selection:a,axes:s}){if(Math.abs(t-e)<1||Math.abs(i-n)<1)return;const l=e/r*(a.maxX-a.minX)+a.minX,h=t/r*(a.maxX-a.minX)+a.minX,c=[];for(let{currentBounds:e,scale:t}of s){const r=Oe({...e,scale:t});let a=(1-n/o)*(r.maxY-r.minY)+r.minY,s=(1-i/o)*(r.maxY-r.minY)+r.minY;"log"===t&&(s=Math.pow(10,s),a=Math.pow(10,a)),c.push({minX:l,maxX:h,minY:s,maxY:a})}return()=>({minX:l,maxX:h,byAxis:c})}(e,{elementWidth:this.primaryRenderer.sizing.elementWidth,elementHeight:this.primaryRenderer.sizing.elementHeight,selection:this._selection,axes:this._axes})}nextBounds(){this._boundsIndex++,this._boundsCalculator=this._boundsHistory[this._boundsIndex],this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this.deferredEmit("bound_history_changed",this.boundHistory),this._dataChanged=!0,this._markDirty()}previousBounds(){this._boundsIndex--,this._boundsCalculator=this._boundsHistory[this._boundsIndex],this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this.deferredEmit("bound_history_changed",this.boundHistory),this._dataChanged=!0,this._markDirty()}setLabel({axisIndex:e,label:t}){this._axes[e].label=t,this.deferredEmit("axes_changed",[...this._axes]),this._markDirty()}toggleScale({axisIndex:e}){const t=this._axes[e].scale;this._axes[e].scale="log"===t?"linear":"log",this._dataChanged=!0,this.deferredEmit("axes_changed",[...this._axes]),this._markDirty()}recalculateTooltips(){this.primaryRenderer.recalculatePosition(),this.setTooltipMousePosition({clientX:this._tooltipClientX,clientY:this._tooltipClientY,shiftKey:this.shiftKeyPressedOnMove,tooltipAllNext:this._tooltipAllNext,tooltipStateArg:this._tooltipStateArg})}setTooltipMousePosition({clientX:e,clientY:t,shiftKey:n,mouseX:i,mouseY:r,tooltipAllNext:o,tooltipStateArg:a}){const s=this.primaryRenderer.sizing;if(!s)return;if("number"==typeof e){if(this._tooltipClientX=e,e<s.boundingRect.left||e>s.boundingRect.right)return void this.showOnlySavedTooltips()}else if("number"!=typeof r)return;if("number"==typeof t){if(this._tooltipClientY=t,t<s.boundingRect.top||t>s.boundingRect.bottom)return void this.showOnlySavedTooltips()}else if("number"!=typeof r)return;const l=i||e-s.boundingRect.left,h=r||t-s.boundingRect.top;this._tooltipState.mousePresent&&l===this._tooltipState.mouseX&&h===this._tooltipState.mouseY||(this._tooltipsChanged=!0,this._tooltipState.mousePresent=!0,this._tooltipState.mouseX=l,this._tooltipState.mouseY=h,this.shiftKeyPressedOnMove=n,this._tooltipAllNext=o,this._tooltipStateArg=a,this._markDirty())}setContextMenuMousePosition({clientX:e,clientY:t}){this._contextMenuPosition={x:e,y:t,showing:!this._contextMenuPosition.showing},this._contextMenuChanged=!0,this._markDirty()}toggleAlwaysTooltipped(e,t){if(this._alwaysTooltipped.has(e))t?this._alwaysTooltipped.clear():this._alwaysTooltipped.delete(e);else if(t)for(let e of this._series)this._alwaysTooltipped.add(e);else this._alwaysTooltipped.add(e);this._tooltipsChanged=!0,this.deferredEmit("always_tooltipped_changed",this._alwaysTooltipped),this._markDirty()}showOnlySavedTooltips(e){this._tooltipState.mousePresent&&(this._tooltipsChanged=!0,this._tooltipState.mousePresent=!1,this._tooltipStateArg=e,this._markDirty())}registerClick({clientX:e}){if(!this._listeners.series_click)return;const t=this.primaryRenderer.boundingRect,n=this.primaryRenderer.sizing;for(let i of this._series){const r=i.axis.currentBounds,o=(e-t.left)/n.elementWidth*(r.maxX-r.minX)+r.minX;this.emit("series_click",{x:o,series:i})}}toggleTooltipSaved(){const e=this._savedTooltips;this._savedTooltips=function({currentTooltips:e,savedTooltips:t}){if(!e.length)return t;const n=e[e.length-1];if(n.xDistance>20||!n.ignoreYDistanceCheck&&n.distance>20)return t;const i=t.findIndex(e=>e.x===n.x&&e.y===n.y);return-1===i?[...t,n]:t.filter((e,t)=>t!==i)}({currentTooltips:this._tooltipState.tooltips,savedTooltips:this._savedTooltips}),this._tooltipsChanged=this._savedTooltips!==e,this._markDirty()}clearSavedTooltips(){0!==this._savedTooltips.length&&(this._savedTooltips=[],this._tooltipsChanged=!0,this._markDirty())}markDragStart(){this._draggingY||(this._draggingY=!0,this.deferredEmit("dragging_y_changed",this._draggingY),this._markDirty())}finalizeDrag(e,t,n){if(!this._draggingY)return;this._draggingY=!1,this.deferredEmit("dragging_y_changed",this._draggingY);const i=t&&0!==t,r=n===this._grapherID;i&&r?(this._moveAxis(e,t),this.deferredEmit("dragging_y_finalized",{draggedSeries:e,axisIndex:t,grapherID:n})):n&&this.deferredEmit("dragging_y_finalized",{draggedSeries:e,axisIndex:t,grapherID:n}),this._markDirty()}set timingFrameCount(e){"number"==typeof e&&(this._timingBuffer=[],this._timingIndex=0,this._timingFrameCount=e)}set percentile(e){void 0!==e&&(this.deferredEmit("percentile_changed",e),""===e&&(e=100),e=parseFloat(e),!isNaN(e)&&e<=100&&e>=0&&(this._percentile=e,this._dataChanged=!0),this._markDirty())}set percentileAsymmetry(e){void 0!==e&&(this.deferredEmit("percentile_asymmetry_changed",e),""===e&&(e=0),e=parseFloat(e),!isNaN(e)&&e<=50&&e>=-50&&(this._percentileAsymmetry=e,this._dataChanged=!0),this._markDirty())}set showingOptions(e){void 0!==e&&(this._showingOptions=e,this.deferredEmit("showing_options_changed",e),this._markDirty())}toggleShowingOptions(){this.showingOptions=!this.showingOptions}toggleMaxPrecision(){this._maxPrecision=!this._maxPrecision,this.deferredEmit("max_precision_changed",this._maxPrecision),this._markDirty()}toggleShowingAnnotations(){this._showingAnnotations=!this._showingAnnotations,this.deferredEmit("showing_annotations_changed",this._showingAnnotations),this._markDirty()}toggleShowingSidebar(){this._showingSidebar=!this._showingSidebar,this.deferredEmit("showing_sidebar_changed",this._showingSidebar),this._markDirty()}setShowing(e,t){e.hidden=!t,this._series=[...this._series],e.hidden?this._hideSeries(e):this._showSeries(e),this.deferredEmit("series_changed",this._series,{skipResize:!0}),this._dataChanged=!0,this._markDirty()}set annotations(e){this._annotations=e||[],this._annotationsChanged=!0,this._markDirty()}enumToNumber(e,t,n){const i=this._enumMap[e];if("number"==typeof i)return i;const r=Object.keys(this._enumMap).length;return this._enumMap[e]=r,this._series[t.index].hasEnum=!0,n&&(this._series[t.index].hasXEnum=!0,this._hasXEnum=!0,this.deferredEmit("has_x_enum_change",this._hasXEnum),this.deferredEmit("x_enum_map_change",this._enumMap)),this.deferredEmit("enum_map_change",this._enumMap),r}triggerResize(){this._mustResize=!0,this._markDirty()}}function Ke(e,t,i=null,r=[]){if("function"==typeof i){const e=i;i=()=>e}const[a,s]=o(i);return n(()=>{const n=e=>{if("function"==typeof e){const t=e;e=()=>t}s(e)};return e.on(t,n),()=>{e.off(t,n)}},[...r,s,e]),a}function Ze(e){return Ke(e,"primary_size_change",e.primaryRenderer?e.primaryRenderer.sizing:{elementWidth:0,elementHeight:0,renderWidth:0,renderHeight:0})}function Je(e){return Ke(e,"axes_changed",e.axes)}function Qe(e){return Ke(e,"series_changed",e.series)}function et(e){return Ke(e,"highlighted_series_changed",e.highlightedSeries)}function tt(e){return it(e).length}function nt(e){return rt(e).length}function it(e){return Ke(e,"right_axes_changed",e.rightAxes)}function rt(e){return Ke(e,"left_axes_changed",e.leftAxes)}function ot(e){return Ke(e,"selection_changed",e.selection)}function at(e){return Ke(e,"axis_bounds_changed",e.axes.map(({currentBounds:e})=>e))}function st(e){return Ke(e,"autoscale_y_changed",e.autoscaleY)}function lt(e){return Ke(e,"dragging_y_changed",e.draggingY)}function ht(e){return Ke(e,"showing_options_changed",e.showingOptions)}function ct(e){return Ke(e,"max_precision_changed",e.maxPrecision)}function gt(e){return Ke(e,"showing_sidebar_changed",e.showingSidebar)}function At(e){return Ke(e,"showing_annotations_changed",e.showingAnnotations)}function dt(e){return Ke(e,"primary_size_change",e.sizing)}function pt(e){return Ke(e,"theme_change",e.theme)}class ut extends e.PureComponent{render(){const{bodyHeight:t,annotationState:n}=this.props,{annotations:i,elementWidth:r}=n,o=i.filter(e=>void 0!==e.pixelStartX&&void 0!==e.pixelWidth);return e.createElement("div",{className:"grapher-annotations"},o.map(({pixelStartX:n,pixelWidth:i,content:o,isRange:a,lineOnly:s},l)=>{const h={left:n};if(a)return e.createElement("div",{key:`range-${l}`,className:"grapher-annotation grapher-annotation-range",style:h},e.createElement("div",{className:"annotation-range-marker",style:{width:i,height:t}}));{const a=s?i:Math.max(i,1),c={};if(o){c.top=21*l,c.position="absolute";const e=5.5*(o||"").length;r>0&&r-n<e+10?(c.left=-e-5,c.textAlign="right"):c.left=a+5}return e.createElement("div",{key:`point-${l}`,className:"grapher-annotation grapher-annotation-point",style:h},e.createElement("div",{className:"annotation-marker",style:{width:a,height:t}}),o&&!s&&e.createElement("div",{className:"annotation-text",style:c},o))}}))}}ut.propTypes={annotationState:c().shape({annotations:c().arrayOf(c().shape({pixelStartX:c().number,pixelWidth:c().number,content:c().string,isRange:c().bool,lineOnly:c().bool})).isRequired,elementWidth:c().number.isRequired}),bodyHeight:c().number};const mt=e.memo(ft);function ft({stateController:t,draggablePoints:n,onPointDrag:i,onDraggablePointsDoubleClick:r}){const o=at(t)[0],a=dt(t);if(!a)return null;const s=r&&(e=>{const t=(e.clientX-a.boundingRect.left)/a.elementWidth,n=1-(e.clientY-a.boundingRect.top)/a.elementHeight;r(e,{x:t*(o.maxX-o.minX)+o.minX,y:n*(o.maxY-o.minY)+o.minY})});return e.createElement("div",{className:"grapher-draggable-points",onDoubleClick:s},e.createElement("svg",{width:a.elementWidth,height:a.elementHeight},n.map((t,n)=>{const r=(t.x-o.minX)/(o.maxX-o.minX),s=1-(t.y-o.minY)/(o.maxY-o.minY);if(r<0||r>1||s<0||s>1)return null;const l=r*a.elementWidth,h=s*a.elementHeight,c=t.radius||5,g=t.fillColor||D.LINE_COLORS[0],A=t.strokeColor||"white",d=t.strokeWidth||1,p=t.onClick&&(e=>{t.onClick(e,t)}),u=t.onDoubleClick&&(e=>{e.stopPropagation(),t.onDoubleClick(e,t)});return e.createElement("circle",{key:n,cx:l,cy:h,r:c,fill:g,stroke:A,strokeWidth:d,onMouseDown:e=>{if(e.stopPropagation(),!i)return;const r=l-e.clientX,s=h-e.clientY,c=e=>{const l=(e.clientX+r)/a.elementWidth,h=1-(e.clientY+s)/a.elementHeight;i({index:n,point:t,x:l*(o.maxX-o.minX)+o.minX,y:h*(o.maxY-o.minY)+o.minY},e)},g=()=>{window.removeEventListener("mousemove",c),window.removeEventListener("mouseup",g)};window.addEventListener("mousemove",c),window.addEventListener("mouseup",g)},onClick:p,onDoubleClick:u})})))}ft.propTypes={stateController:c().instanceOf(je).isRequired,draggablePoints:k.DraggablePoints.isRequired,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func};const Ct=e.memo(xt);function xt({stateController:t,verticalLines:n,isRangeGraph:i,bounds:r,elementWidth:o,elementHeight:a}){r=r||at(t)[0];const s=dt(t);if(!s)return null;const l=n.filter(e=>!(i&&!e.onRangeGraph||e.onRangeGraphOnly&&!i));return 0===l.length?null:e.createElement("div",{className:"grapher-vertical-lines"},e.createElement("svg",{width:o||s.elementWidth,height:a||s.elementHeight},l.map((t,n)=>{i&&"object"==typeof t.onRangeGraph&&(t={...t,...t.onRangeGraph});const l=(t.x-r.minX)/(r.maxX-r.minX);if(l<0||l>1)return null;const h=l*(o||s.elementWidth);if("number"==typeof t.minPixelX&&h<t.minPixelX)return null;if("number"==typeof t.maxPixelX&&h>t.maxPixelX)return null;const c={stroke:t.color,strokeWidth:t.width,...t.style||{}},g={fill:t.color,...t.markerStyle||{}},A={fontSize:"12px",fill:t.color,stroke:"none",textAnchor:"middle",dominantBaseline:"hanging",...t.textStyle||{}};let d=0;"number"==typeof t.lineTop?d=t.lineTop:t.text&&(d=18);let p=5;return"number"==typeof t.textTop&&(p=t.textTop),e.createElement(e.Fragment,{key:n},e.createElement("line",{x1:h,y1:d,x2:h,y2:a||s.elementHeight,style:c}),t.markTop&&e.createElement("polygon",{points:`${h-3},0 ${h+3},0 ${h},3`,style:g}),t.text&&e.createElement("text",{x:h,y:p,style:A},t.text))})))}function bt(){return bt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},bt.apply(null,arguments)}xt.propTypes={stateController:c().instanceOf(je).isRequired,verticalLines:k.VerticalLines.isRequired,isRangeGraph:c().bool,bounds:c().object,elementWidth:c().number,elementHeight:c().number};const yt=e.memo(_t);function _t({stateController:i,webgl:r,bodyHeight:a,boundsSelectionEnabled:s,showTooltips:l,showContextMenu:h=!0,tooltipOptions:c,checkIntersection:g,draggablePoints:A,onPointDrag:d,onDraggablePointsDoubleClick:p,verticalLines:u,clockStyle:m,timeZone:f,onPointClick:C}){const x=t(e=>{if(i.primaryRenderer&&i.primaryRenderer.dispose(),!e)return;const t=new de({stateController:i,canvasElement:e,webgl:r,checkIntersection:g});i.primaryRenderer=t,t.resize()},[r,i]),[b,y]=o({showing:!1,start:{},style:{}}),_=st(i),B=Je(i).length,v=function(e){return Ke(e,"tooltip_state_changed",e.tooltipState)}(i),w=ct(i),E=At(i),k=function(e){return Ke(e,"annotations_changed",e.annotationState)}(i),S=function(e){return Ke(e,"context_menu_position_changed",e.contextMenuState)}(i);return n(()=>{const e=()=>{l&&i.recalculateTooltips()},t=e=>{l&&i.setTooltipMousePosition({clientX:e.clientX,clientY:e.clientY,shiftKey:e.shiftKey})},n=e=>e.touches?.[0]||e.changedTouches?.[0],r=e=>{if(!l)return;const t=n(e);t&&(i.setTooltipMousePosition({clientX:t.clientX,clientY:t.clientY}),e.cancelable&&e.target.closest(".graph-body")&&e.preventDefault())},o=e=>{if(!l)return;const t=n(e);t&&(i.setTooltipMousePosition({clientX:t.clientX,clientY:t.clientY}),e.cancelable&&e.target.closest(".graph-body")&&e.preventDefault())},a=()=>{i.showOnlySavedTooltips()};return window.addEventListener("scroll",e,{passive:!0}),window.addEventListener("mousemove",t,{passive:!0}),window.addEventListener("touchstart",r,{passive:!1}),window.addEventListener("touchmove",o,{passive:!1}),window.addEventListener("touchend",a,{passive:!0}),window.addEventListener("touchcancel",a,{passive:!0}),()=>{window.removeEventListener("scroll",e),window.removeEventListener("mousemove",t),window.removeEventListener("touchstart",r),window.removeEventListener("touchmove",o),window.removeEventListener("touchend",a),window.removeEventListener("touchcancel",a)}},[]),e.createElement("div",{className:"graph-body graph-body-primary",onMouseMove:e=>{if(b.showing){const t=i.primaryRenderer.boundingRect,n=e.clientX-t.left,r=e.clientY-t.top;y(({start:e})=>({showing:!0,start:e,style:{left:Math.min(n,e.x),top:_?0:Math.min(r,e.y),width:Math.abs(n-e.x),height:_?t.height:Math.abs(r-e.y)}}))}},onMouseLeave:()=>{i.setContextMenuMousePosition({showing:!1})},onMouseDown:e=>{if(!s)return;let t=e.target;for(let e=0;e<10&&t;e++){if(t.classList.contains("grapher-tooltip"))return;t=t.parentNode}const n=i.primaryRenderer.boundingRect,r={x:e.clientX-n.left,y:e.clientY-n.top};y({showing:!0,start:r,style:{left:r.x,top:r.y,width:0,height:0}});const o=e=>{if(window.removeEventListener("mouseup",o),!s)return;const t=e.clientX-n.left,a=e.clientY-n.top;i.setBoundsFromSelection({minPixelX:Math.min(t,r.x),maxPixelX:Math.max(t,r.x),minPixelY:Math.min(a,r.y),maxPixelY:Math.max(a,r.y)}),y({showing:!1,style:{}})};window.addEventListener("mouseup",o)},onClick:e=>{if(i.registerClick({clientX:e.clientX,clientY:e.clientY}),c&&c.savingDisabled)i.clearSavedTooltips();else if(e.target.closest(".grapher-context-menu")||i.setContextMenuMousePosition({showing:!1}),window.getSelection&&"Range"===window.getSelection().type||i.toggleTooltipSaved(),C){const t={},n=i.series;for(let e=0;e<n.length;e++){const r=n[e],o=i.sizing,a=r.axis.currentBounds,s=i.tooltipState.mouseX/o.elementWidth*(a.maxX-a.minX)+a.minX;let l=r.inDataSpace;r.ignoreDiscontinuities&&(l=l.filter(e=>"number"==typeof e[1]));const h=l[Me(l,s,{returnIndex:!0})];t[r.name]=h[0]}C(e,t)}},onDoubleClick:()=>{i.clearSavedTooltips()},onContextMenu:e=>{e.preventDefault(),!1!==h&&i.setContextMenuMousePosition({clientX:e.clientX,clientY:e.clientY,showing:!0})},style:"number"==typeof a?{height:a}:void 0},e.createElement("canvas",{ref:x}),l&&e.createElement(we,bt({axisCount:B,maxPrecision:w,clockStyle:m,timeZone:f},c||{},v)),S.showing&&e.createElement(Ee,{contextMenu:S}),E&&e.createElement(ut,{bodyHeight:a||i?.primaryRenderer?.boundingRect?.height,annotationState:k}),u&&e.createElement(Ct,{stateController:i,verticalLines:u}),A&&e.createElement(mt,{stateController:i,draggablePoints:A,onPointDrag:d,onDraggablePointsDoubleClick:p}),s&&b.showing&&e.createElement("div",{className:"bounds-selection",style:b.style}))}_t.propTypes={stateController:c().instanceOf(je).isRequired,webgl:c().bool,checkIntersection:c().bool,bodyHeight:c().number,boundsSelectionEnabled:c().bool.isRequired,showTooltips:c().bool.isRequired,tooltipOptions:k.TooltipOptions,verticalLines:k.VerticalLines,draggablePoints:k.DraggablePoints,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func,onPointClick:c().func,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string};var Bt=l(72),vt=l.n(Bt),wt=l(825),Et=l.n(wt),kt=l(659),St=l.n(kt),Dt=l(56),Tt=l.n(Dt),zt=l(540),Rt=l.n(zt),Xt=l(113),Yt=l.n(Xt),Pt=l(557),Mt={};function Ft(e,{scale:t,min:n,max:i,inverted:r,totalSize:o,precision:a,formatter:s,dates:l,justTime:h,justDate:c,formatOptions:g={}},A={}){let d=e;"log"===t&&(d=10**e);let p=(e-n)/(i-n);r&&(p=1-p);let u=p*o;return isNaN(u)&&(u=0),{pixelValue:u,trueValue:d,label:s(d,{...g,precision:a,log:"log"===t,dates:l,justTime:h,justDate:c}),size:"major",...A}}function Lt(e,{scale:t,min:n,max:i,inverted:r,totalSize:o,precision:a,formatter:s,dates:l,justTime:h,justDate:c,formatOptions:g={}},A={}){let d=e/o;r&&(d=1-d);let p=d*(i-n)+n;return"log"===t&&(p=Math.pow(10,p)),{pixelValue:e,trueValue:p,label:s(p,{...g,precision:a,log:"log"===t,dates:l,justTime:h,justDate:c}),size:"major",...A}}function Ot(e,t){if(e<=1)return 1;if(1===t)return Math.round(e);if(e>=t)return Math.round(e/t)*t;let n;if(24===t)n=[1,2,6,12,24];else{if(60!==t)throw new Error("Invalid divisor");n=[1,2,5,10,15,30,60]}let i=1/0,r=1;for(let t=0;t<n.length;t++){const o=Math.abs(n[t]-e);o<i&&(r=n[t],i=o)}return r}function It(e,t,n){const i=e/t;return i<6e4&&(!n||"second"===n)?{amount:Ot(i/1e3,60),unit:"s"}:i<36e5&&(!n||"minute"===n)?{amount:Ot(i/6e4,60),unit:"m"}:i<864e5&&(!n||"hour"===n)?{amount:Ot(i/36e5,24),unit:"h"}:"day"===n||i<2592e6&&!n?{amount:Ot(i/864e5,1),unit:"d"}:i>2592e6&&(!n||"month"===n)?{amount:Ot(i/30*24*60*60*1e3,1),unit:"month"}:"year"===n?{amount:Ot(i/365*24*60*60*1e3,1),unit:"year"}:{unit:"m",amount:60}}function $t(e){return e.dates?function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g}){const A=i+2*r,d=[],p={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:h,formatOptions:g,dates:!0},{amount:u,unit:m}=It(t-e,o/A,g.unitOverride),f="month"===m;a||d.push(Lt(0,{...p,justDate:f},{position:"first"}));let C=new Date(e);"h"===m?C.setMinutes(0,0,0):"m"===m?C.setSeconds(0,0):"s"===m?C.setMilliseconds(0):"month"===m?(C=Ce(C,g.timeZone),C.setDate(1)):"d"===m&&(C=Ce(C,g.timeZone));let x=h(C,{...g,...p,justDate:!0});for(;C<t;){let e=864e5;"h"===m?e=60*(u-C.getHours()%u)*60*1e3:"m"===m?e=60*(u-C.getMinutes()%u)*1e3:"s"===m?e=1e3*(u-C.getSeconds()%u):"month"===m?(e=0,C=11===C.getMonth()?new Date(C.getFullYear()+1,0,1):new Date(C.getFullYear(),C.getMonth()+1,1)):"year"===m&&(C=new Date(C.getFullYear()+1,0,0)),C=new Date(C.valueOf()+e);const t=h(C,{...g,...p,justDate:!0})===x,n=Ft(C,{...p,justTime:t,justDate:f});d.length&&n.pixelValue-d[d.length-1].pixelValue<i+(r||0)||n.pixelValue+i/2>=o||(d.push(n),x=h(C,{...g,...p,justDate:!0}))}const b=x===h(t,{...g,...p,justDate:!0});return!s&&d[d.length-1].pixelValue+i<o&&d.push(Lt(o,{...p,justTime:b,justDate:f},{position:"last"})),d.filter(({pixelValue:e})=>e<=o&&e>=0)}(e):function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,scale:a="linear",formatter:s,inverted:l=!1,formatOptions:h}){const c=i+2*r,g=[],A={scale:a,min:e,max:t,inverted:l,totalSize:o,precision:n,formatter:s,formatOptions:h,dates:!1},d=function(e,t){const n=e/t,i=1-Math.log10(Math.abs(n)),r=i-Math.floor(i)>.5?2:1,o=10**Math.floor(i)*r;return Math.round(n*o)/o}(t-e,Math.floor((o-2*i)/c));if(d>0)for(let n=function(e,t){return Math.round(e/t)*t}(e,d);n<t;n+=d)g.push(Ft(n,A));return g.length&&l&&g[g.length-1].pixelValue>r&&g.push(Lt(i/2,A)),g.filter(({pixelValue:e})=>e<=o&&e>=0)}(e)}Mt.styleTagTransform=Yt(),Mt.setAttributes=Tt(),Mt.insert=St().bind(null,"head"),Mt.domAPI=Et(),Mt.insertStyleElement=Rt(),vt()(Pt.A,Mt),Pt.A&&Pt.A.locals&&Pt.A.locals;const Gt=e.memo(Wt);function Wt({showAxes:t,showGrid:n,stateController:i,bigLabels:r,xTickUnit:o,clockStyle:a,timeZone:s,integersOnly:l,formatXAxisLabel:h}){if(!t&&!n)return null;const{elementWidth:c,elementHeight:g}=Ze(i),{minX:A,maxX:d,dates:p}=ot(i),u=function(e){return Ke(e,"has_x_enum_change",e.hasXEnum)}(i),m=function(e){return Ke(e,"enum_map_change",e.enumMap)}(i);let f;f=p?function(e,t){e=new Date(e);const n=(t=new Date(t)).valueOf()-e.valueOf();return n<3e3?"ms":n<6e5?"s":"m"}(A,d):pe(d-A);let C=null;if(u){C={};for(const[e,t]of Object.entries(m))C[t]=e}const x={unitOverride:o,clockStyle:a,timeZone:s,integersOnly:l,inverseEnumMap:C,formatter:h},b=xe(A,{...x,dates:p,precision:f}).toString(),y=xe(d,{...x,dates:p,precision:f}).toString();let _=Math.max(b.length,y.length);r&&(_*=2);let B=null,v=null,w=null;p?(B=function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g={}}){const A=i+2*r,d=[],p={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:h,formatOptions:g,dates:!0},u=Math.floor(o/A);let m,f;const C=(t-e)/36e5;C<=8*u?(m="h",f=Math.max(1,Math.ceil(C/u)),f<=6||(f=f<=12?12:f<=24?24:24*Math.ceil(f/24))):(m="h",f=24),a||d.push(Lt(0,{...p,justTime:!0},{position:"first"}));let x=new Date(e);if("h"===m)if(24===f)x=Ce(x,g.timeZone);else{const e=g.timeZone?fe(g.timeZone,x):0,t=fe("local",x);if(null!==e&&null!==t){const n=new Date(x.valueOf()+e-t);if(n.setMinutes(0,0,0),12===f){const e=n.getHours()<12?0:12;n.setHours(e)}else{const e=n.getHours(),t=Math.floor(e/f)*f;n.setHours(t)}x=new Date(n.valueOf()-e+t)}else if(x.setMinutes(0,0,0),12===f){const e=x.getHours()<12?0:12;x.setHours(e)}else{const e=x.getHours(),t=Math.floor(e/f)*f;x.setHours(t)}}else if("m"===m){x.setSeconds(0,0);const e=x.getMinutes(),t=Math.floor(e/f)*f;x.setMinutes(t)}else if("s"===m){x.setMilliseconds(0);const e=x.getSeconds(),t=Math.floor(e/f)*f;x.setSeconds(t)}for(;x<e;)"h"===m?x=new Date(x.valueOf()+60*f*60*1e3):"m"===m?x=new Date(x.valueOf()+60*f*1e3):"s"===m&&(x=new Date(x.valueOf()+1e3*f));for(;x<t;){const e=Ft(x,{...p,justTime:!0}),t=o-(i+r);if(d.length&&e.pixelValue-d[d.length-1].pixelValue<i+r);else{if(!(e.pixelValue+i<t))break;d.push(e)}if("h"===m)x=new Date(x.valueOf()+60*f*60*1e3);else if("m"===m)x=new Date(x.valueOf()+60*f*1e3);else{if("s"!==m)break;x=new Date(x.valueOf()+1e3*f)}}if(!s){const e=Ft(t,{...p,justTime:!0},{position:"last"});0===d.length||e.pixelValue-d[d.length-1].pixelValue>=i+r/2?d.push(e):d[d.length-1]=e}return d.filter(({pixelValue:e})=>e<=o&&e>=0)}({min:A,max:d,totalSize:c,precision:f,expectedLabelSize:_,labelPadding:24,formatter:h||xe,formatOptions:x}),v=function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g={}}){const A=i+2*r,d=[],p=new Date(e).getFullYear()!==new Date(t).getFullYear(),u={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:(e,t)=>{const n=g.timeZone;return h(e,{...t,dates:!0,justMonthAndDay:!p,justDate:p,timeZone:n})},formatOptions:g,dates:!0},m=t-e,f=m/36e5;let{amount:C,unit:x}=It(m,o/A,g.unitOverride);if(("h"===x||"m"===x||"s"===x)&&f>=48)x="d",C=Math.max(1,Math.ceil(f/24/Math.floor(o/A)));else if(("h"===x||"m"===x||"s"===x)&&f<48){const n=Ft(e,{...u,justDate:!0},{position:"first"}),a=Ft(t,{...u,justDate:!0},{position:"last"}),s=[n];return a.pixelValue-n.pixelValue>=i+r&&s.push(a),s.filter(({pixelValue:e})=>e<=o&&e>=0)}a||d.push(Lt(0,{...u,justDate:!0},{position:"first"}));let b=new Date(e);for("month"===x?(b=Ce(b,g.timeZone),b.setDate(1)):"d"===x&&(b=Ce(b,g.timeZone));b<t;){let e=864e5;"month"===x?(e=0,b=11===b.getMonth()?new Date(b.getFullYear()+1,0,1):new Date(b.getFullYear(),b.getMonth()+1,1)):"year"===x?(b=new Date(b.getFullYear()+1,0,1),e=0):"d"===x&&(e=24*C*60*60*1e3),e>0&&(b=new Date(b.valueOf()+e));const t=Ft(b,{...u,justDate:!0}),n=o-(i+r);if(!(d.length&&t.pixelValue-d[d.length-1].pixelValue<i+(r||0))){if(!(t.pixelValue+i<n))break;d.push(t)}}if(!s){const e=Ft(t,{...u,justDate:!0},{position:"last"});0===d.length||e.pixelValue-d[d.length-1].pixelValue>=i+r/2?d.push(e):d[d.length-1]=e}return 0===d.length&&f>=48&&d.push(Lt(0,{...u,justDate:!0},{position:"first"})),d.filter(({pixelValue:e})=>e<=o&&e>=0)}({min:A,max:d,totalSize:c,precision:f,expectedLabelSize:2*_,labelPadding:45,formatter:h||xe,formatOptions:x})):w=$t({min:A,max:d,totalSize:c,precision:f,dates:p,formatter:h||xe,expectedLabelSize:_,labelPadding:30,formatOptions:x});const E=p?30:20;return e.createElement("svg",{className:"axis x-axis"+(p?" x-axis-dual":""),style:t?void 0:{marginBottom:-20}},t&&e.createElement("path",{d:`M-1,0 H${c}`,className:"axis-line"}),p&&B&&B.map(({pixelValue:i,label:o,size:a,position:s,skipGrid:l},h)=>{const c=1===B.length;if(isNaN(i))return null;const A=["axis-item",`axis-item-${a}`,`axis-item-${s}`];return r&&A.push("axis-item-big-labels"),e.createElement("g",{key:`time-${h}`,className:A.join(" ")},t&&e.createElement("path",{d:`M${i},1 v12`,className:"axis-tick"}),n&&!l&&e.createElement("path",{d:`M${i},0 v-${g}`}),t&&e.createElement("text",{x:"last"!==s||c?i+3:i-3,y:12,textAnchor:"last"!==s||c?"start":"end",className:"x-axis-text x-axis-time-text"},o))}),p&&v&&v.map(({pixelValue:n,label:i,size:o,position:a,trueValue:l},h)=>{if(isNaN(n))return null;const c=["axis-item",`axis-item-${o}`,`axis-item-${a}`];let g;return r&&c.push("axis-item-big-labels"),s&&0===h&&(g="utc"===s.toLowerCase()?"UTC":s),e.createElement("g",{key:`date-${h}`,className:c.join(" ")},t&&e.createElement("text",{x:"last"===a?n-3:n+3,y:25,textAnchor:"last"===a?"end":"start",className:"x-axis-text x-axis-date-text"},e.createElement("tspan",{className:"x-axis-date-label"},i),g&&e.createElement("tspan",{className:"x-axis-timezone-label"}," ","(",g,")")))}),!p&&w&&w.map(({pixelValue:i,label:o,size:a,position:s,skipGrid:l},h)=>{if(isNaN(i))return null;const c=["axis-item",`axis-item-${a}`,`axis-item-${s}`];return r&&c.push("axis-item-big-labels"),e.createElement("g",{key:h,className:c.join(" ")},t&&e.createElement("path",{d:`M${i},1 v12`,className:"axis-tick"}),n&&!l&&e.createElement("path",{d:`M${i},0 v-${g}`}),t&&e.createElement("text",{x:"last"===s?i-3:i+3,y:E-5,textAnchor:"last"===s?"end":"start",className:"x-axis-text"},o))}))}Wt.propTypes={stateController:c().instanceOf(je).isRequired,showAxes:c().bool.isRequired,showGrid:c().bool.isRequired,bigLabels:c().bool,xTickUnit:c().oneOf(["year"]),clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,integersOnly:c().bool,formatXAxisLabel:c().func};const Nt=e.memo(Ut);function Ut({stateController:t,showAxes:n,showGrid:i,showSeriesKey:r,axis:a,sideIndex:s,bodyHeight:l,theme:h,grapherID:c,dragPositionYOffset:g=0,bigLabels:A,showAxisColors:d}){if(!n&&!i)return null;const{side:p,scale:u,axisIndex:m,label:f}=Je(t)[a.axisIndex],{elementWidth:C,elementHeight:x}=Ze(t);let{minY:b,maxY:y}=at(t)[m];const _=Oe({minY:b,maxY:y,scale:u});b=_.minY,y=_.maxY;const B=$t({min:b,max:y,totalSize:x,scale:u,precision:pe(y-b),formatter:be,inverted:!0,expectedLabelSize:A?20:10,labelPadding:30});let v=5;"log"===u&&(v=2);const w=et(t),[E,k]=o(null),[S,T]=o({dx:0,dy:0}),z="day"===h?1:.5,R="day"===h?.8:.3;return e.createElement("svg",{className:`axis y-axis y-axis-${p}`,"data-axis-index":m,"data-grapher-id":c,style:{width:ye,marginLeft:n?void 0:-32,height:"number"==typeof l?l:void 0}},n&&d&&a.series.map((t,n)=>{const i=x/a.series.length;return e.createElement("rect",{x:"left"===p?0:2,y:n*i,width:30,height:i,key:t.index,fill:(0,D.default)(t.color,t.index,t.multigrapherSeriesIndex),opacity:t.index===w?z:R,"data-element-height":x,"data-series-length":a.series.length})}),n&&e.createElement("path",{d:`M${"left"===p?31:1},3 V${x}`,className:"axis-line"}),B.map(({pixelValue:t,label:r,size:o,skipGrid:a},l)=>{const h="left"===p?(s+1)*ye:-s*ye,c=("left"===p?1:-1)*(C+1),g=["axis-item",`axis-item-${o}`];return A&&g.push("axis-item-big-labels"),e.createElement("g",{key:l,className:g.join(" ")},i&&!a&&e.createElement("path",{d:`M${h},${t} h${c}`}),i&&!a&&s>0&&e.createElement("path",{d:`M${"left"===p?ye:0},${t} h${("left"===p?1:-1)*s*ye}`,strokeDasharray:"2,2"}),n&&e.createElement("text",{x:"left"===p?ye-v:v,y:t},r))}),r&&n&&a.series.map((n,i)=>{let r=18+14*(i%2-1),o=-14*Math.ceil(a.series.length/2)+14*Math.floor(i/2);return n===E&&(r+=S.dx,o+=S.dy-g),e.createElement("rect",{className:"series-color-box",onMouseDown:e=>((e,n)=>{let i=e.clientX,r=e.clientY;"left"===p&&(i+=ye),"right"===p&&(i-=ye),T({dx:0,dy:0});const o=e=>{T({dx:e.clientX-i,dy:e.clientY-r})},a=e=>{window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",a);let i=e.target;for(;i&&!(i.dataset||{}).axisIndex;)i=i.parentNode;k(null),t.finalizeDrag(n,i&&(i.dataset||{}).axisIndex,i&&(i.dataset||{}).grapherId)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",a),k(n),t.markDragStart()})(e,n),x:r,y:o,width:10,height:10,key:n.index,fill:(0,D.default)(n.color,n.index,n.multigrapherSeriesIndex),onMouseOver:()=>t.setHighlightedSeries(n.index),onMouseOut:()=>t.setHighlightedSeries(null)})}),n&&!!f&&e.createElement("text",{className:"y-axis-label"+(A?" y-axis-big-label":""),x:"left"===p?10:22,y:x/2+("left"===p?-1:1)*(m+1)*(A?20:0),transform:`rotate(${"left"===p?-90:90}, ${"left"===p?10:22}, ${x/2})`},f))}Ut.propTypes={stateController:c().instanceOf(je),showAxes:c().bool.isRequired,showGrid:c().bool.isRequired,showAxisColors:c().bool.isRequired,showSeriesKey:c().bool.isRequired,axis:k.Axis.isRequired,sideIndex:c().number.isRequired,bodyHeight:c().number,theme:c().string,grapherID:c().string,dragPositionYOffset:c().number,bigLabels:c().bool};const qt=e.memo(Vt);function Ht({windX:t,windY:n}){const i=180*(-Math.atan2(n,t)+Math.PI/2)/Math.PI;return e.createElement("g",{transform:`rotate(${i})`},e.createElement("line",{x1:0,y1:-4,x2:0,y2:4,stroke:"currentColor",strokeWidth:1.5}),e.createElement("path",{d:`M${-8/3},2 L0,4 L${8/3},2`,fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function Vt({stateController:t}){const{elementWidth:n}=Ze(t),{minX:i,maxX:r}=ot(t),o=Qe(t).filter(e=>e.windDirections&&e.windDirections.length>0&&!e.hidden);if(0===o.length)return null;let a=1/0,s=-1/0;for(const e of o){const{windData:t}=e;if(t)for(const e of t){if(!e)continue;const t=Math.sqrt(e.x*e.x+e.y*e.y);t<a&&(a=t),t>s&&(s=t)}}const l=s-a||1,h=[];let c=-30;for(const t of o){const{inDataSpace:o,windDirections:s,windData:g,windComp:A}=t;if(!o||!s)continue;const d=A||Ht;for(let A=0;A<o.length;A++){const[p]=o[A],u=s[A];if(null===u)continue;let m=p instanceof Date?p.valueOf():p,f=i instanceof Date?i.valueOf():i,C=r instanceof Date?r.valueOf():r;if(m<f||m>C)continue;const x=(m-f)/(C-f)*n;if(x-c<30)continue;c=x;const b=g?g[A]:null,y=b?b.x:Math.cos(u),_=b?b.y:Math.sin(u),B=Math.sqrt(y*y+_*_),v=(B-a)/l;h.push(e.createElement("g",{key:`${t.name||A}-${A}`,transform:`translate(${x}, 10)`},e.createElement(d,{windX:y,windY:_,speed:B,speedPercentile:v})))}}return 0===h.length?null:e.createElement("svg",{className:"wind-arrows",style:{height:20,width:n,display:"block"}},h)}Vt.propTypes={stateController:c().instanceOf(je).isRequired};const jt=e.memo(Kt);function Kt({selected:t,disabled:n,className:i,onClick:r,children:o,description:a}){const s=["range-button"];return t&&s.push("range-button-selected"),n&&s.push("range-button-disabled"),i&&s.push(i),a&&s.push("option-tooltip"),e.createElement("div",{className:s.join(" "),onClick:r&&(e=>n||r(e))},o,a&&e.createElement("div",{className:"option-tooltip-text"},a))}Kt.propTypes={selected:c().bool.isRequired,onClick:c().func,children:c().node.isRequired,disabled:c().bool,className:c().string,description:c().string};const Zt=e.memo(Jt);function Jt({stateController:t,currentBoundCalculator:n,boundCalculator:i,children:r,disabled:o}){return e.createElement(jt,{selected:n===i,onClick:()=>t.boundCalculator=i,disabled:o},r)}Jt.propTypes={stateController:c().instanceOf(je).isRequired,boundCalculator:c().func.isRequired,currentBoundCalculator:c().func.isRequired,children:c().node.isRequired,disabled:c().bool};const Qt=e.memo(en);function en({stateController:t}){const n=function(e){return Ke(e,"percentile_changed",e.percentile)}(t),i=function(e){return Ke(e,"percentile_asymmetry_changed",e.percentileAsymmetry)}(t),[r,a]=o(!1);return[r?e.createElement(jt,{key:"asymmetry button",className:"percentile-button",selected:!0,description:"Percentile asymmetry"},e.createElement("input",{onClick:e=>e.stopPropagation(),value:i,onChange:e=>t.percentileAsymmetry=e.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:-50,max:50}),e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z"})))):null,e.createElement(jt,{key:"main-button",className:"percentile-button",selected:r||100!==parseFloat(n),onClick:()=>a(!r),description:"Edit percentile"},r&&e.createElement("div",null,e.createElement("input",{onClick:e=>e.stopPropagation(),autoFocus:!0,value:n,onChange:e=>t.percentile=e.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:0,max:100})),e.createElement("div",{className:"icon-container icon-container-narrow"},e.createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},e.createElement("path",{fill:"currentColor",d:"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"}))))]}en.propTypes={stateController:c().instanceOf(je).isRequired};const tn=e.memo(nn);function nn({stateController:t,sidebarEnabled:n}){const i=function(e){return Ke(e,"show_individual_points_changed",e.showIndividualPoints)}(t),r=st(t),o=ct(t),a=gt(t),s=At(t),l=pt(t);return e.createElement("div",{className:"options-bar"},n&&e.createElement(jt,{selected:a,onClick:()=>t.toggleShowingSidebar(),description:"Show sidebar"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"})))),e.createElement(jt,{selected:"export"===l,onClick:()=>t.toggleExportMode(),description:"Export mode"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"})))),e.createElement(jt,{selected:s,onClick:()=>t.toggleShowingAnnotations(),description:"Show annotations"},e.createElement("div",{className:"icon-container icon-container-448"},e.createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},e.createElement("path",{fill:"currentColor",d:"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"})))),e.createElement(Qt,{stateController:t}),e.createElement(jt,{selected:o,onClick:()=>t.toggleMaxPrecision(),description:"Max precision"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"})))),e.createElement(jt,{selected:r,onClick:()=>t.toggleYAutoscaling(),description:"Autoscale y axis"},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"})))),e.createElement(jt,{selected:i,onClick:()=>t.toggleIndividualPoints(),description:"Show individual points"},e.createElement("div",{className:"icon-container icon-container-narrow"},e.createElement("svg",{focusable:"false",viewBox:"0 0 192 512"},e.createElement("path",{fill:"currentColor",d:"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"})))))}nn.propTypes={stateController:c().instanceOf(je).isRequired,sidebarEnabled:c().bool};const rn=e.memo(on);function on({stateController:t,customBoundsSelectors:n,customBoundsSelectorsOnly:i,sidebarEnabled:r}){const o=tt(t),a=nt(t),s=ht(t);let l=ye*o;o>0&&(l+=5);let h=ye*a;a>0&&(h+=5);const{dates:c}=function(e){return Ke(e,"global_bounds_changed",e.globalBounds)}(t),g=function(e){return Ke(e,"bound_calculator_changed",e.boundCalculator)}(t),{hasPreviousBounds:A,hasNextBounds:d}=function(e){return Ke(e,"bound_history_changed",e.boundHistory)}(t),p=new Set(n.map(({label:e})=>e));return e.createElement("div",{className:"range-selection"+(c?"":" range-not-dates"),style:{marginRight:l,marginLeft:h}},e.createElement("div",{className:"range-buttons"},s&&e.createElement(tn,{stateController:t,sidebarEnabled:r}),e.createElement(jt,{className:"showing-options-button",selected:s,onClick:()=>t.toggleShowingOptions(),description:"Show additional options"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"})))),e.createElement(jt,{className:"range-selection-history",selected:!1,onClick:()=>t.previousBounds(),disabled:!A},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"})))),e.createElement(jt,{className:"range-selection-history",selected:!1,onClick:()=>t.nextBounds(),disabled:!d},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"})))),n.map(({label:n,calculator:i,datesOnly:r},o)=>e.createElement(Zt,{key:o,stateController:t,currentBoundCalculator:g,boundCalculator:i,disabled:r&&!c},n)),!p.has("1m")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastMinute,disabled:!c},"1m"),!p.has("10m")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.last10Minutes,disabled:!c},"10m"),!p.has("1h")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastHour,disabled:!c},"1h"),!p.has("1d")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastDay,disabled:!c},"1d"),e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.all,disabled:!1},"All")))}on.propTypes={stateController:c().instanceOf(je).isRequired,customBoundsSelectors:k.CustomBoundsSelectors.isRequired,customBoundsSelectorsOnly:c().bool,sidebarEnabled:c().bool};class an extends e.PureComponent{constructor(e){super(e),this.state={elementWidth:0,elementHeight:0,selectionBounds:{minX:0,maxX:0},globalBounds:{minX:0,maxX:0}},this.onMouseMove=this.onMouseMove.bind(this),this.stopDragging=this.stopDragging.bind(this),this.startScroll=this.startScroll.bind(this),this.startLeftDrag=this.startLeftDrag.bind(this),this.startRightDrag=this.startRightDrag.bind(this)}getClientX(e){return e&&e.touches&&e.touches[0]?e.touches[0].clientX:e&&e.changedTouches&&e.changedTouches[0]?e.changedTouches[0].clientX:e.clientX}componentDidMount(){this._renderer=new de({stateController:this.props.stateController,canvasElement:this.el,webgl:this.props.webgl,checkIntersection:this.props.checkIntersection}),this.props.stateController.rangeGraphRenderer=this._renderer,this._renderer.on("size_changed",e=>{this.setState(e)}),this.setState({selectionBounds:this.props.stateController._selection,globalBounds:this.props.stateController._globalBounds}),this.props.stateController.on("selection_changed",e=>{this.setState({selectionBounds:e})}),this.props.stateController.on("global_bounds_changed",e=>{this.setState({globalBounds:e})})}componentDidUpdate(e){e.draggingY!==this.props.draggingY&&this._renderer&&this._renderer.resize()}componentWillUnmount(){this._renderer&&(this._renderer.dispose(),this._renderer=null)}onMouseMove(e){if(!this._dragType)return;let t;e&&e.touches&&e.preventDefault&&e.preventDefault();const n=this.el.getBoundingClientRect().left;this.setState(({selectionBounds:i,globalBounds:r,elementWidth:o})=>{let a=(this.getClientX(e)-n)/o;a=Math.max(a,0),a=Math.min(a,1);let s=a*(r.maxX-r.minX)+r.minX;if("scroll"===this._dragType){const e=i.maxX-i.minX;let n=s-e*this._scrollAnchorPercentage,o=s+e*(1-this._scrollAnchorPercentage);return n<r.minX&&(n=r.minX,o=n+e),o>r.maxX&&(o=r.maxX,n=o-e),t=()=>({minX:n,maxX:o}),{selectionBounds:Object.assign({},i,{minX:n,maxX:o})}}if("left"===this._dragType){s>i.maxX&&(s=i.maxX);const e=r.maxX===i.maxX;return t=()=>e?{minX:s}:{minX:s,maxX:i.maxX},{selectionBounds:Object.assign({},i,{minX:s})}}if("right"===this._dragType){s<i.minX&&(s=i.minX);const e=r.minX===i.minX;return t=()=>e?{maxX:s}:{minX:i.minX,maxX:s},{selectionBounds:Object.assign({},i,{maxX:s})}}},()=>{t&&(t.debounceHistory=!0,this.props.stateController.boundCalculator=t)})}addListeners(){window.addEventListener("mousemove",this.onMouseMove),window.addEventListener("mouseup",this.stopDragging),window.addEventListener("touchmove",this.onMouseMove,{passive:!1}),window.addEventListener("touchend",this.stopDragging),window.addEventListener("touchcancel",this.stopDragging)}stopDragging(){this._dragType=null,this.forceUpdate(),window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.stopDragging),window.removeEventListener("touchmove",this.onMouseMove),window.removeEventListener("touchend",this.stopDragging),window.removeEventListener("touchcancel",this.stopDragging)}startScroll(e){this._dragType="scroll";const{selectionBounds:t,globalBounds:n,elementWidth:i}=this.state,r=this.el.getBoundingClientRect().left,o=this.getClientX(e)-r,a=(t.minX-n.minX)/(n.maxX-n.minX)*i||0,s=(t.maxX-n.minX)/(n.maxX-n.minX)*i||0;this._scrollAnchorPercentage=(o-a)/(s-a),this.addListeners()}startLeftDrag(e){this._dragType="left",this.addListeners()}startRightDrag(e){this._dragType="right",this.addListeners()}render(){const{globalBounds:t,selectionBounds:n,elementWidth:i,elementHeight:r}=this.state;let o=Math.min(Math.max((n.minX-t.minX)/(t.maxX-t.minX),0),1)*i||0,a=Math.min(Math.max((n.maxX-t.minX)/(t.maxX-t.minX),0),1)*i||0;(isNaN(o)||!isFinite(o)||n.maxX<n.minX)&&(o=0),(isNaN(a)||!isFinite(a)||n.maxX<n.minX)&&(a=0);const s=r+14;let l;return n.dates&&this.props.markDates&&(l=$t({min:t.minX,max:t.maxX,totalSize:i,precision:"day",dates:n.dates,formatter:xe,expectedLabelSize:30,labelPadding:5,formatOptions:{justMonthAndDay:!0,unitOverride:"day",timeZone:this.props.timeZone},skipFirst:!0,skipLast:!0})),e.createElement("div",{className:"range-selection-graph"},e.createElement("div",{className:"graph-body graph-body-secondary",style:{touchAction:"none"}},e.createElement("canvas",{ref:e=>this.el=e}),e.createElement("svg",{style:{height:s}},e.createElement("g",null,e.createElement("rect",{x:0,y:r,width:i,height:14,className:"selection-bar-track"}),l&&l.map(({pixelValue:t,label:n,size:i,position:s},l)=>{if(isNaN(t))return null;const h=["axis-item",`axis-item-${i}`,`axis-item-${s}`];return t>=o&&t<=a&&h.push("axis-item-highlighted"),e.createElement("g",{key:l,className:h.join(" ")},e.createElement("path",{d:`M${t},0 v${r}`}),e.createElement("text",{x:t+3,y:r},n))}),e.createElement("rect",{x:o,y:r,width:a-o,height:14,className:"selection-bar",onMouseDown:this.startScroll,onTouchStart:this.startScroll}),e.createElement("path",{d:"M -3 3.5 L -3 9.333333333333334 M 0 3.5 L 0 9.333333333333334 M 3 3.5 L 3 9.333333333333334",className:"selection-bar-rifles",transform:`translate(${o+(a-o)/2},${r})`,onMouseDown:this.startScroll,onTouchStart:this.startScroll})),e.createElement("g",null,e.createElement("rect",{x:o,y:0,width:a-o,height:s,className:"target-selection-outline",onMouseDown:this.startScroll,onTouchStart:this.startScroll})),e.createElement("g",{className:"selection-handle"+("left"===this._dragType||"scroll"===this._dragType?" selection-handle-dragging":"")},e.createElement("rect",{x:o-15,y:(r-30)/2,width:30,height:30,fill:"transparent",className:"selection-bar-handle-hit",onMouseDown:this.startLeftDrag,onTouchStart:this.startLeftDrag}),e.createElement("path",{d:"M -4.5 0.5 L 3.5 0.5 L 3.5 15.5 L -4.5 15.5 L -4.5 0.5 M -1.5 4 L -1.5 12 M 0.5 4 L 0.5 12",className:"selection-bar-handle",transform:`translate(${o},${(r-15)/2})`,onMouseDown:this.startLeftDrag,onTouchStart:this.startLeftDrag})),e.createElement("g",{className:"selection-handle"+("right"===this._dragType||"scroll"===this._dragType?" selection-handle-dragging":"")},e.createElement("rect",{x:a-15,y:(r-30)/2,width:30,height:30,fill:"transparent",className:"selection-bar-handle-hit",onMouseDown:this.startRightDrag,onTouchStart:this.startRightDrag}),e.createElement("path",{d:"M -4.5 0.5 L 3.5 0.5 L 3.5 15.5 L -4.5 15.5 L -4.5 0.5 M -1.5 4 L -1.5 12 M 0.5 4 L 0.5 12",className:"selection-bar-handle",transform:`translate(${a},${(r-15)/2})`,onMouseDown:this.startRightDrag,onTouchStart:this.startRightDrag}))),this.props.verticalLines&&e.createElement(Ct,{stateController:this.props.stateController,verticalLines:this.props.verticalLines,isRangeGraph:!0,bounds:t,elementHeight:r,elementWidth:i})))}}an.defaultProps={width:3,shadowColor:"transparent"},an.propTypes={stateController:c().instanceOf(je).isRequired,webgl:c().bool,draggingY:c().bool,checkIntersection:c().bool,markDates:c().bool,timeZone:c().string,verticalLines:k.VerticalLines};const sn=e.memo(ln);function ln({series:t,i:n,style:i,onMouseDown:r,theme:o,stateController:a,highlighted:s}){const l=(0,D.default)(t.color,n,t.multigrapherSeriesIndex);i="day"===o?Object.assign({},i,{backgroundColor:l}):Object.assign({},i,{color:l});const h=["series-key-item"];s&&h.push("series-key-item-highlighted");const c=He(t,n);return e.createElement("div",{className:h.join(" "),style:i,onMouseDown:r,onMouseOver:()=>a.setHighlightedSeries(n),onMouseOut:()=>a.setHighlightedSeries(null),onClick:()=>a.registerSeriesClick(n)},c)}ln.propTypes={series:k.SingleSeries.isRequired,stateController:c().instanceOf(je),i:c().number.isRequired,style:c().object,onMouseDown:c().func,theme:c().string.isRequired,highlighted:c().bool};class hn extends e.PureComponent{constructor(e){super(e),this.state={showingLabelInput:!1},this.toggleLabelInputShowing=this.toggleLabelInputShowing.bind(this)}toggleLabelInputShowing(){this.setState(({showingLabelInput:e})=>({showingLabelInput:!e}))}render(){const{children:t,stateController:n,axisIndex:i,scale:r,label:o,grapherID:a}=this.props,{showingLabelInput:s}=this.state;return e.createElement("div",{className:"series-key-axis-container"+(s?" series-key-axis-container-showing-label":""),"data-axis-index":i,"data-grapher-id":a},e.createElement("div",{className:"scale-label",onClick:()=>n.toggleScale({axisIndex:i})},r.slice(0,s?6:3)),e.createElement("div",{className:"series-key-axis-container-body"},e.createElement("div",null,t,e.createElement("svg",{className:"label-input-toggler",viewBox:"0 0 512 512",onClick:this.toggleLabelInputShowing},e.createElement("path",{d:"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"}))),e.createElement("div",{className:"series-key-axis-label-container"},e.createElement("input",{onChange:e=>n.setLabel({axisIndex:i,label:e.target.value}),placeholder:"Enter label",value:o||""}))))}}hn.propTypes={stateController:c().instanceOf(je).isRequired,children:c().node.isRequired,axisIndex:c().number.isRequired,scale:c().string.isRequired,label:c().string,grapherID:c().string};const cn=e.memo(gn);function gn({stateController:t,theme:i,draggingY:a,grapherID:s,dragPositionYOffset:l=0}){const h=Qe(t),[c,g]=o(null),[A,d]=o({x:0,y:0}),p=et(t),u=r(null),[m,f]=o(5*h.map(({name:e,yKey:t},n)=>(e||t||n).toString().length).reduce((e,t)=>e+t,0));let C;n(()=>{u.current&&(cancelAnimationFrame(C),C=requestAnimationFrame(()=>{if(!u.current)return;const e=[...u.current.querySelectorAll(".series-key-axis-container")].map(e=>e.clientWidth).reduce((e,t)=>e+t,0);f(e)}))},[h,u.current]);const x=function({stateController:e,keyWidth:t}){const n=tt(e),i=nt(e),r=ht(e);let o=ye*n;n>0&&(o+=5),o+=250,r&&(o+=70);let a,s=ye*i;i>0&&(s+=5),s=Math.max(o,s),o=Math.max(o,s);const{elementWidth:l}=Ze(e);return l-s-o<t&&(s=0,o=0,a=10),{marginRight:o,marginLeft:s,marginBottom:a}}({stateController:t,keyWidth:m}),b=Je(t),y=function(e){return Ke(e,"always_tooltipped_changed",e.alwaysTooltipped)}(t);return e.createElement("div",{className:"series-key",style:x,ref:u},a&&e.createElement("div",{className:"series-key-axis-container","data-axis-index":"new-left","data-grapher-id":s}),b.map((n,r)=>!n.series.length&&b.length>1?null:e.createElement(hn,{key:r,label:n.label,axisIndex:n.axisIndex,scale:n.scale,stateController:t,grapherID:s},n.series.map(n=>n.hideFromKey?null:e.createElement(sn,{key:n.index,series:n,i:n.index,onMouseDown:(e,i)=>((e,n)=>{let i=e.target;for(;i&&"series-key"!==i.className;)i=i.parentNode;const r=e.target.getBoundingClientRect().left;let o=i.getBoundingClientRect().left,a=i.style.marginLeft;const s=e.clientX,l=e.clientY,h=e.clientX,c=e.clientY;g(n),d({x:e.clientX-s+(r-o)-2,y:e.clientY-l+1});const A=e=>{i.style.marginLeft!==a&&(o=i.getBoundingClientRect().left,a=i.style.marginLeft),d({x:e.clientX-s+(r-o)-2,y:e.clientY-l+1})},p=e=>{window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",p);let i=e.target;for(;i&&!(i.dataset||{}).axisIndex&&!(i.dataset||{}).grapherId;)i=i.parentNode;g(null),t.finalizeDrag(n,i&&(i.dataset||{}).axisIndex,i&&(i.dataset||{}).grapherId),e.clientX===h&&e.clientY===c&&t.toggleAlwaysTooltipped(n,e.shiftKey)};window.addEventListener("mousemove",A),window.addEventListener("mouseup",p),t.markDragStart()})(e,n),theme:i,stateController:t,highlighted:p===n.index||y.has(n)})))),a&&e.createElement("div",{className:"series-key-axis-container","data-axis-index":"new-right","data-grapher-id":s}),c&&e.createElement(sn,{style:{left:A.x,top:A.y-l,position:"absolute",pointerEvents:"none",zIndex:1},series:c,i:c.index,theme:i,stateController:t}))}gn.propTypes={stateController:c().instanceOf(je).isRequired,theme:c().string.isRequired,draggingY:c().bool.isRequired,grapherID:c().string,dragPositionYOffset:c().number};const An=e.memo(dn);function dn({title:t}){return e.createElement("div",{className:"grapher-title"},t)}dn.propTypes={title:c().string.isRequired};class pn extends e.PureComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(e){setTimeout(()=>{this.props.stateController.setShowing(this.props.singleSeries,e.target.checked)})}render(){const{singleSeries:t}=this.props,n=(0,D.default)(t.color,t.index,t.multigrapherSeriesIndex);let i=t.name||t.yKey;return i||(i=t.index),e.createElement("div",{className:"series-toggle"},e.createElement("label",null,e.createElement("input",{type:"checkbox",defaultChecked:!t.hidden,ref:e=>e&&e.addEventListener("change",this.onChange)}),e.createElement("span",{className:"checkmark",style:{background:n,borderColor:n}}),i))}}function un({stateController:t}){const n=Qe(t);return e.createElement("div",{className:"grapher-sidebar"},n.map((n,i)=>e.createElement(pn,{key:i,singleSeries:n,stateController:t})))}pn.propTypes={singleSeries:k.SingleSeries.isRequired,stateController:c().instanceOf(je).isRequired},un.propTypes={stateController:c().instanceOf(je).isRequired};class mn{constructor({syncBounds:e=!0,syncTooltips:t=!0,syncDragState:n=!1}={}){this._stateControllers=new Set,this._syncBounds=e,this._syncTooltips=t,this._syncDragState=n}add(e){this._stateControllers.add(e),this._syncBounds&&this.syncBounds(e),this._syncTooltips&&this.syncTooltips(e),this._syncDragState&&this.syncDragState(e)}remove(e){this._stateControllers.delete(e)}syncDragState(e){e.on("dragging_y_changed",t=>{for(let n of this._stateControllers)e!==n&&(t?n.markDragStart():n.finalizeDrag(null,null))})}syncBounds(e){e.on("bound_calculator_changed",t=>{for(let n of this._stateControllers)e!==n&&(n.boundCalculator=t)})}syncTooltips(e){e.on("tooltip_state_changed",(t,n)=>{if(this._tooltipIgnoreState===n)return;const i=0===t.unsavedTooltipsCount||!t.mousePresent||"onShift"===this._syncTooltips&&!e.shiftKeyPressedOnMove;i&&(this._tooltipIgnoreState=Math.random());for(let n of this._stateControllers)e!==n&&(i?n.showOnlySavedTooltips(this._tooltipIgnoreState):n.setTooltipMousePosition({mouseX:t.mouseX,mouseY:t.mouseY,tooltipAllNext:!0,tooltipStateArg:this._tooltipIgnoreState}))})}}function fn(){return fn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},fn.apply(null,arguments)}const Cn=e.memo(bn),xn={theme:"night",showAxes:!0,showRangeGraph:!0,showRangeSelectors:!0,showSeriesKey:!0,showTooltips:!0,boundsSelectionEnabled:!0,customBoundsSelectors:[],sidebarEnabled:!1,defaultShowAnnotations:!0,defaultShowOptions:!0};function bn(t){t={...xn,...t};const r=i(()=>new je({grapherID:t.id,...t,...t.stateControllerInitialization}),[]);n(()=>()=>{r.dispose()},[r]),n(()=>{t.exportStateController&&t.exportStateController(r)},[r,t.exportStateController]),n(()=>{r.timingFrameCount=t.timingFrameCount},[r,t.timingFrameCount]),n(()=>(t.onRenderTime&&r.on("render_time",t.onRenderTime),()=>{t.onRenderTime&&r.off("render_time",t.onRenderTime)}),[r,t.onRenderTime]),n(()=>{r.setSeries(t.series)},[r,t.series]),n(()=>{r.theme=t.theme},[r,t.theme]);const o=pt(r),a=t.bigLabels||"export"===o,s=t.defaultLineWidth||("export"===o?3:void 0);n(()=>{r.defaultLineWidth=s},[r,s]),n(()=>{r.percentile=t.percentile},[r,t.percentile]),n(()=>{r.customBoundsSelectors=t.customBoundsSelectors},[r,t.customBoundsSelectors]),n(()=>{r.annotations=t.annotations},[r,t.annotations]),n(()=>t.onAxisChange?(r.on("exported_axes_changed",t.onAxisChange),()=>{r.off("exported_axes_changed",t.onAxisChange)}):()=>{},[r,t.onAxisChange]),n(()=>{r.primaryRenderer.resize()},[t.height]);const l=lt(r),{styles:h,classNames:c}=function(e,{draggingY:t,theme:n}){const{fullscreen:i,height:r,width:o}=e,a=["grapher",`grapher-${n}`],s={};return t&&a.push("grapher-dragging-y"),i?(a.push("grapher-fullscreen"),a.push("grapher-fixed-height")):r&&(a.push("grapher-fixed-height"),s.height="number"==typeof r?r-20:`calc(${r} - 20px)`),o&&(s.width=o),{styles:s,classNames:a}}(t,{draggingY:l,theme:o}),g=it(r),A=rt(r),d=gt(r),p="boolean"==typeof t.showAxisColors?t.showAxisColors:"export"!==o,u="boolean"!=typeof t.showGrid||t.showGrid,m="boolean"==typeof t.showAxes&&t.showAxes,f={stateController:r,showAxes:m,showGrid:u,showSeriesKey:t.showSeriesKey,bodyHeight:t.bodyHeight,theme:o,grapherID:t.id,dragPositionYOffset:t.dragPositionYOffset,showAxisColors:p,bigLabels:a};return e.createElement("div",{className:c.join(" "),style:h,"data-grapher-id":t.id},t.title&&e.createElement(An,{title:t.title}),e.createElement("div",{className:"grapher-primary-container-outer"},d&&e.createElement(un,{stateController:r}),e.createElement("div",{className:"grapher-primary-container-body"},t.showSeriesKey&&e.createElement(cn,{stateController:r,draggingY:l,theme:t.theme,grapherID:t.id,dragPositionYOffset:t.dragPositionYOffset}),t.showRangeSelectors&&e.createElement(rn,{stateController:r,customBoundsSelectors:t.customBoundsSelectors,customBoundsSelectorsOnly:t.customBoundsSelectorsOnly,sidebarEnabled:t.sidebarEnabled}),e.createElement("div",{className:"grapher-main-row"},l&&e.createElement("div",{className:"axis y-axis","data-axis-index":"new-left","data-grapher-id":t.id,style:{width:ye,height:"number"==typeof t.bodyHeight?t.bodyHeight:void 0}}),A.map((t,n)=>e.createElement(Nt,fn({key:n,axis:t,sideIndex:A.length-n-1},f))),e.createElement("div",{className:"central-container"},e.createElement(yt,{stateController:r,webgl:t.webgl,bodyHeight:t.bodyHeight,boundsSelectionEnabled:t.boundsSelectionEnabled,showTooltips:t.showTooltips,showContextMenu:t.showContextMenu,tooltipOptions:t.tooltipOptions,checkIntersection:t.checkIntersection,draggablePoints:t.draggablePoints,onPointDrag:t.onPointDrag,onDraggablePointsDoubleClick:t.onDraggablePointsDoubleClick,onPointClick:t.onPointClick,verticalLines:t.verticalLines,clockStyle:t.clockStyle,timeZone:t.timeZone}),e.createElement(qt,{stateController:r}),e.createElement(Gt,{showGrid:u,showAxes:m,stateController:r,bigLabels:a,xTickUnit:t.xTickUnit,clockStyle:t.clockStyle,timeZone:t.timeZone,integersOnly:t.xAxisIntegersOnly,formatXAxisLabel:t.formatXAxisLabel}),t.showRangeGraph&&e.createElement("div",{className:"range-graph-container"},e.createElement(an,{stateController:r,webgl:t.webgl,checkIntersection:t.checkIntersection,markDates:t.markRangeGraphDates,timeZone:t.timeZone,verticalLines:t.verticalLines}))),g.map((t,n)=>e.createElement(Nt,fn({key:n,axis:t,sideIndex:n},f))),l&&e.createElement("div",{className:"axis y-axis","data-axis-index":"new-right","data-grapher-id":t.id,style:{width:ye,height:"number"==typeof t.bodyHeight?t.bodyHeight:void 0}})))))}bn.propTypes={series:k.Series.isRequired,webgl:c().bool,requireWASM:c().bool,checkIntersection:c().bool,onAxisChange:c().func,onRenderTime:c().func,exportStateController:c().func,timingFrameCount:c().number,stateControllerInitialization:c().object,syncPool:c().instanceOf(mn),id:c().string,dragPositionYOffset:c().number,theme:c().oneOf(["day","night","export"]),title:c().string,fullscreen:c().bool,bodyHeight:c().number,height:c().number,width:c().number,showAxes:c().bool,showRangeGraph:c().bool,showRangeSelectors:c().bool,showSeriesKey:c().bool,showTooltips:c().bool,showGrid:c().bool,showAxisColors:c().bool,bigLabels:c().bool,xTickUnit:c().oneOf(["year"]),formatXAxisLabel:c().func,xAxisIntegersOnly:c().bool,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,markRangeGraphDates:c().bool,boundsSelectionEnabled:c().bool,sidebarEnabled:c().bool,percentile:c().number,defaultShowOptions:c().bool,defaultShowIndividualPoints:c().bool,defaultShowSidebar:c().bool,defaultShowAnnotations:c().bool,defaultLineWidth:c().number,tooltipOptions:k.TooltipOptions,customBoundsSelectors:k.CustomBoundsSelectors,customBoundsSelectorsOnly:c().bool,defaultBoundsCalculator:c().string,annotations:k.Annotations,draggablePoints:k.DraggablePoints,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func,verticalLines:k.VerticalLines,onPointClick:c().func};const yn=D.LINE_COLORS,_n=Ue;class Bn extends S{constructor({id:e}){super(),this._id=e,this._multiSeries=[],this._seriesToGraphIndices=new Map,this._graphIndicesToSeries=new Map,this._modifiedSeries=new Map,this._originalSeriesByMultigrapherIndex=new Map,this._stateControllers=new Set,this._prevSeries=[],this._dataCache=new Map,this._subscriptions=new Map,this._draggingY=!1,this.on("multi_series_changed",()=>{for(let e of this._stateControllers)e._multiSeries=this._multiSeries})}setSeries(e){if(this._prevSeries.length===e.length){let t=!1;for(let n=0;n<e.length;n++)if(e[n]!==this._prevSeries[n]){t=!0;break}if(!t)return}this._prevSeries=e;const t=new Set,n=new Set(e);for(let n of e){let e=n.graph||0;this._seriesToGraphIndices.has(n)&&(e=this._seriesToGraphIndices.get(n)),t.add(e);let i=this._graphIndicesToSeries.get(e);i||(i=new Set,this._graphIndicesToSeries.set(e,i)),i.add(n)}const i=[...t].sort();this._multiSeries=[];let r=0;for(let e of i){const t=[];for(let i of this._graphIndicesToSeries.get(e)){if(!n.has(i)){this._graphIndicesToSeries.get(e).delete(i);continue}if(this._modifiedSeries.has(i)){r++,t.push(this._modifiedSeries.get(i));continue}const o=(0,D.default)(i.color,r),a=He(i,r),s={...i,multigrapherSeriesIndex:r,multigrapherGraphIndex:e,color:o,name:a};this._modifiedSeries.set(i,s),this._originalSeriesByMultigrapherIndex.set(r,i),r++,t.push(s)}this._multiSeries.push(t)}this._nextMultigrapherSeriesIndex?this._nextMultigrapherSeriesIndex=this._nextMultigrapherSeriesIndex-this._multiSeriesCount+r:this._nextMultigrapherSeriesIndex=r,this._multiSeriesCount=r,this.emit("multi_series_changed",this.multiSeries)}registerStateController(e){this._stateControllers.has(e)||(this._stateControllers.add(e),e._multigraphStateController=this,e._multiSeries=this._multiSeries,e.on("dragging_y_finalized",({grapherID:t,axisIndex:n,draggedSeries:i}={})=>{if(t===e.grapherID)return;const[r,o,a]=t.split("-");"multigrapher"===r&&o===this._id&&setTimeout(()=>{this.moveSeries({axisIndex:n,draggedSeries:i,graphIndex:a})})}),e.on("dragging_y_changed",e=>{e!==this._draggingY&&(this._draggingY=e,this.emit("dragging_y_changed",this._draggingY))}),e.on("observable_modified",t=>{for(let n of this._stateControllers)e!==n&&n.markObservableModified(t)}),e.on("dispose",()=>{this._stateControllers.delete(e)}))}moveSeries({axisIndex:e,draggedSeries:t,graphIndex:n}){const i=this.graphCount,r=this._originalSeriesByMultigrapherIndex.get(t.multigrapherSeriesIndex),o=this._modifiedSeries.get(r);this._multiSeries[o.multigrapherGraphIndex].splice(this._multiSeries[o.multigrapherGraphIndex].indexOf(o),1),this._multiSeries[o.multigrapherGraphIndex]=[...this._multiSeries[o.multigrapherGraphIndex]],o.multigrapherGraphIndex="top"===n?this._createGraphAtTop():"bottom"===n?this._createGraphAtBottom():parseInt(n),o.axisIndex=e,delete o.axis,this._multiSeries[o.multigrapherGraphIndex]=[...this._multiSeries[o.multigrapherGraphIndex],o],this._multiSeries=[...this._multiSeries];for(let e=0;e<this._multiSeries.length;e++){const t=this._multiSeries[e].map(({multigrapherSeriesIndex:e})=>this._originalSeriesByMultigrapherIndex.get(e));this._graphIndicesToSeries.set(e,new Set(t));for(let n of t)this._seriesToGraphIndices.set(n,e)}this.emit("multi_series_changed",this.multiSeries),this.emit("graph_count_changed",this.graphCount,i)}_createGraphAtTop(){let e=null;for(let t=0;t<this._multiSeries.length&&0===this._multiSeries[t].length;t++)e=t;if(null!==e)return e;this._multiSeries=[[],...this._multiSeries];for(let e=0;e<this._multiSeries.length;e++)if(this._multiSeries[e].length){this._multiSeries[e]=[...this._multiSeries[e]];for(let t of this._multiSeries[e])t.multigrapherGraphIndex=e}return 0}_createGraphAtBottom(){let e=null;for(let t=this._multiSeries.length-1;t>=0&&0===this._multiSeries[t].length;t--)e=t;return null!==e?e:(this._multiSeries=[...this._multiSeries,[]],this._multiSeries.length-1)}get multiSeries(){return this._multiSeries.filter(e=>e.length)}get series(){return[...this._stateControllers].map(e=>e.series).flat()}get graphCount(){return this.multiSeries.length}get draggingY(){return this._draggingY}dispose(){this.clearListeners();for(let e of this._subscriptions.values())e.unsubscribe();this._subscriptions.clear()}get stateControllerInitialization(){return{sharedDataCache:this._dataCache,sharedSubscriptions:this._subscriptions}}incrementMultigrapherSeriesIndex(){const e=this._nextMultigrapherSeriesIndex;return this._nextMultigrapherSeriesIndex++,e}}function vn(){return vn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},vn.apply(null,arguments)}const wn=e.memo(En);function En(t){const r=i(()=>Math.random().toString(36).slice(2),[]),o=i(()=>new Bn({id:r,...t}),[]),a=function(e){return Ke(e,"multi_series_changed",e.multiSeries)}(o),s=i(()=>new mn({syncBounds:t.syncBounds,syncTooltips:t.syncTooltips,syncDragState:!0}),[]),l=i(()=>o.registerStateController.bind(o),[o]);n(()=>()=>{o.dispose()},[o]),n(()=>{t.exportStateController&&t.exportStateController(o)},[o,t.exportStateController]),n(()=>{o.setSeries(t.series)},[o,t.series]),n(()=>t.onMultiseriesChange?(o.on("multi_series_changed",t.onMultiseriesChange),()=>{o.off("multi_series_changed",t.onMultiseriesChange)}):()=>{},[o,t.onMultiseriesChange]);const h=lt(o);return e.createElement("div",{className:"multigrapher"},h&&t.newUpperEnabled&&e.createElement("div",{className:`new-grapher grapher-${t.theme}`,"data-grapher-id":`multigrapher-${r}-top`},"New grapher"),a.map((n,i)=>e.createElement(Cn,vn({key:i},t,{syncPool:s,stateControllerInitialization:o.stateControllerInitialization,series:n,id:`multigrapher-${r}-${i}`,dragPositionYOffset:t.newUpperEnabled?38:0,exportStateController:l}))),h&&e.createElement("div",{className:`new-grapher grapher-${t.theme}`,"data-grapher-id":`multigrapher-${r}-bottom`},"New grapher"))}En.defaultProps={theme:"night"},En.propTypes=Object.assign({},Cn.propTypes,{syncBounds:c().bool,syncTooltips:c().bool,newUpperEnabled:c().bool,onMultiseriesChange:c().func});export{yn as AVAILABLE_COLORS,_n as BUILT_IN_BOUND_CALCULATORS,Cn as Grapher,wn as MultiGrapher,rn as RangeSelection,mn as SyncPool,Cn as default};
|
|
1
|
+
import{default as e,useCallback as t,useEffect as n,useMemo as i,useRef as r,useState as o}from"react";var a={39(e){e.exports="precision highp float;\n\nattribute vec2 position;\nattribute vec2 prevPosition;\nattribute float vertex;\n\nuniform float width;\nuniform float height;\nuniform float thickness;\n\nvarying vec2 position_vec;\nvarying vec2 prev_position_vec;\n\nvoid main() {\n vec2 delta = position - prevPosition;\n vec2 alpha = prevPosition;\n vec2 beta = position;\n\n vec2 normalized_delta = normalize(delta);\n vec2 normal = vec2(-thickness/2.0 * normalized_delta.y, thickness/2.0 * normalized_delta.x);\n\n vec2 vertex_position =\n step(0.5, mod(vertex, 2.0))*alpha + // alpha if vertex is odd, 0 otherwise\n step(0.5, mod(vertex + 1.0, 2.0))*beta + // beta if vertex is even, 0 otherwise\n 2.0*(step(1.5, vertex)-0.5)*normal // -normal if vertex < 2, +normal otherwise\n ;\n\n position_vec = vec2(position.x, height - position.y);\n prev_position_vec = vec2(prevPosition.x, height - prevPosition.y);\n\n gl_Position = vec4(2.0*vertex_position.x/width - 1.0, 1.0 - 2.0*vertex_position.y/height, 0.0, 1.0);\n}\n"},56(e,t,n){e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},72(e){var t=[];function n(e){for(var n=-1,i=0;i<t.length;i++)if(t[i].identifier===e){n=i;break}return n}function i(e,i){for(var o={},a=[],s=0;s<e.length;s++){var l=e[s],h=i.base?l[0]+i.base:l[0],c=o[h]||0,g="".concat(h," ").concat(c);o[h]=c+1;var A=n(g),d={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==A)t[A].references++,t[A].updater(d);else{var p=r(d,i);i.byIndex=s,t.splice(s,0,{identifier:g,updater:p,references:1})}a.push(g)}return a}function r(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,r){var o=i(e=e||[],r=r||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=n(o[a]);t[s].references--}for(var l=i(e,r),h=0;h<o.length;h++){var c=n(o[h]);0===t[c].references&&(t[c].updater(),t.splice(c,1))}o=l}}},113(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},120(e){e.exports="#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n#endif\n\nprecision mediump float;\n\nuniform vec4 color;\n\n// Adapted and modified from https://www.desultoryquest.com/blog/drawing-anti-aliased-circular-points-using-opengl-slash-webgl/\nvoid main() {\n float delta = 0.0;\n float alpha = 1.0;\n vec2 center = 2.0 * gl_PointCoord - 1.0;\n float r = dot(center, center);\n\n if (r > 1.0) {\n discard;\n }\n\n #ifdef GL_OES_standard_derivatives\n delta = fwidth(r);\n alpha = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n #endif\n\n gl_FragColor = color * alpha;\n}\n"},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",i=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),i&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),i&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,i,r,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(i)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var h=0;h<e.length;h++){var c=[].concat(e[h]);i&&a[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),r&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=r):c[4]="".concat(r)),t.push(c))}},t}},354(e){e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),o="/*# ".concat(r," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},365(e,t,n){n.r(t),n.d(t,{LINE_COLORS:()=>i,applyReducedOpacity:()=>o,applyReducedOpacityToGradient:()=>a,createDefaultGradient:()=>s,default:()=>r});const i=["#F1C232","#1259f8","#cb4b4b","#4da74d","#9440ed","#61e0ed","#ed6d2c","#ed13c6","#bbed59"];function r(e,t,n){return"string"==typeof e?e:"number"==typeof e?i[e%i.length]:void 0!==n?i[n%i.length]:i[t%i.length]}function o(e,t){if(!e)return e;if(e.startsWith("rgba(")){const n=e.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);if(n){const[,e,i,r,o]=n;return`rgba(${e}, ${i}, ${r}, ${parseFloat(o)*t})`}}if(e.startsWith("rgb(")){const n=e.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(n){const[,e,i,r]=n;return`rgba(${e}, ${i}, ${r}, ${t})`}}if(e.startsWith("#")){let n=e.slice(1);return 3===n.length&&(n=n.split("").map(e=>e+e).join("")),`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}return e}function a(e,t){return e&&Array.isArray(e)?e.map(e=>{if(Array.isArray(e)&&2===e.length){const[n,i]=e;return[n,o(i,t)]}return"string"==typeof e?o(e,t):e}):e}function s(e){if(!e)return[[0,"transparent"],[1,"transparent"]];const t=o(e,.5);return[[0,t],[1,t]]}},390(e){e.exports="precision highp float;\n\nuniform vec4 color;\nuniform float thickness;\nuniform float shadowBlur;\nuniform vec4 shadowColor;\nuniform float width; // Canvas width for normalization\nuniform float cutoffX; // Cutoff X position as ratio (0.0-1.0)\nuniform float cutoffOpacity; // Opacity for pre-cutoff area\n\nvarying vec2 position_vec;\nvarying vec2 prev_position_vec;\n\n/**\n * Calculate distance between point and line in screen space (ie, inputs in pixels, returns distance in pixels)\n */\nfloat distance_from_line() {\n float x0 = gl_FragCoord.x;\n float y0 = gl_FragCoord.y;\n\n // let line be defined by ax + by + c = 0;\n float a, b, c;\n\n if (position_vec.x == prev_position_vec.x) {\n a = 1.0;\n b = 0.0;\n c = -position_vec.x;\n } else {\n float slope = (position_vec.y - prev_position_vec.y)/(position_vec.x - prev_position_vec.x);\n float y_intercept = position_vec.y - slope*position_vec.x;\n\n // y = slope*x + y_intercept\n // (-slope)(x) + (1)(y) - y_intercept = 0;\n a = -slope;\n b = 1.0;\n c = -y_intercept;\n }\n\n return abs(a*x0 + b*y0 + c)/length(vec2(a, b));\n}\n\nvoid main() {\n vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\n\n // Apply cutoff opacity if active\n vec4 finalColor = vec4(color);\n if (cutoffX >= 0.0) {\n // Convert pixel position to normalized coordinate (0.0 to 1.0)\n float normalizedX = gl_FragCoord.x / width;\n \n // Apply reduced opacity to pixels left of cutoff\n if (normalizedX < cutoffX) {\n finalColor.a *= cutoffOpacity;\n }\n }\n\n float dist = distance_from_line();\n\n if (dist + shadowBlur >= thickness) {\n float percent_shadowed = ((thickness - dist) / shadowBlur);\n gl_FragColor = mix(transparent, shadowColor, percent_shadowed*percent_shadowed);\n } else {\n gl_FragColor = finalColor;\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n}\n"},400(e){e.exports="precision highp float;\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = vec4(color);\n}\n"},540(e){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},556(e,t,n){e.exports=n(694)()},557(e,t,n){n.d(t,{A:()=>s});var i=n(354),r=n.n(i),o=n(314),a=n.n(o)()(r());a.push([e.id,'.grapher-night{position:relative;background:linear-gradient(to bottom right, #131313, #1e1e1e);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-night *,.grapher-night :after,.grapher-night :before{box-sizing:content-box}.grapher-night .grapher-title{text-align:center;color:#fff;font-size:18px;margin-bottom:8px}.grapher-night .grapher-primary-container-outer{display:flex}.grapher-night .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#111, transparent 75%, transparent 100%);color:#eee;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-night .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-night .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-night .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-night .series-key .scale-label{display:inline-block;background:#111;color:silver;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-night .series-key .series-key-axis-container{display:inline-block;border:1px solid #111;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-night .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-night .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#e0e0e3}.grapher-night .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-night .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-night .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-night .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-night .series-key .series-key-axis-container .label-input-toggler path{fill:#111}.grapher-night .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#e0e0e3}.grapher-night .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none;background:rgba(0,0,0,0)}.grapher-night .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-night .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px silver}.grapher-night .range-selection{color:silver;user-select:none}.grapher-night .range-selection.range-not-dates{color:#aaa}.grapher-night .range-selection .range-buttons{text-align:right}.grapher-night .range-selection .range-buttons .options-bar{display:inline-block}.grapher-night .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-night .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:silver;background:#000;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-night .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-night .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-night .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:6px;border-radius:2px;background:#505053}.grapher-night .range-selection .range-buttons .range-button.range-button-selected{color:silver;background:#000}.grapher-night .range-selection .range-buttons .range-button.range-button-disabled,.grapher-night .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#aaa;background:#7a7a7a}.grapher-night .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-night .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-night .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-night .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-night .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-night .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-night .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #505053;margin:2px 8px 2px 0;color:#e0e0e3;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-night .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#e0e0e3}.grapher-night .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-night .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-night .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-night .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-night .grapher-main-row{display:flex}.grapher-night .grapher-main-row .central-container{width:100%}.grapher-night .range-graph-container{display:flex;margin-top:10px}.grapher-night .graph-body{width:100%;height:400px;position:relative}.grapher-night .graph-body canvas{width:100%;height:100%}.grapher-night .graph-body .grapher-tooltip,.grapher-night .graph-body .grapher-draggable-points,.grapher-night .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-night .graph-body .grapher-tooltip>svg,.grapher-night .graph-body .grapher-draggable-points>svg,.grapher-night .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-night .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-night .graph-body .grapher-tooltip .tooltip-item path{fill:rgba(0,0,0,.6)}.grapher-night .graph-body .grapher-tooltip .tooltip-item text{fill:#f0f0f0;dominant-baseline:hanging;text-anchor:start}.grapher-night .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#000}.grapher-night .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #ccc}.grapher-night .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-night .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-night .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.3);color:#f0f0f0;padding:2px 4px;max-width:max-content;width:200px}.grapher-night .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-night .graph-body .grapher-vertical-lines line{stroke:#ccc}.grapher-night .graph-body .grapher-vertical-lines polygon{fill:#ccc}.grapher-night .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-night .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:hsla(0,0%,100%,.3)}.grapher-night .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:rgba(0,0,0,.6);border:1px solid hsla(0,0%,100%,.3);color:#f0f0f0;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-night .graph-body .bounds-selection{position:absolute;background:hsla(0,0%,100%,.1)}.grapher-night .axis{overflow:visible;user-select:none}.grapher-night .axis.x-axis{width:1px;height:20px}.grapher-night .axis.x-axis.x-axis-dual{height:30px}.grapher-night .axis.x-axis{display:block}.grapher-night .axis.y-axis{height:400px}.grapher-night .axis.y-axis .axis-item text{text-anchor:end}.grapher-night .axis.y-axis .y-axis-label{text-anchor:middle;fill:#e0e0e3}.grapher-night .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-night .axis.y-axis .series-color-box{cursor:pointer}.grapher-night .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-night .axis .axis-line{stroke:rgba(192,192,192,.3);stroke-width:1px}.grapher-night .axis .axis-item path{stroke:rgba(192,192,192,.3);stroke-width:1px}.grapher-night .axis .axis-item text{fill:#e0e0e3;font-size:8px}.grapher-night .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-night .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-night .wind-arrows{color:#e0e0e3;opacity:.7}.grapher-night .range-selection-graph{width:100%;background-color:rgba(0,0,0,.3);height:calc(50px + 14px)}.grapher-night .range-selection-graph .graph-body-secondary{height:50px}.grapher-night .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-night .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection{fill:hsla(0,0%,100%,.1);cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#aaa;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#303033}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#808083;cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#fff;stroke-width:1px;cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#aaa;fill:#666;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#aaa;stroke-width:1;transition:stroke-width .15s ease}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#9f9f9f;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#9f9f9f;stroke-width:1px}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#fff}.grapher-night .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#fff}.grapher-night input,.grapher-night textarea{background:rgba(0,0,0,0);border:1px solid #505053;margin:2px 0;color:#e0e0e3;padding:1px 2px;text-align:center}.grapher-night input:focus,.grapher-night textarea:focus{outline:none;border-color:#e0e0e3}.grapher-night.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-night.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-night.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-night.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-night.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-night.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#ddd}.grapher-day{position:relative;background:linear-gradient(to bottom right, #FFF, #FFF);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-day *,.grapher-day :after,.grapher-day :before{box-sizing:content-box}.grapher-day .grapher-title{text-align:center;color:#000;font-size:18px;margin-bottom:8px}.grapher-day .grapher-primary-container-outer{display:flex}.grapher-day .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#EEE, transparent 75%, transparent 100%);color:#111;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-day .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-day .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-day .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-day .series-key .scale-label{display:inline-block;background:#b0b0b7;color:#000;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-day .series-key .series-key-axis-container{display:inline-block;border:1px solid #b0b0b7;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-day .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-day .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#505053}.grapher-day .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-day .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-day .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-day .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-day .series-key .series-key-axis-container .label-input-toggler path{fill:#b0b0b7}.grapher-day .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#505053}.grapher-day .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none}.grapher-day .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-day .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px #000}.grapher-day .range-selection{color:#444;user-select:none}.grapher-day .range-selection.range-not-dates{color:#888}.grapher-day .range-selection .range-buttons{text-align:right}.grapher-day .range-selection .range-buttons .options-bar{display:inline-block}.grapher-day .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-day .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:#000;background:#fff;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-day .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-day .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-day .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:4px;border-radius:2px;background:#fff;border:1px dotted silver}.grapher-day .range-selection .range-buttons .range-button.range-button-selected{color:#000;background:#fff;border:1px solid #000}.grapher-day .range-selection .range-buttons .range-button.range-button-disabled,.grapher-day .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#888;background:#eee}.grapher-day .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-day .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-day .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-day .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-day .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-day .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-day .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 8px 2px 0;color:#222;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-day .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#505053}.grapher-day .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-day .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-day .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-day .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-day .grapher-main-row{display:flex}.grapher-day .grapher-main-row .central-container{width:100%}.grapher-day .range-graph-container{display:flex;margin-top:10px}.grapher-day .graph-body{width:100%;height:400px;position:relative}.grapher-day .graph-body canvas{width:100%;height:100%}.grapher-day .graph-body .grapher-tooltip,.grapher-day .graph-body .grapher-draggable-points,.grapher-day .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-day .graph-body .grapher-tooltip>svg,.grapher-day .graph-body .grapher-draggable-points>svg,.grapher-day .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-day .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-day .graph-body .grapher-tooltip .tooltip-item path{fill:hsla(0,0%,100%,.6)}.grapher-day .graph-body .grapher-tooltip .tooltip-item text{fill:#0f0f0f;dominant-baseline:hanging;text-anchor:start}.grapher-day .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#fff}.grapher-day .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #333}.grapher-day .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-day .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-day .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.grapher-day .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-day .graph-body .grapher-vertical-lines line{stroke:#333}.grapher-day .graph-body .grapher-vertical-lines polygon{fill:#333}.grapher-day .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-day .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:rgba(0,0,0,.3)}.grapher-day .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-day .graph-body .bounds-selection{position:absolute;background:rgba(0,0,0,.02)}.grapher-day .axis{overflow:visible;user-select:none}.grapher-day .axis.x-axis{width:1px;height:20px}.grapher-day .axis.x-axis.x-axis-dual{height:30px}.grapher-day .axis.x-axis{display:block}.grapher-day .axis.y-axis{height:400px}.grapher-day .axis.y-axis .axis-item text{text-anchor:end}.grapher-day .axis.y-axis .y-axis-label{text-anchor:middle;fill:#1f1f1c}.grapher-day .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-day .axis.y-axis .series-color-box{cursor:pointer}.grapher-day .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-day .axis .axis-line{stroke:#656565;stroke-width:1px}.grapher-day .axis .axis-item path{stroke:#bfbfbf;stroke-width:1px}.grapher-day .axis .axis-item text{fill:#1f1f1c;font-size:8px}.grapher-day .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-day .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-day .wind-arrows{color:#1f1f1c;opacity:.7}.grapher-day .range-selection-graph{width:100%;background-color:hsla(0,0%,100%,.3);height:calc(50px + 14px)}.grapher-day .range-selection-graph .graph-body-secondary{height:50px}.grapher-day .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-day .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-day .range-selection-graph .graph-body-secondary svg .target-selection{fill:rgba(0,0,0,.02);cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#eee}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#b0b0b7;cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#333;stroke-width:1px;cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;fill:#b0b0b7;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#333;stroke-width:1;transition:stroke-width .15s ease}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#555;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#555;stroke-width:1px}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#000}.grapher-day .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#000}.grapher-day input,.grapher-day textarea{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 0;color:#222;padding:1px 2px;text-align:center}.grapher-day input:focus,.grapher-day textarea:focus{outline:none;border-color:#505053}.grapher-day.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-day.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-day.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-day.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-day.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-day.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#222}.grapher-export{position:relative;background:linear-gradient(to bottom right, #FFF, #FFF);padding:10px;font-family:sans-serif;font-size:12px;line-height:normal}.grapher-export *,.grapher-export :after,.grapher-export :before{box-sizing:content-box}.grapher-export .grapher-title{text-align:center;color:#000;font-size:18px;margin-bottom:8px}.grapher-export .grapher-primary-container-outer{display:flex}.grapher-export .grapher-primary-container-outer .grapher-sidebar{background:linear-gradient(#EEE, transparent 75%, transparent 100%);color:#111;padding:50px 6px 5px 10px;margin-left:-10px;margin-top:-10px;margin-bottom:-10px;overflow-y:auto;flex-shrink:0}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle{white-space:nowrap}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle+.series-toggle{margin-top:3px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle label{display:inline-block;position:relative;user-select:none}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input[type=checkbox]{opacity:0;cursor:pointer;height:0;width:0;margin-right:11px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input:not(:checked)~.checkmark{background-color:rgba(0,0,0,0) !important}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle input:checked~.checkmark:after{display:block}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark{position:absolute;top:1px;left:0;height:7px;width:7px;background-color:#eee;border:2px solid;border-radius:1px}.grapher-export .grapher-primary-container-outer .grapher-sidebar .series-toggle .checkmark:after{content:"";position:absolute;display:none;left:.5px;top:-1.5px;width:3px;height:6px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.grapher-export .grapher-primary-container-outer .grapher-primary-container-body{width:100%;padding-left:2px}.grapher-export .series-key{text-align:center;margin-bottom:-14px;position:relative}.grapher-export .series-key .scale-label{display:inline-block;background:#b0b0b7;color:#000;transform:rotate(-90deg);width:24px;margin-left:-5px;vertical-align:top;margin-top:4px;padding-bottom:2px;cursor:pointer;user-select:none}.grapher-export .series-key .series-key-axis-container{display:inline-block;border:1px solid #b0b0b7;min-width:18px;min-height:24px;vertical-align:top;white-space:nowrap}.grapher-export .series-key .series-key-axis-container+.series-key-axis-container{margin-left:4px}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .scale-label{width:46px;margin-top:15px;margin-left:-15px;margin-right:-12px}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .series-key-axis-label-container{display:block}.grapher-export .series-key .series-key-axis-container.series-key-axis-container-showing-label .label-input-toggler path{fill:#505053}.grapher-export .series-key .series-key-axis-container .series-key-axis-container-body{display:inline-block}.grapher-export .series-key .series-key-axis-container .series-key-axis-container-body>div{white-space:initial}.grapher-export .series-key .series-key-axis-container .series-key-axis-label-container{display:none}.grapher-export .series-key .series-key-axis-container .label-input-toggler{width:16px;cursor:pointer;display:inline-block;vertical-align:top;margin:4px 2px}.grapher-export .series-key .series-key-axis-container .label-input-toggler path{fill:#b0b0b7}.grapher-export .series-key .series-key-axis-container .label-input-toggler:hover path{fill:#505053}.grapher-export .series-key .series-key-item{border:1px solid currentColor;padding:2px;margin:2px;display:inline-block;cursor:pointer;user-select:none}.grapher-export .series-key .series-key-item+.series-key-item{margin-left:4px}.grapher-export .series-key .series-key-item.series-key-item-highlighted{box-shadow:0 0 4px #000}.grapher-export .range-selection{color:#444;user-select:none}.grapher-export .range-selection.range-not-dates{color:#888}.grapher-export .range-selection .range-buttons{text-align:right}.grapher-export .range-selection .range-buttons .options-bar{display:inline-block}.grapher-export .range-selection .range-buttons .option-tooltip{position:relative;display:inline-block;border-bottom:1px dotted #000}.grapher-export .range-selection .range-buttons .option-tooltip .option-tooltip-text{visibility:hidden;color:#000;background:#fff;text-align:center;padding:5px 5px;border-radius:6px;position:absolute;z-index:1;border:1px solid #000;width:120px;margin-left:-65px;top:calc(100% + 7px);left:50%}.grapher-export .range-selection .range-buttons .option-tooltip:hover .option-tooltip-text{visibility:visible}.grapher-export .range-selection .range-buttons .option-tooltip .option-tooltip-text::after{content:" ";position:absolute;bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-style:solid;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #000 rgba(0,0,0,0)}.grapher-export .range-selection .range-buttons .range-button{display:inline-block;cursor:pointer;padding:4px 8px;margin-left:4px;border-radius:2px;background:#fff;border:1px dotted silver}.grapher-export .range-selection .range-buttons .range-button.range-button-selected{color:#000;background:#fff;border:1px solid #000}.grapher-export .range-selection .range-buttons .range-button.range-button-disabled,.grapher-export .range-selection .range-buttons .range-button.range-button-selected.range-button-disabled{cursor:not-allowed;color:#888;background:#eee}.grapher-export .range-selection .range-buttons .range-button .icon-container{position:relative;width:0}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-narrow svg{left:-3px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-square{width:5px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-square svg{left:-5px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-448{width:3px}.grapher-export .range-selection .range-buttons .range-button .icon-container.icon-container-448 svg{left:-5px}.grapher-export .range-selection .range-buttons .range-button .icon-container:before{content:"A";opacity:0}.grapher-export .range-selection .range-buttons .range-button .icon-container svg{height:15px;position:absolute;top:-1px;left:-4px}.grapher-export .range-selection .range-buttons .range-selection-history+.range-selection-history{margin-right:8px;margin-left:4px}.grapher-export .range-selection .range-buttons .percentile-button>div{display:inline-block}.grapher-export .range-selection .range-buttons .percentile-button input{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 8px 2px 0;color:#222;padding:1px 2px;width:20px;font-size:11px;-moz-appearance:textfield}.grapher-export .range-selection .range-buttons .percentile-button input:focus{outline:none;border-color:#505053}.grapher-export .range-selection .range-buttons .percentile-button input::-webkit-outer-spin-button,.grapher-export .range-selection .range-buttons .percentile-button input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.grapher-export .range-selection .range-buttons .percentile-button .icon-container.icon-container-narrow svg{height:12px;top:1px;left:-5px}.grapher-export .range-selection .range-buttons .showing-options-button{margin-right:8px}.grapher-export .grapher-main-row{display:flex}.grapher-export .grapher-main-row .central-container{width:100%}.grapher-export .range-graph-container{display:flex;margin-top:10px}.grapher-export .graph-body{width:100%;height:400px;position:relative}.grapher-export .graph-body canvas{width:100%;height:100%}.grapher-export .graph-body .grapher-tooltip,.grapher-export .graph-body .grapher-draggable-points,.grapher-export .graph-body .grapher-vertical-lines{position:absolute;top:0;left:0;right:0;z-index:20}.grapher-export .graph-body .grapher-tooltip>svg,.grapher-export .graph-body .grapher-draggable-points>svg,.grapher-export .graph-body .grapher-vertical-lines>svg{position:absolute;overflow:visible;left:0}.grapher-export .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-export .graph-body .grapher-tooltip .tooltip-item path{fill:hsla(0,0%,100%,.6)}.grapher-export .graph-body .grapher-tooltip .tooltip-item text{fill:#0f0f0f;dominant-baseline:hanging;text-anchor:start}.grapher-export .graph-body .grapher-tooltip .tooltip-item.tooltip-item-fixed path{fill:#fff}.grapher-export .graph-body .grapher-tooltip .line{position:absolute;height:400px;border-left:1px solid #333}.grapher-export .graph-body .grapher-tooltip .custom-tooltip-container{position:absolute}.grapher-export .graph-body .grapher-context-menu{position:absolute;top:0;left:0}.grapher-export .graph-body .grapher-context-menu .menu-item .menu-text{user-select:all;position:absolute;top:0;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.grapher-export .graph-body .grapher-draggable-points circle{cursor:pointer}.grapher-export .graph-body .grapher-vertical-lines line{stroke:#333}.grapher-export .graph-body .grapher-vertical-lines polygon{fill:#333}.grapher-export .graph-body .grapher-annotations{position:absolute;top:0;pointer-events:none;user-select:none;z-index:10}.grapher-export .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;background:rgba(0,0,0,.3)}.grapher-export .graph-body .grapher-annotations .grapher-annotation.grapher-annotation-range .annotation-range-marker{display:inline-block;background-color:rgba(128,128,128,.2);background-image:repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);background-size:40px 40px;border-right:1px solid #fff;border-left:1px solid #fff}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;background:hsla(0,0%,100%,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;white-space:nowrap;font-size:10px;z-index:10}.grapher-export .graph-body .bounds-selection{position:absolute;background:rgba(0,0,0,.02)}.grapher-export .axis{overflow:visible;user-select:none}.grapher-export .axis.x-axis{width:1px;height:20px}.grapher-export .axis.x-axis.x-axis-dual{height:30px}.grapher-export .axis.x-axis{display:block}.grapher-export .axis.y-axis{height:400px}.grapher-export .axis.y-axis .axis-item text{text-anchor:end}.grapher-export .axis.y-axis .y-axis-label{text-anchor:middle;fill:#000}.grapher-export .axis.y-axis .y-axis-label.y-axis-big-label{font-size:18px}.grapher-export .axis.y-axis .series-color-box{cursor:pointer}.grapher-export .axis.y-axis.y-axis-right .axis-item text{text-anchor:start}.grapher-export .axis .axis-line{stroke:#000;stroke-width:1px}.grapher-export .axis .axis-item path{stroke:#bfbfbf;stroke-width:1px}.grapher-export .axis .axis-item text{fill:#000;font-size:8px}.grapher-export .axis .axis-item.axis-item-major .axis-tick{stroke-width:1px}.grapher-export .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-export .wind-arrows{color:#000;opacity:.7}.grapher-export .range-selection-graph{width:100%;background-color:hsla(0,0%,100%,.3);height:calc(50px + 14px)}.grapher-export .range-selection-graph .graph-body-secondary{height:50px}.grapher-export .range-selection-graph .graph-body-secondary canvas{height:100%}.grapher-export .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;width:100%;overflow:visible}.grapher-export .range-selection-graph .graph-body-secondary svg .target-selection{fill:rgba(0,0,0,.02);cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;cursor:ew-resize;fill:rgba(0,0,0,0)}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-track{fill:#eee}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar{fill:#b0b0b7;cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{stroke:#333;stroke-width:1px;cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-handle-hit{cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;fill:#b0b0b7;stroke-width:1px;cursor:ew-resize;transition:stroke-width .15s ease,fill .15s ease}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-hit{cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle .selection-handle-line{stroke:#333;stroke-width:1;transition:stroke-width .15s ease}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-handle-line{stroke-width:3}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-handle-line{stroke-width:3}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle:hover .selection-bar-handle{stroke-width:2px}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-handle.selection-handle-dragging .selection-bar-handle{stroke-width:2px}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item text{fill:#333;text-anchor:start;font-size:8px;user-select:none;dominant-baseline:text-after-edge}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#333;stroke-width:1px}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted path{stroke:#000}.grapher-export .range-selection-graph .graph-body-secondary svg .axis-item.axis-item-highlighted text{fill:#000}.grapher-export input,.grapher-export textarea{background:rgba(0,0,0,0);border:1px solid #e0e0e3;margin:2px 0;color:#222;padding:1px 2px;text-align:center}.grapher-export input:focus,.grapher-export textarea:focus{outline:none;border-color:#505053}.grapher-export.grapher-dragging-y .y-axis{border:2px dashed silver;margin:-2px;flex-shrink:0}.grapher-export.grapher-dragging-y .y-axis+.y-axis{border-left:none}.grapher-export.grapher-fullscreen{height:calc(100vh - 2*10px)}.grapher-export.grapher-fixed-height .grapher-primary-container-outer{height:100%}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body{height:100%;display:flex;flex-direction:column}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row{flex-grow:1}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container{display:flex;flex-direction:column;height:100%}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .central-container>.graph-body{flex-grow:1;height:unset}.grapher-export.grapher-fixed-height .grapher-primary-container-outer .grapher-primary-container-body .grapher-main-row .axis.y-axis{height:calc(100% - 40px)}.grapher-export.new-grapher{height:auto;border:2px dashed silver;text-align:center;color:#222}',"",{version:3,sources:["webpack://./src/grapher.scss"],names:[],mappings:"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",sourcesContent:["@mixin grapher(\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n\n $background-color-1: #131313,\n $background-color-2: #1e1e1e,\n\n $tooltip-line-color: #CCC,\n $tooltip-background-color: rgba(0, 0, 0, 0.6),\n $tooltip-text-color: #F0F0F0,\n $vertical-line-color: #CCC,\n\n $axis-line-color: rgb(192, 192, 192, 0.3),\n $axis-line-width: 1px,\n $axis-tick-color: rgb(192, 192, 192, 0.3),\n $axis-text-color: #E0E0E3,\n\n $range-selection-text-color: silver,\n $range-selection-button-color: #505053,\n $range-selection-button-selected-color: black,\n $range-selection-text-selected-color: silver,\n $range-selection-text-color-faded: #AAA,\n $range-selection-button-color-faded: #7A7A7A,\n $range-selection-button-border: null,\n $range-selection-selected-button-border: null,\n\n $range-graph-selection-background-color: rgba(0, 0, 0, 0.3),\n $range-graph-selection-range-color: rgba(255, 255, 255, 0.1),\n $range-graph-selection-outline-color: #AAA,\n $range-graph-selection-bar-color: #808083,\n $range-graph-selection-bar-track-color: #303033,\n $range-graph-selection-bar-rifles-color: #FFF,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #AAA,\n $range-graph-handle-fill-color: #666,\n $range-graph-axis-text-color: #9f9f9f,\n $range-graph-tick-highlighted-color: #FFF,\n $range-graph-text-highlighted-color: #FFF,\n\n $annotation-background-color: rgba(255, 255, 255, 0.3),\n\n $series-key-axis-container-color: #111,\n $series-key-input-border-color: #505053,\n $series-key-input-selected-border-color: #E0E0E3,\n $series-key-input-text-color: #E0E0E3,\n $series-key-background: transparent,\n $scale-label-color: silver,\n $series-key-shadow-color: silver,\n\n $title-color: white,\n\n $sidebar-background-color: #111,\n $sidebar-text-color: #EEE,\n\n $new-grapher-color: #DDD\n) {\n $x-axis-height: 20px;\n $x-axis-dual-height: 30px;\n $padding: 10px;\n\n $axis-z-index: 0;\n $graph-body-z-index: 1;\n\n position: relative;\n background: linear-gradient(to bottom right, $background-color-1, $background-color-2);\n padding: $padding;\n\n font-family: sans-serif;\n font-size: 12px;\n line-height: normal;\n\n *, :after, :before {\n box-sizing: content-box;\n }\n\n .grapher-title {\n text-align: center;\n color: $title-color;\n font-size: 18px;\n margin-bottom: 8px;\n }\n\n .grapher-primary-container-outer {\n display: flex;\n\n .grapher-sidebar {\n background: linear-gradient($sidebar-background-color, transparent 75%, transparent 100%);\n color: $sidebar-text-color;\n padding: 50px 6px 5px 10px;\n margin-left: -$padding;\n margin-top: -$padding;\n margin-bottom: -$padding;\n overflow-y: auto;\n flex-shrink: 0;\n\n .series-toggle {\n white-space: nowrap;\n\n & + .series-toggle {\n margin-top: 3px;\n }\n\n label {\n display: inline-block;\n position: relative;\n user-select: none;\n }\n\n input[type='checkbox'] {\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n margin-right: 11px;\n }\n\n input:not(:checked) ~ .checkmark {\n background-color: transparent !important;\n }\n\n input:checked ~ .checkmark:after {\n display: block;\n }\n\n .checkmark {\n position: absolute;\n top: 1px;\n left: 0;\n height: 7px;\n width: 7px;\n background-color: #eee;\n border: 2px solid;\n border-radius: 1px;\n }\n\n .checkmark:after {\n content: \"\";\n position: absolute;\n display: none;\n\n left: 0.5px;\n top: -1.5px;\n width: 3px;\n height: 6px;\n border: solid white;\n border-width: 0 2px 2px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n }\n }\n }\n\n .grapher-primary-container-body {\n width: 100%;\n padding-left: 2px;\n }\n }\n\n .series-key {\n text-align: center;\n margin-bottom: -14px;\n position: relative;\n\n .scale-label {\n display: inline-block;\n background: $series-key-axis-container-color;\n color: $scale-label-color;\n transform: rotate(-90deg);\n width: 24px;\n margin-left: -5px;\n vertical-align: top;\n margin-top: 4px;\n padding-bottom: 2px;\n cursor: pointer;\n user-select: none;\n }\n\n .series-key-axis-container {\n display: inline-block;\n border: 1px solid $series-key-axis-container-color;\n\n min-width: 18px;\n min-height: 24px;\n vertical-align: top;\n\n white-space: nowrap;\n\n & + .series-key-axis-container {\n margin-left: 4px;\n }\n\n &.series-key-axis-container-showing-label {\n .scale-label {\n width: 46px;\n margin-top: 15px;\n margin-left: -15px;\n margin-right: -12px;\n }\n\n .series-key-axis-label-container {\n display: block;\n }\n\n .label-input-toggler {\n path {\n fill: $series-key-input-selected-border-color;\n }\n }\n }\n\n .series-key-axis-container-body {\n display: inline-block;\n\n & > div {\n white-space: initial;\n }\n }\n\n .series-key-axis-label-container {\n display: none;\n }\n\n .label-input-toggler {\n width: 16px;\n cursor: pointer;\n display: inline-block;\n vertical-align: top;\n margin: 4px 2px;\n\n path {\n fill: $series-key-axis-container-color;\n }\n\n &:hover {\n path {\n fill: $series-key-input-selected-border-color;\n }\n }\n }\n }\n\n .series-key-item {\n border: 1px solid currentColor;\n padding: 2px;\n margin: 2px;\n display: inline-block;\n cursor: pointer;\n user-select: none;\n background: $series-key-background;\n\n & + .series-key-item {\n margin-left: 4px;\n }\n\n &.series-key-item-highlighted {\n box-shadow: 0 0 4px $series-key-shadow-color;\n }\n }\n }\n\n .range-selection {\n color: $range-selection-text-color;\n user-select: none;\n\n &.range-not-dates {\n color: $range-selection-text-color-faded;\n }\n\n .range-buttons {\n text-align: right;\n\n .options-bar {\n display: inline-block;\n }\n\n .option-tooltip {\n position: relative;\n display: inline-block;\n border-bottom: 1px dotted black;\n\n .option-tooltip-text {\n visibility: hidden;\n color: $range-selection-text-selected-color;\n background: $range-selection-button-selected-color;\n text-align: center;\n padding: 5px 5px;\n border-radius: 6px;\n position: absolute;\n z-index: 1;\n border: 1px solid black;\n\n width: 120px;\n margin-left: -65px;\n top: calc(100% + 7px);\n left: 50%;\n }\n\n &:hover .option-tooltip-text {\n visibility: visible;\n }\n\n .option-tooltip-text::after {\n content: \" \";\n position: absolute;\n bottom: 100%;\n left: 50%;\n margin-left: -5px;\n border-width: 5px;\n border-style: solid;\n border-color: transparent transparent black transparent;\n }\n }\n\n .range-button {\n display: inline-block;\n cursor: pointer;\n padding: 4px 8px;\n @if ($range-selection-button-border == null) {\n margin-left: 6px;\n } @else {\n margin-left: 4px;\n }\n\n border-radius: 2px;\n background: $range-selection-button-color;\n border: $range-selection-button-border;\n\n &.range-button-selected {\n color: $range-selection-text-selected-color;\n background: $range-selection-button-selected-color;\n border: $range-selection-selected-button-border;\n }\n\n &.range-button-disabled, &.range-button-selected.range-button-disabled {\n cursor: not-allowed;\n color: $range-selection-text-color-faded;\n background: $range-selection-button-color-faded;\n }\n\n .icon-container {\n position: relative;\n width: 0;\n\n &.icon-container-narrow {\n svg {\n left: -3px;\n }\n }\n\n &.icon-container-square {\n width: 5px;\n\n svg {\n left: -5px;\n }\n }\n\n &.icon-container-448 {\n width: 3px;\n\n svg {\n left: -5px;\n }\n }\n\n &:before {\n content: 'A';\n opacity: 0;\n }\n\n svg {\n height: 15px;\n position: absolute;\n top: -1px;\n left: -4px;\n }\n }\n }\n\n .range-selection-history + .range-selection-history {\n margin-right: 8px;\n margin-left: 4px;\n }\n\n .percentile-button {\n & > div {\n display: inline-block;\n }\n\n input {\n background: transparent;\n border: 1px solid $series-key-input-border-color;\n margin: 2px 8px 2px 0;\n color: $series-key-input-text-color;\n padding: 1px 2px;\n width: 20px;\n font-size: 11px;\n -moz-appearance: textfield;\n\n &:focus {\n outline: none;\n border-color: $series-key-input-selected-border-color;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n .icon-container.icon-container-narrow {\n svg {\n height: 12px;\n top: 1px;\n left: -5px;\n }\n }\n }\n\n .showing-options-button {\n margin-right: 8px;\n }\n }\n }\n\n .grapher-main-row {\n display: flex;\n\n .central-container {\n width: 100%;\n }\n }\n\n .range-graph-container {\n display: flex;\n margin-top: 10px;\n }\n\n .graph-body {\n width: 100%;\n height: $primary-graph-body-height;\n position: relative;\n\n canvas {\n width: 100%;\n height: 100%;\n }\n\n .grapher-tooltip, .grapher-draggable-points, .grapher-vertical-lines {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 20;\n\n > svg {\n position: absolute;\n overflow: visible;\n left: 0;\n }\n }\n\n .grapher-vertical-lines {\n pointer-events: none;\n user-select: none;\n }\n\n .grapher-tooltip {\n .tooltip-item {\n path {\n fill: $tooltip-background-color;\n }\n\n text {\n fill: $tooltip-text-color;\n dominant-baseline: hanging;\n text-anchor: start;\n }\n\n &.tooltip-item-fixed {\n path {\n fill: rgba($tooltip-background-color, 1);\n }\n }\n }\n\n .line {\n position: absolute;\n height: 400px;\n border-left: 1px solid $tooltip-line-color;\n }\n\n .custom-tooltip-container {\n position: absolute;\n }\n }\n\n .grapher-context-menu {\n position: absolute;\n top: 0;\n left: 0;\n .menu-item {\n\n .menu-text {\n user-select: all;\n position: absolute;\n top: 0;\n background: $tooltip-background-color;\n border: 1px solid $annotation-background-color;\n color: $tooltip-text-color;\n padding: 2px 4px;\n max-width: max-content;\n width: 200px;\n }\n }\n }\n\n .grapher-draggable-points {\n circle {\n cursor: pointer;\n }\n }\n\n .grapher-vertical-lines {\n line {\n stroke: $vertical-line-color;\n }\n\n polygon {\n fill: $vertical-line-color;\n }\n }\n\n .grapher-annotations {\n position: absolute;\n top: 0;\n pointer-events: none;\n user-select: none;\n z-index: 10;\n\n .grapher-annotation {\n position: absolute;\n\n .annotation-marker {\n display: inline-block;\n background: $annotation-background-color;\n }\n\n &.grapher-annotation-range {\n .annotation-range-marker {\n display: inline-block;\n background-color: rgba(128, 128, 128, 0.2);\n background-image: repeating-linear-gradient(53deg, #626266, #626266 1px, rgba(255, 255, 255, 0.1) 1px, rgba(255, 255, 255, 0.1) 4px);\n background-size: 40px 40px;\n border-right: 1px solid white;\n border-left: 1px solid white;\n }\n }\n\n .annotation-text {\n position: absolute;\n background: $tooltip-background-color;\n border: 1px solid $annotation-background-color;\n color: $tooltip-text-color;\n padding: 2px 4px;\n white-space: nowrap;\n font-size: 10px;\n z-index: 10;\n }\n }\n }\n\n .bounds-selection {\n position: absolute;\n background: $range-graph-selection-range-color;\n }\n }\n\n .axis {\n overflow: visible;\n user-select: none;\n\n &.x-axis {\n width: 1px;\n height: $x-axis-height;\n \n &.x-axis-dual {\n height: $x-axis-dual-height;\n }\n display: block;\n }\n\n &.y-axis {\n height: $primary-graph-body-height;\n\n .axis-item text {\n text-anchor: end;\n }\n\n .y-axis-label {\n text-anchor: middle;\n fill: $axis-text-color;\n\n &.y-axis-big-label {\n font-size: 18px;\n }\n }\n\n .series-color-box {\n cursor: pointer;\n }\n\n &.y-axis-right {\n .axis-item text {\n text-anchor: start;\n }\n }\n }\n\n .axis-line {\n stroke: $axis-line-color;\n stroke-width: $axis-line-width;\n }\n\n .axis-item {\n path {\n stroke: $axis-tick-color;\n stroke-width: 1px;\n }\n\n text {\n fill: $axis-text-color;\n font-size: 8px;\n }\n\n &.axis-item-major {\n .axis-tick {\n stroke-width: 1px;\n }\n }\n\n &.axis-item-big-labels {\n text {\n font-size: 16px;\n }\n }\n }\n }\n\n .wind-arrows {\n color: $axis-text-color;\n opacity: 0.7;\n }\n\n .range-selection-graph {\n width: 100%;\n background-color: $range-graph-selection-background-color;\n height: calc(#{$secondary-graph-body-height} + #{$range-graph-selection-bar-height}); \n\n .graph-body-secondary {\n height: $secondary-graph-body-height;\n\n canvas {\n height: 100%;\n }\n\n svg {\n position: absolute;\n left: 0;\n width: 100%;\n overflow: visible;\n\n .target-selection {\n fill: $range-graph-selection-range-color;\n cursor: ew-resize;\n }\n\n\n .target-selection-outline {\n stroke: $range-graph-selection-outline-color;\n cursor: ew-resize;\n fill: transparent;\n }\n\n .selection-bar-track {\n fill: $range-graph-selection-bar-track-color;\n }\n\n .selection-bar {\n fill: $range-graph-selection-bar-color;\n cursor: ew-resize;\n }\n\n .selection-bar-rifles {\n stroke: $range-graph-selection-bar-rifles-color;\n stroke-width: 1px;\n cursor: ew-resize;\n }\n\n .selection-bar-handle-hit {\n cursor: ew-resize;\n }\n\n .selection-bar-handle {\n stroke: $range-graph-handle-color;\n fill: $range-graph-handle-fill-color;\n stroke-width: 1px;\n cursor: ew-resize;\n transition: stroke-width 0.15s ease, fill 0.15s ease;\n }\n\n .selection-handle {\n .selection-handle-hit {\n cursor: ew-resize;\n }\n\n .selection-handle-line {\n stroke: $range-graph-handle-color;\n stroke-width: 1;\n transition: stroke-width 0.15s ease;\n }\n\n &:hover .selection-handle-line {\n stroke-width: 3;\n }\n\n &.selection-handle-dragging .selection-handle-line {\n stroke-width: 3;\n }\n\n &:hover .selection-bar-handle {\n stroke-width: 2px;\n }\n\n &.selection-handle-dragging .selection-bar-handle {\n stroke-width: 2px;\n }\n }\n\n .axis-item {\n text {\n fill: $range-graph-axis-text-color;\n text-anchor: start;\n font-size: 8px;\n user-select: none;\n dominant-baseline: text-after-edge;\n }\n\n path {\n stroke: $range-graph-axis-text-color;\n stroke-width: 1px;\n }\n \n &.axis-item-highlighted {\n path {\n stroke: $range-graph-tick-highlighted-color;\n }\n \n text {\n fill: $range-graph-text-highlighted-color;\n }\n }\n }\n }\n }\n }\n\n input, textarea {\n background: transparent;\n border: 1px solid $series-key-input-border-color;\n margin: 2px 0;\n color: $series-key-input-text-color;\n padding: 1px 2px;\n text-align: center;\n\n &:focus {\n outline: none;\n border-color: $series-key-input-selected-border-color;\n }\n }\n\n &.grapher-dragging-y {\n .y-axis {\n border: 2px dashed silver;\n margin: -2px;\n flex-shrink: 0;\n\n & + .y-axis {\n border-left: none;\n }\n }\n }\n\n &.grapher-fullscreen {\n height: calc(100vh - 2*#{$padding});\n }\n\n &.grapher-fixed-height {\n .grapher-primary-container-outer {\n height: 100%;\n\n .grapher-primary-container-body {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .grapher-main-row {\n flex-grow: 1;\n\n .central-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n\n > .graph-body {\n flex-grow: 1;\n height: unset;\n }\n }\n\n .axis.y-axis {\n height: calc(100% - #{2*$x-axis-height});\n }\n }\n }\n }\n }\n\n &.new-grapher {\n height: auto;\n border: 2px dashed silver;\n text-align: center;\n color: $new-grapher-color;\n }\n}\n\n@mixin grapher-theme-night (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height\n );\n}\n\n@mixin grapher-theme-day (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height,\n\n $background-color-1: #FFF,\n $background-color-2: #FFF,\n\n $tooltip-line-color: invert(#CCC),\n $tooltip-background-color: invert(rgba(0, 0, 0, 0.6)),\n $tooltip-text-color: invert(#F0F0F0),\n $vertical-line-color: invert(#CCC),\n\n $axis-line-color: #656565,\n $axis-tick-color: #BFBFBF,\n $axis-text-color: invert(#E0E0E3),\n\n $range-selection-text-color: #444,\n $range-selection-button-color: white,\n $range-selection-button-selected-color: white,\n $range-selection-text-selected-color: black,\n $range-selection-text-color-faded: #888,\n $range-selection-button-color-faded: #EEE,\n $range-selection-button-border: 1px dotted silver,\n $range-selection-selected-button-border: 1px solid black,\n\n $range-graph-selection-background-color: rgba(255, 255, 255, 0.3),\n $range-graph-selection-range-color: rgba(0, 0, 0, 0.02),\n $range-graph-selection-outline-color: #333,\n $range-graph-selection-bar-color: #B0B0B7,\n $range-graph-selection-bar-track-color: #EEE,\n $range-graph-selection-bar-rifles-color: #333,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\n $range-graph-axis-text-color: #555,\n $range-graph-tick-highlighted-color: #000,\n $range-graph-text-highlighted-color: #000,\n\n $annotation-background-color: rgba(0, 0, 0, 0.3),\n\n $series-key-axis-container-color: #B0B0B7,\n $series-key-input-border-color: #E0E0E3,\n $series-key-input-selected-border-color: #505053,\n $series-key-input-text-color: #222,\n $series-key-background: null,\n $series-key-shadow-color: black,\n $scale-label-color: black,\n\n $title-color: black,\n\n $sidebar-background-color: #EEE,\n $sidebar-text-color: #111,\n\n $new-grapher-color: #222\n );\n}\n\n@mixin grapher-theme-export (\n $primary-graph-body-height: 400px,\n $secondary-graph-body-height: 50px,\n) {\n @include grapher(\n $primary-graph-body-height,\n $secondary-graph-body-height,\n\n $background-color-1: #FFF,\n $background-color-2: #FFF,\n\n $tooltip-line-color: invert(#CCC),\n $tooltip-background-color: invert(rgba(0, 0, 0, 0.6)),\n $tooltip-text-color: invert(#F0F0F0),\n $vertical-line-color: invert(#CCC),\n\n $axis-line-color: black,\n $axis-line-width: 1px,\n $axis-tick-color: #BFBFBF,\n $axis-text-color: black,\n\n $range-selection-text-color: #444,\n $range-selection-button-color: white,\n $range-selection-button-selected-color: white,\n $range-selection-text-selected-color: black,\n $range-selection-text-color-faded: #888,\n $range-selection-button-color-faded: #EEE,\n $range-selection-button-border: 1px dotted silver,\n $range-selection-selected-button-border: 1px solid black,\n\n $range-graph-selection-background-color: rgba(255, 255, 255, 0.3),\n $range-graph-selection-range-color: rgba(0, 0, 0, 0.02),\n $range-graph-selection-outline-color: #333,\n $range-graph-selection-bar-color: #B0B0B7,\n $range-graph-selection-bar-track-color: #EEE,\n $range-graph-selection-bar-rifles-color: #333,\n $range-graph-selection-bar-height: 14px,\n $range-graph-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\n $range-graph-axis-text-color: #333,\n $range-graph-tick-highlighted-color: #000,\n $range-graph-text-highlighted-color: #000,\n\n $annotation-background-color: rgba(0, 0, 0, 0.3),\n\n $series-key-axis-container-color: #B0B0B7,\n $series-key-input-border-color: #E0E0E3,\n $series-key-input-selected-border-color: #505053,\n $series-key-input-text-color: #222,\n $series-key-background: null,\n $series-key-shadow-color: black,\n $scale-label-color: black,\n\n $title-color: black,\n\n $sidebar-background-color: #EEE,\n $sidebar-text-color: #111,\n\n $new-grapher-color: #222\n );\n}\n\n.grapher-night {\n @include grapher-theme-night();\n}\n\n.grapher-day {\n @include grapher-theme-day();\n}\n\n.grapher-export {\n @include grapher-theme-export();\n}\n"],sourceRoot:""}]);const s=a},659(e){var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},694(e,t,n){var i=n(925);function r(){}function o(){}o.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,o,a){if(a!==i){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:r};return n.PropTypes=n,n}},744(e){e.exports="precision highp float;\n\nvarying vec4 trapBounds; // [x1, lineY1, x2, lineY2]\nvarying vec4 trapBottom; // [x1, bottomY1, x2, bottomY2] \nvarying vec2 worldPos; // World position\n\nuniform int gradientCount;\nuniform sampler2D gradientTexture; // Texture containing gradient data\nuniform vec4 fallbackColor;\n\nvec4 interpolateGradient(float position) {\n if (gradientCount <= 0) {\n return fallbackColor;\n }\n if (gradientCount == 1) {\n return texture2D(gradientTexture, vec2(0.5 / float(gradientCount * 2), 0.5));\n }\n\n float textureWidth = float(gradientCount * 2);\n float firstStop = texture2D(gradientTexture, vec2(0.5 / textureWidth, 0.5)).r;\n float lastStop = texture2D(gradientTexture, vec2((float((gradientCount - 1) * 2) + 0.5) / textureWidth, 0.5)).r;\n \n // Scale position to fit the gradient range\n if (lastStop > firstStop) {\n position = firstStop + position * (lastStop - firstStop);\n }\n \n position = clamp(position, 0.0, 1.0);\n\n // Handle boundary cases first\n vec4 firstColor = texture2D(gradientTexture, vec2(1.5 / textureWidth, 0.5));\n vec4 lastColor = texture2D(gradientTexture, vec2((float((gradientCount - 1) * 2 + 1) + 0.5) / textureWidth, 0.5));\n \n if (position <= firstStop) return firstColor;\n if (position >= lastStop) return lastColor;\n \n // Calculate normalized position within the gradient range\n float normalizedPos = (position - firstStop) / max(lastStop - firstStop, 0.001);\n normalizedPos = clamp(normalizedPos, 0.0, 1.0);\n \n // Map to segment index using only float operations\n float segmentFloat = normalizedPos * float(gradientCount - 1);\n float segmentIndex = floor(segmentFloat);\n \n // Ensure segment index is within valid bounds using float operations\n segmentIndex = min(segmentIndex, float(gradientCount - 2));\n segmentIndex = max(segmentIndex, 0.0);\n \n // Calculate texture coordinates for the two colors to interpolate\n float texCoordA = (segmentIndex * 2.0 + 1.0 + 0.5) / textureWidth;\n float texCoordB = ((segmentIndex + 1.0) * 2.0 + 1.0 + 0.5) / textureWidth;\n \n // Sample the two colors\n vec4 colorA = texture2D(gradientTexture, vec2(texCoordA, 0.5));\n vec4 colorB = texture2D(gradientTexture, vec2(texCoordB, 0.5));\n \n // Get the actual gradient stops for proper interpolation\n float stopA = texture2D(gradientTexture, vec2((segmentIndex * 2.0 + 0.5) / textureWidth, 0.5)).r;\n float stopB = texture2D(gradientTexture, vec2(((segmentIndex + 1.0) * 2.0 + 0.5) / textureWidth, 0.5)).r;\n \n // Calculate interpolation factor based on actual stop positions\n float stopRange = stopB - stopA;\n float t = stopRange > 0.001 ? (position - stopA) / stopRange : 0.0;\n t = clamp(t, 0.0, 1.0);\n \n return mix(colorA, colorB, t);\n}\n\nvoid main() {\n float pixelX = worldPos.x;\n float pixelY = worldPos.y;\n \n // Extract trapezoid corners\n float x1 = trapBounds.x;\n float lineY1 = trapBounds.y;\n float x2 = trapBounds.z;\n float lineY2 = trapBounds.w;\n \n float bottomX1 = trapBottom.x;\n float bottomY1 = trapBottom.y;\n float bottomX2 = trapBottom.z;\n float bottomY2 = trapBottom.w;\n \n // Interpolate line Y at current pixel X\n float t = (pixelX - x1) / (x2 - x1 + 0.001); // Avoid division by zero\n t = clamp(t, 0.0, 1.0);\n \n float lineYAtPixel = mix(lineY1, lineY2, t);\n float bottomYAtPixel = mix(bottomY1, bottomY2, t);\n \n // Calculate gradient position: 0.0 at line, 1.0 at bottom\n float totalDistance = abs(bottomYAtPixel - lineYAtPixel);\n float gradientPos = totalDistance > 0.001 ? \n abs(pixelY - lineYAtPixel) / totalDistance : 0.0;\n \n vec4 color = interpolateGradient(gradientPos);\n gl_FragColor = color;\n}\n"},765(e){e.exports="precision highp float;\n\nattribute vec2 position;\n\nvoid main() {\n gl_Position = vec4((position - 0.5)*2.0, 0.0, 1.0);\n}\n"},789(e){e.exports="precision mediump float;\n\nattribute vec2 position;\n\nuniform float width;\nuniform float height;\nuniform float pointSize;\n\nvoid main() {\n gl_Position = vec4(2.0*position.x/width - 1.0, 1.0 - 2.0*position.y/height, 0.0, 1.0);\n gl_PointSize = pointSize;\n}"},825(e){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},885(e){e.exports="precision highp float;\n\nattribute vec2 position;\nattribute vec4 trapezoidBounds; // [x1, y1_line, x2, y2_line] - the line segment \nattribute vec4 trapezoidBottom; // [x1, y1_bottom, x2, y2_bottom] - the bottom segment\n\nuniform float width;\nuniform float height;\n\nvarying vec4 trapBounds; // Pass trapezoid line bounds to fragment\nvarying vec4 trapBottom; // Pass trapezoid bottom bounds to fragment \nvarying vec2 worldPos; // Pass world position\n\nvoid main() {\n trapBounds = trapezoidBounds;\n trapBottom = trapezoidBottom;\n worldPos = position;\n \n gl_Position = vec4(2.0*position.x/width - 1.0, 1.0 - 2.0*position.y/height, 0.0, 1.0);\n}\n"},925(e){e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={id:e,exports:{}};return a[e](n,n.exports,l),n.exports}l.m=a,l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,n)=>(l.f[n](e,t),t),[])),l.u=e=>e+".bundle.esm.js",l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.p="/assets/",(()=>{l.b=new URL("./",import.meta.url);var e={792:0},t=t=>{var n,i,{__webpack_esm_ids__:r,__webpack_esm_modules__:o,__webpack_esm_runtime__:a}=t,s=0;for(n in o)l.o(o,n)&&(l.m[n]=o[n]);for(a&&a(l);s<r.length;s++)i=r[s],l.o(e,i)&&e[i]&&e[i][0](),e[r[s]]=0};l.f.j=(n,i)=>{var r=l.o(e,n)?e[n]:void 0;if(0!==r)if(r)i.push(r[1]);else{var o=import(l.p+l.u(n)).then(t,t=>{throw 0!==e[n]&&(e[n]=void 0),t});o=Promise.race([o,new Promise(t=>r=e[n]=[t])]),i.push(r[1]=o)}}})(),l.nc=void 0;var h=l(556),c=l.n(h);const g=["values","tuples","objects"],A=[...g,"tuple_observable","object_observable","generator"],d=c().any,p=c().shape({data:d.isRequired,type:c().oneOf([...A,"infer"]),xKey:c().string,yKey:c().string,windXKey:c().string,windYKey:c().string,windComp:c().elementType,xUnixDates:c().bool,color:c().oneOfType([c().string,c().number]),name:c().string,xLabel:c().string,yLabel:c().string,ignoreDiscontinuities:c().bool,dashed:c().bool,dashPattern:c().arrayOf(c().number),width:c().number,rangeSelectorWidth:c().number,axis:c().oneOfType([c().string,c().object]),expandYWith:c().arrayOf(c().number),defaultAlwaysTooltipped:c().bool,followingMouseTooltip:c().bool,square:c().bool,shiftXBy:c().number,graph:c().number,background:c().object,hideFromKey:c().bool,showIndividualPoints:c().bool,minPointSpacing:c().number,rendering:c().oneOf(["line","bar","area","shadow"]),negativeColor:c().string,gradient:c().array,negativeGradient:c().array,zeroLineWidth:c().number,zeroLineColor:c().string,zeroLineY:c().oneOfType([c().number,c().string]),pointRadius:c().number,tooltipWidth:c().number,hasAreaBottom:c().bool,shadowColor:c().string,gradient:c().arrayOf(c().oneOfType([c().string,c().array])),rangeKey:c().string}),u=c().arrayOf(p),m=c().shape({axisIndex:c().number.isRequired,series:c().array.isRequired,side:c().oneOf(["left","right"]).isRequired,scale:c().oneOf(["linear","log"]).isRequired,label:c().string}),f=c().arrayOf(m),C=c().shape({label:c().string.isRequired,calculator:c().func.isRequired,datesOnly:c().bool}),x=c().arrayOf(C),b={includeSeriesLabel:c().bool,includeXLabel:c().bool,includeYLabel:c().bool,includeXValue:c().bool,includeYValue:c().bool,floating:c().bool,alwaysFixedPosition:c().bool,floatPosition:c().oneOf(["top","bottom"]),floatDelta:c().number,savingDisabled:c().bool,customTooltip:c().func,combineTooltips:c().oneOfType([c().bool,c().number])},y=c().shape(b),_=c().shape({x:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),startX:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),endX:c().oneOfType([c().string,c().number,c().instanceOf(Date)]),series:c().arrayOf(c().string),content:c().string,lineOnly:c().bool}),B=c().arrayOf(_),v=c().shape({x:c().number.isRequired,y:c().number.isRequired,radius:c().number,fillColor:c().string,strokeColor:c().string,strokeWidth:c().number,onClick:c().func,onDoubleClick:c().func}),w=c().arrayOf(v),E=c().shape({x:c().oneOfType([c().number,c().instanceOf(Date)]).isRequired,color:c().string,lineTop:c().number,width:c().number,markTop:c().bool,style:c().object,markerStyle:c().object,text:c().string,textTop:c().number,textStyle:c().object,minPixelX:c().number,maxPixelX:c().number,onRangeGraph:c().oneOfType([c().bool,c().object]),onRangeGraphOnly:c().bool}),k={Data:d,SingleSeries:p,Series:u,Axis:m,Axes:f,CustomBoundsSelector:C,CustomBoundsSelectors:x,TooltipOptions:y,TooltipOptionsRaw:b,Annotations:B,DraggablePoint:v,DraggablePoints:w,VerticalLine:E,VerticalLines:c().arrayOf(E)};class S{constructor(){this._listeners={}}clearListeners(){this._listeners={}}on(e,t){this._listeners[e]=this._listeners[e]||new Set,this._listeners[e].add(t)}off(e,t){this._listeners[e]&&(this._listeners[e].delete(t),0===this._listeners[e].size&&delete this._listeners[e])}emit(e){if(!this._listeners[e])return;const t=[];for(let e=1;e<arguments.length;e++)t.push(arguments[e]);this._listeners[e].forEach(e=>{e.apply(this,t)})}}var D=l(365);function T(e,t={useSimpleData:!1}){if(e.type&&"infer"!==e.type)return e.type;const n=t.data||t.useSimpleData&&e.simpleData||e.data;if(!n)throw new Error("Data must be provided");if(Array.isArray(n))return 0===n.length||Array.isArray(n[0])?"tuples":"number"!=typeof n[0]&&n[0]?"objects":"values";if(n.observe)return e.xKey?"object_observable":"tuple_observable";if("function"==typeof n)return"generator";throw new Error("Could not infer type")}var z=l(400),R=l.n(z),X=l(765),Y=l.n(X);function P(e){if("black"===e)e="#000000";else if("white"===e)e="#FFFFFF";else if("transparent"===e)return[0,0,0,0];if(e.startsWith("rgb")){const t=e.split(",").map(e=>parseFloat(e.match(/\d+(\.\d+)?/)[0]));return[t[0]/255,t[1]/255,t[2]/255,t.length>=4?t[3]:1]}if("string"!=typeof e||!/^#[\dA-F]{3}$|^#[\dA-F]{6}$/i.test(e))throw new Error(`Color must be a hex string: ${e}`);return 4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),[parseInt(e.substr(1,2),16)/255,parseInt(e.substr(3,2),16)/255,parseInt(e.substr(5,2),16)/255,1]}function M(e,t,n){const i=e.createShader(e.VERTEX_SHADER);if(e.shaderSource(i,t),e.compileShader(i),!e.getShaderParameter(i,e.COMPILE_STATUS))return console.error(e.getShaderInfoLog(i)),null;const r=e.createShader(e.FRAGMENT_SHADER);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))return console.error(e.getShaderInfoLog(r)),null;const o=e.createProgram();return e.attachShader(o,i),e.attachShader(o,r),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS)?(e.validateProgram(o),e.getProgramParameter(o,e.VALIDATE_STATUS)?o:(console.error("Shader program validation failed:",e.getProgramInfoLog(o)),null)):(console.error("Shader program linking failed:",e.getProgramInfoLog(o)),null)}class F{constructor(e){this._gl=e,this._program=M(e,Y(),R()),this._vertexBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}draw({data:e}){const t=this._gl;t.useProgram(this._program);for(let{minXt:n,maxXt:i,color:r}of e){t.uniform4f(t.getUniformLocation(this._program,"color"),...P(r));const e=new Float32Array([n,1,i,1,i,-1,n,1,i,-1,n,-1]);t.bindBuffer(t.ARRAY_BUFFER,this._vertexBuffer),t.bufferData(t.ARRAY_BUFFER,new Float32Array(e),t.STATIC_DRAW);const o=t.getAttribLocation(this._program,"position");t.enableVertexAttribArray(o),t.vertexAttribPointer(o,2,t.FLOAT,!1,0,0),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.drawArrays(t.TRIANGLES,0,6)}}}async function L(e,t,{reset:n=!0}={}){n&&(e.width="",e.height="",e.style.width="0",e.style.height="",await new Promise(e=>requestAnimationFrame(e)));let i=e.parentNode.getBoundingClientRect();for(;0===i.width;)await new Promise(e=>requestAnimationFrame(e)),i=e.getBoundingClientRect();const r=2*(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),o=i.width,a=i.height,s=o*r,l=a*r;return e.width=s,e.height=l,e.style.width=`${o}px`,e.style.height=`${a}px`,{pixelRatio:r,elementWidth:o,elementHeight:a,renderWidth:s,renderHeight:l,boundingRect:i}}function O(e,{splitAtY:t}={}){const n=[];let i=[],r=!0;const{nullMask:o,maxYValues:a,minYValues:s,yValues:l}=e;for(let e=0;e<l.length;e++){const h=2*e,c=l[e];if(1&o[e]){r||(n.push(i),i=[]),r=!0;continue}i.push([h,c]);const g=s[e],A=a[e];if(g!==A&&(2&o[e]||i.push([h,g]),4&o[e]||i.push([h,A]),i.push([h,c])),r=!1,"number"==typeof t&&e>0){const a=l[e-1];(!(1&o[e-1])&&a<t&&c>=t||a>t&&c<=t||a===t&&c!==t)&&(r||(n.push(i),i=[[h,c]]),r=!0)}}return r||n.push(i),n}function I(e,{context:t,sizing:n,color:i,zeroColor:r,zeroWidth:o}){o&&(t?(t.strokeStyle=r||i,t.lineWidth=o,t.beginPath(),t.moveTo(0,e),t.lineTo(n.renderWidth,e),t.stroke()):console.error("Canvas context is null in drawZeroLine"))}function $(e,t,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s}){if(i.fillStyle=n,s&&s.length>=2){const e=i.createLinearGradient(0,0,0,r.renderHeight);for(let t=0;t<s.length;t++){const n=s[t];Array.isArray(n)?e.addColorStop(n[0],n[1]):e.addColorStop(t/(s.length-1),n)}i.fillStyle=e}const l=a?o:r.renderHeight;i.beginPath();const[h,c]=e[0],[g,A]=e[e.length-1];t||i.moveTo(h,l);for(let t=0;t<e.length;t++){const[n,r]=e[t];i.lineTo(n,r)}if(t&&t.length){for(let e=t.length-1;e>=0;e--){const[n,r]=t[e];i.lineTo(n,r)}i.lineTo(...e[0])}else i.lineTo(g,l);i.fill()}function G(e,t,n,i,r,{color:o,context:a,sizing:s,zero:l,hasNegatives:h,gradient:c,areaBottomPaths:g}){if(a.fillStyle=o,c&&c.length>=2){const e=a.createLinearGradient(0,0,0,s.renderHeight);for(let t=0;t<c.length;t++){const n=c[t];if(Array.isArray(n)){const t=r?(0,D.applyReducedOpacity)(n[1],.35):n[1];e.addColorStop(n[0],t)}else{const i=r?(0,D.applyReducedOpacity)(n,.35):n;e.addColorStop(t/(c.length-1),i)}}a.fillStyle=e}const A=h?l:s.renderHeight;if(a.beginPath(),r){const r=i?n+1:n,[o]=e[0];g||a.moveTo(o,A);for(let t=0;t<=r&&t<e.length;t++){const[n,o]=t===r&&i?i:e[t];a.lineTo(n,o)}if(t&&t.length){for(let e=Math.min(r,t.length-1);e>=0;e--){const[n,i]=t[e];a.lineTo(n,i)}a.lineTo(...e[0])}else{const t=i||e[r]||e[e.length-1];a.lineTo(t[0],A)}}else{const r=i?n:n+1,o=i||e[r];if(o){a.moveTo(o[0],A),i&&a.lineTo(...i);for(let t=r;t<e.length;t++)a.lineTo(...e[t]);if(t&&t.length){for(let e=t.length-1;e>=Math.max(r,0);e--){const[n,i]=t[e];a.lineTo(n,i)}i&&a.lineTo(i[0],A)}else{const[t]=e[e.length-1];a.lineTo(t,A)}}}a.fill()}function W(e,{color:t,context:n,negativeColor:i,hasNegatives:r,zero:o,zeroColor:a,pointRadius:s}){if(e&&Array.isArray(e))for(let l=0;l<e.length;l++){const[h,c]=e[l];let g=t;i&&r&&(g=c===o&&a?a:c<o?t:i),n.fillStyle=g,n.beginPath(),n.arc(h,c,s||8,0,2*Math.PI,!1),n.fill()}}function N(e,{color:t,context:n,hasNegatives:i,negativeColor:r,width:o,highlighted:a}){if(e&&Array.isArray(e)){a&&(o+=2),o*=2;for(let a of e)if(a.length){n.strokeStyle=i&&r?r:t,n.lineWidth=o,n.beginPath();for(let e=0;e<a.length;e++){const[t,i]=a[e];0===e?n.moveTo(t,i):n.lineTo(t,i)}n.stroke()}}}function U(e,t,{color:n,context:i,hasNegatives:r,negativeColor:o,zero:a,width:s,highlighted:l,cutoffOpacity:h}){if(!e||!Array.isArray(e))return;l&&(s+=2),s*=2;const c=t*i.canvas.width,g=[],A=[];for(let t of e){if(!t.length)continue;const e=[],n=[];let i=null,r=-1;for(let i=0;i<t.length;i++){const[o,a]=t[i];o<c?(e.push([o,a]),r=i):n.push([o,a])}if(e.length>0&&n.length>0){const t=e[e.length-1],r=n[0],[o,a]=t,[s,l]=r;s!==o&&(i=[c,a+(c-o)/(s-o)*(l-a)],e.push(i),n.unshift(i))}e.length>0&&g.push(e),n.length>0&&A.push(n)}if(g.length>0){const e=(0,D.applyReducedOpacity)(n,h);i.strokeStyle=e,i.lineWidth=s;for(let e of g)if(e.length>1){i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}}if(A.length>0){i.strokeStyle=r&&o?o:n,i.lineWidth=s;for(let e of A)if(e.length>1){i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}}}function q(e,t,{color:n,context:i,negativeColor:r,hasNegatives:o,zero:a,zeroColor:s,pointRadius:l,cutoffOpacity:h}){if(!e||!Array.isArray(e))return;const c=t*i.canvas.width;for(let t=0;t<e.length;t++){const[g,A]=e[t],d=g<c;let p=n;d&&(p=(0,D.applyReducedOpacity)(n,h)),r&&o&&(p=A===a&&s?s:A<a?d?(0,D.applyReducedOpacity)(n,h):n:d?(0,D.applyReducedOpacity)(r,h):r),i.fillStyle=p,i.beginPath(),i.arc(g,A,l||8,0,2*Math.PI,!1),i.fill()}}function H({closestSpacing:e,bounds:t,sizing:n,axisSeriesCount:i}){const r=e/(t.maxX-t.minX)*n.renderWidth,o=.8*r,a=.2*r,s=o/i;return console.log(`[bars] full=${r.toFixed(1)} total=${o.toFixed(1)} bar=${s.toFixed(1)} count=${i} spacing=${e}`),{barWidth:s,totalBarWidth:o,barSpacing:a}}function V(e,t){if(!t||e.length<=1)return e;const n=[];let i=-1/0;for(const r of e){const[e]=r;e-i>=t&&(n.push(r),i=e)}return n}var j=l(390),K=l.n(j),Z=l(39),J=l.n(Z),Q=l(120),ee=l.n(Q),te=l(789),ne=l.n(te);let ie;const re=l.e(744).then(l.bind(l,363)).then(e=>e.default().then(()=>{ie=e}));function oe(){return ie}function ae(e,{dashed:t,dashPattern:n}){let i=0;for(let r of e)if(t)for(let e=0;e<r.length;e++)t&&e%(n[0]+n[1])>=n[0]||i++;else i+=r.length;const r=new Float32Array(8*i),o=new Float32Array(8*i),a=new Float32Array(4*i),s=new Uint32Array(6*i);if(i>0){const e=new Float32Array([0,1,2,3]);a.set(e);let t=e.length,n=e.length;for(;t<a.length;)t+n>a.length&&(n=a.length-t),a.copyWithin(t,0,n),t+=n,n<<=1}let l=0;for(let i of e)for(let e=0;e<i.length;e++){if(t&&e%(n[0]+n[1])>=n[0])continue;const[a,h]=i[e];let c,g;0===e?(c=a-1,g=h):[c,g]=i[e-1];for(let e=0;e<4;e++)r[8*l+2*e]=a,r[8*l+2*e+1]=h,o[8*l+2*e]=c,o[8*l+2*e+1]=g;s[6*l]=4*l,s[6*l+1]=4*l+1,s[6*l+2]=4*l+3,s[6*l+3]=4*l,s[6*l+4]=4*l+2,s[6*l+5]=4*l+3,l++}return{positions:r,prevPositions:o,vertices:a,indices:s}}class se{constructor(e){this._gl=e,this._program=M(e,J(),K()),this._circleProgram=M(e,ne(),ee()),this._positionBuffer=e.createBuffer(),this._prevPositionBuffer=e.createBuffer(),this._vertexBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),this._individualPointBuffer=e.createBuffer(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}dispose(){}clear(){const e=this._gl,t=e.drawingBufferWidth,n=e.drawingBufferHeight;e.clearColor(0,0,0,0),e.viewport(0,0,t,n)}draw(e,t){const n=this._gl,i=n.drawingBufferWidth,r=n.drawingBufferHeight;n.useProgram(this._program);const o=2*((t.width||1)+(t.highlighted?2:0)),a=void 0===t.shadowBlur?2:t.shadowBlur,s=t.shadowColor||"black",l=t.dashed||!1,h=t.dashPattern||[5,5];if(t.renderCutoffGradient&&void 0!==t.cutoffIndex&&t.originalData)return void this.drawLineWithCutoff(e,t);const{positions:c,prevPositions:g,vertices:A,indices:d}=function(e,{dashed:t,dashPattern:n}){if(e&&e.paths)return ae(e.paths,{dashed:t,dashPattern:n});if(!oe())return ae(O(e),{dashed:t,dashPattern:n});const i=oe().get_point_number(e.nullMask,e.yValues,e.minYValues,e.maxYValues,t,n[0],n[1]);let r=new Float32Array(8*i),o=new Float32Array(8*i),a=new Float32Array(4*i),s=new Uint32Array(6*i);return oe().extract_vertices(2,e.nullMask,e.yValues,e.minYValues,e.maxYValues,r,o,a,s,t,n[0],n[1]),{positions:r,prevPositions:o,vertices:a,indices:s}}(e,{dashed:l,dashPattern:h});if(!this._program)return void console.error("WebGL line program is null - shader compilation failed!");const p=n.getAttribLocation(this._program,"position"),u=n.getAttribLocation(this._program,"prevPosition"),m=n.getAttribLocation(this._program,"vertex");n.enableVertexAttribArray(p),n.bindBuffer(n.ARRAY_BUFFER,this._positionBuffer),n.bufferData(n.ARRAY_BUFFER,c,n.STATIC_DRAW),n.vertexAttribPointer(p,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(u),n.bindBuffer(n.ARRAY_BUFFER,this._prevPositionBuffer),n.bufferData(n.ARRAY_BUFFER,g,n.STATIC_DRAW),n.vertexAttribPointer(u,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(m),n.bindBuffer(n.ARRAY_BUFFER,this._vertexBuffer),n.bufferData(n.ARRAY_BUFFER,A,n.STATIC_DRAW),n.vertexAttribPointer(m,1,n.FLOAT,!1,0,0),n.uniform1f(n.getUniformLocation(this._program,"width"),i),n.uniform1f(n.getUniformLocation(this._program,"height"),r),n.uniform1f(n.getUniformLocation(this._program,"thickness"),Math.max(o,1)+a),n.uniform1f(n.getUniformLocation(this._program,"shadowBlur"),a);const f=P(t.color);n.uniform4f(n.getUniformLocation(this._program,"color"),...f),n.uniform4f(n.getUniformLocation(this._program,"shadowColor"),...P(s));const C=void 0!==t.cutoffX?t.cutoffX:-1,x=void 0!==t.cutoffOpacity?t.cutoffOpacity:.35;if(n.uniform1f(n.getUniformLocation(this._program,"cutoffX"),C),n.uniform1f(n.getUniformLocation(this._program,"cutoffOpacity"),x),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,d,n.STATIC_DRAW),n.drawElements(n.TRIANGLES,d.length,n.UNSIGNED_INT,0),t.showIndividualPoints){n.useProgram(this._circleProgram),n.uniform1f(n.getUniformLocation(this._circleProgram,"width"),i),n.uniform1f(n.getUniformLocation(this._circleProgram,"height"),r);const e=t.pointRadius?2*t.pointRadius*2:2*(o+6);n.uniform1f(n.getUniformLocation(this._circleProgram,"pointSize"),e);let a=t.getIndividualPoints();if(t.minPointSpacing&&a.length>1){const e=[];let n=-1/0;for(const i of a){const[r]=i;r-n>=t.minPointSpacing&&(e.push(i),n=r)}a=e}if(void 0!==t.cutoffIndex&&t.cutoffIndex>0&&t.originalData){const{originalData:e}=t;let r;if("object"==typeof e[0]&&2===e[0].length){const n=Math.floor(t.cutoffIndex),i=t.cutoffIndex-n;if(0===i||n>=e.length-1){const t=e[Math.min(n,e.length-1)][0];r=t instanceof Date?t.getTime():t}else{const t=e[n][0],o=e[n+1][0],a=t instanceof Date?t.getTime():t;r=a+i*((o instanceof Date?o.getTime():o)-a)}}const o=[],s=[];if(t.isPreview){const e=t.selectionBounds.minX instanceof Date?t.selectionBounds.minX.getTime():t.selectionBounds.minX,n=(r-e)/((t.selectionBounds.maxX instanceof Date?t.selectionBounds.maxX.getTime():t.selectionBounds.maxX)-e)*i;for(let e=0;e<a.length;e++){const[t,i]=a[e];t<n?o.push(a[e]):s.push(a[e])}}else if(t.selectionBounds){const e=t.selectionBounds.minX instanceof Date?t.selectionBounds.minX.getTime():t.selectionBounds.minX,n=t.selectionBounds.maxX instanceof Date?t.selectionBounds.maxX.getTime():t.selectionBounds.maxX;if(r<e)s.push(...a);else if(r>n)"shadow"===t.rendering?s.push(...a):o.push(...a);else{const t=(r-e)/(n-e)*this._gl.canvas.width;a.forEach((e,n)=>{const[i,r]=e;i<t?o.push(e):s.push(e)})}}else s.push(...a);if(o.length>0){const e=(0,D.applyReducedOpacity)(t.color,t.cutoffOpacity||.35);n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(e)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(o.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,o.length)}s.length>0&&(n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(t.color)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(s.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,s.length))}else n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...P(t.color)),n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(a.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,a.length)}}drawLineWithCutoff(e,t){const{cutoffIndex:n,cutoffTimeValue:i,cutoffOpacity:r,originalData:o,selectionBounds:a}=t;let s;if(null!=i)s=i;else if("object"==typeof o[0]&&2===o[0].length){const e=Math.floor(n),t=n-e;if(0===t||e>=o.length-1){const t=o[Math.min(e,o.length-1)][0];s=t instanceof Date?t.getTime():t}else{const n=o[e][0],i=o[e+1][0],r=n instanceof Date?n.getTime():n;s=r+t*((i instanceof Date?i.getTime():i)-r)}}else s=n;if(t.isPreview){const n=this._gl,i=a.minX instanceof Date?a.minX.getTime():a.minX,o=(s-i)/((a.maxX instanceof Date?a.maxX.getTime():a.maxX)-i);if(o<0)this.draw(e,{...t,renderCutoffGradient:!1});else if(o>1){const n=(0,D.applyReducedOpacity)(t.color,r);this.draw(e,{...t,color:n,renderCutoffGradient:!1})}else n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA),this.draw(e,{...t,renderCutoffGradient:!1,cutoffX:o,cutoffOpacity:r||.35})}else{if(!a)return void this.draw(e,{...t,renderCutoffGradient:!1});const n=a.minX instanceof Date?a.minX.getTime():a.minX,i=a.maxX instanceof Date?a.maxX.getTime():a.maxX;if(s<n)this.draw(e,{...t,renderCutoffGradient:!1});else if(s>i){const n=(0,D.applyReducedOpacity)(t.color,r);this.draw(e,{...t,color:n,renderCutoffGradient:!1})}else{const o=(s-n)/(i-n),a=this._gl;a.enable(a.BLEND),a.blendFunc(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA),this.draw(e,{...t,renderCutoffGradient:!1,cutoffX:o,cutoffOpacity:r||.35})}}}}var le=l(744),he=l.n(le),ce=l(885),ge=l.n(ce);class Ae{constructor(e){if(this._gl=e,this._program=M(e,ge(),he()),!this._program)return console.error("Failed to create shadow shader program"),void(this._program=null);e.validateProgram(this._program),e.getProgramParameter(this._program,e.VALIDATE_STATUS)||console.error("Shadow program validation failed:",e.getProgramInfoLog(this._program));const t=e.getAttribLocation(this._program,"position"),n=e.getAttribLocation(this._program,"trapezoidBounds"),i=e.getAttribLocation(this._program,"trapezoidBottom");-1!==t&&-1!==n&&-1!==i||console.error("Missing required shader attributes"),this._positionBuffer=e.createBuffer(),this._trapezoidBoundsBuffer=e.createBuffer(),this._trapezoidBottomBuffer=e.createBuffer(),this._indexBuffer=e.createBuffer(),this._gradientTexture=e.createTexture(),e.getExtension("OES_element_index_uint")||console.error("Your browser does not support OES_element_index_uint")}dispose(){const e=this._gl;this._gradientTexture&&(e.deleteTexture(this._gradientTexture),this._gradientTexture=null)}generateTrapezoidGeometry(e){const t=[],n=[],i=[],r=[];let o=0;for(const a of e){const{x1:e,y1:s,x2:l,y2:h,bottomY1:c,bottomY2:g}=a,A=[[e,s],[l,h],[l,g],[e,c]],d=[e,s,l,h],p=[e,c,l,g];for(let e=0;e<4;e++){const[r,o]=A[e];t.push(r,o),n.push(...d),i.push(...p)}r.push(o,o+1,o+2,o,o+2,o+3),o+=4}return{positions:new Float32Array(t),trapezoidBounds:new Float32Array(n),trapezoidBottom:new Float32Array(i),indices:new Uint32Array(r)}}parseGradient(e,t){if(!e||!Array.isArray(e)||e.length<2){const e=P(t);return{textureData:new Uint8Array([0,0,0,255,Math.floor(255*e[0]),Math.floor(255*e[1]),Math.floor(255*e[2]),Math.floor(255*e[3])]),textureWidth:2,gradientCount:1,fallbackColor:e}}const n=[],i=[];for(let t=0;t<e.length;t++){const r=e[t];Array.isArray(r)?(i.push(r[0]),n.push(P(r[1]))):(i.push(t/(e.length-1)),n.push(P(r)))}const r=2*n.length,o=new Uint8Array(4*r);for(let e=0;e<n.length;e++){const t=8*e,r=t+4;o[t]=Math.floor(255*i[e]),o[t+1]=0,o[t+2]=0,o[t+3]=255,o[r]=Math.floor(255*n[e][0]),o[r+1]=Math.floor(255*n[e][1]),o[r+2]=Math.floor(255*n[e][2]),o[r+3]=Math.floor(255*n[e][3])}return{textureData:o,textureWidth:r,gradientCount:n.length,fallbackColor:P(t)}}draw(e,t){if(!e||e.length<2)return;const n=this._gl,i=n.drawingBufferWidth,r=n.drawingBufferHeight;if(n.useProgram(this._program),t.renderCutoffGradient&&void 0!==t.cutoffIndex&&t.originalData)return void this.drawShadowWithCutoff(e,t);const o=[],a=[],s=[],{zero:l,inRenderSpaceAreaBottom:h,negativeGradient:c,hasNegatives:g}=t;for(let t=0;t<e.length-1;t++){const[n,r]=e[t],[h,A]=e[t+1];let d=l,p=l;const u=r-l,m=A-l;if(u*m<0){const e=n+(h-n)*(Math.abs(u)/(Math.abs(u)+Math.abs(m))),t=l;if(Math.abs(r-t)>.1){const i={x1:n,y1:r,x2:e,y2:t,bottomY1:d,bottomY2:l};o.push(i),g&&c&&(r<=l?a.push(i):s.push(i))}if(Math.abs(A-t)>.1){const n={x1:e,y1:t,x2:h,y2:A,bottomY1:l,bottomY2:p};o.push(n),g&&c&&(A<=l?a.push(n):s.push(n))}}else{if(n>i||h<0)continue;let e=h,t=A,u=p;if(h>i){const o=(i-n)/(h-n);e=i,t=r+(A-r)*o,u=d+(p-d)*o}const m={x1:n,y1:r,x2:e,y2:t,bottomY1:d,bottomY2:u};o.push(m),g&&c&&((r+t)/2<=l?a.push(m):s.push(m))}}if(0===o.length)return;const A=n.getAttribLocation(this._program,"position"),d=n.getAttribLocation(this._program,"trapezoidBounds"),p=n.getAttribLocation(this._program,"trapezoidBottom");n.uniform1f(n.getUniformLocation(this._program,"width"),i),n.uniform1f(n.getUniformLocation(this._program,"height"),r),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);const u=(e,t,i)=>{if(0===e.length)return;const r=this.generateTrapezoidGeometry(e);n.enableVertexAttribArray(A),n.bindBuffer(n.ARRAY_BUFFER,this._positionBuffer),n.bufferData(n.ARRAY_BUFFER,r.positions,n.STATIC_DRAW),n.vertexAttribPointer(A,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(d),n.bindBuffer(n.ARRAY_BUFFER,this._trapezoidBoundsBuffer),n.bufferData(n.ARRAY_BUFFER,r.trapezoidBounds,n.STATIC_DRAW),n.vertexAttribPointer(d,4,n.FLOAT,!1,0,0),n.enableVertexAttribArray(p),n.bindBuffer(n.ARRAY_BUFFER,this._trapezoidBottomBuffer),n.bufferData(n.ARRAY_BUFFER,r.trapezoidBottom,n.STATIC_DRAW),n.vertexAttribPointer(p,4,n.FLOAT,!1,0,0);const o=this.parseGradient(t,i);n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,this._gradientTexture),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,o.textureWidth,1,0,n.RGBA,n.UNSIGNED_BYTE,o.textureData),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.uniform1i(n.getUniformLocation(this._program,"gradientTexture"),0),n.uniform1i(n.getUniformLocation(this._program,"gradientCount"),o.gradientCount),n.uniform4fv(n.getUniformLocation(this._program,"fallbackColor"),o.fallbackColor),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this._indexBuffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,r.indices,n.STATIC_DRAW),n.drawElements(n.TRIANGLES,r.indices.length,n.UNSIGNED_INT,0)};g&&c&&(a.length>0||s.length>0)?(u(a,t.gradient,t.color),u(s,c,t.color)):u(o,t.gradient,t.color);const m=n.getError();m!==n.NO_ERROR&&console.error("WebGL error in shadow rendering:",m)}drawShadowWithCutoff(e,t){const{cutoffIndex:n,cutoffTimeValue:i,cutoffOpacity:r,originalData:o,selectionBounds:a,zero:s}=t;let l;if(this._lastIndividualPoints=null,this._lastParams=null,null!=i)l=i;else if(Array.isArray(o[0])&&2===o[0].length){const e=Math.floor(n),t=n-e;if(0===t||e>=o.length-1){const t=o[Math.min(e,o.length-1)][0];l=t instanceof Date?t.getTime():t}else{const n=o[e],i=o[e+1],r=n[0],a=i[0],s=r instanceof Date?r.getTime():r;l=s+t*((a instanceof Date?a.getTime():a)-s)}}else l=n;const h=t.selectionBounds;let c,g;if(h&&void 0!==h.minX&&void 0!==h.maxX)c=h.minX instanceof Date?h.minX.getTime():h.minX,g=h.maxX instanceof Date?h.maxX.getTime():h.maxX;else{const e=o[0],t=o[o.length-1],n=e[0],i=t[0];c=n instanceof Date?n.getTime():n,g=i instanceof Date?i.getTime():i}const A=(l-c)/(g-c);if(A<0)this.draw(e,{...t,renderCutoffGradient:!1});else if(A>1){const n=(0,D.applyReducedOpacity)(t.color,r),i=(0,D.applyReducedOpacityToGradient)(t.gradient,r);this.draw(e,{...t,color:n,gradient:i,renderCutoffGradient:!1})}else this.drawSplitShadowTrapezoids(e,{...t,selectionBounds:t.selectionBounds},A,l)}drawSplitShadowTrapezoids(e,t,n,i){const{zero:r,cutoffOpacity:o,selectionBounds:a}=t,s=n*this._gl.canvas.width,l=[],h=[];for(let t=0;t<e.length;t++){const[n,i]=e[t];n<s?l.push(e[t]):h.push(e[t])}let c=null;if(l.length>0&&h.length>0){const e=l[l.length-1],t=h[0],[n,i]=e,[r,o]=t;r!==n&&(c=[s,i+(s-n)/(r-n)*(o-i)],l.push(c),h.unshift(c))}if(l.length>=2){const e=(0,D.applyReducedOpacity)(t.color,o),n=this._gl;n.disable(n.DEPTH_TEST),n.enable(n.BLEND),n.blendFunc(n.SRC_ALPHA,n.ONE_MINUS_SRC_ALPHA);const i=(0,D.applyReducedOpacityToGradient)(t.gradient,o);this.draw(l,{...t,color:e,gradient:i,renderCutoffGradient:!1})}h.length>=2&&this.draw(h,{...t,renderCutoffGradient:!1})}}class de extends S{constructor({stateController:e,canvasElement:t,webgl:n=!1,checkIntersection:i=!0}){return super(),this._stateController=e,this._checkIntersection=i,this._canvas=t,this._webgl=n,this._canvas?(n&&(this._context=this._canvas.getContext("webgl"),this._context?(this._lineProgram=new se(this._context),this._shadowProgram=new Ae(this._context)):(console.error("❌ WebGL context creation failed"),alert("WebGL failed! Attempting fallback to CPU rendering"),this._webgl=!1)),this._webgl||(this._context=this._canvas.getContext("2d"),this._context2d=this._context),this._context?(this._initialized=this._initializeCanvas(),this._boundResize=this.resize.bind(this),this._cachedAxisCount=null,this._onAxisChange=e=>{const t=e.filter(({series:e})=>e.length>0).length;this._cachedAxisCount!==t&&(this._cachedAxisCount=t,this.resize())},e.on("axes_changed",this._onAxisChange),e.on("dragging_y_changed",this._boundResize),void e.on("showing_sidebar_changed",this._boundResize)):(console.error("Failed to get canvas context in GraphBodyRenderer"),void(this._initialized=!1))):(console.error("Canvas element is null in GraphBodyRenderer constructor"),void(this._initialized=!1))}dispose(){this.clearListeners(),this._lineProgram&&this._lineProgram.dispose(),this._shadowProgram&&this._shadowProgram.dispose(),this._cachedAxisCount=null,this._stateController.off("axes_changed",this._onAxisChange),this._stateController.off("dragging_y_changed",this._boundResize),this._resizeObserver&&this._resizeObserver.disconnect(),this._intersectionObserver&&this._intersectionObserver.disconnect(),this._zeroLineCanvas&&this._zeroLineCanvas.parentNode&&(this._zeroLineCanvas.parentNode.removeChild(this._zeroLineCanvas),this._zeroLineCanvas=null,this._zeroLineContext=null)}clear(){this._webgl?(this._lineProgram.clear(),this._overlayContext&&this._overlayContext.clearRect(0,0,this._overlayCanvas.width,this._overlayCanvas.height),this._overlayCanvasInitialized=!1):this._context.clearRect(0,0,this._context.canvas.width,this._context.canvas.height)}render(e,t,{highlighted:n,showIndividualPoints:i,shadowColor:r,shadowBlur:o,width:a,defaultLineWidth:s,bounds:h,globalBounds:c,inRenderSpaceAreaBottom:g}){if(!this._initialized||!this._context||!this._canvas)return void console.warn("GraphBodyRenderer: Cannot render - not initialized, missing context, or missing canvas");let A=-1,d=null,p=e.data;if(e.data&&e.data.length>0&&"object"==typeof e.data[0]&&!Array.isArray(e.data[0])&&e.cutoffTime&&(p=e.data.map(t=>{const n=t[e.xKey||"x"],i=t[e.yKey||"y"];return["string"==typeof n?new Date(n):n,i]})),e.cutoffTime&&e.data&&e.data.length>0){let t;t="now"===e.cutoffTime?new Date:"number"==typeof e.cutoffTime?new Date(e.cutoffTime):e.cutoffTime,d=t instanceof Date?t.getTime():t;for(let e=0;e<p.length-1;e++){const t=p[e],n=p[e+1],i=t[0]instanceof Date?t[0].getTime():t[0],r=n[0]instanceof Date?n[0].getTime():n[0];if(i<=d&&d<=r){A=e+(d-i)/(r-i);break}if(i>d){A=e;break}}-1===A&&(A=p.length-1)}const u=(n,r=!1)=>{if(!n&&t&&t.yValues&&!i){h||(h=e.axis.currentBounds);const n=[],{yValues:i,nullMask:o}=t,a=i.length/2;let s=0;const l=[];for(let e=0;e<i.length;e++)if(0===o[e]){const t=2*e;n.push([t,i[e]]),e>a&&(s++,l.length<3&&l.push({pixelX:e,xCoord:t,nullMask:o[e]}))}return n.length<50?u(!0,r):n}h||(h=e.axis.currentBounds);const o=[];let a=e.inSelectedSpace.data;n&&(a=e.inDataSpace);let s=h.minX instanceof Date?h.minX.getTime():h.minX,l=h.maxX instanceof Date?h.maxX.getTime():h.maxX,c=!1,g=null;for(let t=0;t<a.length;t++){let n,i;if(Array.isArray(a[t]))[n,i]=a[t];else{if("object"!=typeof a[t]||null===a[t])continue;n=a[t][e.xKey],i=a[t][e.yKey]}if(null==i)continue;let A=n instanceof Date?n.getTime():n;if(A<s){r&&(g=[A,i]);continue}if(A>l){if(!r||c)break;c=!0}const d=(A-s)/(l-s)*(this._sizing.renderWidth/2-1)*2,p=(1-(i-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;o.push([d,p])}if(g&&r){const[e,t]=g,n=(e-s)/(l-s)*(this._sizing.renderWidth/2-1)*2,i=(1-(t-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;o.unshift([n,i])}return o};let m;if("bar"===e.rendering||"area"===e.rendering){if(this._webgl)return void console.warn(`CPU rendering (${e.rendering}) is not supported with webgl={true}. Use webgl={false} or switch to 'line' rendering.`);if(this._context2d||(this._context2d=this._canvas.getContext("2d",{willReadFrequently:!1})),!this._context2d)return void console.error("Failed to get 2D context for CPU rendering");if(this._webgl&&this._context.flush(),h||(h=e.axis?.currentBounds),!h)return void console.error("No bounds available for rendering");const t="bottom"===e.zeroLineY?this._sizing.renderHeight:(1-((e.zeroLineY||0)-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight;m={context:this._context2d,color:(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),sizing:this._sizing,zero:t,hasNegatives:!!e.inDataSpace.find(e=>e[1]<0),negativeColor:e.negativeColor,zeroWidth:e.zeroLineWidth,zeroColor:e.zeroLineColor},!m.hasNegatives&&e.expandYWith&&(m.hasNegatives=e.expandYWith.some(e=>e<0))}if("bar"===e.rendering){const t=e.axis.series.filter(e=>"bar"===e.rendering).filter(e=>e.inDataSpace&&e.inDataSpace.length>0&&e.dataBounds&&e.dataBounds.maxX>=h.minX&&e.dataBounds.minX<=h.maxX);let n={...m,indexInAxis:t.indexOf(e),axisSeriesCount:t.length||1,closestSpacing:e.dataBounds?.closestSpacing||c.closestSpacing,bounds:h};if(e.cutoffTime){n.cutoffIndex=A,n.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,n.originalData=p,n.renderCutoffGradient=A>=0;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;n.selectionBounds=t}return void function(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,renderCutoffGradient:m,selectionBounds:f}){if(!n)return void console.error("Canvas context is null in drawBars");n.strokeStyle=t,n.fillStyle=t;const{barWidth:C,totalBarWidth:x}=H({closestSpacing:g,bounds:A,sizing:i,axisSeriesCount:o}),b=Math.min(a,i.renderHeight);if(m&&void 0!==d&&u)!function(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,selectionBounds:m,barWidth:f,totalBarWidth:C,barBottom:x}){let b;if("object"==typeof u[0]&&2===u[0].length){const e=Math.floor(d),t=d-e;if(0===t||e>=u.length-1){const t=u[Math.min(e,u.length-1)][0];b=t instanceof Date?t.getTime():t}else{const n=u[e][0],i=u[e+1][0],r=n instanceof Date?n.getTime():n;b=r+t*((i instanceof Date?i.getTime():i)-r)}}else b=d;for(let i=0;i<e.length;i++){const[o,h]=e[i];let c=t,g=!1;if(i<u.length){const e=u[i];g=(e[0]instanceof Date?e[0].getTime():e[0])<b,g&&(c=(0,D.applyReducedOpacity)(t,p))}if(s)if(h<=a)n.fillStyle=c;else{const e=g?(0,D.applyReducedOpacity)(l,p):l;n.fillStyle=e}else n.fillStyle=c;n.fillRect(o-C/2+f*r,h,f,x-h)}c&&I(x,{context:n,sizing:i,color:t,zero:a,zeroColor:h,zeroWidth:c})}(e,{color:t,context:n,sizing:i,indexInAxis:r,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:h,zeroWidth:c,closestSpacing:g,bounds:A,cutoffIndex:d,cutoffOpacity:p,originalData:u,selectionBounds:f,barWidth:C,totalBarWidth:x,barBottom:b});else{for(let i=0;i<e.length;i++){const[o,h]=e[i];s&&(n.fillStyle=h<=a?t:l),n.fillRect(o-x/2+C*r,h,C,b-h)}c&&I(b,{context:n,sizing:i,color:t,zero:a,zeroColor:h,zeroWidth:c})}}(u(!0),n)}if("area"===e.rendering){let l={...m,showIndividualPoints:"boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:i,gradient:e.gradient,negativeGradient:e.negativeGradient,pointRadius:e.pointRadius,minPointSpacing:e.minPointSpacing,highlighted:n,width:a||e.width||s,shadowColor:r,shadowBlur:o,inRenderSpaceAreaBottom:g};if(e.cutoffTime){l.cutoffIndex=A,l.cutoffTimeValue=d,l.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,l.originalData=p,l.renderCutoffGradient=A>=0,l.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;l.selectionBounds=t}!function(e,t,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s,negativeGradient:l,zeroColor:h,zeroWidth:c,showIndividualPoints:g,negativeColor:A,pointRadius:d,minPointSpacing:p,width:u,highlighted:m,shadowColor:f="black",shadowBlur:C=5,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,renderCutoffGradient:B,selectionBounds:v,isPreview:w}){if(!i)return void console.error("Canvas context is null in drawArea");if(i.fillStyle=n,i.shadowColor=f,i.shadowBlur=C,s&&s.length>=2){const R=i.createLinearGradient(0,0,0,r.renderHeight);for(let X=0;X<s.length;X++){const Y=s[X];Array.isArray(Y)?R.addColorStop(Y[0],Y[1]):R.addColorStop(X/(s.length-1),Y)}i.fillStyle=R,"gradient"===n&&(i.strokeStyle=R)}else i.fillStyle=n;if(!e.length)return;const E=a?o:r.renderHeight,k=a&&l,S=O(t,k?{splitAtY:o}:void 0),T=x&&O(x,k?{splitAtY:o}:void 0),z=O(t,{splitAtY:o});if(B&&void 0!==b&&_)!function(e,t,n,i,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,showIndividualPoints:A,negativeColor:d,pointRadius:p,width:u,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,selectionBounds:B,isPreview:v}){let w,E,k;if("object"==typeof _[0]&&2===_[0].length){const e=Math.floor(b),t=b-e;if(0===t||e>=_.length-1){const t=_[Math.min(e,_.length-1)][0];w=t instanceof Date?t.getTime():t}else{const n=_[e][0],i=_[e+1][0],r=n instanceof Date?n.getTime():n;w=r+t*((i instanceof Date?i.getTime():i)-r)}}else w=b;v&&B?(E=B.minX instanceof Date?B.minX.getTime():B.minX,k=B.maxX instanceof Date?B.maxX.getTime():B.maxX):(E=_[0][0]instanceof Date?_[0][0].getTime():_[0][0],k=_[_.length-1][0]instanceof Date?_[_.length-1][0].getTime():_[_.length-1][0]);const S=(w-E)/(k-E);if(S<0)for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});else if(S>1){const e=h?(0,D.applyReducedOpacityToGradient)(h,y):null;for(let i=0;i<t.length;i++)$(t[i],n&&n[i],{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:e,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}else{if(v){for(let e=0;e<t.length;e++){const i=t[e],A=n&&n[e];if(!i.length)continue;const d=S*i.length,p=Math.floor(d),u=d-p;let b=null;if(p<i.length-1&&u>0){const[e,t]=i[p],[n,r]=i[p+1];b=[e+u*(n-e),t+u*(r-t)]}if(p>0||0===p&&u>0){const e=i.slice(0,p+1);b&&p<i.length-1&&e.push(b);const t=A?A.slice(0,p+1):null;if(b&&t&&p<A.length-1){const e=[b[0],s];t.push(e)}const n=h?(0,D.applyReducedOpacityToGradient)(h,y):null;$(e,t,{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:n,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}if(p<i.length-1||p===i.length-1&&0===u){const e=[];b&&p<i.length-1&&e.push(b),e.push(...i.slice(p+1));const t=[];if(b&&A&&p<A.length-1){const e=[b[0],s];t.push(e)}A&&t.push(...A.slice(p+1)),$(e,t.length?t:null,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}}i&&i.length>0&&U(i,S,{color:r,context:o,hasNegatives:l,negativeColor:d,zero:s,width:u,highlighted:m,cutoffOpacity:y}),A&&e&&e.length>0&&q(e,S,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p,cutoffOpacity:y})}else if(B){const e=B.minX instanceof Date?B.minX.getTime():B.minX,i=B.maxX instanceof Date?B.maxX.getTime():B.maxX;if(w<e)for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});else if(w>i){const e=h?(0,D.applyReducedOpacityToGradient)(h,y):null;for(let i=0;i<t.length;i++)$(t[i],n&&n[i],{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:e,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x})}else{const c=(w-e)/(i-e);for(let e=0;e<t.length;e++){const i=t[e],g=n&&n[e];if(!i.length)continue;const A=c*i.length,d=Math.floor(A),p=A-d;let u=null;if(d<i.length-1&&p>0){const[e,t]=i[d],[n,r]=i[d+1];u=[e+p*(n-e),t+p*(r-t)]}(d>0||0===d&&p>0)&&G(i,g,d,u,!0,{color:(0,D.applyReducedOpacity)(r,y),context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,areaBottomPaths:n}),d<i.length-1&&G(i,g,d,u,!1,{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,areaBottomPaths:n})}}}else for(let e=0;e<t.length;e++)$(t[e],n&&n[e],{color:r,context:o,sizing:a,zero:s,hasNegatives:l,gradient:h,zeroColor:c,zeroWidth:g,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x});if(S>=0&&S<=1&&!v)if(B){const e=B.minX instanceof Date?B.minX.getTime():B.minX,t=B.maxX instanceof Date?B.maxX.getTime():B.maxX;w<e?N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m}):w>t?N(i,{color:(0,D.applyReducedOpacity)(r,y),context:o,hasNegatives:l,negativeColor:d?(0,D.applyReducedOpacity)(d,y):d,width:u,highlighted:m}):U(i,(w-e)/(t-e),{color:r,context:o,hasNegatives:l,negativeColor:d,zero:s,width:u,highlighted:m,cutoffOpacity:y})}else N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m});else v||N(i,{color:r,context:o,hasNegatives:l,negativeColor:d,width:u,highlighted:m});if(g&&I(l?s:a.renderHeight,{context:o,sizing:a,color:r,zero:s,zeroColor:c,zeroWidth:g}),A&&!v)if(S>=0&&S<=1)if(B){const t=B.minX instanceof Date?B.minX.getTime():B.minX,n=B.maxX instanceof Date?B.maxX.getTime():B.maxX;w<t?W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p}):w>n?W(e,{color:(0,D.applyReducedOpacity)(r,y),context:o,negativeColor:d?(0,D.applyReducedOpacity)(d,y):d,hasNegatives:l,zero:s,zeroColor:c?(0,D.applyReducedOpacity)(c,y):c,pointRadius:p}):q(e,(w-t)/(n-t),{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p,cutoffOpacity:y})}else W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p});else W(e,{color:r,context:o,negativeColor:d,hasNegatives:l,zero:s,zeroColor:c,pointRadius:p})}}(e,S,T,z,{color:n,context:i,sizing:r,zero:o,hasNegatives:a,gradient:s,zeroColor:h,zeroWidth:c,showIndividualPoints:g,negativeColor:A,pointRadius:d,width:u,highlighted:m,shadowColor:f,shadowBlur:C,inRenderSpaceAreaBottom:x,cutoffIndex:b,cutoffOpacity:y,originalData:_,selectionBounds:v,isPreview:w});else{for(let P=0;P<S.length;P++){const M=S[P],F=T&&T[P];i.beginPath();const[L,H]=M[0],[V,j]=M[M.length-1];T||i.moveTo(L,E);for(let K=0;K<M.length;K++){const[Z,J]=M[K];i.lineTo(Z,J)}if(F&&F.length){for(let Q=F.length-1;Q>=0;Q--){const[ee,te]=F[Q];i.lineTo(ee,te)}i.lineTo(...M[0])}else i.lineTo(V,E);i.fill()}m&&(u+=2),u*=2,i.strokeStyle=n,i.lineWidth=u;for(let ne of z)if(ne.length){if(a&&A){let ie=!0;ie=ne.length>=2?ne[1][1]<=o:ne[0][1]<=o,i.strokeStyle=ie?n:A}else i.strokeStyle=n;i.beginPath();for(let re=0;re<ne.length;re++){const[oe,ae]=ne[re];0===re?i.moveTo(oe,ae):i.lineTo(oe,ae)}i.stroke()}if(c&&I(E,{context:i,sizing:r,color:n,zero:o,zeroColor:h,zeroWidth:c}),g&&!B){function se(e,t){if(!t||e.length<=1)return e;const n=[];let i=-1/0;for(const r of e){const[e]=r;e-i>=t&&(n.push(r),i=e)}return n}const le=se(e,p);for(let[he,ce]of le){let ge=n;A&&a&&(ge=ce===o&&h?h:ce<o?n:A),i.fillStyle=ge,i.beginPath(),i.arc(he,ce,d||8,0,2*Math.PI,!1),i.fill()}}}}(u(!0),t,l)}if("shadow"===e.rendering){if(!this._webgl||!this._shadowProgram)return void console.warn("Shadow rendering requires WebGL. Enable webgl={true} on your Grapher component.",{webgl:!!this._webgl,shadowProgram:!!this._shadowProgram,program:!!this._shadowProgram?._program});if(!this._shadowProgram._program)return void console.error("ShadowProgram has no valid WebGL program");if(!t)return void console.error("inRenderSpace is null for shadow rendering");if(h||(h=e.axis?.currentBounds),!h)return void console.error("No bounds available for shadow rendering");let n;n="bottom"===e.zeroLineY?this._sizing.renderHeight:void 0!==e.zeroLineY?(1-(e.zeroLineY-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:h.minY<=0&&h.maxY>=0?(1-(0-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:this._sizing.renderHeight;const i=!this._lastBounds||h.minY!==this._lastBounds.minY||h.maxY!==this._lastBounds.maxY||this._sizing.renderHeight!==this._lastRenderHeight;this._lastBounds={...h},this._lastRenderHeight=this._sizing.renderHeight,i&&this._lastShadowCache&&(this._lastShadowCache=null),n>1.5*this._sizing.renderHeight?n=this._sizing.renderHeight:n<.5*-this._sizing.renderHeight&&(n=0);const r=(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),o=!!e.inDataSpace.find(e=>e[1]<0);let a={color:r,gradient:e.gradient||(0,D.createDefaultGradient)(r),negativeGradient:e.negativeGradient,hasNegatives:o,zero:n,sizing:this._sizing,inRenderSpaceAreaBottom:g};if(e.cutoffTime){a.cutoffIndex=A,a.cutoffTimeValue=d,a.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,a.originalData=p,a.renderCutoffGradient=A>=0,a.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;a.selectionBounds=t||h}if(this._shadowProgram.draw(u(!1,!0),a),this._webgl){const e=this._context;e.disable(e.BLEND),e.enable(e.BLEND),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)}e.zeroLineWidth&&e.zeroLineWidth>0&&(this._context2d?(this._context2d.save(),this._context2d.strokeStyle=e.zeroLineColor||(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),this._context2d.lineWidth=e.zeroLineWidth,this._context2d.globalCompositeOperation="source-over",this._context2d.beginPath(),this._context2d.moveTo(0,n),this._context2d.lineTo(this._sizing.renderWidth,n),this._context2d.stroke(),this._context2d.restore()):(this._zeroLineCanvas||(this._zeroLineCanvas=document.createElement("canvas"),this._zeroLineCanvas.style.position="absolute",this._zeroLineCanvas.style.top="0",this._zeroLineCanvas.style.left="0",this._zeroLineCanvas.style.pointerEvents="none",this._zeroLineContext=this._zeroLineCanvas.getContext("2d"),this._canvas.parentNode.insertBefore(this._zeroLineCanvas,this._canvas.nextSibling)),this._zeroLineCanvas.width=this._canvas.width,this._zeroLineCanvas.height=this._canvas.height,this._zeroLineCanvas.style.width=this._canvas.style.width,this._zeroLineCanvas.style.height=this._canvas.style.height,this._zeroLineContext.clearRect(0,0,this._zeroLineCanvas.width,this._zeroLineCanvas.height),this._zeroLineContext.strokeStyle=e.zeroLineColor||(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),this._zeroLineContext.lineWidth=e.zeroLineWidth,this._zeroLineContext.beginPath(),this._zeroLineContext.moveTo(0,n),this._zeroLineContext.lineTo(this._sizing.renderWidth,n),this._zeroLineContext.stroke()))}const f=!(this===this._stateController.rangeGraphRenderer)&&("boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:i);let C;h||(h=e.axis?.currentBounds||c),C="bottom"===e.zeroLineY?this._sizing.renderHeight:void 0!==e.zeroLineY&&h?(1-(e.zeroLineY-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:h&&h.minY<=0&&h.maxY>=0?(1-(0-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:this._sizing.renderHeight;const x=!!e.inDataSpace.find(e=>e[1]<0);let b=this._context;if(this._webgl&&"shadow"===e.rendering)this._overlayCanvas||(this._overlayCanvas=document.createElement("canvas"),this._overlayCanvas.style.position="absolute",this._overlayCanvas.style.top="0",this._overlayCanvas.style.left="0",this._overlayCanvas.style.pointerEvents="none",this._overlayContext=this._overlayCanvas.getContext("2d"),this._canvas.parentNode.insertBefore(this._overlayCanvas,this._canvas.nextSibling)),this._overlayCanvasInitialized||(this._overlayCanvas.width=this._canvas.width,this._overlayCanvas.height=this._canvas.height,this._overlayCanvas.style.width=this._canvas.style.width,this._overlayCanvas.style.height=this._canvas.style.height,this._overlayCanvasInitialized=!0),b=this._overlayContext;else if(this._context2d)b=this._context2d;else if(this._webgl){if(console.warn("Creating fallback 2D context for WebGL shadow chart"),!this._fallbackContext){const e=document.createElement("canvas");e.width=this._canvas.width,e.height=this._canvas.height,this._fallbackContext=e.getContext("2d")}b=this._fallbackContext}const y={color:(0,D.default)(e.color,e.index,e.multigrapherSeriesIndex),context:b,width:a||e.width||s,shadowColor:r,shadowBlur:o,dashed:e.dashed,dashPattern:e.dashPattern,highlighted:n,showIndividualPoints:f,pointRadius:e.pointRadius,minPointSpacing:e.minPointSpacing,getIndividualPoints:u,getRanges:e.rangeKey?()=>(h||(h=e.axis.currentBounds),e.rangeKey?"objects"!==T(e,{useSimpleData:!0})?[]:(e.simpleData||e.data).map(t=>{const n=t[e.rangeKey];if(!n)return null;const i=n.min,r=n.max,o=t[e.xKey];return{x:o,range:n,pixelX:(o-h.minX)/(h.maxX-h.minX)*this._sizing.renderWidth,pixelMinY:"number"==typeof i?(1-(i-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:null,pixelMaxY:"number"==typeof r?(1-(r-h.minY)/(h.maxY-h.minY))*this._sizing.renderHeight:null}}):[]):null,rendering:e.rendering,negativeColor:e.negativeColor,hasNegatives:x,zero:C,zeroColor:e.zeroLineColor};if(this._webgl&&"shadow"===e.rendering&&e.cutoffTime&&(a>0||f)){y.cutoffIndex=A,y.cutoffTimeValue=d,y.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,y.originalData=p,y.renderCutoffGradient=A>=0;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;y.selectionBounds=t||h,y.currentBounds=h}if(t){if(e.cutoffTime){y.cutoffIndex=A,y.cutoffTimeValue=d,y.cutoffOpacity=void 0!==e.cutoffOpacity?e.cutoffOpacity:.35,y.originalData=p,y.renderCutoffGradient=A>=0,y.currentBounds=h,y.isPreview=this===this._stateController.rangeGraphRenderer;const t=this===this._stateController.rangeGraphRenderer?this._stateController._bounds:this._stateController._selection||this._stateController._bounds;y.selectionBounds=t||h}this._webgl&&"shadow"!==e.rendering?this._lineProgram.draw(t,y):function(e,{color:t,width:n=1,context:i,shadowColor:r="black",shadowBlur:o=5,dashed:a=!1,dashPattern:s=null,highlighted:h=!1,showIndividualPoints:c=!1,pointRadius:g,minPointSpacing:A,getIndividualPoints:d,getRanges:p,cutoffIndex:u,cutoffTimeValue:m,cutoffOpacity:f,originalData:C,renderCutoffGradient:x,currentBounds:b,selectionBounds:y,rendering:_,isPreview:B,negativeColor:v,hasNegatives:w,zero:E,zeroColor:k}){if(!i)return void console.error("Canvas context is null in drawLine");if(!i.setLineDash)return void console.error("drawLine called with WebGL context instead of 2D context");h&&(n+=2),n*=2,i.strokeStyle=t,i.lineWidth=n,i.shadowColor=r,i.shadowBlur=o,a?i.setLineDash(s||[5,5]):i.setLineDash([]);const S=O(e,w&&v?{splitAtY:E}:void 0);for(let e of S)if(x&&void 0!==u&&C){let r;if(null!=m)r=m;else if("object"==typeof C[0]&&2===C[0].length){const e=Math.floor(u),t=u-e;if(0===t||e>=C.length-1){const t=C[Math.min(e,C.length-1)][0];r=t instanceof Date?t.getTime():t}else{const n=C[e][0],i=C[e+1][0],o=n instanceof Date?n.getTime():n;r=o+t*((i instanceof Date?i.getTime():i)-o)}}else r=u;if(B){const o=C[0][0]instanceof Date?C[0][0].getTime():C[0][0],a=(r-o)/((C[C.length-1][0]instanceof Date?C[C.length-1][0].getTime():C[C.length-1][0])-o);if(a<0){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else if(a>1){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else{const r=a*(e.length-1),o=Math.floor(r),s=r-o;let l=null;if(o<e.length-1&&s>0){const[t,n]=e[o],[i,r]=e[o+1];l=[t+s*(i-t),n+s*(r-n)]}if(o>0||0===o&&s>0){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<=o;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}l&&i.lineTo(l[0],l[1]),i.stroke()}if(o<e.length-1){i.strokeStyle=t,i.lineWidth=n,i.beginPath(),l?i.moveTo(l[0],l[1]):i.moveTo(e[o+1][0],e[o+1][1]);for(let t=o+1;t<e.length;t++){const[n,r]=e[t];i.lineTo(n,r)}i.stroke()}}}else{if(!y){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke();continue}const o=y.minX instanceof Date?y.minX.getTime():y.minX,a=y.maxX instanceof Date?y.maxX.getTime():y.maxX;if(r<o){i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}else if(r>a){const r=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=r,i.lineWidth=n,i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke(),i.strokeStyle=t}else{const s=(r-o)/(a-o)*i.canvas.width;let l=-1,h=null;for(let t=0;t<e.length-1;t++){const[n]=e[t],[i]=e[t+1];if(n<=s&&s<=i){const r=(s-n)/(i-n);l=t+r;const[,o]=e[t],[,a]=e[t+1];h=[s,o+r*(a-o)];break}}if(-1===l){const t=C[C.length-1][0];t instanceof Date&&t.getTime(),s>=e[e.length-1][0]?l=e.length-1:s<e[0][0]&&(l=0)}const c=[],g=[];for(let t=0;t<e.length;t++)t<l?c.push(e[t]):g.push(e[t]);if(h&&(c.length>0&&c.push(h),g.length>0&&g.unshift(h)),c.length>1){const e=(0,D.applyReducedOpacity)(t,f);i.strokeStyle=e,i.lineWidth=n,i.beginPath();for(let e=0;e<c.length;e++){const[t,n]=c[e];0===e?i.moveTo(t,n):i.lineTo(t,n)}i.stroke()}if(g.length>1){i.strokeStyle=t,i.lineWidth=n,i.beginPath();for(let e=0;e<g.length;e++){const[t,n]=g[e];0===e?i.moveTo(t,n):i.lineTo(t,n)}i.stroke()}}}}else{if(w&&v){let n=!0;e.length>=2?n=e[1][1]<=E:e.length>0&&(n=e[0][1]<=E),i.strokeStyle=n?t:v}else i.strokeStyle=t;i.beginPath();for(let t=0;t<e.length;t++){const[n,r]=e[t];0===t?i.moveTo(n,r):i.lineTo(n,r)}i.stroke()}if(p){const e=p();i.lineWidth=n,i.strokeStyle=t,i.setLineDash([]);const r=16;for(let t of e){if(!t)continue;const{pixelX:e,pixelMinY:n,pixelMaxY:o}=t;null!==n&&(i.beginPath(),i.moveTo(e-r/2,n),i.lineTo(e+r/2,n),i.stroke()),null!==o&&(i.beginPath(),i.moveTo(e-r/2,o),i.lineTo(e+r/2,o),i.stroke()),null!==n&&null!==o&&(i.beginPath(),i.moveTo(e,n),i.lineTo(e,o),i.stroke())}}if(c){const e=d();if(x&&void 0!==u&&C&&y){const n=y;let r,o,a;if(n&&void 0!==n.minX&&void 0!==n.maxX)r=n.minX instanceof Date?n.minX.getTime():n.minX,o=n.maxX instanceof Date?n.maxX.getTime():n.maxX;else{const e=C[0],t=C[C.length-1],n=e[0],i=t[0];r=n instanceof Date?n.getTime():n,o=i instanceof Date?i.getTime():i}if("string"==typeof u&&"now"===u)a=Date.now();else if("object"==typeof C[0]&&2===C[0].length){const e=Math.floor(u),t=u-e;if(0===t||e>=C.length-1){const t=C[Math.min(e,C.length-1)][0];a=t instanceof Date?t.getTime():t}else{const n=C[e][0],i=C[e+1][0],r=n instanceof Date?n.getTime():n;a=r+t*((i instanceof Date?i.getTime():i)-r)}}else a=u;if(null!==a&&(a-r)/(o-r)>1){const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v);const{applyReducedOpacity:s}=l(365),h=s(a,f);i.fillStyle=h,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}return}if(B){const n=y.minX instanceof Date?y.minX.getTime():y.minX,r=y.maxX instanceof Date?y.maxX.getTime():y.maxX,o=V(e,A);for(let e=0;e<o.length;e++){const[s,l]=o[e];let h=!1;h=!(a<n)&&(a>r?"shadow"!==_:s<(a-n)/(r-n)*i.canvas.width);let c=t;if(v&&w&&(c=l===E&&k?k:l<E?t:v),h){const e=(0,D.applyReducedOpacity)(c,f);i.fillStyle=e}else i.fillStyle=c;i.beginPath(),i.arc(s,l,g||8,0,2*Math.PI,!1),i.fill()}}else if(y){const n=y.minX instanceof Date?y.minX.getTime():y.minX,r=y.maxX instanceof Date?y.maxX.getTime():y.maxX,o=V(e,A);for(let e=0;e<o.length;e++){const[s,l]=o[e];let h=!1;h=!(a<n)&&(a>r?"shadow"!==_:s<(a-n)/(r-n)*i.canvas.width);let c=t;if(v&&w&&(c=l===E&&k?k:l<E?t:v),h){const e=(0,D.applyReducedOpacity)(c,f);i.fillStyle=e}else i.fillStyle=c;i.beginPath(),i.arc(s,l,g||8,0,2*Math.PI,!1),i.fill()}}else{const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v),i.fillStyle=a,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}}}else{const n=V(e,A);for(let e=0;e<n.length;e++){const[r,o]=n[e];let a=t;v&&w&&(a=o===E&&k?k:o<E?t:v),i.fillStyle=a,i.beginPath(),i.arc(r,o,g||8,0,2*Math.PI,!1),i.fill()}}}}(t,y)}else console.error("inRenderSpace is null for line rendering")}renderBackground(e){e&&(this._webgl?(this._backgroundProgram||(this._backgroundProgram=new F(this._context)),this._backgroundProgram.draw(e)):function({data:e},{context:t}){if(!t)return void console.error("Canvas context is null in drawBackground");const n=t.canvas.width,i=t.canvas.height;for(let{minXt:r,maxXt:o,color:a}of e)t.fillStyle=a,t.fillRect(r*n,0,(o-r)*n,i)}(e,{context:this._context}))}async _initializeCanvas(){if(this._sizing=await L(this._canvas,this._context),this.emit("size_changed",this._sizing),this._stateController.markSizeChanged(),window.ResizeObserver){let e=!0,t=!1;this._resizeObserver=new window.ResizeObserver(()=>{e?e=!1:t||(t=!0,this.resize().then(()=>{t=!1}))}),this._resizeObserver.observe(this._canvas.parentNode)}this._checkIntersection&&window.IntersectionObserver&&(this._intersectionObserver=new window.IntersectionObserver(e=>{clearTimeout(this._intersectionTimeout),e[0].isIntersecting&&(this._intersectionTimeout=setTimeout(()=>{this.resize()},50))},{threshold:.1}),this._intersectionObserver.observe(this._canvas.parentNode))}async resize(){const e=L(this._canvas,this._context,{reset:!0});this._initialized=e,this._sizing=await this._initialized,this._initialized===e&&(this.emit("size_changed",this._sizing),this._stateController.markSizeChanged(this))}resizeDebounced(){this._resizeTimeout&&clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(()=>{this.resize(),this._resizeTimeout=null},50)}recalculatePosition(){this._sizing&&(this._sizing.boundingRect=this._canvas.getBoundingClientRect())}get boundingRect(){return this._sizing?.boundingRect}get sizing(){return this._sizing}}function pe(e){return Math.max(2-Math.log10(Math.abs(e)),0)}function ue(e,t=null){if(null===t&&(t=pe(e)),isNaN(t)||t>100)return e.toString();const n=e.toFixed(Math.ceil(t));let i=n;return n.includes(".")&&(i=i.replace(/\.?0+$/g,"")),""===i?"0":i}const me={};function fe(e,t){try{let n=me[e];if(!n){let t=e;e&&"local"!==e||(t=Intl.DateTimeFormat().resolvedOptions().timeZone),n=new Intl.DateTimeFormat("en-US",{timeZone:t,timeZoneName:"longOffset"}),me[e]=n}const i=n.formatToParts(t).find(e=>"timeZoneName"===e.type);if(!i)return null;if("GMT"===i.value)return 0;if(!/^GMT[+-]\d{2}:\d{2}$/.test(i.value))return null;const[r,o]=i.value.slice(3).split(":");return 60*parseInt(r)*60*1e3+60*parseInt(o)*1e3}catch(n){return console.error(new Error(`Could not parse timezone offset for ${t} in ${e}`)),console.error(n),null}}function Ce(e,t){if(!t){const t=new Date(e);return t.setHours(0,0,0,0),t}const n=fe(t,e);let i=new Date(e);return i.setUTCHours(0,0,0,0),i.valueOf()-e.valueOf()>n&&(i=new Date(i.valueOf()-864e5)),new Date(i.valueOf()-n)}function xe(e,{dates:t=!1,precision:n=null,justTime:i=!1,justDate:r=!1,justMonthAndDay:o=!1,clockStyle:a="24h",unitOverride:s,timeZone:l,integersOnly:h=!1,inverseEnumMap:c}={}){return!t||e instanceof Date||(e=new Date(e),!isNaN(e))?e instanceof Date?function(e,{precision:t,justTime:n,justDate:i,justMonthAndDay:r,unitOverride:o,clockStyle:a="24h",timeZone:s}){const l=s&&"utc"===s.toLowerCase();if(s&&!l&&"local"!==s&&window.Intl&&window.Intl.DateTimeFormat){const t=fe(s,e),n=fe("local",e);"number"==typeof t&&"number"==typeof n&&(e=new Date(e.valueOf()+t-n))}const h=l?e.getUTCFullYear():e.getFullYear(),c=(l?e.getUTCMonth():e.getMonth())+1,g=l?e.getUTCDate():e.getDate();if("year"===o)return h.toString();if(i)return l?`${c}/${g}/${h}`:e.toLocaleDateString();if(r)return`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][c-1]} ${g}`;const A=l?e.getUTCHours():e.getHours(),d=l?e.getUTCMinutes():e.getMinutes(),p=l?e.getUTCSeconds():e.getSeconds(),u=l?e.getUTCMilliseconds():e.getMilliseconds();let m;return m="12h"===a?`${((A+11)%12+1).toString()}:${d.toString().padStart(2,"0")}`:`${A.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}`,"s"!==t&&"ms"!==t||(m+=`:${p.toString().padStart(2,"0")}`),"ms"===t&&(m+=`.${u.toString().padStart(3,"0")}`),"12h"===a&&(m+=A>=12?"pm":"am"),n?m:(l&&(m+=" UTC"),(l?`${c}/${g}/${h}`:e.toLocaleDateString())+" "+m)}(e,{precision:n,justTime:i,justDate:r,justMonthAndDay:o,unitOverride:s,clockStyle:a,timeZone:l}):isNaN(e)?"NaN":c?Math.abs(e-Math.round(e))>1e-10?"":c[Math.round(e)]:h&&Math.abs(e-Math.round(e))>1e-10?"":ue(e,n):"Invalid Date"}function be(e,{precision:t=null,log:n=!1}={}){return null===e?"null":isNaN(e)?"NaN":n?`10^${ue(Math.log10(e),t)}`:ue(e,t)}const ye=32;function _e(){return _e=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},_e.apply(null,arguments)}function Be({yLabel:e,y:t,fullYPrecision:n}){return n&&!e?void 0===t?"undefined":null===t?"null":t.toString():"number"==typeof e?n?e.toString():be(e):"object"==typeof e?be(t):e||be(t)}function ve({axisLabel:t,x:n,y:i,xLabel:r,yLabel:o,textLeft:a,textTop:s,includeSeriesLabel:l,includeXValue:h,includeYValue:c,includeXLabel:g,includeYLabel:A,fullYPrecision:d,formatXOptions:p}){let u=0;return e.createElement("g",null,l&&e.createElement("text",{x:a,y:s+12*u++},t),h&&e.createElement("text",{x:a,y:s+12*u++},g&&"x: ",r||xe(n,p)),c&&e.createElement("text",{x:a,y:s+12*u++},A&&"y: ",Be({yLabel:o,y:i,fullYPrecision:d})))}ve.propTypes={axisLabel:c().string,x:c().oneOfType([c().number,c().instanceOf(Date)]),y:c().number,xLabel:c().string,yLabel:c().oneOfType([c().number,c().string]),textLeft:c().number.isRequired,textTop:c().number.isRequired,fullYPrecision:c().bool,formatXOptions:c().object,...k.TooltipOptionsRaw};class we extends e.PureComponent{render(){let t=42;this.props.includeSeriesLabel||(t-=12),this.props.includeXValue||(t-=12),this.props.includeYValue||(t-=12);const n=t/2,i=3-n,r={clockStyle:this.props.clockStyle,timeZone:this.props.timeZone},o={includeSeriesLabel:this.props.includeSeriesLabel,includeXLabel:this.props.includeXLabel,includeYLabel:this.props.includeYLabel,includeXValue:this.props.includeXValue,includeYValue:this.props.includeYValue,formatXOptions:r},a=this.props.tooltips.map(e=>{const{x:a,y:s,pixelY:l,tooltipPixelY:h,pixelX:c,series:g,index:A,xLabel:d,yLabel:p,fullYPrecision:u}=e;if("number"!=typeof c)return null;const m=(g.name||g.yKey||A).toString();let f=7.5*Math.max(m.length,(d||xe(a,r)).length+4,Be({yLabel:p,y:s,fullYPrecision:u}).length+4);g.tooltipWidth&&(f=g.tooltipWidth);let C=this.props.elementWidth<f+14+8,x=1;c>=this.props.elementWidth-(f+14+4)&&(x=-1),c<f+14+4&&-1===x&&(C=!0),null===s&&(C=!0),this.props.alwaysFixedPosition&&(C=!0);let b=11;if(x<0?b=-f-b:b+=6,!isFinite(c))return null;const y=`translate(${c},${l})`,_=`translate(${c},${h??l})`,B={fullYPrecision:u||this.props.maxPrecision,x:a,y:s,axisLabel:m,xLabel:d,yLabel:p,...o};let v,w=0;return C&&(b=6,v=this.props.elementWidth/2-f/2,f>this.props.elementWidth&&!this.props.floating&&(v-=ye*this.props.axisCount/2),w=18,this.props.floating&&(w="bottom"===this.props.floatPosition?this.props.elementHeight+n+4:-t,this.props.floatDelta&&(w+=this.props.floatDelta))),{...e,label:m,indexInAxis:g?.axis?.series?.indexOf(g),axisLabel:m,width:f,fixedPosition:C,multiplier:x,textLeft:b,markerTransform:y,tooltipTransform:_,commonLabelProps:B,textTop:i,height:t,caretSize:7,halfHeight:n,caretPadding:4,yTranslation:w,baseLeft:v}}).filter(Boolean),s=this.props.customTooltip;let l;if(this.props.combineTooltips){let e=50;"number"==typeof this.props.combineTooltips&&(e=this.props.combineTooltips),l=[];for(let t of a){let n=!1;for(let i of l)if(Math.abs(i.pixelX-t.pixelX)<=e){i.tooltips.push(t),t.pixelX>i.pixelX&&(i.pixelX=t.pixelX,i.multiplier=t.multiplier),t.pixelY<i.pixelY&&(i.pixelY=t.pixelY),n=!0;break}n||l.push({pixelX:t.pixelX,pixelY:t.pixelY,multiplier:t.multiplier,tooltips:[t]})}for(let e of l){let t=0,n=0;e.tooltips.sort((e,t)=>e.indexInAxis-t.indexInAxis);for(let i=0;i<e.tooltips.length;i++)e.tooltips[i].textTop=t,t+=e.tooltips[i].height,n=Math.max(n,e.tooltips[i].width);for(let n=0;n<e.tooltips.length;n++)e.tooltips[n].textTop-=t/2,e.tooltips[n].textTop+=3;e.height=t,e.halfHeight=t/2,e.caretSize=7,e.width=n}}return e.createElement("div",{className:"grapher-tooltip"},e.createElement("svg",null,a.map((t,i)=>{const{color:r,fixedPosition:o,width:a,markerTransform:s,tooltipTransform:h,baseLeft:c,commonLabelProps:g,yTranslation:A,multiplier:d,textLeft:p,textTop:u}=t;return this.props.customTooltip||l?e.createElement("g",{key:i,transform:s,className:"tooltip-item"},e.createElement("circle",{r:4,fill:r})):o?e.createElement("g",{key:i,className:"tooltip-item tooltip-item-fixed"},e.createElement("circle",{r:4,fill:r,transform:s}),e.createElement("g",{transform:`translate(${c}, ${A})`},e.createElement("path",{stroke:r,d:`M0,0 V-${n} h${a} V${n} h${-a} V0`}),e.createElement(ve,_e({textLeft:p,textTop:u},g)))):e.createElement("g",{key:i,className:"tooltip-item"},e.createElement("circle",{r:4,fill:r,transform:s}),e.createElement("g",{transform:h},e.createElement("path",{stroke:r,d:`M${4*d},0 L${7*d*2},-7 V-${n} h${d*a} V${n} h${d*-a} V7 L${4*d},0`}),e.createElement(ve,_e({textLeft:p,textTop:u},g))))}),!this.props.customTooltip&&l&&l.map(({tooltips:t,pixelX:n,pixelY:i,halfHeight:r,multiplier:o,color:a,width:s},l)=>e.createElement("g",{key:l,transform:`translate(${n},${i})`,className:"tooltip-item"},e.createElement("path",{stroke:a,d:`M${4*o},0 L${7*o*2},-7 V-${r} h${o*s} V${r} h${o*-s} V7 L${4*o},0`}),t.map((t,n)=>e.createElement(ve,_e({key:n,textTop:t.textTop,textLeft:t.textLeft},t.commonLabelProps)))))),this.props.customTooltip&&(l||a).map((t,n)=>e.createElement("div",{key:n,className:"custom-tooltip-container",style:{top:t.pixelY,left:t.pixelX}},e.createElement(s,t))))}}we.defaultProps={includeSeriesLabel:!0,includeXLabel:!0,includeYLabel:!0,includeXValue:!0,includeYValue:!0},we.propTypes={mouseX:c().number.isRequired,mouseY:c().number.isRequired,elementHeight:c().number.isRequired,elementWidth:c().number.isRequired,tooltips:c().arrayOf(c().shape({x:c().oneOfType([c().number,c().instanceOf(Date)]),y:c().number,pixelY:c().number,color:c().string,xLabel:c().string,yLabel:c().any,fullYPrecision:c().bool})),axisCount:c().number.isRequired,maxPrecision:c().bool.isRequired,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,...k.TooltipOptionsRaw};class Ee extends e.PureComponent{constructor(e){super(e),this.setTextRef=this.setTextRef.bind(this)}setTextRef(e){if(this.textRef=e,this.props.contextMenu.showing&&this.textRef){const e=document.createRange(),t=window.getSelection();t.removeAllRanges(),e.selectNodeContents(this.textRef),t.addRange(e),this.textRef.focus()}}formatDateTime(e){const[t,n]=e.split(", "),[i,r,o]=t.split("/"),a=`${i.padStart(2,"0")}/${r.padStart(2,"0")}/${o}`,[s,l]=n.split(" "),[h,c]=s.split(":");return`${a} ${h.padStart(2,"0")}:${c} ${l}`}render(){const{x:t,y:n,showing:i,value:r}=this.props.contextMenu,o={left:t,top:n,width:"150px"};if(!i||!r||"Invalid Date"===r.toLocaleString()||isNaN(t)||isNaN(n))return null;const a=r instanceof Date?this.formatDateTime(r.toLocaleString()):r;return e.createElement("div",{className:"grapher-context-menu",style:o},e.createElement("div",{className:"menu-item"},e.createElement("div",{className:"menu-text",autoFocus:!0,ref:this.setTextRef},a)))}}function ke(e,t={}){const n=T(e,{useSimpleData:!0,data:t.data});if(!g.includes(n))throw new Error(`Cannot normalize ${n} (expected a simple type)`);const i={tuples:De,values:Se,objects:ze}[n](t.data||e.simpleData||e.data,e,t);let r,o=[],a=null,s=null;if(Array.isArray(i)?r=i:(r=i.data,o=i.rangeValues||[],a=i.windDirections||null,s=i.windData||null),e.square){const e=[];let n=t.prevY;for(let t of r)void 0!==n&&e.push([t[0],n]),e.push(t),n=t[1];return e}if(e.shiftXBy)for(let n of r)if("string"==typeof n[0]){const i=n[0];n[0]=new Date(new Date(n[0]).valueOf()+e.shiftXBy),isNaN(n[0])&&(n[0]=t.stateController.enumToNumber(i,e))}else n[0]instanceof Date?n[0]=new Date(n[0].valueOf()+e.shiftXBy):"number"==typeof n[0]&&(n[0]+=e.shiftXBy);if(e.xUnixDates)for(let e of r)"number"==typeof e[0]&&(e[0]=new Date(1e3*e[0]));return o.length>0||a?{data:r,rangeValues:o,windDirections:a,windData:s}:r}function Se(e,t,n){const i=[];for(let r=0;r<e.length;r++){let o=e[r];"string"==typeof o&&(o=n.stateController.enumToNumber(o,t)),"boolean"==typeof o&&(o=+o),i.push([r+(n.valueXStart||0),o])}return i}function De(e,t,n){return[...e.map(([e,i])=>{if(void 0===i&&(i=null),"string"==typeof e){const i=e;e=new Date(e),isNaN(e)&&(e=n.stateController.enumToNumber(i,t,!0))}return"string"==typeof i&&(i=n.stateController.enumToNumber(i,t)),"boolean"==typeof i&&(i=+i),[e,i]})]}function Te(e,t,n){const i=e.getUint32(t+2+Uint32Array.BYTES_PER_ELEMENT*n,!0);if(0===i)return null;const r=e.getUint8(i);if(0===r)return e.getFloat64(t+i+1,!0);if(1===r||6===r)return null;if(3===r)return new Date(e.getFloat64(t+i+1,!0));throw new Error(`Binary format type ${r} not supported`)}function ze(e,t,n){const i=t.windXKey&&t.windYKey;if(!t.xKey||"string"!=typeof t.xKey)throw new Error("xKey must be provided in the series");if(!(i||t.yKey&&"string"==typeof t.yKey))throw new Error("yKey must be provided in the series (or both windXKey and windYKey)");const r=[],o=[],a=i?[]:null,s=i?[]:null;for(let l of e)if(l.buffer instanceof ArrayBuffer){const e=new DataView(l.buffer),n=l.channels[t.xKey],i=l.channels[t.yKey];for(let t of l.offsets)r.push([Te(e,t,n),Te(e,t,i)])}else if(!i&&Array.isArray(l[t.yKey]))if(l[t.yKey].length&&!Array.isArray(l[t.yKey][0])&&"object"==typeof l[t.yKey][0])for(let e of l[t.yKey]){let i=e[t.yKey];void 0===i&&(i=null),"string"==typeof i&&(i=n.stateController.enumToNumber(i,t)),"boolean"==typeof i&&(i=+i);let o=e[t.xKey];"string"==typeof o&&(o=new Date(o)),r.push([o,i])}else r.push(...l[t.yKey]);else{let e;if(i){const n=l[t.windXKey],i=l[t.windYKey];null!=n&&null!=i?(e=Math.sqrt(n*n+i*i),a.push(Math.atan2(i,n)),s.push({x:n,y:i})):(e=null,a.push(null),s.push(null))}else e=l[t.yKey],void 0===e&&(e=null),"string"==typeof e&&(e=n.stateController.enumToNumber(e,t)),"boolean"==typeof e&&(e=+e);let h=l[t.xKey];if("string"==typeof h&&(h=new Date(h)),r.push([h,e]),t.rangeKey&&l[t.rangeKey]){const e=l[t.rangeKey];"object"==typeof e&&void 0!==e.min&&void 0!==e.max&&("number"==typeof e.min&&o.push(e.min),"number"==typeof e.max&&o.push(e.max))}}return o.length>0||a?{data:r,rangeValues:o,windDirections:a,windData:s}:r}function Re(e,{dates:t}){const n=null===e.minX&&null===e.maxX||null===e.minY||null===e.maxY;for(let t of Object.keys(e))"number"!=typeof e[t]&&null!==e[t]&&(e[t]=null);return e.initial=n,e.dates=t,e}function Xe(e,{percentile:t=100,percentileAsymmetry:n=0,rangeValues:i=[]}={}){let r={minX:null,maxX:null,minY:null,maxY:null,closestSpacing:null};if(100!==t&&e.length)return function(e,t,{percentile:n=100,percentileAsymmetry:i=0,rangeValues:r=[]}={}){let o=!1;t.minX=e[0][0],t.minX instanceof Date&&(t.minX=t.minX.valueOf(),o=!0),t.maxX=e[e.length-1][0],t.maxX instanceof Date&&(t.maxX=t.maxX.valueOf(),o=!0);const a=e.filter(([e,t])=>"number"==typeof t).sort(([e,t],[n,i])=>t-i);for(let e of r)"number"==typeof e&&a.push([null,e]);if(a.sort(([e,t],[n,i])=>t-i),!a.length)return Re(t,{dates:o});const s=Math.min(Math.abs(i),(100-n)/2)*(i<0?-1:1),l=(100-n)/2+s,h=(100-n)/2-s,c=Math.floor((a.length-1)*l/100),g=Math.floor((a.length-1)*(100-h)/100);return t.minY=a[c][1],t.maxY=a[g][1],Re(t,{dates:o})}(e,r,{percentile:t,percentileAsymmetry:n,rangeValues:i});let o=!1,a=null;for(let[t,n]of e)if(null!==t){if(t instanceof Date&&(t=t.valueOf(),o=!0),("number"!=typeof r.minX||t<r.minX)&&(r.minX=t),("number"!=typeof r.maxX||t>r.maxX)&&(r.maxX=t),"number"==typeof a&&"number"==typeof t){const e=t-a;("number"!=typeof r.closestSpacing||e<r.closestSpacing)&&(r.closestSpacing=e)}a=t,"number"==typeof n&&(("number"!=typeof r.minY||n<r.minY)&&(r.minY=n),("number"!=typeof r.maxY||n>r.maxY)&&(r.maxY=n))}for(let e of i)"number"==typeof e&&(("number"!=typeof r.minY||e<r.minY)&&(r.minY=e),("number"!=typeof r.maxY||e>r.maxY)&&(r.maxY=e));return Re(r,{dates:o})}function Ye(e){const t={minX:null,maxX:null,minY:null,maxY:null,closestSpacing:null,dates:!1,initial:!0};for(let{minX:n,maxX:i,minY:r,maxY:o,dates:a,initial:s,closestSpacing:l}of e)a&&(t.dates=!0),s||(t.initial=!1,null!==n&&(null===t.minX||n<t.minX)&&(t.minX=n),null!==i&&(null===t.maxX||i>t.maxX)&&(t.maxX=i),null!==l&&(null===t.closestSpacing||l<t.closestSpacing)&&(t.closestSpacing=l),null!==r&&(null===t.minY||r<t.minY)&&(t.minY=r),null!==o&&(null===t.maxY||o>t.maxY)&&(t.maxY=o));return null===t.minX&&(t.minX=0),null===t.maxX&&(t.maxX=0),null===t.closestSpacing&&(t.closestSpacing=1),null===t.minY&&(t.minY=0),null===t.maxY&&(t.maxY=0),t}function Pe(e,{expandYWith:t=[],extendXForNBars:n=0}){const i=Object.assign({},e);for(let e of t)null!=e&&(("number"!=typeof i.minY||e<i.minY)&&(i.minY=e),("number"!=typeof i.maxY||e>i.maxY)&&(i.maxY=e));i.unscaledMinY=i.minY,i.unscaledMaxY=i.maxY;const r=i.maxY-i.minY,o=i.minY+r/2;if(i.minY=Math.min(i.minY,o-1.05*r/2),i.maxY=Math.max(i.maxY,o+1.05*r/2),i.minY===i.maxY&&null!==i.minY&&(i.minY>0?(i.minY*=.95,i.maxY*=1.05):i.minY<0?(i.minY*=1.05,i.maxY*=.95):(i.minY-=1,i.maxY+=1)),n&&i.minX!==i.maxX&&null!==i.minX&&null!==i.maxX){const e=(i.maxX-i.minX)/n;i.minX-=e/2,i.maxX+=e/2}return i}function Me(e,t,n={},i=0,r=void 0){if(void 0===r&&(r=e.length-1),0===e.length)return n.returnIndex?-1:[null,null];const o=Math.floor((i+r)/2);if(t===e[o][0]||e[o][0]instanceof Date&&e[o][0].valueOf()===t)return n.returnIndex?o:e[o];if(i===r)return e[i][0]<t&&"before"===n.searchType||e[i][0]>t&&"after"===n.searchType?n.returnIndex?i:e[i]:n.returnIndex?-1:[null,null];if(r-1===i){let o;return o="before"===n.searchType?i:"after"===n.searchType||Math.abs(e[i][0]-t)>Math.abs(e[r][0]-t)?r:i,n.returnIndex?o:e[o]}return t>e[o][0]?Me(e,t,n,o,r):t<e[o][0]?Me(e,t,n,i,o):void 0}function Fe({data:e,swap:t,minX:n,maxX:i,ignoreDiscontinuities:r,square:o}){if(!e.length||e.length&&n>e[e.length-1][0]||e.length&&i<e[0][0])return{data:[[n,null],[i,null]],firstAdded:!0,lastAdded:!0};let a,s=Me(e,n,{searchType:"before",returnIndex:!0})||0,l=Me(e,i,{searchType:"after",returnIndex:!0})||0;for(-1===l&&(l=0);s>=0&&e[s][0]>=n;)s--;for(;l<e.length&&e[l][0]<=i;)l++;let h=!1,c=!1,g=!1,A=s,d=l;if(r){for(;A>=0&&null===e[A][1];)A--;for(;d<e.length&&null===e[d][1];)d++}if(t){if(a=t.data,t.lastAdded&&a.pop(),n===t.minX&&(h=!0),s!==t.beforeIndex){h=!1,t.firstAdded&&a.shift();let i=t.beforeIndex;for(;i>=0&&a.length&&a[0][0]>=n;)r&&!e[i][1]&&0!==e[i][1]||a.unshift(e[i]),i--;for(;i<e.length&&a.length&&a[0][0]<n;)a.shift(),i++}if(r&&!t.ignoreDiscontinuities&&(a=a.filter(([e,t])=>null!=t)),s===t.beforeIndex&&t.firstAdded){c=!0;let t=s+1;if(r)for(;t<e.length&&null===e[t][1];)t++;-1===A&&a.length?a[0]=[n,null]:o&&a.length?a[0]=[n,e[A][1]]:a.length&&(a[0]=[n,Le(e,A,t,n)]),e[s+1][0]===a[0][0]&&e[s+1][1]===a[0][1]&&(c=!1)}let g=t.afterIndex;if(t.ignoreDiscontinuities&&!r){let t=s+1,n=0;for(c&&n++;n<=a.length&&t<e.length&&t<l;)e[t][0]<=i&&null===e[t][1]&&(!a[n]||a[n][0]!==e[t][0]||a[n][1]!==e[t][1])&&(a.splice(n,0,e[t]),t>=g&&(g=t+1)),t++,n++}let d=g||0;for(;d<e.length&&e[d][0]<=i;)e[d][0]>=n&&(r&&!e[d][1]&&0!==e[d][1]||a.push(e[d])),d++;for(;a.length&&a[a.length-1][0]>i;)a.pop()}else a=e.slice(s+1,l),r&&(a=a.filter(([e,t])=>null!=t));if(a.length||(a=o?A<0?[[n,null],[i,null]]:[[n,e[A][1]],[i,e[A][1]]]:[[n,Le(e,A,d,n)],[i,Le(e,A,d,i)]],c=!0,g=!0),!h){let t=s+1;if(r)for(;t<e.length&&null===e[t][1];)t++;a.length&&a[0][0]>n&&(c=!0,-1===A?a.unshift([n,null]):o?a.unshift([n,e[A][1]]):a.unshift([n,Le(e,A,t,n)]))}if(a.length&&a[a.length-1][0]<i){g=!0;let t=l-1;if(r)for(;t>=0&&null===e[t][1];)t--;d===e.length?a.push([i,null]):o?a.push([i,a[a.length-1][1]]):a.push([i,Le(e,t,d,i)])}if(1===a.length){let t,r;o?(t=A<0?[n,null]:[n,e[A][1]],r=[i,a[0][1]]):(t=[n,Le(e,A,s+1,n)],r=[i,Le(e,l-1,d,i)]),a.unshift(t),a.push(r),c=!0,g=!0}return{data:a,minX:n,maxX:i,beforeIndex:s,afterIndex:l,firstAdded:c,lastAdded:g,ignoreDiscontinuities:r}}function Le(e,t,n,i){if(t<0||n<0)return null;if(t>=e.length||n>=e.length)return null;if(t===n)return e[t][1];const[r,o]=e[t],[a,s]=e[n];if(i===r&&null!==o)return o;if(i===a&&null!==s)return s;if(null===o||null===s)return null;const l=(i-r)/(a-r);return l<0||l>1?null:l*(s-o)+o}function Oe({minY:e,maxY:t,scale:n}){return"log"===n&&(t=Math.log10(t),e=e<=0?t>0?-t:2*t:Math.log10(e)),{minY:e,maxY:t}}function Ie({data:e,swap:t,renderWidth:n,renderHeight:i,minX:r,maxX:o,minY:a,maxY:s,scale:l,dataChanged:h}){t&&t.yValues.length!==n&&(t=null);const c=t&&t.nullMask||new Uint8Array(n);c.fill(0);const g=new Float64Array(n),A=new Float64Array(n),d=new Float64Array(n),p=Oe({minY:a,maxY:s,scale:l}),u={data:e,renderWidth:n,renderHeight:i,minX:r,maxX:o,minY:a=p.minY,maxY:s=p.maxY,scale:l};let m,f;if(oe()){let n=0;const i=t&&t.dataNullMask&&t.dataF64,a=!h&&i&&t.minX===r&&t.maxX<=o&&t.length<=e.length;if(!a||t.dataNullMask.length<e.length){const n=1.25;m=new Float64Array(Math.floor(2*e.length*n)),f=new Uint8Array(Math.floor(e.length*n)),a&&(f.set(t.dataNullMask),m.set(t.dataF64))}else m=t.dataF64,f=t.dataNullMask;a&&(n=Math.max(t.length-1,0));for(let t=n;t<e.length;t++)m[2*t]=e[t][0],m[2*t+1]=e[t][1],null===e[t][1]?f[t]=1:f[t]=0;oe().selected_space_to_render_space(e.length,m,f,u,c,g,A,d)}else!function({data:e,renderWidth:t,renderHeight:n,minX:i,maxX:r,minY:o,maxY:a,scale:s},{nullMask:l,yValues:h,minYValues:c,maxYValues:g}){let A=0,d=A-1;for(let p=0;p<t;p++){const u=p/(t-1)*(r-i)+i;let m=null,f=null;for(A>0&&A<=e.length&&null===e[A-1][1]&&A--,A<e.length-2&&e[A+1][0]<u&&A++;A<e.length-2&&e[A+1][0]<u;A++){const t=e[A][1];null!==t&&((null===m||t<m)&&(m=t),(null===f||t>f)&&(f=t))}if(c[p]=null===m?0:n*(1-(("log"===s?Math.log10(m):m)-o)/(a-o)),g[p]=null===f?0:n*(1-(("log"===s?Math.log10(f):f)-o)/(a-o)),A>=e.length-1||null===e[A][1]||null===e[A+1][1]){const t=A>=e.length-1?null:e[A][1];l[p]=null===t|(null===m)<<1|(null===f)<<2,h[p]=null===t?0:n*(1-(("log"===s?Math.log10(t):t)-o)/(a-o)),A++;continue}const[C,x]=e[A],[b,y]=e[A+1];let _=(u-C)/(b-C)*(y-x)+x;d!==A&&(_=x),h[p]=null===_?0:n*(1-(("log"===s?Math.log10(_):_)-o)/(a-o)),l[p]=null===_|(null===m)<<1|(null===f)<<2,d=A}}(u,{nullMask:c,yValues:g,minYValues:A,maxYValues:d});return{nullMask:c,yValues:g,minYValues:A,maxYValues:d,dataF64:m,dataNullMask:f,minX:r,maxX:o,length:e.length}}function $e(e,{series:t,inDataSpace:n}){const i=[];let r=0;for(let o of e){const e=Ge(o,t);if(t.yKey&&Array.isArray(e)){for(let e of o[t.yKey]){if(t.ignoreDiscontinuities&&"number"!=typeof e[t.yKey]&&!Array.isArray(e))continue;const o=n[r++][0];t.square&&i.length>0&&i.push([o,i[i.length-1][1]]),i.push([o,e])}continue}if(t.ignoreDiscontinuities&&null==e)continue;const a=n[r++][0];t.square&&i.length>0&&i.push([a,i[i.length-1][1]]),i.push([a,o])}return i.length!==n.length&&console.warn("Flattening didn't give the same length as it has in data space"),i}function Ge(e,t){return t.yKey?e[t.yKey]:Array.isArray(e)?1===e.length?e[0]:e[1]:e}function We(e,t){return t.xKey?e[t.xKey]:Array.isArray(e)?e[0]:e}function Ne({mouseX:e,mouseY:t,sizing:n},i){const{x:r,y:o}=i,a=i.series.axis.scale,s=i.series.axis.currentBounds,{minY:l,maxY:h}=Oe({...s,scale:a}),c=(r-s.minX)/(s.maxX-s.minX)*n.elementWidth,g=(1-(("log"===a?Math.log10(o):o)-l)/(h-l))*n.elementHeight,A=Math.sqrt((c-e)**2+(g-t)**2),d=Math.abs(c-e);Object.assign(i,{pixelWidth:n.elementWidth,pixelX:c,pixelY:isNaN(g)?n.elementHeight/2:g,xDistance:d,distance:A})}Ee.propTypes={contextMenu:c().shape({x:c().number,y:c().number,showing:c().bool,value:c().oneOfType([c().instanceOf(Date),c().number,c().object])}).isRequired};const Ue={all:()=>{},lastMinute:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-6e4,e.minX)}},last10Minutes:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-6e5,e.minX)}},lastHour:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-36e5,e.minX)}},lastDay:e=>{if(e.dates)return{minX:Math.max(new Date(e.maxX).valueOf()-864e5,e.minX)}}};function qe({data:e,swap:t,minX:n,maxX:i,renderWidth:r,dataChanged:o}){const a=2*r;let s;if(!o&&t&&t.minX===n&&t.maxX<=i&&t.length<=e.length?(s=t.data,e.length>t.length&&(e.length>0&&s.length>0&&(s[s.length-1]=e[t.length-1]),s=s.concat(e.slice(t.length)))):s=[...e],s.length/a<4)return{data:s,minX:n,maxX:i,length:e.length};const l=[],h=(i-n)/a;let c=null,g=null,A=0;e.length&&l.push(e[0]);for(let e of s){const[t,i]=e;if(null===i)continue;const r=Math.floor((t-n)/h);r!==A&&(c&&g&&(c===g?l[l.length-1]!==c&&l.push(c):c[0]<g[0]?l.push(g,c):l.push(c,g)),c=null,g=null,A=r),(!c||i<c[1])&&(c=e),(!g||i>g[1])&&(g=e)}return c&&g&&(c===g?l.push(c):c[0]<g[0]?l.push(g,c):l.push(c,g)),e.length>=2&&e[e.length-1]!==c&&e[e.length-1]!==g&&l.push(e[e.length-1]),{data:l,minX:n,maxX:i,length:e.length}}function He(e,t){let n=e.name||e.yKey;return n||(n=t.toString()),n}function Ve({data:e,background:t,minX:n,maxX:i}){if(!t)return null;const r=[];for(let[e,n]of Object.entries(t)){if("object"==typeof n){if("function"!=typeof n.evaluator)throw new Error("Invalid background declaration: "+e+" (evaluator must be a function)");r.push(Object.assign({key:e,comparator:"custom",comparedAgainst:null},n));continue}if("null"===e){r.push({evaluator:e=>null===e&&n,color:n,key:e,comparator:"=",comparedAgainst:null});continue}const[t,i]=e.split(" ");if(!t||!i||isNaN(parseFloat(i)))throw new Error("Invalid background declaration: "+e);const o=parseFloat(i);let a;if("="===t)a=e=>"number"==typeof e&&e===o&&n;else if("<"===t)a=e=>"number"==typeof e&&e<o&&n;else if(">"===t)a=e=>"number"==typeof e&&e>o&&n;else if("<="===t)a=e=>"number"==typeof e&&e<=o&&n;else{if(">="!==t)throw new Error("Invalid background declaration: "+e);a=e=>"number"==typeof e&&e>=o&&n}r.push({evaluator:a,color:n,key:e,comparator:t,comparedAgainst:o})}const o=[];let a=null;for(let t=0;t<e.length;t++){let[s,l]=e[t];s instanceof Date&&(s=s.valueOf());for(let h of a?[a.condition,...r]:r){const r=h.evaluator(l);if(a){if(a.color===r)break;let c=s;if(t>0){let[n,i]=e[t-1];n instanceof Date&&(n=n.valueOf()),c=null===a.condition.comparedAgainst?s:null===l?n:n+(h.comparedAgainst-i)/(l-i)*(s-n)}o.push({...a,maxX:c,maxXt:(c-n)/(i-n)}),a=null}if(r){let o=s;if(t>0){let[n,i]=e[t-1];n instanceof Date&&(n=n.valueOf()),o=null===h.comparedAgainst?n:null===i?s:n+(h.comparedAgainst-i)/(l-i)*(s-n)}a={minX:o,minXt:(o-n)/(i-n),color:r,condition:h};break}}}return a&&o.push({...a,maxX:e[e.length-1][0],maxXt:(e[e.length-1][0]-n)/(i-n)}),{data:o}}class je extends S{constructor({defaultBoundsCalculator:e,customBoundsSelectors:t,requireWASM:n,defaultShowIndividualPoints:i,defaultShowSidebar:r,defaultShowAnnotations:o,defaultShowOptions:a,syncPool:s,grapherID:l,sharedDataCache:h,sharedSubscriptions:c,fullscreen:g}){super(),this._requireWASM=n,n&&re.then(()=>{this._markDirty()}),this._series=[],this._seriesFromOriginalSeries=new Map,this._axes=[{series:[],scale:"linear",side:"left",axisIndex:0}],this._highlightedSeries=null,this._showIndividualPoints=i||!1,this._autoscaleY=!0,this._percentile=100,this._percentileAsymmetry=0,this._showingOptions=a,this._maxPrecision=!1,this._showingSidebar=r||!1,this._showingAnnotations=o||!1,this._grapherID=l,this._fullscreen=g||!1,this._alwaysTooltipped=new Set,this._tooltipState={mousePresent:!1,mouseX:0,mouseY:0,elementWidth:0,elementHeight:0,tooltips:[]},this._contextMenuPosition={x:0,y:0,showing:!1,value:null},this._savedTooltips=[],this._draggingY=!1,this._annotations=[],this._annotationsState={elementWidth:0,annotations:[]},this._enumMap={},this._hasXEnum=!1,this._timingBuffer=[],this._timingIndex=0,this._timingFrameCount=0,this._modifiedSeries=new Set,this._deferredEmissions={},this._deferredPriorityEmissions={},this.primaryRenderer=null,this.rangeGraphRenderer=null,this._boundsCalculator=function(e,t){if(Ue[e])return Ue[e];for(let{label:n,calculator:i}of t)if(e===n)return i;return Ue.all}(e,t),this._boundsHistory=[this._boundsCalculator],this._boundsIndex=0,this._dataCache=h||new Map,this._subscriptions=c||new Map,this._subscriptionsShared=!!c,this._observablesToSeries=new Map,this._generators=new Set,this._generatorsToSeries=new Map,this._generatorCallArgs=new Map,this._seriesChangedFromPromises=new Set,this._syncPool=s,this._syncPool&&this._syncPool.add(this),this._onDataChange()}dispose(){if(this.emit("dispose",this),this.clearListeners(),!this._subscriptionsShared){for(let e of this._subscriptions.values())e.unsubscribe();this._subscriptions.clear()}for(let e of this._series)this._removeSeries(e);this._syncPool&&this._syncPool.remove(this),this.disposed=!0}setSeries(e){const t=this._series.filter(e=>e.userCreated),n=this._series.filter(e=>!e.userCreated);if(e.length===n.length){let t=!1;for(let n=0;n<e.length;n++)if(e[n]!==this._series[n].originalSeries){t=!0;break}if(!t)return}else this._mustResize=this._mustResize||this._fullscreen;const i=new Set(e);for(let e of n)i.has(e.originalSeries)||this._removeSeries(e);this._series.splice(0);for(let t=0;t<e.length;t++){const n=e[t];let i=this._seriesFromOriginalSeries.get(n);i||(i={...n,originalSeries:n},this._seriesFromOriginalSeries.set(n,i),i.defaultAlwaysTooltipped&&(this._alwaysTooltipped.add(i),this._tooltipsChanged=!0,this.deferredEmit("always_tooltipped_changed",this._alwaysTooltipped))),i.index=t,this._series.push(i),this._assignAxisTo(i),i.hidden&&this._hideSeries(i)}for(let n=0;n<t.length;n++){const i=t[n];i.index=n+e.length,this._series.push(i)}this.deferredEmit("series_changed",this._series),this._dataChanged=!0,this._markDirty()}_markDirty(){if(this._frameRequested)return;if(this._requireWASM&&!oe)return;const e=performance.now();this._frameRequested=!0,requestAnimationFrame(()=>{if(this.disposed)return;const t=performance.now(),n=performance.now();this._dataChanged?(this._onDataChange(),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0):this._modifiedSeries.size?(this._onDataAdd(this._modifiedSeries),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0):(this._primarySizeChanged&&(this._calculatePrimarySizeDependents(),this._mustRerender=!0),this._rangeGraphSizeChanged&&(this._calculateRangeGraphSizeDependents(),this._mustRerender=!0));const i=performance.now(),r=performance.now();this._mustRerender&&this._render();const o=performance.now(),a=performance.now();this._mustCallGenerators&&this._callGenerators();const s=performance.now(),l=performance.now();this._tooltipsChanged&&this._recalculateTooltips();const h=performance.now(),c=performance.now();this._contextMenuChanged&&this._recalculateContextMenu();const g=performance.now(),A=performance.now();this._annotationsChanged&&this._recalculateAnnotations();const d=performance.now();this._mustResize&&(this.primaryRenderer.resizeDebounced(),this.rangeGraphRenderer&&this.rangeGraphRenderer.resizeDebounced()),this._frameRequested=!1,this._mustRerender=!1,this._dataChanged=!1,this._primarySizeChanged=!1,this._rangeGraphSizeChanged=!1,this._modifiedSeries.clear(),this._seriesChangedFromPromises.clear(),this._tooltipsChanged=!1,this._contextMenuChanged=!1,this._annotationsChanged=!1,this._mustCallGenerators=!1,this._mustResize=!1;const p=performance.now();for(let e of[...Object.values(this._deferredPriorityEmissions),...Object.values(this._deferredEmissions)])this.emit(...e);const u=performance.now();this._deferredEmissions={},this._deferredPriorityEmissions={};const m=performance.now(),f={frameExecution:m-t,frameRequestAndExecution:m-e,generators:s-a,dataProcessing:i-n,renderPipeline:o-r,tooltips:h-l,contextMenu:g-c,annotations:d-A,callbacks:u-p};this.lastLoopTime=f,this._timingFrameCount&&(this._timingBuffer.length<this._timingFrameCount?this._timingBuffer.push(f):this._timingBuffer[this._timingIndex%this._timingFrameCount]=f,this._timingIndex++),this.emit("render_time",m-t,f)})}deferredEmit(...e){this._deferredEmissions[e[0]]=e}deferredPriorityEmit(...e){this._deferredPriorityEmissions[e[0]]=e}_seriesToSimpleData(e){const t=T(e);if(g.includes(t))return e.data;let n=this._dataCache.get(e.data);if(n&&this._seriesChangedFromPromises.has(e.data))return n;if(n||(n=[],this._dataCache.set(e.data,n),e.simpleData=n),"object_observable"===t||"tuple_observable"===t){let t=this._observablesToSeries.get(e.data);if(t){const i=t.values().next().value;if(n=i.simpleData,!n)throw new Error(`Cannot find simpleData in ${i.name||i.yKey||i.data}`);this._dataCache.set(e.data,n),e.simpleData=n}else t=new Set,e.simpleData=n,this._observablesToSeries.set(e.data,t);t.add(e),this._listenToObservableData({observable:e.data,currentData:n})}return"generator"===t&&(this._generatorsToSeries.has(e.data)||this._generatorsToSeries.set(e.data,new Set),this._generatorsToSeries.get(e.data).add(e),this._generators.has(e.data)||(this._generators.add(e.data),this._callGenerator(e.data))),n}_listenToPromise(e,t){t.then(t=>{this._dataCache.set(e.data,t),e.simpleData=t,this._seriesChangedFromPromises.add(e.data),this._dataChanged=!0,this._markDirty()})}_listenToObservableData({observable:e,currentData:t}){if(this._subscriptions.has(e))return;this._subscriptions.set(e,!0);const n=e.observe(n=>{if(Array.isArray(n))for(let e of n)t.push(e);else t.push(n);this.emit("observable_modified",e),this.markObservableModified(e)});this._subscriptions.set(e,n)}markObservableModified(e){if(this._observablesToSeries.has(e)){for(let t of this._observablesToSeries.get(e))this._modifiedSeries.add(t);this._markDirty()}}_unsubscribeFromStaleSeries(){const e=new Set(this._series);for(let[t,n]of this._observablesToSeries){let i=!1;for(let t of n)if(e.has(t)){i=!0;break}i||(this._subscriptions.get(t).unsubscribe(),this._subscriptions.delete(t),this._observablesToSeries.delete(t))}for(let[t,n]of this._generatorsToSeries){let i=!1;for(let t of n)if(e.has(t)){i=!0;break}i||(this._generatorsToSeries.delete(t),this._generators.delete(t),this._generatorCallArgs.delete(t))}}async _callGenerator(e){const t={minX:this._selection.minX,maxX:this._selection.maxX,sizing:this.primaryRenderer.sizing};if(i=t,void 0===(n=this._generatorCallArgs.get(e))||void 0===i?n===i:n.minX===i.minX&&n.maxX===i.maxX&&n.sizing.elementWidth===i.sizing.elementWidth&&n.sizing.renderWidth===i.sizing.renderWidth)return;var n,i;this._generatorCallArgs.set(e,t);const r=await Promise.resolve(e(t));if(r&&this._generatorsToSeries.has(e))if(this._dataChanged=!0,this._markDirty(),"function"==typeof r.observe){const t=[];this._dataCache.set(e,t);for(let n of this._generatorsToSeries.get(e))n.simpleData=t;for(let t of this._generatorsToSeries.get(e))this._observablesToSeries.has(r)||this._observablesToSeries.set(r,new Set),this._observablesToSeries.get(r).add(t);this._listenToObservableData({observable:r,currentData:t})}else{this._dataCache.set(e,r);for(let t of this._generatorsToSeries.get(e))t.simpleData=r}}_callGenerators(){for(let e of this._generators)this._callGenerator(e)}_recalculateTooltips(){this.primaryRenderer&&this.primaryRenderer.sizing&&(this._tooltipState=function({mousePresent:e,mouseX:t,mouseY:n,sizing:i,series:r,alwaysTooltipped:o,savedTooltips:a,allTooltipped:s,closestSpacing:l}){a=a.filter(e=>e.series.axis);for(let e of a)Ne({mouseX:t,mouseY:n,sizing:i},e);if(!e)return{mouseX:t,mouseY:n,elementWidth:i.elementWidth,elementHeight:i.elementHeight,tooltips:[...a]};const h=[];let c=1/0;for(let e=0;e<r.length;e++){const a=r[e];if(a.hidden)continue;const g=a.axis,A=g.scale,d=g.currentBounds,{minY:p,maxY:u}=Oe({...d,scale:A}),m=t/i.elementWidth*(d.maxX-d.minX)+d.minX;let f=a.inDataSpace;if(a.ignoreDiscontinuities&&(f=f.filter(e=>"number"==typeof e[1])),0===f.length)continue;let C=f[0][0],x=f[f.length-1][0];C instanceof Date&&(C=C.getTime()),x instanceof Date&&(x=x.getTime());const b=0;if(m<C-b||m>x+b)continue;const y=Me(f,m,{returnIndex:!0}),_=f[y];if(!_)continue;const[B,v]=_;if(null===B)continue;let w=(B-d.minX)/(d.maxX-d.minX)*i.elementWidth;const E=(1-(("log"===A?Math.log10(v):v)-p)/(u-p))*i.elementHeight;if(E>i.elementHeight||E<0)continue;const k=o.has(a)||s;let S=20,T=20,z=20;if("bar"===a.rendering){const e=a.axis.series.filter(e=>"bar"===e.rendering).filter(e=>e.inDataSpace&&e.inDataSpace.length>0&&e.dataBounds&&e.dataBounds.maxX>=d.minX&&e.dataBounds.minX<=d.maxX),t=e.indexOf(a),n=e.length||1,{totalBarWidth:r,barWidth:o}=H({closestSpacing:a.dataBounds?.closestSpacing||l,bounds:d,sizing:i,axisSeriesCount:n});w-=r/2/i.pixelRatio,w+=o*(t+.5)/i.pixelRatio,S=o/2/i.pixelRatio,T=100,z=S+T}const R=Math.abs(w-t),X=Math.abs(E-n),Y=Math.sqrt(R**2+(E-n)**2);if(!k&&(R>S||X>T||Y>z))continue;let P,M;const F=a.simpleData||a.data,L=F.length&&!!a.hasEnum;if(a.xLabel||a.yLabel||L){let e;e=F.length===f.length?F[y]:$e(F,{series:a,inDataSpace:f})[y][1],a.xLabel?P=e[a.xLabel]:a.hasXEnum&&(P=We(e,a)),a.yLabel?M=e[a.yLabel]:L&&(M=Ge(e,a))}Y<c&&(c=Y);let O=(0,D.default)(a.color,e,a.multigrapherSeriesIndex);v<0&&a.negativeColor?O=a.negativeColor:0===v&&a.zeroLineColor&&(O=a.zeroLineColor);const I=a.followingMouseTooltip&&o.has(a),$=isNaN(E)?i.elementHeight/2:E;h.push({pixelWidth:i.elementWidth,pixelX:w,pixelY:$,tooltipPixelY:I?n:$,x:B,y:v,color:O,distance:Y,xDistance:R,index:e,series:a,xLabel:P,yLabel:M,fullYPrecision:a.fullYPrecision,ignoreYDistanceCheck:k})}const g=h.filter(({distance:e,ignoreYDistanceCheck:t})=>e===c||t).sort((e,t)=>t.distance-e.distance);return{mousePresent:e,mouseX:t,mouseY:n,elementWidth:i.elementWidth,elementHeight:i.elementHeight,unsavedTooltipsCount:g.length,tooltips:[...a,...g]}}({mousePresent:this._tooltipState.mousePresent,mouseX:this._tooltipState.mouseX,mouseY:this._tooltipState.mouseY,sizing:this.primaryRenderer.sizing,series:this._series,alwaysTooltipped:this._alwaysTooltipped,savedTooltips:this._savedTooltips,allTooltipped:this._tooltipAllNext,closestSpacing:this._globalBounds.closestSpacing}),this._tooltipAllNext=!1,this.deferredEmit("tooltip_state_changed",this._tooltipState,this._tooltipStateArg),this._tooltipStateArg=null)}_recalculateContextMenu(){if(!this.primaryRenderer||!this.primaryRenderer.sizing)return;const e=this.primaryRenderer.boundingRect,t=this.primaryRenderer.sizing;let n=null,i=null;for(let r of this._series){const o=r.axis.currentBounds;i=this._contextMenuPosition.x-e.left,this._contextMenuPosition.x>2*(e.right-t.elementWidth)&&(i-=130),n="timestamp"===r.xKey||"time"===r.xKey||"date"===r.xKey?new Date((this._contextMenuPosition.x-e.left)/t.elementWidth*(o.maxX-o.minX)+o.minX):(this._contextMenuPosition.x-e.left)/t.elementWidth*(o.maxX-o.minX)+o.minX}this._contextMenuPosition={x:i,y:this._contextMenuPosition.y-e.top,showing:this._contextMenuPosition.showing,value:n},this.deferredEmit("context_menu_position_changed",this._contextMenuPosition)}_recalculateAnnotations(){this.primaryRenderer&&this.primaryRenderer.sizing&&(this._annotationsState=function({annotations:e,series:t,sizing:n,selection:i}){const r=new Set(t.map((e,t)=>({name:He(e,t),hidden:e.hidden})).filter(({hidden:e})=>!e).map(({name:e})=>e)),{elementWidth:o}=n,{minX:a,maxX:s}=i,l=s-a;return 0===l?{annotations:[],elementWidth:o}:{annotations:e.filter(e=>{if(!e.series)return!0;for(let t of e.series)if(r.has(t))return!0;return!1}).map(e=>{const t=void 0!==e.startX&&void 0!==e.endX,n=void 0!==e.x;let i=e.startX,r=e.endX;if(!t&&n)i=e.x,r=e.x;else if(!t&&!n)return null;const s=e=>"string"==typeof e?new Date(e).valueOf():e instanceof Date?e.valueOf():e;let h=s(i),c=s(r);h>c&&([h,c]=[c,h]);let g=(h-a)/l*o,A=(c-a)/l*o;g=Math.max(0,Math.min(o,g)),A=Math.max(0,Math.min(o,A));let d=A-g;return d<1&&A>0&&g<o&&(!t&&n?(d=1,g-=.5):d=t?1:0),g=Math.max(0,Math.min(o-d,g)),d<=0?null:{...e,isRange:t,pixelStartX:g,pixelWidth:d}}).filter(e=>null!==e),elementWidth:o}}({annotations:this._annotations,series:this._series,sizing:this.primaryRenderer.sizing,selection:this._selection}),this.deferredEmit("annotations_changed",this._annotationsState))}_onDataChange(){this._expandYWith=[];const e=[];for(let t of this._series){if(t.hidden)continue;const n=this._seriesToSimpleData(t),i=ke({...t,data:n},{stateController:this});let r,o,a,s;Array.isArray(i)?(r=i,o=[],a=null,s=null):(r=i.data,o=i.rangeValues||[],a=i.windDirections||null,s=i.windData||null),t.inDataSpace=r,t.windDirections=a,t.windData=s,t.simpleDataSliceStart=n.length,t._rangeValues=o,r.map(([e,t])=>t).filter(e=>"number"==typeof e);const l=r.map(([e,t])=>[e,t]);for(let e of o)l.push([null,e]);t.dataBounds=Xe(l,{rangeValues:o}),"bar"===t.rendering&&(t.dataBounds=Pe(t.dataBounds,{extendXForNBars:t.inDataSpace.length,expandYWith:t.expandYWith})),e.push(t.dataBounds),t.expandYWith&&this._expandYWith.push(t.expandYWith)}this._unsubscribeFromStaleSeries(),this._dataBounds=Ye(e),this._recalculateSelection({disableSwap:!0});for(let e of this._series)e.hidden||(e.selectedBounds=Xe(e.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),e.hasAreaBottom&&(e.selectedBoundsAreaTop=e.selectedBounds,e.selectedBoundsAreaBottom=Xe(e.inSelectedSpaceAreaBottom.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),e.selectedBounds=Ye([e.selectedBoundsAreaTop,e.selectedBoundsAreaBottom])));this._recalculateAxisBounds();for(let e of this._series)e.hidden||(this._calculatePrimarySizeDependents(e,{dataChanged:!0}),this._calculateRangeGraphSizeDependents(e,{dataChanged:!0}))}_onDataAdd(e){const t=new Map,n=new Set,i=new Set;for(let t of e)i.add(t);for(let i of e){if(n.add(i.axis),!i.inDataSpace)throw new Error("inDataSpace must be present for onDataAdd to be called");const e=this._seriesToSimpleData(i);let r;i.inDataSpace.length&&(r=i.inDataSpace[i.inDataSpace.length-1][1]);const o=ke(i,{data:e.slice(i.simpleDataSliceStart||0),valueXStart:i.inDataSpace.length,prevY:r,stateController:this});if(t.set(i,o),i.simpleDataSliceStart=e.length,o.length<32)i.inDataSpace.push(...o);else for(let e of o)i.inDataSpace.push(e);let a=Xe(o);"bar"===i.rendering&&(a=Pe(a,{extendXForNBars:i.inDataSpace.length,expandYWith:i.expandYWith})),i.dataBounds=Ye([i.dataBounds,a]),this._dataBounds=Ye([this._dataBounds,a]),i.newPointCount=o.length,i.newDataBounds=a}const r=this._selection;this._recalculateSelection();for(let n of e){if(!n.inSelectedSpace.data.length){n.selectedBounds=Xe(n.inSelectedSpace.data);continue}const e=n.inSelectedSpace.data[0][0],i=n.inSelectedSpace.data[n.inSelectedSpace.data.length-1][0];if(!(r.minX>=e&&r.maxX<=i)||100!==this._percentile){n.selectedBounds=Xe(n.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),n.hasAreaBottom&&(n.selectedBoundsAreaTop=n.selectedBounds,n.selectedBoundsAreaBottom=Xe(n.inSelectedSpaceAreaBottom.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}),n.selectedBounds=Ye([n.selectedBoundsAreaTop,n.selectedBoundsAreaBottom]));continue}const o=t.get(n).filter(e=>e[0]>=this._selection.minX&&e[0]<=this._selection.maxX);n.newSelectedData=o,n.selectedBounds=Ye([n.selectedBounds,Xe(o)])}this._recalculateAxisBounds(),this.deferredPriorityEmit("axis_bounds_changed",this._axes.map(({currentBounds:e})=>e));for(let e of n)for(let t of e.series)this._calculatePrimarySizeDependents(t),this._calculateRangeGraphSizeDependents(t)}_recalculateAxisBounds(){for(let e of this._axes){if(this._selection.fixedY||!this._autoscaleY){e.targetBounds=this._selection,e.targetBounds.byAxis&&(e.targetBounds=e.targetBounds.byAxis[e.axisIndex]);const t=[];for(let n of e.series)if(n._rangeValues&&n._rangeValues.length>0){const i=[];for(let t=0;t<n.inDataSpace.length;t++){const[r,o]=n.inDataSpace[t];let a=r,s=e.targetBounds.minX,l=e.targetBounds.maxX;if(r instanceof Date&&(a=r.valueOf()),s instanceof Date&&(s=s.valueOf()),l instanceof Date&&(l=l.valueOf()),null!==s&&null!==l&&a>=s&&a<=l){const e=2*t;e<n._rangeValues.length&&(i.push(n._rangeValues[e]),e+1<n._rangeValues.length&&i.push(n._rangeValues[e+1]))}}i.length>0&&t.push(...i)}if(t.length>0){const n=t.filter(e=>"number"==typeof e);e.currentBounds={...e.targetBounds,minY:null===e.targetBounds.minY?Math.min(...n):e.targetBounds.minY,maxY:null===e.targetBounds.maxY?Math.max(...n):e.targetBounds.maxY}}else e.currentBounds=e.targetBounds;continue}const t=[],n=[];for(let i of e.series)if(t.push(i.selectedBounds),i.expandYWith&&n.push(...i.expandYWith),"bar"===i.rendering&&n.push(i.selectedBounds.minY,i.selectedBounds.maxY),i._rangeValues&&i._rangeValues.length>0){const e=[];for(let t=0;t<i.inDataSpace.length;t++){const[n,r]=i.inDataSpace[t];let o=n,a=i.selectedBounds.minX,s=i.selectedBounds.maxX;if(n instanceof Date&&(o=n.valueOf()),a instanceof Date&&(a=a.valueOf()),s instanceof Date&&(s=s.valueOf()),null!==a&&null!==s&&o>=a&&o<=s){const n=2*t;n<i._rangeValues.length&&(e.push(i._rangeValues[n]),n+1<i._rangeValues.length&&e.push(i._rangeValues[n+1]))}}e.length>0&&n.push(...e)}e.selectedDataBounds=Ye(t),e.targetBounds=e.currentBounds=Pe(e.selectedDataBounds,{expandYWith:n})}this.deferredPriorityEmit("axis_bounds_changed",this._axes.map(({currentBounds:e})=>e))}_recalculateSelection({disableSwap:e=!1}={}){this._globalBounds=Pe(this._dataBounds,{expandYWith:this._expandYWith.flat()}),this.deferredPriorityEmit("global_bounds_changed",this._globalBounds),this._selection=function(e,t){const n=Object.assign({},e,t(e));return n.maxX instanceof Date&&(n.maxX=n.maxX.valueOf()),n.minX instanceof Date&&(n.minX=n.minX.valueOf()),n.maxX<n.minX&&(n.maxX=n.minX),n.minX<e.minX&&(n.minX=e.minX),n.maxX>e.maxX&&(n.maxX=e.maxX),n}(this._globalBounds,this._boundsCalculator),this.deferredPriorityEmit("selection_changed",this._selection);for(let t of this._series)t.hidden||(t.inSelectedSpace=Fe({data:t.hasAreaBottom?t.inDataSpace.filter((e,t)=>t%2==1):t.inDataSpace,swap:e?null:t.inSelectedSpace,minX:this._selection.minX,maxX:this._selection.maxX,ignoreDiscontinuities:t.ignoreDiscontinuities,square:t.square}),t.hasAreaBottom&&(t.inSelectedSpaceAreaBottom=Fe({data:t.inDataSpace.filter((e,t)=>t%2==0),swap:e?null:t.inSelectedSpaceAreaBottom,minX:this._selection.minX,maxX:this._selection.maxX,ignoreDiscontinuities:t.ignoreDiscontinuities,square:t.square})))}_render(){if(this.primaryRenderer&&this.primaryRenderer.sizing){this.primaryRenderer.clear(),this.rangeGraphRenderer&&this.rangeGraphRenderer.clear();for(let e of this._series){if(e.hidden)continue;const t=e.shadowColor||{day:"white",export:"transparent",night:"black"}[this._theme]||"black",n=void 0;if(this.primaryRenderer.renderBackground(e.inBackgroundSpacePrimary),this.primaryRenderer.render(e,e.inRenderSpacePrimary,{highlighted:this._highlightedSeries===e.index,showIndividualPoints:this._showIndividualPoints,shadowColor:t,shadowBlur:n,defaultLineWidth:this._defaultLineWidth,globalBounds:this._globalBounds,inRenderSpaceAreaBottom:e.inRenderSpacePrimaryAreaBottom}),this.rangeGraphRenderer&&this.rangeGraphRenderer.sizing){const t={...this._globalBounds,minY:void 0!==this._globalBounds.unscaledMinY?this._globalBounds.unscaledMinY:this._globalBounds.minY,maxY:void 0!==this._globalBounds.unscaledMaxY?this._globalBounds.unscaledMaxY:this._globalBounds.maxY};this.rangeGraphRenderer.render(e,e.inRenderSpaceRangeGraph,{shadowColor:"transparent",shadowBlur:0,width:1,showIndividualPoints:!1,bounds:t,globalBounds:t,inRenderSpaceAreaBottom:e.inRenderSpaceRangeGraphAreaBottom})}}}}_calculatePrimarySizeDependents(e,{dataChanged:t=!1}={}){if(!this.primaryRenderer||!this.primaryRenderer.sizing)return;if(!e){for(let e of this._series)this._calculatePrimarySizeDependents(e);return}if(!this._series.includes(e))throw new Error("Series no longer exists");if(e.hidden)return;const{currentBounds:n,scale:i}=e.axis,r=Math.ceil(this.primaryRenderer.sizing.renderWidth/2),o=Math.ceil(this.primaryRenderer.sizing.renderHeight),a={minX:n.minX,maxX:n.maxX,renderWidth:r,dataChanged:t};e.inCondensedSelectedSpacePrimary=qe({data:e.inSelectedSpace.data,swap:e.inCondensedSelectedSpacePrimary,...a});const s={minX:n.minX,maxX:n.maxX,minY:n.minY,maxY:n.maxY,renderWidth:r,renderHeight:o,scale:i,dataChanged:t};e.inRenderSpacePrimary=Ie({data:e.inCondensedSelectedSpacePrimary.data,swap:e.inRenderSpacePrimary,...s}),e.inBackgroundSpacePrimary=Ve({data:e.inCondensedSelectedSpacePrimary.data,background:e.background,swap:e.inBackgroundSpacePrimary,minX:n.minX,maxX:n.maxX}),e.hasAreaBottom&&(e.inCondensedSelectedSpacePrimaryAreaBottom=qe({data:e.inSelectedSpaceAreaBottom.data,swap:e.inCondensedSelectedSpacePrimaryAreaBottom,...a}),e.inRenderSpacePrimaryAreaBottom=Ie({data:e.inCondensedSelectedSpacePrimaryAreaBottom.data,swap:e.inRenderSpacePrimaryAreaBottom,...s}),e.inBackgroundSpacePrimaryAreaBottom=Ve({data:e.inCondensedSelectedSpacePrimaryAreaBottom.data,background:e.background,swap:e.inBackgroundSpacePrimaryAreaBottom,minX:n.minX,maxX:n.maxX}))}_calculateRangeGraphSizeDependents(e,{dataChanged:t=!1}={}){if(!this.rangeGraphRenderer||!this.rangeGraphRenderer.sizing)return;if(!e){for(let e of this._series)this._calculateRangeGraphSizeDependents(e);return}if(!this._series.includes(e))throw new Error("Series no longer exists");if(e.hidden)return;const{scale:n}=e.axis,i=this._globalBounds,r={...i,minY:void 0!==i.unscaledMinY?i.unscaledMinY:i.minY,maxY:void 0!==i.unscaledMaxY?i.unscaledMaxY:i.maxY},o=Math.ceil(this.rangeGraphRenderer.sizing.renderWidth/2),a=Math.ceil(this.rangeGraphRenderer.sizing.renderHeight),s={minX:i.minX,maxX:i.maxX,ignoreDiscontinuities:e.ignoreDiscontinuities,square:e.square};e.inSelectedSpaceRangeGraph=Fe({data:e.hasAreaBottom?e.inDataSpace.filter((e,t)=>t%2==1):e.inDataSpace,swap:e.inSelectedSpaceRangeGraph,...s});const l={minX:i.minX,maxX:i.maxX,renderWidth:o,dataChanged:t};e.inCondensedSelectedSpaceRangeGraph=qe({data:e.inSelectedSpaceRangeGraph.data,swap:e.inCondensedSelectedSpaceRangeGraph});const h={minX:r.minX,maxX:r.maxX,minY:r.minY,maxY:r.maxY,renderWidth:o,renderHeight:a,scale:n,dataChanged:t};e.inRenderSpaceRangeGraph=Ie({data:e.inCondensedSelectedSpaceRangeGraph.data,swap:e.inRenderSpaceRangeGraph,...h}),e.hasAreaBottom&&(e.inSelectedSpaceRangeGraphAreaBottom=Fe({data:e.inDataSpace.filter((e,t)=>t%2==0),swap:e.inSelectedSpaceRangeGraphAreaBottom,...s}),e.inCondensedSelectedSpaceRangeGraphAreaBottom=qe({data:e.inSelectedSpaceRangeGraphAreaBottom.data,swap:e.inCondensedSelectedSpaceRangeGraphAreaBottom,...l}),e.inRenderSpaceRangeGraphAreaBottom=Ie({data:e.inCondensedSelectedSpaceRangeGraphAreaBottom.data,swap:e.inRenderSpaceRangeGraphAreaBottom,...h}))}_createAxis({side:e}){const t={series:[],scale:"linear",side:e,axisIndex:this._axes.length};return this._axes.push(t),t}_moveAxis(e,t){if(!this._series.includes(e))throw new Error("Series no longer exists");let n;if(n="new-left"===t||"new-right"===t?this._createAxis({side:t.split("-")[1]}):this._axes[parseInt(t)],e.axis===n)return;const i=e.axis,r=i.series.indexOf(e);if(-1===r)throw new Error("Series not present in axis");i.series.splice(r,1),n.series.push(e),e.axis=n,this._dataChanged=!0,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("left_axes_changed",this.leftAxes),this.deferredEmit("right_axes_changed",this.rightAxes),this.deferredEmit("exported_axes_changed",this.exportedAxes),this._markDirty()}_assignAxisTo(e){if(e.axis&&"object"==typeof e.axis)return;let t;if(e.axisIndex){const{axisIndex:n}=e;t="new-left"===n||"new-right"===n?this._createAxis({side:n.split("-")[1]}):this._axes[parseInt(n)]}else if(e.axis){e.originalAxis=e.axis;let[n,i]=e.axis.split("-");t=function({axes:e,side:t,number:n}){let i;n=n&&parseInt(n)||0;let r=0;for(let o of e)if(o.side===t){if(r===n){i=o;break}r++}return i}({axes:this._axes,side:n,number:i}),t||(t=this._createAxis({side:n}))}else t=this._axes[0];t.series.push(e),e.axis=t,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("exported_axes_changed",this.exportedAxes),"left"===e.axis.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_removeSeries(e){this._seriesFromOriginalSeries.delete(e.originalSeries);const{axis:t,data:n}=e;t.series.splice(t.series.indexOf(e),1);const i=this._observablesToSeries.get(n);i&&(i.delete(e),0===i.size&&this._observablesToSeries.delete(n)),this._generatorsToSeries.has(n)&&(this._generatorsToSeries.get(n).delete(e),0===this._generatorsToSeries.get(n).size&&(this._generatorsToSeries.delete(n),this._generators.delete(n))),this._alwaysTooltipped.delete(e),e.axis=e.originalAxis,delete e.originalAxis,delete e.inDataSpace,delete e.inSelectedSpace,delete e.inValueSpacePrimary,delete e.inValueSpaceRangeGraph,delete e.inRenderSpacePrimary,delete e.inRenderSpaceRangeGraph,delete e.newPointCount,delete e.newDataBounds,delete e.simpleDataSliceStart,this.deferredEmit("axes_changed",this._axes),this.deferredEmit("exported_axes_changed",this.exportedAxes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_hideSeries(e){const{axis:t}=e,n=t.series.indexOf(e);e.indexInAxis=n,t.series.splice(n,1),this.deferredEmit("axes_changed",this._axes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}_showSeries(e){const{axis:t}=e;t.series.splice(e.indexInAxis,0,e),this.deferredEmit("axes_changed",this._axes),"left"===t.side?this.deferredEmit("left_axes_changed",this.leftAxes):this.deferredEmit("right_axes_changed",this.rightAxes)}get boundCalculator(){return this._boundsCalculator}get axes(){return this._axes}get leftAxes(){const e=this._axes.filter(({side:e,series:t})=>"left"===e&&t.length>0).reverse();return 0===e.length&&0===this.rightAxes.length&&e.push(this._axes[0]),e}get rightAxes(){return this._axes.filter(({side:e,series:t})=>"right"===e&&t.length>0)}get bounds(){return this._axes.map(({targetBounds:e})=>e)}get selection(){return this._selection}get globalBounds(){return this._globalBounds}get series(){return this._series}get highlightedSeries(){return this._highlightedSeries}get showIndividualPoints(){return this._showIndividualPoints}get autoscaleY(){return this._autoscaleY}get boundHistory(){return{hasNextBounds:this._boundsIndex<this._boundsHistory.length-1,hasPreviousBounds:this._boundsIndex>0}}get tooltipState(){return this._tooltipState}get contextMenuState(){return this._contextMenuPosition}get alwaysTooltipped(){return this._alwaysTooltipped}get draggingY(){return this._draggingY}get averageLoopTime(){return function(e){const t={};for(let n of e)for(let[e,i]of Object.entries(n))t[e]=(t[e]||0)+i;for(let[n,i]of Object.entries(t))t[n]=i/e.length;return t}(this._timingBuffer)}get exportedAxes(){const e=new Map;let t=0,n=0;for(let i of this._axes){let r;"left"===i.side?(r=`left-${t}`,t++):(r=`right-${n}`,n++);for(let t of i.series)e.set(t,r)}return this.series.map(t=>({...t.originalSeries,axis:e.get(t)}))}get percentile(){return this._percentile}get percentileAsymmetry(){return this._percentileAsymmetry}get showingOptions(){return this._showingOptions}get maxPrecision(){return this._maxPrecision}get showingSidebar(){return this._showingSidebar}get showingAnnotations(){return this._showingAnnotations}get userCreatedSeries(){return this._series.filter(e=>e.userCreated)}get grapherID(){return this._grapherID}get annotationState(){return this._annotationsState}get sizing(){return this.primaryRenderer&&this.primaryRenderer.sizing}get theme(){return this._theme}get exportMode(){return this._exportMode}get enumMap(){return this._enumMap}get hasXEnum(){return this._hasXEnum}markSizeChanged(e){e===this.primaryRenderer?(this.deferredEmit("primary_size_change",this.primaryRenderer.sizing),this.deferredEmit("primary_bounding_rect_change",this.primaryRenderer.boundingRect),this._primarySizeChanged=!0):e===this.rangeGraphRenderer&&(this.deferredEmit("range_graph_size_change",this.rangeGraphRenderer.sizing),this.deferredEmit("range_graph_bounding_rect_change",this.rangeGraphRenderer.boundingRect),this._rangeGraphSizeChanged=!0),this._mustRerender=!0,this._tooltipsChanged=!0,this._annotationsChanged=!0,this._mustCallGenerators=!0,this._markDirty()}set theme(e){this._theme=e,this._mustRerender=!0,this.deferredEmit("theme_change",this._theme),this._markDirty()}set exportMode(e){this._exportMode=e,e?(this._nonExportTheme=this.theme,this.theme="export"):this.theme=this._nonExportTheme,this.deferredEmit("export_mode_change",this._exportMode),this._markDirty()}set defaultLineWidth(e){this._defaultLineWidth=e,this._mustRerender=!0,this._markDirty()}set boundCalculator(e){e&&e!==this._boundsCalculator&&(e.debounceHistory?(clearTimeout(this._boundingCalculatorDebouncer),this._boundingCalculatorDebouncer=setTimeout(()=>{this._addBoundCalculatorToHistory(e)},250)):this._addBoundCalculatorToHistory(e),this._boundsCalculator=e,this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this._dataChanged=!0,this._mustCallGenerators=!0,this._markDirty())}set customBoundsSelectors(e){this._customBoundsSelectors=this._customBoundsSelectors||{};const t={};for(let{label:n,calculator:i}of e)t[n]=i,this._boundsCalculator===this._customBoundsSelectors[n]&&this._boundsCalculator!==i&&(this.boundCalculator=i);this._customBoundsSelectors=t}_addBoundCalculatorToHistory(e){this._boundsIndex++,this._boundsHistory=this._boundsHistory.slice(0,this._boundsIndex),this._boundsHistory.push(e),this.emit("bound_history_changed",this.boundHistory)}registerSeriesClick(e){this.emit("series_click",this._series[e],e)}setHighlightedSeries(e){this._highlightedSeries=e,this.deferredEmit("highlighted_series_changed",e),this._mustRerender=!0,this._markDirty()}toggleIndividualPoints(){this._showIndividualPoints=!this._showIndividualPoints,this.deferredEmit("show_individual_points_changed",this._showIndividualPoints),this._mustRerender=!0,this._markDirty()}toggleYAutoscaling(){this._autoscaleY=!this._autoscaleY,this.deferredEmit("autoscale_y_changed",this._autoscaleY),this._markDirty()}toggleExportMode(){this.exportMode=!this._exportMode}setBoundsFromSelection(e){this.boundCalculator=function({minPixelX:e,maxPixelX:t,minPixelY:n,maxPixelY:i},{elementWidth:r,elementHeight:o,selection:a,axes:s}){if(Math.abs(t-e)<1||Math.abs(i-n)<1)return;const l=e/r*(a.maxX-a.minX)+a.minX,h=t/r*(a.maxX-a.minX)+a.minX,c=[];for(let{currentBounds:e,scale:t}of s){const r=Oe({...e,scale:t});let a=(1-n/o)*(r.maxY-r.minY)+r.minY,s=(1-i/o)*(r.maxY-r.minY)+r.minY;"log"===t&&(s=Math.pow(10,s),a=Math.pow(10,a)),c.push({minX:l,maxX:h,minY:s,maxY:a})}return()=>({minX:l,maxX:h,byAxis:c})}(e,{elementWidth:this.primaryRenderer.sizing.elementWidth,elementHeight:this.primaryRenderer.sizing.elementHeight,selection:this._selection,axes:this._axes})}nextBounds(){this._boundsIndex++,this._boundsCalculator=this._boundsHistory[this._boundsIndex],this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this.deferredEmit("bound_history_changed",this.boundHistory),this._dataChanged=!0,this._markDirty()}previousBounds(){this._boundsIndex--,this._boundsCalculator=this._boundsHistory[this._boundsIndex],this.deferredEmit("bound_calculator_changed",this._boundsCalculator),this.deferredEmit("bound_history_changed",this.boundHistory),this._dataChanged=!0,this._markDirty()}setLabel({axisIndex:e,label:t}){this._axes[e].label=t,this.deferredEmit("axes_changed",[...this._axes]),this._markDirty()}toggleScale({axisIndex:e}){const t=this._axes[e].scale;this._axes[e].scale="log"===t?"linear":"log",this._dataChanged=!0,this.deferredEmit("axes_changed",[...this._axes]),this._markDirty()}recalculateTooltips(){this.primaryRenderer.recalculatePosition(),this.setTooltipMousePosition({clientX:this._tooltipClientX,clientY:this._tooltipClientY,shiftKey:this.shiftKeyPressedOnMove,tooltipAllNext:this._tooltipAllNext,tooltipStateArg:this._tooltipStateArg})}setTooltipMousePosition({clientX:e,clientY:t,shiftKey:n,mouseX:i,mouseY:r,tooltipAllNext:o,tooltipStateArg:a}){const s=this.primaryRenderer.sizing;if(!s)return;if("number"==typeof e){if(this._tooltipClientX=e,e<s.boundingRect.left||e>s.boundingRect.right)return void this.showOnlySavedTooltips()}else if("number"!=typeof r)return;if("number"==typeof t){if(this._tooltipClientY=t,t<s.boundingRect.top||t>s.boundingRect.bottom)return void this.showOnlySavedTooltips()}else if("number"!=typeof r)return;const l=i||e-s.boundingRect.left,h=r||t-s.boundingRect.top;this._tooltipState.mousePresent&&l===this._tooltipState.mouseX&&h===this._tooltipState.mouseY||(this._tooltipsChanged=!0,this._tooltipState.mousePresent=!0,this._tooltipState.mouseX=l,this._tooltipState.mouseY=h,this.shiftKeyPressedOnMove=n,this._tooltipAllNext=o,this._tooltipStateArg=a,this._markDirty())}setContextMenuMousePosition({clientX:e,clientY:t}){this._contextMenuPosition={x:e,y:t,showing:!this._contextMenuPosition.showing},this._contextMenuChanged=!0,this._markDirty()}toggleAlwaysTooltipped(e,t){if(this._alwaysTooltipped.has(e))t?this._alwaysTooltipped.clear():this._alwaysTooltipped.delete(e);else if(t)for(let e of this._series)this._alwaysTooltipped.add(e);else this._alwaysTooltipped.add(e);this._tooltipsChanged=!0,this.deferredEmit("always_tooltipped_changed",this._alwaysTooltipped),this._markDirty()}showOnlySavedTooltips(e){this._tooltipState.mousePresent&&(this._tooltipsChanged=!0,this._tooltipState.mousePresent=!1,this._tooltipStateArg=e,this._markDirty())}registerClick({clientX:e}){if(!this._listeners.series_click)return;const t=this.primaryRenderer.boundingRect,n=this.primaryRenderer.sizing;for(let i of this._series){const r=i.axis.currentBounds,o=(e-t.left)/n.elementWidth*(r.maxX-r.minX)+r.minX;this.emit("series_click",{x:o,series:i})}}toggleTooltipSaved(){const e=this._savedTooltips;this._savedTooltips=function({currentTooltips:e,savedTooltips:t}){if(!e.length)return t;const n=e[e.length-1];if(n.xDistance>20||!n.ignoreYDistanceCheck&&n.distance>20)return t;const i=t.findIndex(e=>e.x===n.x&&e.y===n.y);return-1===i?[...t,n]:t.filter((e,t)=>t!==i)}({currentTooltips:this._tooltipState.tooltips,savedTooltips:this._savedTooltips}),this._tooltipsChanged=this._savedTooltips!==e,this._markDirty()}clearSavedTooltips(){0!==this._savedTooltips.length&&(this._savedTooltips=[],this._tooltipsChanged=!0,this._markDirty())}markDragStart(){this._draggingY||(this._draggingY=!0,this.deferredEmit("dragging_y_changed",this._draggingY),this._markDirty())}finalizeDrag(e,t,n){if(!this._draggingY)return;this._draggingY=!1,this.deferredEmit("dragging_y_changed",this._draggingY);const i=t&&0!==t,r=n===this._grapherID;i&&r?(this._moveAxis(e,t),this.deferredEmit("dragging_y_finalized",{draggedSeries:e,axisIndex:t,grapherID:n})):n&&this.deferredEmit("dragging_y_finalized",{draggedSeries:e,axisIndex:t,grapherID:n}),this._markDirty()}set timingFrameCount(e){"number"==typeof e&&(this._timingBuffer=[],this._timingIndex=0,this._timingFrameCount=e)}set percentile(e){void 0!==e&&(this.deferredEmit("percentile_changed",e),""===e&&(e=100),e=parseFloat(e),!isNaN(e)&&e<=100&&e>=0&&(this._percentile=e,this._dataChanged=!0),this._markDirty())}set percentileAsymmetry(e){void 0!==e&&(this.deferredEmit("percentile_asymmetry_changed",e),""===e&&(e=0),e=parseFloat(e),!isNaN(e)&&e<=50&&e>=-50&&(this._percentileAsymmetry=e,this._dataChanged=!0),this._markDirty())}set showingOptions(e){void 0!==e&&(this._showingOptions=e,this.deferredEmit("showing_options_changed",e),this._markDirty())}toggleShowingOptions(){this.showingOptions=!this.showingOptions}toggleMaxPrecision(){this._maxPrecision=!this._maxPrecision,this.deferredEmit("max_precision_changed",this._maxPrecision),this._markDirty()}toggleShowingAnnotations(){this._showingAnnotations=!this._showingAnnotations,this.deferredEmit("showing_annotations_changed",this._showingAnnotations),this._markDirty()}toggleShowingSidebar(){this._showingSidebar=!this._showingSidebar,this.deferredEmit("showing_sidebar_changed",this._showingSidebar),this._markDirty()}setShowing(e,t){e.hidden=!t,this._series=[...this._series],e.hidden?this._hideSeries(e):this._showSeries(e),this.deferredEmit("series_changed",this._series,{skipResize:!0}),this._dataChanged=!0,this._markDirty()}set annotations(e){this._annotations=e||[],this._annotationsChanged=!0,this._markDirty()}enumToNumber(e,t,n){const i=this._enumMap[e];if("number"==typeof i)return i;const r=Object.keys(this._enumMap).length;return this._enumMap[e]=r,this._series[t.index].hasEnum=!0,n&&(this._series[t.index].hasXEnum=!0,this._hasXEnum=!0,this.deferredEmit("has_x_enum_change",this._hasXEnum),this.deferredEmit("x_enum_map_change",this._enumMap)),this.deferredEmit("enum_map_change",this._enumMap),r}triggerResize(){this._mustResize=!0,this._markDirty()}}function Ke(e,t,i=null,r=[]){if("function"==typeof i){const e=i;i=()=>e}const[a,s]=o(i);return n(()=>{const n=e=>{if("function"==typeof e){const t=e;e=()=>t}s(e)};return e.on(t,n),()=>{e.off(t,n)}},[...r,s,e]),a}function Ze(e){return Ke(e,"primary_size_change",e.primaryRenderer?e.primaryRenderer.sizing:{elementWidth:0,elementHeight:0,renderWidth:0,renderHeight:0})}function Je(e){return Ke(e,"axes_changed",e.axes)}function Qe(e){return Ke(e,"series_changed",e.series)}function et(e){return Ke(e,"highlighted_series_changed",e.highlightedSeries)}function tt(e){return it(e).length}function nt(e){return rt(e).length}function it(e){return Ke(e,"right_axes_changed",e.rightAxes)}function rt(e){return Ke(e,"left_axes_changed",e.leftAxes)}function ot(e){return Ke(e,"selection_changed",e.selection)}function at(e){return Ke(e,"axis_bounds_changed",e.axes.map(({currentBounds:e})=>e))}function st(e){return Ke(e,"autoscale_y_changed",e.autoscaleY)}function lt(e){return Ke(e,"dragging_y_changed",e.draggingY)}function ht(e){return Ke(e,"showing_options_changed",e.showingOptions)}function ct(e){return Ke(e,"max_precision_changed",e.maxPrecision)}function gt(e){return Ke(e,"showing_sidebar_changed",e.showingSidebar)}function At(e){return Ke(e,"showing_annotations_changed",e.showingAnnotations)}function dt(e){return Ke(e,"primary_size_change",e.sizing)}function pt(e){return Ke(e,"theme_change",e.theme)}class ut extends e.PureComponent{render(){const{bodyHeight:t,annotationState:n}=this.props,{annotations:i,elementWidth:r}=n,o=i.filter(e=>void 0!==e.pixelStartX&&void 0!==e.pixelWidth);return e.createElement("div",{className:"grapher-annotations"},o.map(({pixelStartX:n,pixelWidth:i,content:o,isRange:a,lineOnly:s},l)=>{const h={left:n};if(a)return e.createElement("div",{key:`range-${l}`,className:"grapher-annotation grapher-annotation-range",style:h},e.createElement("div",{className:"annotation-range-marker",style:{width:i,height:t}}));{const a=s?i:Math.max(i,1),c={};if(o){c.top=21*l,c.position="absolute";const e=5.5*(o||"").length;r>0&&r-n<e+10?(c.left=-e-5,c.textAlign="right"):c.left=a+5}return e.createElement("div",{key:`point-${l}`,className:"grapher-annotation grapher-annotation-point",style:h},e.createElement("div",{className:"annotation-marker",style:{width:a,height:t}}),o&&!s&&e.createElement("div",{className:"annotation-text",style:c},o))}}))}}ut.propTypes={annotationState:c().shape({annotations:c().arrayOf(c().shape({pixelStartX:c().number,pixelWidth:c().number,content:c().string,isRange:c().bool,lineOnly:c().bool})).isRequired,elementWidth:c().number.isRequired}),bodyHeight:c().number};const mt=e.memo(ft);function ft({stateController:t,draggablePoints:n,onPointDrag:i,onDraggablePointsDoubleClick:r}){const o=at(t)[0],a=dt(t);if(!a)return null;const s=r&&(e=>{const t=(e.clientX-a.boundingRect.left)/a.elementWidth,n=1-(e.clientY-a.boundingRect.top)/a.elementHeight;r(e,{x:t*(o.maxX-o.minX)+o.minX,y:n*(o.maxY-o.minY)+o.minY})});return e.createElement("div",{className:"grapher-draggable-points",onDoubleClick:s},e.createElement("svg",{width:a.elementWidth,height:a.elementHeight},n.map((t,n)=>{const r=(t.x-o.minX)/(o.maxX-o.minX),s=1-(t.y-o.minY)/(o.maxY-o.minY);if(r<0||r>1||s<0||s>1)return null;const l=r*a.elementWidth,h=s*a.elementHeight,c=t.radius||5,g=t.fillColor||D.LINE_COLORS[0],A=t.strokeColor||"white",d=t.strokeWidth||1,p=t.onClick&&(e=>{t.onClick(e,t)}),u=t.onDoubleClick&&(e=>{e.stopPropagation(),t.onDoubleClick(e,t)});return e.createElement("circle",{key:n,cx:l,cy:h,r:c,fill:g,stroke:A,strokeWidth:d,onMouseDown:e=>{if(e.stopPropagation(),!i)return;const r=l-e.clientX,s=h-e.clientY,c=e=>{const l=(e.clientX+r)/a.elementWidth,h=1-(e.clientY+s)/a.elementHeight;i({index:n,point:t,x:l*(o.maxX-o.minX)+o.minX,y:h*(o.maxY-o.minY)+o.minY},e)},g=()=>{window.removeEventListener("mousemove",c),window.removeEventListener("mouseup",g)};window.addEventListener("mousemove",c),window.addEventListener("mouseup",g)},onClick:p,onDoubleClick:u})})))}ft.propTypes={stateController:c().instanceOf(je).isRequired,draggablePoints:k.DraggablePoints.isRequired,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func};const Ct=e.memo(xt);function xt({stateController:t,verticalLines:n,isRangeGraph:i,bounds:r,elementWidth:o,elementHeight:a}){r=r||at(t)[0];const s=dt(t);if(!s)return null;const l=n.filter(e=>!(i&&!e.onRangeGraph||e.onRangeGraphOnly&&!i));return 0===l.length?null:e.createElement("div",{className:"grapher-vertical-lines"},e.createElement("svg",{width:o||s.elementWidth,height:a||s.elementHeight},l.map((t,n)=>{i&&"object"==typeof t.onRangeGraph&&(t={...t,...t.onRangeGraph});const l=(t.x-r.minX)/(r.maxX-r.minX);if(l<0||l>1)return null;const h=l*(o||s.elementWidth);if("number"==typeof t.minPixelX&&h<t.minPixelX)return null;if("number"==typeof t.maxPixelX&&h>t.maxPixelX)return null;const c={stroke:t.color,strokeWidth:t.width,...t.style||{}},g={fill:t.color,...t.markerStyle||{}},A={fontSize:"12px",fill:t.color,stroke:"none",textAnchor:"middle",dominantBaseline:"hanging",...t.textStyle||{}};let d=0;"number"==typeof t.lineTop?d=t.lineTop:t.text&&(d=18);let p=5;return"number"==typeof t.textTop&&(p=t.textTop),e.createElement(e.Fragment,{key:n},e.createElement("line",{x1:h,y1:d,x2:h,y2:a||s.elementHeight,style:c}),t.markTop&&e.createElement("polygon",{points:`${h-3},0 ${h+3},0 ${h},3`,style:g}),t.text&&e.createElement("text",{x:h,y:p,style:A},t.text))})))}function bt(){return bt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},bt.apply(null,arguments)}xt.propTypes={stateController:c().instanceOf(je).isRequired,verticalLines:k.VerticalLines.isRequired,isRangeGraph:c().bool,bounds:c().object,elementWidth:c().number,elementHeight:c().number};const yt=e.memo(_t);function _t({stateController:i,webgl:r,bodyHeight:a,boundsSelectionEnabled:s,showTooltips:l,showContextMenu:h=!0,tooltipOptions:c,checkIntersection:g,draggablePoints:A,onPointDrag:d,onDraggablePointsDoubleClick:p,verticalLines:u,clockStyle:m,timeZone:f,onPointClick:C}){const x=t(e=>{if(i.primaryRenderer&&i.primaryRenderer.dispose(),!e)return;const t=new de({stateController:i,canvasElement:e,webgl:r,checkIntersection:g});i.primaryRenderer=t,t.resize()},[r,i]),[b,y]=o({showing:!1,start:{},style:{}}),_=st(i),B=Je(i).length,v=function(e){return Ke(e,"tooltip_state_changed",e.tooltipState)}(i),w=ct(i),E=At(i),k=function(e){return Ke(e,"annotations_changed",e.annotationState)}(i),S=function(e){return Ke(e,"context_menu_position_changed",e.contextMenuState)}(i);return n(()=>{const e=()=>{l&&i.recalculateTooltips()},t=e=>{l&&i.setTooltipMousePosition({clientX:e.clientX,clientY:e.clientY,shiftKey:e.shiftKey})},n=e=>e.touches?.[0]||e.changedTouches?.[0],r=e=>{if(!l)return;const t=n(e);t&&(i.setTooltipMousePosition({clientX:t.clientX,clientY:t.clientY}),e.cancelable&&e.target.closest(".graph-body")&&e.preventDefault())},o=e=>{if(!l)return;const t=n(e);t&&(i.setTooltipMousePosition({clientX:t.clientX,clientY:t.clientY}),e.cancelable&&e.target.closest(".graph-body")&&e.preventDefault())},a=()=>{i.showOnlySavedTooltips()};return window.addEventListener("scroll",e,{passive:!0}),window.addEventListener("mousemove",t,{passive:!0}),window.addEventListener("touchstart",r,{passive:!1}),window.addEventListener("touchmove",o,{passive:!1}),window.addEventListener("touchend",a,{passive:!0}),window.addEventListener("touchcancel",a,{passive:!0}),()=>{window.removeEventListener("scroll",e),window.removeEventListener("mousemove",t),window.removeEventListener("touchstart",r),window.removeEventListener("touchmove",o),window.removeEventListener("touchend",a),window.removeEventListener("touchcancel",a)}},[]),e.createElement("div",{className:"graph-body graph-body-primary",onMouseMove:e=>{if(b.showing){const t=i.primaryRenderer.boundingRect,n=e.clientX-t.left,r=e.clientY-t.top;y(({start:e})=>({showing:!0,start:e,style:{left:Math.min(n,e.x),top:_?0:Math.min(r,e.y),width:Math.abs(n-e.x),height:_?t.height:Math.abs(r-e.y)}}))}},onMouseLeave:()=>{i.setContextMenuMousePosition({showing:!1})},onMouseDown:e=>{if(!s)return;let t=e.target;for(let e=0;e<10&&t;e++){if(t.classList.contains("grapher-tooltip"))return;t=t.parentNode}const n=i.primaryRenderer.boundingRect,r={x:e.clientX-n.left,y:e.clientY-n.top};y({showing:!0,start:r,style:{left:r.x,top:r.y,width:0,height:0}});const o=e=>{if(window.removeEventListener("mouseup",o),!s)return;const t=e.clientX-n.left,a=e.clientY-n.top;i.setBoundsFromSelection({minPixelX:Math.min(t,r.x),maxPixelX:Math.max(t,r.x),minPixelY:Math.min(a,r.y),maxPixelY:Math.max(a,r.y)}),y({showing:!1,style:{}})};window.addEventListener("mouseup",o)},onClick:e=>{if(i.registerClick({clientX:e.clientX,clientY:e.clientY}),c&&c.savingDisabled)i.clearSavedTooltips();else if(e.target.closest(".grapher-context-menu")||i.setContextMenuMousePosition({showing:!1}),window.getSelection&&"Range"===window.getSelection().type||i.toggleTooltipSaved(),C){const t={},n=i.series;for(let e=0;e<n.length;e++){const r=n[e],o=i.sizing,a=r.axis.currentBounds,s=i.tooltipState.mouseX/o.elementWidth*(a.maxX-a.minX)+a.minX;let l=r.inDataSpace;r.ignoreDiscontinuities&&(l=l.filter(e=>"number"==typeof e[1]));const h=l[Me(l,s,{returnIndex:!0})];t[r.name]=h[0]}C(e,t)}},onDoubleClick:()=>{i.clearSavedTooltips()},onContextMenu:e=>{e.preventDefault(),!1!==h&&i.setContextMenuMousePosition({clientX:e.clientX,clientY:e.clientY,showing:!0})},style:"number"==typeof a?{height:a}:void 0},e.createElement("canvas",{ref:x}),l&&e.createElement(we,bt({axisCount:B,maxPrecision:w,clockStyle:m,timeZone:f},c||{},v)),S.showing&&e.createElement(Ee,{contextMenu:S}),E&&e.createElement(ut,{bodyHeight:a||i?.primaryRenderer?.boundingRect?.height,annotationState:k}),u&&e.createElement(Ct,{stateController:i,verticalLines:u}),A&&e.createElement(mt,{stateController:i,draggablePoints:A,onPointDrag:d,onDraggablePointsDoubleClick:p}),s&&b.showing&&e.createElement("div",{className:"bounds-selection",style:b.style}))}_t.propTypes={stateController:c().instanceOf(je).isRequired,webgl:c().bool,checkIntersection:c().bool,bodyHeight:c().number,boundsSelectionEnabled:c().bool.isRequired,showTooltips:c().bool.isRequired,tooltipOptions:k.TooltipOptions,verticalLines:k.VerticalLines,draggablePoints:k.DraggablePoints,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func,onPointClick:c().func,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string};var Bt=l(72),vt=l.n(Bt),wt=l(825),Et=l.n(wt),kt=l(659),St=l.n(kt),Dt=l(56),Tt=l.n(Dt),zt=l(540),Rt=l.n(zt),Xt=l(113),Yt=l.n(Xt),Pt=l(557),Mt={};function Ft(e,{scale:t,min:n,max:i,inverted:r,totalSize:o,precision:a,formatter:s,dates:l,justTime:h,justDate:c,formatOptions:g={}},A={}){let d=e;"log"===t&&(d=10**e);let p=(e-n)/(i-n);r&&(p=1-p);let u=p*o;return isNaN(u)&&(u=0),{pixelValue:u,trueValue:d,label:s(d,{...g,precision:a,log:"log"===t,dates:l,justTime:h,justDate:c}),size:"major",...A}}function Lt(e,{scale:t,min:n,max:i,inverted:r,totalSize:o,precision:a,formatter:s,dates:l,justTime:h,justDate:c,formatOptions:g={}},A={}){let d=e/o;r&&(d=1-d);let p=d*(i-n)+n;return"log"===t&&(p=Math.pow(10,p)),{pixelValue:e,trueValue:p,label:s(p,{...g,precision:a,log:"log"===t,dates:l,justTime:h,justDate:c}),size:"major",...A}}function Ot(e,t){if(e<=1)return 1;if(1===t)return Math.round(e);if(e>=t)return Math.round(e/t)*t;let n;if(24===t)n=[1,2,6,12,24];else{if(60!==t)throw new Error("Invalid divisor");n=[1,2,5,10,15,30,60]}let i=1/0,r=1;for(let t=0;t<n.length;t++){const o=Math.abs(n[t]-e);o<i&&(r=n[t],i=o)}return r}function It(e,t,n){const i=e/t;return i<6e4&&(!n||"second"===n)?{amount:Ot(i/1e3,60),unit:"s"}:i<36e5&&(!n||"minute"===n)?{amount:Ot(i/6e4,60),unit:"m"}:i<864e5&&(!n||"hour"===n)?{amount:Ot(i/36e5,24),unit:"h"}:"day"===n||i<2592e6&&!n?{amount:Ot(i/864e5,1),unit:"d"}:i>2592e6&&(!n||"month"===n)?{amount:Ot(i/30*24*60*60*1e3,1),unit:"month"}:"year"===n?{amount:Ot(i/365*24*60*60*1e3,1),unit:"year"}:{unit:"m",amount:60}}function $t(e){return e.dates?function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g}){const A=i+2*r,d=[],p={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:h,formatOptions:g,dates:!0},{amount:u,unit:m}=It(t-e,o/A,g.unitOverride),f="month"===m;a||d.push(Lt(0,{...p,justDate:f},{position:"first"}));let C=new Date(e);"h"===m?C.setMinutes(0,0,0):"m"===m?C.setSeconds(0,0):"s"===m?C.setMilliseconds(0):"month"===m?(C=Ce(C,g.timeZone),C.setDate(1)):"d"===m&&(C=Ce(C,g.timeZone));let x=h(C,{...g,...p,justDate:!0});for(;C<t;){let e=864e5;"h"===m?e=60*(u-C.getHours()%u)*60*1e3:"m"===m?e=60*(u-C.getMinutes()%u)*1e3:"s"===m?e=1e3*(u-C.getSeconds()%u):"month"===m?(e=0,C=11===C.getMonth()?new Date(C.getFullYear()+1,0,1):new Date(C.getFullYear(),C.getMonth()+1,1)):"year"===m&&(C=new Date(C.getFullYear()+1,0,0)),C=new Date(C.valueOf()+e);const t=h(C,{...g,...p,justDate:!0})===x,n=Ft(C,{...p,justTime:t,justDate:f});d.length&&n.pixelValue-d[d.length-1].pixelValue<i+(r||0)||n.pixelValue+i/2>=o||(d.push(n),x=h(C,{...g,...p,justDate:!0}))}const b=x===h(t,{...g,...p,justDate:!0});return!s&&d[d.length-1].pixelValue+i<o&&d.push(Lt(o,{...p,justTime:b,justDate:f},{position:"last"})),d.filter(({pixelValue:e})=>e<=o&&e>=0)}(e):function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,scale:a="linear",formatter:s,inverted:l=!1,formatOptions:h}){const c=i+2*r,g=[],A={scale:a,min:e,max:t,inverted:l,totalSize:o,precision:n,formatter:s,formatOptions:h,dates:!1},d=function(e,t){const n=e/t,i=1-Math.log10(Math.abs(n)),r=i-Math.floor(i)>.5?2:1,o=10**Math.floor(i)*r;return Math.round(n*o)/o}(t-e,Math.floor((o-2*i)/c));if(d>0)for(let n=function(e,t){return Math.round(e/t)*t}(e,d);n<t;n+=d)g.push(Ft(n,A));return g.length&&l&&g[g.length-1].pixelValue>r&&g.push(Lt(i/2,A)),g.filter(({pixelValue:e})=>e<=o&&e>=0)}(e)}Mt.styleTagTransform=Yt(),Mt.setAttributes=Tt(),Mt.insert=St().bind(null,"head"),Mt.domAPI=Et(),Mt.insertStyleElement=Rt(),vt()(Pt.A,Mt),Pt.A&&Pt.A.locals&&Pt.A.locals;const Gt=e.memo(Wt);function Wt({showAxes:t,showGrid:n,stateController:i,bigLabels:r,xTickUnit:o,clockStyle:a,timeZone:s,integersOnly:l,formatXAxisLabel:h}){if(!t&&!n)return null;const{elementWidth:c,elementHeight:g}=Ze(i),{minX:A,maxX:d,dates:p}=ot(i),u=function(e){return Ke(e,"has_x_enum_change",e.hasXEnum)}(i),m=function(e){return Ke(e,"enum_map_change",e.enumMap)}(i);let f;f=p?function(e,t){e=new Date(e);const n=(t=new Date(t)).valueOf()-e.valueOf();return n<3e3?"ms":n<6e5?"s":"m"}(A,d):pe(d-A);let C=null;if(u){C={};for(const[e,t]of Object.entries(m))C[t]=e}const x={unitOverride:o,clockStyle:a,timeZone:s,integersOnly:l,inverseEnumMap:C,formatter:h},b=xe(A,{...x,dates:p,precision:f}).toString(),y=xe(d,{...x,dates:p,precision:f}).toString();let _=Math.max(b.length,y.length);r&&(_*=2);let B=null,v=null,w=null;p?(B=function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g={}}){const A=i+2*r,d=[],p={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:h,formatOptions:g,dates:!0},u=Math.floor(o/A);let m,f;const C=(t-e)/36e5;C<=8*u?(m="h",f=Math.max(1,Math.ceil(C/u)),f<=6||(f=f<=12?12:f<=24?24:24*Math.ceil(f/24))):(m="h",f=24),a||d.push(Lt(0,{...p,justTime:!0},{position:"first"}));let x=new Date(e);if("h"===m)if(24===f)x=Ce(x,g.timeZone);else{const e=g.timeZone?fe(g.timeZone,x):0,t=fe("local",x);if(null!==e&&null!==t){const n=new Date(x.valueOf()+e-t);if(n.setMinutes(0,0,0),12===f){const e=n.getHours()<12?0:12;n.setHours(e)}else{const e=n.getHours(),t=Math.floor(e/f)*f;n.setHours(t)}x=new Date(n.valueOf()-e+t)}else if(x.setMinutes(0,0,0),12===f){const e=x.getHours()<12?0:12;x.setHours(e)}else{const e=x.getHours(),t=Math.floor(e/f)*f;x.setHours(t)}}else if("m"===m){x.setSeconds(0,0);const e=x.getMinutes(),t=Math.floor(e/f)*f;x.setMinutes(t)}else if("s"===m){x.setMilliseconds(0);const e=x.getSeconds(),t=Math.floor(e/f)*f;x.setSeconds(t)}for(;x<e;)"h"===m?x=new Date(x.valueOf()+60*f*60*1e3):"m"===m?x=new Date(x.valueOf()+60*f*1e3):"s"===m&&(x=new Date(x.valueOf()+1e3*f));for(;x<t;){const e=Ft(x,{...p,justTime:!0}),t=o-(i+r);if(d.length&&e.pixelValue-d[d.length-1].pixelValue<i+r);else{if(!(e.pixelValue+i<t))break;d.push(e)}if("h"===m)x=new Date(x.valueOf()+60*f*60*1e3);else if("m"===m)x=new Date(x.valueOf()+60*f*1e3);else{if("s"!==m)break;x=new Date(x.valueOf()+1e3*f)}}if(!s){const e=Ft(t,{...p,justTime:!0},{position:"last"});0===d.length||e.pixelValue-d[d.length-1].pixelValue>=i+r/2?d.push(e):d[d.length-1]=e}return d.filter(({pixelValue:e})=>e<=o&&e>=0)}({min:A,max:d,totalSize:c,precision:f,expectedLabelSize:_,labelPadding:24,formatter:h||xe,formatOptions:x}),v=function({min:e,max:t,precision:n,expectedLabelSize:i,labelPadding:r,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:h,inverted:c=!1,formatOptions:g={}}){const A=i+2*r,d=[],p=new Date(e).getFullYear()!==new Date(t).getFullYear(),u={scale:l,min:e,max:t,inverted:c,totalSize:o,precision:n,formatter:(e,t)=>{const n=g.timeZone;return h(e,{...t,dates:!0,justMonthAndDay:!p,justDate:p,timeZone:n})},formatOptions:g,dates:!0},m=t-e,f=m/36e5;let{amount:C,unit:x}=It(m,o/A,g.unitOverride);if(("h"===x||"m"===x||"s"===x)&&f>=48)x="d",C=Math.max(1,Math.ceil(f/24/Math.floor(o/A)));else if(("h"===x||"m"===x||"s"===x)&&f<48){const n=Ft(e,{...u,justDate:!0},{position:"first"}),a=Ft(t,{...u,justDate:!0},{position:"last"}),s=[n];return a.pixelValue-n.pixelValue>=i+r&&s.push(a),s.filter(({pixelValue:e})=>e<=o&&e>=0)}a||d.push(Lt(0,{...u,justDate:!0},{position:"first"}));let b=new Date(e);for("month"===x?(b=Ce(b,g.timeZone),b.setDate(1)):"d"===x&&(b=Ce(b,g.timeZone));b<t;){let e=864e5;"month"===x?(e=0,b=11===b.getMonth()?new Date(b.getFullYear()+1,0,1):new Date(b.getFullYear(),b.getMonth()+1,1)):"year"===x?(b=new Date(b.getFullYear()+1,0,1),e=0):"d"===x&&(e=24*C*60*60*1e3),e>0&&(b=new Date(b.valueOf()+e));const t=Ft(b,{...u,justDate:!0}),n=o-(i+r);if(!(d.length&&t.pixelValue-d[d.length-1].pixelValue<i+(r||0))){if(!(t.pixelValue+i<n))break;d.push(t)}}if(!s){const e=Ft(t,{...u,justDate:!0},{position:"last"});0===d.length||e.pixelValue-d[d.length-1].pixelValue>=i+r/2?d.push(e):d[d.length-1]=e}return 0===d.length&&f>=48&&d.push(Lt(0,{...u,justDate:!0},{position:"first"})),d.filter(({pixelValue:e})=>e<=o&&e>=0)}({min:A,max:d,totalSize:c,precision:f,expectedLabelSize:2*_,labelPadding:45,formatter:h||xe,formatOptions:x})):w=$t({min:A,max:d,totalSize:c,precision:f,dates:p,formatter:h||xe,expectedLabelSize:_,labelPadding:30,formatOptions:x});const E=p?30:20;return e.createElement("svg",{className:"axis x-axis"+(p?" x-axis-dual":""),style:t?void 0:{marginBottom:-20}},t&&e.createElement("path",{d:`M-1,0 H${c}`,className:"axis-line"}),p&&B&&B.map(({pixelValue:i,label:o,size:a,position:s,skipGrid:l},h)=>{const c=1===B.length;if(isNaN(i))return null;const A=["axis-item",`axis-item-${a}`,`axis-item-${s}`];return r&&A.push("axis-item-big-labels"),e.createElement("g",{key:`time-${h}`,className:A.join(" ")},t&&e.createElement("path",{d:`M${i},1 v12`,className:"axis-tick"}),n&&!l&&e.createElement("path",{d:`M${i},0 v-${g}`}),t&&e.createElement("text",{x:"last"!==s||c?i+3:i-3,y:12,textAnchor:"last"!==s||c?"start":"end",className:"x-axis-text x-axis-time-text"},o))}),p&&v&&v.map(({pixelValue:n,label:i,size:o,position:a,trueValue:l},h)=>{if(isNaN(n))return null;const c=["axis-item",`axis-item-${o}`,`axis-item-${a}`];let g;return r&&c.push("axis-item-big-labels"),s&&0===h&&(g="utc"===s.toLowerCase()?"UTC":s),e.createElement("g",{key:`date-${h}`,className:c.join(" ")},t&&e.createElement("text",{x:"last"===a?n-3:n+3,y:25,textAnchor:"last"===a?"end":"start",className:"x-axis-text x-axis-date-text"},e.createElement("tspan",{className:"x-axis-date-label"},i),g&&e.createElement("tspan",{className:"x-axis-timezone-label"}," ","(",g,")")))}),!p&&w&&w.map(({pixelValue:i,label:o,size:a,position:s,skipGrid:l},h)=>{if(isNaN(i))return null;const c=["axis-item",`axis-item-${a}`,`axis-item-${s}`];return r&&c.push("axis-item-big-labels"),e.createElement("g",{key:h,className:c.join(" ")},t&&e.createElement("path",{d:`M${i},1 v12`,className:"axis-tick"}),n&&!l&&e.createElement("path",{d:`M${i},0 v-${g}`}),t&&e.createElement("text",{x:"last"===s?i-3:i+3,y:E-5,textAnchor:"last"===s?"end":"start",className:"x-axis-text"},o))}))}Wt.propTypes={stateController:c().instanceOf(je).isRequired,showAxes:c().bool.isRequired,showGrid:c().bool.isRequired,bigLabels:c().bool,xTickUnit:c().oneOf(["year"]),clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,integersOnly:c().bool,formatXAxisLabel:c().func};const Nt=e.memo(Ut);function Ut({stateController:t,showAxes:n,showGrid:i,showSeriesKey:r,axis:a,sideIndex:s,bodyHeight:l,theme:h,grapherID:c,dragPositionYOffset:g=0,bigLabels:A,showAxisColors:d}){if(!n&&!i)return null;const{side:p,scale:u,axisIndex:m,label:f}=Je(t)[a.axisIndex],{elementWidth:C,elementHeight:x}=Ze(t);let{minY:b,maxY:y}=at(t)[m];const _=Oe({minY:b,maxY:y,scale:u});b=_.minY,y=_.maxY;const B=$t({min:b,max:y,totalSize:x,scale:u,precision:pe(y-b),formatter:be,inverted:!0,expectedLabelSize:A?20:10,labelPadding:30});let v=5;"log"===u&&(v=2);const w=et(t),[E,k]=o(null),[S,T]=o({dx:0,dy:0}),z="day"===h?1:.5,R="day"===h?.8:.3;return e.createElement("svg",{className:`axis y-axis y-axis-${p}`,"data-axis-index":m,"data-grapher-id":c,style:{width:ye,marginLeft:n?void 0:-32,height:"number"==typeof l?l:void 0}},n&&d&&a.series.map((t,n)=>{const i=x/a.series.length;return e.createElement("rect",{x:"left"===p?0:2,y:n*i,width:30,height:i,key:t.index,fill:(0,D.default)(t.color,t.index,t.multigrapherSeriesIndex),opacity:t.index===w?z:R,"data-element-height":x,"data-series-length":a.series.length})}),n&&e.createElement("path",{d:`M${"left"===p?31:1},3 V${x}`,className:"axis-line"}),B.map(({pixelValue:t,label:r,size:o,skipGrid:a},l)=>{const h="left"===p?(s+1)*ye:-s*ye,c=("left"===p?1:-1)*(C+1),g=["axis-item",`axis-item-${o}`];return A&&g.push("axis-item-big-labels"),e.createElement("g",{key:l,className:g.join(" ")},i&&!a&&e.createElement("path",{d:`M${h},${t} h${c}`}),i&&!a&&s>0&&e.createElement("path",{d:`M${"left"===p?ye:0},${t} h${("left"===p?1:-1)*s*ye}`,strokeDasharray:"2,2"}),n&&e.createElement("text",{x:"left"===p?ye-v:v,y:t},r))}),r&&n&&a.series.map((n,i)=>{let r=18+14*(i%2-1),o=-14*Math.ceil(a.series.length/2)+14*Math.floor(i/2);return n===E&&(r+=S.dx,o+=S.dy-g),e.createElement("rect",{className:"series-color-box",onMouseDown:e=>((e,n)=>{let i=e.clientX,r=e.clientY;"left"===p&&(i+=ye),"right"===p&&(i-=ye),T({dx:0,dy:0});const o=e=>{T({dx:e.clientX-i,dy:e.clientY-r})},a=e=>{window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",a);let i=e.target;for(;i&&!(i.dataset||{}).axisIndex;)i=i.parentNode;k(null),t.finalizeDrag(n,i&&(i.dataset||{}).axisIndex,i&&(i.dataset||{}).grapherId)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",a),k(n),t.markDragStart()})(e,n),x:r,y:o,width:10,height:10,key:n.index,fill:(0,D.default)(n.color,n.index,n.multigrapherSeriesIndex),onMouseOver:()=>t.setHighlightedSeries(n.index),onMouseOut:()=>t.setHighlightedSeries(null)})}),n&&!!f&&e.createElement("text",{className:"y-axis-label"+(A?" y-axis-big-label":""),x:"left"===p?10:22,y:x/2+("left"===p?-1:1)*(m+1)*(A?20:0),transform:`rotate(${"left"===p?-90:90}, ${"left"===p?10:22}, ${x/2})`},f))}Ut.propTypes={stateController:c().instanceOf(je),showAxes:c().bool.isRequired,showGrid:c().bool.isRequired,showAxisColors:c().bool.isRequired,showSeriesKey:c().bool.isRequired,axis:k.Axis.isRequired,sideIndex:c().number.isRequired,bodyHeight:c().number,theme:c().string,grapherID:c().string,dragPositionYOffset:c().number,bigLabels:c().bool};const qt=e.memo(Vt);function Ht({windX:t,windY:n}){const i=180*(-Math.atan2(n,t)+Math.PI/2)/Math.PI;return e.createElement("g",{transform:`rotate(${i})`},e.createElement("line",{x1:0,y1:-4,x2:0,y2:4,stroke:"currentColor",strokeWidth:1.5}),e.createElement("path",{d:`M${-8/3},2 L0,4 L${8/3},2`,fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function Vt({stateController:t}){const{elementWidth:n}=Ze(t),{minX:i,maxX:r}=ot(t),o=Qe(t).filter(e=>e.windDirections&&e.windDirections.length>0&&!e.hidden);if(0===o.length)return null;let a=1/0,s=-1/0;for(const e of o){const{windData:t}=e;if(t)for(const e of t){if(!e)continue;const t=Math.sqrt(e.x*e.x+e.y*e.y);t<a&&(a=t),t>s&&(s=t)}}const l=s-a||1,h=[];let c=-30;for(const t of o){const{inDataSpace:o,windDirections:s,windData:g,windComp:A}=t;if(!o||!s)continue;const d=A||Ht;for(let A=0;A<o.length;A++){const[p]=o[A],u=s[A];if(null===u)continue;let m=p instanceof Date?p.valueOf():p,f=i instanceof Date?i.valueOf():i,C=r instanceof Date?r.valueOf():r;if(m<f||m>C)continue;const x=(m-f)/(C-f)*n;if(x-c<30)continue;c=x;const b=g?g[A]:null,y=b?b.x:Math.cos(u),_=b?b.y:Math.sin(u),B=Math.sqrt(y*y+_*_),v=(B-a)/l;h.push(e.createElement("g",{key:`${t.name||A}-${A}`,transform:`translate(${x}, 10)`},e.createElement(d,{windX:y,windY:_,speed:B,speedPercentile:v})))}}return 0===h.length?null:e.createElement("svg",{className:"wind-arrows",style:{height:20,width:n,display:"block"}},h)}Vt.propTypes={stateController:c().instanceOf(je).isRequired};const jt=e.memo(Kt);function Kt({selected:t,disabled:n,className:i,onClick:r,children:o,description:a}){const s=["range-button"];return t&&s.push("range-button-selected"),n&&s.push("range-button-disabled"),i&&s.push(i),a&&s.push("option-tooltip"),e.createElement("div",{className:s.join(" "),onClick:r&&(e=>n||r(e))},o,a&&e.createElement("div",{className:"option-tooltip-text"},a))}Kt.propTypes={selected:c().bool.isRequired,onClick:c().func,children:c().node.isRequired,disabled:c().bool,className:c().string,description:c().string};const Zt=e.memo(Jt);function Jt({stateController:t,currentBoundCalculator:n,boundCalculator:i,children:r,disabled:o}){return e.createElement(jt,{selected:n===i,onClick:()=>t.boundCalculator=i,disabled:o},r)}Jt.propTypes={stateController:c().instanceOf(je).isRequired,boundCalculator:c().func.isRequired,currentBoundCalculator:c().func.isRequired,children:c().node.isRequired,disabled:c().bool};const Qt=e.memo(en);function en({stateController:t}){const n=function(e){return Ke(e,"percentile_changed",e.percentile)}(t),i=function(e){return Ke(e,"percentile_asymmetry_changed",e.percentileAsymmetry)}(t),[r,a]=o(!1);return[r?e.createElement(jt,{key:"asymmetry button",className:"percentile-button",selected:!0,description:"Percentile asymmetry"},e.createElement("input",{onClick:e=>e.stopPropagation(),value:i,onChange:e=>t.percentileAsymmetry=e.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:-50,max:50}),e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z"})))):null,e.createElement(jt,{key:"main-button",className:"percentile-button",selected:r||100!==parseFloat(n),onClick:()=>a(!r),description:"Edit percentile"},r&&e.createElement("div",null,e.createElement("input",{onClick:e=>e.stopPropagation(),autoFocus:!0,value:n,onChange:e=>t.percentile=e.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:0,max:100})),e.createElement("div",{className:"icon-container icon-container-narrow"},e.createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},e.createElement("path",{fill:"currentColor",d:"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"}))))]}en.propTypes={stateController:c().instanceOf(je).isRequired};const tn=e.memo(nn);function nn({stateController:t,sidebarEnabled:n}){const i=function(e){return Ke(e,"show_individual_points_changed",e.showIndividualPoints)}(t),r=st(t),o=ct(t),a=gt(t),s=At(t),l=pt(t);return e.createElement("div",{className:"options-bar"},n&&e.createElement(jt,{selected:a,onClick:()=>t.toggleShowingSidebar(),description:"Show sidebar"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"})))),e.createElement(jt,{selected:"export"===l,onClick:()=>t.toggleExportMode(),description:"Export mode"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"})))),e.createElement(jt,{selected:s,onClick:()=>t.toggleShowingAnnotations(),description:"Show annotations"},e.createElement("div",{className:"icon-container icon-container-448"},e.createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},e.createElement("path",{fill:"currentColor",d:"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"})))),e.createElement(Qt,{stateController:t}),e.createElement(jt,{selected:o,onClick:()=>t.toggleMaxPrecision(),description:"Max precision"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"})))),e.createElement(jt,{selected:r,onClick:()=>t.toggleYAutoscaling(),description:"Autoscale y axis"},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"})))),e.createElement(jt,{selected:i,onClick:()=>t.toggleIndividualPoints(),description:"Show individual points"},e.createElement("div",{className:"icon-container icon-container-narrow"},e.createElement("svg",{focusable:"false",viewBox:"0 0 192 512"},e.createElement("path",{fill:"currentColor",d:"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"})))))}nn.propTypes={stateController:c().instanceOf(je).isRequired,sidebarEnabled:c().bool};const rn=e.memo(on);function on({stateController:t,customBoundsSelectors:n,customBoundsSelectorsOnly:i,sidebarEnabled:r}){const o=tt(t),a=nt(t),s=ht(t);let l=ye*o;o>0&&(l+=5);let h=ye*a;a>0&&(h+=5);const{dates:c}=function(e){return Ke(e,"global_bounds_changed",e.globalBounds)}(t),g=function(e){return Ke(e,"bound_calculator_changed",e.boundCalculator)}(t),{hasPreviousBounds:A,hasNextBounds:d}=function(e){return Ke(e,"bound_history_changed",e.boundHistory)}(t),p=new Set(n.map(({label:e})=>e));return e.createElement("div",{className:"range-selection"+(c?"":" range-not-dates"),style:{marginRight:l,marginLeft:h}},e.createElement("div",{className:"range-buttons"},s&&e.createElement(tn,{stateController:t,sidebarEnabled:r}),e.createElement(jt,{className:"showing-options-button",selected:s,onClick:()=>t.toggleShowingOptions(),description:"Show additional options"},e.createElement("div",{className:"icon-container icon-container-square"},e.createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},e.createElement("path",{fill:"currentColor",d:"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"})))),e.createElement(jt,{className:"range-selection-history",selected:!1,onClick:()=>t.previousBounds(),disabled:!A},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"})))),e.createElement(jt,{className:"range-selection-history",selected:!1,onClick:()=>t.nextBounds(),disabled:!d},e.createElement("div",{className:"icon-container"},e.createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},e.createElement("path",{fill:"currentColor",d:"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"})))),n.map(({label:n,calculator:i,datesOnly:r},o)=>e.createElement(Zt,{key:o,stateController:t,currentBoundCalculator:g,boundCalculator:i,disabled:r&&!c},n)),!p.has("1m")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastMinute,disabled:!c},"1m"),!p.has("10m")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.last10Minutes,disabled:!c},"10m"),!p.has("1h")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastHour,disabled:!c},"1h"),!p.has("1d")&&!i&&e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.lastDay,disabled:!c},"1d"),e.createElement(Zt,{stateController:t,currentBoundCalculator:g,boundCalculator:Ue.all,disabled:!1},"All")))}on.propTypes={stateController:c().instanceOf(je).isRequired,customBoundsSelectors:k.CustomBoundsSelectors.isRequired,customBoundsSelectorsOnly:c().bool,sidebarEnabled:c().bool};class an extends e.PureComponent{constructor(e){super(e),this.state={elementWidth:0,elementHeight:0,selectionBounds:{minX:0,maxX:0},globalBounds:{minX:0,maxX:0}},this.onMouseMove=this.onMouseMove.bind(this),this.stopDragging=this.stopDragging.bind(this),this.startScroll=this.startScroll.bind(this),this.startLeftDrag=this.startLeftDrag.bind(this),this.startRightDrag=this.startRightDrag.bind(this)}getClientX(e){return e&&e.touches&&e.touches[0]?e.touches[0].clientX:e&&e.changedTouches&&e.changedTouches[0]?e.changedTouches[0].clientX:e.clientX}componentDidMount(){this._renderer=new de({stateController:this.props.stateController,canvasElement:this.el,webgl:this.props.webgl,checkIntersection:this.props.checkIntersection}),this.props.stateController.rangeGraphRenderer=this._renderer,this._renderer.on("size_changed",e=>{this.setState(e)}),this.setState({selectionBounds:this.props.stateController._selection,globalBounds:this.props.stateController._globalBounds}),this.props.stateController.on("selection_changed",e=>{this.setState({selectionBounds:e})}),this.props.stateController.on("global_bounds_changed",e=>{this.setState({globalBounds:e})})}componentDidUpdate(e){e.draggingY!==this.props.draggingY&&this._renderer&&this._renderer.resize()}componentWillUnmount(){this._renderer&&(this._renderer.dispose(),this._renderer=null)}onMouseMove(e){if(!this._dragType)return;let t;e&&e.touches&&e.preventDefault&&e.preventDefault();const n=this.el.getBoundingClientRect().left;this.setState(({selectionBounds:i,globalBounds:r,elementWidth:o})=>{let a=(this.getClientX(e)-n)/o;a=Math.max(a,0),a=Math.min(a,1);let s=a*(r.maxX-r.minX)+r.minX;if("scroll"===this._dragType){const e=i.maxX-i.minX;let n=s-e*this._scrollAnchorPercentage,o=s+e*(1-this._scrollAnchorPercentage);return n<r.minX&&(n=r.minX,o=n+e),o>r.maxX&&(o=r.maxX,n=o-e),t=()=>({minX:n,maxX:o}),{selectionBounds:Object.assign({},i,{minX:n,maxX:o})}}if("left"===this._dragType){s>i.maxX&&(s=i.maxX);const e=r.maxX===i.maxX;return t=()=>e?{minX:s}:{minX:s,maxX:i.maxX},{selectionBounds:Object.assign({},i,{minX:s})}}if("right"===this._dragType){s<i.minX&&(s=i.minX);const e=r.minX===i.minX;return t=()=>e?{maxX:s}:{minX:i.minX,maxX:s},{selectionBounds:Object.assign({},i,{maxX:s})}}},()=>{t&&(t.debounceHistory=!0,this.props.stateController.boundCalculator=t)})}addListeners(){window.addEventListener("mousemove",this.onMouseMove),window.addEventListener("mouseup",this.stopDragging),window.addEventListener("touchmove",this.onMouseMove,{passive:!1}),window.addEventListener("touchend",this.stopDragging),window.addEventListener("touchcancel",this.stopDragging)}stopDragging(){this._dragType=null,this.forceUpdate(),window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.stopDragging),window.removeEventListener("touchmove",this.onMouseMove),window.removeEventListener("touchend",this.stopDragging),window.removeEventListener("touchcancel",this.stopDragging)}startScroll(e){this._dragType="scroll";const{selectionBounds:t,globalBounds:n,elementWidth:i}=this.state,r=this.el.getBoundingClientRect().left,o=this.getClientX(e)-r,a=(t.minX-n.minX)/(n.maxX-n.minX)*i||0,s=(t.maxX-n.minX)/(n.maxX-n.minX)*i||0;this._scrollAnchorPercentage=(o-a)/(s-a),this.addListeners()}startLeftDrag(e){this._dragType="left",this.addListeners()}startRightDrag(e){this._dragType="right",this.addListeners()}render(){const{globalBounds:t,selectionBounds:n,elementWidth:i,elementHeight:r}=this.state;let o=Math.min(Math.max((n.minX-t.minX)/(t.maxX-t.minX),0),1)*i||0,a=Math.min(Math.max((n.maxX-t.minX)/(t.maxX-t.minX),0),1)*i||0;(isNaN(o)||!isFinite(o)||n.maxX<n.minX)&&(o=0),(isNaN(a)||!isFinite(a)||n.maxX<n.minX)&&(a=0);const s=r+14;let l;return n.dates&&this.props.markDates&&(l=$t({min:t.minX,max:t.maxX,totalSize:i,precision:"day",dates:n.dates,formatter:xe,expectedLabelSize:30,labelPadding:5,formatOptions:{justMonthAndDay:!0,unitOverride:"day",timeZone:this.props.timeZone},skipFirst:!0,skipLast:!0})),e.createElement("div",{className:"range-selection-graph"},e.createElement("div",{className:"graph-body graph-body-secondary",style:{touchAction:"none"}},e.createElement("canvas",{ref:e=>this.el=e}),e.createElement("svg",{style:{height:s}},e.createElement("g",null,e.createElement("rect",{x:0,y:r,width:i,height:14,className:"selection-bar-track"}),l&&l.map(({pixelValue:t,label:n,size:i,position:s},l)=>{if(isNaN(t))return null;const h=["axis-item",`axis-item-${i}`,`axis-item-${s}`];return t>=o&&t<=a&&h.push("axis-item-highlighted"),e.createElement("g",{key:l,className:h.join(" ")},e.createElement("path",{d:`M${t},0 v${r}`}),e.createElement("text",{x:t+3,y:r},n))}),e.createElement("rect",{x:o,y:r,width:a-o,height:14,className:"selection-bar",onMouseDown:this.startScroll,onTouchStart:this.startScroll}),e.createElement("path",{d:"M -3 3.5 L -3 9.333333333333334 M 0 3.5 L 0 9.333333333333334 M 3 3.5 L 3 9.333333333333334",className:"selection-bar-rifles",transform:`translate(${o+(a-o)/2},${r})`,onMouseDown:this.startScroll,onTouchStart:this.startScroll})),e.createElement("g",null,e.createElement("rect",{x:o,y:0,width:a-o,height:s,className:"target-selection-outline",onMouseDown:this.startScroll,onTouchStart:this.startScroll})),e.createElement("g",{className:"selection-handle"+("left"===this._dragType||"scroll"===this._dragType?" selection-handle-dragging":"")},e.createElement("rect",{x:o-15,y:(r-30)/2,width:30,height:30,fill:"transparent",className:"selection-bar-handle-hit",onMouseDown:this.startLeftDrag,onTouchStart:this.startLeftDrag}),e.createElement("path",{d:"M -4.5 0.5 L 3.5 0.5 L 3.5 15.5 L -4.5 15.5 L -4.5 0.5 M -1.5 4 L -1.5 12 M 0.5 4 L 0.5 12",className:"selection-bar-handle",transform:`translate(${o},${(r-15)/2})`,onMouseDown:this.startLeftDrag,onTouchStart:this.startLeftDrag})),e.createElement("g",{className:"selection-handle"+("right"===this._dragType||"scroll"===this._dragType?" selection-handle-dragging":"")},e.createElement("rect",{x:a-15,y:(r-30)/2,width:30,height:30,fill:"transparent",className:"selection-bar-handle-hit",onMouseDown:this.startRightDrag,onTouchStart:this.startRightDrag}),e.createElement("path",{d:"M -4.5 0.5 L 3.5 0.5 L 3.5 15.5 L -4.5 15.5 L -4.5 0.5 M -1.5 4 L -1.5 12 M 0.5 4 L 0.5 12",className:"selection-bar-handle",transform:`translate(${a},${(r-15)/2})`,onMouseDown:this.startRightDrag,onTouchStart:this.startRightDrag}))),this.props.verticalLines&&e.createElement(Ct,{stateController:this.props.stateController,verticalLines:this.props.verticalLines,isRangeGraph:!0,bounds:t,elementHeight:r,elementWidth:i})))}}an.defaultProps={width:3,shadowColor:"transparent"},an.propTypes={stateController:c().instanceOf(je).isRequired,webgl:c().bool,draggingY:c().bool,checkIntersection:c().bool,markDates:c().bool,timeZone:c().string,verticalLines:k.VerticalLines};const sn=e.memo(ln);function ln({series:t,i:n,style:i,onMouseDown:r,theme:o,stateController:a,highlighted:s}){const l=(0,D.default)(t.color,n,t.multigrapherSeriesIndex);i="day"===o?Object.assign({},i,{backgroundColor:l}):Object.assign({},i,{color:l});const h=["series-key-item"];s&&h.push("series-key-item-highlighted");const c=He(t,n);return e.createElement("div",{className:h.join(" "),style:i,onMouseDown:r,onMouseOver:()=>a.setHighlightedSeries(n),onMouseOut:()=>a.setHighlightedSeries(null),onClick:()=>a.registerSeriesClick(n)},c)}ln.propTypes={series:k.SingleSeries.isRequired,stateController:c().instanceOf(je),i:c().number.isRequired,style:c().object,onMouseDown:c().func,theme:c().string.isRequired,highlighted:c().bool};class hn extends e.PureComponent{constructor(e){super(e),this.state={showingLabelInput:!1},this.toggleLabelInputShowing=this.toggleLabelInputShowing.bind(this)}toggleLabelInputShowing(){this.setState(({showingLabelInput:e})=>({showingLabelInput:!e}))}render(){const{children:t,stateController:n,axisIndex:i,scale:r,label:o,grapherID:a}=this.props,{showingLabelInput:s}=this.state;return e.createElement("div",{className:"series-key-axis-container"+(s?" series-key-axis-container-showing-label":""),"data-axis-index":i,"data-grapher-id":a},e.createElement("div",{className:"scale-label",onClick:()=>n.toggleScale({axisIndex:i})},r.slice(0,s?6:3)),e.createElement("div",{className:"series-key-axis-container-body"},e.createElement("div",null,t,e.createElement("svg",{className:"label-input-toggler",viewBox:"0 0 512 512",onClick:this.toggleLabelInputShowing},e.createElement("path",{d:"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"}))),e.createElement("div",{className:"series-key-axis-label-container"},e.createElement("input",{onChange:e=>n.setLabel({axisIndex:i,label:e.target.value}),placeholder:"Enter label",value:o||""}))))}}hn.propTypes={stateController:c().instanceOf(je).isRequired,children:c().node.isRequired,axisIndex:c().number.isRequired,scale:c().string.isRequired,label:c().string,grapherID:c().string};const cn=e.memo(gn);function gn({stateController:t,theme:i,draggingY:a,grapherID:s,dragPositionYOffset:l=0}){const h=Qe(t),[c,g]=o(null),[A,d]=o({x:0,y:0}),p=et(t),u=r(null),[m,f]=o(5*h.map(({name:e,yKey:t},n)=>(e||t||n).toString().length).reduce((e,t)=>e+t,0));let C;n(()=>{u.current&&(cancelAnimationFrame(C),C=requestAnimationFrame(()=>{if(!u.current)return;const e=[...u.current.querySelectorAll(".series-key-axis-container")].map(e=>e.clientWidth).reduce((e,t)=>e+t,0);f(e)}))},[h,u.current]);const x=function({stateController:e,keyWidth:t}){const n=tt(e),i=nt(e),r=ht(e);let o=ye*n;n>0&&(o+=5),o+=250,r&&(o+=70);let a,s=ye*i;i>0&&(s+=5),s=Math.max(o,s),o=Math.max(o,s);const{elementWidth:l}=Ze(e);return l-s-o<t&&(s=0,o=0,a=10),{marginRight:o,marginLeft:s,marginBottom:a}}({stateController:t,keyWidth:m}),b=Je(t),y=function(e){return Ke(e,"always_tooltipped_changed",e.alwaysTooltipped)}(t);return e.createElement("div",{className:"series-key",style:x,ref:u},a&&e.createElement("div",{className:"series-key-axis-container","data-axis-index":"new-left","data-grapher-id":s}),b.map((n,r)=>!n.series.length&&b.length>1?null:e.createElement(hn,{key:r,label:n.label,axisIndex:n.axisIndex,scale:n.scale,stateController:t,grapherID:s},n.series.map(n=>n.hideFromKey?null:e.createElement(sn,{key:n.index,series:n,i:n.index,onMouseDown:(e,i)=>((e,n)=>{let i=e.target;for(;i&&"series-key"!==i.className;)i=i.parentNode;const r=e.target.getBoundingClientRect().left;let o=i.getBoundingClientRect().left,a=i.style.marginLeft;const s=e.clientX,l=e.clientY,h=e.clientX,c=e.clientY;g(n),d({x:e.clientX-s+(r-o)-2,y:e.clientY-l+1});const A=e=>{i.style.marginLeft!==a&&(o=i.getBoundingClientRect().left,a=i.style.marginLeft),d({x:e.clientX-s+(r-o)-2,y:e.clientY-l+1})},p=e=>{window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",p);let i=e.target;for(;i&&!(i.dataset||{}).axisIndex&&!(i.dataset||{}).grapherId;)i=i.parentNode;g(null),t.finalizeDrag(n,i&&(i.dataset||{}).axisIndex,i&&(i.dataset||{}).grapherId),e.clientX===h&&e.clientY===c&&t.toggleAlwaysTooltipped(n,e.shiftKey)};window.addEventListener("mousemove",A),window.addEventListener("mouseup",p),t.markDragStart()})(e,n),theme:i,stateController:t,highlighted:p===n.index||y.has(n)})))),a&&e.createElement("div",{className:"series-key-axis-container","data-axis-index":"new-right","data-grapher-id":s}),c&&e.createElement(sn,{style:{left:A.x,top:A.y-l,position:"absolute",pointerEvents:"none",zIndex:1},series:c,i:c.index,theme:i,stateController:t}))}gn.propTypes={stateController:c().instanceOf(je).isRequired,theme:c().string.isRequired,draggingY:c().bool.isRequired,grapherID:c().string,dragPositionYOffset:c().number};const An=e.memo(dn);function dn({title:t}){return e.createElement("div",{className:"grapher-title"},t)}dn.propTypes={title:c().string.isRequired};class pn extends e.PureComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(e){setTimeout(()=>{this.props.stateController.setShowing(this.props.singleSeries,e.target.checked)})}render(){const{singleSeries:t}=this.props,n=(0,D.default)(t.color,t.index,t.multigrapherSeriesIndex);let i=t.name||t.yKey;return i||(i=t.index),e.createElement("div",{className:"series-toggle"},e.createElement("label",null,e.createElement("input",{type:"checkbox",defaultChecked:!t.hidden,ref:e=>e&&e.addEventListener("change",this.onChange)}),e.createElement("span",{className:"checkmark",style:{background:n,borderColor:n}}),i))}}function un({stateController:t}){const n=Qe(t);return e.createElement("div",{className:"grapher-sidebar"},n.map((n,i)=>e.createElement(pn,{key:i,singleSeries:n,stateController:t})))}pn.propTypes={singleSeries:k.SingleSeries.isRequired,stateController:c().instanceOf(je).isRequired},un.propTypes={stateController:c().instanceOf(je).isRequired};class mn{constructor({syncBounds:e=!0,syncTooltips:t=!0,syncDragState:n=!1}={}){this._stateControllers=new Set,this._syncBounds=e,this._syncTooltips=t,this._syncDragState=n}add(e){this._stateControllers.add(e),this._syncBounds&&this.syncBounds(e),this._syncTooltips&&this.syncTooltips(e),this._syncDragState&&this.syncDragState(e)}remove(e){this._stateControllers.delete(e)}syncDragState(e){e.on("dragging_y_changed",t=>{for(let n of this._stateControllers)e!==n&&(t?n.markDragStart():n.finalizeDrag(null,null))})}syncBounds(e){e.on("bound_calculator_changed",t=>{for(let n of this._stateControllers)e!==n&&(n.boundCalculator=t)})}syncTooltips(e){e.on("tooltip_state_changed",(t,n)=>{if(this._tooltipIgnoreState===n)return;const i=0===t.unsavedTooltipsCount||!t.mousePresent||"onShift"===this._syncTooltips&&!e.shiftKeyPressedOnMove;i&&(this._tooltipIgnoreState=Math.random());for(let n of this._stateControllers)e!==n&&(i?n.showOnlySavedTooltips(this._tooltipIgnoreState):n.setTooltipMousePosition({mouseX:t.mouseX,mouseY:t.mouseY,tooltipAllNext:!0,tooltipStateArg:this._tooltipIgnoreState}))})}}function fn(){return fn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},fn.apply(null,arguments)}const Cn=e.memo(bn),xn={theme:"night",showAxes:!0,showRangeGraph:!0,showRangeSelectors:!0,showSeriesKey:!0,showTooltips:!0,boundsSelectionEnabled:!0,customBoundsSelectors:[],sidebarEnabled:!1,defaultShowAnnotations:!0,defaultShowOptions:!0};function bn(t){t={...xn,...t};const r=i(()=>new je({grapherID:t.id,...t,...t.stateControllerInitialization}),[]);n(()=>()=>{r.dispose()},[r]),n(()=>{t.exportStateController&&t.exportStateController(r)},[r,t.exportStateController]),n(()=>{r.timingFrameCount=t.timingFrameCount},[r,t.timingFrameCount]),n(()=>(t.onRenderTime&&r.on("render_time",t.onRenderTime),()=>{t.onRenderTime&&r.off("render_time",t.onRenderTime)}),[r,t.onRenderTime]),n(()=>{r.setSeries(t.series)},[r,t.series]),n(()=>{r.theme=t.theme},[r,t.theme]);const o=pt(r),a=t.bigLabels||"export"===o,s=t.defaultLineWidth||("export"===o?3:void 0);n(()=>{r.defaultLineWidth=s},[r,s]),n(()=>{r.percentile=t.percentile},[r,t.percentile]),n(()=>{r.customBoundsSelectors=t.customBoundsSelectors},[r,t.customBoundsSelectors]),n(()=>{r.annotations=t.annotations},[r,t.annotations]),n(()=>t.onAxisChange?(r.on("exported_axes_changed",t.onAxisChange),()=>{r.off("exported_axes_changed",t.onAxisChange)}):()=>{},[r,t.onAxisChange]),n(()=>{r.primaryRenderer.resize()},[t.height]);const l=lt(r),{styles:h,classNames:c}=function(e,{draggingY:t,theme:n}){const{fullscreen:i,height:r,width:o}=e,a=["grapher",`grapher-${n}`],s={};return t&&a.push("grapher-dragging-y"),i?(a.push("grapher-fullscreen"),a.push("grapher-fixed-height")):r&&(a.push("grapher-fixed-height"),s.height="number"==typeof r?r-20:`calc(${r} - 20px)`),o&&(s.width=o),{styles:s,classNames:a}}(t,{draggingY:l,theme:o}),g=it(r),A=rt(r),d=gt(r),p="boolean"==typeof t.showAxisColors?t.showAxisColors:"export"!==o,u="boolean"!=typeof t.showGrid||t.showGrid,m="boolean"==typeof t.showAxes&&t.showAxes,f={stateController:r,showAxes:m,showGrid:u,showSeriesKey:t.showSeriesKey,bodyHeight:t.bodyHeight,theme:o,grapherID:t.id,dragPositionYOffset:t.dragPositionYOffset,showAxisColors:p,bigLabels:a};return e.createElement("div",{className:c.join(" "),style:h,"data-grapher-id":t.id},t.title&&e.createElement(An,{title:t.title}),e.createElement("div",{className:"grapher-primary-container-outer"},d&&e.createElement(un,{stateController:r}),e.createElement("div",{className:"grapher-primary-container-body"},t.showSeriesKey&&e.createElement(cn,{stateController:r,draggingY:l,theme:t.theme,grapherID:t.id,dragPositionYOffset:t.dragPositionYOffset}),t.showRangeSelectors&&e.createElement(rn,{stateController:r,customBoundsSelectors:t.customBoundsSelectors,customBoundsSelectorsOnly:t.customBoundsSelectorsOnly,sidebarEnabled:t.sidebarEnabled}),e.createElement("div",{className:"grapher-main-row"},l&&e.createElement("div",{className:"axis y-axis","data-axis-index":"new-left","data-grapher-id":t.id,style:{width:ye,height:"number"==typeof t.bodyHeight?t.bodyHeight:void 0}}),A.map((t,n)=>e.createElement(Nt,fn({key:n,axis:t,sideIndex:A.length-n-1},f))),e.createElement("div",{className:"central-container"},e.createElement(yt,{stateController:r,webgl:t.webgl,bodyHeight:t.bodyHeight,boundsSelectionEnabled:t.boundsSelectionEnabled,showTooltips:t.showTooltips,showContextMenu:t.showContextMenu,tooltipOptions:t.tooltipOptions,checkIntersection:t.checkIntersection,draggablePoints:t.draggablePoints,onPointDrag:t.onPointDrag,onDraggablePointsDoubleClick:t.onDraggablePointsDoubleClick,onPointClick:t.onPointClick,verticalLines:t.verticalLines,clockStyle:t.clockStyle,timeZone:t.timeZone}),e.createElement(qt,{stateController:r}),e.createElement(Gt,{showGrid:u,showAxes:m,stateController:r,bigLabels:a,xTickUnit:t.xTickUnit,clockStyle:t.clockStyle,timeZone:t.timeZone,integersOnly:t.xAxisIntegersOnly,formatXAxisLabel:t.formatXAxisLabel}),t.showRangeGraph&&e.createElement("div",{className:"range-graph-container"},e.createElement(an,{stateController:r,webgl:t.webgl,checkIntersection:t.checkIntersection,markDates:t.markRangeGraphDates,timeZone:t.timeZone,verticalLines:t.verticalLines}))),g.map((t,n)=>e.createElement(Nt,fn({key:n,axis:t,sideIndex:n},f))),l&&e.createElement("div",{className:"axis y-axis","data-axis-index":"new-right","data-grapher-id":t.id,style:{width:ye,height:"number"==typeof t.bodyHeight?t.bodyHeight:void 0}})))))}bn.propTypes={series:k.Series.isRequired,webgl:c().bool,requireWASM:c().bool,checkIntersection:c().bool,onAxisChange:c().func,onRenderTime:c().func,exportStateController:c().func,timingFrameCount:c().number,stateControllerInitialization:c().object,syncPool:c().instanceOf(mn),id:c().string,dragPositionYOffset:c().number,theme:c().oneOf(["day","night","export"]),title:c().string,fullscreen:c().bool,bodyHeight:c().number,height:c().number,width:c().number,showAxes:c().bool,showRangeGraph:c().bool,showRangeSelectors:c().bool,showSeriesKey:c().bool,showTooltips:c().bool,showGrid:c().bool,showAxisColors:c().bool,bigLabels:c().bool,xTickUnit:c().oneOf(["year"]),formatXAxisLabel:c().func,xAxisIntegersOnly:c().bool,clockStyle:c().oneOf(["12h","24h"]),timeZone:c().string,markRangeGraphDates:c().bool,boundsSelectionEnabled:c().bool,sidebarEnabled:c().bool,percentile:c().number,defaultShowOptions:c().bool,defaultShowIndividualPoints:c().bool,defaultShowSidebar:c().bool,defaultShowAnnotations:c().bool,defaultLineWidth:c().number,tooltipOptions:k.TooltipOptions,customBoundsSelectors:k.CustomBoundsSelectors,customBoundsSelectorsOnly:c().bool,defaultBoundsCalculator:c().string,annotations:k.Annotations,draggablePoints:k.DraggablePoints,onPointDrag:c().func,onDraggablePointsDoubleClick:c().func,verticalLines:k.VerticalLines,onPointClick:c().func};const yn=D.LINE_COLORS,_n=Ue;class Bn extends S{constructor({id:e}){super(),this._id=e,this._multiSeries=[],this._seriesToGraphIndices=new Map,this._graphIndicesToSeries=new Map,this._modifiedSeries=new Map,this._originalSeriesByMultigrapherIndex=new Map,this._stateControllers=new Set,this._prevSeries=[],this._dataCache=new Map,this._subscriptions=new Map,this._draggingY=!1,this.on("multi_series_changed",()=>{for(let e of this._stateControllers)e._multiSeries=this._multiSeries})}setSeries(e){if(this._prevSeries.length===e.length){let t=!1;for(let n=0;n<e.length;n++)if(e[n]!==this._prevSeries[n]){t=!0;break}if(!t)return}this._prevSeries=e;const t=new Set,n=new Set(e);for(let n of e){let e=n.graph||0;this._seriesToGraphIndices.has(n)&&(e=this._seriesToGraphIndices.get(n)),t.add(e);let i=this._graphIndicesToSeries.get(e);i||(i=new Set,this._graphIndicesToSeries.set(e,i)),i.add(n)}const i=[...t].sort();this._multiSeries=[];let r=0;for(let e of i){const t=[];for(let i of this._graphIndicesToSeries.get(e)){if(!n.has(i)){this._graphIndicesToSeries.get(e).delete(i);continue}if(this._modifiedSeries.has(i)){r++,t.push(this._modifiedSeries.get(i));continue}const o=(0,D.default)(i.color,r),a=He(i,r),s={...i,multigrapherSeriesIndex:r,multigrapherGraphIndex:e,color:o,name:a};this._modifiedSeries.set(i,s),this._originalSeriesByMultigrapherIndex.set(r,i),r++,t.push(s)}this._multiSeries.push(t)}this._nextMultigrapherSeriesIndex?this._nextMultigrapherSeriesIndex=this._nextMultigrapherSeriesIndex-this._multiSeriesCount+r:this._nextMultigrapherSeriesIndex=r,this._multiSeriesCount=r,this.emit("multi_series_changed",this.multiSeries)}registerStateController(e){this._stateControllers.has(e)||(this._stateControllers.add(e),e._multigraphStateController=this,e._multiSeries=this._multiSeries,e.on("dragging_y_finalized",({grapherID:t,axisIndex:n,draggedSeries:i}={})=>{if(t===e.grapherID)return;const[r,o,a]=t.split("-");"multigrapher"===r&&o===this._id&&setTimeout(()=>{this.moveSeries({axisIndex:n,draggedSeries:i,graphIndex:a})})}),e.on("dragging_y_changed",e=>{e!==this._draggingY&&(this._draggingY=e,this.emit("dragging_y_changed",this._draggingY))}),e.on("observable_modified",t=>{for(let n of this._stateControllers)e!==n&&n.markObservableModified(t)}),e.on("dispose",()=>{this._stateControllers.delete(e)}))}moveSeries({axisIndex:e,draggedSeries:t,graphIndex:n}){const i=this.graphCount,r=this._originalSeriesByMultigrapherIndex.get(t.multigrapherSeriesIndex),o=this._modifiedSeries.get(r);this._multiSeries[o.multigrapherGraphIndex].splice(this._multiSeries[o.multigrapherGraphIndex].indexOf(o),1),this._multiSeries[o.multigrapherGraphIndex]=[...this._multiSeries[o.multigrapherGraphIndex]],o.multigrapherGraphIndex="top"===n?this._createGraphAtTop():"bottom"===n?this._createGraphAtBottom():parseInt(n),o.axisIndex=e,delete o.axis,this._multiSeries[o.multigrapherGraphIndex]=[...this._multiSeries[o.multigrapherGraphIndex],o],this._multiSeries=[...this._multiSeries];for(let e=0;e<this._multiSeries.length;e++){const t=this._multiSeries[e].map(({multigrapherSeriesIndex:e})=>this._originalSeriesByMultigrapherIndex.get(e));this._graphIndicesToSeries.set(e,new Set(t));for(let n of t)this._seriesToGraphIndices.set(n,e)}this.emit("multi_series_changed",this.multiSeries),this.emit("graph_count_changed",this.graphCount,i)}_createGraphAtTop(){let e=null;for(let t=0;t<this._multiSeries.length&&0===this._multiSeries[t].length;t++)e=t;if(null!==e)return e;this._multiSeries=[[],...this._multiSeries];for(let e=0;e<this._multiSeries.length;e++)if(this._multiSeries[e].length){this._multiSeries[e]=[...this._multiSeries[e]];for(let t of this._multiSeries[e])t.multigrapherGraphIndex=e}return 0}_createGraphAtBottom(){let e=null;for(let t=this._multiSeries.length-1;t>=0&&0===this._multiSeries[t].length;t--)e=t;return null!==e?e:(this._multiSeries=[...this._multiSeries,[]],this._multiSeries.length-1)}get multiSeries(){return this._multiSeries.filter(e=>e.length)}get series(){return[...this._stateControllers].map(e=>e.series).flat()}get graphCount(){return this.multiSeries.length}get draggingY(){return this._draggingY}dispose(){this.clearListeners();for(let e of this._subscriptions.values())e.unsubscribe();this._subscriptions.clear()}get stateControllerInitialization(){return{sharedDataCache:this._dataCache,sharedSubscriptions:this._subscriptions}}incrementMultigrapherSeriesIndex(){const e=this._nextMultigrapherSeriesIndex;return this._nextMultigrapherSeriesIndex++,e}}function vn(){return vn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},vn.apply(null,arguments)}const wn=e.memo(En);function En(t){const r=i(()=>Math.random().toString(36).slice(2),[]),o=i(()=>new Bn({id:r,...t}),[]),a=function(e){return Ke(e,"multi_series_changed",e.multiSeries)}(o),s=i(()=>new mn({syncBounds:t.syncBounds,syncTooltips:t.syncTooltips,syncDragState:!0}),[]),l=i(()=>o.registerStateController.bind(o),[o]);n(()=>()=>{o.dispose()},[o]),n(()=>{t.exportStateController&&t.exportStateController(o)},[o,t.exportStateController]),n(()=>{o.setSeries(t.series)},[o,t.series]),n(()=>t.onMultiseriesChange?(o.on("multi_series_changed",t.onMultiseriesChange),()=>{o.off("multi_series_changed",t.onMultiseriesChange)}):()=>{},[o,t.onMultiseriesChange]);const h=lt(o);return e.createElement("div",{className:"multigrapher"},h&&t.newUpperEnabled&&e.createElement("div",{className:`new-grapher grapher-${t.theme}`,"data-grapher-id":`multigrapher-${r}-top`},"New grapher"),a.map((n,i)=>e.createElement(Cn,vn({key:i},t,{syncPool:s,stateControllerInitialization:o.stateControllerInitialization,series:n,id:`multigrapher-${r}-${i}`,dragPositionYOffset:t.newUpperEnabled?38:0,exportStateController:l}))),h&&e.createElement("div",{className:`new-grapher grapher-${t.theme}`,"data-grapher-id":`multigrapher-${r}-bottom`},"New grapher"))}En.defaultProps={theme:"night"},En.propTypes=Object.assign({},Cn.propTypes,{syncBounds:c().bool,syncTooltips:c().bool,newUpperEnabled:c().bool,onMultiseriesChange:c().func});export{yn as AVAILABLE_COLORS,_n as BUILT_IN_BOUND_CALCULATORS,Cn as Grapher,wn as MultiGrapher,rn as RangeSelection,mn as SyncPool,Cn as default};
|
|
2
2
|
//# sourceMappingURL=bundle.esm.js.map
|