",e=e.replace("",i+"")),e=e.replace(/zIndex="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery\d+="[^"]+"/g,"").replace(/url\(("|")(.*?)("|")\;?\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/(()=>{"use strict";var o={660:t=>{t.exports=e},944:e=>{e.exports=t}},a={};function n(t){var e=a[t];if(void 0!==e)return e.exports;var i=a[t]={exports:{}};return o[t](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var i={};n.d(i,{default:()=>$});var r=n(944),s=n.n(r);let{isSafari:l,win:h,win:{document:c}}=s(),d=h.URL||h.webkitURL||h;function p(t){let e=t.replace(/filename=.*;/,"").match(/data:([^;]*)(;base64)?,([A-Z+\d\/]+)/i);if(e&&e.length>3&&h.atob&&h.ArrayBuffer&&h.Uint8Array&&h.Blob&&d.createObjectURL){let t=h.atob(e[3]),o=new h.ArrayBuffer(t.length),a=new h.Uint8Array(o);for(let e=0;e1e3)throw Error("Input too long");let n=/Edge\/\d+/.test(o.userAgent);if((l&&"string"==typeof t&&0===t.indexOf("data:application/pdf")||n||t.length>2e6)&&!(t=p(t)||""))throw Error("Failed to convert to blob");if(void 0!==a.download)a.href=t,a.download=e,c.body.appendChild(a),a.click(),c.body.removeChild(a);else try{if(!h.open(t,"chart"))throw Error("Failed to open window")}catch{h.location.href=t}}};var g=n(660),m=n.n(g);let f={exporting:{csv:{annotations:{itemDelimiter:"; ",join:!1},columnHeaderFormatter:null,dateFormat:"%Y-%m-%d %H:%M:%S",decimalPoint:null,itemDelimiter:null,lineDelimiter:"\n"},showTable:!1,useMultiLevelHeaders:!0,useRowspanHeaders:!0,showExportInProgress:!0},lang:{downloadCSV:"Download CSV",downloadXLS:"Download XLS",exportData:{annotationHeader:"Annotations",categoryHeader:"Category",categoryDatetimeHeader:"DateTime"},viewData:"View data table",hideData:"Hide data table",exportInProgress:"Exporting..."}},{getOptions:x,setOptions:b}=s(),{downloadURL:y}=u,{doc:w,win:T}=s(),{addEvent:v,defined:D,extend:S,find:L,fireEvent:E,isNumber:A,pick:C}=s();function k(t){let e=!!this.options.exporting?.showExportInProgress,o=T.requestAnimationFrame||setTimeout;o(()=>{e&&this.showLoading(this.options.lang.exportInProgress),o(()=>{try{t.call(this)}finally{e&&this.hideLoading()}})})}function H(){k.call(this,()=>{let t=this.getCSV(!0);y(M(t,"text/csv")||"data:text/csv,\uFEFF"+encodeURIComponent(t),this.getFilename()+".csv")})}function O(){k.call(this,()=>{let t='\x3c!--[if gte mso 9]>Ark1td{border:none;font-family: Calibri, sans-serif;} .number{mso-number-format:"0.00";} .text{ mso-number-format:"@";} '+this.getTable(!0)+"";y(M(t,"application/vnd.ms-excel")||"data:application/vnd.ms-excel;base64,"+T.btoa(unescape(encodeURIComponent(t))),this.getFilename()+".xls")})}function R(t){let e="",o=this.getDataRows(),a=this.options.exporting.csv,n=C(a.decimalPoint,","!==a.itemDelimiter&&t?1.1.toLocaleString()[1]:"."),i=C(a.itemDelimiter,","===n?";":","),r=a.lineDelimiter;return o.forEach((t,a)=>{let s="",l=t.length;for(;l--;)"string"==typeof(s=t[l])&&(s=`"${s}"`),"number"==typeof s&&"."!==n&&(s=s.toString().replace(".",n)),t[l]=s;t.length=o.length?o[0].length:0,e+=t.join(i),a1?o:e.name,topLevelColumnTitle:e.name}:e.name+(a>1?" ("+o+")":""):e.options.title&&e.options.title.text||(e.dateTime?u:p):p},m=function(t,e,o){let a={},n={};return e.forEach(function(e){let i=(t.keyToAxis&&t.keyToAxis[e]||e)+"Axis",r=A(o)?t.chart[i][o]:t[i];a[e]=r&&r.categories||[],n[e]=r&&r.dateTime}),{categoryMap:a,dateTimeValueAxisMap:n}},f=function(t,e){let o=t.pointArrayMap||["y"];return t.data.some(t=>void 0!==t.y&&t.name)&&e&&!e.categories&&"name"!==t.exportKey?["x",...o]:o},x=[],b,y,w,T=0,v,S;for(v in this.series.forEach(function(e){let o=e.options.keys,l=e.xAxis,d=o||f(e,l),p=d.length,u=!e.requireSorting&&{},b=r.indexOf(l),y=m(e,d),v,D;if(!1!==e.options.includeInDataExport&&!e.options.isInternal&&!1!==e.visible){for(L(x,function(t){return t[0]===b})||x.push([b,T]),D=0;D{if(!t.tagName||"#text"===t.tagName)return t.textContent||"";let o=t.attributes,a=`<${t.tagName}`;return o&&Object.keys(o).forEach(t=>{let e=o[t];a+=` ${t}="${e}"`}),a+=">",a+=t.textContent||"",(t.children||[]).forEach(t=>{a+=e(t)}),a+=``};return e(this.getTableAST(t))}function B(t){let e=0,o=[],a=this.options,n=t?1.1.toLocaleString()[1]:".",i=C(a.exporting.useMultiLevelHeaders,!0),r=this.getDataRows(i),s=i?r.shift():null,l=r.shift(),h=function(t,e){let o=t.length;if(e.length!==o)return!1;for(;o--;)if(t[o]!==e[o])return!1;return!0},c=function(t,e,o,a){let i=C(a,""),r="highcharts-text"+(e?" "+e:"");return"number"==typeof i?(i=i.toString(),","===n&&(i=i.replace(".",n)),r="highcharts-number"):a||(r="highcharts-empty"),{tagName:t,attributes:o=S({class:r},o),textContent:i}};!1!==a.exporting.tableCaption&&o.push({tagName:"caption",attributes:{class:"highcharts-table-caption"},textContent:C(a.exporting.tableCaption,a.title.text?a.title.text:"Chart")});for(let t=0,o=r.length;te&&(e=r[t].length);o.push(function(t,e,o){let n=[],r=0,s=o||e&&e.length,l,d=0,p;if(i&&t&&e&&!h(t,e)){let o=[];for(;r1&&t.attributes&&(t.attributes.valign="top",t.attributes.rowspan=p),o.push(t)}n.push({tagName:"tr",children:o})}if(e){let t=[];for(r=0,s=e.length;rt.children[e].textContent,a=(t,e)=>(a,n)=>{let i,r;return i=o(e?a:n,t),r=o(e?n:a,t),""===i||""===r||isNaN(i)||isNaN(r)?i.toString().localeCompare(r):i-r};if(e&&t.options.exporting&&t.options.exporting.allowTableSorting){let o=e.querySelector("thead tr");o&&o.childNodes.forEach(o=>{let n=o.closest("table");o.addEventListener("click",function(){let i=[...e.querySelectorAll("tr:not(thead tr)")],r=[...o.parentNode.children];i.sort(a(r.indexOf(o),t.ascendingOrderInTable=!t.ascendingOrderInTable)).forEach(t=>{n.appendChild(t)}),r.forEach(t=>{["highcharts-sort-ascending","highcharts-sort-descending"].forEach(e=>{t.classList.contains(e)&&t.classList.remove(e)})}),o.classList.add(t.ascendingOrderInTable?"highcharts-sort-ascending":"highcharts-sort-descending")})})}}function P(){this.options&&this.options.exporting&&this.options.exporting.showTable&&!this.options.chart.forExport&&this.viewData()}function K(){this.dataTableDiv?.remove()}let W=s();W.dataURLtoBlob=W.dataURLtoBlob||u.dataURLtoBlob,W.downloadURL=W.downloadURL||u.downloadURL,({compose:function(t,e){let o=t.prototype;if(!o.getCSV){let a=x().exporting;v(t,"afterViewData",j),v(t,"render",P),v(t,"destroy",K),o.downloadCSV=H,o.downloadXLS=O,o.getCSV=R,o.getDataRows=N,o.getTable=V,o.getTableAST=B,o.hideData=F,o.toggleDataTable=I,o.viewData=U,a&&(S(a.menuItemDefinitions,{downloadCSV:{textKey:"downloadCSV",onclick:function(){this.downloadCSV()}},downloadXLS:{textKey:"downloadXLS",onclick:function(){this.downloadXLS()}},viewData:{textKey:"viewData",onclick:function(){k.call(this,this.toggleDataTable)}}}),a.buttons&&a.buttons.contextButton.menuItems&&a.buttons.contextButton.menuItems.push("separator","downloadCSV","downloadXLS","viewData")),b(f);let{arearange:n,gantt:i,map:r,mapbubble:s,treemap:l,xrange:h}=e.types;n&&(n.prototype.keyToAxis={low:"y",high:"y"}),i&&(i.prototype.exportKey="name",i.prototype.keyToAxis={start:"x",end:"x"}),r&&(r.prototype.exportKey="name"),s&&(s.prototype.exportKey="name"),l&&(l.prototype.exportKey="name"),h&&(h.prototype.keyToAxis={x2:"x"})}}}).compose(W.Chart,W.Series);let $=s();return i.default})()); // Internal-FR - Source Code !/** * Highcharts JS v12.1.2 (2024-12-21) * @module highcharts/modules/accessibility * @requires highcharts * * Accessibility module * * (c) 2010-2024 Highsoft AS * Author: Oystein Moseng * * License: www.highcharts.com/license */function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(e._Highcharts,e._Highcharts.Templating,e._Highcharts.AST,e._Highcharts.Legend,e._Highcharts.Axis,e._Highcharts.Color,e._Highcharts.SeriesRegistry,e._Highcharts.RendererRegistry,e._Highcharts.SVGRenderer,e._Highcharts.Point,e._Highcharts.Series):"function"==typeof define&&define.amd?define("highcharts/modules/accessibility",["highcharts/highcharts"],function(e){return t(e,e.Templating,e.AST,e.Legend,e.Axis,e.Color,e.SeriesRegistry,e.RendererRegistry,e.SVGRenderer,e.Point,e.Series)}):"object"==typeof exports?exports["highcharts/modules/accessibility"]=t(e._Highcharts,e._Highcharts.Templating,e._Highcharts.AST,e._Highcharts.Legend,e._Highcharts.Axis,e._Highcharts.Color,e._Highcharts.SeriesRegistry,e._Highcharts.RendererRegistry,e._Highcharts.SVGRenderer,e._Highcharts.Point,e._Highcharts.Series):e.Highcharts=t(e.Highcharts,e.Highcharts.Templating,e.Highcharts.AST,e.Highcharts.Legend,e.Highcharts.Axis,e.Highcharts.Color,e.Highcharts.SeriesRegistry,e.Highcharts.RendererRegistry,e.Highcharts.SVGRenderer,e.Highcharts.Point,e.Highcharts.Series)}("undefined"==typeof window?this:window,(e,t,i,s,n,r,o,a,l,h,c)=>(()=>{"use strict";let d;var u,p,g,m,b={660:e=>{e.exports=i},532:e=>{e.exports=n},620:e=>{e.exports=r},632:e=>{e.exports=s},260:e=>{e.exports=h},608:e=>{e.exports=a},540:e=>{e.exports=l},820:e=>{e.exports=c},512:e=>{e.exports=o},984:e=>{e.exports=t},944:t=>{t.exports=e}},f={};function x(e){var t=f[e];if(void 0!==t)return t.exports;var i=f[e]={exports:{}};return b[e](i,i.exports,x),i.exports}x.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return x.d(t,{a:t}),t},x.d=(e,t)=>{for(var i in t)x.o(t,i)&&!x.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},x.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var y={};x.d(y,{default:()=>nx});var v=x(944),w=x.n(v);let{doc:E,win:A}=w(),{css:T}=w(),C=A.EventTarget&&new A.EventTarget||"none";function M(e){if("function"==typeof A.MouseEvent)return new A.MouseEvent(e.type,e);if(E.createEvent){let t=E.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e.type,e.bubbles,e.cancelable,e.view||A,e.detail,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget),t}return k(e.type)}function k(e,t,i){let s=t||{x:0,y:0};if("function"==typeof A.MouseEvent)return new A.MouseEvent(e,{bubbles:!0,cancelable:!0,composed:!0,button:0,buttons:1,relatedTarget:i||C,view:A,detail:"click"===e?1:0,screenX:s.x,screenY:s.y,clientX:s.x,clientY:s.y});if(E.createEvent){let t=E.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e,!0,!0,A,"click"===e?1:0,s.x,s.y,s.x,s.y,!1,!1,!1,!1,0,null),t}return{type:e}}let S={addClass:function(e,t){e.classList?e.classList.add(t):0>e.className.indexOf(t)&&(e.className+=" "+t)},cloneMouseEvent:M,cloneTouchEvent:function(e){let t=e=>{let t=[];for(let i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},getElement:function(e){return E.getElementById(e)},getFakeMouseEvent:k,getHeadingTagNameForElement:function(e){let t=e=>"h"+Math.min(6,parseInt(e.slice(1),10)+1),i=e=>/^H[1-6]$/i.test(e),s=e=>{let t=e;for(;t=t.previousSibling;){let e=t.tagName||"";if(i(e))return e}return""},n=e=>{let r=s(e);if(r)return t(r);let o=e.parentElement;if(!o)return"h6";let a=o.tagName;return i(a)?t(a):n(o)};return n(e)},removeChildNodes:function(e){for(;e.lastChild;)e.removeChild(e.lastChild)},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(t,"g"),"")},removeElement:function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},reverseChildNodes:function(e){let t=e.childNodes.length;for(;t--;)e.appendChild(e.childNodes[t])},simulatedEventTarget:C,stripHTMLTagsFromString:function(e,t=!1){return"string"==typeof e?t?e.replace(/<\/?[^>]+(>|$)/g,""):e.replace(/<\/?(?!\s)[^>]+(>|$)/g,""):e},visuallyHideElement:function(e){T(e,{position:"absolute",width:"1px",height:"1px",overflow:"hidden",whiteSpace:"nowrap",clip:"rect(1px, 1px, 1px, 1px)",marginTop:"-3px","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)",filter:"alpha(opacity=1)",opacity:.01})}};var P=x(984),D=x.n(P);let{format:N}=D(),{getNestedProperty:B,pick:I}=w();!function(e){function t(e,t,i){let s=(e,t)=>{let i=e.slice(t||0),s=i.indexOf("{"),n=i.indexOf("}");if(s>-1&&n>s)return{statement:i.substring(s+1,n),begin:t+s+1,end:t+n}},n=[],r,o,a=0;do r=s(e,a),(o=e.substring(a,r&&r.begin-1)).length&&n.push({value:o,type:"constant"}),r&&n.push({value:r.statement,type:"statement"}),a=r?r.end+1:a+1;while(r);return n.forEach(e=>{"statement"===e.type&&(e.value=function(e,t){let i,s;let n=e.indexOf("#each("),r=e.indexOf("#plural("),o=e.indexOf("["),a=e.indexOf("]");if(n>-1){let r=e.slice(n).indexOf(")")+n,o=e.substring(0,n),a=e.substring(r+1),l=e.substring(n+6,r).split(","),h=Number(l[1]),c;if(s="",i=B(l[0],t)){c=(h=isNaN(h)?i.length:h)<0?i.length+h:Math.min(h,i.length);for(let e=0;e-1){var l;let i=e.slice(r).indexOf(")")+r,n=e.substring(r+8,i).split(",");switch(Number(B(n[0],t))){case 0:s=I(n[4],n[1]);break;case 1:s=I(n[2],n[1]);break;case 2:s=I(n[3],n[1]);break;default:s=n[1]}return s?(l=s).trim&&l.trim()||l.replace(/^\s+|\s+$/g,""):""}if(o>-1){let s;let n=e.substring(0,o),r=Number(e.substring(o+1,a));return i=B(n,t),!isNaN(r)&&i&&(r<0?void 0===(s=i[i.length+r])&&(s=i[0]):void 0===(s=i[r])&&(s=i[i.length-1])),void 0!==s?s:""}return"{"+e+"}"}(e.value,t))}),N(n.reduce((e,t)=>e+t.value,""),t,i)}function i(e,i){let s=e.split("."),n=this.options.lang,r=0;for(;r!!e.graphic);return t&&t.graphic&&t.graphic.element}}function G(e){let t=q(e);return t&&t.parentNode||e.graph&&e.graph.element||e.group&&e.group.element}let K={fireEventOnWrappedOrUnwrappedElement:function e(t,i){let s=i.type,n=t.hcEvents;O.createEvent&&(t.dispatchEvent||t.fireEvent)?t.dispatchEvent?t.dispatchEvent(i):t.fireEvent(s,i):n&&n[s]?z(t,s,i):t.element&&e(t.element,i)},getChartTitle:function(e){return R(e.options.title.text||e.langFormat("accessibility.defaultChartTitle",{chart:e}),e.renderer.forExport)},getAxisDescription:function(e){return e&&(e.options.accessibility?.description||e.axisTitle?.textStr||e.options.id||e.categories&&"categories"||e.dateTime&&"Time"||"values")},getAxisRangeDescription:function(e){let t=e.options||{};return t.accessibility&&void 0!==t.accessibility.rangeDescription?t.accessibility.rangeDescription:e.categories?function(e){let t=e.chart;return e.dataMax&&e.dataMin?t.langFormat("accessibility.axis.rangeCategories",{chart:t,axis:e,numCategories:e.dataMax-e.dataMin+1}):""}(e):e.dateTime&&(0===e.min||0===e.dataMin)?function(e){let t=e.chart,i={},s=e.dataMin||e.min||0,n=e.dataMax||e.max||0,r="Seconds";i.Seconds=(n-s)/1e3,i.Minutes=i.Seconds/60,i.Hours=i.Minutes/60,i.Days=i.Hours/24,["Minutes","Hours","Days"].forEach(function(e){i[e]>2&&(r=e)});let o=i[r].toFixed("Seconds"!==r&&"Minutes"!==r?1:0);return t.langFormat("accessibility.axis.timeRange"+r,{chart:t,axis:e,range:o.replace(".0","")})}(e):function(e){let t=e.chart,i=t.options,s=i&&i.accessibility&&i.accessibility.screenReaderSection.axisRangeDateFormat||"",n={min:e.dataMin||e.min||0,max:e.dataMax||e.max||0},r=function(i){return e.dateTime?t.time.dateFormat(s,n[i]):n[i].toString()};return t.langFormat("accessibility.axis.rangeFromTo",{chart:t,axis:e,rangeFrom:r("min"),rangeTo:r("max")})}(e)},getPointFromXY:function(e,t,i){let s=e.length,n;for(;s--;)if(n=H(e[s].points||[],function(e){return e.x===t&&e.y===i}))return n},getSeriesFirstPointElement:q,getSeriesFromName:function(e,t){return t?(e.series||[]).filter(function(e){return e.name===t}):e.series},getSeriesA11yElement:G,unhideChartElementFromAT:function e(t,i){i.setAttribute("aria-hidden",!1),i!==t.renderTo&&i.parentNode&&i.parentNode!==O.body&&(Array.prototype.forEach.call(i.parentNode.childNodes,function(e){e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden",!0)}),e(t,i.parentNode))},hideSeriesFromAT:function(e){let t=G(e);t&&t.setAttribute("aria-hidden",!0)},scrollAxisToPoint:function(e){let t=e.series.xAxis,i=e.series.yAxis,s=t&&t.scrollbar?t:i,n=s&&s.scrollbar;if(n&&L(n.to)&&L(n.from)){let t=n.to-n.from,i=function(e,t){if(!L(e.dataMin)||!L(e.dataMax))return 0;let i=e.toPixels(e.dataMin),s=e.toPixels(e.dataMax),n="xAxis"===e.coll?"x":"y";return(e.toPixels(t[n]||0)-i)/(s-i)}(s,e);n.updatePosition(i-t/2,i+t/2),z(n,"changed",{from:n.from,to:n.to,trigger:"scrollbar",DOMEvent:null})}}},{doc:U}=w(),{removeElement:V}=S,W=class{constructor(){this.elements=[]}createElement(){let e=U.createElement.apply(U,arguments);return this.elements.push(e),e}removeElement(e){V(e),this.elements.splice(this.elements.indexOf(e),1)}destroyCreatedElements(){this.elements.forEach(function(e){V(e)}),this.elements=[]}},{addEvent:X}=w(),Y=class{constructor(){this.eventRemovers=[]}addEvent(){let e=X.apply(w(),arguments);return this.eventRemovers.push({element:arguments[0],remover:e}),e}removeEvent(e){let t=this.eventRemovers.map(e=>e.remover).indexOf(e);this.eventRemovers[t].remover(),this.eventRemovers.splice(t,1)}removeAddedEvents(){this.eventRemovers.map(e=>e.remover).forEach(e=>e()),this.eventRemovers=[]}},{fireEventOnWrappedOrUnwrappedElement:j}=K,{getFakeMouseEvent:_}=S,Z=class{destroy(){}getKeyboardNavigation(){return[]}init(){}onChartRender(){}onChartUpdate(){}initBase(e,t){this.chart=e,this.eventProvider=new Y,this.domElementProvider=new W,this.proxyProvider=t,this.keyCodes={left:37,right:39,up:38,down:40,enter:13,space:32,esc:27,tab:9,pageUp:33,pageDown:34,end:35,home:36}}addEvent(e,t,i,s){return this.eventProvider.addEvent(e,t,i,s)}createElement(e,t){return this.domElementProvider.createElement(e,t)}fakeClickEvent(e){j(e,_("click"))}destroyBase(){this.domElementProvider.destroyCreatedElements(),this.eventProvider.removeAddedEvents()}},{find:$}=w(),Q=class{constructor(e,t){this.chart=e,this.keyCodeMap=t.keyCodeMap||[],this.validate=t.validate,this.init=t.init,this.terminate=t.terminate,this.response={success:1,prev:2,next:3,noHandler:4,fail:5}}run(e){let t=e.which||e.keyCode,i=this.response.noHandler,s=$(this.keyCodeMap,function(e){return e[0].indexOf(t)>-1});return s?i=s[1].call(this,t,e):9===t&&(i=this.response[e.shiftKey?"prev":"next"]),i}},{unhideChartElementFromAT:J,getChartTitle:ee}=K,{doc:et}=w(),{stripHTMLTagsFromString:ei}=S,es=class extends Z{onChartUpdate(){this.handleSVGTitleElement(),this.setSVGContainerLabel(),this.setGraphicContainerAttrs(),this.setRenderToAttrs(),this.makeCreditsAccessible()}handleSVGTitleElement(){let e=this.chart,t="highcharts-title-"+e.index,i=ei(e.langFormat("accessibility.svgContainerTitle",{chartTitle:ee(e)}));if(i.length){let s=this.svgTitleElement=this.svgTitleElement||et.createElementNS("http://www.w3.org/2000/svg","title");s.textContent=i,s.id=t,e.renderTo.insertBefore(s,e.renderTo.firstChild)}}setSVGContainerLabel(){let e=this.chart,t=e.langFormat("accessibility.svgContainerLabel",{chartTitle:ee(e)});e.renderer.box&&t.length&&e.renderer.box.setAttribute("aria-label",t)}setGraphicContainerAttrs(){let e=this.chart,t=e.langFormat("accessibility.graphicContainerLabel",{chartTitle:ee(e)});t.length&&e.container.setAttribute("aria-label",t)}setRenderToAttrs(){let e=this.chart,t="disabled"!==e.options.accessibility.landmarkVerbosity,i=e.langFormat("accessibility.chartContainerLabel",{title:ee(e),chart:e});i&&(e.renderTo.setAttribute("role",t?"region":"group"),e.renderTo.setAttribute("aria-label",i))}makeCreditsAccessible(){let e=this.chart,t=e.credits;t&&(t.textStr&&t.element.setAttribute("aria-label",e.langFormat("accessibility.credits",{creditsStr:ei(t.textStr,e.renderer.forExport)})),J(e,t.element))}getKeyboardNavigation(){let e=this.chart;return new Q(e,{keyCodeMap:[],validate:function(){return!0},init:function(){let t=e.accessibility;t&&t.keyboardNavigation.tabindexContainer.focus()}})}destroy(){this.chart.renderTo.setAttribute("aria-hidden",!0)}},{addEvent:en,pick:er}=w();!function(e){let t=["x","y","transform","width","height","r","d","stroke-width"];function i(){let e=this.focusElement,t=this.options.accessibility.keyboardNavigation.focusBorder;e&&(e.removeFocusBorder(),t.enabled&&e.addFocusBorder(t.margin,{stroke:t.style.color,strokeWidth:t.style.lineWidth,r:t.style.borderRadius}))}function s(e,t){let i=this.options.accessibility.keyboardNavigation.focusBorder,s=t||e.element;s&&s.focus&&(s.hcEvents&&s.hcEvents.focusin||en(s,"focusin",function(){}),s.focus(),i.hideBrowserFocusOutline&&(s.style.outline="none")),this.focusElement&&this.focusElement.removeFocusBorder(),this.focusElement=e,this.renderFocusBorder()}function n(e,i){this.focusBorder&&this.removeFocusBorder();let s=this.getBBox(),n=er(e,3),r=this.parentGroup,o=this.scaleX||r&&r.scaleX,a=this.scaleY||r&&r.scaleY,l=(o?!a:a)?Math.abs(o||a||1):(Math.abs(o||1)+Math.abs(a||1))/2,h=this.renderer.fontMetrics(this).h;s.x+=this.translateX?this.translateX:0,s.y+=this.translateY?this.translateY:0;let c=s.x-n,d=s.y-n,u=s.width+2*n,p=s.height+2*n,g=!!this.text;if("text"===this.element.nodeName||g){let e,t;let i=!!this.rotation,r=g?{x:i?1:0,y:0}:(e=0,t=0,"middle"===this.attr("text-anchor")?e=t=.5:this.rotation?e=.25:t=.75,{x:e,y:t}),o=+this.attr("x"),a=+this.attr("y");if(isNaN(o)||(c=o-s.width*r.x-n),isNaN(a)||(d=a-("start"===this.attr("text-anchor")?h:s.height)*r.y-n),g&&i){let e=u;u=p,p=e,isNaN(o)||(c=o-s.height*r.x-n),isNaN(a)||(d=a-s.width*r.y-n)}}this.focusBorder=this.renderer.rect(c,d,u,p,parseInt((i&&i.r||0).toString(),10)/l).addClass("highcharts-focus-border").attr({zIndex:99}).add(r),this.renderer.styledMode||this.focusBorder.attr({stroke:i&&i.stroke,"stroke-width":(i&&i.strokeWidth||0)/l}),function(e,...i){e.focusBorderUpdateHooks||(e.focusBorderUpdateHooks={},t.forEach(t=>{let s=t+"Setter",n=e[s]||e._defaultSetter;e.focusBorderUpdateHooks[s]=n,e[s]=function(){let t=n.apply(e,arguments);return e.addFocusBorder.apply(e,i),t}}))}(this,e,i),function(e){if(e.focusBorderDestroyHook)return;let t=e.destroy;e.destroy=function(){return e.focusBorder&&e.focusBorder.destroy&&e.focusBorder.destroy(),t.apply(e,arguments)},e.focusBorderDestroyHook=t}(this)}function r(){var e;e=this,e.focusBorderUpdateHooks&&(Object.keys(e.focusBorderUpdateHooks).forEach(t=>{let i=e.focusBorderUpdateHooks[t];i===e._defaultSetter?delete e[t]:e[t]=i}),delete e.focusBorderUpdateHooks),this.focusBorderDestroyHook&&(this.destroy=this.focusBorderDestroyHook,delete this.focusBorderDestroyHook),this.focusBorder&&(this.focusBorder.destroy(),delete this.focusBorder)}e.compose=function(e,t){let o=e.prototype,a=t.prototype;o.renderFocusBorder||(o.renderFocusBorder=i,o.setFocusToElement=s),a.addFocusBorder||(a.addFocusBorder=n,a.removeFocusBorder=r)}}(p||(p={}));let eo=p;var ea=x(660),el=x.n(ea);let{doc:eh}=w(),{addClass:ec,visuallyHideElement:ed}=S,{attr:eu}=w(),ep=class{constructor(e,t){this.chart=e,this.domElementProvider=new W,this.announceRegion=this.addAnnounceRegion(t)}destroy(){this.domElementProvider.destroyCreatedElements()}announce(e){el().setElementHTML(this.announceRegion,e),this.clearAnnouncementRegionTimer&&clearTimeout(this.clearAnnouncementRegionTimer),this.clearAnnouncementRegionTimer=setTimeout(()=>{this.announceRegion.innerHTML=el().emptyHTML,delete this.clearAnnouncementRegionTimer},3e3)}addAnnounceRegion(e){let t=this.chart.announcerContainer||this.createAnnouncerContainer(),i=this.domElementProvider.createElement("div");return eu(i,{"aria-hidden":!1,"aria-live":e,"aria-atomic":!0}),this.chart.styledMode?ec(i,"highcharts-visually-hidden"):ed(i),t.appendChild(i),i}createAnnouncerContainer(){let e=this.chart,t=eh.createElement("div");return eu(t,{"aria-hidden":!1,class:"highcharts-announcer-container"}),t.style.position="relative",e.renderTo.insertBefore(t,e.renderTo.firstChild),e.announcerContainer=t,t}},{escapeStringForHTML:eg,stripHTMLTagsFromString:em}=S;function eb(e){return(e.annotations||[]).reduce((e,t)=>(t.options&&!1!==t.options.visible&&(e=e.concat(t.labels)),e),[])}function ef(e){return e.options&&e.options.accessibility&&e.options.accessibility.description||e.graphic&&e.graphic.text&&e.graphic.text.textStr||""}function ex(e){let t=e.options&&e.options.accessibility&&e.options.accessibility.description;if(t)return t;let i=e.chart,s=ef(e),n=e.points,r=e=>e.graphic&&e.graphic.element&&e.graphic.element.getAttribute("aria-label")||"",o=n.filter(e=>!!e.graphic).map(e=>{let t=e.accessibility&&e.accessibility.valueDescription||r(e),i=e&&e.series.name||"";return(i?i+", ":"")+"data point "+t}).filter(e=>!!e),a=o.length,l=a>1?"MultiplePoints":a?"SinglePoint":"NoPoints",h={annotationText:s,annotation:e,numPoints:a,annotationPoint:o[0],additionalAnnotationPoints:o.slice(1)};return i.langFormat("accessibility.screenReaderSection.annotations.description"+l,h)}function ey(e){return eb(e).map(t=>{let i=eg(em(ex(t),e.renderer.forExport));return i?`
  • ${i}
  • `:""})}let ev={getAnnotationsInfoHTML:function(e){let t=e.annotations;if(!(t&&t.length))return"";let i=ey(e);return`
      ${i.join(" ")}
    `},getAnnotationLabelDescription:ex,getAnnotationListItems:ey,getPointAnnotationTexts:function(e){let t=eb(e.series.chart).filter(t=>t.points.indexOf(e)>-1);return t.length?t.map(e=>`${ef(e)}`):[]}},{getAnnotationsInfoHTML:ew}=ev,{getAxisDescription:eE,getAxisRangeDescription:eA,getChartTitle:eT,unhideChartElementFromAT:eC}=K,{format:eM}=D(),{doc:ek}=w(),{addClass:eS,getElement:eP,getHeadingTagNameForElement:eD,stripHTMLTagsFromString:eN,visuallyHideElement:eB}=S,{attr:eI,pick:eF,replaceNested:eO}=w();function eR(e){return eO(e,[/<([\w\-.:!]+)\b[^<>]*>\s*<\/\1>/g,""])}let eL=class extends Z{constructor(){super(...arguments),this.screenReaderSections={}}init(){let e=this.chart,t=this;this.initRegionsDefinitions(),this.addEvent(e,"aftergetTableAST",function(e){t.onDataTableCreated(e)}),this.addEvent(e,"afterViewData",function(e){e.wasHidden&&(t.dataTableDiv=e.element,setTimeout(function(){t.focusDataTable()},300))}),this.addEvent(e,"afterHideData",function(){t.viewDataTableButton&&t.viewDataTableButton.setAttribute("aria-expanded","false")}),e.exporting&&this.addEvent(e,"afterPrint",function(){t.updateAllScreenReaderSections()}),this.announcer=new ep(e,"assertive")}initRegionsDefinitions(){let e=this,t=this.chart.options.accessibility;this.screenReaderSections={before:{element:null,buildContent:function(i){let s=t.screenReaderSection.beforeChartFormatter;return s?s(i):e.defaultBeforeChartFormatter(i)},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.renderTo.firstChild)},afterInserted:function(){void 0!==e.sonifyButtonId&&e.initSonifyButton(e.sonifyButtonId),void 0!==e.dataTableButtonId&&e.initDataTableButton(e.dataTableButtonId)}},after:{element:null,buildContent:function(i){let s=t.screenReaderSection.afterChartFormatter;return s?s(i):e.defaultAfterChartFormatter()},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.container.nextSibling)},afterInserted:function(){e.chart.accessibility&&t.keyboardNavigation.enabled&&e.chart.accessibility.keyboardNavigation.updateExitAnchor()}}}}onChartRender(){this.linkedDescriptionElement=this.getLinkedDescriptionElement(),this.setLinkedDescriptionAttrs(),this.updateAllScreenReaderSections()}updateAllScreenReaderSections(){let e=this;Object.keys(this.screenReaderSections).forEach(function(t){e.updateScreenReaderSection(t)})}getLinkedDescriptionElement(){let e=this.chart.options.accessibility.linkedDescription;if(!e)return;if("string"!=typeof e)return e;let t=eM(e,this.chart),i=ek.querySelectorAll(t);if(1===i.length)return i[0]}setLinkedDescriptionAttrs(){let e=this.linkedDescriptionElement;e&&(e.setAttribute("aria-hidden","true"),eS(e,"highcharts-linked-description"))}updateScreenReaderSection(e){let t=this.chart,i=this.screenReaderSections[e],s=i.buildContent(t),n=i.element=i.element||this.createElement("div"),r=n.firstChild||this.createElement("div");s?(this.setScreenReaderSectionAttribs(n,e),el().setElementHTML(r,s),n.appendChild(r),i.insertIntoDOM(n,t),t.styledMode?eS(r,"highcharts-visually-hidden"):eB(r),eC(t,r),i.afterInserted&&i.afterInserted()):(n.parentNode&&n.parentNode.removeChild(n),i.element=null)}setScreenReaderSectionAttribs(e,t){let i=this.chart,s=i.langFormat("accessibility.screenReaderSection."+t+"RegionLabel",{chart:i,chartTitle:eT(i)});eI(e,{id:`highcharts-screen-reader-region-${t}-${i.index}`,"aria-label":s||void 0}),e.style.position="relative",s&&e.setAttribute("role","all"===i.options.accessibility.landmarkVerbosity?"region":"group")}defaultBeforeChartFormatter(){let e=this.chart,t=e.options.accessibility.screenReaderSection.beforeChartFormat;if(!t)return"";let i=this.getAxesDescription(),s=e.sonify&&e.options.sonification&&e.options.sonification.enabled,n="highcharts-a11y-sonify-data-btn-"+e.index,r="hc-linkto-highcharts-data-table-"+e.index,o=ew(e),a=e.langFormat("accessibility.screenReaderSection.annotations.heading",{chart:e}),l={headingTagName:eD(e.renderTo),chartTitle:eT(e),typeDescription:this.getTypeDescriptionText(),chartSubtitle:this.getSubtitleText(),chartLongdesc:this.getLongdescText(),xAxisDescription:i.xAxis,yAxisDescription:i.yAxis,playAsSoundButton:s?this.getSonifyButtonText(n):"",viewTableButton:e.getCSV?this.getDataTableButtonText(r):"",annotationsTitle:o?a:"",annotationsList:o},h=F.i18nFormat(t,l,e);return this.dataTableButtonId=r,this.sonifyButtonId=n,eR(h)}defaultAfterChartFormatter(){let e=this.chart,t=e.options.accessibility.screenReaderSection.afterChartFormat;if(!t)return"";let i={endOfChartMarker:this.getEndOfChartMarkerText()};return eR(F.i18nFormat(t,i,e))}getLinkedDescription(){let e=this.linkedDescriptionElement;return eN(e&&e.innerHTML||"",this.chart.renderer.forExport)}getLongdescText(){let e=this.chart.options,t=e.caption,i=t&&t.text,s=this.getLinkedDescription();return e.accessibility.description||s||i||""}getTypeDescriptionText(){let e=this.chart;return e.types?e.options.accessibility.typeDescription||function(e,t){let i=t[0],s=e.series&&e.series[0]||{},n=e.mapView&&e.mapView.geoMap&&e.mapView.geoMap.title,r={numSeries:e.series.length,numPoints:s.points&&s.points.length,chart:e,mapTitle:n};return i?"map"===i||"tiledwebmap"===i?r.mapTitle?e.langFormat("accessibility.chartTypes.mapTypeDescription",r):e.langFormat("accessibility.chartTypes.unknownMap",r):e.types.length>1?e.langFormat("accessibility.chartTypes.combinationChart",r):function(e,t,i){let s=t[0],n=e.langFormat("accessibility.seriesTypeDescriptions."+s,i),r=e.series&&e.series.length<2?"Single":"Multiple";return(e.langFormat("accessibility.chartTypes."+s+r,i)||e.langFormat("accessibility.chartTypes.default"+r,i))+(n?" "+n:"")}(e,t,r):e.langFormat("accessibility.chartTypes.emptyChart",r)}(e,e.types):""}getDataTableButtonText(e){let t=this.chart;return'"}getSonifyButtonText(e){let t=this.chart;return t.options.sonification&&!1===t.options.sonification.enabled?"":'"}getSubtitleText(){let e=this.chart.options.subtitle;return eN(e&&e.text||"",this.chart.renderer.forExport)}getEndOfChartMarkerText(){let e=eP(`highcharts-end-of-chart-marker-${this.chart.index}`);if(e)return e.outerHTML;let t=this.chart,i=t.langFormat("accessibility.screenReaderSection.endOfChartMarker",{chart:t});return'
    '+i+"
    "}onDataTableCreated(e){let t=this.chart;if(t.options.accessibility.enabled){this.viewDataTableButton&&this.viewDataTableButton.setAttribute("aria-expanded","true");let i=e.tree.attributes||{};i.tabindex=-1,i.summary=t.langFormat("accessibility.table.tableSummary",{chart:t}),e.tree.attributes=i}}focusDataTable(){let e=this.dataTableDiv,t=e&&e.getElementsByTagName("table")[0];t&&t.focus&&t.focus()}initSonifyButton(e){let t=this.sonifyButton=eP(e),i=this.chart,s=e=>{t&&(t.setAttribute("aria-hidden","true"),t.setAttribute("aria-label","")),e.preventDefault(),e.stopPropagation();let s=i.langFormat("accessibility.sonification.playAsSoundClickAnnouncement",{chart:i});this.announcer.announce(s),setTimeout(()=>{t&&(t.removeAttribute("aria-hidden"),t.removeAttribute("aria-label")),i.sonify&&i.sonify()},1e3)};t&&i&&(t.setAttribute("tabindex",-1),t.onclick=function(e){(i.options.accessibility&&i.options.accessibility.screenReaderSection.onPlayAsSoundClick||s).call(this,e,i)})}initDataTableButton(e){let t=this.viewDataTableButton=eP(e),i=this.chart,s=e.replace("hc-linkto-","");t&&(eI(t,{tabindex:-1,"aria-expanded":!!eP(s)}),t.onclick=i.options.accessibility.screenReaderSection.onViewDataTableClick||function(){i.viewData()})}getAxesDescription(){let e=this.chart,t=function(t,i){let s=e[t];return s.length>1||s[0]&&eF(s[0].options.accessibility&&s[0].options.accessibility.enabled,i)},i=!!e.types&&0>e.types.indexOf("map")&&0>e.types.indexOf("treemap")&&0>e.types.indexOf("tilemap"),s=!!e.hasCartesianSeries,n=t("xAxis",!e.angular&&s&&i),r=t("yAxis",s&&i),o={};return n&&(o.xAxis=this.getAxisDescriptionText("xAxis")),r&&(o.yAxis=this.getAxisDescriptionText("yAxis")),o}getAxisDescriptionText(e){let t=this.chart,i=t[e];return t.langFormat("accessibility.axis."+e+"Description"+(i.length>1?"Plural":"Singular"),{chart:t,names:i.map(function(e){return eE(e)}),ranges:i.map(function(e){return eA(e)}),numAxes:i.length})}destroy(){this.announcer&&this.announcer.destroy()}},{attr:eH}=w(),{getChartTitle:ez,unhideChartElementFromAT:eq}=K,{getFakeMouseEvent:eG}=S;function eK(e){return e.exportSVGElements&&e.exportSVGElements[0]}class eU extends Z{init(){let e=this.chart,t=this;this.addEvent(e,"exportMenuShown",function(){t.onMenuShown()}),this.addEvent(e,"exportMenuHidden",function(){t.onMenuHidden()}),this.createProxyGroup()}onMenuHidden(){let e=this.chart.exportContextMenu;e&&e.setAttribute("aria-hidden","true"),this.setExportButtonExpandedState("false")}onMenuShown(){let e=this.chart,t=e.exportContextMenu;t&&(this.addAccessibleContextMenuAttribs(),eq(e,t)),this.setExportButtonExpandedState("true")}setExportButtonExpandedState(e){this.exportButtonProxy&&this.exportButtonProxy.innerElement.setAttribute("aria-expanded",e)}onChartRender(){let e=this.chart,t=e.focusElement,i=e.accessibility;this.proxyProvider.clearGroup("chartMenu"),this.proxyMenuButton(),this.exportButtonProxy&&t&&t===e.exportingGroup&&(t.focusBorder?e.setFocusToElement(t,this.exportButtonProxy.innerElement):i&&i.keyboardNavigation.tabindexContainer.focus())}proxyMenuButton(){let e=this.chart,t=this.proxyProvider,i=eK(e);(function(e){let t=e.options.exporting,i=eK(e);return!!(t&&!1!==t.enabled&&t.accessibility&&t.accessibility.enabled&&i&&i.element)})(e)&&i&&(this.exportButtonProxy=t.addProxyElement("chartMenu",{click:i},"button",{"aria-label":e.langFormat("accessibility.exporting.menuButtonLabel",{chart:e,chartTitle:ez(e)}),"aria-expanded":!1,title:e.options.lang.contextButtonTitle||null}))}createProxyGroup(){this.chart&&this.proxyProvider&&this.proxyProvider.addGroup("chartMenu")}addAccessibleContextMenuAttribs(){let e=this.chart,t=e.exportDivElements;if(t&&t.length){t.forEach(e=>{e&&("LI"!==e.tagName||e.children&&e.children.length?e.setAttribute("aria-hidden","true"):e.setAttribute("tabindex",-1))});let i=t[0]&&t[0].parentNode;i&&eH(i,{"aria-hidden":void 0,"aria-label":e.langFormat("accessibility.exporting.chartMenuLabel",{chart:e}),role:"list"})}}getKeyboardNavigation(){let e=this.keyCodes,t=this.chart,i=this;return new Q(t,{keyCodeMap:[[[e.left,e.up],function(){return i.onKbdPrevious(this)}],[[e.right,e.down],function(){return i.onKbdNext(this)}],[[e.enter,e.space],function(){return i.onKbdClick(this)}]],validate:function(){return!!t.exporting&&!1!==t.options.exporting.enabled&&!1!==t.options.exporting.accessibility.enabled},init:function(){let e=i.exportButtonProxy,s=i.chart.exportingGroup;e&&s&&t.setFocusToElement(s,e.innerElement)},terminate:function(){t.hideExportMenu()}})}onKbdPrevious(e){let t=this.chart,i=t.options.accessibility,s=e.response,n=t.highlightedExportItemIx||0;for(;n--;)if(t.highlightExportItem(n))return s.success;return i.keyboardNavigation.wrapAround?(t.highlightLastExportItem(),s.success):s.prev}onKbdNext(e){let t=this.chart,i=t.options.accessibility,s=e.response;for(let e=(t.highlightedExportItemIx||0)+1;e{e&&"highcharts-menu-item"===e.className&&e.onmouseout&&e.onmouseout(eG("mouseout"))}),this.highlightedExportItemIx=0,this.exportContextMenu.hideMenu(),this.container.focus())}function s(e){let t=this.exportDivElements&&this.exportDivElements[e],i=this.exportDivElements&&this.exportDivElements[this.highlightedExportItemIx];if(t&&"LI"===t.tagName&&!(t.children&&t.children.length)){let s=!!(this.renderTo.getElementsByTagName("g")[0]||{}).focus;return t.focus&&s&&t.focus(),i&&i.onmouseout&&i.onmouseout(eG("mouseout")),t.onmouseover&&t.onmouseover(eG("mouseover")),this.highlightedExportItemIx=e,!0}return!1}function n(){if(this.exportDivElements){let e=this.exportDivElements.length;for(;e--;)if(this.highlightExportItem(e))return!0}return!1}e.compose=function(e){let r=e.prototype;r.hideExportMenu||(r.hideExportMenu=i,r.highlightExportItem=s,r.highlightLastExportItem=n,r.showExportMenu=t)}}(eU||(eU={}));let eV=eU,{doc:eW,win:eX}=w(),{addEvent:eY,defined:ej,fireEvent:e_}=w(),{getElement:eZ,simulatedEventTarget:e$}=S;class eQ{constructor(e,t){this.currentModuleIx=NaN,this.modules=[],this.init(e,t)}init(e,t){let i=this.eventProvider=new Y;this.chart=e,this.components=t,this.modules=[],this.currentModuleIx=0,this.update(),i.addEvent(this.tabindexContainer,"keydown",e=>this.onKeydown(e)),i.addEvent(this.tabindexContainer,"focus",e=>this.onFocus(e)),["mouseup","touchend"].forEach(e=>i.addEvent(eW,e,e=>this.onMouseUp(e))),["mousedown","touchstart"].forEach(t=>i.addEvent(e.renderTo,t,()=>{this.isClickingChart=!0}))}update(e){let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=this.components;this.updateContainerTabindex(),i&&i.enabled&&e&&e.length?(this.modules=e.reduce(function(e,t){let i=s[t].getKeyboardNavigation();return e.concat(i)},[]),this.updateExitAnchor()):(this.modules=[],this.currentModuleIx=0,this.removeExitAnchor())}updateExitAnchor(){let e=eZ(`highcharts-end-of-chart-marker-${this.chart.index}`);this.removeExitAnchor(),e?(this.makeElementAnExitAnchor(e),this.exitAnchor=e):this.createExitAnchor()}move(e){let t=this.modules&&this.modules[this.currentModuleIx];t&&t.terminate&&t.terminate(e),this.chart.focusElement&&this.chart.focusElement.removeFocusBorder(),this.currentModuleIx+=e;let i=this.modules&&this.modules[this.currentModuleIx];if(i){if(i.validate&&!i.validate())return this.move(e);if(i.init)return i.init(e),!0}return this.currentModuleIx=0,this.exiting=!0,e>0?this.exitAnchor&&this.exitAnchor.focus():this.tabindexContainer.focus(),!1}onFocus(e){let t=this.chart,i=e.relatedTarget&&t.container.contains(e.relatedTarget),s=t.options.accessibility,n=s&&s.keyboardNavigation;if(n&&n.enabled&&!this.exiting&&!this.tabbingInBackwards&&!this.isClickingChart&&!i){let e=this.getFirstValidModuleIx();null!==e&&(this.currentModuleIx=e,this.modules[e].init(1))}this.keyboardReset=!1,this.exiting=!1}onMouseUp(e){if(delete this.isClickingChart,!this.keyboardReset&&e.relatedTarget!==e$){let t=this.chart;if(!e.target||!t.container.contains(e.target)){let e=this.modules&&this.modules[this.currentModuleIx||0];e&&e.terminate&&e.terminate(),this.currentModuleIx=0}t.focusElement&&(t.focusElement.removeFocusBorder(),delete t.focusElement),this.keyboardReset=!0}}onKeydown(e){let t;let i=e||eX.event,s=this.modules&&this.modules.length&&this.modules[this.currentModuleIx],n=i.target;if((!n||"INPUT"!==n.nodeName||n.classList.contains("highcharts-a11y-proxy-element"))&&(this.keyboardReset=!1,this.exiting=!1,s)){let e=s.run(i);e===s.response.success?t=!0:e===s.response.prev?t=this.move(-1):e===s.response.next&&(t=this.move(1)),t&&(i.preventDefault(),i.stopPropagation())}}updateContainerTabindex(){let e;let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=!(i&&!1===i.enabled),n=this.chart,r=n.container;n.renderTo.hasAttribute("tabindex")?(r.removeAttribute("tabindex"),e=n.renderTo):e=r,this.tabindexContainer=e;let o=e.getAttribute("tabindex");s&&!o?e.setAttribute("tabindex","0"):s||n.container.removeAttribute("tabindex")}createExitAnchor(){let e=this.chart,t=this.exitAnchor=eW.createElement("div");e.renderTo.appendChild(t),this.makeElementAnExitAnchor(t)}makeElementAnExitAnchor(e){let t=this.tabindexContainer.getAttribute("tabindex")||0;e.setAttribute("class","highcharts-exit-anchor"),e.setAttribute("tabindex",t),e.setAttribute("aria-hidden",!1),this.addExitAnchorEventsToEl(e)}removeExitAnchor(){if(this.exitAnchor){let e=this.eventProvider.eventRemovers.find(e=>e.element===this.exitAnchor);e&&ej(e.remover)&&this.eventProvider.removeEvent(e.remover),this.exitAnchor.parentNode&&this.exitAnchor.parentNode.removeChild(this.exitAnchor),delete this.exitAnchor}}addExitAnchorEventsToEl(e){let t=this.chart,i=this;this.eventProvider.addEvent(e,"focus",function(e){let s=e||eX.event,n=!(s.relatedTarget&&t.container.contains(s.relatedTarget)||i.exiting);if(t.focusElement&&delete t.focusElement,n){if(i.tabbingInBackwards=!0,i.tabindexContainer.focus(),delete i.tabbingInBackwards,s.preventDefault(),i.modules&&i.modules.length){i.currentModuleIx=i.modules.length-1;let e=i.modules[i.currentModuleIx];e&&e.validate&&!e.validate()?i.move(-1):e&&e.init(-1)}}else i.exiting=!1})}getFirstValidModuleIx(){let e=this.modules.length;for(let t=0;t{e&&e.dismissPopupContent&&e.dismissPopupContent()})}e.compose=function(e){eV.compose(e);let s=e.prototype;return s.dismissPopupContent||(s.dismissPopupContent=t,eY(eW,"keydown",i)),e}}(eQ||(eQ={}));let eJ=eQ;var e0=x(632),e1=x.n(e0);let{animObject:e2}=w(),{doc:e3}=w(),{addEvent:e5,fireEvent:e4,isNumber:e6,pick:e9,syncTimeout:e8}=w(),{getChartTitle:e7}=K,{stripHTMLTagsFromString:te,addClass:tt,removeClass:ti}=S;function ts(e){let t=e.legend&&e.legend.allItems,i=e.options.legend.accessibility||{},s=e.colorAxis&&e.colorAxis.some(e=>!e.dataClasses||!e.dataClasses.length);return!!(t&&t.length&&!s&&!1!==i.enabled)}function tn(e,t){let i=t.legendItem||{};for(let s of(t.setState(e?"hover":"",!0),["group","label","symbol"])){let t=i[s],n=t&&t.element||t;n&&e4(n,e?"mouseover":"mouseout")}}class tr extends Z{constructor(){super(...arguments),this.highlightedLegendItemIx=NaN,this.proxyGroup=null}init(){let e=this;this.recreateProxies(),this.addEvent(e1(),"afterScroll",function(){this.chart===e.chart&&(e.proxyProvider.updateGroupProxyElementPositions("legend"),e.updateLegendItemProxyVisibility(),e.highlightedLegendItemIx>-1&&this.chart.highlightLegendItem(e.highlightedLegendItemIx))}),this.addEvent(e1(),"afterPositionItem",function(t){this.chart===e.chart&&this.chart.renderer&&e.updateProxyPositionForItem(t.item)}),this.addEvent(e1(),"afterRender",function(){this.chart===e.chart&&this.chart.renderer&&e.recreateProxies()&&e8(()=>e.proxyProvider.updateGroupProxyElementPositions("legend"),e2(e9(this.chart.renderer.globalAnimation,!0)).duration)})}updateLegendItemProxyVisibility(){let e;let t=this.chart,i=t.legend,s=i.allItems||[],n=i.currentPage||1,r=i.clipHeight||0;s.forEach(s=>{if(s.a11yProxyElement){let o=i.pages&&i.pages.length,a=s.a11yProxyElement.element,l=!1;if(e=s.legendItem||{},o){let t=e.pageIx||0;l=(e.y||0)+(e.label?Math.round(e.label.getBBox().height):0)-i.pages[t]>r||t!==n-1}l?t.styledMode?tt(a,"highcharts-a11y-invisible"):a.style.visibility="hidden":(ti(a,"highcharts-a11y-invisible"),a.style.visibility="")}})}onChartRender(){ts(this.chart)||this.removeProxies()}highlightAdjacentLegendPage(e){let t=this.chart,i=t.legend,s=(i.currentPage||1)+e,n=i.pages||[];if(s>0&&s<=n.length){let e=0;for(let n of i.allItems)((n.legendItem||{}).pageIx||0)+1===s&&t.highlightLegendItem(e)&&(this.highlightedLegendItemIx=e),++e}}updateProxyPositionForItem(e){e.a11yProxyElement&&e.a11yProxyElement.refreshPosition()}recreateProxies(){let e=e3.activeElement,t=this.proxyGroup,i=e&&t&&t.contains(e);return this.removeProxies(),!!ts(this.chart)&&(this.addLegendProxyGroup(),this.proxyLegendItems(),this.updateLegendItemProxyVisibility(),this.updateLegendTitle(),i&&this.chart.highlightLegendItem(this.highlightedLegendItemIx),!0)}removeProxies(){this.proxyProvider.removeGroup("legend")}updateLegendTitle(){let e=this.chart,t=te((e.legend&&e.legend.options.title&&e.legend.options.title.text||"").replace(/
    /g," "),e.renderer.forExport),i=e.langFormat("accessibility.legend.legendLabel"+(t?"":"NoTitle"),{chart:e,legendTitle:t,chartTitle:e7(e)});this.proxyProvider.updateGroupAttrs("legend",{"aria-label":i})}addLegendProxyGroup(){let e="all"===this.chart.options.accessibility.landmarkVerbosity?"region":null;this.proxyGroup=this.proxyProvider.addGroup("legend","ul",{"aria-label":"_placeholder_",role:e})}proxyLegendItems(){let e;let t=this;((this.chart.legend||{}).allItems||[]).forEach(i=>{(e=i.legendItem||{}).label&&e.label.element&&t.proxyLegendItem(i)})}proxyLegendItem(e){let t=e.legendItem||{};if(!t.label||!t.group)return;let i=this.chart.langFormat("accessibility.legend.legendItem",{chart:this.chart,itemName:te(e.name,this.chart.renderer.forExport),item:e}),s={tabindex:-1,"aria-pressed":e.visible,"aria-label":i},n=t.group.div?t.label:t.group;e.a11yProxyElement=this.proxyProvider.addProxyElement("legend",{click:t.label,visual:n.element},"button",s)}getKeyboardNavigation(){let e=this.keyCodes,t=this,i=this.chart;return new Q(i,{keyCodeMap:[[[e.left,e.right,e.up,e.down],function(e){return t.onKbdArrowKey(this,e)}],[[e.enter,e.space],function(){return t.onKbdClick(this)}],[[e.pageDown,e.pageUp],function(i){let s=i===e.pageDown?1:-1;return t.highlightAdjacentLegendPage(s),this.response.success}]],validate:function(){return t.shouldHaveLegendNavigation()},init:function(){i.highlightLegendItem(0),t.highlightedLegendItemIx=0},terminate:function(){t.highlightedLegendItemIx=-1,i.legend.allItems.forEach(e=>tn(!1,e))}})}onKbdArrowKey(e,t){let{keyCodes:{left:i,up:s},highlightedLegendItemIx:n,chart:r}=this,o=r.legend.allItems.length,a=r.options.accessibility.keyboardNavigation.wrapAround,l=t===i||t===s?-1:1;return r.highlightLegendItem(n+l)?this.highlightedLegendItemIx+=l:a&&o>1&&(this.highlightedLegendItemIx=l>0?0:o-1,r.highlightLegendItem(this.highlightedLegendItemIx)),e.response.success}onKbdClick(e){let t=this.chart.legend.allItems[this.highlightedLegendItemIx];return t&&t.a11yProxyElement&&t.a11yProxyElement.click(),e.response.success}shouldHaveLegendNavigation(){if(!ts(this.chart))return!1;let e=this.chart,t=(e.options.legend||{}).accessibility||{};return!!(e.legend.display&&t.keyboardNavigation&&t.keyboardNavigation.enabled)}destroy(){this.removeProxies()}}!function(e){function t(e){let t=this.legend.allItems,i=this.accessibility&&this.accessibility.components.legend.highlightedLegendItemIx,s=t[e],n=s?.legendItem||{};if(s){e6(i)&&t[i]&&tn(!1,t[i]),function(e,t){let i=(e.allItems[t].legendItem||{}).pageIx,s=e.currentPage;void 0!==i&&i+1!==s&&e.scroll(1+i-s)}(this.legend,e);let r=n.label,o=s.a11yProxyElement&&s.a11yProxyElement.innerElement;return r&&r.element&&o&&this.setFocusToElement(r,o),tn(!0,s),!0}return!1}function i(e){let t=this.chart.options.accessibility,i=e.item;t.enabled&&i&&i.a11yProxyElement&&i.a11yProxyElement.innerElement.setAttribute("aria-pressed",e.visible?"true":"false")}e.compose=function(e,s){let n=e.prototype;n.highlightLegendItem||(n.highlightLegendItem=t,e5(s,"afterColorizeItem",i))}}(tr||(tr={}));let to=tr;var ta=x(532),tl=x.n(ta);let{isTouchDevice:th}=w(),{addEvent:tc,merge:td,pick:tu}=w(),tp=[];function tg(){this.navigator&&this.navigator.setBaseSeries(null,!1)}function tm(){let e,t,i;let s=this.legend,n=this.navigator;if(n){e=s&&s.options,t=n.xAxis,i=n.yAxis;let{scrollbarHeight:r,scrollButtonSize:o}=n;this.inverted?(n.left=n.opposite?this.chartWidth-r-n.height:this.spacing[3]+r,n.top=this.plotTop+o):(n.left=tu(t.left,this.plotLeft+o),n.top=n.navigatorOptions.top||this.chartHeight-n.height-r-(this.scrollbar?.options.margin||0)-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(e&&"bottom"===e.verticalAlign&&"proximate"!==e.layout&&e.enabled&&!e.floating?s.legendHeight+tu(e.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0)),t&&i&&(this.inverted?t.options.left=i.options.left=n.left:t.options.top=i.options.top=n.top,t.setAxisSize(),i.setAxisSize())}}function tb(e){!this.navigator&&!this.scroller&&(this.options.navigator.enabled||this.options.scrollbar.enabled)&&(this.scroller=this.navigator=new d(this),tu(e.redraw,!0)&&this.redraw(e.animation))}function tf(){let e=this.options;(e.navigator.enabled||e.scrollbar.enabled)&&(this.scroller=this.navigator=new d(this))}function tx(){let e=this.options,t=e.navigator,i=e.rangeSelector;if((t&&t.enabled||i&&i.enabled)&&(!th&&"x"===this.zooming.type||th&&"x"===this.zooming.pinchType))return!1}function ty(e){let t=e.navigator;if(t&&e.xAxis[0]){let i=e.xAxis[0].getExtremes();t.render(i.min,i.max)}}function tv(e){let t=e.options.navigator||{},i=e.options.scrollbar||{};!this.navigator&&!this.scroller&&(t.enabled||i.enabled)&&(td(!0,this.options.navigator,t),td(!0,this.options.scrollbar,i),delete e.options.navigator,delete e.options.scrollbar)}let tw={compose:function(e,t){if(w().pushUnique(tp,e)){let i=e.prototype;d=t,i.callbacks.push(ty),tc(e,"afterAddSeries",tg),tc(e,"afterSetChartSize",tm),tc(e,"afterUpdate",tb),tc(e,"beforeRender",tf),tc(e,"beforeShowResetZoom",tx),tc(e,"update",tv)}}},{isTouchDevice:tE}=w(),{addEvent:tA,correctFloat:tT,defined:tC,isNumber:tM,pick:tk}=w();function tS(){this.navigatorAxis||(this.navigatorAxis=new tD(this))}function tP(e){let t;let i=this.chart,s=i.options,n=s.navigator,r=this.navigatorAxis,o=i.zooming.pinchType,a=s.rangeSelector,l=i.zooming.type;if(this.isXAxis&&(n?.enabled||a?.enabled)){if("y"===l&&"zoom"===e.trigger)t=!1;else if(("zoom"===e.trigger&&"xy"===l||tE&&"xy"===o)&&this.options.range){let t=r.previousZoom;tC(e.min)?r.previousZoom=[this.min,this.max]:t&&(e.min=t[0],e.max=t[1],r.previousZoom=void 0)}}void 0!==t&&e.preventDefault()}class tD{static compose(e){e.keepProps.includes("navigatorAxis")||(e.keepProps.push("navigatorAxis"),tA(e,"init",tS),tA(e,"setExtremes",tP))}constructor(e){this.axis=e}destroy(){this.axis=void 0}toFixedRange(e,t,i,s){let n=this.axis,r=(n.pointRange||0)/2,o=tk(i,n.translate(e,!0,!n.horiz)),a=tk(s,n.translate(t,!0,!n.horiz));return tC(i)||(o=tT(o+r)),tC(s)||(a=tT(a-r)),tM(o)&&tM(a)||(o=a=void 0),{min:o,max:a}}}var tN=x(620),tB=x.n(tN),tI=x(512),tF=x.n(tI);let{parse:tO}=tB(),{seriesTypes:tR}=tF(),tL={height:40,margin:25,maskInside:!0,handles:{width:7,borderRadius:0,height:15,symbols:["navigator-handle","navigator-handle"],enabled:!0,lineWidth:1,backgroundColor:"#f2f2f2",borderColor:"#999999"},maskFill:tO("#667aff").setOpacity(.3).get(),outlineColor:"#999999",outlineWidth:1,series:{type:void 0===tR.areaspline?"line":"areaspline",fillOpacity:.05,lineWidth:1,compare:null,sonification:{enabled:!1},dataGrouping:{approximation:"average",enabled:!0,groupPixelWidth:2,firstAnchor:"firstPoint",anchor:"middle",lastAnchor:"lastPoint",units:[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2,3,4]],["week",[1,2,3]],["month",[1,3,6]],["year",null]]},dataLabels:{enabled:!1,zIndex:2},id:"highcharts-navigator-series",className:"highcharts-navigator-series",lineColor:null,marker:{enabled:!1},threshold:null},xAxis:{className:"highcharts-navigator-xaxis",tickLength:0,lineWidth:0,gridLineColor:"#e6e6e6",id:"navigator-x-axis",gridLineWidth:1,tickPixelInterval:200,labels:{align:"left",style:{color:"#000000",fontSize:"0.7em",opacity:.6,textOutline:"2px contrast"},x:3,y:-4},crosshair:!1},yAxis:{className:"highcharts-navigator-yaxis",gridLineWidth:0,startOnTick:!1,endOnTick:!1,minPadding:.1,id:"navigator-y-axis",maxPadding:.1,labels:{enabled:!1},crosshair:!1,title:{text:null},tickLength:0,tickWidth:0}},{defined:tH,isNumber:tz,pick:tq}=w(),tG={rect:function(e,t,i,s,n){return n&&n.r?function(e,t,i,s,n){let r=n?.r||0;return[["M",e+r,t],["L",e+i-r,t],["A",r,r,0,0,1,e+i,t+r],["L",e+i,t+s-r],["A",r,r,0,0,1,e+i-r,t+s],["L",e+r,t+s],["A",r,r,0,0,1,e,t+s-r],["L",e,t+r],["A",r,r,0,0,1,e+r,t],["Z"]]}(e,t,i,s,n):[["M",e,t],["L",e+i,t],["L",e+i,t+s],["L",e,t+s],["Z"]]}},{relativeLength:tK}=w(),tU={"navigator-handle":function(e,t,i,s,n={}){let r=n.width?n.width/2:i,o=tK(n.borderRadius||0,Math.min(2*r,s));return[["M",-1.5,(s=n.height||s)/2-3.5],["L",-1.5,s/2+4.5],["M",.5,s/2-3.5],["L",.5,s/2+4.5],...tG.rect(-r-1,.5,2*r+1,s,{r:o})]}};var tV=x(608),tW=x.n(tV);let{defined:tX}=w(),{setOptions:tY}=w(),{composed:tj}=w(),{getRendererType:t_}=tW(),{setFixedRange:tZ}={setFixedRange:function(e){let t=this.xAxis[0];tX(t.dataMax)&&tX(t.dataMin)&&e?this.fixedRange=Math.min(e,t.dataMax-t.dataMin):this.fixedRange=e}},{addEvent:t$,extend:tQ,pushUnique:tJ}=w();function t0(){this.chart.navigator&&!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}let t1={compose:function(e,t,i){tD.compose(t),tJ(tj,"Navigator")&&(e.prototype.setFixedRange=tZ,tQ(t_().prototype.symbols,tU),t$(i,"afterUpdate",t0),tY({navigator:tL}))}},{composed:t2}=w(),{addEvent:t3,defined:t5,pick:t4,pushUnique:t6}=w();!function(e){let t;function i(e){let t=t4(e.options&&e.options.min,e.min),i=t4(e.options&&e.options.max,e.max);return{axisMin:t,axisMax:i,scrollMin:t5(e.dataMin)?Math.min(t,e.min,e.dataMin,t4(e.threshold,1/0)):t,scrollMax:t5(e.dataMax)?Math.max(i,e.max,e.dataMax,t4(e.threshold,-1/0)):i}}function s(){let e=this.scrollbar,t=e&&!e.options.opposite,i=this.horiz?2:t?3:1;e&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[i]+=e.size+(e.options.margin||0))}function n(){let e=this;e.options&&e.options.scrollbar&&e.options.scrollbar.enabled&&(e.options.scrollbar.vertical=!e.horiz,e.options.startOnTick=e.options.endOnTick=!1,e.scrollbar=new t(e.chart.renderer,e.options.scrollbar,e.chart),t3(e.scrollbar,"changed",function(t){let s,n;let{axisMin:r,axisMax:o,scrollMin:a,scrollMax:l}=i(e),h=l-a;if(t5(r)&&t5(o)){if(e.horiz&&!e.reversed||!e.horiz&&e.reversed?(s=a+h*this.to,n=a+h*this.from):(s=a+h*(1-this.from),n=a+h*(1-this.to)),this.shouldUpdateExtremes(t.DOMType)){let i="mousemove"!==t.DOMType&&"touchmove"!==t.DOMType&&void 0;e.setExtremes(n,s,!0,i,t)}else this.setRange(this.from,this.to)}}))}function r(){let e,t,s;let{scrollMin:n,scrollMax:r}=i(this),o=this.scrollbar,a=this.axisTitleMargin+(this.titleOffset||0),l=this.chart.scrollbarsOffsets,h=this.options.margin||0;if(o&&l){if(this.horiz)this.opposite||(l[1]+=a),o.position(this.left,this.top+this.height+2+l[1]-(this.opposite?h:0),this.width,this.height),this.opposite||(l[1]+=h),e=1;else{let t;this.opposite&&(l[0]+=a),t=o.options.opposite?this.left+this.width+2+l[0]-(this.opposite?0:h):this.opposite?0:h,o.position(t,this.top,this.width,this.height),this.opposite&&(l[0]+=h),e=0}if(l[e]+=o.size+(o.options.margin||0),isNaN(n)||isNaN(r)||!t5(this.min)||!t5(this.max)||this.dataMin===this.dataMax)o.setRange(0,1);else if(this.min===this.max){let e=this.pointRange/(this.dataMax+1);t=e*this.min,s=e*(this.max+1),o.setRange(t,s)}else t=(this.min-n)/(r-n),s=(this.max-n)/(r-n),this.horiz&&!this.reversed||!this.horiz&&this.reversed?o.setRange(t,s):o.setRange(1-s,1-t)}}e.compose=function(e,i){t6(t2,"Axis.Scrollbar")&&(t=i,t3(e,"afterGetOffset",s),t3(e,"afterInit",n),t3(e,"afterRender",r))}}(g||(g={}));let t9=g,t8={height:10,barBorderRadius:5,buttonBorderRadius:0,buttonsEnabled:!1,liveRedraw:void 0,margin:void 0,minWidth:6,opposite:!0,step:.2,zIndex:3,barBackgroundColor:"#cccccc",barBorderWidth:0,barBorderColor:"#cccccc",buttonArrowColor:"#333333",buttonBackgroundColor:"#e6e6e6",buttonBorderColor:"#cccccc",buttonBorderWidth:1,rifleColor:"none",trackBackgroundColor:"rgba(255, 255, 255, 0.001)",trackBorderColor:"#cccccc",trackBorderRadius:5,trackBorderWidth:1},{defaultOptions:t7}=w(),{addEvent:ie,correctFloat:it,crisp:ii,defined:is,destroyObjectProperties:ir,fireEvent:io,merge:ia,pick:il,removeEvent:ih}=w();class ic{static compose(e){t9.compose(e,ic)}static swapXY(e,t){return t&&e.forEach(e=>{let t;let i=e.length;for(let s=0;sthis.calculatedWidth?t.minWidth:0;return{chartX:(e.chartX-this.x-this.xOffset)/(this.barWidth-i),chartY:(e.chartY-this.y-this.yOffset)/(this.barWidth-i)}}destroy(){let e=this,t=e.chart.scroller;e.removeEvents(),["track","scrollbarRifles","scrollbar","scrollbarGroup","group"].forEach(function(t){e[t]&&e[t].destroy&&(e[t]=e[t].destroy())}),t&&e===t.scrollbar&&(t.scrollbar=null,ir(t.scrollbarButtons))}drawScrollbarButton(e){let t=this.renderer,i=this.scrollbarButtons,s=this.options,n=this.size,r=t.g().add(this.group);if(i.push(r),s.buttonsEnabled){let o=t.rect().addClass("highcharts-scrollbar-button").add(r);this.chart.styledMode||o.attr({stroke:s.buttonBorderColor,"stroke-width":s.buttonBorderWidth,fill:s.buttonBackgroundColor}),o.attr(o.crisp({x:-.5,y:-.5,width:n,height:n,r:s.buttonBorderRadius},o.strokeWidth()));let a=t.path(ic.swapXY([["M",n/2+(e?-1:1),n/2-3],["L",n/2+(e?-1:1),n/2+3],["L",n/2+(e?2:-2),n/2]],s.vertical)).addClass("highcharts-scrollbar-arrow").add(i[e]);this.chart.styledMode||a.attr({fill:s.buttonArrowColor})}}init(e,t,i){this.scrollbarButtons=[],this.renderer=e,this.userOptions=t,this.options=ia(t8,t7.scrollbar,t),this.options.margin=il(this.options.margin,10),this.chart=i,this.size=il(this.options.size,this.options.height),t.enabled&&(this.render(),this.addEvents())}mouseDownHandler(e){let t=this.chart.pointer?.normalize(e)||e,i=this.cursorToScrollbarPosition(t);this.chartX=i.chartX,this.chartY=i.chartY,this.initPositions=[this.from,this.to],this.grabbedCenter=!0}mouseMoveHandler(e){let t;let i=this.chart.pointer?.normalize(e)||e,s=this.options.vertical?"chartY":"chartX",n=this.initPositions||[];this.grabbedCenter&&(!e.touches||0!==e.touches[0][s])&&(t=this.cursorToScrollbarPosition(i)[s]-this[s],this.hasDragged=!0,this.updatePosition(n[0]+t,n[1]+t),this.hasDragged&&io(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}))}mouseUpHandler(e){this.hasDragged&&io(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}),this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null}position(e,t,i,s){let{buttonsEnabled:n,margin:r=0,vertical:o}=this.options,a=this.rendered?"animate":"attr",l=s,h=0;this.group.show(),this.x=e,this.y=t+this.trackBorderWidth,this.width=i,this.height=s,this.xOffset=l,this.yOffset=h,o?(this.width=this.yOffset=i=h=this.size,this.xOffset=l=0,this.yOffset=h=n?this.size:0,this.barWidth=s-(n?2*i:0),this.x=e+=r):(this.height=s=this.size,this.xOffset=l=n?this.size:0,this.barWidth=i-(n?2*s:0),this.y=this.y+r),this.group[a]({translateX:e,translateY:this.y}),this.track[a]({width:i,height:s}),this.scrollbarButtons[1][a]({translateX:o?0:i-l,translateY:o?s-h:0})}removeEvents(){this._events.forEach(function(e){ih.apply(null,e)}),this._events.length=0}render(){let e=this.renderer,t=this.options,i=this.size,s=this.chart.styledMode,n=e.g("scrollbar").attr({zIndex:t.zIndex}).hide().add();this.group=n,this.track=e.rect().addClass("highcharts-scrollbar-track").attr({r:t.trackBorderRadius||0,height:i,width:i}).add(n),s||this.track.attr({fill:t.trackBackgroundColor,stroke:t.trackBorderColor,"stroke-width":t.trackBorderWidth});let r=this.trackBorderWidth=this.track.strokeWidth();this.track.attr({x:-ii(0,r),y:-ii(0,r)}),this.scrollbarGroup=e.g().add(n),this.scrollbar=e.rect().addClass("highcharts-scrollbar-thumb").attr({height:i-r,width:i-r,r:t.barBorderRadius||0}).add(this.scrollbarGroup),this.scrollbarRifles=e.path(ic.swapXY([["M",-3,i/4],["L",-3,2*i/3],["M",0,i/4],["L",0,2*i/3],["M",3,i/4],["L",3,2*i/3]],t.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup),s||(this.scrollbar.attr({fill:t.barBackgroundColor,stroke:t.barBorderColor,"stroke-width":t.barBorderWidth}),this.scrollbarRifles.attr({stroke:t.rifleColor,"stroke-width":1})),this.scrollbarStrokeWidth=this.scrollbar.strokeWidth(),this.scrollbarGroup.translate(-ii(0,this.scrollbarStrokeWidth),-ii(0,this.scrollbarStrokeWidth)),this.drawScrollbarButton(0),this.drawScrollbarButton(1)}setRange(e,t){let i,s;let n=this.options,r=n.vertical,o=n.minWidth,a=this.barWidth,l=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?"attr":"animate";if(!is(a))return;let h=a*Math.min(t,1);i=Math.ceil(a*(e=Math.max(e,0))),this.calculatedWidth=s=it(h-i),s=1?this.group.hide():this.group.show()),this.rendered=!0}shouldUpdateExtremes(e){return il(this.options.liveRedraw,w().svg&&!w().isTouchDevice&&!this.chart.boosted)||"mouseup"===e||"touchend"===e||!is(e)}trackClick(e){let t=this.chart.pointer?.normalize(e)||e,i=this.to-this.from,s=this.y+this.scrollbarTop,n=this.x+this.scrollbarLeft;this.options.vertical&&t.chartY>s||!this.options.vertical&&t.chartX>n?this.updatePosition(this.from+i,this.to+i):this.updatePosition(this.from-i,this.to-i),io(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}update(e){this.destroy(),this.init(this.chart.renderer,ia(!0,this.options,e),this.chart)}updatePosition(e,t){t>1&&(e=it(1-it(t-e)),t=1),e<0&&(t=it(t-e),e=0),this.from=e,this.to=t}}ic.defaultOptions=t8,t7.scrollbar=ia(!0,ic.defaultOptions,t7.scrollbar);var id=x(540),iu=x.n(id);let{defaultOptions:ip}=w(),{isTouchDevice:ig}=w(),{prototype:{symbols:im}}=iu(),{addEvent:ib,clamp:ix,correctFloat:iy,defined:iv,destroyObjectProperties:iw,erase:iE,extend:iA,find:iT,fireEvent:iC,isArray:iM,isNumber:ik,merge:iS,pick:iP,removeEvent:iD,splat:iN}=w();function iB(e,...t){let i=[].filter.call(t,ik);if(i.length)return Math[e].apply(0,i)}class iI{static compose(e,t,i){tw.compose(e,iI),t1.compose(e,t,i)}constructor(e){this.isDirty=!1,this.scrollbarHeight=0,this.init(e)}drawHandle(e,t,i,s){let n=this.navigatorOptions.handles.height;this.handles[t][s](i?{translateX:Math.round(this.left+this.height/2),translateY:Math.round(this.top+parseInt(e,10)+.5-n)}:{translateX:Math.round(this.left+parseInt(e,10)),translateY:Math.round(this.top+this.height/2-n/2-1)})}drawOutline(e,t,i,s){let n=this.navigatorOptions.maskInside,r=this.outline.strokeWidth(),o=r/2,a=r%2/2,l=this.scrollButtonSize,h=this.size,c=this.top,d=this.height,u=c-o,p=c+d,g=this.left,m,b;i?(m=c+t+a,t=c+e+a,b=[["M",g+d,c-l-a],["L",g+d,m],["L",g,m],["M",g,t],["L",g+d,t],["L",g+d,c+h+l]],n&&b.push(["M",g+d,m-o],["L",g+d,t+o])):(g-=l,e+=g+l-a,t+=g+l-a,b=[["M",g,u],["L",e,u],["L",e,p],["M",t,p],["L",t,u],["L",g+h+2*l,u]],n&&b.push(["M",e-o,u],["L",t+o,u])),this.outline[s]({d:b})}drawMasks(e,t,i,s){let n,r,o,a;let l=this.left,h=this.top,c=this.height;i?(o=[l,l,l],a=[h,h+e,h+t],r=[c,c,c],n=[e,t-e,this.size-t]):(o=[l,l+e,l+t],a=[h,h,h],r=[e,t-e,this.size-t],n=[c,c,c]),this.shades.forEach((e,t)=>{e[s]({x:o[t],y:a[t],width:r[t],height:n[t]})})}renderElements(){let e=this,t=e.navigatorOptions,i=t.maskInside,s=e.chart,n=s.inverted,r=s.renderer,o={cursor:n?"ns-resize":"ew-resize"},a=e.navigatorGroup??(e.navigatorGroup=r.g("navigator").attr({zIndex:8,visibility:"hidden"}).add());if([!i,i,!i].forEach((i,n)=>{let l=e.shades[n]??(e.shades[n]=r.rect().addClass("highcharts-navigator-mask"+(1===n?"-inside":"-outside")).add(a));s.styledMode||(l.attr({fill:i?t.maskFill:"rgba(0,0,0,0)"}),1===n&&l.css(o))}),e.outline||(e.outline=r.path().addClass("highcharts-navigator-outline").add(a)),s.styledMode||e.outline.attr({"stroke-width":t.outlineWidth,stroke:t.outlineColor}),t.handles?.enabled){let i=t.handles,{height:n,width:l}=i;[0,1].forEach(t=>{let h=i.symbols[t];if(e.handles[t]&&e.handles[t].symbolUrl===h){if(!e.handles[t].isImg&&e.handles[t].symbolName!==h){let i=im[h].call(im,-l/2-1,0,l,n);e.handles[t].attr({d:i}),e.handles[t].symbolName=h}}else e.handles[t]?.destroy(),e.handles[t]=r.symbol(h,-l/2-1,0,l,n,i),e.handles[t].attr({zIndex:7-t}).addClass("highcharts-navigator-handle highcharts-navigator-handle-"+["left","right"][t]).add(a),e.addMouseEvents();s.inverted&&e.handles[t].attr({rotation:90,rotationOriginX:Math.floor(-l/2),rotationOriginY:(n+l)/2}),s.styledMode||e.handles[t].attr({fill:i.backgroundColor,stroke:i.borderColor,"stroke-width":i.lineWidth,width:i.width,height:i.height,x:-l/2-1,y:0}).css(o)})}}update(e,t=!1){let i=this.chart,s=i.options.chart.inverted!==i.scrollbar?.options.vertical;if(iS(!0,i.options.navigator,e),this.navigatorOptions=i.options.navigator||{},this.setOpposite(),iv(e.enabled)||s)return this.destroy(),this.navigatorEnabled=e.enabled||this.navigatorEnabled,this.init(i);if(this.navigatorEnabled&&(this.isDirty=!0,!1===e.adaptToUpdatedData&&this.baseSeries.forEach(e=>{iD(e,"updatedData",this.updatedDataHandler)},this),e.adaptToUpdatedData&&this.baseSeries.forEach(e=>{e.eventsToUnbind.push(ib(e,"updatedData",this.updatedDataHandler))},this),(e.series||e.baseSeries)&&this.setBaseSeries(void 0,!1),e.height||e.xAxis||e.yAxis)){this.height=e.height??this.height;let t=this.getXAxisOffsets();this.xAxis.update({...e.xAxis,offsets:t,[i.inverted?"width":"height"]:this.height,[i.inverted?"height":"width"]:void 0},!1),this.yAxis.update({...e.yAxis,[i.inverted?"width":"height"]:this.height},!1)}t&&i.redraw()}render(e,t,i,s){let n=this.chart,r=this.xAxis,o=r.pointRange||0,a=r.navigatorAxis.fake?n.xAxis[0]:r,l=this.navigatorEnabled,h=this.rendered,c=n.inverted,d=n.xAxis[0].minRange,u=n.xAxis[0].options.maxRange,p=this.scrollButtonSize,g,m,b,f=this.scrollbarHeight,x,y;if(this.hasDragged&&!iv(i))return;if(this.isDirty&&this.renderElements(),e=iy(e-o/2),t=iy(t+o/2),!ik(e)||!ik(t)){if(!h)return;i=0,s=iP(r.width,a.width)}this.left=iP(r.left,n.plotLeft+p+(c?n.plotWidth:0));let v=this.size=x=iP(r.len,(c?n.plotHeight:n.plotWidth)-2*p);g=c?f:x+2*p,i=iP(i,r.toPixels(e,!0)),s=iP(s,r.toPixels(t,!0)),ik(i)&&Math.abs(i)!==1/0||(i=0,s=g);let w=r.toValue(i,!0),E=r.toValue(s,!0),A=Math.abs(iy(E-w));Au&&(this.grabbedLeft?i=r.toPixels(E-u-o,!0):this.grabbedRight&&(s=r.toPixels(w+u+o,!0))),this.zoomedMax=ix(Math.max(i,s),0,v),this.zoomedMin=ix(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(i,s),0,v),this.range=this.zoomedMax-this.zoomedMin,v=Math.round(this.zoomedMax);let T=Math.round(this.zoomedMin);l&&(this.navigatorGroup.attr({visibility:"inherit"}),y=h&&!this.hasDragged?"animate":"attr",this.drawMasks(T,v,c,y),this.drawOutline(T,v,c,y),this.navigatorOptions.handles.enabled&&(this.drawHandle(T,0,c,y),this.drawHandle(v,1,c,y))),this.scrollbar&&(c?(b=this.top-p,m=this.left-f+(l||!a.opposite?0:(a.titleOffset||0)+a.axisTitleMargin),f=x+2*p):(b=this.top+(l?this.height:-f),m=this.left-p),this.scrollbar.position(m,b,g,f),this.scrollbar.setRange(this.zoomedMin/(x||1),this.zoomedMax/(x||1))),this.rendered=!0,this.isDirty=!1,iC(this,"afterRender")}addMouseEvents(){let e=this,t=e.chart,i=t.container,s=[],n,r;e.mouseMoveHandler=n=function(t){e.onMouseMove(t)},e.mouseUpHandler=r=function(t){e.onMouseUp(t)},(s=e.getPartsEvents("mousedown")).push(ib(t.renderTo,"mousemove",n),ib(i.ownerDocument,"mouseup",r),ib(t.renderTo,"touchmove",n),ib(i.ownerDocument,"touchend",r)),s.concat(e.getPartsEvents("touchstart")),e.eventsToUnbind=s,e.series&&e.series[0]&&s.push(ib(e.series[0].xAxis,"foundExtremes",function(){t.navigator.modifyNavigatorAxisExtremes()}))}getPartsEvents(e){let t=this,i=[];return["shades","handles"].forEach(function(s){t[s].forEach(function(n,r){i.push(ib(n.element,e,function(e){t[s+"Mousedown"](e,r)}))})}),i}shadesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=this.xAxis,n=this.zoomedMin,r=this.size,o=this.range,a=this.left,l=e.chartX,h,c,d,u;i.inverted&&(l=e.chartY,a=this.top),1===t?(this.grabbedCenter=l,this.fixedWidth=o,this.dragOffset=l-n):(u=l-a-o/2,0===t?u=Math.max(0,u):2===t&&u+o>=r&&(u=r-o,this.reversedExtremes?(u-=o,c=this.getUnionExtremes().dataMin):h=this.getUnionExtremes().dataMax),u!==n&&(this.fixedWidth=o,iv((d=s.navigatorAxis.toFixedRange(u,u+o,c,h)).min)&&iC(this,"setRange",{min:Math.min(d.min,d.max),max:Math.max(d.min,d.max),redraw:!0,eventArguments:{trigger:"navigator"}})))}handlesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=i.xAxis[0],n=this.reversedExtremes;0===t?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=n?s.min:s.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=n?s.max:s.min),i.setFixedRange(void 0)}onMouseMove(e){let t=this,i=t.chart,s=t.navigatorSize,n=t.range,r=t.dragOffset,o=i.inverted,a=t.left,l;(!e.touches||0!==e.touches[0].pageX)&&(l=(e=i.pointer?.normalize(e)||e).chartX,o&&(a=t.top,l=e.chartY),t.grabbedLeft?(t.hasDragged=!0,t.render(0,0,l-a,t.otherHandlePos)):t.grabbedRight?(t.hasDragged=!0,t.render(0,0,t.otherHandlePos,l-a)):t.grabbedCenter&&(t.hasDragged=!0,ls+r-n&&(l=s+r-n),t.render(0,0,l-r,l-r+n)),t.hasDragged&&t.scrollbar&&iP(t.scrollbar.options.liveRedraw,!ig&&!this.chart.boosted)&&(e.DOMType=e.type,setTimeout(function(){t.onMouseUp(e)},0)))}onMouseUp(e){let t,i,s,n,r,o;let a=this.chart,l=this.xAxis,h=this.scrollbar,c=e.DOMEvent||e,d=a.inverted,u=this.rendered&&!this.hasDragged?"animate":"attr";(this.hasDragged&&(!h||!h.hasDragged)||"scrollbar"===e.trigger)&&(s=this.getUnionExtremes(),this.zoomedMin===this.otherHandlePos?n=this.fixedExtreme:this.zoomedMax===this.otherHandlePos&&(r=this.fixedExtreme),this.zoomedMax===this.size&&(r=this.reversedExtremes?s.dataMin:s.dataMax),0===this.zoomedMin&&(n=this.reversedExtremes?s.dataMax:s.dataMin),iv((o=l.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,n,r)).min)&&iC(this,"setRange",{min:Math.min(o.min,o.max),max:Math.max(o.min,o.max),redraw:!0,animation:!this.hasDragged&&null,eventArguments:{trigger:"navigator",triggerOp:"navigator-drag",DOMEvent:c}})),"mousemove"!==e.DOMType&&"touchmove"!==e.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null),this.navigatorEnabled&&ik(this.zoomedMin)&&ik(this.zoomedMax)&&(i=Math.round(this.zoomedMin),t=Math.round(this.zoomedMax),this.shades&&this.drawMasks(i,t,d,u),this.outline&&this.drawOutline(i,t,d,u),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(i,0,d,u),this.drawHandle(t,1,d,u)))}removeEvents(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(e){e()}),this.eventsToUnbind=void 0),this.removeBaseSeriesEvents()}removeBaseSeriesEvents(){let e=this.baseSeries||[];this.navigatorEnabled&&e[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&&e.forEach(function(e){iD(e,"updatedData",this.updatedDataHandler)},this),e[0].xAxis&&iD(e[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes))}getXAxisOffsets(){return this.chart.inverted?[this.scrollButtonSize,0,-this.scrollButtonSize,0]:[0,-this.scrollButtonSize,0,this.scrollButtonSize]}init(e){let t=e.options,i=t.navigator||{},s=i.enabled,n=t.scrollbar||{},r=n.enabled,o=s&&i.height||0,a=r&&n.height||0,l=n.buttonsEnabled&&a||0;this.handles=[],this.shades=[],this.chart=e,this.setBaseSeries(),this.height=o,this.scrollbarHeight=a,this.scrollButtonSize=l,this.scrollbarEnabled=r,this.navigatorEnabled=s,this.navigatorOptions=i,this.scrollbarOptions=n,this.setOpposite();let h=this,c=h.baseSeries,d=e.xAxis.length,u=e.yAxis.length,p=c&&c[0]&&c[0].xAxis||e.xAxis[0]||{options:{}};if(e.isDirtyBox=!0,h.navigatorEnabled){let t=this.getXAxisOffsets();h.xAxis=new(tl())(e,iS({breaks:p.options.breaks,ordinal:p.options.ordinal,overscroll:p.options.overscroll},i.xAxis,{type:"datetime",yAxis:i.yAxis?.id,index:d,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:p.options.ordinal?0:p.options.minPadding,maxPadding:p.options.ordinal?0:p.options.maxPadding,zoomEnabled:!1},e.inverted?{offsets:t,width:o}:{offsets:t,height:o}),"xAxis"),h.yAxis=new(tl())(e,iS(i.yAxis,{alignTicks:!1,offset:0,index:u,isInternal:!0,reversed:iP(i.yAxis&&i.yAxis.reversed,e.yAxis[0]&&e.yAxis[0].reversed,!1),zoomEnabled:!1},e.inverted?{width:o}:{height:o}),"yAxis"),c||i.series.data?h.updateNavigatorSeries(!1):0===e.series.length&&(h.unbindRedraw=ib(e,"beforeRedraw",function(){e.series.length>0&&!h.series&&(h.setBaseSeries(),h.unbindRedraw())})),h.reversedExtremes=e.inverted&&!h.xAxis.reversed||!e.inverted&&h.xAxis.reversed,h.renderElements(),h.addMouseEvents()}else h.xAxis={chart:e,navigatorAxis:{fake:!0},translate:function(t,i){let s=e.xAxis[0],n=s.getExtremes(),r=s.len-2*l,o=iB("min",s.options.min,n.dataMin),a=iB("max",s.options.max,n.dataMax)-o;return i?t*a/r+o:r*(t-o)/a},toPixels:function(e){return this.translate(e)},toValue:function(e){return this.translate(e,!0)}},h.xAxis.navigatorAxis.axis=h.xAxis,h.xAxis.navigatorAxis.toFixedRange=tD.prototype.toFixedRange.bind(h.xAxis.navigatorAxis);if(e.options.scrollbar.enabled){let t=iS(e.options.scrollbar,{vertical:e.inverted});!ik(t.margin)&&h.navigatorEnabled&&(t.margin=e.inverted?-3:3),e.scrollbar=h.scrollbar=new ic(e.renderer,t,e),ib(h.scrollbar,"changed",function(e){let t=h.size,i=t*this.to,s=t*this.from;h.hasDragged=h.scrollbar.hasDragged,h.render(0,0,s,i),this.shouldUpdateExtremes(e.DOMType)&&setTimeout(function(){h.onMouseUp(e)})})}h.addBaseSeriesEvents(),h.addChartEvents()}setOpposite(){let e=this.navigatorOptions,t=this.navigatorEnabled,i=this.chart;this.opposite=iP(e.opposite,!!(!t&&i.inverted))}getUnionExtremes(e){let t;let i=this.chart.xAxis[0],s=this.chart.time,n=this.xAxis,r=n.options,o=i.options;return e&&null===i.dataMin||(t={dataMin:iP(s.parse(r?.min),iB("min",s.parse(o.min),i.dataMin,n.dataMin,n.min)),dataMax:iP(s.parse(r?.max),iB("max",s.parse(o.max),i.dataMax,n.dataMax,n.max))}),t}setBaseSeries(e,t){let i=this.chart,s=this.baseSeries=[];e=e||i.options&&i.options.navigator.baseSeries||(i.series.length?iT(i.series,e=>!e.options.isInternal).index:0),(i.series||[]).forEach((t,i)=>{!t.options.isInternal&&(t.options.showInNavigator||(i===e||t.options.id===e)&&!1!==t.options.showInNavigator)&&s.push(t)}),this.xAxis&&!this.xAxis.navigatorAxis.fake&&this.updateNavigatorSeries(!0,t)}updateNavigatorSeries(e,t){let i=this,s=i.chart,n=i.baseSeries,r={enableMouseTracking:!1,index:null,linkedTo:null,group:"nav",padXAxis:!1,xAxis:this.navigatorOptions.xAxis?.id,yAxis:this.navigatorOptions.yAxis?.id,showInLegend:!1,stacking:void 0,isInternal:!0,states:{inactive:{opacity:1}}},o=i.series=(i.series||[]).filter(e=>{let t=e.baseSeries;return!(0>n.indexOf(t))||(t&&(iD(t,"updatedData",i.updatedDataHandler),delete t.navigatorSeries),e.chart&&e.destroy(),!1)}),a,l,h=i.navigatorOptions.series,c;n&&n.length&&n.forEach(e=>{let d=e.navigatorSeries,u=iA({color:e.color,visible:e.visible},iM(h)?ip.navigator.series:h);if(d&&!1===i.navigatorOptions.adaptToUpdatedData)return;r.name="Navigator "+n.length,c=(a=e.options||{}).navigatorOptions||{},u.dataLabels=iN(u.dataLabels),(l=iS(a,r,u,c)).pointRange=iP(u.pointRange,c.pointRange,ip.plotOptions[l.type||"line"].pointRange);let p=c.data||u.data;i.hasNavigatorData=i.hasNavigatorData||!!p,l.data=p||a.data?.slice(0),d&&d.options?d.update(l,t):(e.navigatorSeries=s.initSeries(l),s.setSortedData(),e.navigatorSeries.baseSeries=e,o.push(e.navigatorSeries))}),(h.data&&!(n&&n.length)||iM(h))&&(i.hasNavigatorData=!1,(h=iN(h)).forEach((e,t)=>{r.name="Navigator "+(o.length+1),(l=iS(ip.navigator.series,{color:s.series[t]&&!s.series[t].options.isInternal&&s.series[t].color||s.options.colors[t]||s.options.colors[0]},r,e)).data=e.data,l.data&&(i.hasNavigatorData=!0,o.push(s.initSeries(l)))})),e&&this.addBaseSeriesEvents()}addBaseSeriesEvents(){let e=this,t=e.baseSeries||[];t[0]&&t[0].xAxis&&t[0].eventsToUnbind.push(ib(t[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes)),t.forEach(i=>{i.eventsToUnbind.push(ib(i,"show",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)})),i.eventsToUnbind.push(ib(i,"hide",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)})),!1!==this.navigatorOptions.adaptToUpdatedData&&i.xAxis&&i.eventsToUnbind.push(ib(i,"updatedData",this.updatedDataHandler)),i.eventsToUnbind.push(ib(i,"remove",function(){t&&iE(t,i),this.navigatorSeries&&e.series&&(iE(e.series,this.navigatorSeries),iv(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1),delete this.navigatorSeries)}))})}getBaseSeriesMin(e){return this.baseSeries.reduce(function(e,t){return Math.min(e,t.getColumn("x")[0]??e)},e)}modifyNavigatorAxisExtremes(){let e=this.xAxis;if(void 0!==e.getExtremes){let t=this.getUnionExtremes(!0);t&&(t.dataMin!==e.min||t.dataMax!==e.max)&&(e.min=t.dataMin,e.max=t.dataMax)}}modifyBaseAxisExtremes(){let e,t;let i=this.chart.navigator,s=this.getExtremes(),n=s.min,r=s.max,o=s.dataMin,a=s.dataMax,l=r-n,h=i.stickToMin,c=i.stickToMax,d=iP(this.ordinal?.convertOverscroll(this.options.overscroll),0),u=i.series&&i.series[0],p=!!this.setExtremes;!(this.eventArgs&&"rangeSelectorButton"===this.eventArgs.trigger)&&(h&&(e=(t=o)+l),c&&(e=a+d,h||(t=Math.max(o,e-l,i.getBaseSeriesMin(u&&u.xData?u.xData[0]:-Number.MAX_VALUE)))),p&&(h||c)&&ik(t)&&(this.min=this.userMin=t,this.max=this.userMax=e)),i.stickToMin=i.stickToMax=null}updatedDataHandler(){let e=this.chart.navigator,t=this.navigatorSeries,i=e.reversedExtremes?0===Math.round(e.zoomedMin):Math.round(e.zoomedMax)>=Math.round(e.size);e.stickToMax=iP(this.chart.options.navigator&&this.chart.options.navigator.stickToMax,i),e.stickToMin=e.shouldStickToMin(this,e),t&&!e.hasNavigatorData&&(t.options.pointStart=this.getColumn("x")[0],t.setData(this.options.data,!1,null,!1))}shouldStickToMin(e,t){let i=t.getBaseSeriesMin(e.getColumn("x")[0]),s=e.xAxis,n=s.max,r=s.min,o=s.options.range;return!!(ik(n)&&ik(r))&&(o&&n-i>0?n-i{e.destroy&&e.destroy()}),["series","xAxis","yAxis","shades","outline","scrollbarTrack","scrollbarRifles","scrollbarGroup","scrollbar","navigatorGroup","rendered"].forEach(e=>{this[e]&&this[e].destroy&&this[e].destroy(),this[e]=null}),[this.handles].forEach(e=>{iw(e)}),this.navigatorEnabled=!1}}let{animObject:iF}=w(),{format:iO}=D(),{clamp:iR,pick:iL,syncTimeout:iH}=w(),{getFakeMouseEvent:iz}=S,{getAxisRangeDescription:iq,fireEventOnWrappedOrUnwrappedElement:iG}=K,iK=class extends Z{init(){let e=this.chart,t=this;this.announcer=new ep(e,"polite"),this.addEvent(iI,"afterRender",function(){this.chart===t.chart&&this.chart.renderer&&iH(()=>{t.proxyProvider.updateGroupProxyElementPositions("navigator"),t.updateHandleValues()},iF(iL(this.chart.renderer.globalAnimation,!0)).duration)})}onChartUpdate(){let e=this.chart,t=e.options,i=t.navigator;if(i.enabled&&i.accessibility?.enabled){let i=t.accessibility.landmarkVerbosity,s=t.lang.accessibility?.navigator.groupLabel;this.proxyProvider.removeGroup("navigator"),this.proxyProvider.addGroup("navigator","div",{role:"all"===i?"region":"group","aria-label":iO(s,{chart:e},e)});let n=t.lang.accessibility?.navigator.handleLabel;[0,1].forEach(t=>{let i=this.getHandleByIx(t);if(i){let s=this.proxyProvider.addProxyElement("navigator",{click:i},"input",{type:"range","aria-label":iO(n,{handleIx:t,chart:e},e)});this[t?"maxHandleProxy":"minHandleProxy"]=s.innerElement,s.innerElement.style.pointerEvents="none",s.innerElement.oninput=()=>this.updateNavigator()}}),this.updateHandleValues()}else this.proxyProvider.removeGroup("navigator")}getNavigatorHandleNavigation(e){let t=this,i=this.chart,s=e?this.maxHandleProxy:this.minHandleProxy,n=this.keyCodes;return new Q(i,{keyCodeMap:[[[n.left,n.right,n.up,n.down],function(r){if(s){let o=r===n.left||r===n.up?-1:1;s.value=""+iR(parseFloat(s.value)+o,0,100),t.updateNavigator(()=>{let n=t.getHandleByIx(e);n&&i.setFocusToElement(n,s)})}return this.response.success}]],init:()=>{i.setFocusToElement(this.getHandleByIx(e),s)},validate:()=>!!(this.getHandleByIx(e)&&s&&i.options.navigator.accessibility?.enabled)})}getKeyboardNavigation(){return[this.getNavigatorHandleNavigation(0),this.getNavigatorHandleNavigation(1)]}destroy(){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.proxyProvider.removeGroup("navigator"),this.announcer&&this.announcer.destroy()}updateHandleValues(){let e=this.chart.navigator;if(e&&this.minHandleProxy&&this.maxHandleProxy){let t=e.size;this.minHandleProxy.value=""+Math.round(e.zoomedMin/t*100),this.maxHandleProxy.value=""+Math.round(e.zoomedMax/t*100)}}getHandleByIx(e){let t=this.chart.navigator;return t&&t.handles&&t.handles[e]}updateNavigator(e){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.updateNavigatorThrottleTimer=setTimeout((e=>{let t=this.chart,{navigator:i,pointer:s}=t;if(i&&s&&this.minHandleProxy&&this.maxHandleProxy){let n=s.getChartPosition(),r=parseFloat(this.minHandleProxy.value)/100*i.size,o=parseFloat(this.maxHandleProxy.value)/100*i.size;[[0,"mousedown",i.zoomedMin],[0,"mousemove",r],[0,"mouseup",r],[1,"mousedown",i.zoomedMax],[1,"mousemove",o],[1,"mouseup",o]].forEach(([e,t,s])=>{let r=this.getHandleByIx(e)?.element;r&&iG(r,iz(t,{x:n.left+i.left+s,y:n.top+i.top},r))}),e&&e();let a=t.options.lang.accessibility?.navigator.changeAnnouncement,l=iq(t.xAxis[0]);this.announcer.announce(iO(a,{axisRangeDescription:l,chart:t},t))}}).bind(this,e),20)}},{getPointAnnotationTexts:iU}=ev,{getAxisDescription:iV,getSeriesFirstPointElement:iW,getSeriesA11yElement:iX,unhideChartElementFromAT:iY}=K,{format:ij,numberFormat:i_}=D(),{reverseChildNodes:iZ,stripHTMLTagsFromString:i$}=S,{find:iQ,isNumber:iJ,isString:i0,pick:i1,defined:i2}=w();function i3(e){let t=e.chart.options.accessibility.series.pointDescriptionEnabledThreshold;return!!(!1!==t&&e.points&&e.points.length>=+t)}function i5(e,t){let i=e.series,s=i.chart,n=s.options.accessibility.point||{},r=i.options.accessibility&&i.options.accessibility.point||{},o=i.tooltipOptions||{},a=s.options.lang;return iJ(t)?i_(t,r.valueDecimals||n.valueDecimals||o.valueDecimals||-1,a.decimalPoint,a.accessibility.thousandsSep||a.thousandsSep):t}function i4(e,t){let i=e[t];return e.chart.langFormat("accessibility.series."+t+"Description",{name:iV(i),series:e})}function i6(e){let t=e.series,i=t.chart.series.length>1||t.options.name,s=function(e){let t=e.series,i=t.chart,s=t.options.accessibility,n=s&&s.point&&s.point.valueDescriptionFormat||i.options.accessibility.point.valueDescriptionFormat,r=i1(t.xAxis&&t.xAxis.options.accessibility&&t.xAxis.options.accessibility.enabled,!i.angular&&"flowmap"!==t.type),o=r?function(e){let t=function(e){let t=e.series,i=t.chart,s=t.options.accessibility&&t.options.accessibility.point||{},n=i.options.accessibility.point||{},r=t.xAxis&&t.xAxis.dateTime;if(r){let t=r.getXDateFormat(e.x||0,i.options.tooltip.dateTimeLabelFormats),o=s.dateFormatter&&s.dateFormatter(e)||n.dateFormatter&&n.dateFormatter(e)||s.dateFormat||n.dateFormat||t;return i.time.dateFormat(o,e.x||0,void 0)}}(e),i=(e.series.xAxis||{}).categories&&i2(e.category)&&(""+e.category).replace("
    "," "),s=i2(e.id)&&0>(""+e.id).indexOf("highcharts-"),n="x, "+e.x;return e.name||t||i||(s?e.id:n)}(e):"";return ij(n,{point:e,index:i2(e.index)?e.index+1:"",xDescription:o,value:function(e){let t=e.series,i=t.chart.options.accessibility.point||{},s=t.chart.options.accessibility&&t.chart.options.accessibility.point||{},n=t.tooltipOptions||{},r=s.valuePrefix||i.valuePrefix||n.valuePrefix||"",o=s.valueSuffix||i.valueSuffix||n.valueSuffix||"",a=void 0!==e.value?"value":"y",l=i5(e,e[a]);return e.isNull?t.chart.langFormat("accessibility.series.nullPointValue",{point:e}):t.pointArrayMap?function(e,t,i){let s=t||"",n=i||"",r=function(t){let i=i5(e,i1(e[t],e.options[t]));return void 0!==i?t+": "+s+i+n:i};return e.series.pointArrayMap.reduce(function(e,t){let i=r(t);return i?e+(e.length?", ":"")+i:e},"")}(e,r,o):r+l+o}(e),separator:r?", ":""},i)}(e),n=e.options&&e.options.accessibility&&e.options.accessibility.description,r=i?" "+t.name+".":"",o=function(e){let t=e.series.chart,i=iU(e);return i.length?t.langFormat("accessibility.series.pointAnnotationsDescription",{point:e,annotations:i}):""}(e);return e.accessibility=e.accessibility||{},e.accessibility.valueDescription=s,s+(n?" "+n:"")+r+(o?" "+o:"")}function i9(e){let t=e.chart,i=t.types||[],s=function(e){let t=(e.options.accessibility||{}).description;return t&&e.chart.langFormat("accessibility.series.description",{description:t,series:e})||""}(e),n=function(i){return t[i]&&t[i].length>1&&e[i]},r=e.index+1,o=i4(e,"xAxis"),a=i4(e,"yAxis"),l={seriesNumber:r,series:e,chart:t},h=i.length>1?"Combination":"",c=t.langFormat("accessibility.series.summary."+e.type+h,l)||t.langFormat("accessibility.series.summary.default"+h,l),d=(n("yAxis")?" "+a+".":"")+(n("xAxis")?" "+o+".":"");return ij(i1(e.options.accessibility&&e.options.accessibility.descriptionFormat,t.options.accessibility.series.descriptionFormat,""),{seriesDescription:c,authorDescription:s?" "+s:"",axisDescription:d,series:e,chart:t,seriesNumber:r},void 0)}let i8={defaultPointDescriptionFormatter:i6,defaultSeriesDescriptionFormatter:i9,describeSeries:function(e){let t=e.chart,i=iW(e),s=iX(e),n=t.is3d&&t.is3d();s&&(s.lastChild!==i||n||iZ(s),function(e){let t=function(e){let t=e.options.accessibility||{};return!i3(e)&&!t.exposeAsGroupOnly}(e),i=function(e){let t=e.chart.options.accessibility.keyboardNavigation.seriesNavigation;return!!(e.points&&(e.points.length<+t.pointNavigationEnabledThreshold||!1===t.pointNavigationEnabledThreshold))}(e),s=e.chart.options.accessibility.point.describeNull;(t||i)&&e.points.forEach(i=>{let n=i.graphic&&i.graphic.element||function(e){let t=e.series,i=t&&t.chart,s=t&&t.is("sunburst"),n=e.isNull,r=i&&i.options.accessibility.point.describeNull;return n&&!s&&r}(i)&&function(e){let t=e.series,i=function(e){let t=e.index;return e.series&&e.series.data&&i2(t)&&iQ(e.series.data,function(e){return!!(e&&void 0!==e.index&&e.index>t&&e.graphic&&e.graphic.element)})||null}(e),s=i&&i.graphic,n=s?s.parentGroup:t.graph||t.group,r=i?{x:i1(e.plotX,i.plotX,0),y:i1(e.plotY,i.plotY,0)}:{x:i1(e.plotX,0),y:i1(e.plotY,0)},o=function(e,t){let i=e.series.chart.renderer.rect(t.x,t.y,1,1);return i.attr({class:"highcharts-a11y-mock-point",fill:"none",opacity:0,"fill-opacity":0,"stroke-opacity":0}),i}(e,r);if(n&&n.element)return e.graphic=o,e.hasMockGraphic=!0,o.add(n),n.element.insertBefore(o.element,s?s.element:null),o.element}(i),r=i.options&&i.options.accessibility&&!1===i.options.accessibility.enabled;if(n){if(i.isNull&&!s){n.setAttribute("aria-hidden",!0);return}n.setAttribute("tabindex","-1"),e.chart.styledMode||(n.style.outline="none"),t&&!r?function(e,t){let i=e.series,s=i.options.accessibility?.point||{},n=i.chart.options.accessibility.point||{},r=i$(i0(s.descriptionFormat)&&ij(s.descriptionFormat,e,i.chart)||s.descriptionFormatter?.(e)||i0(n.descriptionFormat)&&ij(n.descriptionFormat,e,i.chart)||n.descriptionFormatter?.(e)||i6(e),i.chart.renderer.forExport);t.setAttribute("role","img"),t.setAttribute("aria-label",r)}(i,n):n.setAttribute("aria-hidden",!0)}})}(e),iY(t,s),function(e){let t=e.chart,i=t.options.chart,s=i.options3d&&i.options3d.enabled,n=t.series.length>1,r=t.options.accessibility.series.describeSingleSeries,o=(e.options.accessibility||{}).exposeAsGroupOnly;return!(s&&n)&&(n||r||o||i3(e))}(e)?function(e,t){let i=e.options.accessibility||{},s=e.chart.options.accessibility,n=s.landmarkVerbosity;i.exposeAsGroupOnly?t.setAttribute("role","img"):"all"===n?t.setAttribute("role","region"):t.setAttribute("role","group"),t.setAttribute("tabindex","-1"),e.chart.styledMode||(t.style.outline="none"),t.setAttribute("aria-label",i$(s.series.descriptionFormatter&&s.series.descriptionFormatter(e)||i9(e),e.chart.renderer.forExport))}(e,s):s.removeAttribute("aria-label"))}},{composed:i7}=w(),{addEvent:se,defined:st,pushUnique:si}=w(),{getChartTitle:ss}=K,{defaultPointDescriptionFormatter:sn,defaultSeriesDescriptionFormatter:sr}=i8;function so(e){return!!e.options.accessibility.announceNewData.enabled}class sa{constructor(e){this.dirty={allSeries:{}},this.lastAnnouncementTime=0,this.chart=e}init(){let e=this.chart,t=e.options.accessibility.announceNewData.interruptUser?"assertive":"polite";this.lastAnnouncementTime=0,this.dirty={allSeries:{}},this.eventProvider=new Y,this.announcer=new ep(e,t),this.addEventListeners()}destroy(){this.eventProvider.removeAddedEvents(),this.announcer.destroy()}addEventListeners(){let e=this,t=this.chart,i=this.eventProvider;i.addEvent(t,"afterApplyDrilldown",function(){e.lastAnnouncementTime=0}),i.addEvent(t,"afterAddSeries",function(t){e.onSeriesAdded(t.series)}),i.addEvent(t,"redraw",function(){e.announceDirtyData()})}onSeriesAdded(e){so(this.chart)&&(this.dirty.hasDirty=!0,this.dirty.allSeries[e.name+e.index]=e,this.dirty.newSeries=st(this.dirty.newSeries)?void 0:e)}announceDirtyData(){let e=this.chart,t=this;if(e.options.accessibility.announceNewData&&this.dirty.hasDirty){let e=this.dirty.newPoint;e&&(e=function(e){let t=e.series.data.filter(t=>e.x===t.x&&e.y===t.y);return 1===t.length?t[0]:e}(e)),this.queueAnnouncement(Object.keys(this.dirty.allSeries).map(e=>t.dirty.allSeries[e]),this.dirty.newSeries,e),this.dirty={allSeries:{}}}}queueAnnouncement(e,t,i){let s=this.chart.options.accessibility.announceNewData;if(s.enabled){let n=+new Date,r=n-this.lastAnnouncementTime,o=Math.max(0,s.minAnnounceInterval-r),a=function(e,t){let i=(e||[]).concat(t||[]).reduce((e,t)=>(e[t.name+t.index]=t,e),{});return Object.keys(i).map(e=>i[e])}(this.queuedAnnouncement&&this.queuedAnnouncement.series,e),l=this.buildAnnouncementMessage(a,t,i);l&&(this.queuedAnnouncement&&clearTimeout(this.queuedAnnouncementTimer),this.queuedAnnouncement={time:n,message:l,series:a},this.queuedAnnouncementTimer=setTimeout(()=>{this&&this.announcer&&(this.lastAnnouncementTime=+new Date,this.announcer.announce(this.queuedAnnouncement.message),delete this.queuedAnnouncement,delete this.queuedAnnouncementTimer)},o))}}buildAnnouncementMessage(e,t,i){let s=this.chart,n=s.options.accessibility.announceNewData;if(n.announcementFormatter){let s=n.announcementFormatter(e,t,i);if(!1!==s)return s.length?s:null}let r=w().charts&&w().charts.length>1?"Multiple":"Single",o=t?"newSeriesAnnounce"+r:i?"newPointAnnounce"+r:"newDataAnnounce",a=ss(s);return s.langFormat("accessibility.announceNewData."+o,{chartTitle:a,seriesDesc:t?sr(t):null,pointDesc:i?sn(i):null,point:i,series:t})}}!function(e){function t(e){let t=this.chart,i=t.accessibility?.components.series.newDataAnnouncer;i&&i.chart===t&&so(t)&&(i.dirty.newPoint=st(i.dirty.newPoint)?void 0:e.point)}function i(){let e=this.chart,t=e.accessibility?.components.series.newDataAnnouncer;t&&t.chart===e&&so(e)&&(t.dirty.hasDirty=!0,t.dirty.allSeries[this.name+this.index]=this)}e.compose=function(e){si(i7,"A11y.NDA")&&(se(e,"addPoint",t),se(e,"updatedData",i))}}(sa||(sa={}));let sl=sa,{doc:sh}=w(),{attr:sc,css:sd,merge:su}=w(),{fireEventOnWrappedOrUnwrappedElement:sp}=K,{cloneMouseEvent:sg,cloneTouchEvent:sm,getFakeMouseEvent:sb,removeElement:sf}=S,sx=class{constructor(e,t,i="button",s,n){this.chart=e,this.target=t,this.eventProvider=new Y;let r=this.innerElement=sh.createElement(i),o=this.element=s?sh.createElement(s):r;e.styledMode||this.hideElementVisually(r),s&&("li"!==s||e.styledMode||(o.style.listStyle="none"),o.appendChild(r),this.element=o),this.updateTarget(t,n)}click(){let e=this.getTargetPosition();e.x+=e.width/2,e.y+=e.height/2;let t=sb("click",e);sp(this.target.click,t)}updateTarget(e,t){this.target=e,this.updateCSSClassName();let i=t||{};Object.keys(i).forEach(e=>{null===i[e]&&delete i[e]});let s=this.getTargetAttr(e.click,"aria-label");sc(this.innerElement,su(s?{"aria-label":s}:{},i)),this.eventProvider.removeAddedEvents(),this.addProxyEventsToElement(this.innerElement,e.click),this.refreshPosition()}refreshPosition(){let e=this.getTargetPosition();sd(this.innerElement,{width:(e.width||1)+"px",height:(e.height||1)+"px",left:(Math.round(e.x)||0)+"px",top:(Math.round(e.y)||0)+"px"})}remove(){this.eventProvider.removeAddedEvents(),sf(this.element)}updateCSSClassName(){let e=e=>e.indexOf("highcharts-no-tooltip")>-1,t=this.chart.legend,i=t.group&&t.group.div,s=e(i&&i.className||""),n=e(this.getTargetAttr(this.target.click,"class")||"");this.innerElement.className=s||n?"highcharts-a11y-proxy-element highcharts-no-tooltip":"highcharts-a11y-proxy-element"}addProxyEventsToElement(e,t){["click","touchstart","touchend","touchcancel","touchmove","mouseover","mouseenter","mouseleave","mouseout"].forEach(i=>{let s=0===i.indexOf("touch");this.eventProvider.addEvent(e,i,e=>{let i=s?sm(e):sg(e);t&&sp(t,i),e.stopPropagation(),s||e.preventDefault()},{passive:!1})})}hideElementVisually(e){sd(e,{borderWidth:0,backgroundColor:"transparent",cursor:"pointer",outline:"none",opacity:.001,filter:"alpha(opacity=1)",zIndex:999,overflow:"hidden",padding:0,margin:0,display:"block",position:"absolute","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)"})}getTargetPosition(){let e=this.target.click,t=e.element?e.element:e,i=this.target.visual||t,s=this.chart.renderTo,n=this.chart.pointer;if(s&&i?.getBoundingClientRect&&n){let e=i.getBoundingClientRect(),t=n.getChartPosition();return{x:(e.left-t.left)/t.scaleX,y:(e.top-t.top)/t.scaleY,width:e.right/t.scaleX-e.left/t.scaleX,height:e.bottom/t.scaleY-e.top/t.scaleY}}return{x:0,y:0,width:1,height:1}}getTargetAttr(e,t){return e.element?e.element.getAttribute(t):e.getAttribute(t)}},{doc:sy}=w(),{attr:sv,css:sw}=w(),{unhideChartElementFromAT:sE}=K,{removeChildNodes:sA}=S,sT=class{constructor(e){this.chart=e,this.domElementProvider=new W,this.groups={},this.groupOrder=[],this.beforeChartProxyPosContainer=this.createProxyPosContainer("before"),this.afterChartProxyPosContainer=this.createProxyPosContainer("after"),this.update()}addProxyElement(e,t,i="button",s){let n=this.groups[e];if(!n)throw Error("ProxyProvider.addProxyElement: Invalid group key "+e);let r="ul"===n.type||"ol"===n.type?"li":void 0,o=new sx(this.chart,t,i,r,s);return n.proxyContainerElement.appendChild(o.element),n.proxyElements.push(o),o}addGroup(e,t="div",i){let s;let n=this.groups[e];if(n)return n.groupElement;let r=this.domElementProvider.createElement(t);return i&&i.role&&"div"!==t?(s=this.domElementProvider.createElement("div")).appendChild(r):s=r,s.className="highcharts-a11y-proxy-group highcharts-a11y-proxy-group-"+e.replace(/\W/g,"-"),this.groups[e]={proxyContainerElement:r,groupElement:s,type:t,proxyElements:[]},sv(s,i||{}),"ul"===t&&r.setAttribute("role","list"),this.afterChartProxyPosContainer.appendChild(s),this.updateGroupOrder(this.groupOrder),s}updateGroupAttrs(e,t){let i=this.groups[e];if(!i)throw Error("ProxyProvider.updateGroupAttrs: Invalid group key "+e);sv(i.groupElement,t)}updateGroupOrder(e){if(this.groupOrder=e.slice(),this.isDOMOrderGroupOrder())return;let t=e.indexOf("series"),i=t>-1?e.slice(0,t):e,s=t>-1?e.slice(t+1):[],n=sy.activeElement;["before","after"].forEach(e=>{let t=this["before"===e?"beforeChartProxyPosContainer":"afterChartProxyPosContainer"];sA(t),("before"===e?i:s).forEach(e=>{let i=this.groups[e];i&&t.appendChild(i.groupElement)})}),(this.beforeChartProxyPosContainer.contains(n)||this.afterChartProxyPosContainer.contains(n))&&n&&n.focus&&n.focus()}clearGroup(e){let t=this.groups[e];if(!t)throw Error("ProxyProvider.clearGroup: Invalid group key "+e);sA(t.proxyContainerElement)}removeGroup(e){let t=this.groups[e];t&&(this.domElementProvider.removeElement(t.groupElement),t.groupElement!==t.proxyContainerElement&&this.domElementProvider.removeElement(t.proxyContainerElement),delete this.groups[e])}update(){this.updatePosContainerPositions(),this.updateGroupOrder(this.groupOrder),this.updateProxyElementPositions()}updateProxyElementPositions(){Object.keys(this.groups).forEach(this.updateGroupProxyElementPositions.bind(this))}updateGroupProxyElementPositions(e){let t=this.groups[e];t&&t.proxyElements.forEach(e=>e.refreshPosition())}destroy(){this.domElementProvider.destroyCreatedElements()}createProxyPosContainer(e){let t=this.domElementProvider.createElement("div");return t.setAttribute("aria-hidden","false"),t.className="highcharts-a11y-proxy-container"+(e?"-"+e:""),sw(t,{top:"0",left:"0"}),this.chart.styledMode||(t.style.whiteSpace="nowrap",t.style.position="absolute"),t}getCurrentGroupOrderInDOM(){let e=e=>{let t=Object.keys(this.groups),i=t.length;for(;i--;){let s=t[i],n=this.groups[s];if(n&&e===n.groupElement)return s}},t=t=>{let i=[],s=t.children;for(let t=0;t"series"===e||!!this.groups[e]),i=e.length;if(i!==t.length)return!1;for(;i--;)if(e[i]!==t[i])return!1;return!0}updatePosContainerPositions(){let e=this.chart;if(e.renderer.forExport)return;let t=e.renderer.box;e.container.insertBefore(this.afterChartProxyPosContainer,t.nextSibling),e.container.insertBefore(this.beforeChartProxyPosContainer,t),sE(this.chart,this.afterChartProxyPosContainer),sE(this.chart,this.beforeChartProxyPosContainer)}},{unhideChartElementFromAT:sC,getAxisRangeDescription:sM}=K,{addEvent:sk,attr:sS}=w();class sP extends Z{init(){let e=this.chart;this.announcer=new ep(e,"polite")}onChartUpdate(){let e=this.chart,t=this,i=e.rangeSelector;i&&(this.updateSelectorVisibility(),this.setDropdownAttrs(),i.buttons&&i.buttons.length&&i.buttons.forEach(e=>{t.setRangeButtonAttrs(e)}),i.maxInput&&i.minInput&&["minInput","maxInput"].forEach(function(s,n){let r=i[s];r&&(sC(e,r),t.setRangeInputAttrs(r,"accessibility.rangeSelector."+(n?"max":"min")+"InputLabel"))}))}updateSelectorVisibility(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown,s=t&&t.buttons||[],n=e=>e.setAttribute("aria-hidden",!0);t&&t.hasVisibleDropdown&&i?(sC(e,i),s.forEach(e=>n(e.element))):(i&&n(i),s.forEach(t=>sC(e,t.element)))}setDropdownAttrs(){let e=this.chart,t=e.rangeSelector&&e.rangeSelector.dropdown;if(t){let i=e.langFormat("accessibility.rangeSelector.dropdownLabel",{rangeTitle:e.options.lang.rangeSelectorZoom});t.setAttribute("aria-label",i),t.setAttribute("tabindex",-1)}}setRangeButtonAttrs(e){sS(e.element,{tabindex:-1,role:"button"})}setRangeInputAttrs(e,t){let i=this.chart;sS(e,{tabindex:-1,"aria-label":i.langFormat(t,{chart:i})})}onButtonNavKbdArrowKey(e,t){let i=e.response,s=this.keyCodes,n=this.chart,r=n.options.accessibility.keyboardNavigation.wrapAround,o=t===s.left||t===s.up?-1:1;return n.highlightRangeSelectorButton(n.highlightedRangeSelectorItemIx+o)?i.success:r?(e.init(o),i.success):i[o>0?"next":"prev"]}onButtonNavKbdClick(e){let t=e.response,i=this.chart;return 3!==i.oldRangeSelectorItemState&&this.fakeClickEvent(i.rangeSelector.buttons[i.highlightedRangeSelectorItemIx].element),t.success}onAfterBtnClick(){let e=this.chart,t=sM(e.xAxis[0]),i=e.langFormat("accessibility.rangeSelector.clickButtonAnnouncement",{chart:e,axisRangeDescription:t});i&&this.announcer.announce(i)}onInputKbdMove(e){let t=this.chart,i=t.rangeSelector,s=t.highlightedInputRangeIx=(t.highlightedInputRangeIx||0)+e;if(s>1||s<0){if(t.accessibility)return t.accessibility.keyboardNavigation.exiting=!0,t.accessibility.keyboardNavigation.tabindexContainer.focus(),t.accessibility.keyboardNavigation.move(e)}else if(i){let e=i[s?"maxDateBox":"minDateBox"],n=i[s?"maxInput":"minInput"];e&&n&&t.setFocusToElement(e,n)}return!0}onInputNavInit(e){let t=this,i=this.chart,s=e>0?0:1,n=i.rangeSelector,r=n&&n[s?"maxDateBox":"minDateBox"],o=n&&n.minInput,a=n&&n.maxInput;if(i.highlightedInputRangeIx=s,r&&o&&a){i.setFocusToElement(r,s?a:o),this.removeInputKeydownHandler&&this.removeInputKeydownHandler();let e=e=>{(e.which||e.keyCode)===this.keyCodes.tab&&t.onInputKbdMove(e.shiftKey?-1:1)&&(e.preventDefault(),e.stopPropagation())},n=sk(o,"keydown",e),l=sk(a,"keydown",e);this.removeInputKeydownHandler=()=>{n(),l()}}}onInputNavTerminate(){let e=this.chart.rangeSelector||{};e.maxInput&&e.hideInput("max"),e.minInput&&e.hideInput("min"),this.removeInputKeydownHandler&&(this.removeInputKeydownHandler(),delete this.removeInputKeydownHandler)}initDropdownNav(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown;t&&i&&(e.setFocusToElement(t.buttonGroup,i),this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeDropdownKeydownHandler=sk(i,"keydown",t=>{let i=(t.which||t.keyCode)===this.keyCodes.tab,s=e.accessibility;i&&(t.preventDefault(),t.stopPropagation(),s&&s.keyboardNavigation.move(t.shiftKey?-1:1))}))}getRangeSelectorButtonNavigation(){let e=this.chart,t=this.keyCodes,i=this;return new Q(e,{keyCodeMap:[[[t.left,t.right,t.up,t.down],function(e){return i.onButtonNavKbdArrowKey(this,e)}],[[t.enter,t.space],function(){return i.onButtonNavKbdClick(this)}]],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.buttons&&e.rangeSelector.buttons.length)},init:function(t){let s=e.rangeSelector;if(s&&s.hasVisibleDropdown)i.initDropdownNav();else if(s){let i=s.buttons.length-1;e.highlightRangeSelectorButton(t>0?0:i)}},terminate:function(){i.removeDropdownKeydownHandler&&(i.removeDropdownKeydownHandler(),delete i.removeDropdownKeydownHandler)}})}getRangeSelectorInputNavigation(){let e=this.chart,t=this;return new Q(e,{keyCodeMap:[],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.inputGroup&&"hidden"!==e.rangeSelector.inputGroup.element.style.visibility&&!1!==e.options.rangeSelector.inputEnabled&&e.rangeSelector.minInput&&e.rangeSelector.maxInput)},init:function(e){t.onInputNavInit(e)},terminate:function(){t.onInputNavTerminate()}})}getKeyboardNavigation(){return[this.getRangeSelectorButtonNavigation(),this.getRangeSelectorInputNavigation()]}destroy(){this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeInputKeydownHandler&&this.removeInputKeydownHandler(),this.announcer&&this.announcer.destroy()}}!function(e){function t(e){let t=this.rangeSelector&&this.rangeSelector.buttons||[],i=this.highlightedRangeSelectorItemIx,s=this.rangeSelector&&this.rangeSelector.selected;return void 0!==i&&t[i]&&i!==s&&t[i].setState(this.oldRangeSelectorItemState||0),this.highlightedRangeSelectorItemIx=e,!!t[e]&&(this.setFocusToElement(t[e].box,t[e].element),e!==s&&(this.oldRangeSelectorItemState=t[e].state,t[e].setState(1)),!0)}function i(){let e=this.chart.accessibility;if(e&&e.components.rangeSelector)return e.components.rangeSelector.onAfterBtnClick()}e.compose=function(e,s){let n=e.prototype;n.highlightRangeSelectorButton||(n.highlightRangeSelectorButton=t,sk(s,"afterBtnClick",i))}}(sP||(sP={}));let sD=sP,{composed:sN}=w(),{addEvent:sB,merge:sI,pushUnique:sF}=w();!function(e){function t(e){sI(!0,e,{marker:{enabled:!0,states:{normal:{opacity:0}}}})}function i(e){return e.marker.states&&e.marker.states.normal&&e.marker.states.normal.opacity}function s(e){return!!(e._hasPointMarkers&&e.points&&e.points.length)}function n(){this.chart.styledMode&&(this.markerGroup&&this.markerGroup[this.a11yMarkersForced?"addClass":"removeClass"]("highcharts-a11y-markers-hidden"),s(this)&&this.points.forEach(e=>{e.graphic&&(e.graphic[e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-hidden"),e.graphic[!1===e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-visible"))}))}function r(e){this.resetA11yMarkerOptions=sI(e.options.marker||{},this.userOptions.marker||{})}function o(){let e=this.options;!function(e){let t=e.chart.options.accessibility.enabled,i=!1!==(e.options.accessibility&&e.options.accessibility.enabled);return t&&i&&function(e){let t=e.chart.options.accessibility;return e.points.length-1;t.highlightedPoint===this&&i!==e&&!n&&e&&e.focus&&e.focus()})}onDrillupAll(){let e;let t=this.lastDrilledDownPoint,i=this.chart,s=t&&sW(i,t.seriesName);t&&s&&sK(t.x)&&sK(t.y)&&(e=sV(s,t.x,t.y)),e=e||sZ(i),i.container&&i.container.focus(),e&&e.highlight&&e.highlight(!1)}getKeyboardNavigationHandler(){let e=this,t=this.keyCodes,i=this.chart,s=i.inverted;return new Q(i,{keyCodeMap:[[s?[t.up,t.down]:[t.left,t.right],function(t){return e.onKbdSideways(this,t)}],[s?[t.left,t.right]:[t.up,t.down],function(t){return e.onKbdVertical(this,t)}],[[t.enter,t.space],function(e,t){let s=i.highlightedPoint;if(s){let{plotLeft:e,plotTop:i}=this.chart,{plotX:n=0,plotY:r=0}=s;t={...t,chartX:e+n,chartY:i+r,point:s,target:s.graphic?.element||t.target},sU(s.series,"click",t),s.firePointEvent("click",t)}return this.response.success}],[[t.home],function(){return sQ(i),this.response.success}],[[t.end],function(){return s$(i),this.response.success}],[[t.pageDown,t.pageUp],function(e){return i.highlightAdjacentSeries(e===t.pageDown),this.response.success}]],init:function(){return e.onHandlerInit(this)},validate:function(){return!!sZ(i)},terminate:function(){return e.onHandlerTerminate()}})}onKbdSideways(e,t){let i=this.keyCodes,s=t===i.right||t===i.down;return this.attemptHighlightAdjacentPoint(e,s)}onHandlerInit(e){let t=this.chart;return t.options.accessibility.keyboardNavigation.seriesNavigation.rememberPointFocus&&t.highlightedPoint?t.highlightedPoint.highlight():sQ(t),e.response.success}onKbdVertical(e,t){let i=this.chart,s=this.keyCodes,n=t===s.down||t===s.right,r=i.options.accessibility.keyboardNavigation.seriesNavigation;if(r.mode&&"serialize"===r.mode)return this.attemptHighlightAdjacentPoint(e,n);let o=i.highlightedPoint&&i.highlightedPoint.series.keyboardMoveVertical?"highlightAdjacentPointVertical":"highlightAdjacentSeries";return i[o](n),e.response.success}onHandlerTerminate(){let e=this.chart,t=e.options.accessibility.keyboardNavigation;e.tooltip&&e.tooltip.hide(0);let i=e.highlightedPoint&&e.highlightedPoint.series;i&&i.onMouseOut&&i.onMouseOut(),e.highlightedPoint&&e.highlightedPoint.onMouseOut&&e.highlightedPoint.onMouseOut(),t.seriesNavigation.rememberPointFocus||delete e.highlightedPoint}attemptHighlightAdjacentPoint(e,t){let i=this.chart,s=i.options.accessibility.keyboardNavigation.wrapAround;return i.highlightAdjacentPoint(t)?e.response.success:s&&(t?sQ(i):s$(i))?e.response.success:e.response[t?"next":"prev"]}onSeriesDestroy(e){let t=this.chart;t.highlightedPoint&&t.highlightedPoint.series===e&&(delete t.highlightedPoint,t.focusElement&&t.focusElement.removeFocusBorder())}destroy(){this.eventProvider.removeAddedEvents()}}!function(e){function t(e){let t,i;let s=this.series,n=this.highlightedPoint,r=n&&sY(n)||0,o=n&&n.series.points||[],a=this.series&&this.series[this.series.length-1],l=a&&a.points&&a.points[a.points.length-1];if(!s[0]||!s[0].points)return!1;if(n){if(t=s[n.series.index+(e?1:-1)],(i=o[r+(e?1:-1)])||!t||(i=t.points[e?0:t.points.length-1]),!i)return!1}else i=e?s[0].points[0]:l;return s_(i)?(sj(t=i.series)?this.highlightedPoint=e?t.points[t.points.length-1]:t.points[0]:this.highlightedPoint=i,this.highlightAdjacentPoint(e)):i.highlight()}function i(e){let t=this.highlightedPoint,i=1/0,s;return!!(sK(t.plotX)&&sK(t.plotY))&&(this.series.forEach(n=>{sj(n)||n.points.forEach(r=>{if(!sK(r.plotY)||!sK(r.plotX)||r===t)return;let o=r.plotY-t.plotY,a=Math.abs(r.plotX-t.plotX),l=Math.abs(o)*Math.abs(o)+a*a*4;n.yAxis&&n.yAxis.reversed&&(o*=-1),!(o<=0&&e||o>=0&&!e||l<5||s_(r))&&l!(sK(e.plotX)&&sK(e.plotY));if(!h(e)){for(;l--;)!h(r=t.points[l])&&(a=(e.plotX-r.plotX)*(e.plotX-r.plotX)*4+(e.plotY-r.plotY)*(e.plotY-r.plotY)*1)=0;--e)if(!s_(i[e]))return i[e].highlight()}return!1}e.compose=function(e,o,a){let l=e.prototype,h=o.prototype,c=a.prototype;l.highlightAdjacentPoint||(l.highlightAdjacentPoint=t,l.highlightAdjacentPointVertical=i,l.highlightAdjacentSeries=s,h.highlight=n,c.keyboardMoveVertical=!0,["column","gantt","pie"].forEach(e=>{sq[e]&&(sq[e].prototype.keyboardMoveVertical=!1)}),c.highlightNextValidPoint=r)}}(sJ||(sJ={}));let s0=sJ,{hideSeriesFromAT:s1}=K,{describeSeries:s2}=i8,s3=class extends Z{static compose(e,t,i){sl.compose(i),sO.compose(i),s0.compose(e,t,i)}init(){this.newDataAnnouncer=new sl(this.chart),this.newDataAnnouncer.init(),this.keyboardNavigation=new s0(this.chart,this.keyCodes),this.keyboardNavigation.init(),this.hideTooltipFromATWhenShown(),this.hideSeriesLabelsFromATWhenShown()}hideTooltipFromATWhenShown(){let e=this;this.chart.tooltip&&this.addEvent(this.chart.tooltip.constructor,"refresh",function(){this.chart===e.chart&&this.label&&this.label.element&&this.label.element.setAttribute("aria-hidden",!0)})}hideSeriesLabelsFromATWhenShown(){this.addEvent(this.chart,"afterDrawSeriesLabels",function(){this.series.forEach(function(e){e.labelBySeries&&e.labelBySeries.attr("aria-hidden",!0)})})}onChartRender(){this.chart.series.forEach(function(e){!1!==(e.options.accessibility&&e.options.accessibility.enabled)&&e.visible&&0!==e.getPointsCollection().length?s2(e):s1(e)})}getKeyboardNavigation(){return this.keyboardNavigation.getKeyboardNavigationHandler()}destroy(){this.newDataAnnouncer.destroy(),this.keyboardNavigation.destroy()}},{unhideChartElementFromAT:s5}=K,{getFakeMouseEvent:s4}=S,{attr:s6,pick:s9}=w(),s8=class extends Z{constructor(){super(...arguments),this.focusedMapNavButtonIx=-1}init(){let e=this,t=this.chart;this.proxyProvider.addGroup("zoom","div"),["afterShowResetZoom","afterApplyDrilldown","drillupall"].forEach(i=>{e.addEvent(t,i,function(){e.updateProxyOverlays()})})}onChartUpdate(){let e=this.chart,t=this;e.mapNavigation&&e.mapNavigation.navButtons.forEach((i,s)=>{s5(e,i.element),t.setMapNavButtonAttrs(i.element,"accessibility.zoom.mapZoom"+(s?"Out":"In"))})}setMapNavButtonAttrs(e,t){let i=this.chart;s6(e,{tabindex:-1,role:"button","aria-label":i.langFormat(t,{chart:i})})}onChartRender(){this.updateProxyOverlays()}updateProxyOverlays(){let e=this.chart;if(this.proxyProvider.clearGroup("zoom"),e.resetZoomButton&&this.createZoomProxyButton(e.resetZoomButton,"resetZoomProxyButton",e.langFormat("accessibility.zoom.resetZoomButton",{chart:e})),e.drillUpButton&&e.breadcrumbs&&e.breadcrumbs.list){let t=e.breadcrumbs.list[e.breadcrumbs.list.length-1];this.createZoomProxyButton(e.drillUpButton,"drillUpProxyButton",e.langFormat("accessibility.drillUpButton",{chart:e,buttonText:e.breadcrumbs.getButtonText(t)}))}}createZoomProxyButton(e,t,i){this[t]=this.proxyProvider.addProxyElement("zoom",{click:e},"button",{"aria-label":i,tabindex:-1})}getMapZoomNavigation(){let e=this.keyCodes,t=this.chart,i=this;return new Q(t,{keyCodeMap:[[[e.up,e.down,e.left,e.right],function(e){return i.onMapKbdArrow(this,e)}],[[e.tab],function(e,t){return i.onMapKbdTab(this,t)}],[[e.space,e.enter],function(){return i.onMapKbdClick(this)}]],validate:function(){return!!(t.mapView&&t.mapNavigation&&t.mapNavigation.navButtons.length)},init:function(e){return i.onMapNavInit(e)}})}onMapKbdArrow(e,t){let i=this.chart,s=this.keyCodes,n=i.container,r=t===s.up||t===s.down,o=t===s.left||t===s.up?1:-1,a=(r?i.plotHeight:i.plotWidth)/10*o,l=10*Math.random(),h={x:n.offsetLeft+i.plotLeft+i.plotWidth/2+l,y:n.offsetTop+i.plotTop+i.plotHeight/2+l},c=r?{x:h.x,y:h.y+a}:{x:h.x+a,y:h.y};return[s4("mousedown",h),s4("mousemove",c),s4("mouseup",c)].forEach(e=>n.dispatchEvent(e)),e.response.success}onMapKbdTab(e,t){let i=this.chart,s=e.response,n=t.shiftKey,r=n&&!this.focusedMapNavButtonIx||!n&&this.focusedMapNavButtonIx;if(i.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0),r)return i.mapView&&i.mapView.zoomBy(),s[n?"prev":"next"];this.focusedMapNavButtonIx+=n?-1:1;let o=i.mapNavigation.navButtons[this.focusedMapNavButtonIx];return i.setFocusToElement(o.box,o.element),o.setState(2),s.success}onMapKbdClick(e){let t=this.chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].element;return this.fakeClickEvent(t),e.response.success}onMapNavInit(e){let t=this.chart,i=t.mapNavigation.navButtons[0],s=t.mapNavigation.navButtons[1],n=e>0?i:s;t.setFocusToElement(n.box,n.element),n.setState(2),this.focusedMapNavButtonIx=e>0?0:1}simpleButtonNavigation(e,t,i){let s=this.keyCodes,n=this,r=this.chart;return new Q(r,{keyCodeMap:[[[s.tab,s.up,s.down,s.left,s.right],function(e,t){let i=e===s.tab&&t.shiftKey||e===s.left||e===s.up;return this.response[i?"prev":"next"]}],[[s.space,s.enter],function(){return s9(i(this,r),this.response.success)}]],validate:function(){return r[e]&&r[e].box&&n[t].innerElement},init:function(){r.setFocusToElement(r[e].box,n[t].innerElement)}})}getKeyboardNavigation(){return[this.simpleButtonNavigation("resetZoomButton","resetZoomProxyButton",function(e,t){t.zoomOut()}),this.simpleButtonNavigation("drillUpButton","drillUpProxyButton",function(e,t){return t.drillUp(),e.response.prev}),this.getMapZoomNavigation()]}},{doc:s7,isMS:ne,win:nt}=w(),ni={isHighContrastModeActive:function(){let e=/(Edg)/.test(nt.navigator.userAgent);if(nt.matchMedia&&e)return nt.matchMedia("(-ms-high-contrast: active)").matches;if(ne&&nt.getComputedStyle){let e=s7.createElement("div");e.style.backgroundImage="url(data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)",s7.body.appendChild(e);let t=(e.currentStyle||nt.getComputedStyle(e)).backgroundImage;return s7.body.removeChild(e),"none"===t}return nt.matchMedia&&nt.matchMedia("(forced-colors: active)").matches},setHighContrastTheme:function(e){e.highContrastModeActive=!0;let t=e.options.accessibility.highContrastTheme;e.update(t,!1);let i=t.colors?.length>1;e.series.forEach(function(e){let s=t.plotOptions[e.type]||{},n=i&&void 0!==e.colorIndex?t.colors[e.colorIndex]:s.color||"window",r={color:s.color||"windowText",colors:i?t.colors:[s.color||"windowText"],borderColor:s.borderColor||"window",fillColor:n};e.update(r,!1),e.points&&e.points.forEach(function(e){e.options&&e.options.color&&e.update({color:s.color||"windowText",borderColor:s.borderColor||"window"},!1)})}),e.redraw()}},{error:ns,pick:nn}=w();function nr(e,t,i){let s=e,n,r=0;for(;r"series"!==e)):Object.keys(this.components):[]}update(){let e=this.components,t=this.chart,i=t.options.accessibility;nu(t,"beforeA11yUpdate"),t.types=this.getChartTypes();let s=i.keyboardNavigation.order;this.proxyProvider.updateGroupOrder(s),this.getComponentOrder().forEach(function(i){e[i].onChartUpdate(),nu(t,"afterA11yComponentUpdate",{name:i,component:e[i]})}),this.keyboardNavigation.update(s),!t.highContrastModeActive&&!1!==i.highContrastMode&&(ni.isHighContrastModeActive()||!0===i.highContrastMode)&&ni.setHighContrastTheme(t),nu(t,"afterA11yUpdate",{accessibility:this})}destroy(){let e=this.chart||{},t=this.components;Object.keys(t).forEach(function(e){t[e].destroy(),t[e].destroyBase()}),this.proxyProvider&&this.proxyProvider.destroy(),e.announcerContainer&&ng(e.announcerContainer),this.keyboardNavigation&&this.keyboardNavigation.destroy(),e.renderTo&&e.renderTo.setAttribute("aria-hidden",!0),e.focusElement&&e.focusElement.removeFocusBorder()}getChartTypes(){let e={};return this.chart.series.forEach(function(t){e[t.type]=1}),Object.keys(e)}}!function(e){function t(){this.accessibility&&this.accessibility.destroy()}function i(){this.a11yDirty&&this.renderTo&&(delete this.a11yDirty,this.updateA11yEnabled());let e=this.accessibility;e&&!e.zombie&&(e.proxyProvider.updateProxyElementPositions(),e.getComponentOrder().forEach(function(t){e.components[t].onChartRender()}))}function s(e){let t=e.options.accessibility;t&&(t.customComponents&&(this.options.accessibility.customComponents=t.customComponents,delete t.customComponents),np(!0,this.options.accessibility,t),this.accessibility&&this.accessibility.destroy&&(this.accessibility.destroy(),delete this.accessibility)),this.a11yDirty=!0}function n(){let t=this.accessibility,i=this.options.accessibility,s=this.renderer.boxWrapper.element,n=this.title;if(i&&i.enabled)t&&!t.zombie?t.update():(this.accessibility=t=new e(this),t&&!t.zombie&&t.update(),"img"===s.getAttribute("role")&&s.removeAttribute("role"));else if(t)t.destroy&&t.destroy(),delete this.accessibility;else{this.renderTo.setAttribute("role","img"),this.renderTo.setAttribute("aria-hidden",!1),this.renderTo.setAttribute("aria-label",(n&&n.element.textContent||"").replace(/{nc(e,t,function(){this.a11yDirty=!0})}),["afterApplyDrilldown","drillupall"].forEach(t=>{nc(e,t,function(){let e=this.accessibility;e&&!e.zombie&&e.update()})}),nc(a,"update",r),["update","updatedData","remove"].forEach(e=>{nc(l,e,function(){this.chart.accessibility&&(this.chart.a11yDirty=!0)})}))}}(nm||(nm={})),np(!0,nl,{accessibility:{enabled:!0,screenReaderSection:{beforeChartFormat:"<{headingTagName}>{chartTitle}
    {typeDescription}
    {chartSubtitle}
    {chartLongdesc}
    {playAsSoundButton}
    {viewTableButton}
    {xAxisDescription}
    {yAxisDescription}
    {annotationsTitle}{annotationsList}
    ",afterChartFormat:"{endOfChartMarker}",axisRangeDateFormat:"%Y-%m-%d %H:%M:%S"},series:{descriptionFormat:"{seriesDescription}{authorDescription}{axisDescription}",describeSingleSeries:!1,pointDescriptionEnabledThreshold:200},point:{valueDescriptionFormat:"{xDescription}{separator}{value}.",describeNull:!0},landmarkVerbosity:"all",linkedDescription:'*[data-highcharts-chart="{index}"] + .highcharts-description',highContrastMode:"auto",keyboardNavigation:{enabled:!0,focusBorder:{enabled:!0,hideBrowserFocusOutline:!0,style:{color:"#334eff",lineWidth:2,borderRadius:3},margin:2},order:["series","zoom","rangeSelector","navigator","legend","chartMenu"],wrapAround:!0,seriesNavigation:{skipNullPoints:!0,pointNavigationEnabledThreshold:!1,rememberPointFocus:!1}},announceNewData:{enabled:!1,minAnnounceInterval:5e3,interruptUser:!1}},legend:{accessibility:{enabled:!0,keyboardNavigation:{enabled:!0}}},exporting:{accessibility:{enabled:!0}},navigator:{accessibility:{enabled:!0}}},{accessibility:{highContrastTheme:{chart:{backgroundColor:"window"},title:{style:{color:"windowText"}},subtitle:{style:{color:"windowText"}},colorAxis:{minColor:"windowText",maxColor:"windowText",stops:[],dataClasses:[]},colors:["windowText"],xAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},yAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},tooltip:{backgroundColor:"window",borderColor:"windowText",style:{color:"windowText"}},plotOptions:{series:{lineColor:"windowText",fillColor:"window",borderColor:"windowText",edgeColor:"windowText",borderWidth:1,dataLabels:{connectorColor:"windowText",color:"windowText",style:{color:"windowText",textOutline:"none"}},marker:{lineColor:"windowText",fillColor:"windowText"}},pie:{color:"window",colors:["window"],borderColor:"windowText",borderWidth:1},boxplot:{fillColor:"window"},candlestick:{lineColor:"windowText",fillColor:"window"},errorbar:{fillColor:"window"}},legend:{backgroundColor:"window",itemStyle:{color:"windowText"},itemHoverStyle:{color:"windowText"},itemHiddenStyle:{color:"#555"},title:{style:{color:"windowText"}}},credits:{style:{color:"windowText"}},drilldown:{activeAxisLabelStyle:{color:"windowText"},activeDataLabelStyle:{color:"windowText"}},navigation:{buttonOptions:{symbolStroke:"windowText",theme:{fill:"window"}}},rangeSelector:{buttonTheme:{fill:"window",stroke:"windowText",style:{color:"windowText"},states:{hover:{fill:"window",stroke:"windowText",style:{color:"windowText"}},select:{fill:"#444",stroke:"windowText",style:{color:"windowText"}}}},inputBoxBorderColor:"windowText",inputStyle:{backgroundColor:"window",color:"windowText"},labelStyle:{color:"windowText"}},navigator:{handles:{backgroundColor:"window",borderColor:"windowText"},outlineColor:"windowText",maskFill:"transparent",series:{color:"windowText",lineColor:"windowText"},xAxis:{gridLineColor:"windowText"}},scrollbar:{barBackgroundColor:"#444",barBorderColor:"windowText",buttonArrowColor:"windowText",buttonBackgroundColor:"window",buttonBorderColor:"windowText",rifleColor:"windowText",trackBackgroundColor:"window",trackBorderColor:"windowText"}}},lang:{accessibility:{defaultChartTitle:"Chart",chartContainerLabel:"{title}. Highcharts interactive chart.",svgContainerLabel:"Interactive chart",drillUpButton:"{buttonText}",credits:"Chart credits: {creditsStr}",thousandsSep:",",svgContainerTitle:"",graphicContainerLabel:"",screenReaderSection:{beforeRegionLabel:"",afterRegionLabel:"",annotations:{heading:"Chart annotations summary",descriptionSinglePoint:"{annotationText}. Related to {annotationPoint}",descriptionMultiplePoints:"{annotationText}. Related to {annotationPoint}{#each additionalAnnotationPoints}, also related to {this}{/each}",descriptionNoPoints:"{annotationText}"},endOfChartMarker:"End of interactive chart."},sonification:{playAsSoundButtonText:"Play as sound, {chartTitle}",playAsSoundClickAnnouncement:"Play"},legend:{legendLabelNoTitle:"Toggle series visibility, {chartTitle}",legendLabel:"Chart legend: {legendTitle}",legendItem:"Show {itemName}"},zoom:{mapZoomIn:"Zoom chart",mapZoomOut:"Zoom out chart",resetZoomButton:"Reset zoom"},rangeSelector:{dropdownLabel:"{rangeTitle}",minInputLabel:"Select start date.",maxInputLabel:"Select end date.",clickButtonAnnouncement:"Viewing {axisRangeDescription}"},navigator:{handleLabel:"{#eq handleIx 0}Start, percent{else}End, percent{/eq}",groupLabel:"Axis zoom",changeAnnouncement:"{axisRangeDescription}"},table:{viewAsDataTableButtonText:"View as data table, {chartTitle}",tableSummary:"Table representation of chart."},announceNewData:{newDataAnnounce:"Updated data for chart {chartTitle}",newSeriesAnnounceSingle:"New data series: {seriesDesc}",newPointAnnounceSingle:"New data point: {pointDesc}",newSeriesAnnounceMultiple:"New data series in chart {chartTitle}: {seriesDesc}",newPointAnnounceMultiple:"New data point in chart {chartTitle}: {pointDesc}"},seriesTypeDescriptions:{boxplot:"Box plot charts are typically used to display groups of statistical data. Each data point in the chart can have up to 5 values: minimum, lower quartile, median, upper quartile, and maximum.",arearange:"Arearange charts are line charts displaying a range between a lower and higher value for each point.",areasplinerange:"These charts are line charts displaying a range between a lower and higher value for each point.",bubble:"Bubble charts are scatter charts where each data point also has a size value.",columnrange:"Columnrange charts are column charts displaying a range between a lower and higher value for each point.",errorbar:"Errorbar series are used to display the variability of the data.",funnel:"Funnel charts are used to display reduction of data in stages.",pyramid:"Pyramid charts consist of a single pyramid with item heights corresponding to each point value.",waterfall:"A waterfall chart is a column chart where each column contributes towards a total end value."},chartTypes:{emptyChart:"Empty chart",mapTypeDescription:"Map of {mapTitle} with {numSeries} data series.",unknownMap:"Map of unspecified region with {numSeries} data series.",combinationChart:"Combination chart with {numSeries} data series.",defaultSingle:"Chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",defaultMultiple:"Chart with {numSeries} data series.",splineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",splineMultiple:"Line chart with {numSeries} lines.",lineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",lineMultiple:"Line chart with {numSeries} lines.",columnSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",columnMultiple:"Bar chart with {numSeries} data series.",barSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",barMultiple:"Bar chart with {numSeries} data series.",pieSingle:"Pie chart with {numPoints} {#eq numPoints 1}slice{else}slices{/eq}.",pieMultiple:"Pie chart with {numSeries} pies.",scatterSingle:"Scatter chart with {numPoints} {#eq numPoints 1}point{else}points{/eq}.",scatterMultiple:"Scatter chart with {numSeries} data series.",boxplotSingle:"Boxplot with {numPoints} {#eq numPoints 1}box{else}boxes{/eq}.",boxplotMultiple:"Boxplot with {numSeries} data series.",bubbleSingle:"Bubble chart with {numPoints} {#eq numPoints 1}bubbles{else}bubble{/eq}.",bubbleMultiple:"Bubble chart with {numSeries} data series."},axis:{xAxisDescriptionSingular:"The chart has 1 X axis displaying {names[0]}. {ranges[0]}",xAxisDescriptionPlural:"The chart has {numAxes} X axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",yAxisDescriptionSingular:"The chart has 1 Y axis displaying {names[0]}. {ranges[0]}",yAxisDescriptionPlural:"The chart has {numAxes} Y axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",timeRangeDays:"Data range: {range} days.",timeRangeHours:"Data range: {range} hours.",timeRangeMinutes:"Data range: {range} minutes.",timeRangeSeconds:"Data range: {range} seconds.",rangeFromTo:"Data ranges from {rangeFrom} to {rangeTo}.",rangeCategories:"Data range: {numCategories} categories."},exporting:{chartMenuLabel:"Chart menu",menuButtonLabel:"View chart menu, {chartTitle}"},series:{summary:{default:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",defaultCombination:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",line:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",lineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",spline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",splineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",column:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",columnCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",bar:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",barCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",pie:"{series.name}, pie {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",pieCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Pie with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",scatter:"{series.name}, scatter plot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",scatterCombination:"{series.name}, series {seriesNumber} of {chart.series.length}, scatter plot with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",boxplot:"{series.name}, boxplot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",boxplotCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Boxplot with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",bubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",bubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",map:"{series.name}, map {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Map with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",maplineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",mapbubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",mapbubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}."},description:"{description}",xAxisDescription:"X axis, {name}",yAxisDescription:"Y axis, {name}",nullPointValue:"No value",pointAnnotationsDescription:"{#each annotations}Annotation: {this}{/each}"}}}});let nb=nm,nf=w();nf.i18nFormat=nb.i18nFormat,nf.A11yChartUtilities=K,nf.A11yHTMLUtilities=S,nf.AccessibilityComponent=Z,nf.KeyboardNavigationHandler=Q,nf.SeriesAccessibilityDescriber=i8,nb.compose(nf.Chart,nf.Legend,nf.Point,nf.Series,nf.SVGElement,nf.RangeSelector);let nx=w();return y.default})()); // Internal-FR - Source Code !/** * Highcharts JS v12.1.2 (2024-12-21) * @module highcharts/modules/series-label * @requires highcharts * * (c) 2009-2024 Torstein Honsi * * License: www.highcharts.com/license */function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(t._Highcharts,t._Highcharts.Templating):"function"==typeof define&&define.amd?define("highcharts/modules/series-label",["highcharts/highcharts"],function(t){return e(t,t.Templating)}):"object"==typeof exports?exports["highcharts/modules/series-label"]=e(t._Highcharts,t._Highcharts.Templating):t.Highcharts=e(t.Highcharts,t.Highcharts.Templating)}("undefined"==typeof window?this:window,(t,e)=>(()=>{"use strict";var o={984:t=>{t.exports=e},944:e=>{e.exports=t}},r={};function a(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={exports:{}};return o[t](i,i.exports,a),i.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var o in e)a.o(e,o)&&!a.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var i={};a.d(i,{default:()=>B});var h=a(944),n=a.n(h),l=a(984),s=a.n(l);let c={enabled:!0,connectorAllowed:!1,connectorNeighbourDistance:24,format:void 0,formatter:void 0,minFontSize:null,maxFontSize:null,onArea:null,style:{fontSize:"0.8em",fontWeight:"bold"},useHTML:!1,boxesToAvoid:[]};function p(t,e,o,r,a,i){let h=(i-e)*(o-t)-(r-e)*(a-t);return h>0||!(h<0)}function d(t,e,o,r,a,i,h,n){return p(t,e,a,i,h,n)!==p(o,r,a,i,h,n)&&p(t,e,o,r,a,i)!==p(t,e,o,r,h,n)}let{animObject:f}=n(),{format:u}=s(),{setOptions:x}=n(),{composed:g}=n(),{boxIntersectLine:b,intersectRect:m}={boxIntersectLine:function(t,e,o,r,a,i,h,n){return d(t,e,t+o,e,a,i,h,n)||d(t+o,e,t+o,e+r,a,i,h,n)||d(t,e+r,t+o,e+r,a,i,h,n)||d(t,e,t,e+r,a,i,h,n)},intersectRect:function(t,e){return!(e.left>t.right||e.rightt.bottom||e.bottom=e-16&&m[X-1].chartX<=e+r.width+16){if(b(e,o,r.width,r.height,m[X-1].chartX,m[X-1].chartY,m[X].chartX,m[X].chartY))return!1;t===s&&!u&&a&&(u=b(e-16,o-16,r.width+32,r.height+32,m[X-1].chartX,m[X-1].chartY,m[X].chartX,m[X].chartY))}(l||u)&&(t!==s||n)&&(c=Math.min(c,(x=e+r.width/2-m[X].chartX)*x+(g=o+r.height/2-m[X].chartY)*g))}if(!n&&l&&t===s&&(a&&!u||c(t||0)+(e||0),0),e.labelSeriesMaxSum=Math.max(e.labelSeriesMaxSum||0,r.sum||0)),"load"===t.type&&(o=Math.max(o,f(r.options.animation).duration)),h&&(void 0!==h[0].plotX?i.animate({x:h[0].plotX+h[1],y:h[0].plotY+h[2]}):i.attr({opacity:0})))}),e.seriesLabelTimer=S(function(){e.series&&e.labelSeries&&function(t){t.boxesToAvoid=[];let e=t.labelSeries||[],o=t.boxesToAvoid;t.series.forEach(t=>(t.points||[]).forEach(e=>(e.dataLabels||[]).forEach(e=>{let{width:r,height:a}=e.getBBox(),i=(e.translateX||0)+(t.xAxis?t.xAxis.pos:t.chart.plotLeft),h=(e.translateY||0)+(t.yAxis?t.yAxis.pos:t.chart.plotTop);o.push({left:i,top:h,right:i+r,bottom:h+a})}))),e.forEach(function(t){let e=t.options.label||{};t.interpolatedPoints=function(t){let e,o,r,a,i;if(!t.xAxis&&!t.yAxis)return;let h=t.points,n=[],l=t.graph||t.area,s=l&&l.element,c=t.chart.inverted,p=t.xAxis,d=t.yAxis,f=c?d.pos:p.pos,u=c?p.pos:d.pos,x=c?p.len:d.len,g=c?d.len:p.len,b=Y((t.options.label||{}).onArea,!!t.area),m=d.getThreshold(t.options.threshold),y={},X=c?"chartCenterX":"chartCenterY";function w(t){let e=Math.round((t.plotX||0)/8)+","+Math.round((t.plotY||0)/8);y[e]||(y[e]=1,n.push(t))}if(t.getPointSpline&&s&&s.getPointAtLength&&!b&&h.length<(t.chart.plotSizeX||0)/16){let t=l.toD&&l.attr("d");for(l.toD&&l.attr({d:l.toD}),r=s.getTotalLength(),e=0;e16&&o<999)for(i=1,a=Math.ceil(o/16);ir&&t<=a-o.width&&e>=s&&e<=s+p-o.height}function E(){L&&(e.labelBySeries=L.destroy())}if(x&&!n&&(T=[e.xAxis.toPixels(b[0]),e.xAxis.toPixels(b[b.length-1])],P=Math.min.apply(Math,T),B=Math.max.apply(Math,T)),e.visible&&!e.boosted&&d){if(!L){let a=e.name;if("string"==typeof o.format?a=u(o.format,e,t):o.formatter&&(a=o.formatter.call(e)),e.labelBySeries=L=t.renderer.label(a,0,0,"connector",0,0,o.useHTML).addClass("highcharts-series-label highcharts-series-label-"+e.index+" "+(e.options.className||"")+" "+r),!t.renderer.styledMode){let r="string"==typeof e.color?e.color:"#666666";L.css(X({color:x?t.renderer.getContrast(r):r},o.style||{})),L.attr({opacity:t.renderer.forExport?1:0,stroke:e.color,"stroke-width":1})}i&&h&&L.css({fontSize:i+(e.sum||0)/(e.chart.labelSeriesMaxSum||0)*(h-i)+"px"}),L.attr({padding:0,zIndex:3}).add()}for((m=L.getBBox()).width=Math.round(m.width),A=d.length-1;A>0;A-=1)x?C(y=(d[A].chartCenterX??d[A].chartX)-m.width/2,w=(d[A].chartCenterY??d[A].chartY)-m.height/2,m)&&(S=v(e,y,w,m)):(C(y=d[A].chartX+3,w=d[A].chartY-m.height-3,m)&&(S=v(e,y,w,m,!0)),S&&g.push(S),C(y=d[A].chartX+3,w=d[A].chartY+3,m)&&(S=v(e,y,w,m,!0)),S&&g.push(S),C(y=d[A].chartX-m.width-3,w=d[A].chartY+3,m)&&(S=v(e,y,w,m,!0)),S&&g.push(S),C(y=d[A].chartX-m.width-3,w=d[A].chartY-m.height-3,m)&&(S=v(e,y,w,m,!0))),S&&g.push(S);if(o.connectorAllowed&&!g.length&&!x)for(y=l+c-m.width;y>=l;y-=16)for(w=s;we.weight-t.weight),S=g[0],(t.boxesToAvoid||[]).push({left:S.x,right:S.x+m.width,top:S.y,bottom:S.y+m.height});let o=Math.sqrt(Math.pow(Math.abs(S.x-(L.x||0)),2)+Math.pow(Math.abs(S.y-(L.y||0)),2));if(o&&e.labelBySeries){let r,i={opacity:t.renderer.forExport?1:0,x:S.x,y:S.y},h={opacity:1};o<=10&&(h={x:i.x,y:i.y},i={}),a&&(r=f(e.options.animation),r.duration*=.2),e.labelBySeries.attr(X(i,{anchorX:S.connectorPoint&&(S.connectorPoint.plotX||0)+l,anchorY:S.connectorPoint&&(S.connectorPoint.plotY||0)+s})).animate(h,r),e.options.kdNow=!0,e.buildKDTree();let n=e.searchPoint({chartX:S.x,chartY:S.y},!0);n&&(L.closest=[n,S.x-(n.plotX||0),S.y-(n.plotY||0)])}}else E()}else E()}),w(t,"afterDrawSeriesLabels")}(e)},e.renderer.forExport||!o?0:o)}}function T(t,e,o,r,a){let i=a&&a.anchorX,h=a&&a.anchorY,n,l,s=o/2;return M(i)&&M(h)&&(n=[["M",i,h]],(l=e-h)<0&&(l=-r-l),le+r?n.push(["L",t+s,e+r]):ht+o&&n.push(["L",t+o,e+r/2])),n||[]}let P=n();({compose:function(t,e){A(g,"SeriesLabel")&&(y(t,"load",L),y(t,"redraw",L),e.prototype.symbols.connector=T,x({plotOptions:{series:{label:c}}}))}}).compose(P.Chart,P.SVGRenderer);let B=n();return i.default})()); !/** * Highcharts JS v12.1.2 (2025-01-09) * @module highcharts/modules/offline-exporting * @requires highcharts * @requires highcharts/modules/exporting * * Client side exporting module * * (c) 2015-2024 Torstein Honsi / Oystein Moseng * * License: www.highcharts.com/license */function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(e._Highcharts,e._Highcharts.AST,e._Highcharts.Chart,e._Highcharts.HttpUtilities):"function"==typeof define&&define.amd?define("highcharts/modules/offline-exporting",["highcharts/highcharts"],function(e){return t(e,e.AST,e.Chart,e.HttpUtilities)}):"object"==typeof exports?exports["highcharts/modules/offline-exporting"]=t(e._Highcharts,e._Highcharts.AST,e._Highcharts.Chart,e._Highcharts.HttpUtilities):e.Highcharts=t(e.Highcharts,e.Highcharts.AST,e.Highcharts.Chart,e.Highcharts.HttpUtilities)}("undefined"==typeof window?this:window,(e,t,n,o)=>(()=>{"use strict";var i,r,l,s,a={660:e=>{e.exports=t},960:e=>{e.exports=n},156:e=>{e.exports=o},944:t=>{t.exports=e}},c={};function h(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return a[e](n,n.exports,h),n.exports}h.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return h.d(t,{a:t}),t},h.d=(e,t)=>{for(var n in t)h.o(t,n)&&!h.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},h.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var d={};h.d(d,{default:()=>ep});var p=h(944),u=h.n(p);let{isSafari:g,win:f,win:{document:m}}=u(),x=f.URL||f.webkitURL||f;function y(e){let t=e.replace(/filename=.*;/,"").match(/data:([^;]*)(;base64)?,([A-Z+\d\/]+)/i);if(t&&t.length>3&&f.atob&&f.ArrayBuffer&&f.Uint8Array&&f.Blob&&x.createObjectURL){let e=f.atob(t[3]),n=new f.ArrayBuffer(e.length),o=new f.Uint8Array(n);for(let t=0;t1e3)throw Error("Input too long");let i=/Edge\/\d+/.test(n.userAgent);if((g&&"string"==typeof e&&0===e.indexOf("data:application/pdf")||i||e.length>2e6)&&!(e=y(e)||""))throw Error("Failed to convert to blob");if(void 0!==o.download)o.href=e,o.download=t,m.body.appendChild(o),o.click(),m.body.removeChild(o);else try{if(!f.open(e,"chart"))throw Error("Failed to open window")}catch{f.location.href=e}}};var v=h(660),w=h.n(v);h(960),function(e){e.compose=function(e){return e.navigation||(e.navigation=new t(e)),e};class t{constructor(e){this.updates=[],this.chart=e}addUpdate(e){this.chart.navigation.updates.push(e)}update(e,t){this.updates.forEach(n=>{n.call(this.chart,e,t)})}}e.Additions=t}(i||(i={}));let S=i,{isTouchDevice:E}=u(),C={exporting:{allowTableSorting:!0,type:"image/png",url:"https://export-svg.highcharts.com/",pdfFont:{normal:void 0,bold:void 0,bolditalic:void 0,italic:void 0},printMaxWidth:780,scale:2,buttons:{contextButton:{className:"highcharts-contextbutton",menuClassName:"highcharts-contextmenu",symbol:"menu",titleKey:"contextButtonTitle",menuItems:["viewFullscreen","printChart","separator","downloadPNG","downloadJPEG","downloadSVG"],y:-5}},menuItemDefinitions:{viewFullscreen:{textKey:"viewFullscreen",onclick:function(){this.fullscreen&&this.fullscreen.toggle()}},printChart:{textKey:"printChart",onclick:function(){this.print()}},separator:{separator:!0},downloadPNG:{textKey:"downloadPNG",onclick:function(){this.exportChart()}},downloadJPEG:{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},downloadPDF:{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},downloadSVG:{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}}},lang:{viewFullscreen:"View in full screen",exitFullscreen:"Exit from full screen",printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"},navigation:{buttonOptions:{symbolSize:14,symbolX:14.5,symbolY:13.5,align:"right",buttonSpacing:5,height:28,verticalAlign:"top",width:28,symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{fill:"#ffffff",padding:5,stroke:"none","stroke-linecap":"round"}},menuStyle:{border:"none",borderRadius:"3px",background:"#ffffff",padding:"0.5em"},menuItemStyle:{background:"none",borderRadius:"3px",color:"#333333",padding:"0.5em",fontSize:E?"0.9em":"0.8em",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#f2f2f2"}}};!function(e){let t=[];function n(e,t,n,o){return[["M",e,t+2.5],["L",e+n,t+2.5],["M",e,t+o/2+.5],["L",e+n,t+o/2+.5],["M",e,t+o-1.5],["L",e+n,t+o-1.5]]}function o(e,t,n,o){let i=o/3-2;return[].concat(this.circle(n-i,t,i,i),this.circle(n-i,t+i+4,i,i),this.circle(n-i,t+2*(i+4),i,i))}e.compose=function(e){if(-1===t.indexOf(e)){t.push(e);let i=e.prototype.symbols;i.menu=n,i.menuball=o.bind(i)}}}(r||(r={}));let F=r,{composed:O}=u(),{addEvent:T,fireEvent:k,pushUnique:L}=u();function M(){this.fullscreen=new N(this)}class N{static compose(e){L(O,"Fullscreen")&&T(e,"beforeRender",M)}constructor(e){this.chart=e,this.isOpen=!1;let t=e.renderTo;!this.browserProps&&("function"==typeof t.requestFullscreen?this.browserProps={fullscreenChange:"fullscreenchange",requestFullscreen:"requestFullscreen",exitFullscreen:"exitFullscreen"}:t.mozRequestFullScreen?this.browserProps={fullscreenChange:"mozfullscreenchange",requestFullscreen:"mozRequestFullScreen",exitFullscreen:"mozCancelFullScreen"}:t.webkitRequestFullScreen?this.browserProps={fullscreenChange:"webkitfullscreenchange",requestFullscreen:"webkitRequestFullScreen",exitFullscreen:"webkitExitFullscreen"}:t.msRequestFullscreen&&(this.browserProps={fullscreenChange:"MSFullscreenChange",requestFullscreen:"msRequestFullscreen",exitFullscreen:"msExitFullscreen"}))}close(){let e=this,t=e.chart,n=t.options.chart;k(t,"fullscreenClose",null,function(){e.isOpen&&e.browserProps&&t.container.ownerDocument instanceof Document&&t.container.ownerDocument[e.browserProps.exitFullscreen](),e.unbindFullscreenEvent&&(e.unbindFullscreenEvent=e.unbindFullscreenEvent()),t.setSize(e.origWidth,e.origHeight,!1),e.origWidth=void 0,e.origHeight=void 0,n.width=e.origWidthOption,n.height=e.origHeightOption,e.origWidthOption=void 0,e.origHeightOption=void 0,e.isOpen=!1,e.setButtonText()})}open(){let e=this,t=e.chart,n=t.options.chart;k(t,"fullscreenOpen",null,function(){if(n&&(e.origWidthOption=n.width,e.origHeightOption=n.height),e.origWidth=t.chartWidth,e.origHeight=t.chartHeight,e.browserProps){let n=T(t.container.ownerDocument,e.browserProps.fullscreenChange,function(){e.isOpen?(e.isOpen=!1,e.close()):(t.setSize(null,null,!1),e.isOpen=!0,e.setButtonText())}),o=T(t,"destroy",n);e.unbindFullscreenEvent=()=>{n(),o()};let i=t.renderTo[e.browserProps.requestFullscreen]();i&&i.catch(function(){alert("Full screen is not supported inside a frame.")})}})}setButtonText(){let e=this.chart,t=e.exportDivElements,n=e.options.exporting,o=n&&n.buttons&&n.buttons.contextButton.menuItems,i=e.options.lang;if(n&&n.menuItemDefinitions&&i&&i.exitFullscreen&&i.viewFullscreen&&o&&t){let e=t[o.indexOf("viewFullscreen")];e&&w().setElementHTML(e,this.isOpen?i.exitFullscreen:n.menuItemDefinitions.viewFullscreen.text||i.viewFullscreen)}}toggle(){this.isOpen?this.close():this.open()}}var P=h(156),G=h.n(P);let{defaultOptions:H}=u(),{doc:D,SVG_NS:A,win:R}=u(),{addEvent:B,css:I,createElement:U,discardElement:V,extend:j,find:W,fireEvent:z,isObject:$,merge:q,objectEach:K,pick:_,removeEvent:J,splat:X,uniqueKey:Y}=u();!function(e){let t;let n=[/-/,/^(clipPath|cssText|d|height|width)$/,/^font$/,/[lL]ogical(Width|Height)$/,/^parentRule$/,/^(cssRules|ownerRules)$/,/perspective/,/TapHighlightColor/,/^transition/,/^length$/,/^\d+$/],o=["fill","stroke","strokeLinecap","strokeLinejoin","strokeWidth","textAnchor","x","y"];e.inlineAllowlist=[];let i=["clipPath","defs","desc"];function r(e){let t,n;let o=this,i=o.renderer,r=q(o.options.navigation.buttonOptions,e),l=r.onclick,s=r.menuItems,a=r.symbolSize||12;if(o.btnCount||(o.btnCount=0),o.exportDivElements||(o.exportDivElements=[],o.exportSVGElements=[]),!1===r.enabled||!r.theme)return;let c=o.styledMode?{}:r.theme;l?n=function(e){e&&e.stopPropagation(),l.call(o,e)}:s&&(n=function(e){e&&e.stopPropagation(),o.contextMenu(h.menuClassName,s,h.translateX||0,h.translateY||0,h.width||0,h.height||0,h),h.setState(2)}),r.text&&r.symbol?c.paddingLeft=_(c.paddingLeft,30):r.text||j(c,{width:r.width,height:r.height,padding:0});let h=i.button(r.text,0,0,n,c,void 0,void 0,void 0,void 0,r.useHTML).addClass(e.className).attr({title:_(o.options.lang[r._titleKey||r.titleKey],"")});h.menuClassName=e.menuClassName||"highcharts-menu-"+o.btnCount++,r.symbol&&(t=i.symbol(r.symbol,Math.round((r.symbolX||0)-a/2),Math.round((r.symbolY||0)-a/2),a,a,{width:a,height:a}).addClass("highcharts-button-symbol").attr({zIndex:1}).add(h),o.styledMode||t.attr({stroke:r.symbolStroke,fill:r.symbolFill,"stroke-width":r.symbolStrokeWidth||1})),h.add(o.exportingGroup).align(j(r,{width:h.width,x:_(r.x,o.buttonOffset)}),!0,"spacingBox"),o.buttonOffset+=((h.width||0)+r.buttonSpacing)*("right"===r.align?-1:1),o.exportSVGElements.push(h,t)}function l(){if(!this.printReverseInfo)return;let{childNodes:e,origDisplay:n,resetParams:o}=this.printReverseInfo;this.moveContainers(this.renderTo),[].forEach.call(e,function(e,t){1===e.nodeType&&(e.style.display=n[t]||"")}),this.isPrinting=!1,o&&this.setSize.apply(this,o),delete this.printReverseInfo,t=void 0,z(this,"afterPrint")}function s(){let e=D.body,t=this.options.exporting.printMaxWidth,n={childNodes:e.childNodes,origDisplay:[],resetParams:void 0};this.isPrinting=!0,this.pointer?.reset(void 0,0),z(this,"beforePrint"),t&&this.chartWidth>t&&(n.resetParams=[this.options.chart.width,void 0,!1],this.setSize(t,void 0,!1)),[].forEach.call(n.childNodes,function(e,t){1===e.nodeType&&(n.origDisplay[t]=e.style.display,e.style.display="none")}),this.moveContainers(e),this.printReverseInfo=n}function a(e){e.renderExporting(),B(e,"redraw",e.renderExporting),B(e,"destroy",e.destroyExport)}function c(e,t,n,o,i,r,l){let s=this,a=s.options.navigation,c=s.chartWidth,h=s.chartHeight,d="cache-"+e,p=Math.max(i,r),g,f=s[d];f||(s.exportContextMenu=s[d]=f=U("div",{className:e},{position:"absolute",zIndex:1e3,padding:p+"px",pointerEvents:"auto",...s.renderer.style},s.scrollablePlotArea?.fixedDiv||s.container),g=U("ul",{className:"highcharts-menu"},s.styledMode?{}:{listStyle:"none",margin:0,padding:0},f),s.styledMode||I(g,j({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},a.menuStyle)),f.hideMenu=function(){I(f,{display:"none"}),l&&l.setState(0),s.openMenu=!1,I(s.renderTo,{overflow:"hidden"}),I(s.container,{overflow:"hidden"}),u().clearTimeout(f.hideTimer),z(s,"exportMenuHidden")},s.exportEvents.push(B(f,"mouseleave",function(){f.hideTimer=R.setTimeout(f.hideMenu,500)}),B(f,"mouseenter",function(){u().clearTimeout(f.hideTimer)}),B(D,"mouseup",function(t){s.pointer?.inClass(t.target,e)||f.hideMenu()}),B(f,"click",function(){s.openMenu&&f.hideMenu()})),t.forEach(function(e){if("string"==typeof e&&(e=s.options.exporting.menuItemDefinitions[e]),$(e,!0)){let t;e.separator?t=U("hr",void 0,void 0,g):("viewData"===e.textKey&&s.isDataTableVisible&&(e.textKey="hideData"),t=U("li",{className:"highcharts-menu-item",onclick:function(t){t&&t.stopPropagation(),f.hideMenu(),"string"!=typeof e&&e.onclick&&e.onclick.apply(s,arguments)}},void 0,g),w().setElementHTML(t,e.text||s.options.lang[e.textKey]),s.styledMode||(t.onmouseover=function(){I(this,a.menuItemHoverStyle)},t.onmouseout=function(){I(this,a.menuItemStyle)},I(t,j({cursor:"pointer"},a.menuItemStyle||{})))),s.exportDivElements.push(t)}}),s.exportDivElements.push(g,f),s.exportMenuWidth=f.offsetWidth,s.exportMenuHeight=f.offsetHeight);let m={display:"block"};n+(s.exportMenuWidth||0)>c?m.right=c-n-i-p+"px":m.left=n-p+"px",o+r+(s.exportMenuHeight||0)>h&&l.alignOptions?.verticalAlign!=="top"?m.bottom=h-o-p+"px":m.top=o+r-p+"px",I(f,m),I(s.renderTo,{overflow:""}),I(s.container,{overflow:""}),s.openMenu=!0,z(s,"exportMenuShown")}function h(e){let t;let n=e?e.target:this,o=n.exportSVGElements,i=n.exportDivElements,r=n.exportEvents;o&&(o.forEach((e,i)=>{e&&(e.onclick=e.ontouchstart=null,n[t="cache-"+e.menuClassName]&&delete n[t],o[i]=e.destroy())}),o.length=0),n.exportingGroup&&(n.exportingGroup.destroy(),delete n.exportingGroup),i&&(i.forEach(function(e,t){e&&(u().clearTimeout(e.hideTimer),J(e,"mouseleave"),i[t]=e.onmouseout=e.onmouseover=e.ontouchstart=e.onclick=null,V(e))}),i.length=0),r&&(r.forEach(function(e){e()}),r.length=0)}function d(e,t){let n=this.getSVGForExport(e,t);e=q(this.options.exporting,e),G().post(e.url,{filename:e.filename?e.filename.replace(/\//g,"-"):this.getFilename(),type:e.type,width:e.width,scale:e.scale,svg:n},e.fetchOptions)}function p(e){return e&&this.inlineStyles(),this.container.innerHTML}function g(){let e=this.userOptions.title&&this.userOptions.title.text,t=this.options.exporting.filename;return t?t.replace(/\//g,"-"):("string"==typeof e&&(t=e.toLowerCase().replace(/<\/?[^>]+(>|$)/g,"").replace(/[\s_]+/g,"-").replace(/[^a-z\d\-]/g,"").replace(/^[\-]+/g,"").replace(/[\-]+/g,"-").substr(0,24).replace(/[\-]+$/g,"")),(!t||t.length<5)&&(t="chart"),t)}function f(e){let t,n,o=q(this.options,e);o.plotOptions=q(this.userOptions.plotOptions,e&&e.plotOptions),o.time=q(this.userOptions.time,e&&e.time);let i=U("div",null,{position:"absolute",top:"-9999em",width:this.chartWidth+"px",height:this.chartHeight+"px"},D.body),r=this.renderTo.style.width,l=this.renderTo.style.height,s=o.exporting.sourceWidth||o.chart.width||/px$/.test(r)&&parseInt(r,10)||(o.isGantt?800:600),a=o.exporting.sourceHeight||o.chart.height||/px$/.test(l)&&parseInt(l,10)||400;j(o.chart,{animation:!1,renderTo:i,forExport:!0,renderer:"SVGRenderer",width:s,height:a}),o.exporting.enabled=!1,delete o.data,o.series=[],this.series.forEach(function(e){(n=q(e.userOptions,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:e.visible})).isInternal||o.series.push(n)});let c={};this.axes.forEach(function(e){e.userOptions.internalKey||(e.userOptions.internalKey=Y()),e.options.isInternal||(c[e.coll]||(c[e.coll]=!0,o[e.coll]=[]),o[e.coll].push(q(e.userOptions,{visible:e.visible,type:e.type,uniqueNames:e.uniqueNames})))}),o.colorAxis=this.userOptions.colorAxis;let h=new this.constructor(o,this.callback);return e&&["xAxis","yAxis","series"].forEach(function(t){let n={};e[t]&&(n[t]=e[t],h.update(n))}),this.axes.forEach(function(t){let n=W(h.axes,e=>e.options.internalKey===t.userOptions.internalKey);if(n){let o=t.getExtremes(),i=X(e?.[t.coll]||{})[0],r="min"in i?i.min:o.userMin,l="max"in i?i.max:o.userMax;(void 0!==r&&r!==n.min||void 0!==l&&l!==n.max)&&n.setExtremes(r??void 0,l??void 0,!0,!1)}}),t=h.getChartHTML(this.styledMode||o.exporting?.applyStyleSheets),z(this,"getSVG",{chartCopy:h}),t=this.sanitizeSVG(t,o),o=null,h.destroy(),V(i),t}function m(e,t){let n=this.options.exporting;return this.getSVG(q({chart:{borderRadius:0}},n.chartOptions,t,{exporting:{sourceWidth:e&&e.sourceWidth||n.sourceWidth,sourceHeight:e&&e.sourceHeight||n.sourceHeight}}))}function x(){let t;let r=e.inlineAllowlist,l={},s=D.createElement("iframe");I(s,{width:"1px",height:"1px",visibility:"hidden"}),D.body.appendChild(s);let a=s.contentWindow&&s.contentWindow.document;a&&a.body.appendChild(a.createElementNS(A,"svg")),function e(s){let c,h,d,p,g,f;let m={};if(a&&1===s.nodeType&&-1===i.indexOf(s.nodeName)){if(c=R.getComputedStyle(s,null),h="svg"===s.nodeName?{}:R.getComputedStyle(s.parentNode,null),!l[s.nodeName]){t=a.getElementsByTagName("svg")[0],d=a.createElementNS(s.namespaceURI,s.nodeName),t.appendChild(d);let e=R.getComputedStyle(d,null),n={};for(let t in e)t.length<1e3&&"string"==typeof e[t]&&!/^\d+$/.test(t)&&(n[t]=e[t]);l[s.nodeName]=n,"text"===s.nodeName&&delete l.text.fill,t.removeChild(d)}for(let e in c)(u().isFirefox||u().isMS||u().isSafari||Object.hasOwnProperty.call(c,e))&&function(e,t){if(p=g=!1,r.length){for(f=r.length;f--&&!g;)g=r[f].test(t);p=!g}for("transform"===t&&"none"===e&&(p=!0),f=n.length;f--&&!p;){if(t.length>1e3)throw Error("Input too long");p=n[f].test(t)||"function"==typeof e}!p&&(h[t]!==e||"svg"===s.nodeName)&&l[s.nodeName][t]!==e&&(o&&-1===o.indexOf(t)?m[t]=e:e&&s.setAttribute(t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()}),e))}(c[e],e);if(I(s,m),"svg"===s.nodeName&&s.setAttribute("stroke-width","1px"),"text"===s.nodeName)return;[].forEach.call(s.children||s.childNodes,e)}}(this.container.querySelector("svg")),t.parentNode.removeChild(t),s.parentNode.removeChild(s)}function y(e){let{scrollablePlotArea:t}=this;(t?[t.fixedDiv,t.scrollingContainer]:[this.container]).forEach(function(t){e.appendChild(t)})}function b(){let e=this,t=(t,n,o)=>{e.isDirtyExporting=!0,q(!0,e.options[t],n),_(o,!0)&&e.redraw()};e.exporting={update:function(e,n){t("exporting",e,n)}},S.compose(e).navigation.addUpdate((e,n)=>{t("navigation",e,n)})}function v({alignTo:e,key:t,textPxLength:n}){let o=this.options.exporting,{align:i,buttonSpacing:r=0,verticalAlign:l,width:s=0}=q(this.options.navigation?.buttonOptions,o?.buttons?.contextButton),a=e.width-n,c=s+r;(o?.enabled??!0)&&"title"===t&&"right"===i&&"top"===l&&a<2*c&&(a{R.focus(),R.print(),u().isSafari||setTimeout(()=>{e.afterPrint()},1e3)},1))}function O(){let e=this,t=e.options.exporting,n=t.buttons,o=e.isDirtyExporting||!e.exportSVGElements;e.buttonOffset=0,e.isDirtyExporting&&e.destroyExport(),o&&!1!==t.enabled&&(e.exportEvents=[],e.exportingGroup=e.exportingGroup||e.renderer.g("exporting-group").attr({zIndex:3}).add(),K(n,function(t){e.addButton(t)}),e.isDirtyExporting=!1)}function T(e,t){let n=e.indexOf("")+6,o=e.substr(n);return e=e.substr(0,n),t&&t.exporting&&t.exporting.allowHTML&&o&&(o=''+o.replace(/(<(?:img|br).*?(?=\>))>/g,"$1 />")+"",e=e.replace("",o+"")),e=e.replace(/zIndex="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery\d+="[^"]+"/g,"").replace(/url\(("|")(.*?)("|")\;?\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/-1&&"image/svg+xml"!==i.type&&(u().isMS||"application/pdf"===i.type)?r(Error("Image type not supported for charts with embedded HTML")):e.downloadSVGLocal(t,es({filename:o.getFilename()},i),r,()=>ea(o,"exportChartLocalSuccess"))})}function n(e,t){let n=en.getElementsByTagName("head")[0],o=en.createElement("script");o.type="text/javascript",o.src=e,o.onload=t,o.onerror=function(){el("Error loading script "+e)},n.appendChild(o)}function o(t,n,o,i){let r=this,l=e=>r.sanitizeSVG(e,d),s=()=>{u&&f===g&&i(l(h.innerHTML))},a=(e,t,n)=>{++f,n.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",e),s()},c,h,d,p=null,u,g=0,f=0;r.unbindGetSVG=er(r,"getSVG",e=>{d=e.chartCopy.options,g=(u=(h=e.chartCopy.container.cloneNode(!0))&&h.getElementsByTagName("image")||[]).length}),r.getSVGForExport(t,n);try{if(!u||!u.length){i(l(h.innerHTML));return}for(let n=0;n{setTimeout(function(){let e;let l=en.createElement("canvas"),a=l.getContext&&l.getContext("2d");try{if(a){l.height=h.height*i,l.width=h.width*i,a.drawImage(h,0,0,l.width,l.height);try{e=l.toDataURL(n),r(e,n,o,i)}catch(e){d(t,n,o,i)}}else s(t,n,o,i)}finally{c&&c(t,n,o,i)}},e.loadEventDeferDelay)},u=()=>{a(t,n,o,i),c&&c(t,n,o,i)};d=()=>{h=new eo.Image,d=l,h.crossOrigin="Anonymous",h.onload=p,h.onerror=u,h.src=t},h.onload=p,h.onerror=u,h.src=t}function r(t){let n=eo.navigator.userAgent,o=n.indexOf("WebKit")>-1&&0>n.indexOf("Chrome");try{if(!o&&-1===t.indexOf("i?"p":"l","pt",[i,r]);[].forEach.call(e.querySelectorAll('*[visibility="hidden"]'),function(e){e.parentNode.removeChild(e)});let s=e.querySelectorAll("linearGradient");for(let e=0;e{"​"===e.textContent&&(e.textContent=" ",e.setAttribute("dx",-5))}),l.svg(e,{x:0,y:0,width:i,height:r,removeInvalid:!0}).then(()=>o(l.output("datauristring")))}e.CanVGRenderer={},e.domurl=eo.URL||eo.webkitURL||eo,e.loadEventDeferDelay=u().isMS?150:0,e.compose=function(e){let n=e.prototype;return n.exportChartLocal||(n.getSVGForLocalExport=o,n.exportChartLocal=t,ec(!0,ee.exporting,Q)),e},e.downloadSVGLocal=function(t,o,s,a){let c=en.createElement("div"),h=o.type||"image/png",d=(o.filename||"chart")+"."+("image/svg+xml"===h?"svg":h.split("/")[1]),p=o.scale||1,u,g,f,m=o.libURL||ee.exporting.libURL,x=!0,y=o.pdfFont;m="/"!==m.slice(-1)?m+"/":m;let b=(e,t)=>{let n,o;let i=(e,t)=>{eo.jspdf.jsPDF.API.events.push(["initialized",function(){this.addFileToVFS(e,t),this.addFont(e,"HighchartsFont",e),this.getFontList().HighchartsFont||this.setFont("HighchartsFont")}])};y&&(o=e.textContent||"",!/[^\u0000-\u007F\u200B]+/.test(o))&&(y=void 0);let r=["normal","italic","bold","bolditalic"],l=()=>{let e=r.shift();if(!e)return t();let o=y&&y[e];o?ei({url:o,responseType:"blob",success:(t,o)=>{let r=new FileReader;r.onloadend=function(){if("string"==typeof this.result){let t=this.result.split(",")[1];i(e,t),"normal"===e&&(n=t)}l()},r.readAsDataURL(o.response)},error:l}):(n&&i(e,n),l())};l()},v=()=>{let e,n;w().setElementHTML(c,t);let o=c.getElementsByTagName("text"),i=function(e,t){let n=e;for(;n&&n!==c;){if(n.style[t]){let o=n.style[t];"fontSize"===t&&/em$/.test(o)&&(o=Math.round(16*parseFloat(o))+"px"),e.style[t]=o;break}n=n.parentNode}};[].forEach.call(o,function(t){for(["fontFamily","fontSize"].forEach(e=>{i(t,e)}),t.style.fontFamily=y&&y.normal?"HighchartsFont":String(t.style.fontFamily&&t.style.fontFamily.split(" ").splice(-1)),e=t.getElementsByTagName("title"),[].forEach.call(e,function(e){t.removeChild(e)}),n=t.getElementsByClassName("highcharts-text-outline");n.length>0;){let e=n[0];e.parentNode&&e.parentNode.removeChild(e)}});let r=c.querySelector("svg");r&&b(r,()=>{l(r,0,p,e=>{try{et(e,d),a&&a()}catch(e){s(e)}})})};if("image/svg+xml"===h)try{void 0!==eo.MSBlobBuilder?((g=new eo.MSBlobBuilder).append(t),u=g.getBlob("image/svg+xml")):u=r(t),et(u,d),a&&a()}catch(e){s(e)}else"application/pdf"===h?eo.jspdf&&eo.jspdf.jsPDF?v():(x=!0,n(m+"jspdf.js",function(){n(m+"svg2pdf.js",v)})):(u=r(t),f=function(){try{e.domurl.revokeObjectURL(u)}catch(e){}},i(u,h,{},p,function(e){try{et(e,d),a&&a()}catch(e){s(e)}},function(){if(t.length>1e8)throw Error("Input too long");let e=en.createElement("canvas"),o=e.getContext("2d"),i=t.match(/^]*\s{,1000}width\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/),r=t.match(/^]*\s{0,1000}height\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/);if(o&&i&&r){let l=+i[1]*p,c=+r[1]*p,u=()=>{eo.canvg.Canvg.fromString(o,t).start();try{et(eo.navigator.msSaveOrOpenBlob?e.msToBlob():e.toDataURL(h),d),a&&a()}catch(e){s(e)}finally{f()}};e.width=l,e.height=c,eo.canvg?u():(x=!0,n(m+"canvg.js",u))}},s,s,function(){x&&f()}))},e.getScript=n,e.imageToDataUrl=i,e.svgToDataUrl=r,e.svgToPdf=l}(s||(s={}));let eh=s,ed=u();ed.dataURLtoBlob=ed.dataURLtoBlob||b.dataURLtoBlob,ed.downloadSVGLocal=eh.downloadSVGLocal,ed.downloadURL=ed.downloadURL||b.downloadURL,eh.compose(ed.Chart);let ep=u();return d.default})()); const highchartsRecessionBands = [ { color: '#EFEFEF', from: Date.UTC(1923,4,1), to: Date.UTC(1924,5,1) }, { color: '#EFEFEF', from: Date.UTC(1926,9,1), to: Date.UTC(1927,10,1) }, { color: '#EFEFEF', from: Date.UTC(1929,7,1), to: Date.UTC(1933,2,1) }, { color: '#EFEFEF', from: Date.UTC(1937,4,1), to: Date.UTC(1938,5,1) }, { color: '#EFEFEF', from: Date.UTC(1945,1,1), to: Date.UTC(1945,9,1) }, { color: '#EFEFEF', from: Date.UTC(1948,10,1), to: Date.UTC(1949,9,1) }, { color: '#EFEFEF', from: Date.UTC(1953,6,1), to: Date.UTC(1954,4,1) }, { color: '#EFEFEF', from: Date.UTC(1957,7,1), to: Date.UTC(1958,3,1) }, { color: '#EFEFEF', from: Date.UTC(1960,3,1), to: Date.UTC(1961,1,1) }, { color: '#EFEFEF', from: Date.UTC(1969,11,1), to: Date.UTC(1970,10,1) }, { color: '#EFEFEF', from: Date.UTC(1973,10,1), to: Date.UTC(1975,2,1) }, { color: '#EFEFEF', from: Date.UTC(1980,0,1), to: Date.UTC(1980,6,1) }, { color: '#EFEFEF', from: Date.UTC(1981,6,1), to: Date.UTC(1982,10,1) }, { color: '#EFEFEF', from: Date.UTC(1990,6,1), to: Date.UTC(1991,2,1) }, { color: '#EFEFEF', from: Date.UTC(2001,2,1), to: Date.UTC(2001,10,1) }, { color: '#EFEFEF', from: Date.UTC(2007,11,1), to: Date.UTC(2009,5,1) }, { color: '#EFEFEF', from: Date.UTC(2020,2,1), to: Date.UTC(2021,3,1) } ]; const monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; let resizeTimeout; let chartList = new Map(); // Put footer elements in a dedicated group Highcharts.AST.allowedReferences.push('data:'); const FRBAHighcharts = (function FRBAHighcharts() { let title = ""; let subTitle = ""; let legendAlignPosition = "top"; let legendYPosition = 0; let sourceLine = "Source: Federal Reserve Bank of Atlanta"; let categories = null; let stacking = "normal"; let dataSeries = []; let xAxisType = "datetime"; let xAxisTitle = ""; let reverse = false; let yAxisLabel = ""; let xAxisMin = null; let yAxisMin = null; let enableYAxisLabel = true; let enableTooltip = true; let tooltipHeader = ""; let formattedTooltip = ''; let isShowLegend = true; let additionalTooltipDataFormat = null; let chartRecessionBands = null; let enableLastDataLabel = false; let tickInterval = null; let polar = false; let mobileMarginBottom; function initializeHighcharts(type = "line", marginBottom = 110) { categories = null; chartRecessionBands = highchartsRecessionBands; dataSeries = []; enableLastDataLabel = false; formattedTooltip = ''; mobileMarginBottom = marginBottom; reverse = false; subTitle = ''; tickInterval = null; tooltipHeader = ''; xAxisTitle = ''; yAxisLabel = ''; Highcharts.setOptions({ chart: { zoomType: 'x', marginBottom: marginBottom, style: { overflow: 'visible' }, styledMode: true, type: type }, accessibility: { enabled: true, screenReaderSection: { beforeChartFormat: '

    {chartTitle}

    ' } }, credits: { enabled: false}, exporting: { scale: 1, allowHTML: false, chartOptions: { legend: { enabled: true }, rangeSelector: { enabled: false }, chart: { style: {fontSize: "20px" } } }, buttons: { contextButton: { text: 'Export', menuItems: [{ text: 'Print this chart', onclick: function () { this.print(); thisTitle = this.options.title.text; newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'print', 'label': newTitle + ' | ' + document.title }); } }, { separator: true, }, { text: 'Save as PNG', onclick: function () { let chart = this; createChartDownload(chart, 'png'); let thisTitle = this.options.title.text; let newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'png', 'label': newTitle + ' | ' + document.title }); } }, { text: 'Save as JPEG', onclick: function () { let chart = this; createChartDownload(chart, 'jpg'); let thisTitle = this.options.title.text; let newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'jpeg', 'label': newTitle + ' | ' + document.title }); } }, { text: 'Save as SVG', onclick: function () { let chart = this; createChartDownload(chart, 'svg'); let thisTitle = this.options.title.text; let newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'svg', 'label': newTitle + ' | ' + document.title }); } }] } } }, lang: { thousandsSep: ',' }, plotOptions: { area: { marker: { enabled: false } }, scatter: { marker: { enabled: true } }, spline: { marker: { enabled: false } }, series: { events: { hide: function () { thisTitle = this.chart.title.textStr; newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'hideSeries', 'label': newTitle + ' (series: ' + this.name + ') | ' + document.title }); }, show: function () { thisTitle = this.chart.title.textStr; newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'showSeries', 'label': newTitle + ' (series: ' + this.name + ') | ' + document.title }); } }, label: { enabled: false}, marker: { //enabled: true }, states: { inactive: { opacity: 1 } } } }, xAxis: { labels: { y: 20, lineWidth: 2, tickmarkPlacement: 'on', labels: { y: 40}, } }, yAxis: { lineWidth: 0, tickmarkPlacement: 'on', plotLines: [{ value: 0, width: 2, zIndex: 1 }] } }); } function setMobileMarginBottom(margin) { mobileMarginBottom = margin; } // sets the title of the highchart function setTitle(text) { title = text; } // sets the subtitle function setSubTitle(text) { subTitle = text; } function setSourceLine(source) { sourceLine = source; } function setXAxisType(type) { xAxisType = type; } function setXAxisTitle(title) { xAxisTitle = title; } function setYAxisLabel(label) { yAxisLabel = label; } function setEnableYAxisLabel(value) { enableYAxisLabel = value; } function setPointStart(start) { xAxisMin = convertDateToUTC(start, true); } function setXAxisMin(value) { xAxisMin = value; } function setYAxisMin(value) { yAxisMin = value; } function setReversed(value) { reverse = value; } function setCategories(cats) { categories = cats; } // add a series to the data chart with the series name as the first argucment and an array as the second arguement function addSeries(seriesName, seriesData, visible = true) { let seriesObject = {}; let description = title + ": " + seriesName; seriesData = convertSeriesData(seriesData); seriesObject = {name: seriesName, data: seriesData, visible: visible, accessibility: {description: description}}; dataSeries.push(seriesObject); } // used when you have a mix of series such as line, column function addSeriesType(seriesName, seriesData, type, classColor = '', showInLegend = true, zIndex = 99 ) { let seriesObject = {}; let description = title + ": " + seriesName; seriesData = convertSeriesData(seriesData); seriesObject = {name: seriesName, data: seriesData, accessibility: {description: description}, type: type, className: classColor, showInLegend: showInLegend, zIndex: zIndex }; dataSeries.push(seriesObject); } function hideSeries(chart, index) { chart.series[index].hide(); let thisTitle = chart.title.textStr; let newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'hideSeries', 'label': newTitle + ' (series: ' + this.name + ') | ' + document.title }); } function showSeries(chart, index) { chart.series[index].show(); let thisTitle = chart.title.textStr; let newTitle = thisTitle.replace("
    ",": "); newTitle = thisTitle.replace("
    ",": "); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Highcharts', 'category': 'Highcharts', 'action': 'showSeries', 'label': newTitle + ' (series: ' + this.name + ') | ' + document.title }); } function setTooltipHeader(value) { tooltipHeader = value; } // set tooltip for hover or click on a line series function setTooltip(value) { formattedTooltip = value; } // hide or show legend of the chart function showLegend(enabled) { isShowLegend = enabled; } function setLegendPosition(align, y) { legendAlignPosition = align; legendYPosition = y; } function setAdditionalTooltipData(data) { additionalTooltipDataFormat = data; } // used for stacking columns function setStacking(value) { stacking = value; } function showLastDataLabel(enable) { enableLastDataLabel = enable; } function hideRecessionBands(hide) { if(hide) { chartRecessionBands = null; } else { chartRecessionBands = recessionBands; } } function setTickInterval(interval) { tickInterval = interval; } // draws the chart and returns the chart reference function drawChart(container) { let formatString = formattedTooltip; let tooltipHeaderFormat = tooltipHeader; let additionalTooltipData = additionalTooltipDataFormat; let chart = new Highcharts.Chart({ chart: { polar: polar, renderTo: container }, title: { align: 'left', text: title, useHTML: true, width: $(`#${container}`)[0].offsetWidth * 0.8 }, subtitle: { text: subTitle, width: $(`#${container}`)[0].offsetWidth * 0.8 }, legend: { enabled: isShowLegend, borderRadius: 5, borderWidth: 1, layout: 'horizontal', symbolWidth: 20, useHTML: false, itemMarginTop: 2, itemMarginBottom: 2, verticalAlign: legendAlignPosition, y: legendYPosition }, yAxis: { labels: { enabled: enableYAxisLabel }, min: yAxisMin, title: { text: yAxisLabel } }, xAxis: { min: xAxisMin, categories: categories, labels: { y: undefined }, plotBands: chartRecessionBands, reversed: reverse, tickInterval: tickInterval, title: { text: xAxisTitle }, type: xAxisType }, plotOptions: { area: { enableMouseTracking: enableTooltip, stacking: stacking }, arearange: { lineWidth: 0, marker: { enabled: false } }, bar: { dataLabels: { enabled: true, x: 50, align: 'right' } }, column: { stacking: stacking }, line: { enableMouseTracking: enableTooltip, dataLabels: { enabled: enableLastDataLabel, formatter: function() { if (this.point.x == this.series.data[this.series.data.length-1].x && this.point.y == this.series.data[this.series.data.length-1].y) { return '' + Highcharts.numberFormat(this.y, 1) + '%'; } } }, label: { connectorAllowed: false }, marker: { enabled: false } } }, responsive: { rules: [{ condition: { maxWidth: 500 }, chartOptions: { chart: { marginBottom: mobileMarginBottom, }, legend: { //itemWidth: 100, verticalAlign: "top", //x: -15, y: 0, layout: 'horizontal', align: 'center', //verticalAlign: 'bottom', maxHeight: 50, itemStyle: { fontSize: '9px' }, symbolWidth: 8, symbolHeight: 8, navigation: { enabled: true } } } }] }, series: dataSeries, tooltip: { enabled: enableTooltip, formatter: function () { let date = new Date(this.x); var s = ""; if(tooltipHeaderFormat.length > 0) { s = eval(tooltipHeaderFormat); } if(formatString.length > 0) { this.points.forEach(function (point, i) { s += eval(formatString); }); } return s; }, shared: true } }); let lastPoint; for(let i = 0; i < chart.series.length; i++) { if(chart.series[i].data.length > 2 && typeof chart.series[i].data[chart.series[i].data.length - 2].y != "undefined" && chart.series[i].data[chart.series[i].data.length - 2].y=== null) { lastPoint = chart.series[i].points[chart.series[i].points.length - 1]; lastPoint.update({marker: { enabled: true }}, false); chart.series[i].chart.redraw(); } } let element = document.getElementById(container); let chartWidth = $(`#${container}`).width(); // when a chart is inside a tab, the div width is the size of the tab header and not the full time element.style.overflow = 'visible'; chart.source = sourceLine; chart.renderer.html('').add(); chartList.set(container, chart); return chart; } function destroyChart(chart) { if(chart !== undefined) { if(chartList.get(chart.renderTo.id)) { chartList.delete(chart.renderTo.id); chart.destroy(); } } } // set the max data that can be shown on the xaxis of a chart with a start and end date. function setExtremes(start, end, chart) { chart.xAxis[0].min = convertDateToUTC(start, true); chart.xAxis[0].max = convertDateToUTC(end, false); chart.xAxis[0].setExtremes(chart.xAxis[0].min, chart.xAxis[0].max); } function addPlotBands(chart, data) { chart.xAxis[0].addPlotBand(data); } function setPolar(value) { polar = value; } function setEnableTooltip(value) { enableTooltip = value; } return { initializeHighcharts, setTitle, setSubTitle, setSourceLine, setXAxisType, setXAxisTitle, setXAxisMin, setYAxisMin, setReversed, setYAxisLabel, setEnableYAxisLabel, setCategories, setStacking, setPointStart, addSeries, addSeriesType, hideSeries, showSeries, setTooltipHeader, setTooltip, setEnableTooltip, showLegend, setLegendPosition, drawChart, destroyChart, setExtremes, setAdditionalTooltipData, addPlotBands, hideRecessionBands, showLastDataLabel, setTickInterval, setPolar, setMobileMarginBottom } }()); function createSlider( sliderSelector, dataArray, chartInstance, defaultStart = dataArray.length - 1, getDateLabel = (date) => `${date[0].substring(0, 3)} ${date[2]}` ) { let start = defaultStart === dataArray.length-1 ? 0 : dataArray.length - defaultStart - 1; let max = dataArray.length - 1; $(`${sliderSelector}`)[0].setAttribute("default-start", defaultStart); $(sliderSelector).slider({ range: true, min: 0, max: max, values: [start, max], create: function () { $(this) .find(".ui-slider-handle") .each(function (index) { let pos = index === 0 ? start : max; let date = getDateFromArray(dataArray, pos); let label = getDateLabel(date); $(this).append(`${label}`); }); }, slide: function (event, ui) { $(this) .find(".ui-slider-handle") .each(function (index) { let date = getDateFromArray(dataArray, ui.values[index]); $(this).find(".handle-label").text(getDateLabel(date)); }); }, stop: function (event, ui) { const dates = ui.values.map(value => getDateFromArray(dataArray, value)); const labels = dates.map(date => getDateLabel(date)); $(this).find(".ui-slider-handle .handle-label").each((index, label) => { $(label).html(labels[index]); }); FRBAHighcharts.setExtremes(dates[0], dates[1], chartInstance); } }); } window.addEventListener('load', function() { const resetButtonElements = document.querySelectorAll('.dataPickerReset'); resetButtonElements.forEach(element => { // resets slider to beginning and end position element.addEventListener('click', function(event) { let id = this.getAttribute("slider-id"); let $slider = $(`#${id}`); let defaultStart = $slider[0].getAttribute("default-start"); var maxValue = $slider.slider('option', 'max'); let values = [maxValue-defaultStart, maxValue]; $slider.slider({values:values}); // invoke stop to redraw the chart $slider.slider("option", "stop").call($slider, null, {handle: $slider.find(".ui-slider-handle"), values: values}); }); }); }); /* Some dates are in 3/1/2025 format while others are in March 1, 2025 Format */ function getDateFromArray(dataArray, uiValue) { let date = []; if(dataArray[uiValue].Date == undefined) { // handle 1 dimentional array if(Number.isFinite(dataArray[uiValue][0])) { date = utcToArray(dataArray[uiValue][0]); } else if (!dataArray.some(element => Array.isArray(element))) { date = dataArray[uiValue].split("/"); } else { // handle 2 dimentional array date = dataArray[uiValue][0].split("/"); } date[0] = monthNames[date[0]-1]; } else { date = dataArray[uiValue].Date.split(" "); } return date; } function utcToArray(utc) { const date = new Date(utc); return [ date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCFullYear() ]; } // dates come in as either ["Month name", "dd", "yyyy"] or m/dd/yyyy // the monthIndex is used for the max due to 3/31 needs to be 4/1 to show the first tick(far right) on the x axis function convertDateToUTC(date, isStart) { let utc; if(date.length == 3 && typeof(date[1]) == "string") { date[1] = date[1].replace(/,/g, ''); } if(Number.isFinite(date)) { return date; } else if(!date.isArray && date.includes("/")) { let dateArray = date.split("/"); dateArray = dateArray.map(Number); if(isStart) { utc = Date.UTC(dateArray[2], dateArray[0] - 1, dateArray[1]); } else { utc = Date.UTC(dateArray[2], dateArray[0] - 1, dateArray[1], 23, 59, 59, 999); } } else { date[0] = monthNames.indexOf(date[0]); date = date.map(Number); if(isStart) { utc = Date.UTC(parseInt(date[2]), date[0], date[1]); } else { utc = Date.UTC(parseInt(date[2]), date[0], date[1], 23, 59, 59, 999); } } return utc; } window.addEventListener('resize', function() { // Clear the previous timeout clearTimeout(resizeTimeout); // Set a new timeout to execute the function when the user stops resizing resizeTimeout = setTimeout(function() { // This will be executed when the user stops resizing for(const [key, chart] of chartList) { const chartWidth = chart.chartWidth; chart.title.textWidth = chartWidth *.8; chart.subtitle.textWidth = chartWidth *.8; $('#' + key + ' .frba-highcharts-footer').css("width", chartWidth); $('#' + key + ' .source-line').css("width", chartWidth *.9); chart.redraw(); } }, 250); // 250 milliseconds delay before executing the resize }); function mdYToUTC(s) { // s like "1/1/1998" or "01/01/1998" const firstSlash = s.indexOf('/'); const secondSlash = s.indexOf('/', firstSlash + 1); const m = Number(s.slice(0, firstSlash)); const d = Number(s.slice(firstSlash + 1, secondSlash)); const y = Number(s.slice(secondSlash + 1)); return Date.UTC(y, m - 1, d); // month is 0-based } function convertSeriesData(series){ if(series[0] && series[0].length == 2 && typeof(series[0][0]) == "string" && series[0][0].includes("/")) { const dateRegex = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/; if(dateRegex.test(series[0][0])) { series = series.map(([dateStr, y]) => [mdYToUTC(dateStr), y]); } } return series; } function createChartDownload(chart, fileType) { const imageBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASgAAAAUCAYAAAA+yKB7AAAPwElEQVR42u1ce5yPVRr/jsmlCTNDk8adyoZdSilCopKPcosu2uieypZk292iLdq2KFGRbGK7UaGLdKGLlKKLRu6XzOQaFTOM28zgu3/8vidPZ9/3d8HQp+b5fH6f857znve85zzPc57z3N5fEsnRAJoCmAWgBoATAGwDsBZADoAiAHUA1AKQBmATgEUAWqjP9QB2oARKoARK4BBDKQAE8DWAFwGUAZAHYB6AZwBkADgJwFgAnwDYquem65fyKxBOpSRYyxzheZTVPJJK2Oo3BWkAMg/Tu2oD6AXgNAClD8P7qgNI/zUjP4lkLQDdAVwJYAGA7wFUkHZ0DIByALaoDQAqA2gD4AUAEwGsDBj3TxJuywFU1DN7de8oCbU8AOsBFBzg3E8C8JLetVr1IwGtJMDrAfgUQMuQfg0AVAWwTLisDGAfgGTh+rsSWQAAaAygEoAVAFJ1TR1EOQDWHaZ59AZwD4BqAB4H0LeY33cZgPsAfAzgRgBTtC/DoLQsmwLxfyIH+mTx7bEAmgH4/NfKDEdpcQSwS0LnDwAaSbpulGCpBWCPNKiJElzpIcIJAC4FMFDXhQBytRGh8dKl8bTUpj4QWAPgZQBNjPA8ErAAwDQAdwifYXAxgPt1XSShDx0AqRJQHWU+/56hl3AJbb48XaeIzouEp+IW6O8AOB9AN9GrOOFkHbZXAXhOAioWnA/gLV3XiCK4m2gPOr7aB2AcgLPM/jwccCaAfABLEjWPIIGzC0BdADUBLJYAaATgRDHDMgDHC5luY4XBPQC66HqGnqsHoL6uHQMmH8SCCwA8LOF6JAXUVgDD4sDJv6R5AsBHBieVdFLWBrBQB8PvGfob3plq8JQK4DoAfxSeUot5HmsAjPH2SXHBvSpfVHmsLJpo0MVcXx6l32sA+jiLSeW0I6A1vQXghgPx3wDAJJljXYScDjo1ntTmywZwkSRgFwmWZ+MQILbMBfCTrrcFmZvarGVjjJts/E2l9ByjrK9ynP6pZJ3SQVBOeAlj1Hj9TgXeqbVNJ9oU4dppWkFwjPwhsdaQFkOTc5pz5Tj6QbgrdwgYNF1rSARPuw2eqJP/VQDlAbQPeK5sDDoF0a10HPvjUPmyUqNYHLONG2SzWXsQVNVhd63qYcKsuRSO9aozgflWToBejvfCcNlO422IgZ+0MAIsA/CeymEABhk/ycUAzgXwgHwtWQDeBTD3IIg1zbN9bwSwE8C3IsyEkOcek6lZIB/FGfLfBAmI26UVrlD/sd79wTJXJwHoLPN2EyIBg6oGaUO11jVioEeK6YT50TCGhUoyg3Olxm8C0DZEa90js/wb0XFcwHgPGfwVCA8OMiQoXwUwAsCFAOboYBmnPpOlwbwEYCmA89TeQZr3TJW11N5Wc/5OgmZOwJwSge0B2ncagCHip7UhdGqtOX8g3mivQ7hQPBevj+kxRCLei4Trs2P0Px7Ah3rvQgAjzb0xmrML9HwVQxtycJXWP17aeGNj2Th4G8Bnur5F/rs34hi7q+a7QLheGjD2tXKvzJL231e8VyiXURvTdyYiATUAuE37aIJn+k1FJDCXK9dHu5/vkgTJc0hOInkvyZ0kx5EcTvJMkktIfk1yKMk8kkNITiF5pZ4N+7VnBCZ77X1INjb1weo3lGQGyctUX+g9N1XtM0h2JjmM5Fy1rff6Pqr2QSQrk7xK9bmmzwjuh3kkryA5XfU+6rNc9XNJppJ8QfX/eO+rpvb5MXDSXP2mBdx7Sve6B4y7geQZJGubOXY2/e5T24Mk65BsR3KV2qqafm+q7WaSlUjeqfoLul+e5Ntq20PyVZJXk9yotmYkTxGPULxQXs9WIDlG7f9UWzvV3yBZg2QL8RBJVomDd54LuLck4PllajtP85gYQKdWJFerfZ3WOYBkf5Jb1X6N964L1P6oaeuutgUkryNZM8o6aqrvpySTSDZSfYDuN9VeIsnbSfYkeXIMHgLJb0g+r+u+ev4ur89FJF8x/HYLyRvN/Td071TTdqvaRpMsRbKH2SPHm37XGx5YoTXcQPIx07+a+nYi+Zrhg1u1H0HybLXPJFmRZEuSP6mtBcmfBdRxJOuRfNIw3jOa4KMkxxtEvComzYxTQE0nebQY6mS1/UV9TlX9Ee/ZLoZoINlR9Ze8fmeaDezaWntM4H5OSF1t2p5WW1/Vn1D9DNUd1DDPOMKUOwgB9YHqaSq7BghQqB9FPNv+A8kdpv4jyXyvz5Xe3K9QvZfX7yHLEN6GP031z0kWGWF3v+5f6401WhsXJMuqz8den3qeUIzGO19KINwgun0h4VLL9K1g6GSFxY4AOtVV204jWEGyrdrfjUNAfUkyKw4hAm22lV5blujn6i8GzDPar7bm30z1E/T8ooC+f9a9fgH3ggTUaHOwu7Z7Q4R3TyMPgvjpVtPWW223eX1vUfsU09bVCMmfTbwf5COoo1DntzIr2snv9KV8EXfL9MtEJB0hHmgjNfFLqXuQyg8APVS+FxAZg/xekKkBY2Y4+EplRc+eh1FvHcwPcC46f9cXRgUtbeqd9O615pkcleUPwkw5W2bYIvkFXlDgoJnnA2irqMe2AIdjCiL5MpBtX97gCzLTWom2AHBNCF4+CcCLw+dilWcBONr4EMar7OeN1Q2R/DnIbA6i7QqZA93iwFNDmaD9FRVuKnMzz/TJN3RaY9pdlK9CgEsjy5iKrg5EkpSDwPmDZotnTo1j7j1Fw4EBfrKKnkm1IIbPycJ1WptzsaySOddQ+PH9Qon40h6Wu2WYaVtnzOgg95DvbHd7p2aAj9b3gU3Q++7wghMAUAWek/Rz2eavyL78WMzWHsAl8jFkS4C9n8BmfF/PpkoI5siRaRlipBimjPwHpT0BUkNlnjd2kNOvgbHvd2qsPWasaIlpVF8Hb4oQVynCuc3M5WDgUwDnyIn5mWz3kV6f+irryi/m5r9LET/HBPPEUM9qvlsVOR0lH4GDE1W+jv15RYVmA1eJMt+9Xj1bY7fWxlisjQYAo1U2Nv7FLnK0U2MdpeBAKvYn/wbBZETSDix8ID5ob3wbjk69xFP5ZoMwhM4W9sTYyD8A+CsiX088FSeNrzERW5+u7pDLlOB/JwHe6SacNZFvaKkRIp2kCBwoZOt3ug6Y740/aG+cYxSaQEwsyAPwtHh8gGRAAxso8QfJkQSsiUiO0ldyYh2l036tHOmJwE4Tjt8qh9psTwCNlHZVTVK/UKf1Zt0/OoHomev7hLSDTM1/l5yaWxOY+/06AddrrN0JRjZiOXrnyLn7dzl1+3rRMxfAuA7AcdpAZbSOXJVAJHfmOxG7ng6USxQEuMLTigaLjmkS3vnSaPMSXMNYCaiuElC9jbCFOWReF33rYv+XC+uFgwP5CuEf4tG7jYCydJotWqccwgDGcKUATABwk4TOyzEiWm1kiWwy7U7z+lDlOUYjjgdq6YCsqPQBh0+nYXdXsORA4XQpFKkqV5qAUbyQlEDEsIoO00bSCBea4AqDBFShGL2niJyNSELYBkU8cnHwmbyPm+uNRjAuMKZd0AmGgHSBfVpIkqcinolI2sR8Y9olCi7Z9A3P/GkqreFQwQPSXG9TBG252lebNWfFMc7HiCTZJss0fFEm9HCdqqsVEVxsTLeDgVcAPC/hOUQa2q3mvpt/rta0/BDhK19ldRM9HKhIUOdiolO2QvnHSOC/pA28OaR/9RDzto3RDK07Yk6c8+gjbS8oV26+tNbmCYznw1QJpwbSzJxJ2RTF8wnXfyWcuuoggzTDdm6vB6m0E3WS/1v27U5EPiNpiMTyKOKBGSqD8jj6ArjL2P7wwpdOAidJmDqY7hHfQn9PS4m2HnfazfLaD/W3S/kA/qnre037Kp1gDYy5ZP1To4wfbJ3B1V5tDJe1XtVoMu6UDdIUeyQ470KZO7UlDFd5pspHnp/RwoWIpG8cCFRT+a0JUweZUulxmHaxwPV/TeUObVinoYdBkfENWrhdh+27Rrgu9NwKsQ7N50PuPRvgS0xEm6kja2OjEU7Wh8cQ3DAG7qKZzk1Uzg2g256wB7O1yScB+BuAC2Tjb0nQPEr3tJ7SIafwbJkjE3QyZMrcGWEcZmNE2MHyB0H2t3PWpkr1h/xmWWKksRqvmrSTRwxjw5gBQcy8KkDQDTAb3ubhZERZo4VKnmnrYKje10MalTVnnHbUUfNsI1OmlTEV0yWgbCKg0ybmqRwhGt6nwydDZteb0kCyjIns1nZcjPW4oIWjn4XF8kedKJ9bQ/keb0YkD65UHLxT3vggM2QSTTRuAaupXWaeHxiDTj7+M0zf5AB6VfDWPE+0CvskZYM0Rxv0eFLraGsEQhlzcMSCtjJ/poTcd5v8JkO3Am8dNp+pnDnsIMspF5G8rQ5qa6bxgiDNcx34OLNBpAJD1yTjQ13sHWK1Adz5CwEXZ2gTJEcpzyWevoMUKiwiuUl5Jj1C+h6t3CYf/Dyrk5VOYOEekrNI7lY4t776ppL8JGDMbrqfpJByEclCkrnKi/HnNsV7fpDJHaLC3Q0V9t2t3wKTA2J/d+uZAoXAs7xUjcYkv1efOQGhYgufeWMv1nvf1/U+9evk9atDcmnAeM1NyHqF1pGveY6KQetFGiM95P7IgPc9GGW8oZr/bpJbSK5VasF6kyLQ0XtmcgBf9PPSRFoot8vRaZ5JddlKcpd+y5QD1MvwcBHJ101+0XYz9pCQdbQVrd8Wf29XCoy778ZvG8d+OlVz3648sv7e/b7iYcc/LrUhmeRmM9fx4v0ZmluB2nt7OV4OvlFe4neqP6F+D5hcOZIcq/Z+ITjLFM7p5bc1ILnNtOcqzcDlPL6fRMat9baR9nJ1HH1r6iTOltSsLj9TboxnWsiun4nwDzRbytcyXaZNTfwyvOyrrWdJbf3IRCKSNEY+IhnctdUW5CdpqHktMaZma52Gr+jErav1pcjsXIn//wizuk7iVcKJ+7cHf53HShPKkY/NaWYtpQl+aqJAVg3P1zouVfRlEsJD1/XlEF2FX6YdlFMUzPkc68gBG+1r+RRpQ9tjaI6theMPYmjitTSPHJ3OacJDKTnyfwp5LhadymjsbOErQyd4eeEtR5pVpkycDL07W1pFiuh1nHxRa0VTRsFPVUT+L22DTLAiz5VyufZJrBSDinrvJs31R+O/da6OKlpDkua7WppLCoBT9I6FmkN97cVc0XuLGS9Vfudy8kltE991kC9zvvBYWlpXDe2Bb9WvfADOnEbVSC6jpUarKiPZUkMunzWiTxcA6xIRUMcgkmezQ36R4Sj+r7xLoAR+K5Ck/TNXAmYPIlHyZiWoCYdEPobcochFrvxBLEFfCZRA3NBdGkknaSjJiO9vVX7fUj0BDcqdAiWCqQRKIHFohEj4fzb2/1PI2yVoiQ7/A87Lyqv6f2iWAAAAAElFTkSuQmCC'; const recMarkup = ' '; const imageMarkup = ''; const sourceMarkup = htmlToSvgText(chart.source, 15, chart.chartHeight - 40 ); let svg = chart.getSVG( {chart: { width: chart.chartWidth, height: chart.chartHeight} }); svg = svg.replace('font-size: 12px', 'font-size: 14px'); svg = svg.replaceAll('font-size: 8px; outline', 'font-size: 12px; outline'); svg = svg.replace('font-size: 8px; transform', 'font-size: 10px; transform'); svg = svg.replace('', sourceMarkup + recMarkup + imageMarkup + ''); if(chart.options.title.text.includes('Heatmap')) { svg = convertHeatmap(svg); } const blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8'}); let url = URL.createObjectURL(blob); if(fileType != 'svg') { const img = new Image(); img.onload = function() { const canvas = document.createElement('canvas'); canvas.width = chart.chartWidth; canvas.height = chart.chartHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, chart.chartWidth, chart.chartHeight); URL.revokeObjectURL(url); const pngUrl = canvas.toDataURL('image/png'); if(fileType == "pdf") { const pdf = new jsPDF({orientation: 'landscape', unit: 'px', format: [canvas.width, canvas.height]}); pdf.addImage(pngUrl, 'PNG', 0, 0); pdf.save( chart.options.title.text.split(' ').join('_') + '.' + fileType); }else { const a = document.createElement('a'); a.href = pngUrl; a.download = chart.options.title.text.split(' ').join('_') + '.' + fileType; a.click(); } }; img.src = url; } else { const a = document.createElement('a'); a.href = url; a.download = chart.options.title.text.split(' ').join('_') + '.' + fileType; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } } function convertHeatmap(svg) { svg = svg.replaceAll('class="heatmap-coldest-text"', 'fill="rgb(255, 255, 255)"'); svg = svg.replaceAll('class="heatmap-colder-text"', 'fill="rgb(255, 255, 255)"'); svg = svg.replaceAll('class="heatmap-warmer-text"', 'fill="rgb(255, 255, 255)"'); svg = svg.replaceAll('class="heatmap-warmest-text"', 'fill="rgb(255, 255, 255)"'); svg = svg.replaceAll('font-size: 7px', 'font-size: 11px'); return svg; } function htmlToSvgText(str, x, y, lineHeight = 15) { const lines = str.split(//i); if(lines.length > 1) { y -= lines.length * 13; } const tspans = lines.map((line, i) => { return `${line}`; }).join(''); return `${tspans}`; } // The chart with of unopen tabs are smaller than they are when opened. // Therefore, when a tab is opened, the chart footer needs to be redrawn document.addEventListener("DOMContentLoaded", function () { const tabItems = document.querySelectorAll('.tablist li'); tabItems.forEach((item, index) => { item.addEventListener('click', function (e) { setTimeout(() => { for(const [key, chart] of chartList) { const chartWidth = chart.chartWidth; chart.title.textWidth = chartWidth *.8; chart.subtitle.textWidth = chartWidth *.8; $('#' + key + ' .frba-highcharts-footer').css("width", chartWidth); $('#' + key + ' .source-line').css("width", chartWidth *.9); chart.redraw(); } }, 200); }); }); }); let forecastQuartersArray = []; let subcomponent; let subcomponentChanges; window.addEventListener('load', function() { const gdpChart = document.getElementById('chart-gdp'); if(gdpChart) { populateDropdownMenu(); createHistoricalErrors(); createForecastErrors(); } function populateDropdownMenu() { for (let d = 0; d < gdpForecastPrev.length; d++) { if (!gdpForecastPrev[d]) { gdpForecastPrev[d] = null; } } /* split the data into distinct quarters; also build drop-down menu where user chooses the quarter to view */ let forecastQuarterWhen, forecastQuarterYear, forecastQuarterFormatted = ''; let forecastQuartersIndex = 0; let forecastQuartersMarker = forecastQuarters[0]; let dropdownMenu = ""; for (let q = 0; q <= forecastQuarters.length; q++) { if (forecastQuarters[q] != forecastQuartersMarker || q == forecastQuarters.length) { forecastQuarterWhen = forecastQuartersMarker.split('/')[0]; forecastQuarterYear = forecastQuartersMarker.split('/')[2]; switch (forecastQuarterWhen) { case '3': forecastQuarterFormatted = 'First Quarter ' + forecastQuarterYear; break; case '6': forecastQuarterFormatted = 'Second Quarter ' + forecastQuarterYear; break; case '9': forecastQuarterFormatted = 'Third Quarter ' + forecastQuarterYear; break; case '12': forecastQuarterFormatted = 'Fourth Quarter ' + forecastQuarterYear; break; } forecastQuartersArray.push({ "date": forecastQuartersMarker, "label": forecastQuarterFormatted, "start": forecastQuartersIndex, "end": q }); dropdownMenu += ''; forecastQuartersMarker = forecastQuarters[q]; forecastQuartersIndex = q; } } $("#chooseQuarter").append(dropdownMenu); createGdpChart(forecastQuarters[0]); } /* redraw the chart based on the user's selection */ $('#chooseQuarter').change(function() { //FRBAHighcharts.destroyChart(subcomponent); //FRBAHighcharts.destroyChart(subcomponentChanges); subcomponent.destroy(); subcomponentChanges.destroy(); createGdpChart(jQuery(this).val()); }); }); function createGdpChart(whichChart) { let forecastDatesArray = [], gdpForecastArray = [], gdpForecastPrevArray = [], pceArray = [], bfiArray = [], residArray = [], inventArray = [], netExpArray = [], governmentArray = [], totalChangeArray = [], dataReleasesArray = [], forecastDatesChangesArray = [], gdpForecastChangesArray = [], gdpForecastPrevChangesArray = [], pceChangesArray = [], bfiChangesArray = [], residChangesArray = [], inventChangesArray = [], netExpChangesArray = [], govtChangesArray = [], totalChangeChangesArray = [], dataReleasesChangesArray = [], categoriesArray = [], addtionalTooltips = []; let tempQuarterArray = jQuery.grep(forecastQuartersArray, function (n, i) { return (n.date == whichChart); }); for (let t = tempQuarterArray[0].start; t < tempQuarterArray[0].end; t++) { categoriesArray.push(forecastDates_change[t]); forecastDatesArray.push(forecastDates[t]); forecastDatesChangesArray.push(forecastDates_change[t]); gdpForecastArray.push(gdpForecast[t]); gdpForecastChangesArray.push(gdpForecast_change[t]); gdpForecastPrevArray.push(gdpForecastPrev[t]); gdpForecastPrevChangesArray.push(gdpForecastPrev_change[t]); pceArray.push(pce[t]); pceChangesArray.push(pce_change[t]); bfiArray.push(bfi[t]); bfiChangesArray.push(bfi_change[t]); residArray.push(resid[t]); residChangesArray.push(resid_change[t]); inventArray.push(invent[t]); inventChangesArray.push(invent_change[t]); netExpArray.push(net_exp[t]); netExpChangesArray.push(net_exp_change[t]); governmentArray.push(govt[t]); govtChangesArray.push(govt_change[t]); totalChangeArray.push(totalChange[t]); totalChangeChangesArray.push(totalChange_change[t]); dataReleasesArray.push(dataReleases[t]); dataReleasesChangesArray.push(dataReleases_change[t]); let additionalTooltipData = {}; additionalTooltipData.current = gdpForecast_change[t]; additionalTooltipData.previous = gdpForecastPrev_change[t]; additionalTooltipData.change = dataReleases_change[t]; addtionalTooltips.push(additionalTooltipData) } const tooltip = "'
    ' + point.series.name + ': ' + Highcharts.numberFormat(point.y, 2) + '%'"; FRBAHighcharts.initializeHighcharts("column", 160); FRBAHighcharts.setTitle("Subcomponent contributions to GDPNow real GDP growth forecasts"); FRBAHighcharts.setSourceLine("Source: Atlanta Fed"); FRBAHighcharts.setYAxisLabel("Percentage points"); FRBAHighcharts.setCategories(categoriesArray); FRBAHighcharts.setStacking("normal"); FRBAHighcharts.addSeries('Consumer spending (PCE)', pceArray); FRBAHighcharts.addSeries('Nonresidential fixed investment', bfiArray); FRBAHighcharts.addSeries('Residential investment', residArray); FRBAHighcharts.addSeries('Change in private inventories', inventArray); FRBAHighcharts.addSeries('Net exports', netExpArray); FRBAHighcharts.addSeries('Government spending', governmentArray); FRBAHighcharts.addSeriesType('GDPNow forecast', gdpForecastArray, 'line', 'highcharts-series-black'); FRBAHighcharts.showLegend(true); FRBAHighcharts.setAdditionalTooltipData(dataReleasesChangesArray); FRBAHighcharts.hideRecessionBands(true); FRBAHighcharts.setTooltip(tooltip); FRBAHighcharts.setTooltipHeader("'' + this.points[0].series.chart.xAxis[0].categories[this.x] + '
    ' + additionalTooltipData[this.x]"); subcomponent = FRBAHighcharts.drawChart("chart-gdp"); FRBAHighcharts.initializeHighcharts("column", 160); FRBAHighcharts.setTitle("Changes in subcomponent contributions to GDPNow real GDP growth forecasts"); FRBAHighcharts.setSourceLine("Source: Atlanta Fed"); FRBAHighcharts.setYAxisLabel("Percentage points"); FRBAHighcharts.setCategories(categoriesArray); FRBAHighcharts.setStacking("normal"); FRBAHighcharts.addSeries('Consumer spending (PCE)', pceChangesArray); FRBAHighcharts.addSeries('Nonresidential fixed investment', bfiChangesArray); FRBAHighcharts.addSeries('Residential investment', residChangesArray); FRBAHighcharts.addSeries('Change in private inventories', inventChangesArray); FRBAHighcharts.addSeries('Net exports', netExpChangesArray); FRBAHighcharts.addSeries('Government spending', govtChangesArray); FRBAHighcharts.addSeriesType('Total change in GDP forecast', totalChangeChangesArray, 'line', 'highcharts-series-black'); FRBAHighcharts.showLegend(true); FRBAHighcharts.setTooltip(tooltip); FRBAHighcharts.hideRecessionBands(true); FRBAHighcharts.setTooltipHeader("'' + this.points[0].series.chart.xAxis[0].categories[this.x] + '
    ' + additionalTooltipData[this.x].change + '
    GDPNow forecast: ' + Highcharts.numberFormat(additionalTooltipData[this.x].current, 2) + '%' + '
    Previous GDPNow forecast: ' + Highcharts.numberFormat(additionalTooltipData[this.x].previous, 2) + '%'"); FRBAHighcharts.setAdditionalTooltipData(addtionalTooltips); subcomponentChanges = FRBAHighcharts.drawChart("chart-gdp-subcomponent-changes"); } function createHistoricalErrors() { const tooltip = "'
    ' + point.series.name + ': ' + Highcharts.numberFormat(point.y, 1) + '%'"; const categories = ['Q3 2011','Q4 2011','Q1 2012','Q2 2012','Q3 2012','Q4 2012','Q1 2013','Q2 2013','Q3 2013','Q4 2013','Q1 2014','Q2 2014','Q3 2014','Q4 2014','Q1 2015','Q2 2015','Q3 2015','Q4 2015','Q1 2016','Q2 2016','Q3 2016','Q4 2016','Q1 2017','Q2 2017','Q3 2017','Q4 2017','Q1 2018','Q2 2018', 'Q3 2018', 'Q4 2018', 'Q1 2019', 'Q2 2019', 'Q3 2019', 'Q4 2019', 'Q1 2020', 'Q2 2020', 'Q3 2020', 'Q4 2020', 'Q1 2021', 'Q2 2021', 'Q3 2021', 'Q4 2021', 'Q1 2022', 'Q2 2022', 'Q3 2022', 'Q4 2022', 'Q1 2023', 'Q2 2023', 'Q3 2023', 'Q4 2023', 'Q1 2024', 'Q2 2024', 'Q3 2024', 'Q4 2024', 'Q1 2025', 'Q2 2025',]; FRBAHighcharts.initializeHighcharts("column", 170); FRBAHighcharts.setTitle("Changes in subcomponent contributions to GDPNow real GDP growth forecasts"); FRBAHighcharts.setSourceLine("Note: The measures of forecast accuracy are root-mean-squared error: 1.17 percentage points; average absolute error: 0.77 percentage points.
    Sources: U.S. Bureau of Economic Analysis (BEA) and Federal Reserve Bank of Atlanta"); FRBAHighcharts.setYAxisLabel("Seasonally adjusted annualized rate"); FRBAHighcharts.setCategories(categories); FRBAHighcharts.setStacking("normal"); FRBAHighcharts.addSeries('Initial estimate from BEA', [2.463707,2.752314,2.204303,1.536944,2.013776,-0.143486,2.5024,1.673658,2.846265,3.227887,0.107933,3.950188,3.549231,2.641736,0.247549,2.322465,1.493381,0.691441,0.537795,1.217502,2.90,1.87,0.69,2.57,2.99,2.56,2.32,4.06, 3.50, 2.59, 3.17, 2.06, 1.92, 2.08, -4.78, -32.9, 33.08, 4.01, 6.39, 6.5, 2.02, 6.89, -1.41, -0.93, 2.57, 2.89, 1.06, 2.41, 4.88, 3.28, 1.59, 2.84, 2.79, 2.25, -0.28, 2.97]); FRBAHighcharts.addSeriesType('Final GDPNow forecast', [3.2445,5.1684,3.0151,0.2243,1.848975,0.0776,2.87,1.30,2.32,3.12,0.3489,2.67,2.70,3.49,0.10,2.43,1.06,1.02,0.62,1.83325615873957,2.10,2.88,0.17,2.82,2.52,3.41,1.98,3.82, 3.55, 1.85, 2.67, 1.33, 1.68, 1.74, -0.97, -32.08, 36.97, 7.16, 7.87, 6.43, 0.19, 6.50, 0.37, -1.20, 3.09, 3.53, 1.13, 2.41, 5.41, 2.38, 2.70, 2.61, 2.82, 2.27, -2.73, 2.90], "line"); FRBAHighcharts.showLegend(true); FRBAHighcharts.setTooltipHeader("this.points[0].series.chart.xAxis[0].categories[this.x]"); FRBAHighcharts.setTooltip(tooltip); FRBAHighcharts.hideRecessionBands(true); FRBAHighcharts.drawChart("chart-gdp-historical-errors"); } function createForecastErrors() { const data = [[1,1.15],[6,1.15],[7,1.16],[8,1.16],[14,1.16],[15,1.17],[16,1.17],[19,1.17],[21,1.17],[26,1.16],[27,1.16],[28,1.22],[29,1.25],[33,1.26],[35,1.38],[36,1.36],[41,1.36],[43,1.38],[44,1.40],[47,1.36],[49,1.39],[51,1.42],[54,1.43],[55,1.60],[58,1.65],[62,1.86],[63,1.85],[68,1.8679],[69,1.888],[70,1.9539],[75,1.9727],[76,2.025],[77,2.0448],[78,2.0323],[82,2.042],[83,2.0341],[84,2.1735],[85,2.1963],[86,2.2003]]; FRBAHighcharts.initializeHighcharts("line", 170); FRBAHighcharts.setTitle("Root Mean Square Forecast Error of GDP Growth (SAAR) for GDPNow Model: 2000:Q1–2013:Q4'"); FRBAHighcharts.setSourceLine('Source: Patrick Higgins (2014), "GDPNow: A Model for GDP \'Nowcasting\'," Atlanta Fed Working Paper 2014-7'); FRBAHighcharts.setYAxisLabel("Percent"); FRBAHighcharts.setXAxisTitle("Days before advance GDP release"); FRBAHighcharts.setXAxisMin(1); FRBAHighcharts.setXAxisType('linear'); FRBAHighcharts.setReversed(true); FRBAHighcharts.addSeries('Forecast error', data); FRBAHighcharts.showLegend(true); //FRBAHighcharts.setTooltip(tooltip); FRBAHighcharts.hideRecessionBands(true); FRBAHighcharts.setTooltipHeader("'Days before advanced GDP release: ' + this.x + '
    Root mean square forecast error: ' + Highcharts.numberFormat(this.y,2) +'%'"); //FRBAHighcharts.setAdditionalTooltipData(addtionalTooltips); FRBAHighcharts.drawChart("chart-gdp-forecast-errors"); } (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jgl6rwv6yx");
    Skip to Content

    GDPNow

    The growth rate of real gross domestic product (GDP) is a key indicator of economic activity, but the official estimate is released with a delay. GDPNow forecasting model provides a "nowcast" of the official estimate prior to its release by estimating GDP growth using a methodology similar to the one used by the US Bureau of Economic Analysis.

    Center for Quantitative Economic Research's GDPNow

    GDPNow is not an official forecast of the Atlanta Fed. Rather, it is best viewed as a running estimate of real GDP growth based on available economic data for the current measured quarter. There are no subjective adjustments made to GDPNow—the estimate is based solely on the mathematical results of the model.

    Evolution of Atlanta Fed GDPNow real GDP estimate for 2026:Q2

    Quarterly percent change (SAAR)

    Q4 2025 GDPNow Chart
    Sources: Blue Chip Economic Indicators and Blue Chip Financial Forecasts
    Note: The top (bottom) 10 average forecast is an average of the highest (lowest) 10 forecasts in the Blue Chip survey.

    These charts show how the forecasted GDP subcomponent contributions to growth aggregate up to GDPNow's real GDP growth forecast for each update day in a particular forecast quarter and how changes in the subcomponent contribution forecasts aggregate up to changes in the GDP growth forecasts. Whenever a user hovers the cursor over a bar in one of the charts, the pop-up box displays the data releases for the date of the bar as well the numerical values for the GDP growth forecast and either the levels or changes in the subcomponent contribution forecasts. For previously reported quarters, the final date in the top chart shows the official first estimates of real GDP growth and the subcomponent contributions to growth from the Bureau of Economic Analysis (BEA). The final date in the bottom chart shows the forecast errors of the final GDPNow projections of the BEA's first estimates of real GDP growth and the subcomponent contributions to growth.

    The growth rate of real gross domestic product (GDP) measured by the US Bureau of Economic Analysis (BEA) is a key metric of the pace of economic activity. It is one of the four variables included in the economic projections of Federal Reserve Board members and Bank presidents for every other Federal Open Market Committee (FOMC) meeting. As with many economic statistics, GDP estimates are released with a lag whose timing can be important for policymakers. In preparation for FOMC meetings, policymakers have the Fed Board staff projection of this "advance" estimate at their disposal. These projections—available through 2008 at the Philadelphia Fed’s Real Time Data Center—have generally been more accurate than forecasts from simple statistical models. As stated by economists Jon Faust and Jonathan H. Wright in a 2009 paper, "by mirroring key elements of the data construction machinery of the Bureau of Economic Analysis, the Fed staff forms a relatively precise estimate of what BEA will announce for the previous quarter’s GDP even before it is announced."

    The Atlanta Fed GDPNow model also mimics the methods used by the BEA to estimate real GDP growth. The GDPNow forecast is constructed by aggregating statistical model forecasts of 13 subcomponents that comprise GDP. Other private forecasters use similar approaches to "nowcast" GDP growth. However, these forecasts are not updated more than once a month or quarter, are not publicly available, or do not have forecasts of the subcomponents of GDP that add "color" to the top-line number. The Atlanta Fed GDPNow model fills these three voids.

    The BEA’s advance estimates of the subcomponents of GDP use publicly released data from the US Census Bureau, US Bureau of Labor Statistics, and other sources. Much of this data is displayed in the BEA’s Key Source Data and Assumptions table that accompanies the "advance" GDP estimate. GDPNow relates these source data to their corresponding GDP subcomponents using a "bridge equation" approach similar to the one described in a Minneapolis Fed study by Preston J. Miller and Daniel M. Chin. Whenever the monthly source data is not available, the missing values are forecasted using econometric techniques similar to those described in papers by James H. Stock and Mark W. Watson and Domenico Giannone, Lucrezia Reichlin, and David Small. A detailed description of the data sources and methods used in the GDPNow model is provided in an accompanying Atlanta Fed working paper.

    As more monthly source data becomes available, the GDPNow forecast for a particular quarter evolves and generally becomes more accurate. That said, the forecasting error can still be substantial just prior to the "advance" GDP estimate release. It is important to emphasize that the Atlanta Fed GDPNow forecast is a model projection not subject to judgmental adjustments. It is not an official forecast of the Federal Reserve Bank of Atlanta, its president, the Federal Reserve System, or the FOMC.

    ©2017 Federal Reserve Bank of Atlanta. All rights reserved. Permission is granted to reproduce for personal and educational use only.

    Is GDPNow an official forecast of the Atlanta Fed or the Bank's president?

    No, it is not an official forecast of the Atlanta Fed, its president, the Federal Reserve System, or the FOMC.

    Is any judgment used to adjust the forecasts?

    No. Once the GDPNow model begins forecasting GDP growth for a particular quarter, the code will not be adjusted until after the "advance" estimate. If we improve the model over time, we will roll out changes right after the "advance" estimate so that forecasts for the subsequent quarter use a fixed methodology for their entire evolution.

    When will nowcasts of GDP growth in a particular quarter begin and end?

    GDPNow nowcasts of real GDP growth in a particular quarter begin about 90 days before the "advance" estimate for GDP growth for the quarter is released; they end on the last business day with a data release GDPNow utilizes that precedes the release date of the Bureau of Economic Analysis’s (BEA) advance estimate of GDP growth. Except after annual benchmark or comprehensive revisions of GDP typically occurring in late July, GDPNow nowcasts for a quarter generally begin on the weekday after the advance estimate of GDP growth for the previous quarter is released. After comprehensive or benchmark GDP revisions, the initial GDPNow nowcast for the subsequent quarter can be delayed for around a week until the BEA releases revised "underlying detail tables" for the National Income and Product Accounts.

    For example, GDPNow’s initial nowcast of real GDP growth in the first quarter of 2018 took place on Monday, January 29, 2018, the first weekday after Friday, January 26, 2018, when the advance estimate of real GDP growth in the fourth quarter of 2017 was released. The final GDPNow nowcast of real GDP growth in the first quarter of 2018 was made on April 26, 2018, and the advance estimate of real GDP growth in the first quarter of 2018 was released on April 27, 2018.

    How frequently is the GDPNow forecast updated?

    The model forecast is updated six or seven times a month on weekdays, with at least one following seven data releases: Manufacturing ISM Report on Business, U.S. International Trade in Goods and Services (FT900), Wholesale Trade, Monthly Retail Trade Report, New Residential Construction, Advance Report on Durable Goods Manufacturers, and Personal Income and Outlays. Other data releases, such as Industrial Production and Capacity Utilization and Existing-Home Sales, are incorporated in the model as well and their impact on the model's forecast will be shown on the next weekday with one of the data releases. The proprietary forecasts from Blue Chip Economic Indicators and Blue Chip Financial Forecasts shown in the chart are available from Wolters Kluwer.

    How can I access historical forecasts from the GDPNow model?

    These forecasts are available in this downloadable spreadsheet. See the tab "ReadMe" in the spreadsheet for hyperlinks to the historical forecasts and other data for the model. In particular, the tab "TrackingDeepArchives" has forecasts for the 2011:Q3–2014:Q1 period (before the model went live), the tab "TrackingArchives" has forecasts from 2014:Q2 through the last quarter for which an advance estimate of GDP has been released by the BEA, and the tab "TrackRecord" has a comparison of the historical GDPNow model forecasts with the actual "advance" real GDP growth estimates from the BEA.

    Where can I read about the methods and source data used in the model?

    A detailed description is given in a working paper describing the model. To summarize, the BEA's NIPA Handbook provides very detailed documentation on both the source data and methods used for estimating the subcomponents of GDP. The late Nobel Prize–winning economist Lawrence Klein pioneered many of the "bridge equation" methods used for making short-run forecasts of GDP growth using this source data; a 1989 paper he coauthored with E. Sojo describes the approach. Kathleen Navin, an economist at Macroeconomic Advisers, provides a bird's-eye view illustrating how to use a bridge equation approach in practice to improve GDP forecasts in this 2017 presentation. The econometric techniques used in our GDPNow model were heavily adapted from the GDP nowcasting models described in a 1996 Minneapolis Fed Quarterly Review article by Preston J. Miller and Daniel M. Chin and a 2008 paper by the Board's David Small and economists Domenico Giannone and Lucrezia Reichlin.

    Where can I find alternative forecasts of GDP growth?

    For model forecasts from other Reserve Banks, see the New York Fed Nowcasting Report, the St. Louis Fed Economic News Index: Real GDP Nowcast, the Philadelphia Research Intertemporal Stochastic Model (PRISM), and the Federal Reserve Bank of Cleveland's prediction model for GDP growth based on the slope of the yield curve. Moody's Analytics and Now-Casting.com produce proprietary model short-run GDP forecasts. For survey-based forecasts, see the Philadelphia Fed's quarterly Survey of Professional Forecasters, which includes forecasts of real GDP and its major subcomponents. The Wall Street Journal's Economic Forecasting Survey occurs monthly, and the Moody's Analytics/CNBC Rapid Update survey generally occurs several times a week. Neither of these surveys includes forecasts of the subcomponents of GDP.

    How accurate are the GDPNow forecasts? Are they more accurate than "professional" forecasts?

    The chart below shows GDPNow's real-time forecasts made just prior to the release of the initial estimate of the annualized growth rate of real GDP along with the initial estimates from the US Bureau of Economic Analysis.

    Since we started tracking GDP growth with versions of this model in 2011, the average absolute error of final GDPNow forecasts is 0.77 percentage points. The root-mean-squared error of the forecasts is 1.17 percentage points. These accuracy measures cover initial estimates for 2011:Q3–2025:Q2. Some further analysis of GDPNow's forecast errors is available in macroblog posts located here and here. We have made some improvements to the model from its earlier versions, and the model forecasts have become more accurate over time (the complete track record is here). When back-testing with revised data, the root mean-squared error of the model's out-of sample forecast with the same data coverage that an analyst would have just before the "advance" estimate is 1.15 percentage points for the 2000:Q1–2013:Q4 period. The figure below shows how the forecasts become more accurate as the interval between the date the forecast is made and the forthcoming GDP release date narrows.

     

    Overall, these accuracy metrics do not give compelling evidence that the model is more accurate than professional forecasters. The model does appear to fare well compared to other conventional statistical models.

    How are revisions to data not yet reflected in the latest GDP release handled?

    In general, the model does not attempt to anticipate how data releases after the latest GDP report will affect the revisions made in the forthcoming GDP release. The exception is the "change in private inventories" subcomponent, where revisions to the prior quarter's reading affect GDP growth in the current quarter. Users of the GDPNow forecast should generally use the forecasts of the change in "net exports" and the change in the "change in private inventories," and not forecasts of the levels. Revisions to retail sales are used to anticipate revisions to real monthly expenditures in the "PCE control group" and revisions to housing starts are used to anticipate revisions in the monthly value of private residential construction spending put in place.

    Do you share your code?

    At this point, no. However, the Excel spreadsheet gives the numerical details—including the raw data and model parameters—of how the monthly data map into forecasts of the subcomponents of GDP.

    What are the differences between GDPNow and the FRBNY Nowcast models? Why do the two models have different forecasts?

    The FRBNY Nowcast model of real GDP growth is based on a dynamic factor model described in this Liberty Street blog entry. The Chicago Fed National Activity Index and Aruoba-Diebold-Scotti Business Conditions Index are both indicators of economic activity estimated from factor models. The latest nowcast from the FRBNY Nowcast model along with some related Q&A is available here.

    The Atlanta Fed's GDPNow also uses a dynamic factor model—based on a model from one of the New York Fed economists who coauthored the Liberty Street blog entry—but uses the factor only as an input to fill in the yet-to-be-released monthly source data for GDP. The estimates of this dynamic factor are available in the Factor tab of this Excel file.

    The monthly source data are then used to estimate the subcomponents of GDP, which are then aggregated up to a real GDP growth nowcast. Besides a dynamic factor model, GDPNow uses several other econometric techniques, including "bridge equations" and Bayesian vector autoregressions, to nowcast the subcomponents of GDP. The exact methods are described in this working paper. The numerical details—including the raw data and model parameters—translating the monthly data into nowcasts of the subcomponents of GDP in the latest GDPNow forecast are available in this Excel file (see the ReadMe tab).

    Because GDPNow and the FRBNY Nowcast are different models, they can generate different forecasts of real GDP growth. Our policy is not to comment on or interpret any differences between the forecasts of these two models.

    Release times shown are from the original source. The GDPNow model is usually updated within a few hours following these times. Release schedule subject to change.

    Release Date of release Time of release
    Initial nowcast of 2025:Q4 GDP growth: GDP (Q3 1st estimate), Underlying detail tables, Advance Census manufacturing (M3-1), Industrial production 12/23/2025 9:15 AM
    ISM Manufacturing Index, (Possibly) Auto sales 1/5/2026 10:00 AM
    International trade (Full report), Wholesale trade 1/8/2026 10:00 AM
    Housing starts, Employment situation 1/9/2026 8:30 AM
    Retail trade, Producer Price Index, Existing-home sales 1/14/2026 10:00 AM
    Construction spending 1/21/2026 10:00 AM
    Personal income and outlays, GDP (Q3 2nd estimate) 1/22/2026 10:00 AM
    Advance Census manufacturing (M3-1) 1/26/2026 8:30 AM
    International trade (Full report), Wholesale trade, M3-2 Manufacturing 1/29/2026 10:00 AM
    ISM Manufacturing Index 2/2/2026 10:00 AM
    Retail trade, Import and export prices 2/10/2026 10:00 AM
    Advance Census manufacturing (M3-1) , Housing starts, Industrial production 2/18/2026 9:15 AM
    Final nowcast of 2025:Q4 GDP growth: International trade (Full report), Advance Economic Indicators 2/19/2026 8:30 AM
    Initial nowcast of 2026:Q1 GDP growth: Personal income and outlays, NIPA underlying detail tables, New-home sales 2/20/2026 8:30 AM
    Wholesale trade 2/24/2026 10:00 AM
    Construction spending, Producer Price Index 2/27/2026 10:00 AM
    ISM Manufacturing Index 3/2/2026 10:00 AM
    Retail trade, Employment situation 3/6/2026 10:00 AM
    International trade (Full report)**, Housing starts 3/12/2026 10:00 AM
    Advance Census manufacturing (M3-1) , GDP (Q4 2nd estimate), Personal income and outlays 3/13/2026 8:30 AM
    New-home sales, Wholesale trade 3/19/2026 10:00 AM
    Construction spending 3/23/2026 10:00 AM
    Retail sales + inventories, ISM Manufacturing Index 4/1/2026 10:00 AM
    International trade (Full report) ** 4/2/2026 10:00 AM
    Advance Census manufacturing (M3-1) 4/7/2026 8:30 AM
    GDP (Q4 3rd estimate), Personal income and outlays, NIPA underlying detail tables, Wholesale trade 4/9/2026 10:00 AM
    Retail sales + inventories 4/21/2026 10:00 AM
    Final nowcast of 2026:Q1 GDP growth: Advance Census manufacturing (M3-1), Housing starts, Advance Economic Indicators 4/29/2026 8:30 AM
    Initial nowcast of 2026:Q2 GDP growth: GDP (Q1 1st estimate), Personal income and outlays, NIPA underlying detail tables 4/30/2026 8:30 AM
    ISM Manufacturing Index 5/1/2026 10:00 AM
    International trade (Full report), New-home sales, ISM Services 5/5/2026 10:00 AM
    Construction spending 5/7/2026 10:00 AM
    Employment situation, Wholesale trade 5/8/2026 10:00 AM
    Retail sales + inventories, Import and export prices 5/14/2026 10:00 AM
    Housing starts 5/21/2026 8:30 AM
    GDP (Q1 2nd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Census manufacturing (M3-1), New-home sales 5/28/2026 10:00 AM
    Construction spending, ISM Manufacturing Index 6/1/2026 10:00 AM
    International trade (Full report), Wholesale trade, Existing-home sales 6/9/2026 10:00 AM
    Housing starts, Import and export prices 6/16/2026 8:30 AM
    Retail sales + inventories 6/17/2026 10:00 AM
    GDP (Q1 3rd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Census manufacturing (M3-1) 6/25/2026 8:30 AM
    Construction spending, ISM Manufacturing Index 7/1/2026 10:00 AM
    International trade (Full report)** 7/7/2026 10:00 AM
    Wholesale trade 7/8/2026 10:00 AM
    Retail sales + inventories 7/16/2026 10:00 AM
    Housing starts, Import and export prices, Industrial production 7/17/2026 9:15 AM
    Advance Census manufacturing (M3-1) 7/27/2026 8:30 AM
    Final nowcast of 2026:Q2 GDP growth: Advance Economic Indicators 7/28/2026 8:30 AM
    Initial nowcast of 2026:Q3 GDP growth: GDP (Q2 1st estimate), Personal income and outlays, NIPA underlying detail tables 7/30/2026 8:30 AM
    Construction spending, ISM Manufacturing Index 8/3/2026 10:00 AM
    International trade (Full report), M3-2 Manufacturing (Full report) 8/4/2026 10:00 AM
    Wholesale trade 8/6/2026 10:00 AM
    Retail sales + inventories 8/14/2026 10:00 AM
    Housing starts, Import and export prices, Industrial production 8/18/2026 9:15 AM
    GDP (Q2 2nd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Census manufacturing (M3-1) 8/26/2026 8:30 AM
    Construction spending, ISM Manufacturing Index 9/1/2026 10:00 AM
    International trade (Full report), ISM Services 9/3/2026 10:00 AM
    Wholesale trade, Producer Price Index, Existing-home sales 9/10/2026 10:00 AM
    Retail sales + inventories, Import and export prices 9/16/2026 10:00 AM
    Housing starts 9/17/2026 8:30 AM
    Advance Census manufacturing (M3-1) 9/25/2026 8:30 AM
    GDP (Q2 3rd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Economic Indicators 9/30/2026 8:30 AM
    Construction spending, ISM Manufacturing Index 10/1/2026 10:00 AM
    International trade (Full report)** 10/6/2026 10:00 AM
    Wholesale trade 10/8/2026 10:00 AM
    Retail sales + inventories, Producer Price Index 10/15/2026 10:00 AM
    Housing starts 10/20/2026 8:30 AM
    Advance Census manufacturing (M3-1) , New-home sales 10/27/2026 10:00 AM
    Final nowcast of 2026:Q3 GDP growth: Advance Economic Indicators 10/28/2026 8:30 AM
    Initial nowcast of 2026:Q4 GDP growth: GDP (Q3 1st estimate), Personal income and outlays, NIPA underlying detail tables 10/29/2026 8:30 AM
    Construction spending, ISM Manufacturing Index 11/2/2026 10:00 AM
    International trade (Full report), ISM Services 11/4/2026 10:00 AM
    Wholesale trade 11/9/2026 10:00 AM
    Retail sales + inventories, Import and export prices, Industrial production 11/17/2026 10:00 AM
    Housing starts 11/18/2026 8:30 AM
    GDP (Q3 2nd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Census manufacturing (M3-1), New-home sales 11/25/2026 10:00 AM
    Construction spending, ISM Manufacturing Index 12/1/2026 10:00 AM
    International trade (Full report)** 12/8/2026 10:00 AM
    Wholesale trade, Existing-home sales 12/9/2026 10:00 AM
    Retail sales + inventories, Industrial production 12/16/2026 10:00 AM
    Housing starts, Import and export prices 12/17/2026 8:30 AM
    GDP (Q3 3rd estimate), Personal income and outlays, NIPA underlying detail tables, Advance Census manufacturing (M3-1), New-home sales 12/23/2026 10:00 AM

    Download a spreadsheet of these release dates

    *Time of last economic release; GDPNow update typically released 2 to 3.5 hours after this time.

    **Note: Timing of release on dates of full international trade report will depend on when data on gold imports/exports is released by BEA. Traditionally, those data were released around 10 a.m. (ET), but since 2025 they have been released closer to 8:30 a.m. (ET).

    What is GDPNow?

    In this video economist Pat Higgins, GDPNow's creator, discusses the difference between nowcasting and forecasting.