@highcharts/dashboards
Version:
Highcharts Dashboards framework
14 lines • 59.2 kB
JavaScript
!/**
* Highcharts Dashboards Layout 3.6.0 (2025-09-10)
*
* (c) 2009-2025 Highsoft AS
*
* License: www.highcharts.com/license
*/function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("dashboards/modules/layout",["dashboards"],function(e){return t(e),t.Dashboards=e,t}):t("undefined"!=typeof Dashboards?Dashboards:void 0)}(function(t){"use strict";var e=t?t._modules:{};function s(e,s,i,o){e.hasOwnProperty(s)||(e[s]=o.apply(null,i),"function"==typeof CustomEvent&&t.win.dispatchEvent(new CustomEvent("DashboardsModuleLoaded",{detail:{path:s,module:e[s]}})))}s(e,"Dashboards/EditMode/EditRenderer.js",[e["Dashboards/EditMode/EditGlobals.js"],e["Core/Utilities.js"]],function(t,e){let{merge:s,createElement:i,defined:o}=e;function n(e,s){let o,n=s.options.contextMenu;return n&&(o=i("button",{className:t.classNames.contextMenuBtn,onclick:function(t){t.stopPropagation(),s.onContextBtnClick()}},{},e),n.icon&&i("img",{src:n.icon,className:t.classNames.icon},{},o),n.text&&i("span",{className:t.classNames.contextMenuBtnText,textContent:n.text},{},o),o.setAttribute("aria-label",s.lang.accessibility.contextMenu.button),o.setAttribute("aria-expanded","false")),o}function l(e,s){let o,{name:n,showToggle:l,onchange:a,isEnabled:d,isNested:c,isStandalone:h,lang:p}=s,u=i("div",{className:t.classNames[c?"accordionNestedWrapper":"accordionContainer"]+" "+(h?t.classNames.accordionStandaloneWrapper:"")+" "+t.classNames.collapsableContentHeader},{},e),m=i("div",{className:t.classNames.accordionHeader},{},u);if((!h||l)&&(o=i(h&&l?"span":"button",{className:t.classNames[h?"accordionHeaderWrapper":"accordionHeaderBtn"]},{},m)),i("span",{textContent:p[n]||n},{},o),l&&m&&r(m,{enabledOnOffLabels:!0,id:n,name:"",onchange:a,value:d||!1,lang:p}),!h){let e=i("span",{className:t.classNames.accordionHeaderIcon+" "+t.classNames.collapsedElement},{},o);o?.addEventListener("click",function(){b.classList.toggle(t.classNames.hiddenElement),e?.classList.toggle(t.classNames.collapsedElement)})}let b=i("div",{className:t.classNames.accordionContent+" "+(h?t.classNames.standaloneElement:t.classNames.hiddenElement)},{},u);return{outerElement:u,content:b}}function a(o,n){let l;if(!o)return;n.name&&d(o,{title:n.name,isLabel:!0});let a=n.iconsURLPrefix||"",r=i("div",{className:t.classNames.dropdown+" "+t.classNames.collapsableContentHeader},{},o),c=i("button",{className:t.classNames.dropdownButton},{},r),h=i("div",{className:t.classNames.dropdownButtonContent},{},c),p=(e.find(n.selectOptions,t=>t.name===n.value)||{}).iconURL;p&&(l=i("img",{src:a+p,className:t.classNames.icon},{},h));let u=i("span",{textContent:n.value,id:n.id||""},{},h),m=i("img",{className:t.classNames.dropdownIcon+" "+t.classNames.collapsedElement,src:a+"dropdown-pointer.svg"},{},c),b=i("ul",{className:t.classNames.dropdownContent+" "+t.classNames.hiddenElement},{},r);c.addEventListener("click",function(){b.classList.toggle(t.classNames.hiddenElement),m.classList.toggle(t.classNames.collapsedElement)});for(let e=0,o=n.selectOptions.length;e<o;++e)!function(e,s,o,n,l,a,r){let d=e.iconsURLPrefix+e.iconURL,c=i("li",{},{},s),h=i("button",{className:t.classNames.customSelectButton},{},c);e.iconURL&&i("img",{src:d},{},h),i("span",{textContent:e.name||""},{},h),h.addEventListener("click",function(){if(s.classList.add(t.classNames.hiddenElement),l.classList.toggle(t.classNames.collapsedElement),o.textContent=e.name||"",a&&e.iconURL&&(a.src=d),r)return r(e.name)})}(s(n.selectOptions[e]||{},{iconsURLPrefix:a}),b,u,n.id,m,l,n.onchange);return r}function r(e,s){if(!e)return;let o=s.lang,n=s.value,l=s.title||s.name,a=s.langKey;s.isNested&&(e=i("div",{className:t.classNames.labeledToggleWrapper},{},e));let r=i("button",{className:t.classNames.toggleContainer,type:"button",role:"switch",ariaChecked:!1,ariaLabel:a?o.accessibility[a][s.name]:""},{},e);l&&d(s.isNested?e:r,{title:l}),s.enabledOnOffLabels&&d(r,{title:o.off,className:t.classNames.toggleLabels});let c=i("label",{className:t.classNames.toggleWrapper+" "+(s.className||"")},{},r),h=u(c,n),p=s.onchange;p&&r.addEventListener("click",t=>{p(!h.checked),h.checked=!h.checked,r.setAttribute("aria-checked",h.checked),t.stopPropagation()});let m=i("span",{className:t.classNames.toggleSlider},{},c);return p&&m.addEventListener("click",t=>{t.preventDefault()}),s.enabledOnOffLabels&&d(r,{title:o.on,className:t.classNames.toggleLabels}),r}function d(e,s){let o,{title:n,className:l,isLabel:a}=s;if(e){let s=a?{htmlFor:n}:{};o=i(a?"label":"div",{className:t.classNames.labelText+" "+(l||""),textContent:n,...s},{},e)}return o}function c(t,e){let{icon:s,callback:o}=e;if(!t)return;let n=i("div",{onclick:o,className:e.className||""},{},t);n.style["background-image"]="url("+s+")";let l=e.mousedown,a=e.click;return l&&(n.onmousedown=function(){l.apply(this,arguments)}),a&&n.addEventListener("click",function(){a.apply(this,arguments)}),n}function h(t,e){if(!t)return;e.name&&d(t,{title:e.name,isLabel:!0});let s=i("input",{type:"text",onclick:e.callback,id:e.id||"",name:e.name||"",value:o(e.value)&&e.value.toString().replace(/\"/g,"")||""},{},t),n=e.onchange;return n&&s.addEventListener("change",function(t){n(t.target.value)}),s}function p(t,e){if(!t)return;e.name&&d(t,{title:e.name,isLabel:!0});let s=i("textarea",{id:e.id,name:e.name,value:e.value||""},{},t),o=e.onchange;return o&&s.addEventListener("change",function(t){o(t.target.value)}),s}function u(t,e){let s;return t&&(s=i("input",{type:"checkbox",checked:!!e},{},t)),s}function m(e,s){if(!e)return;let o=i("button",{className:t.classNames.button+" "+(s.className||""),onclick:s.callback,textContent:s.text},s.style||{},e);return s.icon&&(o.style["background-image"]="url("+s.icon+")"),o}return{renderSelect:a,renderToggle:r,renderText:d,renderCollapseHeader:l,renderIcon:c,renderContextButton:n,renderInput:h,renderTextarea:p,renderCheckbox:u,renderButton:m,getRendererFunction:function(t){return({select:a,toggle:r,text:d,collapse:l,icon:c,contextButton:n,input:h,textarea:p,checkbox:u,button:m})[t]}}}),s(e,"Dashboards/EditMode/Menu/MenuItem.js",[e["Dashboards/EditMode/EditGlobals.js"],e["Core/Utilities.js"],e["Dashboards/EditMode/EditRenderer.js"]],function(t,e,s){let{createElement:i,merge:o}=e;class n{constructor(t,e){this.menu=t,this.isActive=!1,this.options=o(n.defaultOptions,e),this.container=this.setContainer(),this.innerElement=this.setInnerElement()}setContainer(){let e=this.options,s=t.classNames.menuItem;return this.menu.options.itemsClassName&&(s+=" "+this.menu.options.itemsClassName),e.className&&(s+=" "+e.className),i("div",{className:s||""},o(this.options.style||{},this.isActive?{display:"block"}:{}),this.menu.container)}setInnerElement(){let t=this.options,e=this.container,i=t.langKey;return"toggle"===t.type?s.renderToggle(e,{id:t.id,name:t.id,title:i?this.menu.editMode.lang[i]:t.text,value:!!(t.getValue&&t.getValue(this)),lang:this.menu.editMode.lang,langKey:i,onchange:t.events?.click?.bind(this)}):"text"===t.type?s.renderText(e,{title:i?this.menu.editMode.lang[i]:t.text||"",className:t.className||""}):"icon"===t.type?s.renderIcon(e,{icon:t.icon||"",mousedown:t.events?.onmousedown?.bind(this),click:t.events?.click?.bind(this)}):"button"===t.type?s.renderButton(e,{callback:t.events?.click?.bind(this),className:t.className||"",style:t.style||{},text:i?this.menu.editMode.lang[i]:t.text||""}):void 0}update(){let t=this.options;t.events&&t.events.update&&t.events.update.apply(this,arguments)}activate(){this.update(),this.container&&(this.isActive=!0,this.container.style.display="block")}deactivate(){this.container&&(this.isActive=!1,this.container.style.display="none")}}return n.defaultOptions={type:"text"},n}),s(e,"Dashboards/EditMode/Menu/MenuItemBindings.js",[],function(){return{viewFullscreen:{id:"viewFullscreen",type:"button",langKey:"viewFullscreen",events:{click:function(){let t=this.menu.editMode.board.fullscreen;t&&t.toggle()}}}}}),s(e,"Dashboards/EditMode/Menu/Menu.js",[e["Dashboards/EditMode/EditGlobals.js"],e["Core/Utilities.js"],e["Dashboards/EditMode/Menu/MenuItem.js"],e["Dashboards/EditMode/Menu/MenuItemBindings.js"]],function(t,e,s,i){let{createElement:o,merge:n}=e;class l{constructor(t,e,s,i){this.parentElement=t,this.isVisible=!1,this.activeItems=[],this.options=e,this.items={},this.editMode=s,i&&(this.parent=i),this.container=this.setContainer()}setContainer(){return o("div",{className:t.classNames.menu+" "+(this.options.className||"")},{},this.parentElement)}initItems(t,e){let i,o,l,a,r=this.options.items||[];for(let d=0,c=r.length;d<c;++d)i="string"==typeof(o=r[d])?t[o]:o.id?t[o.id]:{},(a="string"==typeof o?n(i,{id:o}):n(i,o)).id&&(l=new s(this,a),this.items[l.options.id]=l,e&&(l.activate(),this.activeItems.push(l)))}setActiveItems(t){let e;for(let e=0,s=this.activeItems.length;e<s;++e)-1===t.indexOf(this.activeItems[e].options.id)&&this.activeItems[e].deactivate();this.activeItems.length=0;for(let s=0,i=t.length;s<i;++s)(e=this.items[t[s]])&&(e.isActive?e.update():e.activate(),this.activeItems.push(e))}deactivateActiveItems(){for(let t=0,e=this.activeItems.length;t<e;++t)this.activeItems[t].deactivate()}updateActiveItems(){let t=this.activeItems;for(let e=0,s=t.length;e<s;++e)t[e].update()}destroy(){this.activeItems.length=0,this.container.remove(),this.items={},this.options={}}}return l.items=i,l}),s(e,"Dashboards/EditMode/Toolbar/EditToolbar.js",[e["Core/Utilities.js"],e["Dashboards/EditMode/Menu/Menu.js"]],function(t,e){let{defined:s,createElement:i,css:o}=t;return class{constructor(t,s){this.container=i("div",{className:s.className},void 0,t.board.container),this.editMode=t,this.iconURLPrefix=t.iconsURLPrefix,this.menu=new e(this.container,s.menu,t,this),this.options=s,this.isVisible=!1,this.options.outline&&(this.outline=i("div",{className:s.outlineClassName},void 0,this.container))}hide(){this.setPosition(void 0,void 0)}refreshOutline(t,e,s,i=0){let n=(s||{}).container;this.outline&&n&&o(this.outline,{display:"block",left:t-i+"px",top:e-i+"px",width:n.offsetWidth+2*i+"px",height:n.offsetHeight+2*i+"px"})}hideOutline(){this.outline&&(this.outline.style.display="none")}setPosition(t,e){this.container&&o(this.container,{left:(t||"-9999")+"px",top:(e||"-9999")+"px"}),this.isVisible=s(t)&&s(e)}}}),s(e,"Dashboards/EditMode/Toolbar/CellEditToolbar.js",[e["Dashboards/Layout/Cell.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/Toolbar/EditToolbar.js"],e["Dashboards/Layout/GUIElement.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,s,i,o,n){let{isFirefox:l}=o,{merge:a,fireEvent:r,objectEach:d}=n;class c extends s{static getItemsConfig(s,i){let o=[];return s.dragDrop?.enabled&&o.push({id:"drag",type:"icon",icon:i+"drag.svg",events:{onmousedown:function(e){l&&e.preventDefault();let s=this.menu.parent,i=s.editMode.dragDrop;i&&s.cell&&t.isCell(s.cell)&&i.onDragStart(e,s.cell)}}}),s.settings?.enabled&&o.push({id:"settings",type:"icon",icon:i+"settings.svg",events:{click:function(){this.menu.parent.editMode.setEditOverlay(),this.menu.parent.onCellOptions()}}}),o.push({id:"destroy",type:"icon",className:e.classNames.menuDestroy,icon:i+"destroy.svg",events:{click:function(){let t=this.menu.parent,e=this.menu.parent.editMode,s=e.confirmationPopup;s.show({confirmButton:{value:e.lang.confirmButton,callback:t.onCellDestroy,context:t},cancelButton:{value:e.lang.cancelButton,callback:()=>{s.closePopup()}},text:e.lang.confirmDestroyCell})}}}),o}constructor(t){super(t,a(c.defaultOptions,(t.options.toolbars||{}).cell,{menu:{items:c.getItemsConfig(t.options,t.iconsURLPrefix)}})),t.customHTMLMode&&this.filterOptionsAvailableInCustomHTMLMode(),this.menu.initItems({})}showToolbar(t){let e=t.container,s=this.editMode.cellToolbar;if(s)if(e&&this.editMode.isActive()&&!(this.editMode.dragDrop||{}).isActive){let e=i.getOffsets(t,this.editMode.board.container),o=e.right-30-10,n=e.top+10;d(this.menu.items,e=>{if(!t.options?.editMode?.toolbarItems)return void e.activate();let s=t.options.editMode.toolbarItems;if(s[e.options.id]?.enabled===!1)return void e.deactivate();e.activate()}),this.setPosition(o,n),this.cell=t,this.refreshOutline(),s.isVisible=!0}else this.isVisible&&(this.hide(),s.isVisible=!1)}refreshOutline(){this.cell&&this.cell.container&&this.outline&&super.refreshOutline(-this.cell.container.offsetWidth,0,this.cell,-1)}onCellOptions(){let t=this.editMode;t.sidebar&&(t.sidebar.show(this.cell),this.highlightCell())}onCellDestroy(){if(this.cell&&t.isCell(this.cell)){let t=this.cell.row,e=this.cell.id;this.cell.row.setHighlight(),this.resetEditedCell(),this.cell.destroy(),this.cell=void 0,this.editMode.hideToolbars(["cell","row"]),this.editMode.resizer?.disableResizer(),t&&t.cells&&t.cells.length&&(r(this.editMode.board,"cellResize",{cell:t.cells[0]}),r(t,"cellChange",{cell:t.cells[0],row:t}),r(this.editMode,"layoutChanged",{type:"cellDestroyed",target:e,board:this.editMode.board}))}}resetEditedCell(){this.editedCell=void 0}filterOptionsAvailableInCustomHTMLMode(){this.options.menu.items=this.options.menu.items?.filter(t=>"string"!=typeof t&&"settings"===t.id)}highlightCell(){this.cell&&(this.cell.setHighlight?this.cell.setHighlight():(this.cell.container.classList.add(e.classNames.cellEditHighlight),this.editMode.board.container.classList.add(e.classNames.dashboardCellEditHighlightActive)))}}return c.defaultOptions={enabled:!0,className:e.classNames.editToolbar,outline:!1,outlineClassName:e.classNames.editToolbarCellOutline,menu:{className:e.classNames.editToolbarCell,itemsClassName:e.classNames.editToolbarItem,items:[]}},c}),s(e,"Dashboards/EditMode/Toolbar/RowEditToolbar.js",[e["Core/Utilities.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/Toolbar/EditToolbar.js"],e["Dashboards/Layout/GUIElement.js"]],function(t,e,s,i){let{fireEvent:o,merge:n,objectEach:l}=t;class a extends s{static getMenuItemsConfig(t,s){let i=[];return t.dragDrop?.enabled&&i.push({id:"drag",type:"icon",icon:s+"drag.svg",events:{onmousedown:function(t){let e=this.menu.parent,s=e.editMode.dragDrop;t.preventDefault(),s&&e.row&&s.onDragStart(t,e.row)}}}),i.push({id:"destroy",type:"icon",className:e.classNames.menuDestroy,icon:s+"destroy.svg",events:{click:function(){let t=this.menu.parent,e=this.menu.parent.editMode,s=e.confirmationPopup;s.show({confirmButton:{value:e.lang.confirmButton,callback:t.onRowDestroy,context:t},cancelButton:{value:e.lang.cancelButton,callback:()=>{s.closePopup()}},text:e.lang.confirmDestroyRow})}}}),i}constructor(t){super(t,n(a.defaultOptions,(t.options.toolbars||{}).row,{menu:{items:a.getMenuItemsConfig(t.options,t.iconsURLPrefix)}})),this.menu.initItems({})}refreshOutline(t,e){this.row&&this.row.container&&super.refreshOutline(t,e,this.row,2)}showToolbar(t){let e,s,o,n=t.container,a=this.editMode.rowToolbar;if(a)if(n&&this.editMode.isActive()&&!(this.editMode.dragDrop||{}).isActive){let n=i.getOffsets(t,this.editMode.board.container),r=n.right-n.left;l(this.menu.items,e=>{if(!t.options?.editMode?.toolbarItems)return void e.activate();let s=t.options.editMode.toolbarItems;if(s[e.options.id]?.enabled===!1)return void e.deactivate();e.activate()}),o=r/2-this.container.clientWidth/2,e=n.left+o,s=n.top-this.container.clientHeight,this.setPosition(e,s),this.row=t,this.refreshOutline(-o,this.container.clientHeight),a.isVisible=!0}else this.isVisible&&(this.hide(),a.isVisible=!1)}onRowOptions(){this.editMode.sidebar&&this.editMode.sidebar.show(this.row)}onRowDestroy(){if(this.row){let t=this.row.options.id||-1;this.resetEditedRow(),this.row.destroy(),this.row=void 0,this.editMode.hideToolbars(["cell","row"]),this.editMode.resizer?.disableResizer(),o(this.editMode,"layoutChanged",{type:"rowDestroyed",target:t,board:this.editMode.board})}}resetEditedRow(){this.editedRow=void 0}}return a.defaultOptions={enabled:!0,className:e.classNames.editToolbar,outline:!0,outlineClassName:e.classNames.editToolbarRowOutline,menu:{className:e.classNames.editToolbarRow,itemsClassName:e.classNames.editToolbarItem,items:[]}},a}),s(e,"Shared/BaseForm.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Utilities.js"]],function(t,e){let{addEvent:s,createElement:i}=e;return class{constructor(t,e){this.iconsURL=e,this.container=this.createPopupContainer(t),this.closeButton=this.addCloseButton()}createPopupContainer(t,e="highcharts-popup highcharts-no-tooltip"){return i("div",{className:e},void 0,t)}addCloseButton(t="highcharts-popup-close"){let e=this,o=this.iconsURL,n=i("button",{className:t},void 0,this.container);return i("span",{className:"highcharts-icon"},{backgroundImage:"url("+(o.match(/png|svg|jpeg|jpg|gif/ig)?o:o+"close.svg")+")"},n),["click","touchstart"].forEach(t=>{s(n,t,e.closeButtonEvents.bind(e))}),s(document,"keydown",function(t){"Escape"===t.code&&e.closeButtonEvents()}),n}closeButtonEvents(){this.closePopup()}showPopup(e="highcharts-annotation-toolbar"){let s=this.container,i=this.closeButton;this.type=void 0,s.innerHTML=t.emptyHTML,s.className.indexOf(e)>=0&&(s.classList.remove(e),s.removeAttribute("style")),s.appendChild(i),s.style.display="block",s.style.height=""}closePopup(){this.container.style.display="none"}}}),s(e,"Dashboards/EditMode/ConfirmationPopup.js",[e["Core/Utilities.js"],e["Shared/BaseForm.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/EditRenderer.js"]],function(t,e,s,i){let{createElement:o}=t;return class extends e{constructor(t,e,s,i){super(t,e=i&&i.close&&i.close.icon?i.close.icon:e),this.editMode=s,this.options=i}createPopupContainer(t,e=s.classNames.confirmationPopup){return super.createPopupContainer(t,e)}addCloseButton(t=s.classNames.popupCloseButton){return super.addCloseButton(t)}closeButtonEvents(){let t=this.contentOptions?.cancelButton.callback;t&&t()}renderContent(){let t=this.contentOptions;if(!t)return;this.contentContainer=o("div",{className:s.classNames.popupContentContainer},{},this.container);let e=this.contentContainer.parentNode;e.style.marginTop="0px";let n=e.getBoundingClientRect().top;e.style.marginTop=(n<0?Math.abs(n-200):200)+"px",i.renderText(this.contentContainer,{title:t.text||""}),this.buttonContainer=o("div",{className:s.classNames.popupButtonContainer},{},this.container),i.renderButton(this.buttonContainer,{text:t.cancelButton.value,className:s.classNames.popupCancelBtn,callback:t.cancelButton.callback}),i.renderButton(this.buttonContainer,{text:t.confirmButton.value,className:s.classNames.popupConfirmBtn,callback:()=>{t.confirmButton.callback.call(t.confirmButton.context),this.closePopup()}})}show(t){this.contentOptions=t,this.showPopup(),this.renderContent(),this.editMode.setEditOverlay()}closePopup(){super.closePopup(),this.editMode.setEditOverlay(!0)}}}),s(e,"Dashboards/EditMode/AccordionMenu.js",[e["Dashboards/EditMode/EditRenderer.js"],e["Core/Utilities.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/ConfirmationPopup.js"]],function(t,e,s,i){let{createElement:o,merge:n,error:l,fireEvent:a}=e;return class{constructor(t,e){this.changedOptions={},this.chartOptionsJSON={},this.oldOptionsBuffer={},this.waitingForConfirmation=!1,this.iconsURLPrefix=t,this.closeSidebar=e}renderContent(e,l,r){let d,c,{editMode:h}=l.board,p=l.editableOptions.getOptions();this.component=l,this.oldOptionsBuffer=l.getEditableOptions(),h&&(this.confirmationPopup=new i(l.board.container,h.iconsURLPrefix,h,{close:{icon:""}}));let u=o("div",{className:s.classNames.accordionMenu},{},e);for(let e=0,i=p.length;e<i;e++)d=p[e],c=t.renderCollapseHeader(u,n({iconsURLPrefix:this.iconsURLPrefix,lang:(l.board?.editMode||s).lang},d)).content,this.renderAccordion(d,c,l);let m=o("div",{className:s.classNames.accordionMenuButtonsContainer},{},r);t.renderButton(m,{text:(l.board?.editMode||s).lang.confirmButton,className:s.classNames.popupConfirmBtn,callback:async()=>{await this.confirmChanges(),a(h,"confirmEditing")}}),t.renderButton(m,{text:(l.board?.editMode||s).lang.cancelButton,className:s.classNames.popupCancelBtn,callback:()=>{this.cancelChanges(),a(h,"cancelEditing")}}),r.appendChild(m)}updateOptions(t,e){let s,i,o,n,a=t.length-1,r=this.changedOptions;if(0===a&&"chartOptions"===t[0])try{let t=JSON.parse(e);this.chartOptionsJSON=t}catch(t){l(`Dashboards Error: Wrong JSON config structure passed as a chart options.
____________
${t}`)}for(let e=0;e<a;e++){let l=t[e];if(r[l]||(r[l]={}),r=r[l],"gridOptions"===l){let t=this.component.dataGrid?.options;if(t){let e=this.oldOptionsBuffer;e.gridOptions||(e.gridOptions={}),n=e.gridOptions,o=t}}else o&&n&&(o=o[l],void 0===n[l]&&(n[l]={}),n=n[l]);if("chartOptions"===l){let t=this.component.chart?.options;if(t){let e=this.oldOptionsBuffer;e.chartOptions||(e.chartOptions={}),i=e.chartOptions,s=t}}else s&&i&&(s=s[l],void 0===i[l]&&(i[l]={}),i=i[l])}let d=t[a];r[d]=e,i&&s&&(i[d]=i[d]??s[d]),this.component?.update(this.changedOptions)}renderAccordion(e,s,i){if("nested"===e.type)return this.renderNested(s,e,i);let o=t.getRendererFunction(e.type);o&&o(s,{...e,iconsURLPrefix:this.iconsURLPrefix,value:i.getEditableOptionValue(e.propertyPath),enabledOnOffLabels:"toggle"===e.type,onchange:t=>this.updateOptions(e.propertyPath||[],t)})}renderNested(e,i,o){if(!e||!i.nestedOptions)return;let l=i.nestedOptions;for(let i=0,a=l.length;i<a;++i){let a=l[i].name,r=l[i].options,d=!!l[i].showToggle,c=l[i].propertyPath||[],h=(o.board?.editMode||s).lang,p=t.renderCollapseHeader(e,{name:a,isEnabled:!!o.getEditableOptionValue(c),iconsURLPrefix:this.iconsURLPrefix,showToggle:d,onchange:t=>this.updateOptions(c,t),isNested:!!r,isStandalone:!r,lang:h});for(let t=0,e=r?.length;t<e;++t)this.renderAccordion(n(r[t],{lang:h,isNested:!0}),p.content,o)}}cancelChanges(){Object.keys(this.changedOptions).length<1?this.closeSidebar():this.showCancelConfirmationPopup()}async confirmChanges(){let t=this.component;if(t){if("Highcharts"===t.type&&Object.keys(this.chartOptionsJSON).length)await t.update({chartOptions:this.chartOptionsJSON});else if("HTML"===t.type){let e=this.changedOptions;await t.update(e,!0)}a(t.board.editMode,"componentChanged",{target:t,changedOptions:n({},this.changedOptions),oldOptions:n({},this.oldOptionsBuffer)}),this.changedOptions={},this.chartOptionsJSON={},this.closeSidebar()}}async discardChanges(){let t=this.component;t&&(await t.update(this.oldOptionsBuffer),a(t.board.editMode,"componentChangesDiscarded",{target:t,changedOptions:n({},this.changedOptions),oldOptions:n({},this.oldOptionsBuffer)}),this.changedOptions={},this.chartOptionsJSON={})}showCancelConfirmationPopup(){let t=this.confirmationPopup,e=this.component?.board?.editMode;t&&e&&!this.waitingForConfirmation&&(this.waitingForConfirmation=!0,t.show({text:e.lang.confirmDiscardChanges,confirmButton:{value:e.lang.confirmButton,callback:async()=>{await this.discardChanges(),this.waitingForConfirmation=!1,this.closeSidebar()},context:this},cancelButton:{value:e.lang.cancelButton,callback:()=>{t.closePopup(),e.setEditOverlay(),setTimeout(()=>{this.waitingForConfirmation=!1},100)}}}))}}}),s(e,"Dashboards/Layout/Row.js",[e["Dashboards/Globals.js"],e["Dashboards/Layout/Cell.js"],e["Dashboards/Layout/GUIElement.js"],e["Core/Utilities.js"],e["Dashboards/EditMode/EditGlobals.js"]],function(t,e,s,i,o){let{pick:n,defined:l,merge:a,objectEach:r,fireEvent:d}=i;class c extends s{static setContainerHeight(t,e){e&&(t.style.height=e+"px")}constructor(e,s,i){super(),this.type=t.guiElementType.row,this.layout=e,this.cells=[],this.options=s,this.isVisible=!0;let o=document.getElementById(s.parentContainerId||"")||e.container,n=e.options||{},l=n.rowClassName||"";this.container=this.getElementContainer({render:e.board.guiEnabled,parentContainer:o,attribs:{id:s.id,className:t.classNames.row+" "+l},element:i,elementId:s.id,style:a(n.style,s.style)}),this.options.cells&&this.setCells()}setCells(){let t,e,s,i=(this.layout.options||{}).cellClassName||"",o=n(this.options.cells,this.container&&this.container.getElementsByClassName(i))||[];for(e=0,s=o.length;e<s;++e)t=o[e],this.addCell(this.layout.board.guiEnabled?t:{id:""},t instanceof HTMLElement?t:void 0)}addCell(t,s,i){let o=new e(this,t,s);return l(i)?this.mountCell(o,i):this.cells.push(o),this.layout.board.editMode&&this.layout.board.editMode.setCellEvents(o),o}destroy(){let{layout:t}=this,e=[...this.cells];for(let t=0,s=e?.length;t<s;++t)e[t]&&e[t].destroy();this.layout&&(this.layout.unmountRow(this),super.destroy(),t.rows?.length===0&&t.destroy())}getOptions(){let t=[];for(let e=0,s=this.cells.length;e<s;++e)t.push(this.cells[e].getOptions());return{id:this.options.id,style:this.options.style,cells:t}}setSize(t){c.setContainerHeight(this.container,t)}getCellIndex(t){for(let e=0,s=this.cells?.length;e<s;++e)if(this.cells[e].id===t.id)return e}mountCell(t,e=0){let s=this,i=s.cells[e],o=s.cells[e-1];t.container&&(i&&i.container?i.container.parentNode.insertBefore(t.container,i.container):o&&o.container?o.container.parentNode.insertBefore(t.container,o.container.nextSibling):o||i||!s.container||s.container.appendChild(t.container),s.cells.splice(e,0,t),t.row=s,setTimeout(()=>{d(s,"cellChange",{row:s,cell:t})},0))}unmountCell(t){let e=this.getCellIndex(t);l(e)&&this.cells.splice(e,1),setTimeout(()=>{d(this,"cellChange",{row:this,cell:t})},0)}getVisibleCells(){let t=[];for(let e=0,s=this.cells.length;e<s;++e)this.cells[e].isVisible&&t.push(this.cells[e]);return t}changeVisibility(t=!0,e){super.changeVisibility(t,e),this.layout.getVisibleRows().length?this.isVisible&&!this.layout.isVisible&&this.layout.show():this.layout.hide()}show(){this.changeVisibility(!0,"flex")}setHighlight(t){let e=this.container.classList,s=o.classNames.rowContextHighlight;!0===t?e.remove(s):e.toggle(s,!t)}getRowLevels(){let t,e,i={},o=[];for(let o=0,n=this.cells.length;o<n;++o)(t=this.cells[o]).isVisible&&(i[(e=s.getOffsets(t)).top]||(i[e.top]={top:e.top,bottom:e.bottom,cells:[]}),i[e.top].bottom<e.bottom&&(i[e.top].bottom=e.bottom),i[e.top].cells.push(t));return r(i,t=>{o.push(t)}),o}getRowLevelInfo(t){let e,s=this.getRowLevels();for(let i=0,o=s.length;i<o;++i)s[i].top<=t&&s[i].bottom>t&&(e={index:i,rowLevels:s,rowLevel:s[i]});return e}}return c}),s(e,"Dashboards/Layout/Layout.js",[e["Core/Utilities.js"],e["Dashboards/Layout/Row.js"],e["Dashboards/Layout/GUIElement.js"],e["Dashboards/Globals.js"]],function(t,e,s,i){let{pick:o,defined:n}=t;return class extends s{constructor(t,e,s){super(),this.type=i.guiElementType.layout,this.board=t,this.rows=[],this.options=e,this.isVisible=!0;let o=s?s.container:document.getElementById(e.parentContainerId||"")||t.layoutsWrapper;s?(this.parentCell=s,this.level=s.row.layout.level+1):this.level=0,e.copyId&&(this.copyId=e.copyId);let n=(this.options||{}).rowClassName||"";this.container=this.getElementContainer({render:t.guiEnabled,parentContainer:o,attribs:{id:(e.id||"")+(this.copyId?"_"+this.copyId:""),className:i.classNames.layout+" "+n},elementId:e.id,style:this.options.style}),this.options.rows&&this.setRows()}setRows(){let t,e,s,i=o(this.options.rows,this.container&&this.container.getElementsByClassName(this.options.rowClassName||""))||[];for(e=0,s=i.length;e<s;++e)t=i[e],this.addRow(this.board.guiEnabled?t:{},t instanceof HTMLElement?t:void 0)}addRow(t,s,i){let o=new e(this,t,s);return n(i)?this.mountRow(o,i):this.rows.push(o),this.board.editMode&&this.board.editMode.setRowEvents(o),o}destroy(){for(let t=this.board.layouts.length-1;t>=0;t--)this.board.layouts[t]===this&&this.board.layouts.splice(t,1);this.parentCell&&delete this.parentCell.nestedLayout;for(let t=this.rows.length-1;t>=0;t--)this.rows[t].destroy();this.parentCell&&this.parentCell.destroy(),super.destroy()}getRowIndex(t){for(let e=0,s=this.rows.length;e<s;++e)if(this.rows[e]===t)return e}mountRow(t,e){let s=this.rows[e],i=this.rows[e-1];t.container&&(s&&s.container?s.container.parentNode.insertBefore(t.container,s.container):i&&i.container&&i.container.parentNode.insertBefore(t.container,i.container.nextSibling),this.rows.splice(e,0,t),t.layout=this)}unmountRow(t){let e=this.getRowIndex(t);n(e)&&this.rows.splice(e,1)}getVisibleRows(){let t=[];for(let e=0,s=this.rows.length;e<s;++e)this.rows[e].isVisible&&t.push(this.rows[e]);return t}changeVisibility(t=!0){super.changeVisibility(t),this.parentCell&&(this.isVisible&&!this.parentCell.isVisible?this.parentCell.show():!this.isVisible&&this.parentCell.isVisible&&this.parentCell.hide())}getOptions(){let t=[];for(let e=0,s=this.rows.length;e<s;++e)t.push(this.rows[e].getOptions());return{id:this.options.id,layoutClassName:this.options.layoutClassName,rowClassName:this.options.rowClassName,cellClassName:this.options.cellClassName,style:this.options.style,rows:t}}}}),s(e,"Dashboards/EditMode/SidebarPopup.js",[e["Core/Renderer/HTML/AST.js"],e["Dashboards/Layout/CellHTML.js"],e["Dashboards/EditMode/AccordionMenu.js"],e["Shared/BaseForm.js"],e["Dashboards/Actions/Bindings.js"],e["Dashboards/Layout/Cell.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/EditRenderer.js"],e["Dashboards/Layout/GUIElement.js"],e["Dashboards/Layout/Layout.js"],e["Core/Utilities.js"]],function(t,e,s,i,o,n,l,a,r,d,c){let{addEvent:h,createElement:p,fireEvent:u,merge:m}=c;class b extends i{constructor(t,e,i){super(t,e),this.options={components:["HTML","row","Highcharts","DataGrid","KPI"]},this.isVisible=!1,this.componentsList=[],this.editMode=i,this.options=m(this.options,i.options.toolbars?.sidebar||{}),this.componentsList=this.getComponentsList(this.options.components||[]),this.accordionMenu=new s(this.iconsURL,this.hide.bind(this))}detectRightSidebar(t){let e=this.editMode,s=e.customHTMLMode?e.board.container:e.board.layoutsWrapper;return!!s&&r.getOffsets(t,s).left<s.offsetWidth/2-10}removeClassNames(){let t=l.classNames,e=this.container.classList;e.remove(t.editSidebarShow),e.remove(t.editSidebarRightShow)}addClassNames(t){let e=this.container.classList;t?e.add(l.classNames.editSidebarRight):e.remove(l.classNames.editSidebarRight),setTimeout(()=>{e.add(l.classNames[t?"editSidebarRightShow":"editSidebarShow"])})}show(t){let e=this.editMode,s=!!(t&&this.detectRightSidebar(t));this.showPopup(l.classNames.editSidebarShow),this.addClassNames(s),e.resizer&&e.resizer.disableResizer(),n.isCell(e.editCellContext)&&e.editCellContext.row&&e.editCellContext.row.setHighlight(),e.hideToolbars(["cell","row"]),e.stopContextDetection(),this.isVisible=!0,this.generateContent(t)}generateContent(e){if(this.container.innerHTML=t.emptyHTML,this.renderHeader(e?this.editMode.lang.settings:this.editMode.lang.addComponent,""),this.sidebarWrapper=p("div",{className:l.classNames.editSidebarWrapper},void 0,this.container),!e)return void this.renderAddComponentsList();if(this.type=e.getType(),"cell-html"===this.type||"cell"===this.type){let t=e.mountedComponent;if(!t)return;this.accordionMenu.renderContent(this.sidebarWrapper,t,this.container)}}renderAddComponentsList(){let t,e=this,s=this.componentsList,i=p("div",{className:l.classNames.editGridItems},{},e.sidebarWrapper);for(let o=0,n=s.length;o<n;++o)(t=p("div",{},{},i)).addEventListener("mousedown",t=>{t.preventDefault();let i=e.editMode.dragDrop;if(i){let n=t=>{let s=e.container.getBoundingClientRect();(t.clientX<s.left||t.clientX>s.right||t.clientY<s.top||t.clientY>s.bottom)&&(e.hide(),document.removeEventListener("mousemove",n))},l=()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",n),document.addEventListener("mouseup",l),i.onDragStart(t,void 0,t=>{if(0===this.editMode.board.layouts.length){let e=this.editMode.board,s=new d(e,{id:r.getElementId("layout"),copyId:"",parentContainerId:e.container.id,rows:[{}],style:{}});s&&e.layouts.push(s),t=s.rows[0]}if(!t?.type){let s=e.editMode.board.layouts;i.dropContext=t=s[s.length-1].addRow({},void 0)}let l=s[o].onDrop(e,t),a=h(this.editMode,"layoutChanged",t=>{if(l&&"newComponent"===t.type){let t=l.mountedComponent?.chart,s=this.editMode.options.settings?.enabled;if(t?.isDirtyBox){let i=h(t,"render",()=>{e.editMode.setEditCellContext(l),s&&(e.show(l),l.setHighlight()),i(),a()})}else e.editMode.setEditCellContext(l),s&&(e.show(l),l.setHighlight()),a()}});document.removeEventListener("mousemove",n)})}}),t.innerHTML=s[o].text}onDropNewComponent(t,e){let s=this.editMode.dragDrop;if(!s)return;let i=("cell"===t.getType()?t.row:t).addCell({id:r.getElementId("col")});s.onCellDragEnd(i);let n=m(e,{cell:i.id}),l=o.addComponent(n,this.editMode.board,i);return this.editMode.setEditOverlay(!this.editMode.options.settings?.enabled),(async()=>{let t=await l;t&&u(this.editMode,"layoutChanged",{type:"newComponent",target:t})})(),i}hide(){let t=this.editMode,s=t.editCellContext;this.removeClassNames(),this.container.style.display="none",t.isEditOverlayActive&&t.setEditOverlay(!0),n.isCell(s)&&s.row?(t.showToolbars(["cell","row"],s),s.row.setHighlight(!0),s.setHighlight(!0),t.resizer&&t.resizer.setSnapPositions(t.editCellContext)):e.isCellHTML(s)&&t.cellToolbar&&(t.cellToolbar.showToolbar(s),s.setHighlight()),t.isContextDetectionActive=!0,this.isVisible=!1}closeButtonEvents(){"cell"===this.type||"cell-html"===this.type?this.accordionMenu.cancelChanges():this.hide()}renderHeader(t,e){if(!this.container)return;let s=p("div",{className:l.classNames.editSidebarHeader},{},this.container);this.container.appendChild(s),this.headerWrapper=s;let i=a.renderIcon(this.headerWrapper,{icon:e,className:l.classNames.editSidebarTitle});i&&(i.textContent=t),this.headerWrapper?.appendChild(this.closeButton)}getComponentsList(t){let e=this.editMode,s=e.board.componentTypes,i=[];return t.forEach(t=>{let o=s[t];o?i.push({text:e.lang?.sidebar[t]||o.name,onDrop:function(t,e){let s=o.prototype.getOptionsOnDrop(t);if(s)return t.onDropNewComponent(e,s)}}):"row"===t&&i.push({...b.addRow,text:e.lang?.sidebar[t]||b.addRow.text})}),i}addCloseButton(t=l.classNames.popupCloseButton){return h(document,"click",t=>{t.stopPropagation(),"block"===this.container.style.display&&!this.container.contains(t.target)&&this.container.classList.value.includes("show")&&("cell"===this.type||"cell-html"===this.type?this.accordionMenu.cancelChanges():this.hide())}),super.addCloseButton.call(this,t)}createPopupContainer(t,e=l.classNames.editSidebar){return super.createPopupContainer.call(this,t,e)}}return b.addRow={text:l.lang.sidebar.row,onDrop:function(t,e){if(!e)return;let s="cell"===e.getType(),i=(s?e.row:e).layout.board,n=r.getElementId("cell");if(s){let t=new d(i,{id:r.getElementId("layout"),copyId:"",parentContainerId:i.container.id,rows:[{cells:[{id:n}]}],style:{}});i.layouts.push(t),u(i.editMode,"layoutChanged",{type:"newLayout",target:t,board:i})}else e.layout.rows[0].addCell({id:n});o.addComponent({type:"HTML",cell:n,className:"highcharts-dashboards-component-placeholder",html:`
<h2> Placeholder </h2>
<span> This placeholder can be deleted when you add extra
components to this row.
</span>
`},i)}},b}),s(e,"Dashboards/EditMode/EditContextMenu.js",[e["Dashboards/EditMode/EditGlobals.js"],e["Core/Utilities.js"],e["Dashboards/EditMode/Menu/Menu.js"]],function(t,e,s){let{addEvent:i,merge:o}=e;class n extends s{constructor(t,e,s){if(super(s.board.container,o(n.defaultOptions,e||{}),s),this.editMode=s,this.options=o(n.defaultOptions,e||{}),this.editMode.board.layoutsWrapper?.parentNode.insertBefore(this.container,this.editMode.board.layoutsWrapper),this.container.style.width=this.options.width+"px",super.initItems(n.items),this.options.items){let t=[];for(let e=0,s=this.options.items.length;e<s;++e)"string"==typeof this.options.items[e]?t.push(this.options.items[e]):this.options.items[e].id&&t.push(this.options.items[e].id);this.setActiveItems(t)}this.initEvents()}initEvents(){let e=this;i(document,"click",s=>{s.target!==this.container&&s.target!==e.editMode.tools.contextButtonElement&&!s.target.classList.contains(t.classNames.toggleSlider)&&"INPUT"!==s.target.tagName&&this.isVisible&&this.setVisible(!1)})}setVisible(t){let e=this.editMode.tools.contextButtonElement;this.container&&e&&(t?(this.container.style.display="block",this.isVisible=!0,e.setAttribute("aria-expanded","true")):(this.container.style.display="none",this.isVisible=!1,e.setAttribute("aria-expanded","false")));let s=this.activeItems.find(t=>"editMode"===t.options.langKey);s&&s.options.setValue(s,this.editMode.isActive())}updatePosition(t,e,s){let i=this.options.width||0,o=t?t.offsetLeft-i+t.offsetWidth:e,n=t?t.offsetTop+t.offsetHeight:s;o&&n&&(this.container.style.left=o+"px",this.container.style.top=n+"px")}}return n.defaultOptions={enabled:!0,width:150,className:t.classNames.contextMenu,itemsClassName:t.classNames.contextMenuItem,items:["editMode"]},n.items=o(s.items,{editMode:{id:"editMode",type:"toggle",getValue:function(t){return t.menu.editMode.isActive()},setValue:function(t,e){let s=t.innerElement?.querySelector("input");s&&(s.checked=e)},langKey:"editMode",events:{click:function(){this.menu.editMode.toggleEditMode()}}}}),n}),s(e,"Dashboards/Actions/ContextDetection.js",[e["Dashboards/Layout/GUIElement.js"],e["Core/Utilities.js"]],function(t,e){let{defined:s}=e;class i{static isGUIElementOnParentEdge(t,e){let s="top"===e||"bottom"===e?t.row.layout.getVisibleRows():"left"===e||"right"===e?t.row.getVisibleCells():[],i=s.length-1;return s[i]===t&&"right"===e||s[i]===t.row&&"bottom"===e||s[0]===t&&"left"===e||s[0]===t.row&&"top"===e}static getContextLevel(t,e,s,i){let o=t.getOverlappingLevels(i,e/2),n=e/o.length,l=o[o.length-1],a=t.row.layout.level-Math.floor(s/n);return a<l?l:a>t.row.layout.level?t.row.layout.level:a}static getContext(e,o,n){let l,a=t.getOffsets(e),{width:r,height:d}=t.getDimFromOffsets(a);r<2*n&&(n=r/2);let c=o.clientX-a.left,h=o.clientY-a.top,p="bottom";switch(c>=-n&&c<=n?p="left":c-r>=-n&&c-r<=n?p="right":h>=-n&&h<=n?p="top":h-d>=-n&&h-d<=n&&(p="bottom"),p){case"right":l=c-r+n;break;case"left":l=n-c;break;case"top":l=n-h;break;case"bottom":l=h-d+n}let u={cell:e,side:p};if(e.row?.layout.level&&p&&i.isGUIElementOnParentEdge(e,p)&&s(l)){let t=i.getContextLevel(e,n,l,p),s=e.getParentCell(t);s&&(u.cell=s)}return u}}return i}),s(e,"Dashboards/Actions/DragDrop.js",[e["Core/Utilities.js"],e["Dashboards/Globals.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/Layout/GUIElement.js"],e["Dashboards/Actions/ContextDetection.js"]],function(t,e,s,i,o){let{addEvent:n,merge:l,css:a,fireEvent:r,createElement:d}=t;class c{constructor(t,e){this.editMode=t,this.options=l(c.defaultOptions,e),this.mockElement=d("div",{className:s.classNames.dragMock},{},t.board.container),this.dropPointer={isVisible:!1,align:"",element:d("div",{className:s.classNames.dropPointer},{},t.board.container)},this.isActive=!1,this.initEvents()}showDropPointer(t,e,s,i){this.dropPointer.isVisible=!0,a(this.dropPointer.element,{display:"block",left:t+"px",top:e+"px",height:i+"px",width:s+"px"})}hideDropPointer(){this.dropPointer.isVisible&&(this.dropPointer.isVisible=!1,this.dropPointer.align="",this.dropPointer.element.style.display="none")}setMockElementPosition(t){let e=this.editMode.board.container.getBoundingClientRect(),s=this.mockElement.clientWidth/2,i=t.clientX-e.left-s,o=t.clientY-e.top-s;a(this.mockElement,{left:i+"px",top:o+"px"})}initEvents(){n(document,"mousemove",this.onDrag.bind(this)),n(document,"mouseup",this.onDragEnd.bind(this))}onDragStart(t,s,i){this.isActive=!0,this.editMode.hideToolbars(["cell","row"]),this.editMode.resizer&&this.editMode.resizer.disableResizer(),this.setMockElementPosition(t),s?(this.context=s,s.hide(),s.getType()===e.guiElementType.cell&&(r(this.editMode.board,"cellResize",{cell:s}),r(s.row,"cellChange",{cell:s,row:s.row}))):i&&(this.dragEndCallback=i),a(this.mockElement,{cursor:"grabbing",display:"block"})}onDrag(t){this.isActive&&(t.preventDefault(),this.setMockElementPosition(t),this.context?this.context.getType()===e.guiElementType.cell?this.onCellDrag(t):this.context.getType()===e.guiElementType.row&&this.onRowDrag(t):this.dragEndCallback&&this.onCellDrag(t))}onDragEnd(){this.isActive&&(this.isActive=!1,a(this.mockElement,{cursor:"grab",display:"none"}),this.context?(this.context.getType()===e.guiElementType.cell?this.onCellDragEnd():this.context.getType()===e.guiElementType.row&&this.onRowDragEnd(),this.context=void 0,this.editMode.editCellContext&&(this.editMode.showToolbars(["row","cell"],this.editMode.editCellContext),this.editMode.resizer&&this.editMode.resizer.setSnapPositions(this.editMode.editCellContext))):this.dragEndCallback&&(this.dragEndCallback(this.dropContext),this.dragEndCallback=void 0,this.hideDropPointer()))}onRowDrag(t,e){let s=this.mouseCellContext,n=this.options.dropPointerSize||0,l=this.options.rowDropOffset||0,a=!1;if(s){let r=e||o.getContext(s,t,l),d=r.side;if((this.dropPointer.align!==d||this.dropContext!==r.cell.row)&&(a=!0,this.dropPointer.align=d,this.dropContext=r.cell.row),d){let t=i.getOffsets(this.dropContext,this.editMode.board.container),{width:e,height:s}=i.getDimFromOffsets(t);(!this.dropPointer.isVisible||a)&&this.showDropPointer(t.left,t.top+("bottom"===this.dropPointer.align?s:0)-n/2,e,n)}else this.dropContext=void 0,this.hideDropPointer()}}onRowDragEnd(){let t=this.context,e=this.dropContext;this.dropPointer.align&&(t.layout.unmountRow(t),0===t.layout.rows.length&&t.layout.destroy(),e.layout.mountRow(t,(e.layout.getRowIndex(e)||0)+ +("bottom"===this.dropPointer.align)),t.cells[0]&&(r(this.editMode.board,"cellResize",{cell:t.cells[0]}),r(t,"cellChange",{cell:t.cells[0],row:t}))),this.hideDropPointer(),t.show(),r(this.editMode,"layoutChanged",{type:"rowDragEnd",target:t,board:this.editMode.board})}onCellDrag(t,e){let s=this.mouseCellContext,i=this.options.cellDropOffset||0;s||e?this.onCellDragCellCtx(t,e||o.getContext(s,t,i)):this.mouseRowContext&&this.onCellDragRowCtx(t,this.mouseRowContext)}onCellDragCellCtx(t,e){let s=this.options.dropPointerSize||0,o=e.side,n=!1;if((this.dropPointer.align!==o||this.dropContext!==e.cell)&&(n=!0,this.dropPointer.align=o,this.dropContext=e.cell),"right"===o||"left"===o){let e=i.getOffsets(this.dropContext,this.editMode.board.container),{width:l,height:a}=i.getDimFromOffsets(e);if(!this.dropPointer.isVisible||n){let i=this.dropContext.row.getRowLevelInfo(t.clientY),n=i?i.rowLevel.bottom-i.rowLevel.top:a;this.showDropPointer(e.left+("right"===o?l:0)-s/2,e.top,s,n)}}else if("top"===o||"bottom"===o){let s=i.getOffsets(this.dropContext),n=this.dropContext.row.getRowLevelInfo(s.top);n&&(0===n.index&&"top"===o||n.index===n.rowLevels.length-1&&"bottom"===o)&&this.onRowDrag(t,e)}else this.dropContext=void 0,this.hideDropPointer()}onCellDragRowCtx(t,e){let s,o,n=this.options.dropPointerSize||0,l=i.getOffsets(e),a=e.getRowLevelInfo(t.clientY);if(a)for(let e=0,r=a.rowLevel.cells.length;e<r;++e){s=a.rowLevel.cells[e],o=i.getOffsets(s);let{width:d,height:c}=i.getDimFromOffsets(o),h=this.editMode.board.container.getBoundingClientRect(),p=a.rowLevel.bottom-a.rowLevel.top;if(s.isVisible){if(c<.8*p&&o.left<=t.clientX&&o.right>=t.clientX)o.top>t.clientY||o.bottom<t.clientY&&(this.showDropPointer(o.left-h.left,o.top-h.top+c,d,p-c),this.dropPointer.align="nestedBottom",this.dropContext=s),e=r;else if(0===e&&o.left>t.clientX||e===r-1&&o.right<t.clientX){if(o.left>t.clientX);else if(o.right<t.clientX){let i=l.right-o.right;this.showDropPointer(o.left+(0===e&&o.left>t.clientX?0:d)-n/2-h.left,o.top-h.top,i>n?i:n,p||c),this.dropPointer.align="right",this.dropContext=s}e=r}}else s.isVisible||s!==this.context||(this.dropContext=void 0,this.hideDropPointer())}}onCellDragEnd(t){let s=t||this.context,o=this.dropContext;if(this.dropPointer.align&&o&&s)if(s.row.unmountCell(s),0===s.row.cells.length&&s.row.destroy(),("top"===this.dropPointer.align||"bottom"===this.dropPointer.align)&&o.getType()===e.guiElementType.row)o.layout.addRow({},void 0,(o.layout.getRowIndex(o)||0)+ +("bottom"===this.dropPointer.align)).mountCell(s,0);else if("nestedBottom"===this.dropPointer.align&&o.getType()===e.guiElementType.cell){let t=o.row,e=t.getCellIndex(o);t.unmountCell(o);let n=t.addCell({id:i.getElementId("col-nested"),layout:{rows:[{},{}]}},void 0,e);n.nestedLayout&&(n.nestedLayout.rows[0].mountCell(o),n.nestedLayout.rows[1].mountCell(s))}else o.getType()===e.guiElementType.cell&&o.row.mountCell(s,(o.row.getCellIndex(o)||0)+ +("right"===this.dropPointer.align));r(this.editMode.board,"cellResize",{cell:s}),r(s.row,"cellChange",{cell:s,row:s.row}),this.hideDropPointer(),s.show(),r(this.editMode,"layoutChanged",{type:"cellDragEnd",target:s,board:this.editMode.board})}}return c.defaultOptions={enabled:!0,rowDropOffset:30,cellDropOffset:30,dropPointerSize:16},c}),s(e,"Dashboards/Actions/Resizer.js",[e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/Layout/GUIElement.js"],e["Core/Utilities.js"]],function(t,e,s){let{merge:i,addEvent:o,createElement:n,fireEvent:l,removeEvent:a}=s;class r{static fromJSON(t,e){return new r(t,e.options)}constructor(t,e){this.editMode=t,this.options=i({},r.defaultOptions,t.options.resize,e),this.currentCell=void 0,this.isX=this.options.type.indexOf("x")>-1,this.isY=this.options.type.indexOf("y")>-1,this.isActive=!1,this.startX=0,this.tempSiblingsWidth=[],this.addSnaps()}addSnaps(){let e=this.editMode.iconsURLPrefix,s=this.options.snap.width||0,i=this.options.snap.height||0,o=this.editMode.board.container;this.snapRight=n("img",{className:t.classNames.resizeSnap+" "+t.classNames.resizeSnapX,src:e+"resize-handle.svg"},{width:s+"px",height:i+"px",left:"-9999px"},o),this.snapBottom=n("img",{className:t.classNames.resizeSnap+" "+t.classNames.resizeSnapY,src:e+"resize-handle.svg"},{width:s+"px",height:i+"px",top:"-9999px",left:"0px"},o),this.addResizeEvents()}disableResizer(){this.isActive=!1,this.currentDimension=void 0,this.currentCell=void 0,this.snapRight&&(this.snapRight.style.left="-9999px"),this.snapBottom&&(this.snapBottom.style.left="-9999px")}setSnapPositions(t){this.currentCell=t;let s=e.getOffsets(t,this.editMode.board.container),i=s.left||0,o=s.top||0,{width:n,height:l}=e.getDimFromOffsets(s),a=this.options.snap.width||0,r=this.options.snap.height||0;this.snapRight&&(this.snapRight.style.left=i+n-a+"px",this.snapRight.style.top=o+l/2-r/2+"px"),this.snapBottom&&(this.snapBottom.style.top=o+l-r+"px",this.snapBottom.style.left=i+n/2-a/2+"px")}setTempWidthSiblings(){let t=this.currentCell;if(t){let s,i,o=e.getOffsets(t),n=t.row.getRowLevelInfo(o.top),l=n&&n.rowLevel.cells||[];for(let e=0,o=l.length;e<o&&(s=(i=l[e]).container,i!==t);++e)s&&(s.style.flex="0 0 "+s.offsetWidth+"px",this.tempSiblingsWidth.push(i))}}revertSiblingsAutoWidth(){let t,e,s=this.tempSiblingsWidth;for(let i=0,o=s.length;i<o;++i)(t=s[i].container)&&(t.style.flex="1 1 0%",e=s[i]);this.tempSiblingsWidth=[],e&&(l(this.editMode.board,"cellResize",{cell:e}),l(e.row,"cellChange",{cell:e,row:e.row}))}addResizeEvents(){let t,e,s,i,n=this;n.mouseDownSnapX=t=function(t){n.isActive=!0,n.currentDimension="x",n.editMode.hideToolbars(["row","cell"]),n.setTempWidthSiblings(),n.startX=t.clientX},n.mouseDownSnapY=e=function(){n.isActive=!0,n.currentDimension="y",n.editMode.hideToolbars(["row","cell"])},n.mouseMoveSnap=s=function(t){n.isActive&&n.onMouseMove(t)},n.mouseUpSnap=i=function(){n.isActive&&(n.isActive=!1,n.currentDimension=void 0,n.revertSiblingsAutoWidth(),n.editMode.showToolbars(["row","cell"],n.currentCell),n.currentCell&&n.setSnapPositions(n.currentCell))},o(this.snapRight,"mousedown",t),o(this.snapBottom,"mousedown",e),o(document,"mousemove",s),o(document,"mouseup",i);let l=()=>{n.currentCell&&n.setSnapPositions(n.currentCell)};if("function"==typeof ResizeObserver)this.resizeObserver=new ResizeObserver(l),this.resizeObserver.observe(n.editMode.board.container);else{let t=o(window,"resize",l);o(this,"destroy",t)}}onMouseMove(t){let s=this.currentCell,i=s&&s.container,o=this.currentDimension;if(s&&i&&!((s.row.layout.board.editMode||{}).dragDrop||{}).isActive){let i=e.getOffsets(s),{width:n}=e.getDimFromOffsets(e.getOffsets(s.row));if("x"===o){let e=Math.min(t.clientX-i.left,n)/n*100+"%";s.setSize(e),this.startX=t.clientX}"y"===o&&s.setSize(void 0,t.clientY-i.top),l(this.editMode.board,"cellResize",{cell:s}),l(s.row,"cellChange",{cell:s,row:s.row}),this.setSnapPositions(s)}}destroy(){let t,e=["snapRight","snapBottom"];a(document,"mousemove"),a(document,"mouseup"),this.resizeObserver?.unobserve(this.editMode.board.container);for(let s=0,i=e.length;s<i;++s)a(t=this[e[s]],"mousedown"),t.remove()}toJSON(){let t=this.options;return{$class:"Dashboards.Action.Resizer",options:{enabled:t.enabled,styles:{minWidth:t.styles.minWidth,minHeight:t.styles.minHeight},type:t.type,snap:{width:t.snap.width,height:t.snap.height}}}}}return r.defaultOptions={enabled:!0,styles:{minWidth:20,minHeight:50},type:"xy",snap:{width:9,height:17}},r}),s(e,"Dashboards/EditMode/EditMode.js",[e["Dashboards/Layout/Cell.js"],e["Dashboards/Layout/CellHTML.js"],e["Dashboards/EditMode/EditGlobals.js"],e["Dashboards/EditMode/EditRenderer.js"],e["Dashboards/EditMode/Toolbar/CellEditToolbar.js"],e["Dashboards/EditMode/Toolbar/RowEditToolbar.js"],e["Dashboards/EditMode/SidebarPopup.js"],e["Dashboards/EditMode/EditContextMenu.js"],e["Dashboards/Actions/DragDrop.js"],e["Dashboards/Actions/Resizer.js"],e["Dashboards/EditMode/ConfirmationPopup.js"],e["Dashboards/Layout/GUIElement.js"],e["Dashboards/Globals.js"],e["Dashboards/Layout/Layout.js"],e["Core/Utilities.js"]],function(e,s,i,o,n,l,a,r,d,c,h,p,u,m,b){let{addEvent:g,createElement:f,css:C,merge:v}=b;return class{constructor(e,s){this.active=!1,this.customHTMLMode=!1,this.iconsURLPrefix="https://code.highcharts.com/dashboards/3.6.0/gfx/dashboards-icons/",this.iconsURLPrefix=s&&s.iconsURLPrefix||this.iconsURLPrefix,this.options=v({confirmationPopup:{close:{icon:this.iconsURLPrefix+"close.svg"}},contextMenu:{icon:this.iconsURLPrefix+"menu.svg"},dragDrop:{enabled:!0},enabled:!0,resize:{enabled:!0},settings:{enabled:!0},toolbars:{cell:{enabled:!0},row:{enabled:!0}},tools:{addComponentBtn:{enabled:!0,icon:this.iconsURLPre