@windborne/grapher 1.0.0

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.
Files changed (112) hide show
  1. package/.eslintrc.js +85 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/grapher.iml +12 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/misc.xml +6 -0
  7. package/.idea/modules.xml +8 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/0.bundle.js +2 -0
  10. package/0.bundle.js.map +1 -0
  11. package/1767282193a714f63082.module.wasm +0 -0
  12. package/537.bundle.js +2 -0
  13. package/537.bundle.js.map +1 -0
  14. package/831.bundle.js +2 -0
  15. package/831.bundle.js.map +1 -0
  16. package/bundle.js +2 -0
  17. package/bundle.js.map +1 -0
  18. package/package.json +75 -0
  19. package/readme.md +129 -0
  20. package/src/components/annotations.js +62 -0
  21. package/src/components/context_menu.js +73 -0
  22. package/src/components/draggable_points.js +114 -0
  23. package/src/components/graph_body.js +292 -0
  24. package/src/components/graph_title.js +16 -0
  25. package/src/components/options.js +111 -0
  26. package/src/components/percentile_button.js +72 -0
  27. package/src/components/range_graph.js +352 -0
  28. package/src/components/range_selection.js +175 -0
  29. package/src/components/range_selection_button.js +26 -0
  30. package/src/components/range_selection_button_base.js +51 -0
  31. package/src/components/series_key.js +235 -0
  32. package/src/components/series_key_axis_container.js +70 -0
  33. package/src/components/series_key_item.js +52 -0
  34. package/src/components/sidebar.js +76 -0
  35. package/src/components/tooltip.js +244 -0
  36. package/src/components/vertical_lines.js +70 -0
  37. package/src/components/x_axis.js +124 -0
  38. package/src/components/y_axis.js +239 -0
  39. package/src/eventable.js +65 -0
  40. package/src/grapher.js +367 -0
  41. package/src/grapher.scss +914 -0
  42. package/src/helpers/axis_sizes.js +2 -0
  43. package/src/helpers/binary_search.js +67 -0
  44. package/src/helpers/color_to_vector.js +35 -0
  45. package/src/helpers/colors.js +27 -0
  46. package/src/helpers/custom_prop_types.js +159 -0
  47. package/src/helpers/flatten_simple_data.js +81 -0
  48. package/src/helpers/format.js +233 -0
  49. package/src/helpers/generator_params_equal.js +10 -0
  50. package/src/helpers/name_for_series.js +16 -0
  51. package/src/helpers/place_grid.js +257 -0
  52. package/src/helpers/pyodide_ready.js +13 -0
  53. package/src/multigrapher.js +105 -0
  54. package/src/renderer/background.frag +7 -0
  55. package/src/renderer/background.vert +7 -0
  56. package/src/renderer/background_program.js +48 -0
  57. package/src/renderer/circle.frag +26 -0
  58. package/src/renderer/circle.vert +12 -0
  59. package/src/renderer/create_gl_program.js +36 -0
  60. package/src/renderer/draw_area.js +159 -0
  61. package/src/renderer/draw_background.js +15 -0
  62. package/src/renderer/draw_bars.js +80 -0
  63. package/src/renderer/draw_line.js +69 -0
  64. package/src/renderer/draw_zero_line.js +24 -0
  65. package/src/renderer/extract_vertices.js +137 -0
  66. package/src/renderer/graph_body_renderer.js +293 -0
  67. package/src/renderer/line.frag +51 -0
  68. package/src/renderer/line.vert +32 -0
  69. package/src/renderer/line_program.js +125 -0
  70. package/src/renderer/paths_from.js +72 -0
  71. package/src/renderer/scale_bounds.js +28 -0
  72. package/src/renderer/size_canvas.js +59 -0
  73. package/src/rust/Cargo.lock +233 -0
  74. package/src/rust/Cargo.toml +35 -0
  75. package/src/rust/pkg/grapher_rs.d.ts +42 -0
  76. package/src/rust/pkg/grapher_rs.js +351 -0
  77. package/src/rust/pkg/grapher_rs_bg.d.ts +11 -0
  78. package/src/rust/pkg/grapher_rs_bg.wasm +0 -0
  79. package/src/rust/pkg/index.js +342 -0
  80. package/src/rust/pkg/index_bg.wasm +0 -0
  81. package/src/rust/pkg/package.json +14 -0
  82. package/src/rust/src/extract_vertices.rs +83 -0
  83. package/src/rust/src/get_point_number.rs +50 -0
  84. package/src/rust/src/lib.rs +15 -0
  85. package/src/rust/src/selected_space_to_render_space.rs +131 -0
  86. package/src/state/average_loop_times.js +15 -0
  87. package/src/state/bound_calculator_from_selection.js +36 -0
  88. package/src/state/bound_calculators.js +41 -0
  89. package/src/state/calculate_annotations_state.js +59 -0
  90. package/src/state/calculate_data_bounds.js +104 -0
  91. package/src/state/calculate_tooltip_state.js +241 -0
  92. package/src/state/data_types.js +13 -0
  93. package/src/state/expand_bounds.js +58 -0
  94. package/src/state/find_matching_axis.js +31 -0
  95. package/src/state/get_default_bounds_calculator.js +15 -0
  96. package/src/state/hooks.js +164 -0
  97. package/src/state/infer_type.js +74 -0
  98. package/src/state/merge_bounds.js +64 -0
  99. package/src/state/multigraph_state_controller.js +334 -0
  100. package/src/state/selection_from_global_bounds.js +25 -0
  101. package/src/state/space_conversions/condense_data_space.js +115 -0
  102. package/src/state/space_conversions/data_space_to_selected_space.js +328 -0
  103. package/src/state/space_conversions/selected_space_to_background_space.js +144 -0
  104. package/src/state/space_conversions/selected_space_to_render_space.js +161 -0
  105. package/src/state/space_conversions/simple_series_to_data_space.js +229 -0
  106. package/src/state/state_controller.js +1770 -0
  107. package/src/state/sync_pool.js +101 -0
  108. package/test/setup.js +15 -0
  109. package/test/space_conversions/data_space_to_selected_space.test.js +434 -0
  110. package/webpack.dev.config.js +109 -0
  111. package/webpack.prod.config.js +60 -0
  112. package/webpack.test.config.js +59 -0
package/bundle.js ADDED
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.Grapher=t(require("react")):e.Grapher=t(e.react)}(globalThis,(e=>(()=>{var t,n,r,i,o,a,s,l,A,h,c,g,d,p,u,m={7210:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AVAILABLE_COLORS:()=>Zt,BUILT_IN_BOUND_CALCULATORS:()=>Qt,default:()=>jt});var r=n(9155),i=n.n(r),o=n(5556),a=n.n(o);const s=["values","tuples","objects"],l=[...s,"tuple_observable","object_observable","generator"],A=a().any,h=a().shape({data:A.isRequired,type:a().oneOf([...l,"infer"]),xKey:a().string,yKey:a().string,xUnixDates:a().bool,color:a().oneOfType([a().string,a().number]),name:a().string,xLabel:a().string,yLabel:a().string,ignoreDiscontinuities:a().bool,dashed:a().bool,dashPattern:a().arrayOf(a().number),width:a().number,rangeSelectorWidth:a().number,axis:a().oneOfType([a().string,a().object]),expandYWith:a().arrayOf(a().number),defaultAlwaysTooltipped:a().bool,square:a().bool,shiftXBy:a().number,graph:a().number,background:a().object,hideFromKey:a().bool,showIndividualPoints:a().bool,rendering:a().oneOf(["line","bar","area"]),negativeColor:a().string,gradient:a().array,zeroLineWidth:a().number,zeroLineColor:a().string,pointRadius:a().number}),c=a().arrayOf(h),g=a().shape({axisIndex:a().number.isRequired,series:a().array.isRequired,side:a().oneOf(["left","right"]).isRequired,scale:a().oneOf(["linear","log"]).isRequired,label:a().string}),d=a().arrayOf(g),p=a().shape({label:a().string.isRequired,calculator:a().func.isRequired,datesOnly:a().bool}),u=a().arrayOf(p),m={includeSeriesLabel:a().bool,includeXLabel:a().bool,includeYLabel:a().bool,includeXValue:a().bool,includeYValue:a().bool,floating:a().bool,alwaysFixedPosition:a().bool,floatPosition:a().oneOf(["top","bottom"]),floatDelta:a().number,savingDisabled:a().bool},C=a().shape(m),x=a().shape({x:a().oneOfType([a().string,a().number,a().instanceOf(Date)]).isRequired,xEnd:a().oneOfType([a().string,a().number,a().instanceOf(Date)]),series:a().arrayOf(a().string),content:a().string.isRequired}),b=a().arrayOf(x),f=a().shape({x:a().number.isRequired,y:a().number.isRequired,radius:a().number,fillColor:a().string,strokeColor:a().string,strokeWidth:a().number,onClick:a().func,onDoubleClick:a().func}),y=a().arrayOf(f),_=a().shape({x:a().number.isRequired,color:a().string,width:a().number,markTop:a().bool,style:a().object,markerStyle:a().object}),B={Data:A,SingleSeries:h,Series:c,Axis:g,Axes:d,CustomBoundsSelector:p,CustomBoundsSelectors:u,TooltipOptions:C,TooltipOptionsRaw:m,Annotations:b,DraggablePoint:f,DraggablePoints:y,VerticalLine:_,VerticalLines:a().arrayOf(_)};async function w(e,t,{reset:n=!0}={}){n&&(e.width="",e.height="",e.style.width="0",e.style.height="",await new Promise((e=>requestAnimationFrame(e))));let r=e.parentNode.getBoundingClientRect();for(;0===r.width;)await new Promise((e=>requestAnimationFrame(e))),r=e.getBoundingClientRect();const i=2*(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),o=r.width,a=r.height,s=o*i,l=a*i;return e.width=s,e.height=l,e.style.width=`${o}px`,e.style.height=`${a}px`,{pixelRatio:i,elementWidth:o,elementHeight:a,renderWidth:s,renderHeight:l,boundingRect:r}}const E=["#F1C232","#1259f8","#cb4b4b","#4da74d","#9440ed","#61e0ed","#ed6d2c","#ed13c6","#bbed59"];function v(e,t,n){return"string"==typeof e?e:"number"==typeof e?E[e%E.length]:void 0!==n?E[n%E.length]:E[t%E.length]}var k=n(3390),S=n.n(k),D=n(1039),Y=n.n(D),F=n(6120),X=n.n(F),R=n(2789),M=n.n(R);function T(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]{6}$/i.test(e))throw new Error(`Color must be a hex string: ${e}`);return[parseInt(e.substr(1,2),16)/255,parseInt(e.substr(3,2),16)/255,parseInt(e.substr(5,2),16)/255,1]}function P(e,{splitAtY:t}={}){const n=[];let r=[],i=!0;const{nullMask:o,maxYValues:a,minYValues:s,yValues:l}=e;for(let e=0;e<l.length;e++){const A=2*e,h=l[e];if(1&o[e]){i||(n.push(r),r=[]),i=!0;continue}r.push([A,h]);const c=s[e],g=a[e];if(c!==g&&(2&o[e]||r.push([A,c]),4&o[e]||r.push([A,g]),r.push([A,h])),i=!1,"number"==typeof t&&e>0){const a=l[e-1];(!(1&o[e-1])&&a<t&&h>=t||a>t&&h<=t)&&(i||(n.push(r),r=[[A,h]]),i=!0)}}return i||n.push(r),n}let z;function $(e,{dashed:t,dashPattern:n}){let r=0;for(let i of e)if(t)for(let e=0;e<i.length;e++)t&&e%(n[0]+n[1])>=n[0]||r++;else r+=i.length;const i=new Float32Array(8*r),o=new Float32Array(8*r),a=new Float32Array(4*r),s=new Uint32Array(6*r);if(r>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 r of e)for(let e=0;e<r.length;e++){if(t&&e%(n[0]+n[1])>=n[0])continue;const[a,A]=r[e];let h,c;0===e?(h=a-1,c=A):[h,c]=r[e-1];for(let e=0;e<4;e++)i[8*l+2*e]=a,i[8*l+2*e+1]=A,o[8*l+2*e]=h,o[8*l+2*e+1]=c;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:i,prevPositions:o,vertices:a,indices:s}}function I(e,t,n){const r=e.createShader(e.VERTEX_SHADER);e.shaderSource(r,t),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS)||console.error(e.getShaderInfoLog(r));const i=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(i,n),e.compileShader(i),e.getShaderParameter(i,e.COMPILE_STATUS)||console.error(e.getShaderInfoLog(i));const o=e.createProgram();return e.attachShader(o,r),e.attachShader(o,i),e.linkProgram(o),e.validateProgram(o),e.getProgramParameter(o,e.LINK_STATUS)||console.error(e.getProgramInfoLog(o)),o}Promise.all([n.e(537),n.e(831)]).then(n.bind(n,1599)).then((e=>{z=e}));class O{constructor(e){this._gl=e,this._program=I(e,Y(),S()),this._circleProgram=I(e,M(),X()),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.clear(e.DEPTH_BUFFER_BIT|e.COLOR_BUFFER_BIT),e.viewport(0,0,t,n)}draw(e,t){const n=this._gl,r=n.drawingBufferWidth,i=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,A=t.dashPattern||[5,5],{positions:h,prevPositions:c,vertices:g,indices:d}=function(e,{dashed:t,dashPattern:n}){if(e.paths)return $(e.paths,{dashed:t,dashPattern:n});if(!z)return $(P(e),{dashed:t,dashPattern:n});const r=z.get_point_number(e.nullMask,e.yValues,e.minYValues,e.maxYValues,t,n[0],n[1]);let i=new Float32Array(8*r),o=new Float32Array(8*r),a=new Float32Array(4*r),s=new Uint32Array(6*r);return z.extract_vertices(2,e.nullMask,e.yValues,e.minYValues,e.maxYValues,i,o,a,s,t,n[0],n[1]),{positions:i,prevPositions:o,vertices:a,indices:s}}(e,{dashed:l,dashPattern:A}),p=n.getAttribLocation(this._program,"position"),u=n.getAttribLocation(this._program,"prevPosition"),m=n.getAttribLocation(this._program,"vertex");if(n.enableVertexAttribArray(p),n.bindBuffer(n.ARRAY_BUFFER,this._positionBuffer),n.bufferData(n.ARRAY_BUFFER,h,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,c,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,g,n.STATIC_DRAW),n.vertexAttribPointer(m,1,n.FLOAT,!1,0,0),n.uniform1f(n.getUniformLocation(this._program,"width"),r),n.uniform1f(n.getUniformLocation(this._program,"height"),i),n.uniform1f(n.getUniformLocation(this._program,"thickness"),Math.max(o,1)+a),n.uniform1f(n.getUniformLocation(this._program,"shadowBlur"),a),n.uniform4f(n.getUniformLocation(this._program,"color"),...T(t.color)),n.uniform4f(n.getUniformLocation(this._program,"shadowColor"),...T(s)),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"),r),n.uniform1f(n.getUniformLocation(this._circleProgram,"height"),i),n.uniform1f(n.getUniformLocation(this._circleProgram,"pointSize"),2*(o+6)),n.uniform4f(n.getUniformLocation(this._circleProgram,"color"),...T(t.color));const e=t.getIndividualPoints();n.enableVertexAttribArray(0),n.bindBuffer(n.ARRAY_BUFFER,this._individualPointBuffer),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e.flat()),n.STATIC_DRAW),n.vertexAttribPointer(0,2,n.FLOAT,!1,0,0),n.drawArrays(n.POINTS,0,e.length)}}}class L{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 N=n(400),W=n.n(N),G=n(4765),q=n.n(G);class U{constructor(e){this._gl=e,this._program=I(e,q(),W()),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:r,color:i}of e){t.uniform4f(t.getUniformLocation(this._program,"color"),...T(i));const e=new Float32Array([n,1,r,1,r,-1,n,1,r,-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)}}}function H(e,{context:t,sizing:n,color:r,zeroColor:i,zeroWidth:o}){o&&(t.strokeStyle=i||r,t.lineWidth=o,t.beginPath(),t.moveTo(0,e),t.lineTo(n.renderWidth,e),t.stroke())}function K({closestSpacing:e,bounds:t,sizing:n,axisSeriesCount:r}){const i=e/(t.maxX-t.minX)*n.renderWidth,o=.8*i;return{barWidth:o/r,totalBarWidth:o,barSpacing:.2*i}}class j extends L{constructor({stateController:e,canvasElement:t,webgl:n=!1,checkIntersection:r=!0}){super(),this._stateController=e,this._checkIntersection=r,this._canvas=t,this._webgl=n,n&&(this._context=this._canvas.getContext("webgl"),this._context?this._lineProgram=new O(this._context):(alert("WebGL failed! Attempting fallback to CPU rendering"),this._webgl=!1)),this._webgl||(this._context=this._canvas.getContext("2d"),this._context2d=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),e.on("showing_sidebar_changed",this._boundResize)}dispose(){this.clearListeners(),this._lineProgram&&this._lineProgram.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()}clear(){this._webgl?this._lineProgram.clear():this._context.clearRect(0,0,this._context.canvas.width,this._context.canvas.height)}render(e,t,{highlighted:n,showIndividualPoints:r,shadowColor:i,shadowBlur:o,width:a,defaultLineWidth:s,bounds:l,globalBounds:A}){const h=t=>{l||(l=e.axis.currentBounds);const n=[];let r=e.inSelectedSpace.data;t&&(r=e.inDataSpace);for(let[e,t]of r)null!==t&&n.push([(e-l.minX)/(l.maxX-l.minX)*this._sizing.renderWidth,(1-(t-l.minY)/(l.maxY-l.minY))*this._sizing.renderHeight]);return n};let c;if(("bar"===e.rendering||"area"===e.rendering)&&(this._context2d=this._context2d||this._canvas.getContext("2d"),this._webgl&&this._context.flush(),l||(l=e.axis.currentBounds),c={context:this._context2d,color:v(e.color,e.index,e.multigrapherSeriesIndex),sizing:this._sizing,zero:(1-(0-l.minY)/(l.maxY-l.minY))*this._sizing.renderHeight,hasNegatives:!!e.inDataSpace.find((e=>e[1]<0)),negativeColor:e.negativeColor,zeroWidth:e.zeroLineWidth,zeroColor:e.zeroLineColor}),"bar"===e.rendering)return void function(e,{color:t,context:n,sizing:r,indexInAxis:i,axisSeriesCount:o,zero:a,hasNegatives:s,negativeColor:l,zeroColor:A,zeroWidth:h,closestSpacing:c,bounds:g}){n.strokeStyle=t,n.fillStyle=t;const{barWidth:d,totalBarWidth:p}=K({closestSpacing:c,bounds:g,sizing:r,axisSeriesCount:o}),u=s?a:r.renderHeight;for(let r=0;r<e.length;r++){const[o,A]=e[r];s&&(n.fillStyle=A<=a?t:l),n.fillRect(o-p/2+d*i,A,d,u-A)}h&&H(u,{context:n,sizing:r,color:t,zero:a,zeroColor:A,zeroWidth:h})}(h(!0),{...c,indexInAxis:e.axis.series.indexOf(e),axisSeriesCount:e.axis.series.length,closestSpacing:A.closestSpacing,bounds:l});if("area"===e.rendering)return void function(e,t,{color:n,context:r,sizing:i,zero:o,hasNegatives:a,gradient:s,zeroColor:l,zeroWidth:A,showIndividualPoints:h,negativeColor:c,pointRadius:g,width:d,highlighted:p,shadowColor:u="black",shadowBlur:m=5}){if(r.fillStyle=n,r.shadowColor=u,r.shadowBlur=m,s&&s.length>2){const e=r.createLinearGradient(0,0,0,i.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)}r.fillStyle=e,"gradient"===n&&(r.strokeStyle=e)}else r.fillStyle=n;if(!e.length)return;const C=a?o:i.renderHeight,x=P(t),b=P(t,{splitAtY:o});for(let e of x){r.beginPath();const[t,n]=e[0],[i,o]=e[e.length-1];r.moveTo(t,C);for(let t=0;t<e.length;t++){const[n,i]=e[t];r.lineTo(n,i)}r.lineTo(i,C),r.fill()}p&&(d+=2),d*=2,r.strokeStyle=n,r.lineWidth=d;for(let e of b)if(e.length){if(a){let t=!0;t=e.length>=2?e[1][1]<=o:e[0][1]<=o,r.strokeStyle=t?n:c}r.beginPath();for(let t=0;t<e.length;t++){const[n,i]=e[t];0===t?r.moveTo(n,i):r.lineTo(n,i)}r.stroke()}if(A&&H(C,{context:r,sizing:i,color:n,zero:o,zeroColor:l,zeroWidth:A}),h){r.fillStyle=n;for(let[t,i]of e)c&&a&&(r.fillStyle=i===o&&l?l:i<o?n:c),r.beginPath(),r.arc(t,i,g||8,0,2*Math.PI,!1),r.fill()}}(h(!0),t,{...c,showIndividualPoints:"boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:r,gradient:e.gradient,pointRadius:e.pointRadius,highlighted:n,width:a||e.width||s,shadowColor:i,shadowBlur:o});const g={color:v(e.color,e.index,e.multigrapherSeriesIndex),context:this._context,width:a||e.width||s,shadowColor:i,shadowBlur:o,dashed:e.dashed,dashPattern:e.dashPattern,highlighted:n,showIndividualPoints:"boolean"==typeof e.showIndividualPoints?e.showIndividualPoints:r,getIndividualPoints:h};this._webgl?this._lineProgram.draw(t,g):function(e,{color:t,width:n=1,context:r,shadowColor:i="black",shadowBlur:o=5,dashed:a=!1,dashPattern:s=null,highlighted:l=!1,showIndividualPoints:A=!1,getIndividualPoints:h}){l&&(n+=2),n*=2,r.strokeStyle=t,r.lineWidth=n,r.shadowColor=i,r.shadowBlur=o,a?r.setLineDash(s||[5,5]):r.setLineDash([]);const c=P(e);for(let e of c){r.beginPath();for(let t=0;t<e.length;t++){const[n,i]=e[t];0===t?r.moveTo(n,i):r.lineTo(n,i)}r.stroke()}if(A){r.fillStyle=t;const e=h();for(let[t,i]of e)r.beginPath(),r.arc(t,i,n+4,0,2*Math.PI,!1),r.fill()}}(t,g)}renderBackground(e){e&&(this._webgl?(this._backgroundProgram||(this._backgroundProgram=new U(this._context)),this._backgroundProgram.draw(e)):function({data:e},{context:t}){const n=t.canvas.width,r=t.canvas.height;for(let{minXt:i,maxXt:o,color:a}of e)t.fillStyle=a,t.fillRect(i*n,0,(o-i)*n,r)}(e,{context:this._context}))}async _initializeCanvas(){if(this._sizing=await w(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((async()=>{e?e=!1:t||(t=!0,await this.resize(),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=w(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 V(e){return Math.max(2-Math.log10(Math.abs(e)),0)}function J(e,t=null){if(null===t&&(t=V(e)),isNaN(t)||t>100)return e.toString();const n=e.toFixed(Math.ceil(t));let r=n;return n.includes(".")&&(r=r.replace(/\.?0+$/g,"")),""===r?"0":r}const Z={};function Q(e,t){try{let n=Z[e];if(!n){let t=e;e&&"local"!==e||(t=Intl.DateTimeFormat().resolvedOptions().timeZone),n=new Intl.DateTimeFormat("en-US",{timeZone:t,timeZoneName:"longOffset"}),Z[e]=n}const r=n.formatToParts(t).find((e=>"timeZoneName"===e.type));if(!r)return null;if("GMT"===r.value)return 0;if(!/^GMT[+-]\d{2}:\d{2}$/.test(r.value))return null;const[i,o]=r.value.slice(3).split(":");return 60*parseInt(i)*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 ee(e,t){if(!t){const t=new Date(e);return t.setHours(0,0,0,0),t}const n=Q(t,e);let r=new Date(e);return r.setUTCHours(0,0,0,0),r.valueOf()-e.valueOf()>n&&(r=new Date(r.valueOf()-864e5)),new Date(r.valueOf()-n)}function te(e,{dates:t=!1,precision:n=null,justTime:r=!1,justDate:i=!1,justMonthAndDay:o=!1,clockStyle:a="24h",unitOverride:s,timeZone:l,integersOnly:A=!1,inverseEnumMap:h}={}){return!t||e instanceof Date||(e=new Date(e),!isNaN(e))?e instanceof Date?function(e,{precision:t,justTime:n,justDate:r,justMonthAndDay:i,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=Q(s,e),n=Q("local",e);"number"==typeof t&&"number"==typeof n&&(e=new Date(e.valueOf()+t-n))}const A=l?e.getUTCFullYear():e.getFullYear(),h=(l?e.getUTCMonth():e.getMonth())+1,c=l?e.getUTCDate():e.getDate();if("year"===o)return A.toString();if(r)return l?`${h}/${c}/${A}`:e.toLocaleDateString();if(i)return`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][h-1]} ${c}`;const g=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?`${((g+11)%12+1).toString()}:${d.toString().padStart(2,"0")}`:`${g.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+=g>=12?"pm":"am"),n?m:(l&&(m+=" UTC"),(l?`${h}/${c}/${A}`:e.toLocaleDateString())+" "+m)}(e,{precision:n,justTime:r,justDate:i,justMonthAndDay:o,unitOverride:s,clockStyle:a,timeZone:l}):isNaN(e)?"NaN":h?Math.abs(e-Math.round(e))>1e-10?"":h[Math.round(e)]:A&&Math.abs(e-Math.round(e))>1e-10?"":J(e,n):"Invalid Date"}function ne(e,{precision:t=null,log:n=!1}={}){return null===e?"null":isNaN(e)?"NaN":n?`10^${J(Math.log10(e),t)}`:J(e,t)}const re=32;function ie(){return ie=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ie.apply(this,arguments)}function oe({yLabel:e,y:t,fullYPrecision:n}){return n&&!e?void 0===t?"undefined":null===t?"null":t.toString():"number"==typeof e?n?e.toString():ne(e):e||ne(t)}function ae({axisLabel:e,x:t,y:n,xLabel:r,yLabel:o,textLeft:a,textTop:s,includeSeriesLabel:l,includeXValue:A,includeYValue:h,includeXLabel:c,includeYLabel:g,fullYPrecision:d,formatXOptions:p}){let u=0;return i().createElement("g",null,l&&i().createElement("text",{x:a,y:s+12*u++},e),A&&i().createElement("text",{x:a,y:s+12*u++},c&&"x: ",r||te(t,p)),h&&i().createElement("text",{x:a,y:s+12*u++},g&&"y: ",oe({yLabel:o,y:n,fullYPrecision:d})))}ae.propTypes={axisLabel:a().string,x:a().oneOfType([a().number,a().instanceOf(Date)]),y:a().number,xLabel:a().string,yLabel:a().oneOfType([a().number,a().string]),textLeft:a().number.isRequired,textTop:a().number.isRequired,fullYPrecision:a().bool,formatXOptions:a().object,...B.TooltipOptionsRaw};class se extends i().PureComponent{render(){let e=42;this.props.includeSeriesLabel||(e-=12),this.props.includeXValue||(e-=12),this.props.includeYValue||(e-=12);const t=e/2,n=3-t,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};return i().createElement("div",{className:"grapher-tooltip"},i().createElement("svg",null,this.props.tooltips.map((({x:a,y:s,color:l,pixelY:A,pixelX:h,series:c,index:g,xLabel:d,yLabel:p,fullYPrecision:u},m)=>{const C=(c.name||c.yKey||g).toString(),x=7.5*Math.max(C.length,(d||te(a,r)).length+4,oe({yLabel:p,y:s,fullYPrecision:u}).length+4);let b=this.props.elementWidth<x+14+8,f=1;h>=this.props.elementWidth-(x+14+4)&&(f=-1),h<x+14+4&&-1===f&&(b=!0),null===s&&(b=!0);let y=11;if(f<0?y=-x-y:y+=6,!isFinite(h))return null;const _=`translate(${h},${A})`,B={fullYPrecision:u||this.props.maxPrecision,x:a,y:s,axisLabel:C,xLabel:d,yLabel:p,...o};if(b||this.props.alwaysFixedPosition){y=6;let r=this.props.elementWidth/2-x/2;x>this.props.elementWidth&&!this.props.floating&&(r-=re*this.props.axisCount/2);let o=18;return this.props.floating&&(o="bottom"===this.props.floatPosition?this.props.elementHeight+t+4:-e,this.props.floatDelta&&(o+=this.props.floatDelta)),i().createElement("g",{key:m,className:"tooltip-item tooltip-item-fixed"},i().createElement("circle",{r:4,fill:l,transform:_}),i().createElement("g",{transform:`translate(${r}, ${o})`},i().createElement("path",{stroke:l,d:`M0,0 V-${t} h${x} V${t} h${-x} V0`}),i().createElement(ae,ie({textLeft:y,textTop:n},B))))}return i().createElement("g",{key:m,transform:_,className:"tooltip-item"},i().createElement("circle",{r:4,fill:l}),i().createElement("path",{stroke:l,d:`M${4*f},0 L${7*f*2},-7 V-${t} h${f*x} V${t} h${f*-x} V7 L${4*f},0`}),i().createElement(ae,ie({textLeft:y,textTop:n},B)))}))))}}se.defaultProps={includeSeriesLabel:!0,includeXLabel:!0,includeYLabel:!0,includeXValue:!0,includeYValue:!0},se.propTypes={mouseX:a().number.isRequired,mouseY:a().number.isRequired,elementHeight:a().number.isRequired,elementWidth:a().number.isRequired,tooltips:a().arrayOf(a().shape({x:a().oneOfType([a().number,a().instanceOf(Date)]),y:a().number,pixelY:a().number,color:a().string,xLabel:a().string,yLabel:a().oneOfType([a().number,a().string]),fullYPrecision:a().bool})),axisCount:a().number.isRequired,maxPrecision:a().bool.isRequired,clockStyle:a().oneOf(["12h","24h"]),timeZone:a().string,...B.TooltipOptionsRaw};class le extends i().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(", "),[r,i,o]=t.split("/"),a=`${r.padStart(2,"0")}/${i.padStart(2,"0")}/${o}`,[s,l]=n.split(" "),[A,h]=s.split(":");return`${a} ${A.padStart(2,"0")}:${h} ${l}`}render(){const{x:e,y:t,showing:n,value:r}=this.props.contextMenu,o={left:e,top:t,width:"150px"};if(!n||!r||"Invalid Date"===r.toLocaleString())return null;const a=r instanceof Date?this.formatDateTime(r.toLocaleString()):r;return i().createElement("div",{className:"grapher-context-menu",style:o},i().createElement("div",{className:"menu-item"},i().createElement("div",{className:"menu-text",autoFocus:!0,ref:this.setTextRef},a)))}}function Ae(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")}function he(e,t={}){const n=Ae(e,{useSimpleData:!0,data:t.data});if(!s.includes(n))throw new Error(`Cannot normalize ${n} (expected a simple type)`);const r={tuples:ge,values:ce,objects:pe}[n](t.data||e.simpleData||e.data,e,t);if(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 r=n[0];n[0]=new Date(new Date(n[0]).valueOf()+e.shiftXBy),isNaN(n[0])&&(n[0]=t.stateController.enumToNumber(r,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 r}function ce(e,t,n){const r=[];for(let i=0;i<e.length;i++){let o=e[i];"string"==typeof o&&(o=n.stateController.enumToNumber(o,t)),"boolean"==typeof o&&(o=+o),r.push([i+(n.valueXStart||0),o])}return r}function ge(e,t,n){return[...e.map((([e,r])=>{if(void 0===r&&(r=null),"string"==typeof e){const r=e;e=new Date(e),isNaN(e)&&(e=n.stateController.enumToNumber(r,t,!0))}return"string"==typeof r&&(r=n.stateController.enumToNumber(r,t)),"boolean"==typeof r&&(r=+r),[e,r]}))]}function de(e,t,n){const r=e.getUint32(t+2+Uint32Array.BYTES_PER_ELEMENT*n,!0);if(0===r)return null;const i=e.getUint8(r);if(0===i)return e.getFloat64(t+r+1,!0);if(1===i||6===i)return null;if(3===i)return new Date(e.getFloat64(t+r+1,!0));throw new Error(`Binary format type ${i} not supported`)}function pe(e,t,n){if(!t.xKey||"string"!=typeof t.xKey)throw new Error("xKey must be provided in the series");if(!t.yKey||"string"!=typeof t.yKey)throw new Error("yKey must be provided in the series");const r=[];for(let i of e)if(i.buffer instanceof ArrayBuffer){const e=new DataView(i.buffer),n=i.channels[t.xKey],o=i.channels[t.yKey];for(let t of i.offsets)r.push([de(e,t,n),de(e,t,o)])}else if(Array.isArray(i[t.yKey]))if(i[t.yKey].length&&!Array.isArray(i[t.yKey][0])&&"object"==typeof i[t.yKey][0])for(let e of i[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(...i[t.yKey]);else{let e=i[t.yKey];void 0===e&&(e=null);let o=i[t.xKey];"string"==typeof o&&(o=new Date(o)),"string"==typeof e&&(e=n.stateController.enumToNumber(e,t)),"boolean"==typeof e&&(e=+e),r.push([o,e])}return r}function ue(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]&&(e[t]=0);return e.initial=n,e.dates=t,e}function me(e,{percentile:t=100,percentileAsymmetry:n=0}={}){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:r=0}={}){let i=!1;t.minX=e[0][0],t.minX instanceof Date&&(t.minX=t.minX.valueOf(),i=!0),t.maxX=e[e.length-1][0],t.maxX instanceof Date&&(t.maxX=t.maxX.valueOf(),i=!0);const o=e.filter((([e,t])=>"number"==typeof t)).sort((([e,t],[n,r])=>t-r));if(!o.length)return ue(t,{dates:i});const a=Math.min(Math.abs(r),(100-n)/2)*(r<0?-1:1),s=(100-n)/2+a,l=(100-n)/2-a,A=Math.floor((o.length-1)*s/100),h=Math.floor((o.length-1)*(100-l)/100);return t.minY=o[A][1],t.maxY=o[h][1],ue(t,{dates:i})}(e,r,{percentile:t,percentileAsymmetry:n});let i=!1,o=null;for(let[t,n]of e){if(t instanceof Date&&(t=t.valueOf(),i=!0),("number"!=typeof r.minX||t<r.minX)&&(r.minX=t),("number"!=typeof r.maxX||t>r.maxX)&&(r.maxX=t),"number"==typeof o&&"number"==typeof t){const e=t-o;("number"!=typeof r.closestSpacing||e<r.closestSpacing)&&(r.closestSpacing=e)}o=t,"number"==typeof n&&(("number"!=typeof r.minY||n<r.minY)&&(r.minY=n),("number"!=typeof r.maxY||n>r.maxY)&&(r.maxY=n))}return ue(r,{dates:i})}function Ce(e){const t={minX:null,maxX:null,minY:null,maxY:null,closestSpacing:null,dates:!1,initial:!0};for(let{minX:n,maxX:r,minY:i,maxY:o,dates:a,initial:s,closestSpacing:l}of e)a&&(t.dates=!0),s||(t.initial=!1,(null===t.minX||n<t.minX)&&(t.minX=n),(null===t.maxX||r>t.maxX)&&(t.maxX=r),(null===t.closestSpacing||l<t.closestSpacing)&&(t.closestSpacing=l),(null===t.minY||i<t.minY)&&(t.minY=i),(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 xe(e,{expandYWith:t=[],extendXForNBars:n=0}){const r=Object.assign({},e);for(let e of t)null!=e&&(("number"!=typeof r.minY||e<r.minY)&&(r.minY=e),("number"!=typeof r.maxY||e>r.maxY)&&(r.maxY=e));r.unscaledMinY=r.minY,r.unscaledMaxY=r.maxY;const i=r.maxY-r.minY,o=r.minY+i/2;if(r.minY=o-1.05*i/2,r.maxY=o+1.05*i/2,r.minY===r.maxY&&null!==r.minY&&(r.minY>0?(r.minY*=.95,r.maxY*=1.05):r.minY<0?(r.minY*=1.05,r.maxY*=.95):(r.minY-=1,r.maxY+=1)),n&&r.minX!==r.maxX&&null!==r.minX&&null!==r.maxX){const e=(r.maxX-r.minX)/n;r.minX-=e/2,r.maxX+=e/2}return r}function be(e,t,n={},r=0,i=void 0){if(void 0===i&&(i=e.length-1),0===e.length)return n.returnIndex?-1:[null,null];const o=Math.floor((r+i)/2);if(t===e[o][0]||e[o][0]instanceof Date&&e[o][0].valueOf()===t)return n.returnIndex?o:e[o];if(r===i)return e[r][0]<t&&"before"===n.searchType||e[r][0]>t&&"after"===n.searchType?n.returnIndex?r:e[r]:n.returnIndex?-1:[null,null];if(i-1===r){let o;return o="before"===n.searchType?r:"after"===n.searchType||Math.abs(e[r][0]-t)>Math.abs(e[i][0]-t)?i:r,n.returnIndex?o:e[o]}return t>e[o][0]?be(e,t,n,o,i):t<e[o][0]?be(e,t,n,r,o):void 0}function fe({data:e,swap:t,minX:n,maxX:r,ignoreDiscontinuities:i,square:o}){if(!e.length||e.length&&n>e[e.length-1][0]||e.length&&r<e[0][0])return{data:[[n,null],[r,null]],firstAdded:!0,lastAdded:!0};let a,s=be(e,n,{searchType:"before",returnIndex:!0})||0,l=be(e,r,{searchType:"after",returnIndex:!0})||0;for(-1===l&&(l=0);s>=0&&e[s][0]>=n;)s--;for(;l<e.length&&e[l][0]<=r;)l++;let A=!1,h=!1,c=!1,g=s,d=l;if(i){for(;g>=0&&null===e[g][1];)g--;for(;d<e.length&&null===e[d][1];)d++}if(t){if(a=t.data,t.lastAdded&&a.pop(),n===t.minX&&(A=!0),s!==t.beforeIndex){A=!1,t.firstAdded&&a.shift();let r=t.beforeIndex;for(;r>=0&&a.length&&a[0][0]>=n;)i&&!e[r][1]&&0!==e[r][1]||a.unshift(e[r]),r--;for(;r<e.length&&a.length&&a[0][0]<n;)a.shift(),r++}if(i&&!t.ignoreDiscontinuities&&(a=a.filter((([e,t])=>null!=t))),s===t.beforeIndex&&t.firstAdded){h=!0;let t=s+1;if(i)for(;t<e.length&&null===e[t][1];)t++;-1===g&&a.length?a[0]=[n,null]:o&&a.length?a[0]=[n,e[g][1]]:a.length&&(a[0]=[n,ye(e,g,t,n)]),e[s+1][0]===a[0][0]&&e[s+1][1]===a[0][1]&&(h=!1)}let c=t.afterIndex;if(t.ignoreDiscontinuities&&!i){let t=s+1,n=0;for(h&&n++;n<=a.length&&t<e.length&&t<l;)e[t][0]<=r&&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>=c&&(c=t+1)),t++,n++}let d=c||0;for(;d<e.length&&e[d][0]<=r;)e[d][0]>=n&&(i&&!e[d][1]&&0!==e[d][1]||a.push(e[d])),d++;for(;a.length&&a[a.length-1][0]>r;)a.pop()}else a=e.slice(s+1,l),i&&(a=a.filter((([e,t])=>null!=t)));if(a.length||(a=o?g<0?[[n,null],[r,null]]:[[n,e[g][1]],[r,e[g][1]]]:[[n,ye(e,g,d,n)],[r,ye(e,g,d,r)]],h=!0,c=!0),!A){let t=s+1;if(i)for(;t<e.length&&null===e[t][1];)t++;a.length&&a[0][0]>n&&(h=!0,-1===g?a.unshift([n,null]):o?a.unshift([n,e[g][1]]):a.unshift([n,ye(e,g,t,n)]))}if(a.length&&a[a.length-1][0]<r){c=!0;let t=l-1;if(i)for(;t>=0&&null===e[t][1];)t--;d===e.length?a.push([r,null]):o?a.push([r,a[a.length-1][1]]):a.push([r,ye(e,t,d,r)])}if(1===a.length){let t,i;o?(t=g<0?[n,null]:[n,e[g][1]],i=[r,a[0][1]]):(t=[n,ye(e,g,s+1,n)],i=[r,ye(e,l-1,d,r)]),a.unshift(t),a.push(i),h=!0,c=!0}return{data:a,minX:n,maxX:r,beforeIndex:s,afterIndex:l,firstAdded:h,lastAdded:c,ignoreDiscontinuities:i}}function ye(e,t,n,r){if(t<0||n<0)return null;if(t>=e.length||n>=e.length)return null;if(t===n)return e[t][1];const[i,o]=e[t],[a,s]=e[n];if(r===i&&null!==o)return o;if(r===a&&null!==s)return s;if(null===o||null===s)return null;const l=(r-i)/(a-i);return l<0||l>1?null:l*(s-o)+o}function _e({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}}let Be;function we({data:e,swap:t,renderWidth:n,renderHeight:r,minX:i,maxX:o,minY:a,maxY:s,scale:l,dataChanged:A}){t&&t.yValues.length!==n&&(t=null);const h=t&&t.nullMask||new Uint8Array(n);h.fill(0);const c=new Float64Array(n),g=new Float64Array(n),d=new Float64Array(n),p=_e({minY:a,maxY:s,scale:l}),u={data:e,renderWidth:n,renderHeight:r,minX:i,maxX:o,minY:a=p.minY,maxY:s=p.maxY,scale:l};let m,C;if(Be){let n=0;const r=t&&t.dataNullMask&&t.dataF64,a=!A&&r&&t.minX===i&&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)),C=new Uint8Array(Math.floor(e.length*n)),a&&(C.set(t.dataNullMask),m.set(t.dataF64))}else m=t.dataF64,C=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]?C[t]=1:C[t]=0;Be.selected_space_to_render_space(e.length,m,C,u,h,c,g,d)}else!function({data:e,renderWidth:t,renderHeight:n,minX:r,maxX:i,minY:o,maxY:a,scale:s},{nullMask:l,yValues:A,minYValues:h,maxYValues:c}){let g=0,d=g-1;for(let p=0;p<t;p++){const u=p/(t-1)*(i-r)+r;let m=null,C=null;for(g>0&&g<=e.length&&null===e[g-1][1]&&g--,g<e.length-2&&e[g+1][0]<u&&g++;g<e.length-2&&e[g+1][0]<u;g++){const t=e[g][1];null!==t&&((null===m||t<m)&&(m=t),(null===C||t>C)&&(C=t))}if(h[p]=null===m?0:n*(1-(("log"===s?Math.log10(m):m)-o)/(a-o)),c[p]=null===C?0:n*(1-(("log"===s?Math.log10(C):C)-o)/(a-o)),g>=e.length-1||null===e[g][1]||null===e[g+1][1]){const t=g>=e.length-1?null:e[g][1];l[p]=null===t|(null===m)<<1|(null===C)<<2,A[p]=null===t?0:n*(1-(("log"===s?Math.log10(t):t)-o)/(a-o)),g++;continue}const[x,b]=e[g],[f,y]=e[g+1];let _=(u-x)/(f-x)*(y-b)+b;d!==g&&(_=b),A[p]=null===_?0:n*(1-(("log"===s?Math.log10(_):_)-o)/(a-o)),l[p]=null===_|(null===m)<<1|(null===C)<<2,d=g}}(u,{nullMask:h,yValues:c,minYValues:g,maxYValues:d});return{nullMask:h,yValues:c,minYValues:g,maxYValues:d,dataF64:m,dataNullMask:C,minX:i,maxX:o,length:e.length}}function Ee(e,{series:t,inDataSpace:n}){const r=[];let i=0;for(let o of e){const e=ve(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[i++][0];t.square&&r.length>0&&r.push([o,r[r.length-1][1]]),r.push([o,e])}continue}if(t.ignoreDiscontinuities&&null==e)continue;const a=n[i++][0];t.square&&r.length>0&&r.push([a,r[r.length-1][1]]),r.push([a,o])}return r.length!==n.length&&console.warn("Flattening didn't give the same length as it has in data space"),r}function ve(e,t){return t.yKey?e[t.yKey]:Array.isArray(e)?1===e.length?e[0]:e[1]:e}function ke(e,t){return t.xKey?e[t.xKey]:Array.isArray(e)?e[0]:e}function Se({mouseX:e,mouseY:t,sizing:n},r){const{x:i,y:o}=r,a=r.series.axis.scale,s=r.series.axis.currentBounds,{minY:l,maxY:A}=_e({...s,scale:a}),h=(i-s.minX)/(s.maxX-s.minX)*n.elementWidth,c=(1-(("log"===a?Math.log10(o):o)-l)/(A-l))*n.elementHeight,g=Math.sqrt((h-e)**2+(c-t)**2),d=Math.abs(h-e);Object.assign(r,{pixelWidth:n.elementWidth,pixelX:h,pixelY:isNaN(c)?n.elementHeight/2:c,xDistance:d,distance:g})}le.propTypes={contextMenu:a().shape({x:a().number.isRequired,y:a().number.isRequired,showing:a().bool.isRequired,value:a().oneOfType([a().instanceOf(Date),a().number,a().object])}).isRequired},Promise.all([n.e(537),n.e(831)]).then(n.bind(n,1599)).then((e=>{Be=e}));const De={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 Ye({data:e,swap:t,minX:n,maxX:r,renderWidth:i,dataChanged:o}){const a=2*i;let s;if(!o&&t&&t.minX===n&&t.maxX<=r&&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:r,length:e.length};const l=[],A=(r-n)/a;let h=null,c=null,g=0;e.length&&l.push(e[0]);for(let e of s){const[t,r]=e;if(null===r)continue;const i=Math.floor((t-n)/A);i!==g&&(h&&c&&(h===c?l[l.length-1]!==h&&l.push(h):h[0]<c[0]?l.push(c,h):l.push(h,c)),h=null,c=null,g=i),(!h||r<h[1])&&(h=e),(!c||r>c[1])&&(c=e)}return h&&c&&(h===c?l.push(h):h[0]<c[0]?l.push(c,h):l.push(h,c)),e.length>=2&&e[e.length-1]!==h&&e[e.length-1]!==c&&l.push(e[e.length-1]),{data:l,minX:n,maxX:r,length:e.length}}function Fe(e,t){let n=e.name||e.yKey;return n||(n=t.toString()),n}let Xe;const Re=Promise.all([n.e(537),n.e(831)]).then(n.bind(n,1599)).then((e=>{Xe=e}));class Me extends L{constructor({defaultBoundsCalculator:e,customBoundsSelectors:t,requireWASM:n,defaultShowIndividualPoints:r,defaultShowSidebar:i,defaultShowAnnotations:o,defaultShowOptions:a,syncPool:s,grapherID:l,sharedDataCache:A,sharedSubscriptions:h,fullscreen:c}){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=r||!1,this._autoscaleY=!0,this._percentile=100,this._percentileAsymmetry=0,this._showingOptions=a,this._maxPrecision=!1,this._showingSidebar=i||!1,this._showingAnnotations=o||!1,this._grapherID=l,this._fullscreen=c||!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(De[e])return De[e];for(let{label:n,calculator:r}of t)if(e===n)return r;return De.all}(e,t),this._boundsHistory=[this._boundsCalculator],this._boundsIndex=0,this._dataCache=A||new Map,this._subscriptions=h||new Map,this._subscriptionsShared=!!h,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 r=new Set(e);for(let e of n)r.has(e.originalSeries)||this._removeSeries(e);this._series.splice(0);for(let t=0;t<e.length;t++){const n=e[t];let r=this._seriesFromOriginalSeries.get(n);r||(r={...n,originalSeries:n},this._seriesFromOriginalSeries.set(n,r),r.defaultAlwaysTooltipped&&(this._alwaysTooltipped.add(r),this._tooltipsChanged=!0,this.deferredEmit("always_tooltipped_changed",this._alwaysTooltipped))),r.index=t,this._series.push(r),this._assignAxisTo(r),r.hidden&&this._hideSeries(r)}for(let n=0;n<t.length;n++){const r=t[n];r.index=n+e.length,this._series.push(r)}this.deferredEmit("series_changed",this._series),this._dataChanged=!0,this._markDirty()}_markDirty(){if(this._frameRequested)return;if(this._requireWASM&&!Xe)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 r=performance.now(),i=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 A=performance.now(),h=performance.now();this._contextMenuChanged&&this._recalculateContextMenu();const c=performance.now(),g=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(),C={frameExecution:m-t,frameRequestAndExecution:m-e,generators:s-a,dataProcessing:r-n,renderPipeline:o-i,tooltips:A-l,contextMenu:c-h,annotations:d-g,callbacks:u-p};this.lastLoopTime=C,this._timingFrameCount&&(this._timingBuffer.length<this._timingFrameCount?this._timingBuffer.push(C):this._timingBuffer[this._timingIndex%this._timingFrameCount]=C,this._timingIndex++),this.emit("render_time",m-t,C)}))}deferredEmit(...e){this._deferredEmissions[e[0]]=e}deferredPriorityEmit(...e){this._deferredPriorityEmissions[e[0]]=e}_seriesToSimpleData(e){const t=Ae(e);if(s.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 r=t.values().next().value;if(n=r.simpleData,!n)throw new Error(`Cannot find simpleData in ${r.name||r.yKey||r.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 r=!1;for(let t of n)if(e.has(t)){r=!0;break}r||(this._subscriptions.get(t).unsubscribe(),this._subscriptions.delete(t),this._observablesToSeries.delete(t))}for(let[t,n]of this._generatorsToSeries){let r=!1;for(let t of n)if(e.has(t)){r=!0;break}r||(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(r=t,void 0===(n=this._generatorCallArgs.get(e))||void 0===r?n===r:n.minX===r.minX&&n.maxX===r.maxX&&n.sizing.elementWidth===r.sizing.elementWidth&&n.sizing.renderWidth===r.sizing.renderWidth)return;var n,r;this._generatorCallArgs.set(e,t);const i=await Promise.resolve(e(t));if(i&&this._generatorsToSeries.has(e))if(this._dataChanged=!0,this._markDirty(),"function"==typeof i.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(i)||this._observablesToSeries.set(i,new Set),this._observablesToSeries.get(i).add(t);this._listenToObservableData({observable:i,currentData:t})}else{this._dataCache.set(e,i);for(let t of this._generatorsToSeries.get(e))t.simpleData=i}}_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:r,series:i,alwaysTooltipped:o,savedTooltips:a,allTooltipped:s,closestSpacing:l}){a=a.filter((e=>e.series.axis));for(let e of a)Se({mouseX:t,mouseY:n,sizing:r},e);if(!e)return{mouseX:t,mouseY:n,elementWidth:r.elementWidth,elementHeight:r.elementHeight,tooltips:[...a]};const A=[];let h=1/0;for(let e=0;e<i.length;e++){const a=i[e];if(a.hidden)continue;const c=a.axis,g=c.scale,d=c.currentBounds,{minY:p,maxY:u}=_e({...d,scale:g}),m=t/r.elementWidth*(d.maxX-d.minX)+d.minX;let C=a.inDataSpace;a.ignoreDiscontinuities&&(C=C.filter((e=>"number"==typeof e[1])));const x=be(C,m,{returnIndex:!0}),b=C[x];if(!b)continue;const[f,y]=b;if(null===f)continue;let _=(f-d.minX)/(d.maxX-d.minX)*r.elementWidth;const B=(1-(("log"===g?Math.log10(y):y)-p)/(u-p))*r.elementHeight;if(B>r.elementHeight||B<0)continue;const w=o.has(a)||s;let E=20,k=20,S=20;if("bar"===a.rendering){const e=a.axis.series.indexOf(a),t=a.axis.series.length,{totalBarWidth:n,barWidth:i}=K({closestSpacing:l,bounds:d,sizing:r,axisSeriesCount:t});_-=n/2/r.pixelRatio,_+=i*(e+.5)/r.pixelRatio,E=i/2/r.pixelRatio,k=100,S=E+k}const D=Math.abs(_-t),Y=Math.abs(B-n),F=Math.sqrt(D**2+(B-n)**2);if(D>E||!w&&Y>k||!w&&F>S)continue;let X,R;const M=a.simpleData||a.data,T=M.length&&!!a.hasEnum;if(a.xLabel||a.yLabel||T){let e;e=M.length===C.length?M[x]:Ee(M,{series:a,inDataSpace:C})[x][1],a.xLabel?X=e[a.xLabel]:a.hasXEnum&&(X=ke(e,a)),a.yLabel?R=e[a.yLabel]:T&&(R=ve(e,a))}F<h&&(h=F);let P=v(a.color,e,a.multigrapherSeriesIndex);y<0&&a.negativeColor?P=a.negativeColor:0===y&&a.zeroLineColor&&(P=a.zeroLineColor),A.push({pixelWidth:r.elementWidth,pixelX:_,pixelY:isNaN(B)?r.elementHeight/2:B,x:f,y,color:P,distance:F,xDistance:D,index:e,series:a,xLabel:X,yLabel:R,fullYPrecision:a.fullYPrecision,ignoreYDistance:w})}const c=A.filter((({distance:e,ignoreYDistance:t})=>e===h||t)).sort(((e,t)=>t.distance-e.distance));return{mousePresent:e,mouseX:t,mouseY:n,elementWidth:r.elementWidth,elementHeight:r.elementHeight,unsavedTooltipsCount:c.length,tooltips:[...a,...c]}}({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,r=null;for(let i of this._series){const o=i.axis.currentBounds;r=this._contextMenuPosition.x-e.left,this._contextMenuPosition.x>2*(e.right-t.elementWidth)&&(r-=130),n="timestamp"===i.xKey||"time"===i.xKey||"date"===i.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:r,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:r}){const i=new Set(t.map(((e,t)=>({name:Fe(e,t),hidden:e.hidden}))).filter((({hidden:e})=>!e)).map((({name:e})=>e))),{elementWidth:o}=n,{minX:a,maxX:s}=r;return{annotations:e.filter((e=>{if(!e.series)return!0;for(let t of e.series)if(i.has(t))return!0;return!1})).map((e=>{let t=e.x;"string"==typeof t?t=new Date(t).valueOf():t instanceof Date&&(t=t.valueOf());let n=e.xEnd||t;"string"==typeof n?n=new Date(n).valueOf():n instanceof Date&&(n=n.valueOf());const r=Math.min(t,n),i=Math.max(t,n),l=(r-a)/(s-a)*o,A=(i-a)/(s-a)*o,h=Math.max(A-l,1);return{...e,pixelX:l,width:h}})),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);t.inDataSpace=he({...t,data:n},{stateController:this}),t.simpleDataSliceStart=n.length,t.dataBounds=me(t.inDataSpace),"bar"===t.rendering&&(t.dataBounds=xe(t.dataBounds,{extendXForNBars:t.inDataSpace.length})),e.push(t.dataBounds),t.expandYWith&&this._expandYWith.push(t.expandYWith)}this._unsubscribeFromStaleSeries(),this._dataBounds=Ce(e),this._recalculateSelection({disableSwap:!0});for(let e of this._series)e.hidden||(e.selectedBounds=me(e.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry}));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,r=new Set;for(let t of e)r.add(t);for(let r of e){if(n.add(r.axis),!r.inDataSpace)throw new Error("inDataSpace must be present for onDataAdd to be called");const e=this._seriesToSimpleData(r);let i;r.inDataSpace.length&&(i=r.inDataSpace[r.inDataSpace.length-1][1]);const o=he(r,{data:e.slice(r.simpleDataSliceStart||0),valueXStart:r.inDataSpace.length,prevY:i,stateController:this});if(t.set(r,o),r.simpleDataSliceStart=e.length,o.length<32)r.inDataSpace.push(...o);else for(let e of o)r.inDataSpace.push(e);let a=me(o);"bar"===r.rendering&&(a=xe(a,{extendXForNBars:r.inDataSpace.length})),r.dataBounds=Ce([r.dataBounds,a]),this._dataBounds=Ce([this._dataBounds,a]),r.newPointCount=o.length,r.newDataBounds=a}const i=this._selection;this._recalculateSelection();for(let n of e){if(!n.inSelectedSpace.data.length){n.selectedBounds=me(n.inSelectedSpace.data);continue}const e=n.inSelectedSpace.data[0][0],r=n.inSelectedSpace.data[n.inSelectedSpace.data.length-1][0];if(!(i.minX>=e&&i.maxX<=r)||100!==this._percentile){n.selectedBounds=me(n.inSelectedSpace.data,{percentile:this._percentile,percentileAsymmetry:this._percentileAsymmetry});continue}const o=t.get(n).filter((e=>e[0]>=this._selection.minX&&e[0]<=this._selection.maxX));n.newSelectedData=o,n.selectedBounds=Ce([n.selectedBounds,me(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]),e.currentBounds=e.targetBounds;continue}const t=[],n=[];for(let r of e.series)t.push(r.selectedBounds),r.expandYWith&&n.push(...r.expandYWith),"bar"===r.rendering&&n.push(r.dataBounds.minY,r.dataBounds.maxY);e.selectedDataBounds=Ce(t),e.targetBounds=e.currentBounds=xe(e.selectedDataBounds,{expandYWith:n})}this.deferredPriorityEmit("axis_bounds_changed",this._axes.map((({currentBounds:e})=>e)))}_recalculateSelection({disableSwap:e=!1}={}){this._globalBounds=xe(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.inDataSpace,swap:e?null:t.inSelectedSpace,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={day:"white",export:"transparent",night:"black"}[this._theme]||"black",n=void 0;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}),this.rangeGraphRenderer&&this.rangeGraphRenderer.sizing&&this.rangeGraphRenderer.render(e,e.inRenderSpaceRangeGraph,{shadowColor:"transparent",shadowBlur:0,width:1,bounds:this._globalBounds,globalBounds:this._globalBounds})}}}_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:r}=e.axis,i=Math.ceil(this.primaryRenderer.sizing.renderWidth/2),o=Math.ceil(this.primaryRenderer.sizing.renderHeight);e.inCondensedSelectedSpacePrimary=Ye({data:e.inSelectedSpace.data,swap:e.inCondensedSelectedSpacePrimary,minX:n.minX,maxX:n.maxX,renderWidth:i,dataChanged:t}),e.inRenderSpacePrimary=we({data:e.inCondensedSelectedSpacePrimary.data,swap:e.inRenderSpacePrimary,minX:n.minX,maxX:n.maxX,minY:n.minY,maxY:n.maxY,renderWidth:i,renderHeight:o,scale:r,dataChanged:t}),e.inBackgroundSpacePrimary=function({data:e,background:t,minX:n,maxX:r}){if(!t)return null;const i=[];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)");i.push(Object.assign({key:e,comparator:"custom",comparedAgainst:null},n));continue}if("null"===e){i.push({evaluator:e=>null===e&&n,color:n,key:e,comparator:"=",comparedAgainst:null});continue}const[t,r]=e.split(" ");if(!t||!r||isNaN(parseFloat(r)))throw new Error("Invalid background declaration: "+e);const o=parseFloat(r);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}i.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 A of a?[a.condition,...i]:i){const i=A.evaluator(l);if(a){if(a.color===i)break;let h=s;if(t>0){let[n,r]=e[t-1];n instanceof Date&&(n=n.valueOf()),h=null===a.condition.comparedAgainst?s:null===l?n:n+(A.comparedAgainst-r)/(l-r)*(s-n)}o.push({...a,maxX:h,maxXt:(h-n)/(r-n)}),a=null}if(i){let o=s;if(t>0){let[n,r]=e[t-1];n instanceof Date&&(n=n.valueOf()),o=null===A.comparedAgainst?n:null===r?s:n+(A.comparedAgainst-r)/(l-r)*(s-n)}a={minX:o,minXt:(o-n)/(r-n),color:i,condition:A};break}}}return a&&o.push({...a,maxX:e[e.length-1][0],maxXt:(e[e.length-1][0]-n)/(r-n)}),{data:o}}({data:e.inCondensedSelectedSpacePrimary.data,background:e.background,swap:e.inBackgroundSpacePrimary,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,r=this._globalBounds,i=Math.ceil(this.rangeGraphRenderer.sizing.renderWidth/2),o=Math.ceil(this.rangeGraphRenderer.sizing.renderHeight);e.inSelectedSpaceRangeGraph=fe({data:e.inDataSpace,swap:e.inSelectedSpaceRangeGraph,minX:r.minX,maxX:r.maxX,ignoreDiscontinuities:e.ignoreDiscontinuities,square:e.square}),e.inCondensedSelectedSpaceRangeGraph=Ye({data:e.inSelectedSpaceRangeGraph.data,swap:e.inCondensedSelectedSpaceRangeGraph,minX:r.minX,maxX:r.maxX,renderWidth:i,dataChanged:t}),e.inRenderSpaceRangeGraph=we({data:e.inCondensedSelectedSpaceRangeGraph.data,swap:e.inRenderSpaceRangeGraph,minX:r.minX,maxX:r.maxX,minY:r.minY,maxY:r.maxY,renderWidth:i,renderHeight:o,scale:n,dataChanged:t})}_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 r=e.axis,i=r.series.indexOf(e);if(-1===i)throw new Error("Series not present in axis");r.series.splice(i,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,r]=e.axis.split("-");t=function({axes:e,side:t,number:n}){let r;n=n&&parseInt(n)||0;let i=0;for(let o of e)if(o.side===t){if(i===n){r=o;break}i++}return r}({axes:this._axes,side:n,number:r}),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 r=this._observablesToSeries.get(n);r&&(r.delete(e),0===r.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,r]of Object.entries(n))t[e]=(t[e]||0)+r;for(let[n,r]of Object.entries(t))t[n]=r/e.length;return t}(this._timingBuffer)}get exportedAxes(){const e=new Map;let t=0,n=0;for(let r of this._axes){let i;"left"===r.side?(i=`left-${t}`,t++):(i=`right-${n}`,n++);for(let t of r.series)e.set(t,i)}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:r}of e)t[n]=r,this._boundsCalculator===this._customBoundsSelectors[n]&&this._boundsCalculator!==r&&(this.boundCalculator=r);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:r},{elementWidth:i,elementHeight:o,selection:a,axes:s}){if(Math.abs(t-e)<1||Math.abs(r-n)<1)return;const l=e/i*(a.maxX-a.minX)+a.minX,A=t/i*(a.maxX-a.minX)+a.minX,h=[];for(let{currentBounds:e,scale:t}of s){const i=_e({...e,scale:t});let a=(1-n/o)*(i.maxY-i.minY)+i.minY,s=(1-r/o)*(i.maxY-i.minY)+i.minY;"log"===t&&(s=Math.pow(10,s),a=Math.pow(10,a)),h.push({minX:l,maxX:A,minY:s,maxY:a})}return()=>({minX:l,maxX:A,byAxis:h})}(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:r,mouseY:i,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 i)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 i)return;const l=r||e-s.boundingRect.left,A=i||t-s.boundingRect.top;this._tooltipState.mousePresent&&l===this._tooltipState.mouseX&&A===this._tooltipState.mouseY||(this._tooltipsChanged=!0,this._tooltipState.mousePresent=!0,this._tooltipState.mouseX=l,this._tooltipState.mouseY=A,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 r of this._series){const i=r.axis.currentBounds,o=(e-t.left)/n.elementWidth*(i.maxX-i.minX)+i.minX;this.emit("series_click",{x:o,series:r})}}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.ignoreYDistance&&n.distance>20)return t;const r=t.findIndex((e=>e.x===n.x&&e.y===n.y));return-1===r?[...t,n]:t.filter(((e,t)=>t!==r))}({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 r=t&&0!==t,i=n===this._grapherID;r&&i?(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 r=this._enumMap[e];if("number"==typeof r)return r;const i=Object.keys(this._enumMap).length;return this._enumMap[e]=i,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),i}triggerResize(){this._mustResize=!0,this._markDirty()}}function Te(e,t,n=null,i=[]){if("function"==typeof n){const e=n;n=()=>e}const[o,a]=(0,r.useState)(n);return(0,r.useEffect)((()=>{const n=e=>{if("function"==typeof e){const t=e;e=()=>t}a(e)};return e.on(t,n),()=>{e.off(t,n)}}),[...i,a,e]),o}function Pe(e){return Te(e,"primary_size_change",e.primaryRenderer?e.primaryRenderer.sizing:{elementWidth:0,elementHeight:0,renderWidth:0,renderHeight:0})}function ze(e){return Te(e,"axes_changed",e.axes)}function $e(e){return Te(e,"series_changed",e.series)}function Ie(e){return Te(e,"highlighted_series_changed",e.highlightedSeries)}function Oe(e){return Ne(e).length}function Le(e){return We(e).length}function Ne(e){return Te(e,"right_axes_changed",e.rightAxes)}function We(e){return Te(e,"left_axes_changed",e.leftAxes)}function Ge(e){return Te(e,"axis_bounds_changed",e.axes.map((({currentBounds:e})=>e)))}function qe(e){return Te(e,"autoscale_y_changed",e.autoscaleY)}function Ue(e){return Te(e,"showing_options_changed",e.showingOptions)}function He(e){return Te(e,"max_precision_changed",e.maxPrecision)}function Ke(e){return Te(e,"showing_sidebar_changed",e.showingSidebar)}function je(e){return Te(e,"showing_annotations_changed",e.showingAnnotations)}function Ve(e){return Te(e,"primary_size_change",e.sizing)}function Je(e){return Te(e,"theme_change",e.theme)}class Ze extends i().PureComponent{render(){const{bodyHeight:e,annotationState:t}=this.props,{annotations:n,elementWidth:r}=t;return i().createElement("div",{className:"grapher-annotations"},n.map((({pixelX:t,width:n,content:o,lineOnly:a},s)=>{if(a)return i().createElement("div",{key:s,className:"grapher-annotation",style:{left:t}},i().createElement("div",{className:"annotation-marker",style:{width:n,height:e}}));const l={top:21*s};return r-t<5.5*o.length?l.left=t-r:l.left=0,i().createElement("div",{key:s,className:"grapher-annotation",style:{left:t}},i().createElement("div",{className:"annotation-marker",style:{width:n,height:e}}),i().createElement("div",{className:"annotation-text",style:l},o))})))}}Ze.propTypes={annotationState:a().shape({annotations:a().arrayOf(a().object).isRequired,elementWidth:a().number.isRequired}),bodyHeight:a().number,lineOnly:a().bool};const Qe=i().memo(et);function et({stateController:e,draggablePoints:t,onPointDrag:n,onDraggablePointsDoubleClick:r}){const o=Ge(e)[0],a=Ve(e);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 i().createElement("div",{className:"grapher-draggable-points",onDoubleClick:s},i().createElement("svg",{width:a.elementWidth,height:a.elementHeight},t.map(((e,t)=>{const r=(e.x-o.minX)/(o.maxX-o.minX),s=1-(e.y-o.minY)/(o.maxY-o.minY);if(r<0||r>1||s<0||s>1)return null;const l=r*a.elementWidth,A=s*a.elementHeight,h=e.radius||5,c=e.fillColor||E[0],g=e.strokeColor||"white",d=e.strokeWidth||1,p=e.onClick&&(t=>{e.onClick(t,e)}),u=e.onDoubleClick&&(t=>{t.stopPropagation(),e.onDoubleClick(t,e)});return i().createElement("circle",{key:t,cx:l,cy:A,r:h,fill:c,stroke:g,strokeWidth:d,onMouseDown:r=>{if(r.stopPropagation(),!n)return;const i=l-r.clientX,s=A-r.clientY,h=r=>{const l=(r.clientX+i)/a.elementWidth,A=1-(r.clientY+s)/a.elementHeight;n({index:t,point:e,x:l*(o.maxX-o.minX)+o.minX,y:A*(o.maxY-o.minY)+o.minY},r)},c=()=>{window.removeEventListener("mousemove",h),window.removeEventListener("mouseup",c)};window.addEventListener("mousemove",h),window.addEventListener("mouseup",c)},onClick:p,onDoubleClick:u})}))))}et.propTypes={stateController:a().instanceOf(Me).isRequired,draggablePoints:B.DraggablePoints.isRequired,onPointDrag:a().func,onDraggablePointsDoubleClick:a().func};const tt=i().memo(nt);function nt({stateController:e,verticalLines:t}){const n=Ge(e)[0],r=Ve(e);return r?i().createElement("div",{className:"grapher-vertical-lines"},i().createElement("svg",{width:r.elementWidth,height:r.elementHeight},t.map(((e,t)=>{const o=(e.x-n.minX)/(n.maxX-n.minX);if(o<0||o>1)return null;const a=o*r.elementWidth,s={stroke:e.color,strokeWidth:e.width,...e.style||{}},l={fill:e.color,...e.markerStyle||{}};return i().createElement(i().Fragment,{key:t},i().createElement("line",{x1:a,y1:0,x2:a,y2:r.elementHeight,style:s}),e.markTop&&i().createElement("polygon",{points:`${a-3},0 ${a+3},0 ${a},3`,style:l}))})))):null}function rt(){return rt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rt.apply(this,arguments)}nt.propTypes={stateController:a().instanceOf(Me).isRequired,verticalLines:B.VerticalLines.isRequired};const it=i().memo(ot);function ot({stateController:e,webgl:t,bodyHeight:n,boundsSelectionEnabled:o,showTooltips:a,tooltipOptions:s,checkIntersection:l,draggablePoints:A,onPointDrag:h,onDraggablePointsDoubleClick:c,verticalLines:g,clockStyle:d,timeZone:p}){const u=(0,r.useCallback)((n=>{if(e.primaryRenderer&&e.primaryRenderer.dispose(),!n)return;const r=new j({stateController:e,canvasElement:n,webgl:t,checkIntersection:l});e.primaryRenderer=r,r.resize()}),[t,e]),[m,C]=(0,r.useState)({showing:!1,start:{},style:{}}),x=qe(e),b=ze(e).length,f=function(e){return Te(e,"tooltip_state_changed",e.tooltipState)}(e),y=He(e),_=je(e),B=function(e){return Te(e,"annotations_changed",e.annotationState)}(e),w=function(e){return Te(e,"context_menu_position_changed",e.contextMenuState)}(e);return(0,r.useEffect)((()=>{const t=()=>{a&&e.recalculateTooltips()},n=t=>{a&&e.setTooltipMousePosition({clientX:t.clientX,clientY:t.clientY,shiftKey:t.shiftKey})};return window.addEventListener("scroll",t,{passive:!0}),window.addEventListener("mousemove",n,{passive:!0}),()=>{window.removeEventListener("scroll",t),window.removeEventListener("mousemove",n)}}),[]),i().createElement("div",{className:"graph-body graph-body-primary",onMouseMove:t=>{if(m.showing){const n=e.primaryRenderer.boundingRect,r=t.clientX-n.left,i=t.clientY-n.top;C((({start:e})=>({showing:!0,start:e,style:{left:Math.min(r,e.x),top:x?0:Math.min(i,e.y),width:Math.abs(r-e.x),height:x?n.height:Math.abs(i-e.y)}})))}},onMouseLeave:()=>{e.setContextMenuMousePosition({showing:!1})},onMouseDown:t=>{if(!o)return;let n=t.target;for(let e=0;e<10&&n;e++){if(n.classList.contains("grapher-tooltip"))return;n=n.parentNode}const r=e.primaryRenderer.boundingRect,i={x:t.clientX-r.left,y:t.clientY-r.top};C({showing:!0,start:i,style:{left:i.x,top:i.y,width:0,height:0}});const a=t=>{if(window.removeEventListener("mouseup",a),!o)return;const n=t.clientX-r.left,s=t.clientY-r.top;e.setBoundsFromSelection({minPixelX:Math.min(n,i.x),maxPixelX:Math.max(n,i.x),minPixelY:Math.min(s,i.y),maxPixelY:Math.max(s,i.y)}),C({showing:!1,style:{}})};window.addEventListener("mouseup",a)},onClick:t=>{e.registerClick({clientX:t.clientX,clientY:t.clientY}),s&&s.savingDisabled?e.clearSavedTooltips():(t.target.closest(".grapher-context-menu")||e.setContextMenuMousePosition({showing:!1}),window.getSelection&&"Range"===window.getSelection().type||e.toggleTooltipSaved())},onDoubleClick:()=>{e.clearSavedTooltips()},onContextMenu:t=>{t.preventDefault(),e.setContextMenuMousePosition({clientX:t.clientX,clientY:t.clientY,showing:!0})},style:"number"==typeof n?{height:n}:void 0},i().createElement("canvas",{ref:u}),a&&i().createElement(se,rt({axisCount:b,maxPrecision:y,clockStyle:d,timeZone:p},s||{},f)),w.showing&&i().createElement(le,{contextMenu:w}),_&&i().createElement(Ze,{bodyHeight:n,annotationState:B}),g&&i().createElement(tt,{stateController:e,verticalLines:g}),A&&i().createElement(Qe,{stateController:e,draggablePoints:A,onPointDrag:h,onDraggablePointsDoubleClick:c}),o&&m.showing&&i().createElement("div",{className:"bounds-selection",style:m.style}))}ot.propTypes={stateController:a().instanceOf(Me).isRequired,webgl:a().bool,checkIntersection:a().bool,bodyHeight:a().number,boundsSelectionEnabled:a().bool.isRequired,showTooltips:a().bool.isRequired,tooltipOptions:B.TooltipOptions,verticalLines:B.VerticalLines,draggablePoints:B.DraggablePoints,onPointDrag:a().func,onDraggablePointsDoubleClick:a().func,clockStyle:a().oneOf(["12h","24h"]),timeZone:a().string};var at=n(5072),st=n.n(at),lt=n(7825),At=n.n(lt),ht=n(7659),ct=n.n(ht),gt=n(5056),dt=n.n(gt),pt=n(540),ut=n.n(pt),mt=n(1113),Ct=n.n(mt),xt=n(1557),bt={};function ft(e,{scale:t,min:n,max:r,inverted:i,totalSize:o,precision:a,formatter:s,dates:l,justTime:A,justDate:h,formatOptions:c={}},g={}){let d=e;"log"===t&&(d=10**e);let p=(e-n)/(r-n);i&&(p=1-p);let u=p*o;return isNaN(u)&&(u=0),{pixelValue:u,trueValue:d,label:s(d,{...c,precision:a,log:"log"===t,dates:l,justTime:A,justDate:h}),size:"major",...g}}function yt(e,{scale:t,min:n,max:r,inverted:i,totalSize:o,precision:a,formatter:s,dates:l,justTime:A,justDate:h,formatOptions:c={}},g={}){let d=e/o;i&&(d=1-d);let p=d*(r-n)+n;return"log"===t&&(p=Math.pow(10,p)),{pixelValue:e,trueValue:p,label:s(p,{...c,precision:a,log:"log"===t,dates:l,justTime:A,justDate:h}),size:"major",...g}}function _t(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 r=1/0,i=1;for(let t=0;t<n.length;t++){const o=Math.abs(n[t]-e);o<r&&(i=n[t],r=o)}return i}function Bt(e){return e.dates?function({min:e,max:t,precision:n,expectedLabelSize:r,labelPadding:i,totalSize:o,skipFirst:a=!1,skipLast:s=!1,scale:l="linear",formatter:A,inverted:h=!1,formatOptions:c}){const g=r+2*i,d=[],p={scale:l,min:e,max:t,inverted:h,totalSize:o,precision:n,formatter:A,formatOptions:c,dates:!0},{amount:u,unit:m}=function(e,t,n){const r=e/t;return r<6e4&&(!n||"second"===n)?{amount:_t(r/1e3,60),unit:"s"}:r<36e5&&(!n||"minute"===n)?{amount:_t(r/6e4,60),unit:"m"}:r<864e5&&(!n||"hour"===n)?{amount:_t(r/36e5,24),unit:"h"}:"day"===n||r<2592e6&&!n?{amount:_t(r/864e5,1),unit:"d"}:r>2592e6&&(!n||"month"===n)?{amount:_t(r/30*24*60*60*1e3,1),unit:"month"}:"year"===n?{amount:_t(r/365*24*60*60*1e3,1),unit:"year"}:{unit:"m",amount:60}}(t-e,o/g,c.unitOverride),C="month"===m;a||d.push(yt(0,{...p,justDate:C},{position:"first"}));let x=new Date(e);"h"===m?x.setMinutes(0,0,0):"m"===m?x.setSeconds(0,0):"s"===m?x.setMilliseconds(0):"month"===m?(x=ee(x,c.timeZone),x.setDate(1)):"d"===m&&(x=ee(x,c.timeZone));let b=A(x,{...c,...p,justDate:!0});for(;x<t;){let e=864e5;"h"===m?e=60*(u-x.getHours()%u)*60*1e3:"m"===m?e=60*(u-x.getMinutes()%u)*1e3:"s"===m?e=1e3*(u-x.getSeconds()%u):"month"===m?(e=0,x=11===x.getMonth()?new Date(x.getFullYear()+1,0,1):new Date(x.getFullYear(),x.getMonth()+1,1)):"year"===m&&(x=new Date(x.getFullYear()+1,0,0)),x=new Date(x.valueOf()+e);const t=A(x,{...c,...p,justDate:!0})===b,n=ft(x,{...p,justTime:t,justDate:C});d.length&&n.pixelValue-d[d.length-1].pixelValue<r+i||n.pixelValue+r/2>=o||(d.push(n),b=A(x,{...c,...p,justDate:!0}))}const f=b===A(t,{...c,...p,justDate:!0});return!s&&d[d.length-1].pixelValue+r<o&&d.push(yt(o,{...p,justTime:f,justDate:C},{position:"last"})),d.filter((({pixelValue:e})=>e<=o&&e>=0))}(e):function({min:e,max:t,precision:n,expectedLabelSize:r,labelPadding:i,totalSize:o,scale:a="linear",formatter:s,inverted:l=!1,formatOptions:A}){const h=r+2*i,c=[],g={scale:a,min:e,max:t,inverted:l,totalSize:o,precision:n,formatter:s,formatOptions:A,dates:!1},d=function(e,t){const n=e/t,r=1-Math.log10(Math.abs(n)),i=r-Math.floor(r)>.5?2:1,o=10**Math.floor(r)*i;return Math.round(n*o)/o}(t-e,Math.floor((o-2*r)/h));if(d>0)for(let n=function(e,t){return Math.round(e/t)*t}(e,d);n<t;n+=d)c.push(ft(n,g));return c.length&&l&&c[c.length-1].pixelValue>i&&c.push(yt(r/2,g)),c.filter((({pixelValue:e})=>e<=o&&e>=0))}(e)}bt.styleTagTransform=Ct(),bt.setAttributes=dt(),bt.insert=ct().bind(null,"head"),bt.domAPI=At(),bt.insertStyleElement=ut(),st()(xt.A,bt),xt.A&&xt.A.locals&&xt.A.locals;const wt=i().memo(Et);function Et({showAxes:e,showGrid:t,stateController:n,bigLabels:r,xTickUnit:o,clockStyle:a,timeZone:s,integersOnly:l}){if(!e&&!t)return null;const{elementWidth:A,elementHeight:h}=Pe(n),{minX:c,maxX:g,dates:d}=function(e){return Te(e,"selection_changed",e.selection)}(n),p=function(e){return Te(e,"has_x_enum_change",e.hasXEnum)}(n),u=function(e){return Te(e,"enum_map_change",e.enumMap)}(n);let m;m=d?function(e,t){e=new Date(e);const n=(t=new Date(t)).valueOf()-e.valueOf();return n<3e3?"ms":n<6e5?"s":"m"}(c,g):V(g-c);let C=null;if(p){C={};for(const[e,t]of Object.entries(u))C[t]=e}const x={unitOverride:o,clockStyle:a,timeZone:s,integersOnly:l,inverseEnumMap:C},b=te(c,{...x,dates:d,precision:m}).toString(),f=te(g,{...x,dates:d,precision:m}).toString();let y=4*Math.max(b.length,f.length);r&&(y*=2);const _=Bt({min:c,max:g,totalSize:A,precision:m,dates:d,formatter:te,expectedLabelSize:y,labelPadding:30,formatOptions:x});return i().createElement("svg",{className:"axis x-axis",style:e?void 0:{marginBottom:-20}},e&&i().createElement("path",{d:`M-1,0 H${A}`,className:"axis-line"}),e&&i().createElement("path",{d:`M-2,1 H${A+1}`,className:"axis-line-shadow"}),_.map((({pixelValue:n,label:o,size:a,position:s,skipGrid:l},A)=>{if(isNaN(n))return null;const c=["axis-item",`axis-item-${a}`,`axis-item-${s}`];return r&&c.push("axis-item-big-labels"),i().createElement("g",{key:A,className:c.join(" ")},e&&i().createElement("path",{d:`M${n},1 v6`,className:"axis-tick"}),t&&!l&&i().createElement("path",{d:`M${n},0 v-${h}`}),e&&i().createElement("text",{x:n,y:15},o))})))}Et.propTypes={stateController:a().instanceOf(Me).isRequired,showAxes:a().bool.isRequired,showGrid:a().bool.isRequired,bigLabels:a().bool,xTickUnit:a().oneOf(["year"]),clockStyle:a().oneOf(["12h","24h"]),timeZone:a().string,integersOnly:a().bool};const vt=i().memo(kt);function kt({stateController:e,showAxes:t,showGrid:n,showSeriesKey:o,axis:a,sideIndex:s,bodyHeight:l,theme:A,grapherID:h,dragPositionYOffset:c=0,bigLabels:g,showAxisColors:d}){if(!t&&!n)return null;const{side:p,scale:u,axisIndex:m,label:C}=ze(e)[a.axisIndex],{elementWidth:x,elementHeight:b}=Pe(e);let{minY:f,maxY:y}=Ge(e)[m];const _=_e({minY:f,maxY:y,scale:u});f=_.minY,y=_.maxY;const B=Bt({min:f,max:y,totalSize:b,scale:u,precision:V(y-f),formatter:ne,inverted:!0,expectedLabelSize:g?20:10,labelPadding:30});let w=5;"log"===u&&(w=2);const E=Ie(e),[k,S]=(0,r.useState)(null),[D,Y]=(0,r.useState)({dx:0,dy:0}),F="day"===A?1:.5,X="day"===A?.8:.3;return i().createElement("svg",{className:`axis y-axis y-axis-${p}`,"data-axis-index":m,"data-grapher-id":h,style:{width:re,marginLeft:t?void 0:-32,height:"number"==typeof l?l:void 0}},t&&d&&a.series.map(((e,t)=>{const n=b/a.series.length;return i().createElement("rect",{x:"left"===p?0:2,y:t*n,width:30,height:n,key:e.index,fill:v(e.color,e.index,e.multigrapherSeriesIndex),opacity:e.index===E?F:X,"data-element-height":b,"data-series-length":a.series.length})})),t&&i().createElement("path",{d:`M${"left"===p?31:1},3 V${b}`,className:"axis-line"}),t&&i().createElement("path",{d:`M${"left"===p?30:0},3 V${b+1}`,className:"axis-line-shadow"}),B.map((({pixelValue:e,label:r,size:o,skipGrid:a},l)=>{const A="left"===p?(s+1)*re:-s*re,h=("left"===p?1:-1)*(x+1),c=["axis-item",`axis-item-${o}`];return g&&c.push("axis-item-big-labels"),i().createElement("g",{key:l,className:c.join(" ")},n&&!a&&i().createElement("path",{d:`M${A},${e} h${h}`}),n&&!a&&s>0&&i().createElement("path",{d:`M${"left"===p?re:0},${e} h${("left"===p?1:-1)*s*re}`,strokeDasharray:"2,2"}),t&&i().createElement("text",{x:"left"===p?re-w:w,y:e},r))})),o&&t&&a.series.map(((t,n)=>{let r=18+14*(n%2-1),o=-14*Math.ceil(a.series.length/2)+14*Math.floor(n/2);return t===k&&(r+=D.dx,o+=D.dy-c),i().createElement("rect",{className:"series-color-box",onMouseDown:n=>((t,n)=>{let r=t.clientX,i=t.clientY;"left"===p&&(r+=re),"right"===p&&(r-=re),Y({dx:0,dy:0});const o=e=>{Y({dx:e.clientX-r,dy:e.clientY-i})},a=t=>{window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",a);let r=t.target;for(;r&&!(r.dataset||{}).axisIndex;)r=r.parentNode;S(null),e.finalizeDrag(n,r&&(r.dataset||{}).axisIndex,r&&(r.dataset||{}).grapherId)};window.addEventListener("mousemove",o),window.addEventListener("mouseup",a),S(n),e.markDragStart()})(n,t),x:r,y:o,width:10,height:10,key:t.index,fill:v(t.color,t.index,t.multigrapherSeriesIndex),onMouseOver:()=>e.setHighlightedSeries(t.index),onMouseOut:()=>e.setHighlightedSeries(null)})})),t&&!!C&&i().createElement("text",{className:"y-axis-label"+(g?" y-axis-big-label":""),x:"left"===p?10:22,y:b/2+("left"===p?-1:1)*(m+1)*(g?20:0),transform:`rotate(${"left"===p?-90:90}, ${"left"===p?10:22}, ${b/2})`},C))}kt.propTypes={stateController:a().instanceOf(Me),showAxes:a().bool.isRequired,showGrid:a().bool.isRequired,showAxisColors:a().bool.isRequired,showSeriesKey:a().bool.isRequired,axis:B.Axis.isRequired,sideIndex:a().number.isRequired,bodyHeight:a().number,theme:a().string,grapherID:a().string,dragPositionYOffset:a().number,bigLabels:a().bool};const St=i().memo(Dt);function Dt({selected:e,disabled:t,className:n,onClick:r,children:o,description:a}){const s=["range-button"];return e&&s.push("range-button-selected"),t&&s.push("range-button-disabled"),n&&s.push(n),a&&s.push("option-tooltip"),i().createElement("div",{className:s.join(" "),onClick:r&&(e=>t||r(e))},o,a&&i().createElement("div",{className:"option-tooltip-text"},a))}Dt.propTypes={selected:a().bool.isRequired,onClick:a().func,children:a().node.isRequired,disabled:a().bool,className:a().string,description:a().string};const Yt=i().memo(Ft);function Ft({stateController:e,currentBoundCalculator:t,boundCalculator:n,children:r,disabled:o}){return i().createElement(St,{selected:t===n,onClick:()=>e.boundCalculator=n,disabled:o},r)}Ft.propTypes={stateController:a().instanceOf(Me).isRequired,boundCalculator:a().func.isRequired,currentBoundCalculator:a().func.isRequired,children:a().node.isRequired,disabled:a().bool};const Xt=i().memo(Rt);function Rt({stateController:e}){const t=function(e){return Te(e,"percentile_changed",e.percentile)}(e),n=function(e){return Te(e,"percentile_asymmetry_changed",e.percentileAsymmetry)}(e),[o,a]=(0,r.useState)(!1);return[o?i().createElement(St,{key:"asymmetry button",className:"percentile-button",selected:!0,description:"Percentile asymmetry"},i().createElement("input",{onClick:e=>e.stopPropagation(),value:n,onChange:t=>e.percentileAsymmetry=t.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:-50,max:50}),i().createElement("div",{className:"icon-container icon-container-square"},i().createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},i().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,i().createElement(St,{key:"main-button",className:"percentile-button",selected:o||100!==parseFloat(t),onClick:()=>a(!o),description:"Edit percentile"},o&&i().createElement("div",null,i().createElement("input",{onClick:e=>e.stopPropagation(),autoFocus:!0,value:t,onChange:t=>e.percentile=t.target.value,onKeyUp:e=>13===e.keyCode&&a(!1),type:"number",min:0,max:100})),i().createElement("div",{className:"icon-container icon-container-narrow"},i().createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},i().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"}))))]}Rt.propTypes={stateController:a().instanceOf(Me).isRequired};const Mt=i().memo(Tt);function Tt({stateController:e,sidebarEnabled:t}){const n=function(e){return Te(e,"show_individual_points_changed",e.showIndividualPoints)}(e),r=qe(e),o=He(e),a=Ke(e),s=je(e),l=Je(e);return i().createElement("div",{className:"options-bar"},t&&i().createElement(St,{selected:a,onClick:()=>e.toggleShowingSidebar(),description:"Show sidebar"},i().createElement("div",{className:"icon-container icon-container-square"},i().createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},i().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"})))),i().createElement(St,{selected:"export"===l,onClick:()=>e.toggleExportMode(),description:"Export mode"},i().createElement("div",{className:"icon-container icon-container-square"},i().createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},i().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"})))),i().createElement(St,{selected:s,onClick:()=>e.toggleShowingAnnotations(),description:"Show annotations"},i().createElement("div",{className:"icon-container icon-container-448"},i().createElement("svg",{focusable:"false",viewBox:"0 0 448 512"},i().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"})))),i().createElement(Xt,{stateController:e}),i().createElement(St,{selected:o,onClick:()=>e.toggleMaxPrecision(),description:"Max precision"},i().createElement("div",{className:"icon-container icon-container-square"},i().createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},i().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"})))),i().createElement(St,{selected:r,onClick:()=>e.toggleYAutoscaling(),description:"Autoscale y axis"},i().createElement("div",{className:"icon-container"},i().createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},i().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"})))),i().createElement(St,{selected:n,onClick:()=>e.toggleIndividualPoints(),description:"Show individual points"},i().createElement("div",{className:"icon-container icon-container-narrow"},i().createElement("svg",{focusable:"false",viewBox:"0 0 192 512"},i().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"})))))}Tt.propTypes={stateController:a().instanceOf(Me).isRequired,sidebarEnabled:a().bool};const Pt=i().memo(zt);function zt({stateController:e,customBoundsSelectors:t,customBoundsSelectorsOnly:n,sidebarEnabled:r}){const o=Oe(e),a=Le(e),s=Ue(e);let l=re*o;o>0&&(l+=5);let A=re*a;a>0&&(A+=5);const{dates:h}=function(e){return Te(e,"global_bounds_changed",e.globalBounds)}(e),c=function(e){return Te(e,"bound_calculator_changed",e.boundCalculator)}(e),{hasPreviousBounds:g,hasNextBounds:d}=function(e){return Te(e,"bound_history_changed",e.boundHistory)}(e),p=new Set(t.map((({label:e})=>e)));return i().createElement("div",{className:"range-selection"+(h?"":" range-not-dates"),style:{marginRight:l,marginLeft:A}},i().createElement("div",{className:"range-buttons"},s&&i().createElement(Mt,{stateController:e,sidebarEnabled:r}),i().createElement(St,{className:"showing-options-button",selected:s,onClick:()=>e.toggleShowingOptions(),description:"Show additional options"},i().createElement("div",{className:"icon-container icon-container-square"},i().createElement("svg",{focusable:"false",viewBox:"0 0 512 512"},i().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"})))),i().createElement(St,{className:"range-selection-history",selected:!1,onClick:()=>e.previousBounds(),disabled:!g},i().createElement("div",{className:"icon-container"},i().createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},i().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"})))),i().createElement(St,{className:"range-selection-history",selected:!1,onClick:()=>e.nextBounds(),disabled:!d},i().createElement("div",{className:"icon-container"},i().createElement("svg",{focusable:"false",viewBox:"0 0 256 512"},i().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"})))),t.map((({label:t,calculator:n,datesOnly:r},o)=>i().createElement(Yt,{key:o,stateController:e,currentBoundCalculator:c,boundCalculator:n,disabled:r&&!h},t))),!p.has("1m")&&!n&&i().createElement(Yt,{stateController:e,currentBoundCalculator:c,boundCalculator:De.lastMinute,disabled:!h},"1m"),!p.has("10m")&&!n&&i().createElement(Yt,{stateController:e,currentBoundCalculator:c,boundCalculator:De.last10Minutes,disabled:!h},"10m"),!p.has("1h")&&!n&&i().createElement(Yt,{stateController:e,currentBoundCalculator:c,boundCalculator:De.lastHour,disabled:!h},"1h"),!p.has("1d")&&!n&&i().createElement(Yt,{stateController:e,currentBoundCalculator:c,boundCalculator:De.lastDay,disabled:!h},"1d"),i().createElement(Yt,{stateController:e,currentBoundCalculator:c,boundCalculator:De.all,disabled:!1},"All")))}zt.propTypes={stateController:a().instanceOf(Me).isRequired,customBoundsSelectors:B.CustomBoundsSelectors.isRequired,customBoundsSelectorsOnly:a().bool,sidebarEnabled:a().bool};class $t extends i().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)}componentDidMount(){this._renderer=new j({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.resize()}componentWillUnmount(){this._renderer.dispose(),this._renderer=null}onMouseMove(e){if(!this._dragType)return;let t;const n=this.el.getBoundingClientRect().left;this.setState((({selectionBounds:r,globalBounds:i,elementWidth:o})=>{let a=(e.clientX-n)/o;a=Math.max(a,0),a=Math.min(a,1);let s=a*(i.maxX-i.minX)+i.minX;if("scroll"===this._dragType){const e=r.maxX-r.minX;let n=s-e*this._scrollAnchorPercentage,o=s+e*(1-this._scrollAnchorPercentage);return n<i.minX&&(n=i.minX,o=n+e),o>i.maxX&&(o=i.maxX,n=o-e),t=()=>({minX:n,maxX:o}),{selectionBounds:Object.assign({},r,{minX:n,maxX:o})}}if("left"===this._dragType){s>r.maxX&&(s=r.maxX);const e=i.maxX===r.maxX;return t=()=>e?{minX:s}:{minX:s,maxX:r.maxX},{selectionBounds:Object.assign({},r,{minX:s})}}if("right"===this._dragType){s<r.minX&&(s=r.minX);const e=i.minX===r.minX;return t=()=>e?{maxX:s}:{minX:r.minX,maxX:s},{selectionBounds:Object.assign({},r,{maxX:s})}}}),(()=>{t&&(t.debounceHistory=!0,this.props.stateController.boundCalculator=t)}))}addListeners(){window.addEventListener("mousemove",this.onMouseMove),window.addEventListener("mouseup",this.stopDragging)}stopDragging(){this._dragType=null,window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.stopDragging)}startScroll(e){this._dragType="scroll";const{selectionBounds:t,globalBounds:n,elementWidth:r}=this.state,i=this.el.getBoundingClientRect().left,o=e.clientX-i,a=(t.minX-n.minX)/(n.maxX-n.minX)*r||0,s=(t.maxX-n.minX)/(n.maxX-n.minX)*r||0;this._scrollAnchorPercentage=(o-a)/(s-a),this.addListeners()}startLeftDrag(){this._dragType="left",this.addListeners()}startRightDrag(){this._dragType="right",this.addListeners()}render(){const{globalBounds:e,selectionBounds:t,elementWidth:n,elementHeight:r}=this.state;let o,a=Math.min(Math.max((t.minX-e.minX)/(e.maxX-e.minX),0),1)*n||0,s=Math.min(Math.max((t.maxX-e.minX)/(e.maxX-e.minX),0),1)*n||0;return(isNaN(a)||!isFinite(a)||t.maxX<t.minX)&&(a=0),(isNaN(s)||!isFinite(s)||t.maxX<t.minX)&&(s=0),t.dates&&this.props.markDates&&(o=Bt({min:e.minX,max:e.maxX,totalSize:n,precision:"day",dates:t.dates,formatter:te,expectedLabelSize:30,formatOptions:{justMonthAndDay:!0,unitOverride:"day",timeZone:this.props.timeZone},skipFirst:!0,skipLast:!0})),i().createElement("div",{className:"range-selection-graph"},i().createElement("div",{className:"graph-body graph-body-secondary"},i().createElement("canvas",{ref:e=>this.el=e}),i().createElement("svg",null,i().createElement("g",null,i().createElement("rect",{x:0,y:r,width:n,height:14,className:"selection-bar-track"}),o&&o.map((({pixelValue:e,label:t,size:n,position:o},a)=>{if(isNaN(e))return null;const s=["axis-item",`axis-item-${n}`,`axis-item-${o}`];return i().createElement("g",{key:a,className:s.join(" ")},i().createElement("path",{d:`M${e},0 v${r}`}),i().createElement("text",{x:e+3,y:r},t))})),i().createElement("rect",{x:a,y:r,width:s-a,height:14,className:"selection-bar",onMouseDown:this.startScroll}),i().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(${a+(s-a)/2},${r})`,onMouseDown:this.startScroll})),i().createElement("g",null,i().createElement("rect",{x:a,y:0,width:s-a,height:r,className:"target-selection",onMouseDown:this.startScroll}),i().createElement("rect",{x:a,y:0,width:s-a,height:r+14,className:"target-selection-outline"})),i().createElement("g",null,i().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.startLeftDrag})),i().createElement("g",null,i().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(${s},${(r-15)/2})`,onMouseDown:this.startRightDrag})))))}}$t.defaultProps={width:3,shadowColor:"transparent"},$t.propTypes={stateController:a().instanceOf(Me).isRequired,webgl:a().bool,draggingY:a().bool,checkIntersection:a().bool,markDates:a().bool,timeZone:a().string};const It=i().memo(Ot);function Ot({series:e,i:t,style:n,onMouseDown:r,theme:o,stateController:a,highlighted:s}){const l=v(e.color,t,e.multigrapherSeriesIndex);n="day"===o?Object.assign({},n,{backgroundColor:l}):Object.assign({},n,{color:l});const A=["series-key-item"];s&&A.push("series-key-item-highlighted");const h=Fe(e,t);return i().createElement("div",{className:A.join(" "),style:n,onMouseDown:r,onMouseOver:()=>a.setHighlightedSeries(t),onMouseOut:()=>a.setHighlightedSeries(null),onClick:()=>a.registerSeriesClick(t)},h)}Ot.propTypes={series:B.SingleSeries.isRequired,stateController:a().instanceOf(Me),i:a().number.isRequired,style:a().object,onMouseDown:a().func,theme:a().string.isRequired,highlighted:a().bool};class Lt extends i().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:e,stateController:t,axisIndex:n,scale:r,label:o,grapherID:a}=this.props,{showingLabelInput:s}=this.state;return i().createElement("div",{className:"series-key-axis-container"+(s?" series-key-axis-container-showing-label":""),"data-axis-index":n,"data-grapher-id":a},i().createElement("div",{className:"scale-label",onClick:()=>t.toggleScale({axisIndex:n})},r.slice(0,s?6:3)),i().createElement("div",{className:"series-key-axis-container-body"},i().createElement("div",null,e,i().createElement("svg",{className:"label-input-toggler",viewBox:"0 0 512 512",onClick:this.toggleLabelInputShowing},i().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"}))),i().createElement("div",{className:"series-key-axis-label-container"},i().createElement("input",{onChange:e=>t.setLabel({axisIndex:n,label:e.target.value}),placeholder:"Enter label",value:o||""}))))}}Lt.propTypes={stateController:a().instanceOf(Me).isRequired,children:a().node.isRequired,axisIndex:a().number.isRequired,scale:a().string.isRequired,label:a().string,grapherID:a().string};const Nt=i().memo(Wt);function Wt({stateController:e,theme:t,draggingY:n,grapherID:o,dragPositionYOffset:a=0}){const s=$e(e),[l,A]=(0,r.useState)(null),[h,c]=(0,r.useState)({x:0,y:0}),g=Ie(e),d=(0,r.useRef)(null),[p,u]=(0,r.useState)(5*s.map((({name:e,yKey:t},n)=>(e||t||n).toString().length)).reduce(((e,t)=>e+t),0));let m;(0,r.useEffect)((()=>{d.current&&(cancelAnimationFrame(m),m=requestAnimationFrame((()=>{if(!d.current)return;const e=[...d.current.querySelectorAll(".series-key-axis-container")].map((e=>e.clientWidth)).reduce(((e,t)=>e+t),0);u(e)})))}),[s,d.current]);const C=function({stateController:e,keyWidth:t}){const n=Oe(e),r=Le(e),i=Ue(e);let o=re*n;n>0&&(o+=5),o+=250,i&&(o+=70);let a,s=re*r;r>0&&(s+=5),s=Math.max(o,s),o=Math.max(o,s);const{elementWidth:l}=Pe(e);return l-s-o<t&&(s=0,o=0,a=10),{marginRight:o,marginLeft:s,marginBottom:a}}({stateController:e,keyWidth:p}),x=ze(e),b=function(e){return Te(e,"always_tooltipped_changed",e.alwaysTooltipped)}(e);return i().createElement("div",{className:"series-key",style:C,ref:d},n&&i().createElement("div",{className:"series-key-axis-container","data-axis-index":"new-left","data-grapher-id":o}),x.map(((n,r)=>!n.series.length&&x.length>1?null:i().createElement(Lt,{key:r,label:n.label,axisIndex:n.axisIndex,scale:n.scale,stateController:e,grapherID:o},n.series.map((n=>n.hideFromKey?null:i().createElement(It,{key:n.index,series:n,i:n.index,onMouseDown:(t,r)=>((t,n)=>{let r=t.target;for(;r&&"series-key"!==r.className;)r=r.parentNode;const i=t.target.getBoundingClientRect().left;let o=r.getBoundingClientRect().left,a=r.style.marginLeft;const s=t.clientX,l=t.clientY,h=t.clientX,g=t.clientY;A(n),c({x:t.clientX-s+(i-o)-2,y:t.clientY-l+1});const d=e=>{r.style.marginLeft!==a&&(o=r.getBoundingClientRect().left,a=r.style.marginLeft),c({x:e.clientX-s+(i-o)-2,y:e.clientY-l+1})},p=t=>{window.removeEventListener("mousemove",d),window.removeEventListener("mouseup",p);let r=t.target;for(;r&&!(r.dataset||{}).axisIndex&&!(r.dataset||{}).grapherId;)r=r.parentNode;A(null),e.finalizeDrag(n,r&&(r.dataset||{}).axisIndex,r&&(r.dataset||{}).grapherId),t.clientX===h&&t.clientY===g&&e.toggleAlwaysTooltipped(n,t.shiftKey)};window.addEventListener("mousemove",d),window.addEventListener("mouseup",p),e.markDragStart()})(t,n),theme:t,stateController:e,highlighted:g===n.index||b.has(n)})))))),n&&i().createElement("div",{className:"series-key-axis-container","data-axis-index":"new-right","data-grapher-id":o}),l&&i().createElement(It,{style:{left:h.x,top:h.y-a,position:"absolute",pointerEvents:"none",zIndex:1},series:l,i:l.index,theme:t,stateController:e}))}Wt.propTypes={stateController:a().instanceOf(Me).isRequired,theme:a().string.isRequired,draggingY:a().bool.isRequired,grapherID:a().string,dragPositionYOffset:a().number};const Gt=i().memo(qt);function qt({title:e}){return i().createElement("div",{className:"grapher-title"},e)}qt.propTypes={title:a().string.isRequired};class Ut extends i().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:e}=this.props,t=v(e.color,e.index,e.multigrapherSeriesIndex);let n=e.name||e.yKey;return n||(n=e.index),i().createElement("div",{className:"series-toggle"},i().createElement("label",null,i().createElement("input",{type:"checkbox",defaultChecked:!e.hidden,ref:e=>e&&e.addEventListener("change",this.onChange)}),i().createElement("span",{className:"checkmark",style:{background:t,borderColor:t}}),n))}}function Ht({stateController:e}){const t=$e(e);return i().createElement("div",{className:"grapher-sidebar"},t.map(((t,n)=>i().createElement(Ut,{key:n,singleSeries:t,stateController:e}))))}function Kt(){return Kt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Kt.apply(this,arguments)}Ut.propTypes={singleSeries:B.SingleSeries.isRequired,stateController:a().instanceOf(Me).isRequired},Ht.propTypes={stateController:a().instanceOf(Me).isRequired};const jt=i().memo(Jt),Vt={theme:"night",showAxes:!0,showRangeGraph:!0,showRangeSelectors:!0,showSeriesKey:!0,showTooltips:!0,boundsSelectionEnabled:!0,customBoundsSelectors:[],sidebarEnabled:!1,defaultShowAnnotations:!0,defaultShowOptions:!0};function Jt(e){e={...Vt,...e};const t=(0,r.useMemo)((()=>new Me({grapherID:e.id,...e,...e.stateControllerInitialization})),[]);(0,r.useEffect)((()=>()=>{t.dispose()}),[t]),(0,r.useEffect)((()=>{e.exportStateController&&e.exportStateController(t)}),[t,e.exportStateController]),(0,r.useEffect)((()=>{t.timingFrameCount=e.timingFrameCount}),[t,e.timingFrameCount]),(0,r.useEffect)((()=>(e.onRenderTime&&t.on("render_time",e.onRenderTime),()=>{e.onRenderTime&&t.off("render_time",e.onRenderTime)})),[t,e.onRenderTime]),(0,r.useEffect)((()=>{t.setSeries(e.series)}),[t,e.series]),(0,r.useEffect)((()=>{t.theme=e.theme}),[t,e.theme]);const n=Je(t),o=e.bigLabels||"export"===n,a=e.defaultLineWidth||("export"===n?3:void 0);(0,r.useEffect)((()=>{t.defaultLineWidth=a}),[t,a]),(0,r.useEffect)((()=>{t.percentile=e.percentile}),[t,e.percentile]),(0,r.useEffect)((()=>{t.customBoundsSelectors=e.customBoundsSelectors}),[t,e.customBoundsSelectors]),(0,r.useEffect)((()=>{t.annotations=e.annotations}),[t,e.annotations]),(0,r.useEffect)((()=>e.onAxisChange?(t.on("exported_axes_changed",e.onAxisChange),()=>{t.off("exported_axes_changed",e.onAxisChange)}):()=>{}),[t,e.onAxisChange]),(0,r.useEffect)((()=>{t.primaryRenderer.resize()}),[e.height]);const s=function(e){return Te(e,"dragging_y_changed",e.draggingY)}(t),{styles:l,classNames:A}=function(e,{draggingY:t,theme:n}){const{fullscreen:r,height:i,width:o}=e,a=["grapher",`grapher-${n}`],s={};return t&&a.push("grapher-dragging-y"),r?(a.push("grapher-fullscreen"),a.push("grapher-fixed-height")):i&&(a.push("grapher-fixed-height"),s.height="number"==typeof i?i-20:`calc(${i} - 20px)`),o&&(s.width=o),{styles:s,classNames:a}}(e,{draggingY:s,theme:n}),h=Ne(t),c=We(t),g=Ke(t),d="boolean"==typeof e.showAxisColors?e.showAxisColors:"export"!==n,p="boolean"==typeof e.showGrid?e.showGrid:"export"!==n,u={stateController:t,showAxes:e.showAxes,showGrid:p,showSeriesKey:e.showSeriesKey,bodyHeight:e.bodyHeight,theme:n,grapherID:e.id,dragPositionYOffset:e.dragPositionYOffset,showAxisColors:d,bigLabels:o};return i().createElement("div",{className:A.join(" "),style:l,"data-grapher-id":e.id},e.title&&i().createElement(Gt,{title:e.title}),i().createElement("div",{className:"grapher-primary-container-outer"},g&&i().createElement(Ht,{stateController:t}),i().createElement("div",{className:"grapher-primary-container-body"},e.showSeriesKey&&i().createElement(Nt,{stateController:t,draggingY:s,theme:e.theme,grapherID:e.id,dragPositionYOffset:e.dragPositionYOffset}),e.showRangeSelectors&&i().createElement(Pt,{stateController:t,customBoundsSelectors:e.customBoundsSelectors,customBoundsSelectorsOnly:e.customBoundsSelectorsOnly,sidebarEnabled:e.sidebarEnabled}),i().createElement("div",{className:"grapher-main-row"},s&&i().createElement("div",{className:"axis y-axis","data-axis-index":"new-left","data-grapher-id":e.id,style:{width:re,height:"number"==typeof e.bodyHeight?e.bodyHeight:void 0}}),c.map(((e,t)=>i().createElement(vt,Kt({key:t,axis:e,sideIndex:c.length-t-1},u)))),i().createElement("div",{className:"central-container"},i().createElement(it,{stateController:t,webgl:e.webgl,bodyHeight:e.bodyHeight,boundsSelectionEnabled:e.boundsSelectionEnabled,showTooltips:e.showTooltips,tooltipOptions:e.tooltipOptions,checkIntersection:e.checkIntersection,draggablePoints:e.draggablePoints,onPointDrag:e.onPointDrag,onDraggablePointsDoubleClick:e.onDraggablePointsDoubleClick,verticalLines:e.verticalLines,clockStyle:e.clockStyle,timeZone:e.timeZone}),i().createElement(wt,{showGrid:p,showAxes:e.showAxes,stateController:t,bigLabels:o,xTickUnit:e.xTickUnit,clockStyle:e.clockStyle,timeZone:e.timeZone,integersOnly:e.xAxisIntegersOnly}),e.showRangeGraph&&i().createElement("div",{className:"range-graph-container"},i().createElement($t,{stateController:t,webgl:e.webgl,checkIntersection:e.checkIntersection,markDates:e.markRangeGraphDates,timeZone:e.timeZone}))),h.map(((e,t)=>i().createElement(vt,Kt({key:t,axis:e,sideIndex:t},u)))),s&&i().createElement("div",{className:"axis y-axis","data-axis-index":"new-right","data-grapher-id":e.id,style:{width:re,height:"number"==typeof e.bodyHeight?e.bodyHeight:void 0}})))))}Jt.propTypes={series:B.Series.isRequired,webgl:a().bool,requireWASM:a().bool,checkIntersection:a().bool,onAxisChange:a().func,onRenderTime:a().func,exportStateController:a().func,timingFrameCount:a().number,stateControllerInitialization:a().object,syncPool:a().instanceOf(class{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 r=0===t.unsavedTooltipsCount||!t.mousePresent||"onShift"===this._syncTooltips&&!e.shiftKeyPressedOnMove;r&&(this._tooltipIgnoreState=Math.random());for(let n of this._stateControllers)e!==n&&(r?n.showOnlySavedTooltips(this._tooltipIgnoreState):n.setTooltipMousePosition({mouseX:t.mouseX,mouseY:t.mouseY,tooltipAllNext:!0,tooltipStateArg:this._tooltipIgnoreState}))}))}}),id:a().string,dragPositionYOffset:a().number,theme:a().oneOf(["day","night","export"]),title:a().string,fullscreen:a().bool,bodyHeight:a().number,height:a().number,width:a().number,showAxes:a().bool,showRangeGraph:a().bool,showRangeSelectors:a().bool,showSeriesKey:a().bool,showTooltips:a().bool,showGrid:a().bool,showAxisColors:a().bool,bigLabels:a().bool,xTickUnit:a().oneOf(["year"]),xAxisIntegersOnly:a().bool,clockStyle:a().oneOf(["12h","24h"]),timeZone:a().string,markRangeGraphDates:a().bool,boundsSelectionEnabled:a().bool,sidebarEnabled:a().bool,percentile:a().number,defaultShowOptions:a().bool,defaultShowIndividualPoints:a().bool,defaultShowSidebar:a().bool,defaultShowAnnotations:a().bool,defaultLineWidth:a().number,tooltipOptions:B.TooltipOptions,customBoundsSelectors:B.CustomBoundsSelectors,customBoundsSelectorsOnly:a().bool,defaultBoundsCalculator:a().string,annotations:B.Annotations,draggablePoints:B.DraggablePoints,onPointDrag:a().func,onDraggablePointsDoubleClick:a().func,verticalLines:B.VerticalLines};const Zt=E,Qt=De},1557:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var r=n(1354),i=n.n(r),o=n(6314),a=n.n(o)()(i());a.push([e.id,'.grapher-night{position:relative;background:linear-gradient(to bottom right, #2a2a2b, #3e3e40);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}.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}.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}.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-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 rgba(255,255,255,.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}.grapher-night .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;height:400px;background:rgba(255,255,255,.3)}.grapher-night .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;top:0;background:rgba(0,0,0,.6);border:1px solid rgba(255,255,255,.3);color:#f0f0f0;padding:2px 4px;max-width:max-content;width:200px}.grapher-night .graph-body .bounds-selection{position:absolute;background:rgba(255,255,255,.1)}.grapher-night .axis{overflow:visible;user-select:none}.grapher-night .axis.x-axis{width:1px;height:20px;display:block}.grapher-night .axis.x-axis .axis-item text{text-anchor:middle}.grapher-night .axis.x-axis .axis-item.axis-item-first text{text-anchor:start}.grapher-night .axis.x-axis .axis-item.axis-item-last text{text-anchor:end}.grapher-night .axis.y-axis{height:400px}.grapher-night .axis.y-axis .axis-item text{text-anchor:end;alignment-baseline:middle}.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:silver;stroke-width:2px}.grapher-night .axis .axis-line-shadow{stroke:#505053;stroke-width:1px}.grapher-night .axis .axis-item path{stroke:#505053;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:2px}.grapher-night .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-night .range-selection-graph{width:100%;padding-bottom:14px}.grapher-night .range-selection-graph .graph-body-secondary{height:50px}.grapher-night .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;height:50px;width:100%;overflow:visible}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection{fill:rgba(255,255,255,.1);cursor:ew-resize}.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-track{fill:#303033}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-rifles{fill:none;stroke-width:1;stroke:#fff}.grapher-night .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#aaa;stroke-width:1;fill:#666;cursor:ew-resize}.grapher-night .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#aaa;fill:none}.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:#505053;stroke-width:1px}.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}.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}.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}.grapher-day .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-day .graph-body .grapher-tooltip .tooltip-item path{fill:rgba(255,255,255,.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-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:rgba(255,255,255,.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}.grapher-day .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;height:400px;background:rgba(0,0,0,.3)}.grapher-day .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;top:0;background:rgba(255,255,255,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.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;display:block}.grapher-day .axis.x-axis .axis-item text{text-anchor:middle}.grapher-day .axis.x-axis .axis-item.axis-item-first text{text-anchor:start}.grapher-day .axis.x-axis .axis-item.axis-item-last text{text-anchor:end}.grapher-day .axis.y-axis{height:400px}.grapher-day .axis.y-axis .axis-item text{text-anchor:end;alignment-baseline:middle}.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:2px}.grapher-day .axis .axis-line-shadow{stroke:#bfbfbf;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:2px}.grapher-day .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-day .range-selection-graph{width:100%;padding-bottom:14px}.grapher-day .range-selection-graph .graph-body-secondary{height:50px}.grapher-day .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;height:50px;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 .selection-bar{fill:#b0b0b7;cursor:ew-resize}.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-rifles{fill:none;stroke-width:1;stroke:#333}.grapher-day .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;stroke-width:1;fill:#b0b0b7;cursor:ew-resize}.grapher-day .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;fill:none}.grapher-day .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-day .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#bfbfbf;stroke-width:1px}.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}.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}.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}.grapher-export .graph-body .grapher-vertical-lines{pointer-events:none;user-select:none}.grapher-export .graph-body .grapher-tooltip .tooltip-item path{fill:rgba(255,255,255,.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-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:rgba(255,255,255,.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}.grapher-export .graph-body .grapher-annotations .grapher-annotation{position:absolute}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-marker{display:inline-block;height:400px;background:rgba(0,0,0,.3)}.grapher-export .graph-body .grapher-annotations .grapher-annotation .annotation-text{position:absolute;top:0;background:rgba(255,255,255,.6);border:1px solid rgba(0,0,0,.3);color:#0f0f0f;padding:2px 4px;max-width:max-content;width:200px}.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;display:block}.grapher-export .axis.x-axis .axis-item text{text-anchor:middle}.grapher-export .axis.x-axis .axis-item.axis-item-first text{text-anchor:start}.grapher-export .axis.x-axis .axis-item.axis-item-last text{text-anchor:end}.grapher-export .axis.y-axis{height:400px}.grapher-export .axis.y-axis .axis-item text{text-anchor:end;alignment-baseline:middle}.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-line-shadow{stroke:#bfbfbf;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:2px}.grapher-export .axis .axis-item.axis-item-big-labels text{font-size:16px}.grapher-export .range-selection-graph{width:100%;padding-bottom:14px}.grapher-export .range-selection-graph .graph-body-secondary{height:50px}.grapher-export .range-selection-graph .graph-body-secondary svg{position:absolute;left:0;height:50px;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 .selection-bar{fill:#b0b0b7;cursor:ew-resize}.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-rifles{fill:none;stroke-width:1;stroke:#333}.grapher-export .range-selection-graph .graph-body-secondary svg .selection-bar-handle{stroke:#333;stroke-width:1;fill:#b0b0b7;cursor:ew-resize}.grapher-export .range-selection-graph .graph-body-secondary svg .target-selection-outline{stroke:#333;fill:none}.grapher-export .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-export .range-selection-graph .graph-body-secondary svg .axis-item path{stroke:#bfbfbf;stroke-width:1px}.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: #2a2a2b,\n $background-color-2: #3e3e40,\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: silver,\n $axis-line-width: 2px,\n $axis-tick-color: #505053,\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-bar-size: 14px,\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-handle-color: #AAA,\n $range-graph-handle-fill-color: #666,\n $range-graph-axis-text-color: #9f9f9f,\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 $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 }\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\n svg {\n position: absolute;\n overflow: visible;\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\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\n .grapher-annotation {\n position: absolute;\n\n .annotation-marker {\n display: inline-block;\n height: $primary-graph-body-height;\n background: $annotation-background-color;\n }\n\n .annotation-text {\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 .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 display: block;\n\n .axis-item {\n text {\n text-anchor: middle;\n }\n\n &.axis-item-first {\n text {\n text-anchor: start;\n }\n }\n\n &.axis-item-last {\n text {\n text-anchor: end;\n }\n }\n }\n }\n\n &.y-axis {\n height: $primary-graph-body-height;\n\n .axis-item text {\n text-anchor: end;\n alignment-baseline: middle;\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-line-shadow {\n stroke: $axis-tick-color;\n stroke-width: 1px;\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: 2px;\n }\n }\n\n &.axis-item-big-labels {\n text {\n font-size: 16px;\n }\n }\n }\n }\n\n .range-selection-graph {\n width: 100%;\n padding-bottom: $range-graph-selection-bar-size;\n\n .graph-body-secondary {\n height: $secondary-graph-body-height;\n\n svg {\n position: absolute;\n left: 0;\n height: $secondary-graph-body-height;\n width: 100%;\n overflow: visible;\n\n .target-selection {\n fill: $range-graph-selection-range-color;\n cursor: ew-resize;\n }\n\n .selection-bar {\n fill: $range-graph-selection-bar-color;\n cursor: ew-resize;\n }\n\n .selection-bar-track {\n fill: $range-graph-selection-bar-track-color;\n }\n\n .selection-bar-rifles {\n fill: none;\n stroke-width: 1;\n stroke: $range-graph-selection-bar-rifles-color;\n }\n\n .selection-bar-handle {\n stroke: $range-graph-handle-color;\n stroke-width: 1;\n fill: $range-graph-handle-fill-color;\n cursor: ew-resize;\n }\n\n .target-selection-outline {\n stroke: $range-graph-selection-outline-color;\n fill: none;\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: $axis-tick-color;\n stroke-width: 1px;\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-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-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\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-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-handle-color: #333,\n $range-graph-handle-fill-color: #B0B0B7,\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},6314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var A=0;A<e.length;A++){var h=[].concat(e[A]);r&&a[h[0]]||(void 0!==o&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=o),n&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=n):h[2]=n),i&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=i):h[4]="".concat(i)),t.push(h))}},t}},1354:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(i," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},2694:(e,t,n)=>{"use strict";var r=n(6925);function i(){}function o(){}o.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,o,a){if(a!==r){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:i};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},5072:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;break}return n}function r(e,r){for(var o={},a=[],s=0;s<e.length;s++){var l=e[s],A=r.base?l[0]+r.base:l[0],h=o[A]||0,c="".concat(A," ").concat(h);o[A]=h+1;var g=n(c),d={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==g)t[g].references++,t[g].updater(d);else{var p=i(d,r);r.byIndex=s,t.splice(s,0,{identifier:c,updater:p,references:1})}a.push(c)}return a}function i(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,i){var o=r(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=n(o[a]);t[s].references--}for(var l=r(e,i),A=0;A<o.length;A++){var h=n(o[A]);0===t[h].references&&(t[h].updater(),t.splice(h,1))}o=l}}},7659:e=>{"use strict";var t={};e.exports=function(e,n){var r=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(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},7825:e=>{"use strict";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 r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var i=void 0!==n.layer;i&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,i&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var o=n.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113:e=>{"use strict";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))}}},400:e=>{e.exports="precision highp float;\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = vec4(color);\n}\n"},4765: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"},6120: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"},2789: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}"},3390:e=>{e.exports="precision highp float;\n\nuniform vec4 color;\nuniform float thickness;\nuniform float shadowBlur;\nuniform vec4 shadowColor;\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 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 = vec4(color);\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n}\n"},1039: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"},9155:t=>{"use strict";t.exports=e}},C={};function x(e){var t=C[e];if(void 0!==t)return t.exports;var n=C[e]={id:e,exports:{}};return m[e](n,n.exports,x),n.exports}return x.m=m,x.c=C,x.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return x.d(t,{a:t}),t},x.d=(e,t)=>{for(var n in t)x.o(t,n)&&!x.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},x.f={},x.e=e=>Promise.all(Object.keys(x.f).reduce(((t,n)=>(x.f[n](e,t),t)),[])),x.u=e=>e+".bundle.js",x.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),x.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),t={},n="Grapher:",x.l=(e,r,i,o)=>{if(t[e])t[e].push(r);else{var a,s;if(void 0!==i)for(var l=document.getElementsByTagName("script"),A=0;A<l.length;A++){var h=l[A];if(h.getAttribute("src")==e||h.getAttribute("data-webpack")==n+i){a=h;break}}a||(s=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,x.nc&&a.setAttribute("nonce",x.nc),a.setAttribute("data-webpack",n+i),a.src=e),t[e]=[r];var c=(n,r)=>{a.onerror=a.onload=null,clearTimeout(g);var i=t[e];if(delete t[e],a.parentNode&&a.parentNode.removeChild(a),i&&i.forEach((e=>e(r))),n)return n(r)},g=setTimeout(c.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=c.bind(null,a.onerror),a.onload=c.bind(null,a.onload),s&&document.head.appendChild(a)}},x.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},x.p="/assets/",(()=>{var e={792:0};x.f.j=(t,n)=>{var r=x.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var i=new Promise(((n,i)=>r=e[t]=[n,i]));n.push(r[2]=i);var o=x.p+x.u(t),a=new Error;x.l(o,(n=>{if(x.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var i=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+i+": "+o+")",a.name="ChunkLoadError",a.type=i,a.request=o,r[1](a)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,i,[o,a,s]=n,l=0;if(o.some((t=>0!==e[t]))){for(r in a)x.o(a,r)&&(x.m[r]=a[r]);s&&s(x)}for(t&&t(n);l<o.length;l++)i=o[l],x.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=globalThis.webpackChunkGrapher=globalThis.webpackChunkGrapher||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),x.nc=void 0,d={},p={8841:function(){return{"./index.js":{__wbg_minx_3675eb59ca2b1c04:function(e){return void 0===r&&(r=x.c[1599].exports),r.__wbg_minx_3675eb59ca2b1c04(e)},__wbg_maxx_add7a3e35c2f52a9:function(e){return void 0===i&&(i=x.c[1599].exports),i.__wbg_maxx_add7a3e35c2f52a9(e)},__wbg_miny_9972d9159e80fde8:function(e){return void 0===o&&(o=x.c[1599].exports),o.__wbg_miny_9972d9159e80fde8(e)},__wbg_maxy_1c5b27cf1988c667:function(e){return void 0===a&&(a=x.c[1599].exports),a.__wbg_maxy_1c5b27cf1988c667(e)},__wbg_renderwidth_a0b0f18a85207529:function(e){return void 0===s&&(s=x.c[1599].exports),s.__wbg_renderwidth_a0b0f18a85207529(e)},__wbg_renderheight_36b17e8bfc037fc9:function(e){return void 0===l&&(l=x.c[1599].exports),l.__wbg_renderheight_36b17e8bfc037fc9(e)},__wbg_scale_5e6438f0fcc08bc0:function(e){return void 0===A&&(A=x.c[1599].exports),A.__wbg_scale_5e6438f0fcc08bc0(e)},__wbindgen_string_get:function(e,t){return void 0===h&&(h=x.c[1599].exports),h.__wbindgen_string_get(e,t)},__wbindgen_object_drop_ref:function(e){return void 0===c&&(c=x.c[1599].exports),c.__wbindgen_object_drop_ref(e)},__wbindgen_throw:function(e,t){return void 0===g&&(g=x.c[1599].exports),g.__wbindgen_throw(e,t)}}}}},u={831:[8841]},x.w={},x.f.wasm=function(e,t){(u[e]||[]).forEach((function(n,r){var i=d[n];if(i)t.push(i);else{var o,a=p[n](),s=fetch(x.p+""+{831:{8841:"1767282193a714f63082"}}[e][n]+".module.wasm");o=a&&"function"==typeof a.then&&"function"==typeof WebAssembly.compileStreaming?Promise.all([WebAssembly.compileStreaming(s),a]).then((function(e){return WebAssembly.instantiate(e[0],e[1])})):"function"==typeof WebAssembly.instantiateStreaming?WebAssembly.instantiateStreaming(s,a):s.then((function(e){return e.arrayBuffer()})).then((function(e){return WebAssembly.instantiate(e,a)})),t.push(d[n]=o.then((function(e){return x.w[n]=(e.instance||e).exports})))}}))},x(7210)})()));
2
+ //# sourceMappingURL=bundle.js.map